[gimp/gimp-2-8] app: Fix on canvas widgets ignoring clicks from tablets - bug 614441



commit 405e50c759d5d0576cf1b0dbdbed0820673919b8
Author: Daniel Sabo <DanielSabo gmail com>
Date:   Sat Dec 14 12:56:20 2013 -0800

    app: Fix on canvas widgets ignoring clicks from tablets - bug 614441
    
    Disable extended input events when the cursor moves to a child of
    the canvas widget. Otherwise GTK will try and fail to deliver an
    extended event to the child widget, and end up sending it to the
    canvas instead.
    
    (cherry picked from commit a059c0e7eb73329e1e2661de2b44864531ea1a6b)

 app/display/gimpdisplayshell-tool-events.c |   18 +++++++++++++++++-
 app/display/gimpdisplayshell.h             |    2 ++
 2 files changed, 19 insertions(+), 1 deletions(-)
---
diff --git a/app/display/gimpdisplayshell-tool-events.c b/app/display/gimpdisplayshell-tool-events.c
index 6abaab4..3139fc8 100644
--- a/app/display/gimpdisplayshell-tool-events.c
+++ b/app/display/gimpdisplayshell-tool-events.c
@@ -321,7 +321,9 @@ gimp_display_shell_canvas_tool_events (GtkWidget        *canvas,
             display, gimp_print_event (event));
 
   /*  Find out what device the event occurred upon  */
-  if (! gimp->busy && gimp_devices_check_change (gimp, event))
+  if (! gimp->busy &&
+      ! shell->inferior_ignore_mode &&
+      gimp_devices_check_change (gimp, event))
     {
       gimp_display_shell_check_device_cursor (shell);
       device_changed = TRUE;
@@ -349,6 +351,13 @@ gimp_display_shell_canvas_tool_events (GtkWidget        *canvas,
       {
         GdkEventCrossing *cevent = (GdkEventCrossing *) event;
 
+        if (shell->inferior_ignore_mode)
+          {
+            shell->inferior_ignore_mode = FALSE;
+            gtk_widget_set_extension_events (shell->canvas,
+                                             GDK_EXTENSION_EVENTS_ALL);
+          }
+
         if (cevent->mode != GDK_CROSSING_NORMAL)
           return TRUE;
 
@@ -370,6 +379,13 @@ gimp_display_shell_canvas_tool_events (GtkWidget        *canvas,
       {
         GdkEventCrossing *cevent = (GdkEventCrossing *) event;
 
+        if (cevent->detail == GDK_NOTIFY_INFERIOR)
+          {
+            shell->inferior_ignore_mode = TRUE;
+            gtk_widget_set_extension_events (shell->canvas,
+                                             GDK_EXTENSION_EVENTS_NONE);
+          }
+
         if (cevent->mode != GDK_CROSSING_NORMAL)
           return TRUE;
 
diff --git a/app/display/gimpdisplayshell.h b/app/display/gimpdisplayshell.h
index e2e3815..62d21e1 100644
--- a/app/display/gimpdisplayshell.h
+++ b/app/display/gimpdisplayshell.h
@@ -175,6 +175,8 @@ struct _GimpDisplayShell
   gboolean           keyboard_grabbed;
   guint32            keyboard_grab_time;
 
+  gboolean           inferior_ignore_mode;
+
   gboolean           space_pressed;
   gboolean           space_release_pending;
   const gchar       *space_shaded_tool;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]