[gimp/gimp-2-8] app: Fix on canvas widgets ignoring clicks from tablets - bug 614441
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/gimp-2-8] app: Fix on canvas widgets ignoring clicks from tablets - bug 614441
- Date: Mon, 10 Feb 2014 21:32:46 +0000 (UTC)
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]