[gnome-desktop: 10/10] Merge branch 'gobject-gnomerr'



commit c67f7efbec78d93517916137f63fe5f487e1f77b
Merge: ab0ff1d 46d48ab
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Thu Jan 6 20:26:20 2011 +0100

    Merge branch 'gobject-gnomerr'
    
    Conflicts:
    	libgnome-desktop/gnome-rr.c

 configure.ac                                    |    1 +
 libgnome-desktop/Makefile.am                    |   59 ++-
 libgnome-desktop/gnome-bg.c                     |   18 +-
 libgnome-desktop/gnome-desktop-thumbnail.c      |    5 +-
 libgnome-desktop/gnome-rr-config.c              |  842 ++++++++++++-----------
 libgnome-desktop/gnome-rr-config.h              |  188 +++---
 libgnome-desktop/gnome-rr-labeler.c             |  180 +++--
 libgnome-desktop/gnome-rr-labeler.h             |   14 +-
 libgnome-desktop/gnome-rr-output-info.c         |  246 +++++++
 libgnome-desktop/gnome-rr-private.h             |   35 +-
 libgnome-desktop/gnome-rr.c                     |  583 ++++++++++++----
 libgnome-desktop/gnome-rr.h                     |   43 +-
 libgnome-desktop/gnome-thumbnail-pixbuf-utils.c |    4 +-
 13 files changed, 1461 insertions(+), 757 deletions(-)
---
diff --cc libgnome-desktop/gnome-rr-config.c
index 9a262c1,f5172d3..3dbfdc4
--- a/libgnome-desktop/gnome-rr-config.c
+++ b/libgnome-desktop/gnome-rr-config.c
@@@ -635,38 -712,54 +712,54 @@@ gnome_rr_config_load_filename (GnomeRRC
  }
  
  static void
