projects
/
xmenu
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
move actions to end of main loop
[xmenu]
/
xmenu.c
diff --git
a/xmenu.c
b/xmenu.c
index
7ae7162
..
1515165
100644
(file)
--- a/
xmenu.c
+++ b/
xmenu.c
@@
-1150,13
+1150,15
@@
run(struct Menu *currmenu)
struct Item *lastitem;
KeySym ksym;
XEvent ev;
struct Item *lastitem;
KeySym ksym;
XEvent ev;
+ int action;
mapmenu(currmenu);
while (!XNextEvent(dpy, &ev)) {
mapmenu(currmenu);
while (!XNextEvent(dpy, &ev)) {
+ action = ACTION_NOP;
switch(ev.type) {
case Expose:
if (ev.xexpose.count == 0)
switch(ev.type) {
case Expose:
if (ev.xexpose.count == 0)
-
drawmenus(currmenu)
;
+
action = ACTION_DRAW
;
break;
case MotionNotify:
menu = getmenu(currmenu, ev.xbutton.window);
break;
case MotionNotify:
menu = getmenu(currmenu, ev.xbutton.window);
@@
-1171,8
+1173,7
@@
run(struct Menu *currmenu)
} else {
currmenu = menu;
}
} else {
currmenu = menu;
}
- mapmenu(currmenu);
- drawmenus(currmenu);
+ action = ACTION_MAP | ACTION_DRAW;
break;
case ButtonRelease:
if (!isclickbutton(ev.xbutton.button))
break;
case ButtonRelease:
if (!isclickbutton(ev.xbutton.button))
@@
-1190,9
+1191,8
@@
selectitem:
printf("%s\n", item->output);
return;
}
printf("%s\n", item->output);
return;
}
- mapmenu(currmenu);
currmenu->selected = currmenu->list;
currmenu->selected = currmenu->list;
-
drawmenus(currmenu)
;
+
action = ACTION_MAP | ACTION_DRAW
;
break;
case ButtonPress:
menu = getmenu(currmenu, ev.xbutton.window);
break;
case ButtonPress:
menu = getmenu(currmenu, ev.xbutton.window);
@@
-1235,16
+1235,16
@@
selectitem:
currmenu->parent != NULL) {
item = currmenu->parent->selected;
currmenu = currmenu->parent;
currmenu->parent != NULL) {
item = currmenu->parent->selected;
currmenu = currmenu->parent;
-
mapmenu(currmenu)
;
+
action = ACTION_MAP
;
} else
break;
currmenu->selected = item;
} else
break;
currmenu->selected = item;
-
drawmenus(currmenu)
;
+
action |= ACTION_DRAW
;
break;
case LeaveNotify:
previtem = NULL;
currmenu->selected = NULL;
break;
case LeaveNotify:
previtem = NULL;
currmenu->selected = NULL;
-
drawmenus(currmenu)
;
+
action = ACTION_DRAW
;
break;
case ConfigureNotify:
menu = getmenu(currmenu, ev.xconfigure.window);
break;
case ConfigureNotify:
menu = getmenu(currmenu, ev.xconfigure.window);
@@
-1261,9
+1261,13
@@
selectitem:
if (menu->parent == NULL)
return; /* closing the root menu closes the program */
currmenu = menu->parent;
if (menu->parent == NULL)
return; /* closing the root menu closes the program */
currmenu = menu->parent;
-
mapmenu(currmenu)
;
+
action = ACTION_MAP
;
break;
}
break;
}
+ if (action & ACTION_MAP)
+ mapmenu(currmenu);
+ if (action & ACTION_DRAW)
+ drawmenus(currmenu);
}
}
}
}