[gimp/nieldg/remove-keyboard-grab] app/display: Remove keyboard grab
- From: Niels De Graef <nielsdg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/nieldg/remove-keyboard-grab] app/display: Remove keyboard grab
- Date: Tue, 14 Dec 2021 21:38:32 +0000 (UTC)
commit 6c3b6118fba1eec6bab62b2d10bc67381581ec1e
Author: Niels De Graef <nielsdegraef gmail com>
Date: Tue Dec 14 22:36:43 2021 +0100
app/display: Remove keyboard grab
Remove `gimp_display_shell_keyboard_grab()` and ...ungrab(), as there
doesn't seem to be any good reason to grab the keyboard away from the
compositor. More annoyingly, in some systems it will pop up a dialog
on each first click whether the user is okay with inhibiting shortcuts.
app/display/gimpdisplayshell-grab.c | 88 ------------------------------
app/display/gimpdisplayshell-grab.h | 5 --
app/display/gimpdisplayshell-tool-events.c | 52 +++---------------
app/display/gimpdisplayshell.h | 4 --
4 files changed, 9 insertions(+), 140 deletions(-)
---
diff --git a/app/display/gimpdisplayshell-grab.c b/app/display/gimpdisplayshell-grab.c
index 8130e4280a..09a45e21ae 100644
--- a/app/display/gimpdisplayshell-grab.c
+++ b/app/display/gimpdisplayshell-grab.c
@@ -59,34 +59,6 @@ get_associated_pointer (GdkDevice *device)
return device;
}
-static GdkDevice *
-get_associated_keyboard (GdkDevice *device)
-{
- switch (gdk_device_get_device_type (device))
- {
- case GDK_DEVICE_TYPE_SLAVE:
- device = gdk_device_get_associated_device (device);
- break;
-
- case GDK_DEVICE_TYPE_FLOATING:
- {
- GdkDisplay *display = gdk_device_get_display (device);
- GdkSeat *seat = gdk_display_get_default_seat (display);
-
- device = gdk_seat_get_pointer (seat);
- }
- break;
-
- default:
- break;
- }
-
- if (gdk_device_get_source (device) != GDK_SOURCE_KEYBOARD)
- device = gdk_device_get_associated_device (device);
-
- return device;
-}
-
gboolean
gimp_display_shell_pointer_grab (GimpDisplayShell *shell,
const GdkEvent *event,
@@ -144,63 +116,3 @@ gimp_display_shell_pointer_ungrab (GimpDisplayShell *shell,
shell->grab_pointer_source = NULL;
shell->grab_pointer_time = 0;
}
-
-gboolean
-gimp_display_shell_keyboard_grab (GimpDisplayShell *shell,
- const GdkEvent *event)
-{
- GdkDevice *device;
- GdkDevice *source_device;
- GdkGrabStatus status;
-
- g_return_val_if_fail (GIMP_IS_DISPLAY_SHELL (shell), FALSE);
- g_return_val_if_fail (event != NULL, FALSE);
- g_return_val_if_fail (shell->grab_keyboard == NULL, FALSE);
-
- source_device = gimp_devices_get_from_event (shell->display->gimp,
- event, &device);
-
- if (gdk_device_get_source (device) != GDK_SOURCE_KEYBOARD)
- {
- device = get_associated_keyboard (device);
- source_device = NULL;
- }
-
- status = gdk_device_grab (device,
- gtk_widget_get_window (shell->canvas),
- GDK_OWNERSHIP_APPLICATION,
- FALSE,
- GDK_KEY_PRESS_MASK |
- GDK_KEY_RELEASE_MASK |
- GDK_FOCUS_CHANGE_MASK,
- NULL, gdk_event_get_time (event));
-
- if (status == GDK_GRAB_SUCCESS)
- {
- shell->grab_keyboard = device;
- shell->grab_keyboard_source = source_device;
- shell->grab_keyboard_time = gdk_event_get_time (event);
-
- return TRUE;
- }
-
- g_printerr ("%s: gdk_device_grab(%s) failed with status %d\n",
- G_STRFUNC, gdk_device_get_name (device), status);
-
- return FALSE;
-}
-
-void
-gimp_display_shell_keyboard_ungrab (GimpDisplayShell *shell,
- const GdkEvent *event)
-{
- g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell));
- g_return_if_fail (event != NULL);
- g_return_if_fail (shell->grab_keyboard != NULL);
-
- gdk_device_ungrab (shell->grab_keyboard, shell->grab_keyboard_time);
-
- shell->grab_keyboard = NULL;
- shell->grab_keyboard_source = NULL;
- shell->grab_keyboard_time = 0;
-}
diff --git a/app/display/gimpdisplayshell-grab.h b/app/display/gimpdisplayshell-grab.h
index 915cf34f49..580811bd79 100644
--- a/app/display/gimpdisplayshell-grab.h
+++ b/app/display/gimpdisplayshell-grab.h
@@ -27,10 +27,5 @@ gboolean gimp_display_shell_pointer_grab (GimpDisplayShell *shell,
void gimp_display_shell_pointer_ungrab (GimpDisplayShell *shell,
const GdkEvent *event);
-gboolean gimp_display_shell_keyboard_grab (GimpDisplayShell *shell,
- const GdkEvent *event);
-void gimp_display_shell_keyboard_ungrab (GimpDisplayShell *shell,
- const GdkEvent *event);
-
#endif /* __GIMP_DISPLAY_SHELL_GRAB_H__ */
diff --git a/app/display/gimpdisplayshell-tool-events.c b/app/display/gimpdisplayshell-tool-events.c
index 487a95a158..243149bb57 100644
--- a/app/display/gimpdisplayshell-tool-events.c
+++ b/app/display/gimpdisplayshell-tool-events.c
@@ -527,13 +527,6 @@ gimp_display_shell_canvas_tool_events (GtkWidget *canvas,
GDK_BUTTON_RELEASE_MASK))
return TRUE;
- if (! shell->space_release_pending)
- if (! gimp_display_shell_keyboard_grab (shell, event))
- {
- gimp_display_shell_pointer_ungrab (shell, event);
- return TRUE;
- }
-
if (gimp_display_shell_initialize_tool (shell,
&image_coords, state))
{
@@ -665,9 +658,6 @@ gimp_display_shell_canvas_tool_events (GtkWidget *canvas,
if (! shell->grab_pointer || shell->scrolling)
return TRUE;
- if (! shell->space_release_pending)
- gimp_display_shell_keyboard_ungrab (shell, event);
-
if (active_tool &&
(! gimp_image_is_empty (image) ||
gimp_tool_control_get_handle_empty_image (active_tool->control)))
@@ -1341,24 +1331,17 @@ gimp_display_shell_ruler_button_press (GtkWidget *widget,
GDK_POINTER_MOTION_MASK |
GDK_BUTTON_RELEASE_MASK))
{
- if (gimp_display_shell_keyboard_grab (shell, (GdkEvent *) event))
+ if (event->state & gimp_get_toggle_behavior_mask ())
{
- if (event->state & gimp_get_toggle_behavior_mask ())
- {
- gimp_sample_point_tool_start_new (active_tool, display);
- }
- else
- {
- gimp_guide_tool_start_new (active_tool, display,
- orientation);
- }
-
- return TRUE;
+ gimp_sample_point_tool_start_new (active_tool, display);
}
else
{
- gimp_display_shell_pointer_ungrab (shell, (GdkEvent *) event);
+ gimp_guide_tool_start_new (active_tool, display,
+ orientation);
}
+
+ return TRUE;
}
}
}
@@ -1469,21 +1452,9 @@ gimp_display_shell_check_device (GimpDisplayShell *shell,
/* While we have a grab, ignore all events from all other devices
* of the same type
*/
- if (event->type == GDK_KEY_PRESS ||
- event->type == GDK_KEY_RELEASE ||
- event->type == GDK_FOCUS_CHANGE)
- {
- if ((shell->grab_keyboard && (shell->grab_keyboard != grab_device)) ||
- (shell->grab_keyboard_source && (shell->grab_keyboard_source != device)))
- {
- GIMP_LOG (TOOL_EVENTS,
- "ignoring key event from '%s' while waiting for event from '%s'\n",
- gdk_device_get_name (device),
- gdk_device_get_name (shell->grab_keyboard_source));
- return TRUE;
- }
- }
- else
+ if (event->type != GDK_KEY_PRESS &&
+ event->type != GDK_KEY_RELEASE &&
+ event->type != GDK_FOCUS_CHANGE)
{
if ((shell->grab_pointer && (shell->grab_pointer != grab_device)) ||
(shell->grab_pointer_source && (shell->grab_pointer_source != device)))
@@ -1677,9 +1648,6 @@ gimp_display_shell_space_pressed (GimpDisplayShell *shell,
if (shell->space_release_pending || shell->scrolling)
return;
- if (! gimp_display_shell_keyboard_grab (shell, event))
- return;
-
switch (shell->display->config->space_bar_action)
{
case GIMP_SPACE_BAR_ACTION_NONE:
@@ -1777,8 +1745,6 @@ gimp_display_shell_released (GimpDisplayShell *shell,
break;
}
- gimp_display_shell_keyboard_ungrab (shell, event);
-
shell->space_release_pending = FALSE;
shell->button1_release_pending = FALSE;
}
diff --git a/app/display/gimpdisplayshell.h b/app/display/gimpdisplayshell.h
index f9bf6360f0..f26c792063 100644
--- a/app/display/gimpdisplayshell.h
+++ b/app/display/gimpdisplayshell.h
@@ -196,10 +196,6 @@ struct _GimpDisplayShell
GdkDevice *grab_pointer_source;
guint32 grab_pointer_time;
- GdkDevice *grab_keyboard;
- GdkDevice *grab_keyboard_source;
- guint32 grab_keyboard_time;
-
/* the state of gimp_display_shell_zoom_gesture_*() */
gdouble last_zoom_scale;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]