- outputs_free (GnomeOutputInfo **outputs)
+ gnome_rr_config_class_init (GnomeRRConfigClass *klass)
  {
-     int i;
+     GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
  
-     g_assert (outputs != NULL);
+     g_type_class_add_private (klass, sizeof (GnomeRROutputInfoPrivate));
  
-     for (i = 0; outputs[i] != NULL; ++i)
- 	output_free (outputs[i]);
+     gobject_class->set_property = gnome_rr_config_set_property;
+     gobject_class->finalize = gnome_rr_config_finalize;
  
-     g_free (outputs);
+     g_object_class_install_property (gobject_class, PROP_SCREEN,
+ 				     g_param_spec_object ("screen", "Screen", "The GnomeRRScreen this config applies to", GNOME_TYPE_RR_SCREEN,
+ 							  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
  }
  
- void
- gnome_rr_config_free (GnomeRRConfig *config)
+ GnomeRRConfig *
+ gnome_rr_config_new_current (GnomeRRScreen *screen, GError **error)
  {
-     g_return_if_fail (config != NULL);
-     outputs_free (config->outputs);
-     
-     g_free (config);
+     GnomeRRConfig *self = g_object_new (GNOME_TYPE_RR_CONFIG, "screen", screen, NULL);
+ 
+     if (gnome_rr_config_load_current (self, error))
+       return self;
+     else
+       {
+ 	g_object_unref (self);
+ 	return NULL;
+       }
  }
  
- static void
- configurations_free (GnomeRRConfig **configurations)
+ GnomeRRConfig *
+ gnome_rr_config_new_stored (GnomeRRScreen *screen, GError **error)
  {
-     int i;
+     GnomeRRConfig *self = g_object_new (GNOME_TYPE_RR_CONFIG, "screen", screen, NULL);
+     char *filename;
+     gboolean success;
  
-     g_assert (configurations != NULL);
+     filename = gnome_rr_config_get_intended_filename ();
  
-     for (i = 0; configurations[i] != NULL; ++i)
- 	gnome_rr_config_free (configurations[i]);
+     success = gnome_rr_config_load_filename (self, filename, error);
  
-     g_free (configurations);
+     g_free (filename);
+ 
 -    if (success);
++    if (success)
+       return self;
+     else
+       {
+ 	g_object_unref (self);
+ 	return NULL;
+       }
  }
  
  static gboolean
diff --cc libgnome-desktop/gnome-rr-labeler.c
index ebf9905,18eb793..e477d36
--- a/libgnome-desktop/gnome-rr-labeler.c
+++ b/libgnome-desktop/gnome-rr-labeler.c
@@@ -368,14 -409,16 +409,16 @@@ create_label_windows (GnomeRRLabeler *l
  
  	created_window_for_clone = FALSE;
  
- 	for (i = 0; i < labeler->num_outputs; i++) {
- 		if (!created_window_for_clone && labeler->config->outputs[i]->on) {
- 			labeler->windows[i] = create_label_window (labeler, labeler->config->outputs[i], labeler->palette + i);
+ 	outputs = gnome_rr_config_get_outputs (labeler->priv->config);
  
- 			if (labeler->config->clone)
+ 	for (i = 0; i < labeler->priv->num_outputs; i++) {
 -		if (!created_window_for_clone && gnome_rr_output_info_get_active (outputs[i])) {
++		if (!created_window_for_clone && gnome_rr_output_info_is_active (outputs[i])) {
+ 			labeler->priv->windows[i] = create_label_window (labeler, outputs[i], labeler->priv->palette + i);
+ 
+ 			if (gnome_rr_config_get_clone (labeler->priv->config))
  				created_window_for_clone = TRUE;
  		} else
- 			labeler->windows[i] = NULL;
+ 			labeler->priv->windows[i] = NULL;
  	}
  }
  
diff --cc libgnome-desktop/gnome-rr.c
index 6b8379b,55b54ca..6208123
--- a/libgnome-desktop/gnome-rr.c
+++ b/libgnome-desktop/gnome-rr.c
@@@ -720,16 -736,127 +736,127 @@@ gnome_rr_screen_initable_init (GInitabl
  }
  
  void
- gnome_rr_screen_destroy (GnomeRRScreen *screen)
+ gnome_rr_screen_initable_iface_init (GInitableIface *iface)
+ {
+     iface->init = gnome_rr_screen_initable_init;
+ }
+ 
+ void
+ gnome_rr_screen_finalize (GObject *gobject)
+ {
+     GnomeRRScreen *screen = GNOME_RR_SCREEN (gobject);
+ 
+     gdk_window_remove_filter (screen->priv->gdk_root, screen_on_event, screen);
+ 
+     screen_info_free (screen->priv->info);
+ 
+     G_OBJECT_CLASS (gnome_rr_screen_parent_class)->finalize (gobject);
+ }
+ 
+ void
+ gnome_rr_screen_set_property (GObject *gobject, guint property_id, const GValue *value, GParamSpec *property)
+ {
+     GnomeRRScreen *self = GNOME_RR_SCREEN (gobject);
+     GnomeRRScreenPrivate *priv = self->priv;
+ 
+     switch (property_id)
+     {
+     case SCREEN_PROP_GDK_SCREEN:
+         priv->gdk_screen = g_value_get_object (value);
+         priv->gdk_root = gdk_screen_get_root_window (priv->gdk_screen);
 -        priv->xroot = gdk_x11_drawable_get_xid (priv->gdk_root);
++        priv->xroot = gdk_x11_window_get_xid (priv->gdk_root);
+         priv->xdisplay = GDK_SCREEN_XDISPLAY (priv->gdk_screen);
+         priv->xscreen = gdk_x11_screen_get_xscreen (priv->gdk_screen);
+         return;
+     default:
+         G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, property);
+         return;
+     }
+ }
+ 
+ void
+ gnome_rr_screen_get_property (GObject *gobject, guint property_id, GValue *value, GParamSpec *property)
  {
- 	g_return_if_fail (screen != NULL);
+     GnomeRRScreen *self = GNOME_RR_SCREEN (gobject);
+     GnomeRRScreenPrivate *priv = self->priv;
+ 
+     switch (property_id)
+     {
+     case SCREEN_PROP_GDK_SCREEN:
+         g_value_set_object (value, priv->gdk_screen);
+         return;
+     default:
+         G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, property);
+         return;
+     }
+ }
+ 
+ void
+ gnome_rr_screen_class_init (GnomeRRScreenClass *klass)
+ {
+     GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+     g_type_class_add_private (klass, sizeof (GnomeRRScreenPrivate));
+ 
+     gobject_class->set_property = gnome_rr_screen_set_property;
+     gobject_class->get_property = gnome_rr_screen_get_property;
+     gobject_class->finalize = gnome_rr_screen_finalize;
+ 
+     g_object_class_install_property(
+             gobject_class,
+             SCREEN_PROP_GDK_SCREEN,
+             g_param_spec_object (
+                     "gdk-screen",
+                     "GDK Screen",
+                     "The GDK Screen represented by this GnomeRRScreen",
+                     GDK_TYPE_SCREEN,
+                     G_PARAM_READWRITE |
+ 		    G_PARAM_CONSTRUCT_ONLY |
+ 		    G_PARAM_STATIC_STRINGS)
+             );
+ 
+     screen_signals[SCREEN_CHANGED] = g_signal_new("changed",
+             G_TYPE_FROM_CLASS (gobject_class),
+             G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
+             G_STRUCT_OFFSET (GnomeRRScreenClass, changed),
+             NULL,
+             NULL,
+             g_cclosure_marshal_VOID__VOID,
+             G_TYPE_NONE,
+ 	    0);
+ }
  
- 	gdk_window_remove_filter (screen->gdk_root, screen_on_event, screen);
+ void
+ gnome_rr_screen_init (GnomeRRScreen *self)
+ {
+     GnomeRRScreenPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GNOME_TYPE_RR_SCREEN, GnomeRRScreenPrivate);
+     self->priv = priv;
  
- 	screen_info_free (screen->info);
- 	screen->info = NULL;
+     priv->gdk_screen = NULL;
+     priv->gdk_root = NULL;
+     priv->xdisplay = NULL;
+     priv->xroot = None;
+     priv->xscreen = NULL;
+     priv->info = NULL;
+     priv->rr_major_version = 0;
+     priv->rr_minor_version = 0;
+ }
  
- 	g_free (screen);
+ /**
+  * gnome_rr_screen_new:
+  * Creates a new #GnomeRRScreen instance
+  *
+  * @screen: the #GdkScreen on which to operate
+  * @error: will be set if XRandR is not supported
+  *
+  * Returns: a new #GnomeRRScreen instance or NULL if screen could not be created,
+  * for instance if the driver does not support Xrandr 1.2
+  */
+ GnomeRRScreen *
+ gnome_rr_screen_new (GdkScreen *screen,
+ 		     GError **error)
+ {
+     _gnome_desktop_init_i18n ();
+     return g_initable_new (GNOME_TYPE_RR_SCREEN, NULL, error, "gdk-screen", screen, NULL);
  }
  
  void



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]