formatting changes; attempt at keyboard-based window switching
This commit is contained in:
parent
7ce3f20d73
commit
ac33a34a29
11 changed files with 494 additions and 411 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
/*
|
||||
* Window management.
|
||||
*/
|
||||
|
||||
/* Copyright (c) 1994-1996 David Hogan, see README for licence details */
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue