keyboard: Turn CcXkbModifierDialog into a subpage

Doing so, the navigation in Settings will be more consistent, see
https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/3020
This commit is contained in:
Automeris naranja 2024-06-14 18:27:40 -03:00 committed by Felipe Borges
parent a670744eba
commit 3e5982c6f8
8 changed files with 127 additions and 128 deletions

View file

@ -30,7 +30,7 @@
#include "cc-keyboard-resources.h"
#include "cc-keyboard-shortcut-dialog.h"
#include "cc-input-list-box.h"
#include "cc-xkb-modifier-dialog.h"
#include "cc-xkb-modifier-page.h"
#include "cc-list-row.h"
#include "keyboard-shortcuts.h"
@ -97,25 +97,25 @@ static const CcXkbModifier COMPOSE_MODIFIER = {
};
static void
show_modifier_dialog (CcKeyboardPanel *self, const CcXkbModifier *modifier)
show_modifier_page (CcKeyboardPanel *self, const CcXkbModifier *modifier)
{
AdwDialog *dialog;
AdwNavigationPage *page;
dialog = ADW_DIALOG (cc_xkb_modifier_dialog_new (self->input_source_settings, modifier));
page = ADW_NAVIGATION_PAGE (cc_xkb_modifier_page_new (self->input_source_settings, modifier));
adw_dialog_present (dialog, GTK_WIDGET (self));
cc_panel_push_subpage (CC_PANEL (self), page);
}
static void
alt_chars_row_activated (CcKeyboardPanel *self)
{
show_modifier_dialog (self, &LV3_MODIFIER);
show_modifier_page (self, &LV3_MODIFIER);
}
static void
compose_row_activated (CcKeyboardPanel *self)
{
show_modifier_dialog (self, &COMPOSE_MODIFIER);
show_modifier_page (self, &COMPOSE_MODIFIER);
}
static void

View file

