From 3892f3220a689a709d8af10c12925670e8707316 Mon Sep 17 00:00:00 2001 From: Christophe CURIS Date: Sun, 29 Sep 2013 17:09:55 +0200 Subject: [PATCH] wmaker: Created a global structure to regroup all global variables Having all the global variables at the same place will provide better visibility on the code; grouping them in a structure reduces the risk for name clash; it also offer the possibility to organise them. Another BIG benefit is that, when reading the code, an access to a global variable will now be clearly visible, and distinguished from a local variable use. --- src/WindowMaker.h | 28 ++++++++++++++++++---------- src/main.c | 7 +++++-- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/WindowMaker.h b/src/WindowMaker.h index 473b8814..8456fe79 100644 --- a/src/WindowMaker.h +++ b/src/WindowMaker.h @@ -238,22 +238,22 @@ typedef enum { } wprog_state; -#define WCHECK_STATE(chk_state) (WProgramState == (chk_state)) +#define WCHECK_STATE(chk_state) (w_global.program.state == (chk_state)) #define WCHANGE_STATE(nstate) {\ - if (WProgramState == WSTATE_NORMAL\ - || (nstate) != WSTATE_MODAL)\ - WProgramState = (nstate); \ - if (WProgramSigState != 0)\ - WProgramState = WProgramSigState;\ + if (w_global.program.state == WSTATE_NORMAL\ + || (nstate) != WSTATE_MODAL) \ + w_global.program.state = (nstate); \ + if (w_global.program.signal_state != 0)\ + w_global.program.state = w_global.program.signal_state;\ } /* only call inside signal handlers, with signals blocked */ #define SIG_WCHANGE_STATE(nstate) {\ - WProgramSigState = (nstate);\ - WProgramState = (nstate);\ + w_global.program.signal_state = (nstate);\ + w_global.program.state = (nstate);\ } @@ -453,9 +453,17 @@ extern struct WPreferences { /****** Global Variables ******/ extern Display *dpy; + +extern struct wmaker_global_variables { + /* Tracking of the state of the program */ + struct { + wprog_state state; + wprog_state signal_state; + } program; + +} w_global; + extern unsigned int ValidModMask; -extern wprog_state WProgramState; -extern wprog_state WProgramSigState; /****** Notifications ******/ extern const char WMNManaged[]; diff --git a/src/main.c b/src/main.c index faed4fe9..b4e768fc 100644 --- a/src/main.c +++ b/src/main.c @@ -64,6 +64,7 @@ #endif /****** Global Variables ******/ +struct wmaker_global_variables w_global; /* general info */ @@ -145,8 +146,6 @@ int wXkbEventBase; #endif /* special flags */ -wprog_state WProgramSigState = 0; -wprog_state WProgramState = WSTATE_NORMAL; char WDelayedActionSet = 0; /* notifications */ @@ -596,6 +595,10 @@ int main(int argc, char **argv) int i_am_the_monitor, i, len; char *str, *alt; + memset(&w_global, 0, sizeof(w_global)); + w_global.program.state = WSTATE_NORMAL; + w_global.program.signal_state = WSTATE_NORMAL; + /* setup common stuff for the monitor and wmaker itself */ WMInitializeApplication("WindowMaker", &argc, argv);