[Xfce4-commits] <xfce4-appfinder:master> Do nothing with the Tab event during competion (bug #10187).
Nick Schermer
noreply at xfce.org
Sun Jul 28 21:56:02 CEST 2013
Updating branch refs/heads/master
to 8ef194e8fbf1652b27cf26c0a519c9be08631964 (commit)
from 1f0729aa3e21810f40a80cfed1b476200bd2556d (commit)
commit 8ef194e8fbf1652b27cf26c0a519c9be08631964
Author: Nick Schermer <nick at xfce.org>
Date: Sun Jul 28 21:52:48 2013 +0200
Do nothing with the Tab event during competion (bug #10187).
Else we focus the Close button, while it is common to use the key
to finalize the completion.
src/appfinder-window.c | 73 +++++++++++++++++++++++++++++++-----------------
1 file changed, 47 insertions(+), 26 deletions(-)
diff --git a/src/appfinder-window.c b/src/appfinder-window.c
index f656a1c..64603f4 100644
--- a/src/appfinder-window.c
+++ b/src/appfinder-window.c
@@ -1257,52 +1257,73 @@ xfce_appfinder_window_entry_activate (GtkEditable *entry,
static gboolean
-xfce_appfinder_window_entry_key_press_event (GtkWidget *entry,
- GdkEventKey *event,
- XfceAppfinderWindow *window)
+xfce_appfinder_window_pointer_is_grabbed (GtkWidget *widget)
{
- gboolean expand, is_expanded;
#if GTK_CHECK_VERSION (3, 0, 0)
GdkDeviceManager *device_manager;
GList *devices, *li;
GdkDisplay *display;
+ gboolean is_grabbed = FALSE;
+
+ display = gtk_widget_get_display (widget);
+ device_manager = gdk_display_get_device_manager (display);
+ devices = gdk_device_manager_list_devices (device_manager, GDK_DEVICE_TYPE_MASTER);
+
+ for (li = devices; li != NULL; li = li->next)
+ {
+ if (gdk_device_get_source (li->data) == GDK_SOURCE_MOUSE
+ && gdk_display_device_is_grabbed (display, li->data))
+ {
+ is_grabbed = TRUE;
+ break;
+ }
+ }
+
+ g_list_free (devices);
+
+ return is_grabbed;
+#else
+ return gdk_pointer_is_grabbed ();
#endif
+}
+
- if (event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_Down)
+
+static gboolean
+xfce_appfinder_window_entry_key_press_event (GtkWidget *entry,
+ GdkEventKey *event,
+ XfceAppfinderWindow *window)
+{
+ gboolean expand;
+ gboolean is_expanded;
+
+ if (event->keyval == GDK_KEY_Up
+ || event->keyval == GDK_KEY_Down)
{
expand = (event->keyval == GDK_KEY_Down);
is_expanded = gtk_widget_get_visible (window->paned);
if (is_expanded != expand)
{
/* don't break entry completion navigation in collapsed mode */
- if (!is_expanded)
+ if (!is_expanded
+ && xfce_appfinder_window_pointer_is_grabbed (entry))
{
-#if GTK_CHECK_VERSION (3, 0, 0)
- display = gtk_widget_get_display (entry);
- device_manager = gdk_display_get_device_manager (display);
- devices = gdk_device_manager_list_devices (device_manager, GDK_DEVICE_TYPE_MASTER);
-
- for (li = devices; li != NULL; li = li->next)
- {
- if (gdk_device_get_source (li->data) == GDK_SOURCE_MOUSE
- && gdk_display_device_is_grabbed (display, li->data))
- {
- g_list_free (devices);
- return FALSE;
- }
- }
-
- g_list_free (devices);
-#else
- if (gdk_pointer_is_grabbed ())
- return FALSE;
-#endif
+ /* window is still collapsed and the pointer is grabbed
+ * by the popup menu, do nothing with the event */
+ return FALSE;
}
xfce_appfinder_window_set_expanded (window, expand);
return TRUE;
}
}
+ else if (event->keyval == GDK_KEY_Tab
+ && !gtk_widget_get_visible (window->paned)
+ && xfce_appfinder_window_pointer_is_grabbed (entry))
+ {
+ /* don't tab to the close button */
+ return TRUE;
+ }
return FALSE;
}
More information about the Xfce4-commits
mailing list