[gimp] 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] app: Fix on canvas widgets ignoring clicks from tablets - bug 614441
- Date: Mon, 10 Feb 2014 21:29:19 +0000 (UTC)
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]