added newcol action for client ctls (takes next/prev argument), I didn't changed move

This commit is contained in:
Anselm R. Garbe 2006-05-21 19:21:37 +02:00
parent a9e9456f42
commit 1f0f42420c
8 changed files with 54 additions and 70 deletions

View File

@ -38,23 +38,3 @@
- partial EWMH support
- libixp: idea from PoP: implement a va_args method similiar to printf for
marshalling 9P messages, might reduce LOC drastically
23:55 <@garbeam> I currently think of something different I haven't done so far, but
which might make some sense
23:55 <@garbeam> I think of reporting an error if a specific command cannot be
performed
23:55 <@garbeam> (a write error with wmiir write)
23:56 <@garbeam> e.g. if you do move next, and there is no next column, an error
could be reported, thus one could add newcol next/prev instead
23:56 <@garbeam> s/add/perform/
23:57 <@garbeam> thiswould allow keeping the current behavior, but allowing your
behavior as well, without screwing up things as they are
23:57 <@garbeam> a column move command is a different question
23:58 < John-Galt> that sounds reasonable
Day changed to 20 May 2006
00:00 <@garbeam> ie, if `xwrite /view/sel/sel/ctl move next` then xwrite
/view/sel/sel/ctl newcol next; fi
00:02 <@garbeam> I think moving columns is not necessary at all, it won't be used
that often
00:02 <@garbeam> John-Galt: what resolution do you got that you consider column

View File

@ -15,7 +15,7 @@ vector_of_areas(AreaVector *av)
}
Area *
create_area(View *v)
create_area(View *v, unsigned int pos)
{
static unsigned short id = 1;
unsigned int w;
@ -44,8 +44,8 @@ create_area(View *v)
a->rect.height = rect.height - brect.height;
a->mode = def.colmode;
a->rect.width = w;
cext_vattach(vector_of_areas(&v->area), a);
v->sel = v->area.size - 1;
cext_vattachat(vector_of_areas(&v->area), a, pos);
v->sel = pos;
return a;
}

View File

