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
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue