[gnome-control-center/extensible-shell] [display] Only start doing stuff when the panel is active
- From: William Jon McCann <mccann src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-control-center/extensible-shell] [display] Only start doing stuff when the panel is active
- Date: Mon, 18 Jan 2010 10:33:42 +0000 (UTC)
commit 26e9ffab847458c7a0a2ccc8ae63a536df3a2d65
Author: William Jon McCann <jmccann redhat com>
Date: Mon Jan 18 05:30:27 2010 -0500
[display] Only start doing stuff when the panel is active
This prevents the problem where the labeller etc start before
the panel is active.
capplets/display/cc-display-page.c | 86 +++++++++++++++++++++++-------------
1 files changed, 55 insertions(+), 31 deletions(-)
---
diff --git a/capplets/display/cc-display-page.c b/capplets/display/cc-display-page.c
index 5b56538..4785071 100644
--- a/capplets/display/cc-display-page.c
+++ b/capplets/display/cc-display-page.c
@@ -2384,17 +2384,6 @@ select_current_output_from_dialog_position (CcDisplayPage *page)
rebuild_gui (page);
}
-/* This is a GtkWidget show handler. We wait for the page
- * to be mapped, and then we select the output which corresponds to the
- * monitor on which the dialog is being shown.
- */
-static void
-on_show (GtkWidget *widget,
- CcDisplayPage *page)
-{
- select_current_output_from_dialog_position (page);
-}
-
static void
on_apply_button_clicked (GtkButton *button,
CcDisplayPage *page)
@@ -2468,24 +2457,6 @@ setup_page (CcDisplayPage *page)
return;
}
- page->priv->screen = gnome_rr_screen_new (gdk_screen_get_default (),
- (GnomeRRScreenChanged) on_screen_changed,
- page,
- &error);
- if (page->priv->screen == NULL) {
- error_message (NULL,
- _("Could not get screen information"),
- error->message);
- g_error_free (error);
- g_object_unref (builder);
- return;
- }
-
- g_signal_connect_after (page,
- "show",
- G_CALLBACK (on_show),
- page);
-
page->priv->current_monitor_event_box = WID ("current_monitor_event_box");
page->priv->current_monitor_label = WID ("current_monitor_label");
@@ -2580,7 +2551,6 @@ setup_page (CcDisplayPage *page)
G_CALLBACK (on_apply_button_clicked),
page);
- on_screen_changed (page->priv->screen, page);
widget = WID ("main_vbox");
gtk_widget_reparent (widget, GTK_WIDGET (page));
@@ -2611,9 +2581,63 @@ cc_display_page_constructor (GType type,
}
static void
+start_working (CcDisplayPage *page)
+{
+ GError *error;
+
+ error = NULL;
+ page->priv->screen = gnome_rr_screen_new (gdk_screen_get_default (),
+ (GnomeRRScreenChanged) on_screen_changed,
+ page,
+ &error);
+ if (page->priv->screen == NULL) {
+ error_message (NULL,
+ _("Could not get screen information"),
+ error->message);
+ g_error_free (error);
+ return;
+ }
+ on_screen_changed (page->priv->screen, page);
+
+ select_current_output_from_dialog_position (page);
+
+}
+
+static void
+stop_working (CcDisplayPage *page)
+{
+ gnome_rr_screen_destroy (page->priv->screen);
+ page->priv->screen = NULL;
+
+ if (page->priv->labeler != NULL) {
+ gnome_rr_labeler_hide (page->priv->labeler);
+ g_object_unref (page->priv->labeler);
+ page->priv->labeler = NULL;
+ }
+}
+
+static void
+cc_display_page_active_changed (CcPage *base_page,
+ gboolean is_active)
+{
+ CcDisplayPage *page = CC_DISPLAY_PAGE (base_page);
+
+ if (is_active)
+ start_working (page);
+ else
+ stop_working (page);
+
+ CC_PAGE_CLASS (cc_display_page_parent_class)->active_changed (base_page, is_active);
+
+}
+
+static void
cc_display_page_class_init (CcDisplayPageClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ CcPageClass *page_class = CC_PAGE_CLASS (klass);
+
+ page_class->active_changed = cc_display_page_active_changed;
object_class->get_property = cc_display_page_get_property;
object_class->set_property = cc_display_page_set_property;
@@ -2641,7 +2665,7 @@ cc_display_page_finalize (GObject *object)
g_return_if_fail (page->priv != NULL);
- gnome_rr_screen_destroy (page->priv->screen);
+ stop_working (page);
G_OBJECT_CLASS (cc_display_page_parent_class)->finalize (object);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]