gint gimp_device_info_compare (GimpDeviceInfo *a, GimpDeviceInfo *b) { if (a->device && a->display && a->device == gdk_display_get_core_pointer (a->display)) { return -1; } else if (b->device && b->display && b->device == gdk_display_get_core_pointer (b->display)) { return 1; } else if (a->device && ! b->device) { return -1; } else if (! a->device && b->device) { return 1; } else { return gimp_object_name_collate ((GimpObject *) a, (GimpObject *) b); } }
gboolean gimp_display_shell_pointer_grab (GimpDisplayShell *shell, const GdkEvent *event, GdkEventMask event_mask) { 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->pointer_grabbed == FALSE, FALSE); status = gdk_pointer_grab (gtk_widget_get_window (shell->canvas), FALSE, event_mask, NULL, NULL, gdk_event_get_time (event)); if (status == GDK_GRAB_SUCCESS) { shell->pointer_grabbed = TRUE; return TRUE; } else if (status == GDK_GRAB_ALREADY_GRABBED) { GimpDeviceManager *manager; GdkDisplay *gdk_display; manager = gimp_devices_get_manager (shell->display->gimp); gdk_display = gtk_widget_get_display (GTK_WIDGET (shell)); /* EEK: trying to grab an extended device always returns * ALREADY_GRABBED, so simply assume the grab succeeded anyway */ if (gimp_device_manager_get_current_device (manager)->device != gdk_display_get_core_pointer (gdk_display)) { shell->pointer_grabbed = TRUE; return TRUE; } } g_printerr ("%s: gdk_pointer_grab failed with status %d\n", G_STRFUNC, status); return FALSE; }
static VALUE rg_core_pointer(VALUE self) { return GOBJ2RVAL(gdk_display_get_core_pointer(_SELF(self))); }