commit 4d1fcd32d35a7b8d534154375285d03b0cefb575
parent d962bec269f613dde4b9ae2833843f06b45db5fb
Author: Anselm R. Garbe <garbeam@wmii.de>
Date: Wed, 10 May 2006 23:26:53 +0200
fixed wmiimenu issue (grabbing keyboard without input list made restart of X necessary, to get back input focus), updated README, updated TODO.wmii-4 (cleaned up, made ordered list)
Diffstat:
3 files changed, 38 insertions(+), 61 deletions(-)
diff --git a/README b/README
@@ -60,7 +60,7 @@ The following people have contributed especially to wmii in various ways:
- Vincent <10 dot 50 at free dot fr>
- Oliver Kopp <olly at flupp dot de>
- Sebastian Roth <sebastian dot roth at gmail dot com>
-- Nico Golde <nico at dot ngolde dot de>
+- Nico Golde <nico at ngolde dot de>
- Steve Hoffman <steveh at g2switchworks dot com>
- Christof Musik <christof at senfdax dot de>
- Steffen Liebergeld <perl at gmx dot org>
diff --git a/TODO.wmii-4 b/TODO.wmii-4
@@ -1,62 +1,34 @@
-- UTF8 support, look into fluxbox
+Ordered list of TODOs:
+
- remove swapping action, merge vertocal swapping into moving - is this a good idea?
-- remove internal labels, now tagging seems easy and straightforward that they
- THINK: We'll need CreateTag, DestroyTag, UnfocusTag, FocusTag and the
- event loop in wmiirc must be before TAGGING
-can be externalized again
- idea for column mode:
- *: is the current default mode with fallback (shows arbitrary clients)
- 0: is the current max mode, shows only one client at the time (same bahvior as current)
- n: shows n clients, in stacking mode, using the selected client as center,
+ 100: is the current default mode with fallback (shows arbitrary clients)
+ 0: is the current max mode, shows only one client at the time (same bahvior
+ as current) n: shows n clients, in stacking mode, using the
+ selected client as center,
n == 1 is current stacking mode,
n == equal will use the center of (n/2),
n == unequal has always a center element.
-- tagbars
-- screen dimension rescaling if screen resolution changes (even with Xrandr)
-- Xinerama support
-- partly EWMH support
-- libixp: idea from PoP: implement a va_args method similiar to printf for
- marshalling 9P messages, might reduce LOC drastically
+ Visible clients should only change when a formerly hidden
+ (stacked) client is made visible. So, when the fifth client is focused
+ and made visible, the third would disappear (with n=2) -- this means on
+ boundaries, like in mutt(1).
+- /def/ncol defines num of columns which should be created by default if possible.
+- wmiimenu -t <title> flag
- remove the geom syntax as it is now (with the +- stuff, and only
allowing explicit coordinates, instead additionally resize
+/-<w> +/-<h> and move +/-<x> +/-<y> actions are needed in the
associated ctl devices of clients.
- add wmiir ls (read should have same semantic as in 9p), output without
-details, add -l for details like in ls of Plan 9
+ details, add -l for details like in ls of Plan 9
+- remove internal labels, now tagging seems easy and straightforward that they
+ THINK: We'll need CreateTag, DestroyTag, UnfocusTag, FocusTag and the
+ event loop in wmiirc must be before TAGGING can be externalized again
- liblitz: window abstraction (creation, events), can be reused in menu and bar
-and frames
-
-ad new column mode:
-
-> > To clarify what happens on focus change imagine 6 clients with
-> > stacking set to 2 visible clients per time. The center of two
-> > visible clients is always the 1st client (2/2 == 1), thus if the
-> > first of client of the column is focused, also the second is
-> > visible, if the second is focused also the third is visible, but
-> > the first is invisible, etc. The only exception will be on
-> > boundaries, if the last client is selected, also the fifth
-> > client will be visible.
->
-> Interesting proposal, except for the portion above. Say I have the
-> third and fourth clients visible, with the third focused. If I change
-> the focus to the fourth client, I don't want to hide the third - I'm
-> probably still working with it.
->
-> I think the visible clients should only change when a formerly hidden
-> (stacked) client is made visible. So, when the fifth client is focused
-> and made visible, the third would disappear, leaving the fourth and
-> fifth.
->
-> It would work the same way in reverse. With the third and fourth
-> clients visible, I can focus either without changing visiblities. When
-> I focus the second client, it becomes visible and hides the fourth.
->
-> This is similar to your idea, except for delaying changes to which
-> clients are visible.
- --Doug Bell
-
-
-13:12 < Neptun> when present (like -T "Enter view name") it would create a
-label with that text on the left part of the menu. what do you think?
-
-- /def/ncol defines num of columns which should be created by default if possible.
+ and frames
+- tagbars
+- screen dimension rescaling if screen resolution changes (even with Xrandr)
+- Xinerama support
+- partial EWMH support
+- libixp: idea from PoP: implement a va_args method similiar to printf for
+ marshalling 9P messages, might reduce LOC drastically
diff --git a/cmd/wmiimenu.c b/cmd/wmiimenu.c
@@ -291,10 +291,11 @@ handle_kpress(XKeyEvent * e)
draw_menu();
}
-void
+static char *
read_allitems()
{
- char *maxname = 0, *p, buf[1024];
+ static char *maxname = nil;
+ char *p, buf[1024];
unsigned int len = 0, max = 0;
while(fgets(buf, sizeof(buf), stdin)) {
@@ -309,10 +310,7 @@ read_allitems()
cext_vattach(item2vector(&allitem), p);
}
- if(maxname)
- cmdw = blitz_textwidth(dpy, &draw.font, maxname) + mrect.height;
- if(cmdw > mrect.width / 3)
- cmdw = mrect.width / 3;
+ return maxname;
}
int
@@ -320,7 +318,7 @@ main(int argc, char *argv[])
{
int i;
XSetWindowAttributes wa;
- char *fontstr, *selcolstr, *normcolstr;
+ char *fontstr, *selcolstr, *normcolstr, *maxname;
XEvent ev;
/* command line args */
@@ -343,7 +341,9 @@ main(int argc, char *argv[])
}
screen = DefaultScreen(dpy);
- /* grab as early as possible */
+ maxname = read_allitems();
+
+ /* grab as early as possible, but after reading all items!!! */
while(XGrabKeyboard
(dpy, RootWindow(dpy, screen), True, GrabModeAsync,
GrabModeAsync, CurrentTime) != GrabSuccess)
@@ -386,7 +386,11 @@ main(int argc, char *argv[])
DefaultDepth(dpy, screen));
XSync(dpy, False);
- read_allitems();
+
+ if(maxname)
+ cmdw = blitz_textwidth(dpy, &draw.font, maxname) + mrect.height;
+ if(cmdw > mrect.width / 3)
+ cmdw = mrect.width / 3;
text[0] = 0;
update_items(text);
@@ -412,6 +416,7 @@ main(int argc, char *argv[])
break;
}
+ XUngrabKeyboard(dpy, CurrentTime);
XFreePixmap(dpy, draw.drawable);
XFreeGC(dpy, draw.gc);
XDestroyWindow(dpy, win);