On Tue, Dec 18, 2012 at 02:26:49PM +1000, Peter Hutterer wrote: > e02f864fdf "Suppress cursor display until the first XDefineCursor() request" > disabled cursor display a priori unless -retro is given. > > On a plain server, caling XFixesHideCursor() and XFixesShowCursor() would > show the default root cursor, despite no client actually defining a cursor. > > Change the logic, disable CursorVisible by default and only enable it from > the window's CWCursor logic. If no window ever defines a cursor, said cursor > stays invisible. > > X.Org Bug 58398 <http://bugs.freedesktop.org/show_bug.cgi?id=58398> > > Signed-off-by: Peter Hutterer <[email protected]> > --- > dix/window.c | 4 ++++ > include/input.h | 5 +++++ > xfixes/cursor.c | 10 ++-------- > 3 files changed, 11 insertions(+), 8 deletions(-) > > diff --git a/dix/window.c b/dix/window.c > index 99b3e0a..5dee6ef 100644 > --- a/dix/window.c > +++ b/dix/window.c > @@ -1431,6 +1431,8 @@ ChangeWindowAttributes(WindowPtr pWin, Mask vmask, XID > *vlist, ClientPtr client) > } > } > > + CursorVisible = TRUE; > + > if (pWin->realized) > WindowHasNewCursor(pWin); > > @@ -3430,6 +3432,8 @@ ChangeWindowDeviceCursor(WindowPtr pWin, DeviceIntPtr > pDev, CursorPtr pCursor) > } > > out: > + CursorVisible = TRUE; > + > if (pWin->realized) > WindowHasNewCursor(pWin); > > diff --git a/include/input.h b/include/input.h > index 2387dbf..fb5432a 100644 > --- a/include/input.h > +++ b/include/input.h > @@ -635,6 +635,11 @@ extern _X_HIDDEN void valuator_set_mode(DeviceIntPtr > dev, int axis, int mode); > xfixes/cursor.c uses it to determine if the cursor is enabled */ > extern Bool EnableCursor; > > +/* Set to FALSE by default - ChangeWindowAttributes sets it to TRUE on > + * CWCursor, xfixes/cursor.c uses it to determine if the cursor is enabled > + */ > +extern Bool CursorVisible; > + > extern _X_EXPORT ValuatorMask *valuator_mask_new(int num_valuators); > extern _X_EXPORT void valuator_mask_free(ValuatorMask **mask); > extern _X_EXPORT void valuator_mask_set_range(ValuatorMask *mask, > diff --git a/xfixes/cursor.c b/xfixes/cursor.c > index ffee4d6..f24d410 100644 > --- a/xfixes/cursor.c > +++ b/xfixes/cursor.c > @@ -142,8 +142,7 @@ typedef struct _CursorScreen { > #define Unwrap(as,s,elt,backup) (((backup) = (s)->elt), (s)->elt = > (as)->elt) > > /* The cursor doesn't show up until the first XDefineCursor() */ > -static Bool CursorVisible = FALSE; > - > +Bool CursorVisible = FALSE; > Bool EnableCursor = TRUE; > > static Bool > @@ -155,12 +154,7 @@ CursorDisplayCursor(DeviceIntPtr pDev, ScreenPtr > pScreen, CursorPtr pCursor) > > Unwrap(cs, pScreen, DisplayCursor, backupProc); > > - /* > - * Have to check ConnectionInfo to distinguish client requests from > - * initial root window setup. Not a great way to do it, I admit. > - */ > - if (ConnectionInfo) > - CursorVisible = EnableCursor; > + CursorVisible = CursorVisible && EnableCursor; > > if (cs->pCursorHideCounts != NULL || !CursorVisible) { > ret = (*pScreen->DisplayCursor) (pDev, pScreen, NullCursor); > -- > 1.8.0.2
Reviewed-by: Daniel Martin <[email protected]> _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
