1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-19 04:20:27 +01:00

- Fixed problem calling W_FlushIdleNotificationQueue() when there was no idle

handler installed.
- Fixed some problem with ASAP notification queues
- fixed a memleak related to notification queues.
This commit is contained in:
dan
1999-11-17 22:01:33 +00:00
parent 06b390ca01
commit 1d56ad7615
3 changed files with 22 additions and 25 deletions

View File

@@ -217,8 +217,6 @@ WMPostNotification(WMNotification *notification)
}
WMReleaseNotification(notification);
W_FlushASAPNotificationQueue();
}
@@ -491,7 +489,8 @@ WMEnqueueCoalesceNotification(WMNotificationQueue *queue,
switch (postingStyle) {
case WMPostNow:
WMPostNotification(notification);
break;
WMReleaseNotification(notification);
break;
case WMPostASAP:
WMPutInBag(queue->asapQueue, notification);
@@ -514,7 +513,8 @@ W_FlushASAPNotificationQueue()
WMNotification *tmp = WMGetFromBag(queue->asapQueue, 0);
WMPostNotification(tmp);
WMDeleteFromBag(queue->asapQueue, 0);
WMReleaseNotification(tmp);
WMDeleteFromBag(queue->asapQueue, 0);
}
queue = queue->next;
@@ -532,6 +532,7 @@ W_FlushIdleNotificationQueue()
WMNotification *tmp = WMGetFromBag(queue->idleQueue, 0);
WMPostNotification(tmp);
WMReleaseNotification(tmp);
WMDeleteFromBag(queue->idleQueue, 0);
}

View File

@@ -327,7 +327,9 @@ checkIdleHandlers()
IdleHandler *handler, *tmp;
if (!idleHandler) {
return False;
W_FlushIdleNotificationQueue();
/* make sure an observer in queue didn't added an idle handler */
return (idleHandler!=NULL);
}
handler = idleHandler;
@@ -343,8 +345,11 @@ checkIdleHandlers()
handler = tmp;
}
return True;
W_FlushIdleNotificationQueue();
/* this is not necesarrily False, because one handler can re-add itself */
return (idleHandler!=NULL);
}
@@ -922,9 +927,6 @@ WMNextEvent(Display *dpy, XEvent *event)
/* Do idle stuff */
/* Do idle and timer stuff while there are no timer or X events */
while (!XPending(dpy) && checkIdleHandlers()) {
W_FlushIdleNotificationQueue();
/* dispatch timer events */
if (timerPending())
checkTimerHandlers();
@@ -959,9 +961,6 @@ WMMaskEvent(Display *dpy, long mask, XEvent *event)
while (!XCheckMaskEvent(dpy, mask, event)) {
/* Do idle stuff while there are no timer or X events */
while (checkIdleHandlers()) {
W_FlushIdleNotificationQueue();
if (XCheckMaskEvent(dpy, mask, event))
return;
}
@@ -1007,9 +1006,6 @@ WMMaskEvent(Display *dpy, long mask, XEvent *event)
while (!XCheckMaskEvent(dpy, mask, event)) {
/* Do idle stuff while there are no timer or X events */
while (checkIdleHandlers()) {
W_FlushIdleNotificationQueue();
if (XCheckMaskEvent(dpy, mask, event))
return;
}

View File

@@ -67,8 +67,6 @@ static InputHandler *inputHandler=NULL;
#define timerPending() (timerHandler)
#define idlePending() (idleHandler)
static void
rightNow(struct timeval *tv) {
@@ -274,14 +272,15 @@ WMDeleteInputHandler(WMHandlerID handlerID)
}
static void
static Bool
checkIdleHandlers()
{
IdleHandler *handler, *tmp;
if (!idleHandler) {
W_FlushIdleNotificationQueue();
return;
/* make sure an observer in queue didn't added an idle handler */
return (idleHandler!=NULL);
}
handler = idleHandler;
@@ -297,7 +296,11 @@ checkIdleHandlers()
handler = tmp;
}
W_FlushIdleNotificationQueue();
/* this is not necesarrily False, because one handler can re-add itself */
return (idleHandler!=NULL);
}
@@ -563,16 +566,13 @@ WHandleEvents()
*/
if (inputHandler) {
/* Do idle and timer stuff while there are no input events */
while (idlePending() && inputHandler && !handleInputEvents(False)) {
if (idlePending())
checkIdleHandlers();
while (checkIdleHandlers() && inputHandler && !handleInputEvents(False)) {
/* dispatch timer events */
if (timerPending())
checkTimerHandlers();
}
} else {
if (idlePending())
checkIdleHandlers();
checkIdleHandlers();
/* dispatch timer events */
if (timerPending())
checkTimerHandlers();