summaryrefslogtreecommitdiff
path: root/capplets/keybindings
diff options
context:
space:
mode:
authorColomban Wendling <[email protected]>2017-03-23 12:30:48 +0100
committerraveit65 <[email protected]>2017-04-03 19:26:41 +0200
commit5d928407022afa0fd9e1c6798f4c93ba54418b4e (patch)
tree35f671308c2913242d8e3664808a3566c6463619 /capplets/keybindings
parent87705011a2e827a2e06be99da09923a3dab03dc2 (diff)
downloadmate-control-center-5d928407022afa0fd9e1c6798f4c93ba54418b4e.tar.bz2
mate-control-center-5d928407022afa0fd9e1c6798f4c93ba54418b4e.tar.xz
keybindings: Allow to select an installed application through a dialog
Diffstat (limited to 'capplets/keybindings')
-rw-r--r--capplets/keybindings/mate-keybinding-properties.c31
-rw-r--r--capplets/keybindings/mate-keybinding-properties.ui74
2 files changed, 93 insertions, 12 deletions
diff --git a/capplets/keybindings/mate-keybinding-properties.c b/capplets/keybindings/mate-keybinding-properties.c
index 9d548569..78900537 100644
--- a/capplets/keybindings/mate-keybinding-properties.c
+++ b/capplets/keybindings/mate-keybinding-properties.c
@@ -1828,6 +1828,30 @@ selection_changed (GtkTreeSelection *selection, gpointer data)
}
static void
+cb_app_dialog_response (GtkWidget *dialog, gint response_id, gpointer data)
+{
+ if (response_id == GTK_RESPONSE_OK)
+ {
+ GAppInfo *info;
+ const gchar *custom_name;
+
+ info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (dialog));
+
+ gtk_entry_set_text (custom_shortcut_command_entry,
+ g_app_info_get_executable (info));
+ /* if name isn't set yet, use the associated one */
+ custom_name = gtk_entry_get_text (GTK_ENTRY (custom_shortcut_name_entry));
+ if (! custom_name || custom_name[0] == '\0')
+ gtk_entry_set_text (custom_shortcut_name_entry,
+ g_app_info_get_display_name (info));
+
+ g_object_unref (info);
+ }
+
+ gtk_widget_hide (dialog);
+}
+
+static void
setup_dialog (GtkBuilder *builder, GSettings *marco_settings)
{
GtkCellRenderer *renderer;
@@ -1835,6 +1859,7 @@ setup_dialog (GtkBuilder *builder, GSettings *marco_settings)
GtkWidget *widget;
GtkTreeView *treeview;
GtkTreeSelection *selection;
+ GtkWidget *button;
treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder,
"shortcut_treeview"));
@@ -1916,6 +1941,12 @@ setup_dialog (GtkBuilder *builder, GSettings *marco_settings)
GTK_RESPONSE_OK);
gtk_window_set_transient_for (GTK_WINDOW (custom_shortcut_dialog),
GTK_WINDOW (widget));
+ button = _gtk_builder_get_widget (builder, "custom-shortcut-command-button");
+ widget = _gtk_builder_get_widget (builder, "custom-shortcut-application-dialog");
+ g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_dialog_run), widget);
+ g_signal_connect (widget, "response", G_CALLBACK (cb_app_dialog_response), NULL);
+ widget = gtk_app_chooser_dialog_get_widget (GTK_APP_CHOOSER_DIALOG (widget));
+ gtk_app_chooser_widget_set_show_all (GTK_APP_CHOOSER_WIDGET (widget), TRUE);
}
static void
diff --git a/capplets/keybindings/mate-keybinding-properties.ui b/capplets/keybindings/mate-keybinding-properties.ui
index 2eae2c1d..65ed5059 100644
--- a/capplets/keybindings/mate-keybinding-properties.ui
+++ b/capplets/keybindings/mate-keybinding-properties.ui
@@ -100,29 +100,53 @@
</packing>
</child>
<child>
- <object class="GtkEntry" id="custom-shortcut-command-entry">
+ <object class="GtkLabel" id="label14">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hexpand">True</property>
- <property name="invisible_char">•</property>
- <property name="activates_default">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">C_ommand:</property>
+ <property name="use_underline">True</property>
</object>
<packing>
- <property name="left_attach">1</property>
+ <property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="label14">
+ <object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="halign">start</property>
- <property name="label" translatable="yes">C_ommand:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">custom-shortcut-command-entry</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkEntry" id="custom-shortcut-command-entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="invisible_char">•</property>
+ <property name="activates_default">True</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="custom-shortcut-command-button">
+ <property name="label" translatable="yes">Browse applications...</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
</object>
<packing>
- <property name="left_attach">0</property>
+ <property name="left_attach">1</property>
<property name="top_attach">1</property>
</packing>
</child>
@@ -147,6 +171,32 @@
<action-widget response="-5">okbutton1</action-widget>
</action-widgets>
</object>
+ <object class="GtkAppChooserDialog" id="custom-shortcut-application-dialog">
+ <property name="can_focus">False</property>
+ <property name="modal">True</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="type_hint">dialog</property>
+ <property name="transient_for">custom-shortcut-dialog</property>
+ <property name="content_type">*/*</property>
+ <child internal-child="vbox">
+ <object class="GtkBox">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox">
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
<object class="GtkDialog" id="mate-keybinding-dialog">
<property name="name">mate-keybinding-dialog</property>
<property name="can_focus">False</property>