/* Called by gdk_x11_display_finalize to flush any cached cursors * for a dead display. */ void _gdk_x11_cursor_display_finalize (GdkDisplay *display) { GSList* item; GSList** itemp; /* Pointer to the thing to fix when we delete an item */ item = cursor_cache; itemp = &cursor_cache; while (item) { GdkX11Cursor* cursor = (GdkX11Cursor*)(item->data); if (gdk_cursor_get_display (GDK_CURSOR (cursor)) == display) { GSList* olditem; gdk_cursor_unref ((GdkCursor*) cursor); /* Remove this item from the list */ *(itemp) = item->next; olditem = item; item = g_slist_next (item); g_slist_free_1 (olditem); } else { itemp = &(item->next); item = g_slist_next (item); } } }
/* Returns 0 on a match */ static gint cache_compare_func (gconstpointer listelem, gconstpointer target) { GdkX11Cursor* cursor = (GdkX11Cursor*)listelem; struct cursor_cache_key* key = (struct cursor_cache_key*)target; if ((cursor->cursor.type != key->type) || (gdk_cursor_get_display (GDK_CURSOR (cursor)) != key->display)) return 1; /* No match */ /* Elements marked as pixmap must be named cursors * (since we don't store normal pixmap cursors */ if (key->type == GDK_CURSOR_IS_PIXMAP) return strcmp (key->name, cursor->name); return 0; /* Match */ }
void _gdk_wayland_cursor_set_scale (GdkCursor *cursor, guint scale) { GdkWaylandDisplay *wayland_display = GDK_WAYLAND_DISPLAY (gdk_cursor_get_display (cursor)); GdkWaylandCursor *wayland_cursor = GDK_WAYLAND_CURSOR (cursor); if (scale > GDK_WAYLAND_MAX_THEME_SCALE) { g_warning (G_STRLOC ": cursor theme size %u too large", scale); scale = GDK_WAYLAND_MAX_THEME_SCALE; } if (wayland_cursor->scale == scale) return; wayland_cursor->scale = scale; _gdk_wayland_cursor_update (wayland_display, wayland_cursor); }
static VALUE rg_display(VALUE self) { return GOBJ2RVAL(gdk_cursor_get_display(RVAL2GDKCURSOR(self))); }
} } /*** GdkX11Cursor ***/ G_DEFINE_TYPE (GdkX11Cursor, gdk_x11_cursor, GDK_TYPE_CURSOR) static GdkPixbuf* gdk_x11_cursor_get_image (GdkCursor *cursor); static void gdk_x11_cursor_finalize (GObject *object) { GdkX11Cursor *private = GDK_X11_CURSOR (object); GdkDisplay *display; display = gdk_cursor_get_display (GDK_CURSOR (object)); if (private->xcursor && !gdk_display_is_closed (display)) XFreeCursor (GDK_DISPLAY_XDISPLAY (display), private->xcursor); g_free (private->name); G_OBJECT_CLASS (gdk_x11_cursor_parent_class)->finalize (object); } static void gdk_x11_cursor_class_init (GdkX11CursorClass *xcursor_class) { GdkCursorClass *cursor_class = GDK_CURSOR_CLASS (xcursor_class); GObjectClass *object_class = G_OBJECT_CLASS (xcursor_class); object_class->finalize = gdk_x11_cursor_finalize;
/*# @method get_display GdkCursor @brief Returns the display on which the GdkCursor is defined. @return the GdkDisplay associated to cursor */ FALCON_FUNC Cursor::get_display( VMARG ) { NO_ARGS vm->retval( new Gdk::Display( vm->findWKI( "GdkDisplay" )->asClass(), gdk_cursor_get_display( GET_CURSOR( vm->self() ) ) ) ); }