#include <string.h>
#include <errno.h>
-typedef struct _GdkCursorPrivate GdkCursorPrivate;
+#define GDK_TYPE_X11_CURSOR (gdk_x11_cursor_get_type ())
+#define GDK_X11_CURSOR(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_X11_CURSOR, GdkX11Cursor))
+#define GDK_X11_CURSOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_X11_CURSOR, GdkX11CursorClass))
+#define GDK_IS_X11_CURSOR(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_X11_CURSOR))
+#define GDK_IS_X11_CURSOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_X11_CURSOR))
+#define GDK_X11_CURSOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_X11_CURSOR, GdkX11CursorClass))
-struct _GdkCursorPrivate
+typedef struct _GdkX11Cursor GdkX11Cursor;
+typedef struct _GdkX11CursorClass GdkX11CursorClass;
+
+struct _GdkX11Cursor
{
GdkCursor cursor;
+
Cursor xcursor;
GdkDisplay *display;
gchar *name;
guint serial;
};
+struct _GdkX11CursorClass
+{
+ GdkCursorClass cursor_class;
+};
static guint theme_serial = 0;
* a non-NULL name.
*/
static void
-add_to_cache (GdkCursorPrivate* cursor)
+add_to_cache (GdkX11Cursor* cursor)
{
cursor_cache = g_slist_prepend (cursor_cache, cursor);
cache_compare_func (gconstpointer listelem,
gconstpointer target)
{
- GdkCursorPrivate* cursor = (GdkCursorPrivate*)listelem;
+ GdkX11Cursor* cursor = (GdkX11Cursor*)listelem;
struct cursor_cache_key* key = (struct cursor_cache_key*)target;
if ((cursor->cursor.type != key->type) ||
* For named cursors type shall be GDK_CURSOR_IS_PIXMAP
* For unnamed, typed cursors, name shall be NULL
*/
-static GdkCursorPrivate*
+static GdkX11Cursor*
find_in_cache (GdkDisplay *display,
GdkCursorType type,
const char *name)
res = g_slist_find_custom (cursor_cache, &key, cache_compare_func);
if (res)
- return (GdkCursorPrivate *) res->data;
+ return (GdkX11Cursor *) res->data;
return NULL;
}
itemp = &cursor_cache;
while (item)
{
- GdkCursorPrivate* cursor = (GdkCursorPrivate*)(item->data);
+ GdkX11Cursor* cursor = (GdkX11Cursor*)(item->data);
if (cursor->display == display)
{
GSList* olditem;
}
}
+/*** GdkX11Cursor ***/
+
+G_DEFINE_TYPE (GdkX11Cursor, gdk_x11_cursor, GDK_TYPE_CURSOR)
+
+void
+gdk_x11_cursor_finalize (GObject *object)
+{
+ GdkX11Cursor *private = GDK_X11_CURSOR (object);
+
+ if (private->xcursor && !gdk_display_is_closed (private->display))
+ XFreeCursor (GDK_DISPLAY_XDISPLAY (private->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 *cursor_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (cursor_class);
+
+ object_class->finalize = gdk_x11_cursor_finalize;
+}
+
+static void
+gdk_x11_cursor_init (GdkX11Cursor *cursor)
+{
+}
+
static Cursor
get_blank_cursor (GdkDisplay *display)
{
_gdk_x11_display_get_cursor_for_type (GdkDisplay *display,
GdkCursorType cursor_type)
{
- GdkCursorPrivate *private;
+ GdkX11Cursor *private;
GdkCursor *cursor;
Cursor xcursor;
}
}
- private = g_new (GdkCursorPrivate, 1);
+ private = g_object_new (GDK_TYPE_X11_CURSOR, NULL);
private->display = display;
private->xcursor = xcursor;
private->name = NULL;
cursor = (GdkCursor *) private;
cursor->type = cursor_type;
- cursor->ref_count = 1;
if (xcursor != None)
add_to_cache (private);
return cursor;
}
-void
-_gdk_cursor_destroy (GdkCursor *cursor)
-{
- GdkCursorPrivate *private;
-
- g_return_if_fail (cursor != NULL);
- g_return_if_fail (cursor->ref_count == 0);
-
- private = (GdkCursorPrivate *) cursor;
- if (private->xcursor && !gdk_display_is_closed (private->display))
- XFreeCursor (GDK_DISPLAY_XDISPLAY (private->display), private->xcursor);
-
- g_free (private->name);
- g_free (private);
-}
-
/**
* gdk_x11_cursor_get_xdisplay:
* @cursor: a #GdkCursor.
{
g_return_val_if_fail (cursor != NULL, NULL);
- return GDK_DISPLAY_XDISPLAY(((GdkCursorPrivate *)cursor)->display);
+ return GDK_DISPLAY_XDISPLAY(((GdkX11Cursor *)cursor)->display);
}
/**
{
g_return_val_if_fail (cursor != NULL, None);
- return ((GdkCursorPrivate *)cursor)->xcursor;
+ return ((GdkX11Cursor *)cursor)->xcursor;
}
/**
{
g_return_val_if_fail (cursor != NULL, NULL);
- return ((GdkCursorPrivate *)cursor)->display;
+ return ((GdkX11Cursor *)cursor)->display;
}
#if defined(HAVE_XCURSOR) && defined(HAVE_XFIXES) && XFIXES_MAJOR >= 2
gdk_cursor_get_image (GdkCursor *cursor)
{
Display *xdisplay;
- GdkCursorPrivate *private;
+ GdkX11Cursor *private;
XcursorImages *images = NULL;
XcursorImage *image;
gint size;
g_return_val_if_fail (cursor != NULL, NULL);
- private = (GdkCursorPrivate *) cursor;
+ private = (GdkX11Cursor *) cursor;
xdisplay = GDK_DISPLAY_XDISPLAY (private->display);
_gdk_x11_cursor_update_theme (GdkCursor *cursor)
{
Display *xdisplay;
- GdkCursorPrivate *private;
+ GdkX11Cursor *private;
Cursor new_cursor = None;
GdkDisplayX11 *display_x11;
- private = (GdkCursorPrivate *) cursor;
+ private = (GdkX11Cursor *) cursor;
xdisplay = GDK_DISPLAY_XDISPLAY (private->display);
display_x11 = GDK_DISPLAY_X11 (private->display);
{
XcursorImage *xcimage;
Cursor xcursor;
- GdkCursorPrivate *private;
+ GdkX11Cursor *private;
GdkCursor *cursor;
const char *option;
char *end;
XcursorImageDestroy (xcimage);
}
- private = g_new (GdkCursorPrivate, 1);
+ private = g_object_new (GDK_TYPE_X11_CURSOR, NULL);
private->display = display;
private->xcursor = xcursor;
private->name = NULL;
cursor = (GdkCursor *) private;
cursor->type = GDK_CURSOR_IS_PIXMAP;
- cursor->ref_count = 1;
return cursor;
}
{
Cursor xcursor;
Display *xdisplay;
- GdkCursorPrivate *private;
+ GdkX11Cursor *private;
GdkCursor *cursor;
if (gdk_display_is_closed (display))
return NULL;
}
- private = g_new (GdkCursorPrivate, 1);
+ private = g_object_new (GDK_TYPE_X11_CURSOR, NULL);
private->display = display;
private->xcursor = xcursor;
private->name = g_strdup (name);
cursor = (GdkCursor *) private;
cursor->type = GDK_CURSOR_IS_PIXMAP;
- cursor->ref_count = 1;
add_to_cache (private);
return cursor;
gint x,
gint y)
{
- GdkCursorPrivate *private;
+ GdkX11Cursor *private;
GdkCursor *cursor;
Cursor xcursor;
XColor xfg, xbg;
else
xcursor = XCreatePixmapCursor (GDK_DISPLAY_XDISPLAY (display),
source_pixmap, mask_pixmap, &xfg, &xbg, x, y);
- private = g_new (GdkCursorPrivate, 1);
+ private = g_object_new (GDK_TYPE_X11_CURSOR, NULL);
private->display = display;
private->xcursor = xcursor;
private->name = NULL;
cursor = (GdkCursor *) private;
cursor->type = GDK_CURSOR_IS_PIXMAP;
- cursor->ref_count = 1;
return cursor;
}