diff --git a/demo/adw-view-switcher-demo-window.ui b/demo/adw-view-switcher-demo-window.ui index 28a0c10c833952d090db48b29bb7ce4c7ca33a47..e5465833825ad0a18885dfa6006c833eac6d4e7a 100644 --- a/demo/adw-view-switcher-demo-window.ui +++ b/demo/adw-view-switcher-demo-window.ui @@ -26,8 +26,9 @@ page1 - World + _World clock-world-symbolic + True 24 @@ -42,8 +43,9 @@ page2 - Alarm + _Alarm clock-alarm-symbolic + True 24 @@ -58,10 +60,11 @@ page3 - Stopwatch + _Stopwatch clock-stopwatch-symbolic 3 true + True 24 @@ -76,8 +79,9 @@ page4 - Timer + Tim_er clock-timer-symbolic + True 24 diff --git a/src/adw-view-switcher-button.c b/src/adw-view-switcher-button.c index 519e43bd9156eefdd284c4fbeb36940428e8566b..df5d3558a0dd7fb757171837761ca936dd0dc8ab 100644 --- a/src/adw-view-switcher-button.c +++ b/src/adw-view-switcher-button.c @@ -68,6 +68,35 @@ adw_view_switcher_button_switch_timeout (AdwViewSwitcherButton *self) return G_SOURCE_REMOVE; } +static void +update_mnemonic (AdwViewSwitcherButton *self) +{ + GtkLabel *label; + + g_assert (ADW_IS_VIEW_SWITCHER_BUTTON (self)); + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self))) { + if (self->orientation == GTK_ORIENTATION_VERTICAL) + label = self->vertical_label_active; + else + label = self->horizontal_label_active; + } else { + if (self->orientation == GTK_ORIENTATION_VERTICAL) + label = self->vertical_label_inactive; + else + label = self->horizontal_label_inactive; + } + + gtk_label_set_mnemonic_widget (self->horizontal_label_active, + (label == self->horizontal_label_active) ? GTK_WIDGET (self) : NULL); + gtk_label_set_mnemonic_widget (self->horizontal_label_inactive, + (label == self->horizontal_label_inactive) ? GTK_WIDGET (self) : NULL); + gtk_label_set_mnemonic_widget (self->vertical_label_active, + (label == self->vertical_label_active) ? GTK_WIDGET (self) : NULL); + gtk_label_set_mnemonic_widget (self->vertical_label_inactive, + (label == self->vertical_label_inactive) ? GTK_WIDGET (self) : NULL); +} + static void active_changed_cb (AdwViewSwitcherButton *self) { @@ -80,6 +109,8 @@ active_changed_cb (AdwViewSwitcherButton *self) gtk_stack_set_visible_child (self->horizontal_label_stack, GTK_WIDGET (self->horizontal_label_inactive)); gtk_stack_set_visible_child (self->vertical_label_stack, GTK_WIDGET (self->vertical_label_inactive)); } + + update_mnemonic (self); } static void @@ -123,6 +154,8 @@ set_orientation (AdwViewSwitcherButton *self, GTK_WIDGET (self->orientation == GTK_ORIENTATION_VERTICAL ? self->vertical_box : self->horizontal_box)); + + update_mnemonic (self); } static gchar * @@ -368,11 +401,6 @@ adw_view_switcher_button_init (AdwViewSwitcherButton *self) gtk_widget_set_focus_on_click (GTK_WIDGET (self), FALSE); - gtk_label_set_mnemonic_widget (self->horizontal_label_active, GTK_WIDGET (self)); - gtk_label_set_mnemonic_widget (self->horizontal_label_inactive, GTK_WIDGET (self)); - gtk_label_set_mnemonic_widget (self->vertical_label_active, GTK_WIDGET (self)); - gtk_label_set_mnemonic_widget (self->vertical_label_inactive, GTK_WIDGET (self)); - active_changed_cb (self); }