diff options
author | Takao Fujiwara <tfujiwar@redhat.com> | 2009-09-10 11:06:08 +0900 |
---|---|---|
committer | Takao Fujiwara <tfujiwar@redhat.com> | 2009-09-10 11:06:08 +0900 |
commit | 6def173499c2f0da3306046ebe711757bfbe9d9e (patch) | |
tree | d0f4f0d030de2c96c15af95dd2e19ff9c4135ba4 /gui | |
parent | 7c29be20c07c7200f2bff89883f9d5436fc0dadc (diff) | |
download | gdm-6def173499c2f0da3306046ebe711757bfbe9d9e.tar.gz |
Focus on login dialog after language dialog or layout dialog is closed.
Fixes bug #592183.
Reviewed by Ray Strode, Brian Cameron
Diffstat (limited to 'gui')
-rw-r--r-- | gui/simple-greeter/gdm-greeter-panel.c | 35 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-greeter-panel.h | 2 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-greeter-session.c | 11 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-language-option-widget.c | 12 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-language-option-widget.h | 1 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-layout-option-widget.c | 12 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-layout-option-widget.h | 1 |
7 files changed, 74 insertions, 0 deletions
diff --git a/gui/simple-greeter/gdm-greeter-panel.c b/gui/simple-greeter/gdm-greeter-panel.c index 0ae1c545..dbdef291 100644 --- a/gui/simple-greeter/gdm-greeter-panel.c +++ b/gui/simple-greeter/gdm-greeter-panel.c @@ -77,6 +77,7 @@ enum { LANGUAGE_SELECTED, LAYOUT_SELECTED, SESSION_SELECTED, + DIALOG_HIDDEN, NUMBER_OF_SIGNALS }; @@ -456,6 +457,17 @@ gdm_greeter_panel_class_init (GdmGreeterPanelClass *klass) G_TYPE_NONE, 1, G_TYPE_STRING); + signals[DIALOG_HIDDEN] = + g_signal_new ("dialog-hidden", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GdmGreeterPanelClass, dialog_hidden), + NULL, + NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); + g_object_class_install_property (object_class, PROP_MONITOR, g_param_spec_int ("monitor", @@ -488,6 +500,14 @@ on_language_activated (GdmLanguageOptionWidget *widget, } static void +on_language_dialog_hidden(GdmLanguageOptionWidget *widget, + GdmGreeterPanel *panel) +{ + + g_signal_emit (panel, signals[DIALOG_HIDDEN], 0); +} + +static void on_layout_activated (GdmLayoutOptionWidget *widget, GdmGreeterPanel *panel) { @@ -507,6 +527,15 @@ on_layout_activated (GdmLayoutOptionWidget *widget, g_free (layout); } + +static void +on_layout_dialog_hidden (GdmLayoutOptionWidget *widget, + GdmGreeterPanel *panel) +{ + + g_signal_emit (panel, signals[DIALOG_HIDDEN], 0); +} + static void on_session_activated (GdmSessionOptionWidget *widget, GdmGreeterPanel *panel) @@ -580,6 +609,9 @@ gdm_greeter_panel_init (GdmGreeterPanel *panel) g_signal_connect (G_OBJECT (panel->priv->language_option_widget), "language-activated", G_CALLBACK (on_language_activated), panel); + g_signal_connect (G_OBJECT (panel->priv->language_option_widget), + "dialog-hidden", + G_CALLBACK (on_language_dialog_hidden), panel); gtk_box_pack_start (GTK_BOX (panel->priv->option_hbox), panel->priv->language_option_widget, FALSE, FALSE, 6); gdm_profile_end ("creating option widget"); @@ -587,6 +619,9 @@ gdm_greeter_panel_init (GdmGreeterPanel *panel) g_signal_connect (G_OBJECT (panel->priv->layout_option_widget), "layout-activated", G_CALLBACK (on_layout_activated), panel); + g_signal_connect (G_OBJECT (panel->priv->layout_option_widget), + "dialog-hidden", + G_CALLBACK (on_layout_dialog_hidden), panel); gtk_box_pack_start (GTK_BOX (panel->priv->option_hbox), panel->priv->layout_option_widget, FALSE, FALSE, 6); panel->priv->session_option_widget = gdm_session_option_widget_new (); diff --git a/gui/simple-greeter/gdm-greeter-panel.h b/gui/simple-greeter/gdm-greeter-panel.h index 07cca3ff..1e637f50 100644 --- a/gui/simple-greeter/gdm-greeter-panel.h +++ b/gui/simple-greeter/gdm-greeter-panel.h @@ -53,6 +53,8 @@ typedef struct void (* session_selected) (GdmGreeterPanel *panel, const char *text); + + void (* dialog_hidden) (GdmGreeterPanel *panel); } GdmGreeterPanelClass; GType gdm_greeter_panel_get_type (void); diff --git a/gui/simple-greeter/gdm-greeter-session.c b/gui/simple-greeter/gdm-greeter-session.c index fe2de48c..167b6938 100644 --- a/gui/simple-greeter/gdm-greeter-session.c +++ b/gui/simple-greeter/gdm-greeter-session.c @@ -249,6 +249,12 @@ on_select_layout (GdmGreeterSession *session, } static void +on_dialog_hidden (GdmGreeterSession *session) +{ + gtk_window_present (GTK_WINDOW (session->priv->login_window)); +} + +static void on_select_user (GdmGreeterLoginWindow *login_window, const char *text, GdmGreeterSession *session) @@ -349,6 +355,11 @@ toggle_panel (GdmGreeterSession *session, G_CALLBACK (on_select_session), session); + g_signal_connect_swapped (session->priv->panel, + "dialog-hidden", + G_CALLBACK (on_dialog_hidden), + session); + gtk_widget_show (session->priv->panel); } else { gtk_widget_destroy (session->priv->panel); diff --git a/gui/simple-greeter/gdm-language-option-widget.c b/gui/simple-greeter/gdm-language-option-widget.c index ff8445f1..72a5dcb2 100644 --- a/gui/simple-greeter/gdm-language-option-widget.c +++ b/gui/simple-greeter/gdm-language-option-widget.c @@ -50,6 +50,7 @@ struct GdmLanguageOptionWidgetPrivate enum { LANGUAGE_ACTIVATED, + DIALOG_HIDDEN, NUMBER_OF_SIGNALS }; @@ -94,6 +95,7 @@ gdm_language_option_widget_hide_dialog (GdmLanguageOptionWidget *widget) { gtk_widget_destroy (widget->priv->dialog); widget->priv->dialog = NULL; + g_signal_emit (G_OBJECT (widget), signals[DIALOG_HIDDEN], 0); } static void @@ -170,6 +172,16 @@ gdm_language_option_widget_class_init (GdmLanguageOptionWidgetClass *klass) G_TYPE_NONE, 0); + signals[DIALOG_HIDDEN] = g_signal_new ("dialog-hidden", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GdmLanguageOptionWidgetClass, dialog_hidden), + NULL, + NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); + g_type_class_add_private (klass, sizeof (GdmLanguageOptionWidgetPrivate)); } diff --git a/gui/simple-greeter/gdm-language-option-widget.h b/gui/simple-greeter/gdm-language-option-widget.h index 2d3e3c7d..fdbc4e13 100644 --- a/gui/simple-greeter/gdm-language-option-widget.h +++ b/gui/simple-greeter/gdm-language-option-widget.h @@ -48,6 +48,7 @@ typedef struct GdmRecentOptionWidgetClass parent_class; void (* language_activated) (GdmLanguageOptionWidget *widget); + void (* dialog_hidden) (GdmLanguageOptionWidget *widget); } GdmLanguageOptionWidgetClass; GType gdm_language_option_widget_get_type (void); diff --git a/gui/simple-greeter/gdm-layout-option-widget.c b/gui/simple-greeter/gdm-layout-option-widget.c index a6eb1b94..50eb276b 100644 --- a/gui/simple-greeter/gdm-layout-option-widget.c +++ b/gui/simple-greeter/gdm-layout-option-widget.c @@ -50,6 +50,7 @@ struct GdmLayoutOptionWidgetPrivate enum { LAYOUT_ACTIVATED, + DIALOG_HIDDEN, NUMBER_OF_SIGNALS }; @@ -97,6 +98,7 @@ gdm_layout_option_widget_hide_dialog (GdmLayoutOptionWidget *widget) { gtk_widget_destroy (widget->priv->dialog); widget->priv->dialog = NULL; + g_signal_emit (G_OBJECT (widget), signals [DIALOG_HIDDEN], 0); } static void @@ -173,6 +175,16 @@ gdm_layout_option_widget_class_init (GdmLayoutOptionWidgetClass *klass) G_TYPE_NONE, 0); + signals[DIALOG_HIDDEN] = g_signal_new ("dialog-hidden", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GdmLayoutOptionWidgetClass, dialog_hidden), + NULL, + NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); + g_type_class_add_private (klass, sizeof (GdmLayoutOptionWidgetPrivate)); } diff --git a/gui/simple-greeter/gdm-layout-option-widget.h b/gui/simple-greeter/gdm-layout-option-widget.h index 8dba3b6a..abe460e2 100644 --- a/gui/simple-greeter/gdm-layout-option-widget.h +++ b/gui/simple-greeter/gdm-layout-option-widget.h @@ -48,6 +48,7 @@ typedef struct GdmRecentOptionWidgetClass parent_class; void (* layout_activated) (GdmLayoutOptionWidget *widget); + void (* dialog_hidden) (GdmLayoutOptionWidget *widget); } GdmLayoutOptionWidgetClass; GType gdm_layout_option_widget_get_type (void); |