From e44cc81a03e9ff5a10068f5fd875d818ffacd62e Mon Sep 17 00:00:00 2001 From: dan Date: Thu, 6 Sep 2001 09:42:51 +0000 Subject: [PATCH] definable cursor code updates from Jim Knoble --- README.definable-cursor | 206 ++++++++++++++++++++++++++++-------------------- doc/getstyle.1x | 18 +++-- doc/setstyle.1x | 13 ++- src/defaults.c | 34 +++++--- util/getstyle.c | 15 +++- util/setstyle.c | 37 +++++++++ 6 files changed, 221 insertions(+), 102 deletions(-) rewrite README.definable-cursor (66%) diff --git a/README.definable-cursor b/README.definable-cursor dissimilarity index 66% index 77579f05..14bd4745 100644 --- a/README.definable-cursor +++ b/README.definable-cursor @@ -1,86 +1,120 @@ -# README.definable-cursor: How to use definable-cursor patch for Window Maker -# created 1999-Apr-24 14:53 jmk -# autodate: 1999-Apr-24 16:29 - -__________________________________________________ -|O| Definable Mouse Cursors for Window Maker |X| -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The definable-cursor patch for Window Maker - allows user-definable mouse cursors; the -cursors can either be the built-in ones from the X11 cursor font, or -they can be bitmap (XBM) files. User-definable cursors can be useful -for theme-builders, lefthanders, and the visually impaired. - -This README describes how to apply the patch to Window Maker and how to -use the features it enables. - -____________________________ -|O| Applying the Patch |X| -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The definable-cursor patch is available from -. - -To apply the patch, do the following (where `XX' is the version of -Window Maker you're patching): - - (0) gzip -dc WindowMaker-XX.tar.gz | tar -xvf - - - (1) cd ./WindowMaker-XX - - (2) patch ) - (bitmap, , ) - -where uses the same syntax as for `xsetroot -cursor_name', -and and are the same as for -`xsetroot -cursor'; and are searched -for along WM's PixmapPath. If you use `(none)', the cursor will be -inherited from the parent window (which often ends up being the root -window). - -You can set the following cursor types (they're shown here with their -defaults): - - NormalCursor = (builtin, left_ptr); - MoveCursor = (builtin, fleur); - ResizeCursor = (builtin, sizing); - WaitCursor = (builtin, watch); - -______________________ -|O| Random Notes |X| -^^^^^^^^^^^^^^^^^^^^^^ - -Most X11 cursors are 16x16 bitmaps. Many X servers can actually handle -larger cursors, though. To check, use: - - xdpyinfo - -and in the resulting output look for a line such as: - - largest cursor: 64x64 - -The example above indicates that my X server can handle cursors up to -64 pixels wide by 64 pixels high. - -You can create your own bitmap cursors using the `bitmap' program that -accompanies most X11 distributions. For example bitmap cursors, see -. - -For an example - ---jim - -%%%%%%%%%%%%%%% jim knoble %%%%%%%% jmknoble@pobox.com %%%%%%%%%%%%%%%%% +# README.definable-cursor: How to use definable-cursor patch for Window Maker +# created 1999-Apr-24 14:53 jmk +# autodate: 2001-Sep-05 22:40 + ++------------------------------------------+ +| Definable Mouse Cursors for Window Maker | ++------------------------------------------+ + +The definable-cursor patch for Window Maker + allows user-definable mouse cursors; the +cursors can either be the built-in ones from the X11 cursor font, or +they can be bitmap (XBM) files. User-definable cursors can be useful +for theme-builders, lefthanders, and the visually impaired. + +This README describes how to enable user-definable cursors in Window +Maker as well as how to use them. + ++----------------------------+ +| Enabling Definable Cursors | ++----------------------------+ + +If you want to enable definable mouse cursors in Window Maker, you must +do so before you configure and build Window Maker. Here's how: + + (1) Edit src/wconfig.h.in and change the following line: + + #undef DEFINABLE_CURSOR + + to: + + #define DEFINABLE_CURSOR + + (2) Configure and build Window Maker as you normally would: + + ./configure + make + ++---------------------------+ +| Defining Your Own Cursors | ++---------------------------+ + +A cursor specification takes one of the following forms in the +~/GNUstep/Defaults/WindowMaker file: + + (none) + (builtin, ) + (bitmap, , ) + +They have the following meanings: + + none The cursor is inherited from the parent window (often, + this means the root window). + + builtin Use the cursor named from X11's set of + built-in cursors. The names are the same as you use + with 'xsetroot -cursor_name'. See the xsetroot(1) man + page for more information. + + bitmap Use the bitmap in as the foreground + cursor bitmap, and the one in as the + background (mask) bitmap. This is pretty much the same + as 'xsetroot -cursor', except that Window Maker searches + for the bitmaps along its PixmapPath. + +You can set the following cursor types (they're shown here with their +defaults): + + NormalCursor = (builtin, left_ptr); + ArrowCursor = (builtin, top_left_arrow); + MoveCursor = (builtin, fleur); + TopLeftResizeCursor = (builtin, top_left_corner); + TopRightResizeCursor = (builtin, top_right_corner); + BottomLeftResizeCursor = (builtin, bottom_left_corner); + BottomRightResizeCursor = (builtin, bottom_right_corner); + VerticalResizeCursor = (builtin, sb_v_double_arrow); + HorizontalResizeCursor = (builtin, sb_h_double_arrow); + WaitCursor = (builtin, watch); + QuestionCursor = (builtin, question_arrow); + TextCursor = (builtin, xterm); + SelectCursor = (builtin, cross); + +The following cursor types are allowed, but they're deprecated (Window +Maker used them in the past, but doesn't use them anymore): + + ResizeCursor = (builtin, sizing); + ++----------------------------------------------+ +| Using Cursors with 'getstyle' and 'setstyle' | ++----------------------------------------------+ + +The 'getstyle' and 'setstyle' style- and theme-management utilities +can handle user-definable cursors. By default, 'getstyle' ignores +cursor definitions; using 'getstyle -t' to get theme-related settings +will also include any cursors you've defined in the resulting +stylefile. + +However, by default, 'setstyle' does *not* ignore cursor settings. If +you wish to set a style or theme without installing cursor settings, +you can use 'setstyle --no-cursors' to ignore the cursor definitions. + ++--------------+ +| Random Notes | ++--------------+ + +Most X11 cursors are 16x16 bitmaps. Many X servers can actually handle +larger cursors, though. To check, use: + + xdpyinfo + +and in the resulting output look for a line such as: + + largest cursor: 64x64 + +The example above indicates that my X server can handle cursors up to +64 pixels wide by 64 pixels high. + +You can create your own bitmap cursors using the 'bitmap' program that +accompanies most X11 distributions. For example bitmap cursors and +masks, see . + diff --git a/doc/getstyle.1x b/doc/getstyle.1x index 27290428..adac0de1 100644 --- a/doc/getstyle.1x +++ b/doc/getstyle.1x @@ -24,15 +24,23 @@ The following options are stored by default: \fIIconBack\fP, \fIFTitleColor\fP, \fIPTitleColor\fP, \fIUTitleColor\fP, \fIFTitleBack\fP, \fIPTitleBack, UTitleBack\fP, \fIMenuTitleColor\fP, \fIMenuTextColor\fP, \fIMenuDisabledColor\fP, \fIMenuTitleBack\fP and -\fIMenuTextBack\fP. If either \fB-t\fP or \fB--theme-options\fP is -specificied, in addition to the previous options, \fIWorkspaceBack\fP -is \fIalso\fP stored. +\fIMenuTextBack\fP. + +If either \fB-t\fP or \fB--theme-options\fP is specified, in addition +to the previous options, \fIWorkspaceBack\fP is \fIalso\fP stored, +along with any user-definable mouse cursor settings +(\fINormalCursor\fP, \fIArrowCursor\fP, \fIMoveCursor\fP, +\fITopLeftResizeCursor\fP, \fITopRightResizeCursor\fP, +\fIBottomLeftResizeCursor\fP, \fIBottomRightResizeCursor\fP, +\fIVerticalResizeCursor\fP, \fIHorizontalResizeCursor\fP, +\fIWaitCursor\fP, \fIQuestionCursor\fP, \fITextCursor\fP, +\fISelectCursor\fP) that are present. .SH OPTIONS .TP .B \-t -dumps theme related information too, which is the root background texture. -This option is always enabled when the \-p option is used. +dumps theme related information too, which includes the root background +texture. This option is always enabled when the \-p option is used. .TP .B \-p creates a theme pack in the directory named by the theme name appended diff --git a/doc/setstyle.1x b/doc/setstyle.1x index 39e678c5..6cc57463 100644 --- a/doc/setstyle.1x +++ b/doc/setstyle.1x @@ -4,7 +4,7 @@ setstyle \- set style related options for Window Maker or loads a theme .SH SYNOPSIS .B setstyle -.I "[--no-fonts] [--help] [--version]" +.I "[--no-fonts] [--no-cursors] [--help] [--version]" .I stylefile .SH DESCRIPTION .B setstyle @@ -17,11 +17,22 @@ be treated as a theme pack and it will be loaded appropriately. If the (\fIIconTitleFont\fP, \fIClipTitleFont\fP, \fIDisplayFont\fP, \fIMenuTextFont\fP, \fIMenuTitleFont\fP, \fIWindowTitleFont\fP) in the style file will be ignored. + +If the \fB\-\-no\-cursors\fP flag is specified, any mouse cursor +definitions (\fINormalCursor\fP, \fIArrowCursor\fP, \fIMoveCursor\fP, +\fITopLeftResizeCursor\fP, \fITopRightResizeCursor\fP, +\fIBottomLeftResizeCursor\fP, \fIBottomRightResizeCursor\fP, +\fIVerticalResizeCursor\fP, \fIHorizontalResizeCursor\fP, +\fIWaitCursor\fP, \fIQuestionCursor\fP, \fITextCursor\fP, +\fISelectCursor\fP) in the style or theme will be ignored. .SH OPTIONS .TP .B \-\-no\-fonts ignore font related options in style file. .TP +.B \-\-no\-cursors +ignore cursor definition options in style file. +.TP .B \-\-help print a help message .TP diff --git a/src/defaults.c b/src/defaults.c index e7b19963..61c6be29 100644 --- a/src/defaults.c +++ b/src/defaults.c @@ -814,35 +814,51 @@ WDefaultEntry optionList[] = { ,{"NormalCursor", "(builtin, left_ptr)", (void*)WCUR_ROOT, NULL, getCursor, setCursor }, + {"ArrowCursor", "(builtin, top_left_arrow)", (void*)WCUR_ARROW, + NULL, getCursor, setCursor + }, {"MoveCursor", "(builtin, fleur)", (void*)WCUR_MOVE, NULL, getCursor, setCursor }, -#if 0 - {"TopLeftResizeCursor", "(builtin, sizing)", (void*)WCUR_TOPLEFTRESIZE, + {"ResizeCursor", "(builtin, sizing)", (void*)WCUR_RESIZE, + NULL, getCursor, setCursor + }, + {"TopLeftResizeCursor", "(builtin, top_left_corner)", + (void*)WCUR_TOPLEFTRESIZE, NULL, getCursor, setCursor }, - {"TopRightResizeCursor", "(builtin, sizing)", (void*)WCUR_TOPRIGHTRESIZE, + {"TopRightResizeCursor", "(builtin, top_right_corner)", + (void*)WCUR_TOPRIGHTRESIZE, NULL, getCursor, setCursor }, - {"BottomLeftResizeCursor", "(builtin, sizing)", (void*)WCUR_BOTTOMLEFTRESIZE, + {"BottomLeftResizeCursor", "(builtin, bottom_left_corner)", + (void*)WCUR_BOTTOMLEFTRESIZE, NULL, getCursor, setCursor }, - {"BottomRightResizeCursor", "(builtin, sizing)", (void*)WCUR_BOTTOMRIGHTRESIZE, + {"BottomRightResizeCursor", "(builtin, bottom_right_corner)", + (void*)WCUR_BOTTOMRIGHTRESIZE, NULL, getCursor, setCursor }, - {"VerticalResizeCursor", "(builtin, sizing)", (void*)WCUR_VERTICALRESIZE, + {"VerticalResizeCursor", "(builtin, sb_v_double_arrow)", + (void*)WCUR_VERTICALRESIZE, NULL, getCursor, setCursor }, - {"HorizonResizeCursor", "(builtin, sizing)", (void*)WCUR_HORIZONRESIZE, + {"HorizontalResizeCursor", "(builtin, sb_h_double_arrow)", + (void*)WCUR_HORIZONRESIZE, NULL, getCursor, setCursor }, {"WaitCursor", "(builtin, watch)", (void*)WCUR_WAIT, NULL, getCursor, setCursor }, - {"ArrowCursor", "(builtin, top_left_arrow)", (void*)WCUR_ARROW, + {"QuestionCursor", "(builtin, question_arrow)", (void*)WCUR_QUESTION, + NULL, getCursor, setCursor + }, + {"TextCursor", "(builtin, xterm)", (void*)WCUR_TEXT, + NULL, getCursor, setCursor + }, + {"SelectCursor", "(builtin, cross)", (void*)WCUR_SELECT, NULL, getCursor, setCursor } -#endif #endif /* DEFINABLE_CURSOR */ }; diff --git a/util/getstyle.c b/util/getstyle.c index 4e779ea4..7a6869ac 100644 --- a/util/getstyle.c +++ b/util/getstyle.c @@ -77,7 +77,6 @@ static char *options[] = { "WindowTitleExtendSpace", "MenuTitleExtendSpace", "MenuTextExtendSpace", - "NormalCursor", NULL }; @@ -85,6 +84,20 @@ static char *options[] = { /* table of theme related options */ static char *theme_options[] = { "WorkspaceBack", + "NormalCursor", + "ArrowCursor", + "MoveCursor", + "ResizeCursor", + "TopLeftResizeCursor", + "TopRightResizeCursor", + "BottomLeftResizeCursor", + "BottomRightResizeCursor", + "VerticalResizeCursor", + "HorizontalResizeCursor", + "WaitCursor", + "QuestionCursor", + "TextCursor", + "SelectCursor", NULL }; diff --git a/util/setstyle.c b/util/setstyle.c index 4b98d831..00e7cdfa 100644 --- a/util/setstyle.c +++ b/util/setstyle.c @@ -48,10 +48,29 @@ char *FontOptions[] = { NULL }; +char *CursorOptions[] = { + "NormalCursor" + ,"ArrowCursor" + ,"MoveCursor" + ,"ResizeCursor" + ,"TopLeftResizeCursor" + ,"TopRightResizeCursor" + ,"BottomLeftResizeCursor" + ,"BottomRightResizeCursor" + ,"VerticalResizeCursor" + ,"HorizontalResizeCursor" + ,"WaitCursor" + ,"QuestionCursor" + ,"TextCursor" + ,"SelectCursor" + ,NULL +}; + char *ProgName; int ignoreFonts = 0; +int ignoreCursors = 0; Display *dpy; @@ -287,6 +306,17 @@ hackStyle(proplist_t style) if (found) continue; } + if (ignoreCursors) { + for (j = 0, found = 0; CursorOptions[j] != NULL; j++) { + if (strcasecmp(str, CursorOptions[j]) == 0) { + PLRemoveDictionaryEntry(style, tmp); + found = 1; + break; + } + } + if (found) + continue; + } if (strcasecmp(str, "IconTitleColor")==0 || strcasecmp(str, "IconTitleBack")==0) { @@ -367,6 +397,11 @@ print_help() puts("Reads style/theme configuration from FILE and updates Window Maker."); puts(""); puts(" --no-fonts ignore font related options"); + /* Why these stupid tabs? They're misleading to the programmer, + * and they don't do any better than aligning via spaces: If you + * have a proportional font, all bets are off anyway. Sheesh. + */ + puts(" --no-cursors ignore cursor related options"); puts(" --ignore