[gnome-desktop: 10/10] Merge branch 'gobject-gnomerr'
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-desktop: 10/10] Merge branch 'gobject-gnomerr'
- Date: Thu, 6 Jan 2011 19:28:33 +0000 (UTC)
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]