{
GtkIMContextSimple parent_instance;
GtkWidget *widget;
+ GtkWidget *controller_widget;
GtkGesture *gesture;
double press_x;
return;
if (context_wayland->widget)
+ gtk_im_context_wayland_focus_out (context);
+
+ if (context_wayland->controller_widget)
{
- gtk_im_context_wayland_focus_out (context);
- gtk_widget_remove_controller (context_wayland->widget, GTK_EVENT_CONTROLLER (context_wayland->gesture));
+ gtk_widget_remove_controller (context_wayland->controller_widget,
+ GTK_EVENT_CONTROLLER (context_wayland->gesture));
context_wayland->gesture = NULL;
+ g_clear_object (&context_wayland->controller_widget);
}
g_set_object (&context_wayland->widget, widget);
if (widget)
{
+ GtkWidget *parent;
GtkGesture *gesture;
gesture = gtk_gesture_click_new ();
G_CALLBACK (pressed_cb), context);
g_signal_connect (gesture, "released",
G_CALLBACK (released_cb), context);
- gtk_widget_add_controller (widget, GTK_EVENT_CONTROLLER (gesture));
+
+ parent = gtk_widget_get_parent (widget);
+
+ if (parent &&
+ GTK_IS_EDITABLE (widget) &&
+ GTK_IS_EDITABLE (parent))
+ g_set_object (&context_wayland->controller_widget, parent);
+ else
+ g_set_object (&context_wayland->controller_widget, widget);
+
+ gtk_widget_add_controller (context_wayland->controller_widget,
+ GTK_EVENT_CONTROLLER (gesture));
context_wayland->gesture = gesture;
}
}