formatting changes; attempt at keyboard-based window switching

This commit is contained in:
rsc 2005-07-13 03:54:35 +00:00
parent 7ce3f20d73
commit ac33a34a29
11 changed files with 494 additions and 411 deletions

View file

@ -15,10 +15,11 @@ Client *current;
void void
setactive(Client *c, int on) setactive(Client *c, int on)
{ {
if (c->parent == c->screen->root) { // dbg("setactive client %x %d", c->window, c->on);
fprintf(stderr, "rio: bad parent in setactive; dumping core\n");
abort(); if(c->parent == c->screen->root)
} return;
if(on){ if(on){
XUngrabButton(dpy, AnyButton, AnyModifier, c->parent); XUngrabButton(dpy, AnyButton, AnyModifier, c->parent);
XSetInputFocus(dpy, c->window, RevertToPointerRoot, timestamp()); XSetInputFocus(dpy, c->window, RevertToPointerRoot, timestamp());
@ -248,3 +249,37 @@ dump_clients(void)
fprintf(stderr, "w 0x%x parent 0x%x @ (%d, %d)\n", c->window, c->parent, c->x, c->y); fprintf(stderr, "w 0x%x parent 0x%x @ (%d, %d)\n", c->window, c->parent, c->x, c->y);
} }
#endif #endif
void
shuffle(int up)
{
Client **l, *c;
if(clients == 0 || clients->next == 0)
return;
if(up){
//for(c=clients; c->next; c=c->next)
// ;
for(l=&clients; (*l)->next; l=&(*l)->next)
;
c = *l;
*l = nil;
c->next = clients;
clients = c;
XMapRaised(dpy, c->parent);
top(c);
active(c);
}else{
c = clients;
for(l=&clients; *l; l=&(*l)->next)
;
clients = c->next;
*l = c;
c->next = 0;
XLowerWindow(dpy, c->window);
}
// XMapRaised(dpy, clients->parent);
// top(clients);
// active(clients);
}

View file

@ -15,7 +15,9 @@ void
mainloop(int shape_event) mainloop(int shape_event)
{ {
XEvent ev; XEvent ev;
XKeyEvent *ke;
Top:
for(;;){ for(;;){
getevent(&ev); getevent(&ev);
@ -34,6 +36,12 @@ mainloop(int shape_event)
#endif #endif
fprintf(stderr, "rio: unknown ev.type %d\n", ev.type); fprintf(stderr, "rio: unknown ev.type %d\n", ev.type);
break; break;
case KeyPress:
keypress(&ev.xkey);
break;
case KeyRelease:
keyrelease(&ev.xkey);
break;
case ButtonPress: case ButtonPress:
button(&ev.xbutton); button(&ev.xbutton);
break; break;

View file

@ -61,6 +61,11 @@ void setlabel();
void getproto(); void getproto();
void gettrans(); void gettrans();
/* key.c */
void keypress();
void keyrelease();
void keysetup();
/* menu.c */ /* menu.c */
void button(); void button();
void spawn(); void spawn();
@ -88,6 +93,7 @@ Client *getclient();
void rmclient(); void rmclient();
void dump_revert(); void dump_revert();
void dump_clients(); void dump_clients();
void shuffle(int);
/* grab.c */ /* grab.c */
int menuhit(); int menuhit();

View file

@ -222,6 +222,7 @@ main(int argc, char *argv[])
for(i = 0; i < num_screens; i++) for(i = 0; i < num_screens; i++)
scanwins(&screens[i]); scanwins(&screens[i]);
keysetup();
mainloop(shape_event); mainloop(shape_event);
return 0; return 0;
} }

View file

@ -1,3 +1,7 @@
/*
* Window management.
*/
/* Copyright (c) 1994-1996 David Hogan, see README for licence details */ /* Copyright (c) 1994-1996 David Hogan, see README for licence details */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>

View file

@ -1,8 +1,13 @@
/*
* Pop-up menus.
*/
/* Copyright (c) 1994-1996 David Hogan, see README for licence details */ /* Copyright (c) 1994-1996 David Hogan, see README for licence details */
#include <stdio.h> #include <stdio.h>
#include <signal.h> #include <signal.h>
#include <unistd.h> #include <unistd.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include <sys/wait.h> #include <sys/wait.h>
#include <X11/X.h> #include <X11/X.h>
#include <X11/Xlib.h> #include <X11/Xlib.h>
@ -15,6 +20,7 @@ Client *hiddenc[MAXHIDDEN];
int numhidden; int numhidden;
int virt; int virt;
int reversehide = 1;
Client * currents[NUMVIRTUALS] = Client * currents[NUMVIRTUALS] =
{ {
@ -53,6 +59,15 @@ char *b3items[B3FIXED+MAXHIDDEN+1] =
0, 0,
}; };
enum
{
New,
Reshape,
Move,
Delete,
Hide
};
Menu b3menu = Menu b3menu =
{ {
b3items, b3items,
@ -139,21 +154,21 @@ button(XButtonEvent *e)
if(current && current->screen == s) if(current && current->screen == s)
cmapnofocus(s); cmapnofocus(s);
switch (n = menuhit(e, &b3menu)){ switch (n = menuhit(e, &b3menu)){
case 0: /* New */ case New:
spawn(s); spawn(s);
break; break;
case 1: /* Reshape */ case Reshape:
reshape(selectwin(1, 0, s), Button3, sweep, 0); reshape(selectwin(1, 0, s), Button3, sweep, 0);
break; break;
case 2: /* Move */ case Move:
move(selectwin(0, 0, s), Button3); move(selectwin(0, 0, s), Button3);
break; break;
case 3: /* Delete */ case Delete:
shift = 0; shift = 0;
c = selectwin(1, &shift, s); c = selectwin(1, &shift, s);
delete(c, shift); delete(c, shift);
break; break;
case 4: /* Hide */ case Hide:
hide(selectwin(1, 0, s)); hide(selectwin(1, 0, s));
break; break;
default: /* unhide window */ default: /* unhide window */
@ -264,8 +279,15 @@ hide(Client *c)
setstate(c, IconicState); setstate(c, IconicState);
if(c == current) if(c == current)
nofocus(); nofocus();
if(reversehide){
memmove(hiddenc+1, hiddenc, numhidden*sizeof hiddenc[0]);
memmove(b3items+B3FIXED+1, b3items+B3FIXED, numhidden*sizeof b3items[0]);
hiddenc[0] = c;
b3items[B3FIXED] = c->label;
}else{
hiddenc[numhidden] = c; hiddenc[numhidden] = c;
b3items[B3FIXED+numhidden] = c->label; b3items[B3FIXED+numhidden] = c->label;
}
numhidden++; numhidden++;
b3items[B3FIXED+numhidden] = 0; b3items[B3FIXED+numhidden] = 0;
} }

View file

@ -1,4 +1,5 @@
<$PLAN9/src/mkhdr <$PLAN9/src/mkhdr
<|sh $PLAN9/src/libdraw/mkwsysrules.sh # for X11
OFILES=\ OFILES=\
client.$O\ client.$O\
@ -7,10 +8,12 @@ OFILES=\
error.$O\ error.$O\
event.$O\ event.$O\
grab.$O\ grab.$O\
key.$O\
main.$O\ main.$O\
manage.$O\ manage.$O\
menu.$O\ menu.$O\
CFLAGS=$CFLAGS -DDEBUG
HFILES=dat.h fns.h HFILES=dat.h fns.h
TARG=rio TARG=rio
@ -18,10 +21,14 @@ TARG=rio
# need to add lib64 when it exists (on x86-64), but # need to add lib64 when it exists (on x86-64), but
# Darwin complains about the nonexistant directory # Darwin complains about the nonexistant directory
L64=`[ -d $X11/lib64 ] && echo 64; echo` L64=`[ -d $X11/lib64 ] && echo 64; echo`
LDFLAGS=-L$X11/lib$L64\ -lXext -lX11 LDFLAGS=-L$X11/lib$L64 -lXext -lX11
<$PLAN9/src/mkone <$PLAN9/src/mkone
CFLAGS=$CFLAGS -DSHAPE -I$X11/include CFLAGS=$CFLAGS -DSHAPE
$O.xevents: xevents.$O printevent.$O
$LD -o $target $prereq $LDFLAGS
xevents.$O printevent.$O: printevent.h