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



commit a059c0e7eb73329e1e2661de2b44864531ea1a6b
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.

 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 ec54e96..0fe9d7d 100644
--- a/app/display/gimpdisplayshell-tool-events.c
+++ b/app/display/gimpdisplayshell-tool-events.c
@@ -339,7 +339,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;
@@ -367,6 +369,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;
 
@@ -388,6 +397,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 c9b1058..e5074bb 100644
--- a/app/display/gimpdisplayshell.h
+++ b/app/display/gimpdisplayshell.h
@@ -174,6 +174,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]