From: Christophe CURIS <[email protected]>
---
src/WindowMaker.h | 7 +++++++
src/actions.c | 3 +--
src/appmenu.c | 3 +--
src/event.c | 17 ++++++++---------
src/main.c | 3 +--
src/session.c | 1 -
src/shutdown.c | 3 +--
src/window.c | 7 +++----
src/winmenu.c | 5 ++---
src/wmspec.c | 3 +--
10 files changed, 25 insertions(+), 27 deletions(-)
diff --git a/src/WindowMaker.h b/src/WindowMaker.h
index 4561576..6950a78 100644
--- a/src/WindowMaker.h
+++ b/src/WindowMaker.h
@@ -464,6 +464,13 @@ extern struct wmaker_global_variables {
/* locale to use. NULL==POSIX or C */
const char *locale;
+ /* Tracking of X events timestamps */
+ struct {
+ /* ts of the last event we received */
+ Time last_event;
+
+ } timestamp;
+
} w_global;
extern unsigned int ValidModMask;
diff --git a/src/actions.c b/src/actions.c
index 5ceb9d5..0b4f450 100644
--- a/src/actions.c
+++ b/src/actions.c
@@ -53,7 +53,6 @@
/****** Global Variables ******/
int ignore_wks_change = 0;
-extern Time LastTimestamp;
extern Time LastFocusChange;
extern Atom _XA_WM_TAKE_FOCUS;
@@ -112,7 +111,7 @@ void wSetFocusTo(WScreen *scr, WWindow *wwin)
WWindow *old_focused;
WWindow *focused = scr->focused_window;
- Time timestamp = LastTimestamp;
+ Time timestamp = w_global.timestamp.last_event;
WApplication *oapp = NULL, *napp = NULL;
int wasfocused;
diff --git a/src/appmenu.c b/src/appmenu.c
index 539f056..ceb6c9a 100644
--- a/src/appmenu.c
+++ b/src/appmenu.c
@@ -38,7 +38,6 @@
/******** Global Variables **********/
extern Atom _XA_WINDOWMAKER_MENU;
-extern Time LastTimestamp;
typedef struct {
short code;
@@ -67,7 +66,7 @@ static void sendMessage(Window window, int what, int tag)
event.xclient.format = 32;
event.xclient.display = dpy;
event.xclient.window = window;
- event.xclient.data.l[0] = LastTimestamp;
+ event.xclient.data.l[0] = w_global.timestamp.last_event;
event.xclient.data.l[1] = what;
event.xclient.data.l[2] = tag;
event.xclient.data.l[3] = 0;
diff --git a/src/event.c b/src/event.c
index 95b437b..aa4c92a 100644
--- a/src/event.c
+++ b/src/event.c
@@ -84,7 +84,6 @@ extern Cursor wCursor[WCUR_LAST];
extern WShortKey wKeyBindings[WKBD_LAST];
extern int wScreenCount;
-extern Time LastTimestamp;
extern Time LastFocusChange;
#define MOD_MASK wPreferences.modifier_mask
@@ -527,30 +526,30 @@ static void saveTimestamp(XEvent * event)
switch (event->type) {
case ButtonRelease:
case ButtonPress:
- LastTimestamp = event->xbutton.time;
+ w_global.timestamp.last_event = event->xbutton.time;
break;
case KeyPress:
case KeyRelease:
- LastTimestamp = event->xkey.time;
+ w_global.timestamp.last_event = event->xkey.time;
break;
case MotionNotify:
- LastTimestamp = event->xmotion.time;
+ w_global.timestamp.last_event = event->xmotion.time;
break;
case PropertyNotify:
- LastTimestamp = event->xproperty.time;
+ w_global.timestamp.last_event = event->xproperty.time;
break;
case EnterNotify:
case LeaveNotify:
- LastTimestamp = event->xcrossing.time;
+ w_global.timestamp.last_event = event->xcrossing.time;
break;
case SelectionClear:
- LastTimestamp = event->xselectionclear.time;
+ w_global.timestamp.last_event = event->xselectionclear.time;
break;
case SelectionRequest:
- LastTimestamp = event->xselectionrequest.time;
+ w_global.timestamp.last_event = event->xselectionrequest.time;
break;
case SelectionNotify:
- LastTimestamp = event->xselection.time;
+ w_global.timestamp.last_event = event->xselection.time;
#ifdef XDND
wXDNDProcessSelection(event);
#endif
diff --git a/src/main.c b/src/main.c
index c7c8d40..1f75e16 100644
--- a/src/main.c
+++ b/src/main.c
@@ -128,8 +128,6 @@ Atom _XA_WM_IGNORE_FOCUS_EVENTS;
/* cursors */
Cursor wCursor[WCUR_LAST];
-/* last event timestamp for XSetInputFocus */
-Time LastTimestamp = CurrentTime;
/* timestamp on the last time we did XSetInputFocus() */
Time LastFocusChange = CurrentTime;
@@ -596,6 +594,7 @@ int main(int argc, char **argv)
memset(&w_global, 0, sizeof(w_global));
w_global.program.state = WSTATE_NORMAL;
w_global.program.signal_state = WSTATE_NORMAL;
+ w_global.timestamp.last_event = CurrentTime;
/* setup common stuff for the monitor and wmaker itself */
WMInitializeApplication("WindowMaker", &argc, argv);
diff --git a/src/session.c b/src/session.c
index c4ba5af..20fc8fb 100644
--- a/src/session.c
+++ b/src/session.c
@@ -89,7 +89,6 @@
extern Atom _XA_WM_SAVE_YOURSELF;
-extern Time LastTimestamp;
static WMPropList *sApplications = NULL;
static WMPropList *sCommand;
diff --git a/src/shutdown.c b/src/shutdown.c
index 23f02ac..163fe71 100644
--- a/src/shutdown.c
+++ b/src/shutdown.c
@@ -39,7 +39,6 @@
#include "shutdown.h"
extern Atom _XA_WM_DELETE_WINDOW;
-extern Time LastTimestamp;
extern int wScreenCount;
static void wipeDesktop(WScreen * scr);
@@ -197,7 +196,7 @@ static void wipeDesktop(WScreen * scr)
wwin = scr->focused_window;
while (wwin) {
if (wwin->protocols.DELETE_WINDOW)
- wClientSendProtocol(wwin, _XA_WM_DELETE_WINDOW,
LastTimestamp);
+ wClientSendProtocol(wwin, _XA_WM_DELETE_WINDOW,
w_global.timestamp.last_event);
else
wClientKill(wwin);
wwin = wwin->prev;
diff --git a/src/window.c b/src/window.c
index a5de8a9..be3796a 100644
--- a/src/window.c
+++ b/src/window.c
@@ -86,7 +86,6 @@ extern XContext wWinContext;
extern Atom _XA_WM_DELETE_WINDOW;
extern Atom _XA_GNUSTEP_WM_MINIATURIZE_WINDOW;
extern Atom _XA_WINDOWMAKER_STATE;
-extern Time LastTimestamp;
/***** Local Stuff *****/
static WWindowState *windowState = NULL;
@@ -2918,7 +2917,7 @@ static void windowCloseClick(WCoreWindow *sender, void
*data, XEvent *event)
} else {
if (wwin->protocols.DELETE_WINDOW && event->xbutton.state == 0)
{
/* send delete message */
- wClientSendProtocol(wwin, _XA_WM_DELETE_WINDOW,
LastTimestamp);
+ wClientSendProtocol(wwin, _XA_WM_DELETE_WINDOW,
w_global.timestamp.last_event);
}
}
}
@@ -2934,7 +2933,7 @@ static void windowCloseDblClick(WCoreWindow *sender, void
*data, XEvent *event)
/* send delete message */
if (wwin->protocols.DELETE_WINDOW)
- wClientSendProtocol(wwin, _XA_WM_DELETE_WINDOW, LastTimestamp);
+ wClientSendProtocol(wwin, _XA_WM_DELETE_WINDOW,
w_global.timestamp.last_event);
else
wClientKill(wwin);
}
@@ -2974,7 +2973,7 @@ static void windowIconifyClick(WCoreWindow *sender, void
*data, XEvent *event)
return;
if (wwin->protocols.MINIATURIZE_WINDOW && event->xbutton.state == 0) {
- wClientSendProtocol(wwin, _XA_GNUSTEP_WM_MINIATURIZE_WINDOW,
LastTimestamp);
+ wClientSendProtocol(wwin, _XA_GNUSTEP_WM_MINIATURIZE_WINDOW,
w_global.timestamp.last_event);
} else {
WApplication *wapp;
if ((event->xbutton.state & ControlMask) ||
(event->xbutton.button == Button3)) {
diff --git a/src/winmenu.c b/src/winmenu.c
index a8a7bb8..16d6785 100644
--- a/src/winmenu.c
+++ b/src/winmenu.c
@@ -69,7 +69,6 @@
#define WO_ENTRIES 3
/**** Global data ***/
-extern Time LastTimestamp;
extern Atom _XA_WM_DELETE_WINDOW;
extern Atom _XA_GNUSTEP_WM_MINIATURIZE_WINDOW;
@@ -113,7 +112,7 @@ static void execMenuCommand(WMenu * menu, WMenuEntry *
entry)
switch (entry->order) {
case MC_CLOSE:
/* send delete message */
- wClientSendProtocol(wwin, _XA_WM_DELETE_WINDOW, LastTimestamp);
+ wClientSendProtocol(wwin, _XA_WM_DELETE_WINDOW,
w_global.timestamp.last_event);
break;
case MC_KILL:
@@ -134,7 +133,7 @@ static void execMenuCommand(WMenu * menu, WMenuEntry *
entry)
wDeiconifyWindow(wwin);
} else {
if (wwin->protocols.MINIATURIZE_WINDOW) {
- wClientSendProtocol(wwin,
_XA_GNUSTEP_WM_MINIATURIZE_WINDOW, LastTimestamp);
+ wClientSendProtocol(wwin,
_XA_GNUSTEP_WM_MINIATURIZE_WINDOW, w_global.timestamp.last_event);
} else {
wIconifyWindow(wwin);
}
diff --git a/src/wmspec.c b/src/wmspec.c
index e71265b..d2b945f 100644
--- a/src/wmspec.c
+++ b/src/wmspec.c
@@ -52,7 +52,6 @@
/* Global variables */
extern Atom _XA_WM_DELETE_WINDOW;
-extern Time LastTimestamp;
/* Root Window Properties */
static Atom net_supported;
@@ -1406,7 +1405,7 @@ Bool wNETWMProcessClientMessage(XClientMessageEvent
*event)
} else if (event->message_type == net_close_window) {
if (!WFLAGP(wwin, no_closable)) {
if (wwin->protocols.DELETE_WINDOW)
- wClientSendProtocol(wwin, _XA_WM_DELETE_WINDOW,
LastTimestamp);
+ wClientSendProtocol(wwin, _XA_WM_DELETE_WINDOW,
w_global.timestamp.last_event);
}
} else if (event->message_type == net_wm_state) {
int maximized = wwin->flags.maximized;
--
1.8.4.rc3
--
To unsubscribe, send mail to [email protected].