added /ctl actions

This commit is contained in:
Anselm R. Garbe 2006-02-06 10:46:52 +02:00
parent ee53f73922
commit 19124f7fb6
3 changed files with 36 additions and 64 deletions

View File

@ -822,9 +822,24 @@ xwrite(IXPConn *c, Fcall *fcall)
switch (qpath_type(m->qid.path)) {
case Fctl:
if(fcall->count > sizeof(buf) - 1)
return Enocommand;
memcpy(buf, fcall->data, fcall->count);
buf[fcall->count] = 0;
switch(m->qid.dtype) {
case Droot:
/* TODO: /ctl commands */
if(!strncmp(buf, "quit", 5))
srv.running = 0;
else if(!strncmp(buf, "pager", 6))
pager();
else if(!strncmp(buf, "detached", 9))
detached_clients();
else if(!strncmp(buf, "attach", 7))
attach_detached_client();
else if(!strncmp(buf, "select", 6))
select_page(&buf[7]);
else
return Enocommand;
break;
case Dpage:
/* /TODO: /n/ctl commands */
@ -836,7 +851,7 @@ xwrite(IXPConn *c, Fcall *fcall)
/* /TODO: /n/{float,n}/n/ctl commands */
break;
default:
return Enocommand;
break;
}
break;
case Ffont:

View File

@ -21,28 +21,6 @@ static XRectangle initial_rect;
static int other_wm_running;
static int (*x_error_handler) (Display *, XErrorEvent *);
static void new_page(void *obj, char *arg);
static void xselect_page(void *obj, char *arg);
static void xdestroy_page(void *obj, char *arg);
static void xattach_client(void *obj, char *arg);
static void xdetach_client(void *obj, char *arg);
static void xclose_client(void *obj, char *arg);
static void pager(void *obj, char *arg);
static void detached_client(void *obj, char *arg);
/* action table for /ctl namespace */
Action wm_acttbl[] = {
{"new", new_page},
{"destroy", xdestroy_page},
{"select", xselect_page},
{"attach", xattach_client},
{"detach", xdetach_client},
{"close", xclose_client},
{"pager", pager},
{"detclient", detached_client},
{0, 0}
};
static char version[] = "wmiiwm - " VERSION ", (C)opyright MMIV-MMVI Anselm R. Garbe\n";
static void
@ -86,7 +64,7 @@ draw_pager_client(Client *c, Draw *d)
static void
draw_pager_page(size_t idx, Draw *d)
{
size_t i, j;
int i, j;
char name[4];
initial_rect = d->rect;
@ -99,8 +77,10 @@ draw_pager_page(size_t idx, Draw *d)
blitz_drawlabel(dpy, d);
XSync(dpy, False);
for(i = 0; i < page[idx]->narea && page[idx]->area[i]; i++) {
for(i = 0; i < page[idx]->narea; i++) {
Area *a = page[idx]->area[i];
if(!a->nclient)
continue;
for(j = a->nclient - 1; j >= 0; j--)
draw_pager_client(a->client[j], d);
}
@ -186,8 +166,8 @@ handle_kpress(XKeyEvent * e)
return -1;
}
static void
pager(void *obj, char *arg)
void
pager()
{
XEvent ev;
int i;
@ -242,7 +222,7 @@ pager(void *obj, char *arg)
}
static void
map_detached_client()
map_detached_clients()
{
unsigned int i, ic, ir, tw, th, rows, cols;
int dx, dy;
@ -278,8 +258,8 @@ map_detached_client()
}
}
static void
detached_client(void *obj, char *arg)
void
detached_clients()
{
XEvent ev;
int n;
@ -290,7 +270,7 @@ detached_client(void *obj, char *arg)
return;
XClearWindow(dpy, transient);
XMapRaised(dpy, transient);
map_detached_client();
map_detached_clients();
while(XGrabKeyboard
(dpy, transient, True, GrabModeAsync, GrabModeAsync,
CurrentTime) != GrabSuccess)
@ -334,16 +314,8 @@ detached_client(void *obj, char *arg)
}
}
static void
xclose_client(void *obj, char *arg)
{
Client *c = sel_client();
if(c)
close_client(c);
}
static void
xattach_client(void *obj, char *arg)
void
attach_detached_client()
{
Client *c = ndet ? det[0] : nil;
if(c) {
@ -353,16 +325,8 @@ xattach_client(void *obj, char *arg)
}
}
static void
xdetach_client(void *obj, char *arg)
{
Client *c = sel_client();
if(c)
detach_client(c, False);
}
static void
xselect_page(void *obj, char *arg)
void
select_page(char *arg)
{
size_t new = sel;
@ -385,18 +349,6 @@ xselect_page(void *obj, char *arg)
focus_page(page[new]);
}
static void
xdestroy_page(void *obj, char *arg)
{
destroy_page(page[sel]);
}
static void
new_page(void *obj, char *arg)
{
alloc_page();
}
Client *
win_to_client(Window w)
{

View File

@ -227,3 +227,8 @@ int win_state(Window w);
/*void handle_after_write(IXPServer * s, File * f);*/
void grab_window(Window w, unsigned long mod, unsigned int button);
void ungrab_window(Window w, unsigned long mod, unsigned int button);
void pager();
void detached_clients();
void attach_detached_client();
void select_page(char *arg);