commit c9b562034a463f31eb00e8ccf36a120c574ba22a
parent 293e90cc00c6580206e0a91c1248bef146a993df
Author: Kris Maglione <jg@suckless.org>
Date: Tue, 13 Feb 2007 01:10:43 -0500
Added swapping back to the fs, but without bindings. Fixed a bug from 2 commits ago. Added more gotos :)
Diffstat:
3 files changed, 44 insertions(+), 18 deletions(-)
diff --git a/client.c b/client.c
@@ -328,7 +328,7 @@ set_urgent(Client *c, Bool urgent, Bool write) {
for(f=c->frame; f; f=f->cnext) {
for(a=f->view->area; a; a=a->next)
for(ff=a->frame; ff; ff=ff->anext)
- if(ff->urgent) break;
+ if(ff->client->urgent) break;
if(!ff)
write_event("%sUrgentTag %s %s\n", cnot, cwrite, f->view->name);
}
@@ -664,7 +664,7 @@ size_client(Client *c, char *arg) {
}
char *
-send_client(Frame *f, char *arg) {
+send_client(Frame *f, char *arg, Bool swap) {
Area *to, *a;
Client *c;
Frame *tf;
@@ -681,7 +681,7 @@ send_client(Frame *f, char *arg) {
to = c->revert;
else
to = v->area->next;
- send_to_area(to, a, f);
+ goto send_area;
}else if(!a->floating) {
if(!strncmp(arg, "left", 5)) {
if(a->floating)
@@ -692,7 +692,7 @@ send_client(Frame *f, char *arg) {
to=new_column(v, v->area, 0);
if(!to)
return Ebadvalue;
- send_to_area(to, a, f);
+ goto send_area;
}
else if(!strncmp(arg, "right", 5)) {
if(a->floating)
@@ -701,33 +701,49 @@ send_client(Frame *f, char *arg) {
to = new_column(v, a, 0);
if(!to)
return Ebadvalue;
- send_to_area(to, a, f);
+ goto send_area;
}
else if(!strncmp(arg, "up", 3)) {
for(tf=a->frame; tf; tf=tf->anext)
if(tf->anext == f) break;
if(!tf)
return Ebadvalue;
- remove_frame(f);
- insert_frame(tf, f, True);
- arrange_column(a, False);
+ goto send_frame;
}
else if(!strncmp(arg, "down", 5)) {
if(!f->anext)
return Ebadvalue;
- remove_frame(f);
- insert_frame(f->anext, f, False);
- arrange_column(a, False);
+ tf = f->anext;
+ goto send_frame;
}
else {
if(sscanf(arg, "%d", &j) != 1)
return Ebadvalue;
for(to=v->area; to; to=to->next)
if(!--j) break;
- send_to_area(to, a, f);
+ goto send_area;
}
}else
return Ebadvalue;
+send_frame:
+ if(!swap) {
+ remove_frame(f);
+ insert_frame(tf, f, True);
+ }else
+ swap_frames(f, tf);
+ arrange_column(a, False);
+
+ flush_masked_events(EnterWindowMask);
+ focus_frame(f, True);
+ update_views();
+ return nil;
+
+send_area:
+ if(!swap)
+ send_to_area(to, a, f);
+ else if(to->sel)
+ swap_frames(f, to->sel);
+
flush_masked_events(EnterWindowMask);
focus_frame(f, True);
update_views();
diff --git a/view.c b/view.c
@@ -342,15 +342,18 @@ message_view(View *v, char *message) {
Client *c;
Frame *f;
Area *a;
+ Bool swap;
static char Ebadvalue[] = "bad value";
if(!strncmp(message, "send ", 5)) {
message += 5;
- if(!(c = client_of_message(v, message, &n)))
- return Ebadvalue;
- if(!(f = clientframe_of_view(v, c)))
- return Ebadvalue;
- return send_client(f, &message[n]);
+ swap = False;
+ goto send;
+ }
+ if(!strncmp(message, "swap ", 5)) {
+ message += 5;
+ swap = True;
+ goto send;
}
if(!strncmp(message, "select ", 7)) {
message += 7;
@@ -371,6 +374,13 @@ message_view(View *v, char *message) {
return nil;
}
return Ebadvalue;
+
+send:
+ if(!(c = client_of_message(v, message, &n)))
+ return Ebadvalue;
+ if(!(f = clientframe_of_view(v, c)))
+ return Ebadvalue;
+ return send_client(f, &message[n], swap);
}
void
diff --git a/wmii.h b/wmii.h
@@ -298,7 +298,7 @@ extern void manage_client(Client *c);
extern void focus(Client *c, Bool restack);
extern void resize_client(Client *c, XRectangle *r);
extern void match_sizehints(Client *c, XRectangle *r, Bool floating, BlitzAlign sticky);
-extern char *send_client(Frame *f, char *arg);
+extern char *send_client(Frame *f, char *arg, Bool swap);
extern char * message_client(Client *c, char *message);
extern void move_client(Client *c, char *arg);
extern void size_client(Client *c, char *arg);