Fix X11 mouse cursor flickering briefly to the standard cursor when changing it.
authorBrecht Van Lommel <brechtvanlommel@gmail.com>
Thu, 6 Mar 2014 17:08:59 +0000 (18:08 +0100)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Thu, 6 Mar 2014 17:23:21 +0000 (18:23 +0100)
Not very visible now but it matters for the next commit.

intern/ghost/intern/GHOST_WindowX11.cpp
intern/ghost/intern/GHOST_WindowX11.h

index c32b2727c4c2cb87ae3823fb5d5f91e433f1b313..29ba1ff13e76eaa0bf021b181f2cdf391df538c7 100644 (file)
@@ -183,7 +183,8 @@ GHOST_WindowX11(
        m_valid_setup(false),
        m_invalid_window(false),
        m_empty_cursor(None),
-       m_custom_cursor(None)
+       m_custom_cursor(None),
+       m_visible_cursor(None)
 {
        
        /* Set up the minimum atrributes that we require and see if
@@ -1361,7 +1362,10 @@ setWindowCursorVisibility(
        Cursor xcursor;
        
        if (visible) {
-               xcursor = getStandardCursor(getCursorShape() );
+               if (m_visible_cursor)
+                       xcursor = m_visible_cursor;
+               else
+                       xcursor = getStandardCursor(getCursorShape() );
        }
        else {
                xcursor = getEmptyCursor();
@@ -1424,6 +1428,8 @@ setWindowCursorShape(
                GHOST_TStandardCursor shape)
 {
        Cursor xcursor = getStandardCursor(shape);
+
+       m_visible_cursor = xcursor;
        
        XDefineCursor(m_display, m_window, xcursor);
        XFlush(m_display);
@@ -1473,6 +1479,8 @@ setWindowCustomCursorShape(
        m_custom_cursor = XCreatePixmapCursor(m_display, bitmap_pix, mask_pix, &fg, &bg, hotX, hotY);
        XDefineCursor(m_display, m_window, m_custom_cursor);
        XFlush(m_display);
+
+       m_visible_cursor = m_custom_cursor;
        
        XFreePixmap(m_display, bitmap_pix);
        XFreePixmap(m_display, mask_pix);
index 7cbdcdeec2188a1201784535ffe6e7b25e5eda7b..afe21b0ffce97e15368c644e8f388f6c8fff2af0 100644 (file)
@@ -373,6 +373,9 @@ private:
        
        /** XCursor structure of the custom cursor */
        Cursor m_custom_cursor;
+
+       /** XCursor to show when cursor is visible */
+       Cursor m_visible_cursor;
        
        /** Cache of XC_* ID's to XCursor structures */
        std::map<unsigned int, Cursor> m_standard_cursors;