keyboard: make it a template class

To allow a much easier porting to the new layout, the keyboard
panel is now a template class. That has various implications on
the code organization:

 - The keyboard-shortcuts.c was responsible for filling the shortcuts.
   Because it relied on the GtkBuilder of the panel, most of its code
   was moved to the CcKeyboardPanel class.
 - The unused code from the keyboard panel class had to be removed in
   order to make it work again.
 - All the hash tables and widgets are now part of the CcKeyboardPanel
   structure.
 - The interface elements have a single entry point.

https://bugzilla.gnome.org/show_bug.cgi?id=769063
This commit is contained in:
Georges Basile Stavracas Neto 2016-07-22 15:26:10 -03:00
parent dfa01baa9d
commit d940d7bb5d
6 changed files with 1981 additions and 2024 deletions

View file

@ -21,6 +21,7 @@
#define __CC_KEYBOARD_ITEM_H #define __CC_KEYBOARD_ITEM_H
#include <glib-object.h> #include <glib-object.h>
#include <gtk/gtk.h>
G_BEGIN_DECLS G_BEGIN_DECLS

File diff suppressed because it is too large Load diff

View file

@ -23,6 +23,7 @@
#define _CC_KEYBOARD_PANEL_H #define _CC_KEYBOARD_PANEL_H
#include <shell/cc-panel.h> #include <shell/cc-panel.h>
#include <gtk/gtk.h>
G_BEGIN_DECLS G_BEGIN_DECLS

View file

