[PATCH] Make the cursor completely optional

Peter Hutterer peter.hutterer at who-t.net
Thu Apr 23 16:11:25 PDT 2009


On Thu, Apr 23, 2009 at 04:15:01PM +0100, Simon Farnsworth wrote:
> From: Simon Farnsworth <simon.farnsworth at onelan.co.uk>
> 
> For embedded use, it's convenient to be able to disable the cursor
> completely, without having to audit and fix up all your third-party
> code (e.g. Mozilla Firefox).
> 
> Add -nocursor and -cursor server options to enable and disable the
> cursor. The default is still -cursor, but embedded users can run the
> server with -nocursor to hide the cursor regardless of what
> application developers do.
> ---
>  include/input.h |    4 ++++
>  os/utils.c      |   12 +++++++++++-
>  xfixes/cursor.c |    6 ++++--
>  3 files changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/include/input.h b/include/input.h
> index b3bb5d1..94089b2 100644
> --- a/include/input.h
> +++ b/include/input.h
> @@ -494,4 +494,8 @@ extern _X_EXPORT void DDXRingBell(
>      int pitch,
>      int duration);
>  
> +/* Set to TRUE by default - os/utils.c sets it to FALSE on user request,
> +   xfixes/cursor.c uses it to determine if the cursor is enabled */
> +extern Bool EnableCursor;
> +
>  #endif /* INPUT_H */
> diff --git a/os/utils.c b/os/utils.c
> index 78a50b2..00abd63 100644
> --- a/os/utils.c
> +++ b/os/utils.c
> @@ -482,6 +482,8 @@ void UseMsg(void)
>      ErrorF("-c                     turns off key-click\n");
>      ErrorF("c #                    key-click volume (0-100)\n");
>      ErrorF("-cc int                default color visual class\n");
> +    ErrorF("-cursor                enable the cursor (default)\n");
> +    ErrorF("-nocursor              disable the cursor\n");
>      ErrorF("-core                  generate core dump on fatal error\n");
>      ErrorF("-dpi int               screen resolution in dots per inch\n");
>  #ifdef DPMSExtension
> @@ -660,7 +662,15 @@ ProcessCommandLine(int argc, char *argv[])
>  #endif
>  	    CoreDump = TRUE;
>  	}
> -	else if ( strcmp( argv[i], "-dpi") == 0)
> +        else if ( strcmp( argv[i], "-nocursor") == 0)
> +        {
> +            EnableCursor = FALSE;
> +        }
> +        else if ( strcmp( argv[i], "-cursor") == 0)
> +        {
> +            EnableCursor = TRUE;
> +        }
> +        else if ( strcmp( argv[i], "-dpi") == 0)
>  	{
>  	    if(++i < argc)
>  	        monitorResolution = atoi(argv[i]);
> diff --git a/xfixes/cursor.c b/xfixes/cursor.c
> index 33ab426..eb83cfe 100644
> --- a/xfixes/cursor.c
> +++ b/xfixes/cursor.c
> @@ -129,6 +129,8 @@ typedef struct _CursorScreen {
>  /* The cursor doesn't show up until the first XDefineCursor() */
>  static Bool CursorVisible = FALSE;
>  
> +Bool EnableCursor = TRUE;
> +
>  static Bool
>  CursorDisplayCursor (DeviceIntPtr pDev,
>                       ScreenPtr pScreen,
> @@ -144,7 +146,7 @@ CursorDisplayCursor (DeviceIntPtr pDev,
>       * initial root window setup.  Not a great way to do it, I admit.
>       */
>      if (ConnectionInfo)
> -	CursorVisible = TRUE;
> +	CursorVisible = EnableCursor;
>  
>      if (cs->pCursorHideCounts != NULL || !CursorVisible) {
>          ret = ((*pScreen->RealizeCursor)(pDev, pScreen, pInvisibleCursor) &&
> @@ -1052,7 +1054,7 @@ XFixesCursorInit (void)
>      int	i;
>  
>      if (party_like_its_1989)
> -	CursorVisible = TRUE;
> +	CursorVisible = EnableCursor;
>      
>      for (i = 0; i < screenInfo.numScreens; i++)
>      {
> -- 
> 1.5.4.1
 

tested, works.

Acked-by: Peter Hutterer <peter.hutterer at who-t.net>

Cheers,
  Peter


More information about the xorg-devel mailing list