]> git.sesse.net Git - vlc/commitdiff
XCB: CreateBlankCursor common helper
authorRémi Denis-Courmont <remi@remlab.net>
Wed, 28 Oct 2009 19:06:14 +0000 (21:06 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Wed, 28 Oct 2009 19:06:14 +0000 (21:06 +0200)
modules/video_output/xcb/common.c
modules/video_output/xcb/xcb_vlc.h

index 77ddd018f25297417eb594ef12780b5445908380..e9e55acea4fd9c4dd9df19bd50677ce0348f334e 100644 (file)
@@ -199,6 +199,38 @@ int GetWindowSize (struct vout_window_t *wnd, xcb_connection_t *conn,
     return 0;
 }
 
+/**
+ * Create a blank cursor.
+ * Note that the pixmaps are leaked (until the X disconnection). Hence, this
+ * function should be called no more than once per X connection.
+ * @param conn XCB connection
+ * @param scr target XCB screen
+ */
+xcb_cursor_t CreateBlankCursor (xcb_connection_t *conn,
+                                const xcb_screen_t *scr)
+{
+    xcb_cursor_t cur = xcb_generate_id (conn);
+    xcb_pixmap_t pix = xcb_generate_id (conn);
+    xcb_void_cookie_t ck;
+    xcb_generic_error_t *err;
+
+    ck = xcb_create_pixmap_checked (conn, 1, pix, scr->root, 1, 1);
+    err = xcb_request_check (conn, ck);
+    if (err)
+    {
+        fprintf (stderr, "Cannot create pixmap: %d", err->error_code);
+        free (err);
+    }
+    ck = xcb_create_cursor_checked (conn, cur, pix, pix, 0, 0, 0, 0, 0, 0, 0, 0);
+    err = xcb_request_check (conn, ck);
+    if (err)
+    {
+        fprintf (stderr, "Cannot create pixmap: %d", err->error_code);
+        free (err);
+    }
+    return cur;
+}
+
 /**
  * Initialize a picture buffer as shared memory, according to the video output
  * format. If a attach is true, the segment is attached to
index 131c582708d9c7fae60c405a3080d7a879d42768..cc7f640a252d6b0822f50988bcab4a616d078103 100644 (file)
@@ -45,6 +45,7 @@ struct vout_window_t *GetWindow (vout_display_t *obj,
                                  bool *restrict pshm);
 int GetWindowSize (struct vout_window_t *wnd, xcb_connection_t *conn,
                    unsigned *restrict width, unsigned *restrict height);
+xcb_cursor_t CreateBlankCursor (xcb_connection_t *, const xcb_screen_t *);
 
 int CheckError (vout_display_t *, xcb_connection_t *conn,
                 const char *str, xcb_void_cookie_t);