wmii

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

commit 918ece162d37406cb140f62155bd6270f351c47e
parent b7941ad804008b1f8063e1ad5975bcb8aaf3b64b
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Fri, 10 Feb 2006 17:51:20 +0100

added new events (focus page and focus client provide the associated name)


Diffstat:
cmd/wm/client.c | 14++++++++++----
cmd/wm/page.c | 34++++++++++++++++++++++++++++++++--
cmd/wm/wm.c | 25-------------------------
cmd/wm/wm.h | 2+-
rc/status | 2+-
rc/wmiirc | 15+++++++++++----
6 files changed, 55 insertions(+), 37 deletions(-)

diff --git a/cmd/wm/client.c b/cmd/wm/client.c @@ -90,6 +90,14 @@ set_client_state(Client * c, int state) (unsigned char *) data, 2); } +static void +client_name_event(Client *c) +{ + char buf[256]; + snprintf(buf, sizeof(buf), "C %s\n", c->name); + do_pend_fcall(buf); +} + void focus_client(Client *c) { @@ -125,7 +133,7 @@ focus_client(Client *c) XDefineCursor(dpy, c->win, normal_cursor); draw_client(c); XSync(dpy, False); - /* TODO: client update */ + client_name_event(c); } void @@ -218,7 +226,7 @@ handle_client_property(Client *c, XPropertyEvent *e) } if(c->page) draw_client(c); - /* TODO: client update */ + client_name_event(c); break; case XA_WM_TRANSIENT_FOR: XGetTransientForHint(dpy, c->win, &c->trans); @@ -381,8 +389,6 @@ attach_client(Client *c) map_client(c); XMapWindow(dpy, c->frame.win); focus_client(c); - - /* TODO: page update event */ } void diff --git a/cmd/wm/page.c b/cmd/wm/page.c @@ -82,6 +82,8 @@ focus_page(Page *p) { size_t i; Page *old = page ? page[sel] : nil; + char buf[16]; + Client *c; if(!page) return; @@ -92,7 +94,7 @@ focus_page(Page *p) sel = i; for(i = 0; i < nclient; i++) { - Client *c = client[i]; + c = client[i]; if(old && (c->page == old)) XMoveWindow(dpy, c->frame.win, 2 * rect.width, 2 * rect.height); else if(c->page == p) { @@ -100,7 +102,10 @@ focus_page(Page *p) draw_client(c); } } - do_pend_fcall("SelPage\n"); + if((c = sel_client_of_page(p))) + focus_client(c); + snprintf(buf, sizeof(buf), "P %d\n", sel + 1); + do_pend_fcall(buf); XChangeProperty(dpy, root, net_atoms[NET_CURRENT_DESKTOP], XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &sel, 1); XSync(dpy, False); @@ -245,3 +250,28 @@ pid_to_index(unsigned short id) return i; return -1; } + +void +select_page(char *arg) +{ + size_t new = sel; + const char *err; + + if(!npage || !arg) + return; + if(!strncmp(arg, "prev", 5)) { + if(new > 0) + for(new = 0; page[new]; new++); + new--; + } else if(!strncmp(arg, "next", 5)) { + if(page[new + 1]) + new++; + else + new = 0; + } else { + int idx = cext_strtonum(arg, 0, npage, &err); + if(idx < npage) + new = idx; + } + focus_page(page[new]); +} diff --git a/cmd/wm/wm.c b/cmd/wm/wm.c @@ -330,31 +330,6 @@ attach_detached_client() } } -void -select_page(char *arg) -{ - size_t new = sel; - const char *err; - - if(!npage || !arg) - return; - if(!strncmp(arg, "prev", 5)) { - if(new > 0) - for(new = 0; page[new]; new++); - new--; - } else if(!strncmp(arg, "next", 5)) { - if(page[new + 1]) - new++; - else - new = 0; - } else { - int idx = cext_strtonum(arg, 0, npage, &err); - if(idx < npage) - new = idx; - } - focus_page(page[new]); -} - Client * win_to_client(Window w) { diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -259,6 +259,7 @@ void destroy_page(Page *p); void focus_page(Page *p); XRectangle *rectangles(unsigned int *num); int pid_to_index(unsigned short id); +void select_page(char *arg); /* spawn.c */ void spawn(char *cmd); @@ -281,5 +282,4 @@ int win_state(Window w); void pager(); void detached_clients(); void attach_detached_client(); -void select_page(char *arg); diff --git a/rc/status b/rc/status @@ -23,7 +23,7 @@ fn statustext { } text=`{statustext} -while(xwrite /bar/1/data $"text) { +while(xwrite /bar/3/data $"text) { sleep 2 text=`{statustext} } diff --git a/rc/wmiirc b/rc/wmiirc @@ -25,7 +25,7 @@ MODKEY=Alt # WMIIWM CONFIGURATION xwrite /def/bar $CLIENT_BAR xwrite /def/border $CLIENT_BORDER -xwrite /def/handleinc 1 +xwrite /def/inc 1 xwrite /def/snap 20 #xwrite /def/font $FONT #xwrite /def/selcolor $SEL_COLOR @@ -67,8 +67,10 @@ for(i in 1 2 3 4 5 6 7 8 9) # WMIIBAR CONFIGURATION -xwrite /bar/new/data status -xwrite /bar/new/data event +xwrite /bar/new/data 1 +xwrite /bar/new/data '' +xwrite /bar/new/data fnord +xwrite /bar/expand 2 # MISC @@ -78,7 +80,12 @@ status & # EVENT LOOP wmiir read /event | \ while(event=`{read}) { - xwrite /bar/2/data $"event + if(~ $event(1) P) + xwrite /bar/1/data $event(2) + if(~ $event(1) C) { + text=`{echo $"event | sed 's/^C //g'} + xwrite /bar/2/data $"text + } if(~ $event(1) K) { # key press switch($event(2)) { case $MODKEY-Control-c