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
setactive(Client *c, int on)
{
if (c->parent == c->screen->root) {
fprintf(stderr, "rio: bad parent in setactive; dumping core\n");
abort();
}
// dbg("setactive client %x %d", c->window, c->on);
if(c->parent == c->screen->root)
return;
if(on){
XUngrabButton(dpy, AnyButton, AnyModifier, c->parent);
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);
}
#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)
{
XEvent ev;
XKeyEvent *ke;
Top:
for(;;){
getevent(&ev);
@ -34,6 +36,12 @@ mainloop(int shape_event)
#endif
fprintf(stderr, "rio: unknown ev.type %d\n", ev.type);
break;
case KeyPress:
keypress(&ev.xkey);
break;
case KeyRelease:
keyrelease(&ev.xkey);
break;
case ButtonPress:
button(&ev.xbutton);
break;

View file

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

View file

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

View file

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

View file

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

View file

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