@ -8,93 +8,96 @@
<property name="page_increment">200</property>
</object>
<template class="CcKeyboardPanel" parent="CcPanel">
<property name="child">
<object class="AdwToolbarView">
<child type="top">
<object class="AdwHeaderBar"/>
</child>
<property name="content">
<object class="AdwPreferencesPage">
<child>
<object class="AdwPreferencesGroup">
<property name="title" translatable="yes">Input Sources</property>
<property name="description" translatable="yes">Includes keyboard layouts and input methods</property>
<child>
<object class="CcInputListBox" id="input_list">
<property name="vexpand">False</property>
</object>
</child>
</object>
<child type="subpage">
<object class="AdwNavigationPage">
<property name="title" translatable="yes">Keyboard</property>
<child>
<object class="AdwToolbarView">
<child type="top">
<object class="AdwHeaderBar"/>
</child>
<child>
<object class="AdwPreferencesGroup" id="input_switch_group">
<property name="title" translatable="yes">Input Source Switching</property>
<property name="content">
<object class="AdwPreferencesPage">
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Use the _same source for all windows</property>
<property name="use-underline">True</property>
<property name="activatable-widget">same_source</property>
<child type="prefix">
<object class="GtkCheckButton" id="same_source">
<property name="valign">center</property>
<object class="AdwPreferencesGroup">
<property name="title" translatable="yes">Input Sources</property>
<property name="description" translatable="yes">Includes keyboard layouts and input methods</property>
<child>
<object class="CcInputListBox" id="input_list">
<property name="vexpand">False</property>
</object>
</child>
</object>
</child>
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Switch input sources _individually for each window</property>
<property name="use-underline">True</property>
<property name="activatable-widget">per_window_source</property>
<child type="prefix">
<object class="GtkCheckButton" id="per_window_source">
<property name="active" bind-source="same_source" bind-flags="sync-create|invert-boolean"/>
<property name="valign">center</property>
<property name="group">same_source</property>
<object class="AdwPreferencesGroup" id="input_switch_group">
<property name="title" translatable="yes">Input Source Switching</property>
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Use the _same source for all windows</property>
<property name="use-underline">True</property>
<property name="activatable-widget">same_source</property>
<child type="prefix">
<object class="GtkCheckButton" id="same_source">
<property name="valign">center</property>
</object>
</child>
</object>
</child>
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Switch input sources _individually for each window</property>
<property name="use-underline">True</property>
<property name="activatable-widget">per_window_source</property>
<child type="prefix">
<object class="GtkCheckButton" id="per_window_source">
<property name="active" bind-source="same_source" bind-flags="sync-create|invert-boolean"/>
<property name="valign">center</property>
<property name="group">same_source</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="AdwPreferencesGroup">
<property name="title" translatable="yes">Special Character Entry</property>
<property name="description" translatable="yes">Methods for entering symbols and letter variants using the keyboard</property>
<child>
<object class="CcListRow" id="alt_chars_row">
<property name="title" translatable="yes">A_lternate Characters Key</property>
<property name="show-arrow">True</property>
<property name="secondary-label" translatable="no">Right Alt</property>
<signal name="activated" handler="alt_chars_row_activated" object="CcKeyboardPanel" swapped="yes"/>
</object>
</child>
<child>
<object class="CcListRow" id="compose_row">
<property name="title" translatable="yes">_Compose Key</property>
<property name="show-arrow">True</property>
<signal name="activated" handler="compose_row_activated" object="CcKeyboardPanel" swapped="yes"/>
</object>
</child>
</object>
</child>
<child>
<object class="AdwPreferencesGroup">
<property name="title" translatable="yes">Keyboard Shortcuts</property>
<child>
<object class="CcListRow" id="common_shortcuts_row">
<property name="title" translatable="yes">_View and Customize Shortcuts</property>
<property name="show-arrow">True</property>
<signal name="activated" handler="keyboard_shortcuts_activated" object="CcKeyboardPanel" swapped="yes"/>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="AdwPreferencesGroup">
<property name="title" translatable="yes">Special Character Entry</property>
<property name="description" translatable="yes">Methods for entering symbols and letter variants using the keyboard</property>
<child>
<object class="CcListRow" id="alt_chars_row">
<property name="title" translatable="yes">A_lternate Characters Key</property>
<property name="show-arrow">True</property>
<property name="secondary-label" translatable="no">Right Alt</property>
<signal name="activated" handler="alt_chars_row_activated" object="CcKeyboardPanel" swapped="yes" />
</object>
</child>
<child>
<object class="CcListRow" id="compose_row">
<property name="title" translatable="yes">_Compose Key</property>
<property name="show-arrow">True</property>
<signal name="activated" handler="compose_row_activated" object="CcKeyboardPanel" swapped="yes" />
</object>
</child>
</object>
</child>
<child>
<object class="AdwPreferencesGroup">
<property name="title" translatable="yes">Keyboard Shortcuts</property>
<child>
<object class="CcListRow" id="common_shortcuts_row">
<property name="title" translatable="yes">_View and Customize Shortcuts</property>
<property name="show-arrow">True</property>
<signal name="activated" handler="keyboard_shortcuts_activated" object="CcKeyboardPanel" swapped="yes" />
</object>
</child>
</object>
</child>
</property>
</object>
</property>
</child>
</object>
</property>
</child>
</template>
</interface>

View file

