diff options
author | Felipe Erias Morandeira <femorandeira@igalia.com> | 2014-04-10 13:44:03 +0200 |
---|---|---|
committer | Phaedrus Leeds <matthew.leeds@endlessm.com> | 2020-08-26 13:44:36 -0700 |
commit | ddd20afd5208ab00fa4d4bfc9f05f660ac6eb5c9 (patch) | |
tree | 2951346a6b648d04f314dd0783f2e07d3a569b2b | |
parent | ae44f790c4a9d17b228432e397f52bd6ec3d0312 (diff) | |
download | gnome-control-center-mwleeds/region-login-screen-toggle.tar.gz |
region: replace the "Login Screen" buttonmwleeds/region-login-screen-toggle
...on the title bar with joined toggles (like in Background panel) for a
clearer UI.
Note 2020-08-26: This patch has been in Endless OS since 2014. It seems
like a good UX change, so I'm proposing it upstream with some minor
changes. - mwleeds
-rw-r--r-- | panels/region/cc-region-panel.c | 36 | ||||
-rw-r--r-- | panels/region/cc-region-panel.ui | 44 |
2 files changed, 54 insertions, 26 deletions
diff --git a/panels/region/cc-region-panel.c b/panels/region/cc-region-panel.c index 9b59b23c4..d0606035b 100644 --- a/panels/region/cc-region-panel.c +++ b/panels/region/cc-region-panel.c @@ -67,7 +67,6 @@ struct _CcRegionPanel { GtkListBox *input_list; GtkBox *input_section_box; GtkSizeGroup *input_size_group; - GtkToggleButton *login_button; GtkLabel *login_label; GtkLabel *language_label; GtkListBox *language_list; @@ -84,6 +83,10 @@ struct _CcRegionPanel { GtkRevealer *restart_revealer; GtkRadioButton *same_source; + GtkWidget *hbox_selector; + GtkWidget *session_language_button; + GtkToggleButton *login_language_button; + gboolean login; gboolean login_auto_apply; GPermission *permission; @@ -175,19 +178,6 @@ cc_region_panel_finalize (GObject *object) G_OBJECT_CLASS (cc_region_panel_parent_class)->finalize (object); } -static void -cc_region_panel_constructed (GObject *object) -{ - CcRegionPanel *self = CC_REGION_PANEL (object); - - G_OBJECT_CLASS (cc_region_panel_parent_class)->constructed (object); - - if (self->permission) - cc_shell_embed_widget_in_header (cc_panel_get_shell (CC_PANEL (object)), - GTK_WIDGET (self->login_button), - GTK_POS_RIGHT); -} - static const char * cc_region_panel_get_help_uri (CcPanel *panel) { @@ -1430,8 +1420,6 @@ localed_proxy_ready (GObject *source, self->localed = proxy; - gtk_widget_set_sensitive (GTK_WIDGET (self->login_button), TRUE); - g_signal_connect_object (self->localed, "g-properties-changed", G_CALLBACK (on_localed_properties_changed), self, G_CONNECT_SWAPPED); on_localed_properties_changed (self, NULL, NULL); @@ -1442,7 +1430,7 @@ login_changed (CcRegionPanel *self) { gboolean can_acquire; - self->login = gtk_toggle_button_get_active (self->login_button); + self->login = gtk_toggle_button_get_active (self->login_language_button); gtk_widget_set_visible (GTK_WIDGET (self->login_label), self->login); can_acquire = self->permission && @@ -1474,7 +1462,7 @@ set_login_button_visibility (CcRegionPanel *self) g_object_get (self->user_manager, "has-multiple-users", &has_multiple_users, NULL); self->login_auto_apply = !has_multiple_users && g_permission_get_allowed (self->permission); - gtk_widget_set_visible (GTK_WIDGET (self->login_button), !self->login_auto_apply); + gtk_widget_set_visible (GTK_WIDGET (self->hbox_selector), !self->login_auto_apply); g_signal_handlers_disconnect_by_func (self->user_manager, set_login_button_visibility, self); } @@ -1504,13 +1492,7 @@ setup_login_button (CcRegionPanel *self) (GAsyncReadyCallback) localed_proxy_ready, self); - self->login_button = GTK_TOGGLE_BUTTON (gtk_toggle_button_new_with_mnemonic (_("Login _Screen"))); - gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (self->login_button)), - "text-button"); - gtk_widget_set_valign (GTK_WIDGET (self->login_button), GTK_ALIGN_CENTER); - gtk_widget_set_visible (GTK_WIDGET (self->login_button), FALSE); - gtk_widget_set_sensitive (GTK_WIDGET (self->login_button), FALSE); - g_signal_connect_object (self->login_button, "notify::active", + g_signal_connect_object (self->login_language_button, "notify::active", G_CALLBACK (login_changed), self, G_CONNECT_SWAPPED); g_object_get (self->user_manager, "is-loaded", &loaded, NULL); @@ -1550,7 +1532,6 @@ cc_region_panel_class_init (CcRegionPanelClass * klass) panel_class->get_help_uri = cc_region_panel_get_help_uri; - object_class->constructed = cc_region_panel_constructed; object_class->finalize = cc_region_panel_finalize; gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/region/cc-region-panel.ui"); @@ -1559,6 +1540,7 @@ cc_region_panel_class_init (CcRegionPanelClass * klass) gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, alt_next_source); gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, formats_label); gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, formats_row); + gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, hbox_selector); gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, input_list); gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, input_section_box); gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, input_size_group); @@ -1567,6 +1549,7 @@ cc_region_panel_class_init (CcRegionPanelClass * klass) gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, language_list); gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, language_row); gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, language_section_frame); + gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, login_language_button); gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, next_source); gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, next_source_label); gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, no_inputs_row); @@ -1577,6 +1560,7 @@ cc_region_panel_class_init (CcRegionPanelClass * klass) gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, restart_button); gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, restart_revealer); gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, same_source); + gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, session_language_button); gtk_widget_class_bind_template_callback (widget_class, input_row_activated_cb); gtk_widget_class_bind_template_callback (widget_class, restart_now); diff --git a/panels/region/cc-region-panel.ui b/panels/region/cc-region-panel.ui index b77914267..612dccd54 100644 --- a/panels/region/cc-region-panel.ui +++ b/panels/region/cc-region-panel.ui @@ -26,6 +26,50 @@ <property name="orientation">vertical</property> <property name="spacing">12</property> <property name="hexpand">True</property> + <child> + <object class="GtkBox" id="hbox_selector"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">horizontal</property> + <property name="homogeneous">True</property> + <property name="halign">center</property> + <property name="hexpand">True</property> + <style> + <class name="linked"/> + </style> + <child> + <object class="GtkRadioButton" id="session_language_button"> + <property name="label" translatable="yes">My Account</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="active">True</property> + <property name="draw_indicator">False</property> + </object> + </child> + <child> + <object class="GtkRadioButton" id="login_language_button"> + <property name="label" translatable="yes">Login Screen</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="active">False</property> + <property name="draw_indicator">False</property> + <property name="group">session_language_button</property> + <style> + <class name="raised"/> + </style> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> <child> <object class="GtkFrame" id="language_section_frame"> <property name="visible">True</property> |