gtk: Implement cursor updates

As we don't obey GdkWindow cursors anymore, someone must set those.
Use the private Gtkwidget API at the moment.
This commit is contained in:
Carlos Garnacho 2017-03-31 17:54:06 +02:00
parent 8f24df1c19
commit 79e267a330

View File

@ -1301,6 +1301,23 @@ check_event_in_child_popover (GtkWidget *event_widget,
return (popover_parent == grab_widget || gtk_widget_is_ancestor (popover_parent, grab_widget));
}
static void
update_cursor (GtkWindow *toplevel,
GdkDevice *device,
GtkWidget *target)
{
GdkCursor *cursor = NULL;
while (!cursor && target)
{
cursor = gtk_widget_get_cursor (target);
target = _gtk_widget_get_parent (target);
}
gdk_window_set_device_cursor (gtk_widget_get_window (GTK_WIDGET (toplevel)),
device, cursor);
}
static GdkNotifyType
get_virtual_notify_type (GdkNotifyType notify_type)
{
@ -1485,6 +1502,8 @@ handle_pointing_event (GdkEvent *event)
case GDK_ENTER_NOTIFY:
target = _gtk_toplevel_pick (toplevel, x, y, NULL, NULL);
old_target = update_pointer_focus_state (toplevel, event, target);
if (event->type == GDK_MOTION_NOTIFY || event->type == GDK_ENTER_NOTIFY)
update_cursor (toplevel, device, target);
/* Let it take the effective pointer focus anyway, as it may change due
* to implicit grabs.