/* Erase the old cursor, and/or draw a new one, if necessary */ static void update_cursor (GtkWidget *widget, gdouble x, gdouble y) { static gint cursor_present = 0; gint state = !gdk_device_get_has_cursor (current_device) && cursor_proximity; x = floor (x); y = floor (y); if (surface != NULL) { G_GNUC_BEGIN_IGNORE_DEPRECATIONS cairo_t *cr = gdk_cairo_create (gtk_widget_get_window (widget)); G_GNUC_END_IGNORE_DEPRECATIONS if (cursor_present && (cursor_present != state || x != cursor_x || y != cursor_y)) { cairo_set_source_surface (cr, surface, 0, 0); cairo_rectangle (cr, cursor_x - 5, cursor_y - 5, 10, 10); cairo_fill (cr); } cursor_present = state; cursor_x = x; cursor_y = y; if (cursor_present) { cairo_set_source_rgb (cr, 0, 0, 0); cairo_rectangle (cr, cursor_x - 5, cursor_y -5, 10, 10); cairo_fill (cr); } cairo_destroy (cr); }
void gdk_input_set_extension_events (GdkWindow *window, gint mask, GdkExtensionMode mode) { GdkDeviceManager *device_manager; GList *devices, *d; g_return_if_fail (GDK_IS_WINDOW (window)); if (GDK_WINDOW_DESTROYED (window)) return; if (mode == GDK_EXTENSION_EVENTS_NONE) mask = 0; window->extension_events = mask; device_manager = gdk_display_get_device_manager (_gdk_display); devices = gdk_device_manager_list_devices (device_manager, GDK_DEVICE_TYPE_FLOATING); for (d = devices; d; d = d->next) { GdkDevice *dev; gint dev_mask; dev = d->data; dev_mask = mask; if (gdk_device_get_mode (dev) == GDK_MODE_DISABLED || (!gdk_device_get_has_cursor (dev) && mode == GDK_EXTENSION_EVENTS_CURSOR)) dev_mask = 0; gdk_window_set_device_events (window, dev, mask); } g_list_free (devices); }