[gtk/wip/carlosg/toggle-osk-sparingly] imwayland: Toggle OSK more sparingly
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/carlosg/toggle-osk-sparingly] imwayland: Toggle OSK more sparingly
- Date: Fri, 8 Feb 2019 23:32:32 +0000 (UTC)
commit 38a4c4dd370739c329a84d2495015e8c016df46a
Author: Carlos Garnacho <carlosg gnome org>
Date: Fri Feb 8 23:11:48 2019 +0100
imwayland: Toggle OSK more sparingly
Specifically it is avoided to be toggled if:
- Just received focus (in order to preserve OSK state across focus changes)
- Moving cursor around. Still allow some jitter as perfect accuracy is not
possible.
Closes: https://gitlab.gnome.org/GNOME/gtk/issues/1277
modules/input/imwayland.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
---
diff --git a/modules/input/imwayland.c b/modules/input/imwayland.c
index 67b9c6e641..41cb296336 100644
--- a/modules/input/imwayland.c
+++ b/modules/input/imwayland.c
@@ -731,6 +731,8 @@ gtk_im_context_wayland_focus_in (GtkIMContext *context)
if (!global->text_input)
return;
+ if (context_wayland->gesture)
+ gtk_event_controller_reset (GTK_EVENT_CONTROLLER (context_wayland->gesture));
global->current = context;
if (global->focused)
@@ -764,9 +766,30 @@ gtk_im_context_wayland_set_cursor_location (GtkIMContext *context,
GdkRectangle *rect)
{
GtkIMContextWayland *context_wayland;
+ int side;
context_wayland = GTK_IM_CONTEXT_WAYLAND (context);
+ if (context_wayland->cursor_rect.x == rect->x &&
+ context_wayland->cursor_rect.y == rect->y &&
+ context_wayland->cursor_rect.width == rect->width &&
+ context_wayland->cursor_rect.height == rect->height)
+ return;
+
+ /* Reset the gesture if the cursor changes too far (eg. clicking
+ * between disjoint positions in the text).
+ *
+ * Still Allow some jittering (a square almost double the cursor rect height
+ * on either side) as clicking on the exact same position between characters
+ * is hard.
+ */
+ side = context_wayland->cursor_rect.height;
+
+ if (context_wayland->gesture &&
+ (ABS (rect->x - context_wayland->cursor_rect.x) >= side ||
+ ABS (rect->y - context_wayland->cursor_rect.y) >= side))
+ gtk_event_controller_reset (GTK_EVENT_CONTROLLER (context_wayland->gesture));
+
context_wayland->cursor_rect = *rect;
notify_cursor_location (context_wayland);
commit_state (context_wayland);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]