@ -8,10 +8,11 @@
<property name="step_increment">200</property> <property name="step_increment">200</property>
<property name="page_increment">200</property> <property name="page_increment">200</property>
</object> </object>
<object class="GtkDialog" id="custom-shortcut-dialog"> <object class="GtkDialog" id="custom_shortcut_dialog">
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="type_hint">dialog</property> <property name="type_hint">dialog</property>
<property name="use_header_bar">1</property> <property name="use_header_bar">1</property>
<property name="resizable">False</property>
<child internal-child="headerbar"> <child internal-child="headerbar">
<object class="GtkHeaderBar" id="dialog-header-bar"> <object class="GtkHeaderBar" id="dialog-header-bar">
<property name="visible">True</property> <property name="visible">True</property>
@ -19,7 +20,7 @@
<property name="title" translatable="yes">Custom Shortcut</property> <property name="title" translatable="yes">Custom Shortcut</property>
<property name="show_close_button">False</property> <property name="show_close_button">False</property>
<child> <child>
<object class="GtkButton" id="custom-shortcut-cancel-button"> <object class="GtkButton" id="custom_shortcut_cancel_button">
<property name="label" translatable="yes">_Cancel</property> <property name="label" translatable="yes">_Cancel</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
@ -36,7 +37,7 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="custom-shortcut-ok-button"> <object class="GtkButton" id="custom_shortcut_ok_button">
<property name="label" translatable="yes">_Add</property> <property name="label" translatable="yes">_Add</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
@ -81,7 +82,7 @@
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="label" translatable="yes">_Name:</property> <property name="label" translatable="yes">_Name:</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="mnemonic_widget">custom-shortcut-name-entry</property> <property name="mnemonic_widget">custom_shortcut_name_entry</property>
</object> </object>
<packing> <packing>
<property name="left_attach">0</property> <property name="left_attach">0</property>
@ -95,7 +96,7 @@
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="label" translatable="yes">C_ommand:</property> <property name="label" translatable="yes">C_ommand:</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="mnemonic_widget">custom-shortcut-command-entry</property> <property name="mnemonic_widget">custom_shortcut_command_entry</property>
</object> </object>
<packing> <packing>
<property name="left_attach">0</property> <property name="left_attach">0</property>
@ -103,12 +104,13 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkEntry" id="custom-shortcut-name-entry"> <object class="GtkEntry" id="custom_shortcut_name_entry">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="hexpand">True</property> <property name="hexpand">True</property>
<property name="invisible_char">•</property> <property name="invisible_char">•</property>
<property name="activates_default">True</property> <property name="activates_default">True</property>
<signal name="changed" handler="shortcut_entry_changed" object="CcKeyboardPanel" swapped="no" />
</object> </object>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
@ -116,12 +118,13 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkEntry" id="custom-shortcut-command-entry"> <object class="GtkEntry" id="custom_shortcut_command_entry">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="hexpand">True</property> <property name="hexpand">True</property>
<property name="invisible_char">•</property> <property name="invisible_char">•</property>
<property name="activates_default">True</property> <property name="activates_default">True</property>
<signal name="changed" handler="shortcut_entry_changed" object="CcKeyboardPanel" swapped="no" />
</object> </object>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
@ -145,10 +148,15 @@
</object> </object>
</child> </child>
<action-widgets> <action-widgets>
<action-widget response="-6">custom-shortcut-cancel-button</action-widget> <action-widget response="-6">custom_shortcut_cancel_button</action-widget>
<action-widget response="-5">custom-shortcut-ok-button</action-widget> <action-widget response="-5">custom_shortcut_ok_button</action-widget>
</action-widgets> </action-widgets>
</object> </object>
<template class="CcKeyboardPanel" parent="CcPanel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">12</property>
<child>
<object class="GtkBox" id="shortcuts_page"> <object class="GtkBox" id="shortcuts_page">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
@ -178,7 +186,10 @@
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="headers_visible">False</property> <property name="headers_visible">False</property>
<child internal-child="selection"> <child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection1"/> <object class="GtkTreeSelection" id="treeview-selection1">
<property name="mode">browse</property>
<signal name="changed" handler="section_selection_changed" object="CcKeyboardPanel" swapped="no" />
</object>
</child> </child>
</object> </object>
</child> </child>
@ -190,7 +201,7 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkScrolledWindow" id="actions_swindow"> <object class="GtkScrolledWindow">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="hexpand">True</property> <property name="hexpand">True</property>
@ -204,7 +215,9 @@
<property name="headers_visible">False</property> <property name="headers_visible">False</property>
<property name="rules_hint">True</property> <property name="rules_hint">True</property>
<child internal-child="selection"> <child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection2"/> <object class="GtkTreeSelection" id="treeview-selection2">
<signal name="changed" handler="shortcut_selection_changed" object="remove_toolbutton" swapped="no" />
</object>
</child> </child>
</object> </object>
</child> </child>
@ -215,7 +228,7 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkToolbar" id="shortcut-toolbar"> <object class="GtkToolbar" id="shortcut_toolbar">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -224,13 +237,14 @@
<class name="inline-toolbar"/> <class name="inline-toolbar"/>
</style> </style>
<child> <child>
<object class="GtkToolButton" id="add-toolbutton"> <object class="GtkToolButton" id="add_toolbutton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="use_action_appearance">False</property> <property name="use_action_appearance">False</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="icon_name">list-add-symbolic</property> <property name="icon_name">list-add-symbolic</property>
<property name="label" translatable="yes">Add Shortcut</property> <property name="label" translatable="yes">Add Shortcut</property>
<signal name="clicked" handler="add_button_clicked" object="CcKeyboardPanel" swapped="no" />
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -238,13 +252,14 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkToolButton" id="remove-toolbutton"> <object class="GtkToolButton" id="remove_toolbutton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="use_action_appearance">False</property> <property name="use_action_appearance">False</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="icon_name">list-remove-symbolic</property> <property name="icon_name">list-remove-symbolic</property>
<property name="label" translatable="yes">Remove Shortcut</property> <property name="label" translatable="yes">Remove Shortcut</property>
<signal name="clicked" handler="remove_button_clicked" object="CcKeyboardPanel" swapped="no" />
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -265,7 +280,7 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkBox"> <object class="GtkBox" id="hbox1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="border_width">5</property> <property name="border_width">5</property>
@ -301,5 +316,6 @@
</packing> </packing>
</child> </child>
</object> </object>
</child>
</template>
</interface> </interface>

File diff suppressed because it is too large Load diff

View file

@ -79,6 +79,14 @@ enum
SECTION_N_COLUMNS SECTION_N_COLUMNS
}; };
void keyboard_shortcuts_init (CcPanel *panel, GtkBuilder *builder); gchar* find_free_settings_path (GSettings *settings);
gboolean keyboard_shortcuts_set_section (CcPanel *panel, const char *section);
void keyboard_shortcuts_dispose (CcPanel *panel); void fill_xkb_options_shortcuts (GtkTreeModel *model);
void setup_keyboard_options (GtkListStore *store);
gboolean is_valid_binding (guint keyval,
GdkModifierType mask,
guint keycode);
KeyList* parse_keylist_from_file (const gchar *path);