[gtk/wip/matthiasc/shortcut-4: 97/139] filechooser: Trigger the location popup via bindings
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/matthiasc/shortcut-4: 97/139] filechooser: Trigger the location popup via bindings
- Date: Thu, 26 Mar 2020 02:45:00 +0000 (UTC)
commit b17a49067b7094be1d3f3623125a2c887e6923a5
Author: Benjamin Otte <otte redhat com>
Date: Sun Aug 26 18:39:51 2018 +0200
filechooser: Trigger the location popup via bindings
Simplifies code quite a bit.
gtk/gtkfilechooserwidget.c | 137 ++++++++---------------------------------
gtk/ui/gtkfilechooserwidget.ui | 10 ---
2 files changed, 24 insertions(+), 123 deletions(-)
---
diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c
index 9bdc144329..7d3a3d3925 100644
--- a/gtk/gtkfilechooserwidget.c
+++ b/gtk/gtkfilechooserwidget.c
@@ -1190,125 +1190,22 @@ places_sidebar_show_error_message_cb (GtkPlacesSidebar *sidebar,
}
static gboolean
-should_trigger_location_entry (GtkFileChooserWidget *impl,
- guint keyval,
- GdkModifierType state,
- const char **string)
+trigger_location_entry (GtkWidget *widget,
+ GVariant *arguments,
+ gpointer unused)
{
+ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (widget);
GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl);
- GdkModifierType no_text_input_mask;
if (priv->operation_mode == OPERATION_MODE_SEARCH)
return FALSE;
- no_text_input_mask =
- gtk_widget_get_modifier_mask (GTK_WIDGET (impl), GDK_MODIFIER_INTENT_NO_TEXT_INPUT);
-
- if (state & no_text_input_mask)
- return FALSE;
-
- switch (keyval)
- {
- case GDK_KEY_slash:
- case GDK_KEY_KP_Divide:
- *string = "/";
- return TRUE;
-
- case GDK_KEY_period:
- *string = ".";
- return TRUE;
-
- case GDK_KEY_asciitilde:
- *string = "~";
- return TRUE;
-
- default:
- return FALSE;
- }
-}
-
-/* Handles key press events on the file list, so that we can trap Enter to
- * activate the default button on our own. Also, checks to see if “/” has been
- * pressed.
- */
-static gboolean
-treeview_key_press_cb (GtkEventControllerKey *controller,
- guint keyval,
- guint keycode,
- GdkModifierType state,
- gpointer data)
-{
- GtkFileChooserWidget *impl = (GtkFileChooserWidget *) data;
- GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl);
- const char *string;
-
- if (should_trigger_location_entry (impl, keyval, state, &string) &&
- (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN ||
- priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER))
- {
- location_popup_handler (impl, string);
- return GDK_EVENT_STOP;
- }
-
- if ((keyval == GDK_KEY_Return ||
- keyval == GDK_KEY_ISO_Enter ||
- keyval == GDK_KEY_KP_Enter ||
- keyval == GDK_KEY_space ||
- keyval == GDK_KEY_KP_Space) &&
- !(state & gtk_accelerator_get_default_mod_mask ()) &&
+ if (priv->action != GTK_FILE_CHOOSER_ACTION_OPEN &&
priv->action != GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)
- {
- gtk_widget_activate_default (GTK_WIDGET (impl));
- return GDK_EVENT_STOP;
- }
-
- if (keyval == GDK_KEY_Escape &&
- priv->operation_mode == OPERATION_MODE_SEARCH)
- {
- return gtk_event_controller_key_forward (controller,
- GTK_WIDGET (gtk_search_entry_get_text_widget
(GTK_SEARCH_ENTRY (priv->search_entry))));
- }
-
- return GDK_EVENT_PROPAGATE;
-}
-
-static gboolean
-widget_key_press_cb (GtkEventControllerKey *controller,
- guint keyval,
- guint keycode,
- GdkModifierType state,
- gpointer data)
-{
- GtkFileChooserWidget *impl = (GtkFileChooserWidget *) data;
- GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl);
- gboolean handled = FALSE;
- const char *string;
-
- if (should_trigger_location_entry (impl, keyval, state, &string))
- {
- if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN ||
- priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)
- {
- location_popup_handler (impl, string);
- handled = TRUE;
- }
- }
- else
- {
- priv->starting_search = TRUE;
- if (gtk_event_controller_key_forward (controller, priv->search_entry))
- {
- gtk_widget_grab_focus (priv->search_entry);
-
- if (priv->operation_mode != OPERATION_MODE_SEARCH &&
- priv->starting_search)
- operation_mode_set (impl, OPERATION_MODE_SEARCH);
-
- handled = TRUE;
- }
- }
+ return FALSE;
- return handled;
+ location_popup_handler (impl, g_variant_get_string (arguments, NULL));
+ return TRUE;
}
/* Callback used from gtk_tree_selection_selected_foreach(); adds a bookmark for
@@ -7834,6 +7731,22 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class)
GDK_KEY_p, GDK_MOD1_MASK,
"places-shortcut",
NULL);
+ gtk_widget_class_add_binding (widget_class,
+ GDK_KEY_slash, 0,
+ trigger_location_entry,
+ "s", "/");
+ gtk_widget_class_add_binding (widget_class,
+ GDK_KEY_KP_Divide, 0,
+ trigger_location_entry,
+ "s", "/");
+ gtk_widget_class_add_binding (widget_class,
+ GDK_KEY_period, 0,
+ trigger_location_entry,
+ "s", ".");
+ gtk_widget_class_add_binding (widget_class,
+ GDK_KEY_asciitilde, 0,
+ trigger_location_entry,
+ "s", "~");
for (i = 0; i < G_N_ELEMENTS (quick_bookmark_keyvals); i++)
gtk_widget_class_add_binding_signal (widget_class,
@@ -7923,8 +7836,6 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class)
gtk_widget_class_bind_template_callback (widget_class, rename_file_end);
gtk_widget_class_bind_template_callback (widget_class, click_cb);
gtk_widget_class_bind_template_callback (widget_class, long_press_cb);
- gtk_widget_class_bind_template_callback (widget_class, treeview_key_press_cb);
- gtk_widget_class_bind_template_callback (widget_class, widget_key_press_cb);
gtk_widget_class_set_css_name (widget_class, I_("filechooser"));
diff --git a/gtk/ui/gtkfilechooserwidget.ui b/gtk/ui/gtkfilechooserwidget.ui
index cb2a8b4c7b..244784a9a0 100644
--- a/gtk/ui/gtkfilechooserwidget.ui
+++ b/gtk/ui/gtkfilechooserwidget.ui
@@ -159,11 +159,6 @@
<signal name="pressed" handler="click_cb" swapped="no"/>
</object>
</child>
- <child>
- <object class="GtkEventControllerKey">
- <signal name="key-pressed" handler="treeview_key_press_cb"
swapped="no"/>
- </object>
- </child>
<signal name="query-tooltip"
handler="file_list_query_tooltip_cb" swapped="no"/>
<signal name="row-activated" handler="list_row_activated"
swapped="no"/>
<signal name="keynav-failed"
handler="browse_files_tree_view_keynav_failed_cb"/>
@@ -366,11 +361,6 @@
</child>
</object>
</child>
- <child>
- <object class="GtkEventControllerKey">
- <signal name="key-pressed" handler="widget_key_press_cb" swapped="no"/>
- </object>
- </child>
</template>
<object class="GtkSizeGroup" id="browse_path_bar_size_group">
<property name="mode">vertical</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]