mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2025-12-20 04:40:02 +01:00
dix: only show the cursor if a window defines one (#58398)
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 <peter.hutterer@who-t.net> Tested-by: Bastien Nocera <hadess@hadess.net> Reviewed-by: Daniel Martin <consume.noise@gmail.com> (cherry picked from commitc100211034)
This commit is contained in:
parent
b1c01839d8
commit
87d7e3e352
3 changed files with 11 additions and 8 deletions
|
|
@ -1431,6 +1431,8 @@ ChangeWindowAttributes(WindowPtr pWin, Mask vmask, XID *vlist, ClientPtr client)
|
|||
}
|
||||
}
|
||||
|
||||
CursorVisible = TRUE;
|
||||
|
||||
if (pWin->realized)
|
||||
WindowHasNewCursor(pWin);
|
||||
|
||||
|
|
@ -3467,6 +3469,8 @@ ChangeWindowDeviceCursor(WindowPtr pWin, DeviceIntPtr pDev, CursorPtr pCursor)
|
|||
}
|
||||
|
||||
out:
|
||||
CursorVisible = TRUE;
|
||||
|
||||
if (pWin->realized)
|
||||
WindowHasNewCursor(pWin);
|
||||
|
||||
|
|
|
|||
|
|
@ -628,6 +628,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,
|
||||
|
|
|
|||
|
|
@ -139,8 +139,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
|
||||
|
|
@ -152,12 +151,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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue