From: Christophe CURIS <[email protected]>
As the cursor choice for each action is actually a user choice,
it is logical to put this into the structure, instead of a poorly
defined 'extern' in every file.
---
src/WindowMaker.h | 46 +++++++++++++++++++++++++++-------------------
src/appicon.c | 3 +--
src/defaults.c | 7 +++----
src/dock.c | 3 +--
src/event.c | 2 --
src/icon.c | 6 ++----
src/main.c | 3 ---
src/menu.c | 4 +---
src/moveres.c | 26 ++++++++++++--------------
src/rootmenu.c | 3 +--
src/screen.c | 5 ++---
src/startup.c | 35 ++++++++++++++++-------------------
src/wcore.c | 6 ++----
src/winspector.c | 3 +--
14 files changed, 69 insertions(+), 83 deletions(-)
diff --git a/src/WindowMaker.h b/src/WindowMaker.h
index 7211181..f27b2a8 100644
--- a/src/WindowMaker.h
+++ b/src/WindowMaker.h
@@ -102,25 +102,29 @@ typedef struct WObjDescriptor {
#define PRED_BPIXMAPS 4 /* count of WBUT icons */
#endif /* XKB_BUTTON_HINT */
-/* cursors */
-#define WCUR_DEFAULT 0
-#define WCUR_NORMAL 0
-#define WCUR_MOVE 1
-#define WCUR_RESIZE 2
-#define WCUR_TOPLEFTRESIZE 3
-#define WCUR_TOPRIGHTRESIZE 4
-#define WCUR_BOTTOMLEFTRESIZE 5
-#define WCUR_BOTTOMRIGHTRESIZE 6
-#define WCUR_VERTICALRESIZE 7
-#define WCUR_HORIZONRESIZE 8
-#define WCUR_WAIT 9
-#define WCUR_ARROW 10
-#define WCUR_QUESTION 11
-#define WCUR_TEXT 12
-#define WCUR_SELECT 13
-#define WCUR_ROOT 14
-#define WCUR_EMPTY 15
-#define WCUR_LAST 16
+/* Mouse cursors */
+typedef enum {
+ WCUR_DEFAULT = 0,
+ WCUR_NORMAL = 0,
+ WCUR_MOVE = 1,
+ WCUR_RESIZE = 2,
+ WCUR_TOPLEFTRESIZE = 3,
+ WCUR_TOPRIGHTRESIZE = 4,
+ WCUR_BOTTOMLEFTRESIZE = 5,
+ WCUR_BOTTOMRIGHTRESIZE = 6,
+ WCUR_VERTICALRESIZE = 7,
+ WCUR_HORIZONRESIZE = 8,
+ WCUR_WAIT = 9,
+ WCUR_ARROW = 10,
+ WCUR_QUESTION = 11,
+ WCUR_TEXT = 12,
+ WCUR_SELECT = 13,
+ WCUR_ROOT = 14,
+ WCUR_EMPTY = 15,
+
+ /* Count of the number of cursors defined */
+ WCUR_LAST = 16
+} w_cursor;
/* geometry displays */
#define WDIS_NEW 0 /* new style */
@@ -449,6 +453,10 @@ extern struct WPreferences {
#endif
unsigned int restarting:2;
} flags; /* internal flags */
+
+ /* Map table between w_cursor and actual X id */
+ Cursor cursor[WCUR_LAST];
+
} wPreferences;
/****** Global Variables ******/
diff --git a/src/appicon.c b/src/appicon.c
index 8e22c36..6300559 100644
--- a/src/appicon.c
+++ b/src/appicon.c
@@ -61,7 +61,6 @@
*/
/**** Global variables ****/
-extern Cursor wCursor[WCUR_LAST];
extern WDDomain *WDWindowAttributes;
extern XContext wWinContext;
@@ -852,7 +851,7 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event)
|| abs(ofs_y - ev.xmotion.y) >=
MOVE_THRESHOLD) {
XChangeActivePointerGrab(dpy,
ButtonMotionMask
|
ButtonReleaseMask | ButtonPressMask,
-
wCursor[WCUR_MOVE], CurrentTime);
+
wPreferences.cursor[WCUR_MOVE], CurrentTime);
grabbed = 1;
} else {
break;
diff --git a/src/defaults.c b/src/defaults.c
index 02f01a3..22aa716 100644
--- a/src/defaults.c
+++ b/src/defaults.c
@@ -161,7 +161,6 @@ static WDECallbackUpdate updateUsableArea;
static WDECallbackUpdate setModifierKeyLabels;
-extern Cursor wCursor[WCUR_LAST];
static WDECallbackConvert getCursor;
static WDECallbackUpdate setCursor;
@@ -3225,11 +3224,11 @@ static int setCursor(WScreen * scr, WDefaultEntry *
entry, void *tdata, void *ex
Cursor *cursor = tdata;
long widx = (long) extra_data;
- if (wCursor[widx] != None) {
- XFreeCursor(dpy, wCursor[widx]);
+ if (wPreferences.cursor[widx] != None) {
+ XFreeCursor(dpy, wPreferences.cursor[widx]);
}
- wCursor[widx] = *cursor;
+ wPreferences.cursor[widx] = *cursor;
if (widx == WCUR_ROOT && *cursor != None) {
XDefineCursor(dpy, scr->root_win, *cursor);
diff --git a/src/dock.c b/src/dock.c
index fd45c1e..fae31be 100644
--- a/src/dock.c
+++ b/src/dock.c
@@ -66,7 +66,6 @@
#define CLIP_FORWARD 2
/**** Global variables ****/
-extern Cursor wCursor[WCUR_LAST];
extern XContext wWinContext;
#define MOD_MASK wPreferences.modifier_mask
@@ -3699,7 +3698,7 @@ static void handleDockMove(WDock *dock, WAppIcon *aicon,
XEvent *event)
|| abs(ofs_y - ev.xmotion.y) >=
MOVE_THRESHOLD) {
XChangeActivePointerGrab(dpy,
ButtonMotionMask
|
ButtonReleaseMask | ButtonPressMask,
-
wCursor[WCUR_MOVE], CurrentTime);
+
wPreferences.cursor[WCUR_MOVE], CurrentTime);
grabbed = 1;
}
break;
diff --git a/src/event.c b/src/event.c
index a0ed8f6..ba5b09d 100644
--- a/src/event.c
+++ b/src/event.c
@@ -80,8 +80,6 @@
extern XContext wWinContext;
extern XContext wVEdgeContext;
-extern Cursor wCursor[WCUR_LAST];
-
extern WShortKey wKeyBindings[WKBD_LAST];
extern int wScreenCount;
diff --git a/src/icon.c b/src/icon.c
index a8fbc65..6efc454 100644
--- a/src/icon.c
+++ b/src/icon.c
@@ -54,8 +54,6 @@
#define CACHE_ICON_PATH "/Library/WindowMaker/CachedPixmaps"
#define ICON_BORDER 3
-extern Cursor wCursor[WCUR_LAST];
-
static void miniwindowExpose(WObjDescriptor * desc, XEvent * event);
static void miniwindowMouseDown(WObjDescriptor * desc, XEvent * event);
static void miniwindowDblClick(WObjDescriptor * desc, XEvent * event);
@@ -721,7 +719,7 @@ static void set_dockapp_in_icon(WIcon *icon)
(attr.all_event_masks & ButtonPressMask))
wHackedGrabButton(Button1, MOD_MASK, icon->core->window, True,
ButtonPressMask, GrabModeSync, GrabModeAsync,
- None, wCursor[WCUR_ARROW]);
+ None, wPreferences.cursor[WCUR_ARROW]);
}
/* Get the RImage from the XWindow wm_hints */
@@ -862,7 +860,7 @@ static void miniwindowMouseDown(WObjDescriptor * desc,
XEvent * event)
|| abs(dy - ev.xmotion.y) >=
MOVE_THRESHOLD) {
XChangeActivePointerGrab(dpy,
ButtonMotionMask
|
ButtonReleaseMask | ButtonPressMask,
-
wCursor[WCUR_MOVE], CurrentTime);
+
wPreferences.cursor[WCUR_MOVE], CurrentTime);
grabbed = 1;
} else {
break;
diff --git a/src/main.c b/src/main.c
index b110d7b..36e595a 100644
--- a/src/main.c
+++ b/src/main.c
@@ -125,9 +125,6 @@ Atom _XA_WINDOWMAKER_ICON_TILE;
Atom _XA_WM_IGNORE_FOCUS_EVENTS;
-/* cursors */
-Cursor wCursor[WCUR_LAST];
-
#ifdef SHAPE
Bool wShapeSupported;
int wShapeEventBase;
diff --git a/src/menu.c b/src/menu.c
index 0ececa7..a3f177d 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -47,8 +47,6 @@
/****** Global Variables ******/
-extern Cursor wCursor[WCUR_LAST];
-
extern XContext wWinContext;
#define MOD_MASK wPreferences.modifier_mask
@@ -2185,7 +2183,7 @@ static void menuTitleMouseDown(WCoreWindow * sender, void
*data, XEvent * event)
ButtonMotionMask |
ButtonReleaseMask
| ButtonPressMask,
GrabModeAsync,
GrabModeAsync, None,
- wCursor[WCUR_MOVE],
CurrentTime);
+
wPreferences.cursor[WCUR_MOVE], CurrentTime);
}
}
break;
diff --git a/src/moveres.c b/src/moveres.c
index 26b8cf9..7e7cf5a 100644
--- a/src/moveres.c
+++ b/src/moveres.c
@@ -60,8 +60,6 @@
*/
#define HAS_BORDER_WITH_SELECT(w) ((w)->flags.selected || HAS_BORDER(w))
-/****** Global Variables ******/
-extern Cursor wCursor[WCUR_LAST];
/*
*----------------------------------------------------------------------
@@ -564,7 +562,7 @@ static void crossWorkspace(WScreen * scr, WWindow * wwin,
int opaque_move, int n
if (!opaque_move) {
XGrabPointer(dpy, scr->root_win, True, PointerMotionMask
| ButtonReleaseMask | ButtonPressMask,
GrabModeAsync,
- GrabModeAsync, None, wCursor[WCUR_MOVE],
CurrentTime);
+ GrabModeAsync, None,
wPreferences.cursor[WCUR_MOVE], CurrentTime);
}
}
@@ -1242,7 +1240,7 @@ int wKeyboardMoveResizeWindow(WWindow * wwin)
XGrabServer(dpy);
XGrabPointer(dpy, scr->root_win, True, PointerMotionMask
| ButtonReleaseMask | ButtonPressMask, GrabModeAsync,
- GrabModeAsync, None, wCursor[WCUR_DEFAULT], CurrentTime);
+ GrabModeAsync, None, wPreferences.cursor[WCUR_DEFAULT],
CurrentTime);
@@ -1696,7 +1694,7 @@ int wMouseMoveWindow(WWindow * wwin, XEvent * ev)
XChangeActivePointerGrab(dpy, ButtonMotionMask
| ButtonReleaseMask |
ButtonPressMask,
- wCursor[WCUR_MOVE],
CurrentTime);
+
wPreferences.cursor[WCUR_MOVE], CurrentTime);
started = 1;
XGrabKeyboard(dpy, root, False, GrabModeAsync,
GrabModeAsync, CurrentTime);
@@ -1988,31 +1986,31 @@ void wMouseResizeWindow(WWindow * wwin, XEvent * ev)
if (res == (UP | LEFT))
XChangeActivePointerGrab(dpy,
ButtonMotionMask
|
ButtonReleaseMask | ButtonPressMask,
-
wCursor[WCUR_TOPLEFTRESIZE], CurrentTime);
+
wPreferences.cursor[WCUR_TOPLEFTRESIZE], CurrentTime);
else if (res == (UP | RIGHT))
XChangeActivePointerGrab(dpy,
ButtonMotionMask
|
ButtonReleaseMask | ButtonPressMask,
-
wCursor[WCUR_TOPRIGHTRESIZE], CurrentTime);
+
wPreferences.cursor[WCUR_TOPRIGHTRESIZE], CurrentTime);
else if (res == (DOWN | LEFT))
XChangeActivePointerGrab(dpy,
ButtonMotionMask
|
ButtonReleaseMask | ButtonPressMask,
-
wCursor[WCUR_BOTTOMLEFTRESIZE], CurrentTime);
+
wPreferences.cursor[WCUR_BOTTOMLEFTRESIZE], CurrentTime);
else if (res == (DOWN | RIGHT))
XChangeActivePointerGrab(dpy,
ButtonMotionMask
|
ButtonReleaseMask | ButtonPressMask,
-
wCursor[WCUR_BOTTOMRIGHTRESIZE], CurrentTime);
+
wPreferences.cursor[WCUR_BOTTOMRIGHTRESIZE], CurrentTime);
else if (res == DOWN || res == UP)
XChangeActivePointerGrab(dpy,
ButtonMotionMask
|
ButtonReleaseMask | ButtonPressMask,
-
wCursor[WCUR_VERTICALRESIZE], CurrentTime);
+
wPreferences.cursor[WCUR_VERTICALRESIZE], CurrentTime);
else if (res & (DOWN | UP))
XChangeActivePointerGrab(dpy,
ButtonMotionMask
|
ButtonReleaseMask | ButtonPressMask,
-
wCursor[WCUR_VERTICALRESIZE], CurrentTime);
+
wPreferences.cursor[WCUR_VERTICALRESIZE], CurrentTime);
else if (res & (LEFT | RIGHT))
XChangeActivePointerGrab(dpy,
ButtonMotionMask
|
ButtonReleaseMask | ButtonPressMask,
-
wCursor[WCUR_HORIZONRESIZE], CurrentTime);
+
wPreferences.cursor[WCUR_HORIZONRESIZE], CurrentTime);
XGrabKeyboard(dpy, root, False, GrabModeAsync,
GrabModeAsync, CurrentTime);
@@ -2153,7 +2151,7 @@ void wSelectWindows(WScreen * scr, XEvent * ev)
if (XGrabPointer(dpy, scr->root_win, False, ButtonMotionMask
| ButtonReleaseMask | ButtonPressMask, GrabModeAsync,
- GrabModeAsync, None, wCursor[WCUR_DEFAULT],
CurrentTime) != Success) {
+ GrabModeAsync, None,
wPreferences.cursor[WCUR_DEFAULT], CurrentTime) != Success) {
return;
}
XGrabServer(dpy);
@@ -2215,7 +2213,7 @@ void InteractivePlaceWindow(WWindow * wwin, int *x_ret,
int *y_ret, unsigned wid
int junk;
if (XGrabPointer(dpy, root, True, PointerMotionMask | ButtonPressMask,
- GrabModeAsync, GrabModeAsync, None,
wCursor[WCUR_DEFAULT], CurrentTime) != Success) {
+ GrabModeAsync, GrabModeAsync, None,
wPreferences.cursor[WCUR_DEFAULT], CurrentTime) != Success) {
*x_ret = 0;
*y_ret = 0;
return;
diff --git a/src/rootmenu.c b/src/rootmenu.c
index 62a03f7..9a4f36b 100644
--- a/src/rootmenu.c
+++ b/src/rootmenu.c
@@ -61,7 +61,6 @@
#define MAX_SHORTCUT_LENGTH 32
extern WDDomain *WDRootMenu;
-extern Cursor wCursor[WCUR_LAST];
static WMenu *readMenuPipe(WScreen * scr, char **file_name);
static WMenu *readPLMenuPipe(WScreen * scr, char **file_name);
@@ -155,7 +154,7 @@ static void execCommand(WMenu * menu, WMenuEntry * entry)
cmdline = ExpandOptions(menu->frame->screen_ptr, (char
*)entry->clientdata);
XGrabPointer(dpy, menu->frame->screen_ptr->root_win, True, 0,
- GrabModeAsync, GrabModeAsync, None, wCursor[WCUR_WAIT],
CurrentTime);
+ GrabModeAsync, GrabModeAsync, None,
wPreferences.cursor[WCUR_WAIT], CurrentTime);
XSync(dpy, 0);
if (cmdline) {
diff --git a/src/screen.c b/src/screen.c
index 32e45fa..721680e 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -70,7 +70,6 @@
|KeyPressMask|KeyReleaseMask)
/**** Global variables ****/
-extern Cursor wCursor[WCUR_LAST];
extern Atom _XA_WINDOWMAKER_STATE;
extern Atom _XA_WINDOWMAKER_NOTICEBOARD;
@@ -464,7 +463,7 @@ static void createInternalWindows(WScreen * scr)
attribs.override_redirect = True;
attribs.background_pixmap = None;
attribs.background_pixel = scr->white_pixel;
- attribs.cursor = wCursor[WCUR_DEFAULT];
+ attribs.cursor = wPreferences.cursor[WCUR_DEFAULT];
vmask |= CWColormap;
attribs.colormap = scr->w_colormap;
scr->dock_shadow =
@@ -571,7 +570,7 @@ WScreen *wScreenInit(int screen_number)
return NULL;
}
- XDefineCursor(dpy, scr->root_win, wCursor[WCUR_ROOT]);
+ XDefineCursor(dpy, scr->root_win, wPreferences.cursor[WCUR_ROOT]);
/* screen descriptor for raster graphic library */
rattr.flags = RC_RenderMode | RC_ColorsPerChannel | RC_StandardColormap;
diff --git a/src/startup.c b/src/startup.c
index c39ecaf..f8e8bbc 100644
--- a/src/startup.c
+++ b/src/startup.c
@@ -130,9 +130,6 @@ extern Atom _XA_GNUSTEP_WM_MINIATURIZE_WINDOW;
extern Atom _XA_GNUSTEP_TITLEBAR_STATE;
extern Atom _XA_WM_IGNORE_FOCUS_EVENTS;
-/* cursors */
-extern Cursor wCursor[WCUR_LAST];
-
#ifndef HAVE_INOTIFY
/* special flags */
extern char WDelayedActionSet;
@@ -546,21 +543,21 @@ void StartUp(Bool defaultScreenOnly)
#endif
/* cursors */
- wCursor[WCUR_NORMAL] = None; /* inherit from root */
- wCursor[WCUR_ROOT] = XCreateFontCursor(dpy, XC_left_ptr);
- wCursor[WCUR_ARROW] = XCreateFontCursor(dpy, XC_top_left_arrow);
- wCursor[WCUR_MOVE] = XCreateFontCursor(dpy, XC_fleur);
- wCursor[WCUR_RESIZE] = XCreateFontCursor(dpy, XC_sizing);
- wCursor[WCUR_TOPLEFTRESIZE] = XCreateFontCursor(dpy,
XC_top_left_corner);
- wCursor[WCUR_TOPRIGHTRESIZE] = XCreateFontCursor(dpy,
XC_top_right_corner);
- wCursor[WCUR_BOTTOMLEFTRESIZE] = XCreateFontCursor(dpy,
XC_bottom_left_corner);
- wCursor[WCUR_BOTTOMRIGHTRESIZE] = XCreateFontCursor(dpy,
XC_bottom_right_corner);
- wCursor[WCUR_VERTICALRESIZE] = XCreateFontCursor(dpy,
XC_sb_v_double_arrow);
- wCursor[WCUR_HORIZONRESIZE] = XCreateFontCursor(dpy,
XC_sb_h_double_arrow);
- wCursor[WCUR_WAIT] = XCreateFontCursor(dpy, XC_watch);
- wCursor[WCUR_QUESTION] = XCreateFontCursor(dpy, XC_question_arrow);
- wCursor[WCUR_TEXT] = XCreateFontCursor(dpy, XC_xterm); /* odd name???
*/
- wCursor[WCUR_SELECT] = XCreateFontCursor(dpy, XC_cross);
+ wPreferences.cursor[WCUR_NORMAL] = None; /* inherit from root */
+ wPreferences.cursor[WCUR_ROOT] = XCreateFontCursor(dpy, XC_left_ptr);
+ wPreferences.cursor[WCUR_ARROW] = XCreateFontCursor(dpy,
XC_top_left_arrow);
+ wPreferences.cursor[WCUR_MOVE] = XCreateFontCursor(dpy, XC_fleur);
+ wPreferences.cursor[WCUR_RESIZE] = XCreateFontCursor(dpy, XC_sizing);
+ wPreferences.cursor[WCUR_TOPLEFTRESIZE] = XCreateFontCursor(dpy,
XC_top_left_corner);
+ wPreferences.cursor[WCUR_TOPRIGHTRESIZE] = XCreateFontCursor(dpy,
XC_top_right_corner);
+ wPreferences.cursor[WCUR_BOTTOMLEFTRESIZE] = XCreateFontCursor(dpy,
XC_bottom_left_corner);
+ wPreferences.cursor[WCUR_BOTTOMRIGHTRESIZE] = XCreateFontCursor(dpy,
XC_bottom_right_corner);
+ wPreferences.cursor[WCUR_VERTICALRESIZE] = XCreateFontCursor(dpy,
XC_sb_v_double_arrow);
+ wPreferences.cursor[WCUR_HORIZONRESIZE] = XCreateFontCursor(dpy,
XC_sb_h_double_arrow);
+ wPreferences.cursor[WCUR_WAIT] = XCreateFontCursor(dpy, XC_watch);
+ wPreferences.cursor[WCUR_QUESTION] = XCreateFontCursor(dpy,
XC_question_arrow);
+ wPreferences.cursor[WCUR_TEXT] = XCreateFontCursor(dpy, XC_xterm);
/* odd name??? */
+ wPreferences.cursor[WCUR_SELECT] = XCreateFontCursor(dpy, XC_cross);
Pixmap cur = XCreatePixmap(dpy, DefaultRootWindow(dpy), 16, 16, 1);
GC gc = XCreateGC(dpy, cur, 0, NULL);
@@ -569,7 +566,7 @@ void StartUp(Bool defaultScreenOnly)
XSetForeground(dpy, gc, 0);
XFillRectangle(dpy, cur, gc, 0, 0, 16, 16);
XFreeGC(dpy, gc);
- wCursor[WCUR_EMPTY] = XCreatePixmapCursor(dpy, cur, cur, &black,
&black, 0, 0);
+ wPreferences.cursor[WCUR_EMPTY] = XCreatePixmapCursor(dpy, cur, cur,
&black, &black, 0, 0);
XFreePixmap(dpy, cur);
diff --git a/src/wcore.c b/src/wcore.c
index 3e77fbf..37cf59a 100644
--- a/src/wcore.c
+++ b/src/wcore.c
@@ -30,8 +30,6 @@
#include "wcore.h"
/****** Global Variables ******/
-/* cursors */
-extern Cursor wCursor[WCUR_LAST];
extern XContext wWinContext;
/*----------------------------------------------------------------------
@@ -51,7 +49,7 @@ WCoreWindow *wCoreCreateTopLevel(WScreen *screen, int x, int
y, int width, int h
vmask = CWBorderPixel | CWCursor | CWEventMask | CWOverrideRedirect |
CWColormap;
attribs.override_redirect = True;
- attribs.cursor = wCursor[WCUR_DEFAULT];
+ attribs.cursor = wPreferences.cursor[WCUR_DEFAULT];
attribs.background_pixmap = None;
attribs.background_pixel = screen->black_pixel;
attribs.border_pixel = border_pixel;
@@ -102,7 +100,7 @@ WCoreWindow *wCoreCreate(WCoreWindow *parent, int x, int y,
int width, int heigh
core = wmalloc(sizeof(WCoreWindow));
vmask = CWBorderPixel | CWCursor | CWEventMask | CWColormap;
- attribs.cursor = wCursor[WCUR_DEFAULT];
+ attribs.cursor = wPreferences.cursor[WCUR_DEFAULT];
attribs.background_pixmap = None;
attribs.background_pixel = parent->screen_ptr->black_pixel;
attribs.event_mask = KeyPressMask | KeyReleaseMask | ButtonPressMask |
diff --git a/src/winspector.c b/src/winspector.c
index fedc013..0ee08d6 100644
--- a/src/winspector.c
+++ b/src/winspector.c
@@ -114,7 +114,6 @@ typedef struct InspectorPanel {
unsigned int choosingIcon:1;
} InspectorPanel;
-extern Cursor wCursor[WCUR_LAST];
extern WDDomain *WDWindowAttributes;
static InspectorPanel *panelList = NULL;
@@ -1017,7 +1016,7 @@ static void selectWindow(WMWidget *bPtr, void *data)
if (XGrabPointer(dpy, scr->root_win, True,
ButtonPressMask, GrabModeAsync, GrabModeAsync, None,
- wCursor[WCUR_SELECT], CurrentTime) != GrabSuccess) {
+ wPreferences.cursor[WCUR_SELECT], CurrentTime) !=
GrabSuccess) {
wwarning("could not grab mouse pointer");
return;
}
--
1.8.4.rc3
--
To unsubscribe, send mail to [email protected].