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:
parent
a670744eba
commit
3e5982c6f8
8 changed files with 127 additions and 128 deletions
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
|
@ -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);
|
||||
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue