wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

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:
README | 2+-
TODO.wmii-4 | 74+++++++++++++++++++++++---------------------------------------------------
cmd/wmiimenu.c | 23++++++++++++++---------
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);