@ -569,7 +569,31 @@ select_client(Client *c, char *arg)
}
void
send_client_to(Client *c, char *arg)
newcol_client(Client *c, char *arg)
{
Frame *f = c->frame.data[c->sel];
Area *to, *a = f->area;
View *v = a->view;
int i = idx_of_area(a);
if(i < 1)
return;
if(!strncmp(arg, "prev", 5)) {
to = new_column(v, i);
send_to_area(to, a, c);
}
else if(!strncmp(arg, "next", 5)) {
to = new_column(v, i + 1);
send_to_area(to, a, c);
}
else
return;
flush_masked_events(EnterWindowMask);
}
void
move_client(Client *c, char *arg)
{
const char *errstr;
Frame *f = c->frame.data[c->sel];
@ -583,10 +607,8 @@ send_client_to(Client *c, char *arg)
if(i && !strncmp(arg, "prev", 5)) {
if(i > 1)
to = v->area.data[i - 1];
else if(a->frame.size > 1) {
if(!(to = new_left_column(v)))
return;
}
else if(a->frame.size > 1)
to = new_column(v, 1);
else
return;
send_to_area(to, a, c);
@ -594,10 +616,8 @@ send_client_to(Client *c, char *arg)
else if(i && !strncmp(arg, "next", 5)) {
if(i < v->area.size - 1)
to = v->area.data[i + 1];
else if(a->frame.size > 1) {
if(!(to = new_right_column(v)))
return;
}
else if(a->frame.size > 1)
to = new_column(v, v->area.size);
else
return;
send_to_area(to, a, c);

View File

@ -366,13 +366,13 @@ drop_move(Frame *f, XRectangle *new, XPoint *pt)
int x = new->x + (new->width / 2);
if(x < 0) {
if(src->frame.size > 1 || idx_of_area(src) != 1) {
tgt = new_left_column(v);
tgt = new_column(v, 0);
send_to_area(tgt, src, f->client);
}
}
else if(x > rect.width) {
if(src->frame.size > 1 || idx_of_area(src) != v->area.size - 1) {
tgt = new_right_column(v);
tgt = new_column(v, v->area.size);
send_to_area(tgt, src, f->client);
}
}
@ -424,25 +424,9 @@ resize_column(Client *c, XRectangle *r, XPoint *pt)
}
Area *
new_left_column(View *v) {
Area *a, *p, *n;
unsigned int i;
if(!(a = p = create_area(v)))
return nil;
for(i = 1; i < v->area.size; i++) {
n = v->area.data[i];
v->area.data[i] = p;
p = n;
}
arrange_view(v);
return a;
}
Area *
new_right_column(View *v)
{
new_column(View *v, unsigned int pos) {
Area *a;
if(!(a = create_area(v)))
if(!(a = create_area(v, pos)))
return nil;
arrange_view(v);
return a;

View File

@ -1336,17 +1336,19 @@ xwrite(IXPConn *c, Fcall *fcall)
break;
case FsDarea:
if(!strncmp(buf, "select ", 7)) {
Area *a = view.data[i1]->area.data[i2];
if(a->frame.size)
select_client(a->frame.data[a->sel]->client, &buf[7]);
Area *a = view.data[i1]->area.data[i2];
if(a->frame.size)
select_client(a->frame.data[a->sel]->client, &buf[7]);
}
break;
case FsDclient:
f = view.data[i1]->area.data[i2]->frame.data[i3];
if(!strncmp(buf, "kill", 5))
kill_client(f->client);
else if(!strncmp(buf, "sendto ", 7))
send_client_to(f->client, &buf[7]);
else if(!strncmp(buf, "newcol ", 7))
newcol_client(f->client, &buf[7]);
else if(!strncmp(buf, "move ", 5))
move_client(f->client, &buf[5]);
break;
case FsDGclient:
if(!strncmp(buf, "kill", 5))

View File

@ -30,8 +30,8 @@ create_view(char *name)
v->id = id++;
cext_strlcpy(v->name, name, sizeof(v->name));
create_area(v);
create_area(v);
create_area(v, v->area.size);
create_area(v, v->area.size);
cext_vattach(vector_of_views(&view), v);
qsort(view.data, view.size, sizeof(View *), comp_view_name);
return v;

View File

@ -197,7 +197,7 @@ unsigned int valid_mask;
unsigned int num_lock_mask;
/* area.c */
Area *create_area(View *t);
Area *create_area(View *v, unsigned int pos);
void destroy_area(Area *a);
int idx_of_area(Area *a);
int idx_of_area_id(View *t, unsigned short id);
@ -235,7 +235,8 @@ void focus_client(Client *c, Bool restack);
void focus(Client *c, Bool restack);
void resize_client(Client *c, XRectangle *r, Bool ignore_xcall);
void select_client(Client *c, char *arg);
void send_client_to(Client *c, char *arg);
void move_client(Client *c, char *arg);
void newcol_client(Client *c, char *arg);
void resize_all_clients();
Client *sel_client();
int idx_of_client_id(unsigned short id);
@ -249,8 +250,7 @@ void scale_column(Area *a, float h);
void resize_column(Client *c, XRectangle *r, XPoint *pt);
int column_mode_of_str(char *arg);
char *str_of_column_mode(int mode);
Area *new_left_column(View *v);
Area *new_right_column(View *v);
Area *new_column(View *v, unsigned int pos);
/* event.c */
void init_x_event_handler();
@ -264,8 +264,6 @@ void destroy_frame(Frame *f);
int idx_of_frame_id(Area *a, unsigned short id);
int idx_of_frame(Frame *f);
Client *frame_of_win(Window w);
void insert_before_idx(FrameVector *fv, Frame *f, unsigned int idx);
void insert_after_idx(FrameVector *fv, Frame *f, unsigned int idx);
/* fs.c */
unsigned long long pack_qpath(unsigned char type, unsigned short i1,

View File

@ -144,15 +144,15 @@ do
$MODKEY-Return)
xterm &;;
$MODKEY-Shift-$LEFT)
xwrite /view/sel/sel/ctl sendto prev;;
xwrite /view/sel/sel/ctl move prev;;
$MODKEY-Shift-$RIGHT)
xwrite /view/sel/sel/ctl sendto next;;
xwrite /view/sel/sel/ctl move next;;
$MODKEY-Shift-$DOWN)
xwrite /view/sel/sel/ctl sendto down;;
xwrite /view/sel/sel/ctl move down;;
$MODKEY-Shift-$UP)
xwrite /view/sel/sel/ctl sendto up;;
xwrite /view/sel/sel/ctl move up;;
$MODKEY-Shift-space)
xwrite /view/sel/sel/ctl sendto toggle;;
xwrite /view/sel/sel/ctl move toggle;;
$MODKEY-Shift-c)
xwrite /view/sel/sel/ctl kill;;
$MODKEY-Shift-t)