@ -1,4 +1,4 @@
/* cc-xkb-modifier-dialog.c
/* cc-xkb-modifier-page.c
*
* Copyright 2019 Bastien Nocera <hadess@hadess.net>
*
@ -21,11 +21,11 @@
#include <glib/gi18n.h>
#include <adwaita.h>
#include "cc-xkb-modifier-dialog.h"
#include "cc-xkb-modifier-page.h"
struct _CcXkbModifierDialog
struct _CcXkbModifierPage
{
AdwDialog parent_instance;
AdwNavigationPage parent_instance;
AdwPreferencesPage *xkb_modifier_page;
GtkSwitch *enabled_switch;
@ -38,7 +38,7 @@ struct _CcXkbModifierDialog
GSList *radio_group;
};
G_DEFINE_TYPE (CcXkbModifierDialog, cc_xkb_modifier_dialog, ADW_TYPE_DIALOG)
G_DEFINE_TYPE (CcXkbModifierPage, cc_xkb_modifier_page, ADW_TYPE_NAVIGATION_PAGE)
static const CcXkbOption*
get_xkb_option_from_name (const CcXkbModifier *modifier, const gchar* name)
@ -56,8 +56,8 @@ get_xkb_option_from_name (const CcXkbModifier *modifier, const gchar* name)
}
static GtkCheckButton *
get_radio_button_from_xkb_option_name (CcXkbModifierDialog *self,
const gchar *name)
get_radio_button_from_xkb_option_name (CcXkbModifierPage *self,
const gchar *name)
{
gchar *xkb_option;
GSList *l;
@ -73,7 +73,7 @@ get_radio_button_from_xkb_option_name (CcXkbModifierDialog *self,
}
static void
update_active_radio (CcXkbModifierDialog *self)
update_active_radio (CcXkbModifierPage *self)
{
g_auto(GStrv) options = NULL;
GtkCheckButton *rightalt_radio;
@ -113,8 +113,8 @@ update_active_radio (CcXkbModifierDialog *self)
}
static void
set_xkb_option (CcXkbModifierDialog *self,
gchar *xkb_option)
set_xkb_option (CcXkbModifierPage *self,
gchar *xkb_option)
{
g_autoptr(GPtrArray) array = NULL;
g_auto(GStrv) options = NULL;
@ -153,8 +153,8 @@ set_xkb_option (CcXkbModifierDialog *self,
}
static void
on_active_radio_changed_cb (CcXkbModifierDialog *self,
GtkCheckButton *radio)
on_active_radio_changed_cb (CcXkbModifierPage *self,
GtkCheckButton *radio)
{
gchar *xkb_option;
@ -169,15 +169,15 @@ on_active_radio_changed_cb (CcXkbModifierDialog *self,
}
static void
on_xkb_options_changed_cb (CcXkbModifierDialog *self)
on_xkb_options_changed_cb (CcXkbModifierPage *self)
{
if (self->modifier == NULL)
update_active_radio (self);
}
static gboolean
enable_switch_changed_cb (CcXkbModifierDialog *self,
gboolean state)
enable_switch_changed_cb (CcXkbModifierPage *self,
gboolean state)
{
gchar *xkb_option;
GSList *l;
@ -205,38 +205,36 @@ enable_switch_changed_cb (CcXkbModifierDialog *self,
}
static void
cc_xkb_modifier_dialog_finalize (GObject *object)
cc_xkb_modifier_page_finalize (GObject *object)
{
CcXkbModifierDialog *self = (CcXkbModifierDialog *)object;
CcXkbModifierPage *self = (CcXkbModifierPage *)object;
g_clear_object (&self->input_source_settings);
G_OBJECT_CLASS (cc_xkb_modifier_dialog_parent_class)->finalize (object);
G_OBJECT_CLASS (cc_xkb_modifier_page_parent_class)->finalize (object);
}
static void
cc_xkb_modifier_dialog_class_init (CcXkbModifierDialogClass *klass)
cc_xkb_modifier_page_class_init (CcXkbModifierPageClass *klass)
{
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = cc_xkb_modifier_dialog_finalize;
object_class->finalize = cc_xkb_modifier_page_finalize;
gtk_widget_class_add_binding_action (widget_class, GDK_KEY_Escape, 0, "window.close", NULL);
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/keyboard/cc-xkb-modifier-page.ui");
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/keyboard/cc-xkb-modifier-dialog.ui");
gtk_widget_class_bind_template_child (widget_class, CcXkbModifierDialog, xkb_modifier_page);
gtk_widget_class_bind_template_child (widget_class, CcXkbModifierDialog, enabled_switch);
gtk_widget_class_bind_template_child (widget_class, CcXkbModifierDialog, options_group);
gtk_widget_class_bind_template_child (widget_class, CcXkbModifierDialog, switch_group);
gtk_widget_class_bind_template_child (widget_class, CcXkbModifierDialog, switch_row);
gtk_widget_class_bind_template_child (widget_class, CcXkbModifierPage, xkb_modifier_page);
gtk_widget_class_bind_template_child (widget_class, CcXkbModifierPage, enabled_switch);
gtk_widget_class_bind_template_child (widget_class, CcXkbModifierPage, options_group);
gtk_widget_class_bind_template_child (widget_class, CcXkbModifierPage, switch_group);
gtk_widget_class_bind_template_child (widget_class, CcXkbModifierPage, switch_row);
gtk_widget_class_bind_template_callback (widget_class, enable_switch_changed_cb);
}
static void
add_radio_buttons (CcXkbModifierDialog *self)
add_radio_buttons (CcXkbModifierPage *self)
{
g_autoptr (GSList) group = NULL;
GtkWidget *row, *radio_button, *last_button = NULL;
@ -270,7 +268,7 @@ add_radio_buttons (CcXkbModifierDialog *self)
}
static void
cc_xkb_modifier_dialog_init (CcXkbModifierDialog *self)
cc_xkb_modifier_page_init (CcXkbModifierPage *self)
{
gtk_widget_init_template (GTK_WIDGET (self));
@ -283,17 +281,17 @@ cc_xkb_modifier_dialog_init (CcXkbModifierDialog *self)
self, G_CONNECT_SWAPPED);
}
CcXkbModifierDialog *
cc_xkb_modifier_dialog_new (GSettings *input_settings,
const CcXkbModifier *modifier)
CcXkbModifierPage *
cc_xkb_modifier_page_new (GSettings *input_settings,
const CcXkbModifier *modifier)
{
CcXkbModifierDialog *self;
CcXkbModifierPage *self;
self = g_object_new (CC_TYPE_XKB_MODIFIER_DIALOG, NULL);
self = g_object_new (CC_TYPE_XKB_MODIFIER_PAGE, NULL);
self->input_source_settings = g_object_ref (input_settings);
self->modifier = modifier;
adw_dialog_set_title (ADW_DIALOG (self), gettext (modifier->title));
adw_navigation_page_set_title (ADW_NAVIGATION_PAGE (self), gettext (modifier->title));
adw_preferences_row_set_title (ADW_PREFERENCES_ROW (self->switch_row), gettext (modifier->title));
adw_preferences_page_set_description (self->xkb_modifier_page, gettext (modifier->description));
gtk_widget_set_visible (GTK_WIDGET (self->switch_group), modifier->default_option == NULL);

View file

@ -1,4 +1,4 @@
/* cc-xkb-modifier-dialog.h
/* cc-xkb-modifier-page.h
*
* Copyright 2019 Bastien Nocera <hadess@hadess.net>
*
@ -40,10 +40,10 @@ typedef struct
gchar *default_option;
} CcXkbModifier;
#define CC_TYPE_XKB_MODIFIER_DIALOG (cc_xkb_modifier_dialog_get_type())
G_DECLARE_FINAL_TYPE (CcXkbModifierDialog, cc_xkb_modifier_dialog, CC, XKB_MODIFIER_DIALOG, AdwWindow)
#define CC_TYPE_XKB_MODIFIER_PAGE (cc_xkb_modifier_page_get_type())
G_DECLARE_FINAL_TYPE (CcXkbModifierPage, cc_xkb_modifier_page, CC, XKB_MODIFIER_PAGE, AdwNavigationPage)
CcXkbModifierDialog *cc_xkb_modifier_dialog_new (GSettings *input_settings, const CcXkbModifier*);
CcXkbModifierPage *cc_xkb_modifier_page_new (GSettings *input_settings, const CcXkbModifier*);
gboolean xcb_modifier_transform_binding_to_label (GValue*, GVariant*, gpointer);

View file

@ -1,8 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<template class="CcXkbModifierDialog" parent="AdwDialog">
<property name="content-width">500</property>
<property name="content-height">600</property>
<template class="CcXkbModifierPage" parent="AdwNavigationPage">
<property name="child">
<object class="AdwToolbarView">
<child type="top">
@ -19,7 +17,7 @@
<child>
<object class="GtkSwitch" id="enabled_switch">
<property name="valign">center</property>
<signal name="state-set" handler="enable_switch_changed_cb" object="CcXkbModifierDialog" swapped="yes"/>
<signal name="state-set" handler="enable_switch_changed_cb" object="CcXkbModifierPage" swapped="yes"/>
</object>
</child>
</object>

View file

@ -2,7 +2,7 @@
<gresources>
<gresource prefix="/org/gnome/control-center/keyboard">
<file preprocess="xml-stripblanks">enter-keyboard-shortcut.svg</file>
<file preprocess="xml-stripblanks">cc-xkb-modifier-dialog.ui</file>
<file preprocess="xml-stripblanks">cc-xkb-modifier-page.ui</file>
<file preprocess="xml-stripblanks">cc-keyboard-shortcut-row.ui</file>
<file preprocess="xml-stripblanks">cc-keyboard-shortcut-dialog.ui</file>
<file preprocess="xml-stripblanks">cc-keyboard-panel.ui</file>

View file

@ -60,7 +60,7 @@ keyboard_shortcuts_dep = declare_dependency(
)
sources = files(
'cc-xkb-modifier-dialog.c',
'cc-xkb-modifier-page.c',
'cc-keyboard-shortcut-row.c',
'cc-keyboard-shortcut-group.c',
'cc-keyboard-shortcut-dialog.c',

View file

@ -57,7 +57,7 @@ panels/keyboard/cc-keyboard-shortcut-editor.c
panels/keyboard/cc-keyboard-shortcut-editor.ui
panels/keyboard/cc-keyboard-shortcut-group.c
panels/keyboard/cc-keyboard-shortcut-row.ui
panels/keyboard/cc-xkb-modifier-dialog.c
panels/keyboard/cc-xkb-modifier-page.c
panels/keyboard/gnome-keyboard-panel.desktop.in
panels/keyboard/keyboard-shortcuts.c
panels/mouse/cc-mouse-panel.ui