removed lock-based tabbing, tabbing is up to the layout now

This commit is contained in:
garbeam 2006-01-03 11:30:15 +02:00
parent e620aa3e45
commit 418ded55d9
7 changed files with 49 additions and 77 deletions

View File

@ -13,19 +13,15 @@
Client *
alloc_client(Window w)
{
static int id = 0;
char buf[MAX_BUF];
XTextProperty name;
Client *c = (Client *) cext_emallocz(sizeof(Client));
c->win = w;
snprintf(buf, MAX_BUF, "/detached/client/%d", id);
c->file[C_PREFIX] = ixp_create(ixps, buf);
XGetWMName(dpy, c->win, &name);
snprintf(buf, MAX_BUF, "/detached/client/%d/name", id);
c->file[C_NAME] = wmii_create_ixpfile(ixps, buf, (char *) name.value);
free(name.value);
id++;
if(name.value) {
strncpy(c->name, (char *)name.value, 256);
free(name.value);
}
return c;
}
@ -36,7 +32,6 @@ focus_client(Client * c)
/* sel client */
f = c->frame;
f->sel = c;
f->file[F_SEL_CLIENT]->content = c->file[C_PREFIX]->content;
XRaiseWindow(dpy, c->win);
XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
invoke_wm_event(def[WM_EVENT_CLIENT_UPDATE]);
@ -167,13 +162,10 @@ handle_client_property(Client * c, XPropertyEvent * e)
switch (e->atom) {
case XA_WM_NAME:
XGetWMName(dpy, c->win, &name);
if(strlen((char *) name.value)) {
if(c->file[C_NAME]->content)
free(c->file[C_NAME]->content);
c->file[C_NAME]->content = cext_estrdup((char *) name.value);
c->file[C_NAME]->size = strlen((char *) name.value);
}
free(name.value);
if(name.value) {
strncpy(c->name, (char*) name.value, 256);
free(name.value);
}
if(c->frame)
draw_client(c);
invoke_wm_event(def[WM_EVENT_CLIENT_UPDATE]);
@ -194,7 +186,6 @@ void
destroy_client(Client * c)
{
detach_detached(c);
ixp_remove_file(ixps, c->file[C_PREFIX]);
free(c);
}
@ -222,7 +213,7 @@ draw_client(Client * client)
if(i && (i == f->nclients - 1))
d.rect.width = f->rect.width - d.rect.x;
d.rect.height = tabh;
d.data = c->file[C_NAME]->content;
d.data = c->name;
d.font = font;
if((f == sel_frame()) && (c == f->sel)) {

View File

@ -32,34 +32,29 @@ alloc_frame(XRectangle * r)
f->rect = *r;
f->cursor = normal_cursor;
snprintf(buf, MAX_BUF, "/detached/frame/%d", id);
snprintf(buf, MAX_BUF, "/detached/%d", id);
f->file[F_PREFIX] = ixp_create(ixps, buf);
snprintf(buf, MAX_BUF, "/detached/frame/%d/client", id);
f->file[F_CLIENT_PREFIX] = ixp_create(ixps, buf);
snprintf(buf, MAX_BUF, "/detached/frame/%d/client/sel", id);
f->file[F_SEL_CLIENT] = ixp_create(ixps, buf);
f->file[F_SEL_CLIENT]->bind = 1;
snprintf(buf, MAX_BUF, "/detached/frame/%d/ctl", id);
snprintf(buf, MAX_BUF, "/detached/%d/name", id);
f->file[F_NAME] = ixp_create(ixps, buf);
f->file[F_NAME]->before_read = handle_before_read_frame;
snprintf(buf, MAX_BUF, "/detached/%d/ctl", id);
f->file[F_CTL] = ixp_create(ixps, buf);
f->file[F_CTL]->after_write = handle_after_write_frame;
snprintf(buf, MAX_BUF, "/detached/frame/%d/geometry", id);
snprintf(buf, MAX_BUF, "/detached/%d/geometry", id);
f->file[F_GEOMETRY] = ixp_create(ixps, buf);
f->file[F_GEOMETRY]->before_read = handle_before_read_frame;
f->file[F_GEOMETRY]->after_write = handle_after_write_frame;
snprintf(buf, MAX_BUF, "/detached/frame/%d/border", id);
snprintf(buf, MAX_BUF, "/detached/%d/border", id);
f->file[F_BORDER] =
wmii_create_ixpfile(ixps, buf, def[WM_BORDER]->content);
f->file[F_BORDER]->after_write = handle_after_write_frame;
snprintf(buf, MAX_BUF, "/detached/frame/%d/tab", id);
snprintf(buf, MAX_BUF, "/detached/%d/tab", id);
f->file[F_TAB] = wmii_create_ixpfile(ixps, buf, def[WM_TAB]->content);
f->file[F_TAB]->after_write = handle_after_write_frame;
snprintf(buf, MAX_BUF, "/detached/frame/%d/handleinc", id);
snprintf(buf, MAX_BUF, "/detached/%d/handleinc", id);
f->file[F_HANDLE_INC] =
wmii_create_ixpfile(ixps, buf, def[WM_HANDLE_INC]->content);
f->file[F_HANDLE_INC]->after_write = handle_after_write_frame;
snprintf(buf, MAX_BUF, "/detached/frame/%d/locked", id);
f->file[F_LOCKED] =
wmii_create_ixpfile(ixps, buf, def[WM_LOCKED]->content);
id++;
wa.override_redirect = 1;
@ -295,8 +290,6 @@ void
attach_client_to_frame(Frame * f, Client * client)
{
Client *c;
wmii_move_ixpfile(client->file[C_PREFIX], f->file[F_CLIENT_PREFIX]);
f->file[F_SEL_CLIENT]->content = client->file[C_PREFIX]->content;
for(c = f->clients; c && c->next; c = c->next);
if(!c) {
f->clients = client;
@ -321,9 +314,6 @@ detach_client_from_frame(Client * c, Bool unmap)
Frame *f = c->frame;
c->frame = nil;
f->file[F_SEL_CLIENT]->content = nil;
wmii_move_ixpfile(c->file[C_PREFIX], def[WM_DETACHED_CLIENT]);
if(f->sel == c) {
if(c->prev)
f->sel = c->prev;
@ -381,10 +371,10 @@ static Frame *
handle_before_read_frames(IXPServer * s, File * file, Area * a)
{
Frame *f;
char buf[64];
for(f = a->layout->frames(a); f; f = f->next)
char buf[32];
for(f = a->layout->frames(a); f; f = f->next) {
if(file == f->file[F_GEOMETRY]) {
snprintf(buf, 64, "%d,%d,%d,%d", f->rect.x, f->rect.y,
snprintf(buf, sizeof(buf), "%d,%d,%d,%d", f->rect.x, f->rect.y,
f->rect.width, f->rect.height);
if(file->content)
free(file->content);
@ -392,6 +382,20 @@ handle_before_read_frames(IXPServer * s, File * file, Area * a)
file->size = strlen(buf);
return f;
}
else if(file == f->file[F_NAME]) {
if(file->content)
free(file->content);
if(f->sel && f->sel->name) {
file->content = cext_estrdup(f->sel->name);
file->size = strlen(buf);
}
else {
file->content = nil;
file->size = 0;
}
return f;
}
}
return nil;
}

View File

@ -239,13 +239,8 @@ attach_col(Area * a, Client * c)
acme->ncolumns++;
}
/* check for tabbing? */
if(f && (((char *) f->file[F_LOCKED]->content)[0] == '1'))
f = 0;
if(!f) {
f = alloc_frame(&c->rect);
attach_frame(a, col, f);
}
f = alloc_frame(&c->rect);
attach_frame(a, col, f);
attach_client_to_frame(f, c);
arrange_column(col);
if(a->page == selpage)

View File

@ -147,22 +147,17 @@ deinit_float(Area * a)
static Bool
attach_float(Area * a, Client * c)
{
Float *fl = a->aux;
Frame *f = fl->sel;
Frame *f;
/* check for tabbing? */
if(f && (((char *) f->file[F_LOCKED]->content)[0] == '1'))
f = 0;
if(!f) {
if(c->rect.y < area_rect.y)
c->rect.y = area_rect.y;
if(c->rect.x < area_rect.x)
c->rect.x = area_rect.x;
if(c->rect.y < area_rect.y)
c->rect.y = area_rect.y;
if(c->rect.x < area_rect.x)
c->rect.x = area_rect.x;
f = alloc_frame(&c->rect);
attach_frame_to_area(a, f);
attach_frame(a, f);
}
f = alloc_frame(&c->rect);
attach_frame_to_area(a, f);
attach_frame(a, f);
attach_client_to_frame(f, c);
if(a->page == selpage)
XMapWindow(dpy, f->win);

View File

@ -144,7 +144,7 @@ draw_pager_area(Area * a, Draw * d)
blitz_loadcolor(dpy, screen_num,
def[WM_NORM_BORDER_COLOR]->content);
}
d->data = f->sel->file[C_NAME]->content;
d->data = f->sel->name;
scale_rect(&rect, &initial_rect, &f->rect, &d->rect);
blitz_drawlabel(dpy, d);
XSync(dpy, False); /* do not clear upwards */
@ -722,7 +722,6 @@ init_default()
def[WM_TAB] = wmii_create_ixpfile(ixps, "/default/tab", "1");
def[WM_HANDLE_INC] =
wmii_create_ixpfile(ixps, "/default/handleinc", "1");
def[WM_LOCKED] = wmii_create_ixpfile(ixps, "/default/locked", "1");
def[WM_LAYOUT] = wmii_create_ixpfile(ixps, "/default/layout", LAYOUT);
def[WM_SEL_PAGE] = ixp_create(ixps, "/sel");
def[WM_EVENT_PAGE_UPDATE] = ixp_create(ixps, "/event/pageupdate");

View File

@ -31,24 +31,15 @@ enum {
/* array indexes of frame file pointers */
enum {
F_PREFIX,
F_CLIENT_PREFIX,
F_SEL_CLIENT,
F_NAME,
F_CTL,
F_GEOMETRY,
F_BORDER,
F_TAB,
F_HANDLE_INC,
F_LOCKED,
F_LAST
};
/* array indexes of client file pointers */
enum {
C_PREFIX,
C_NAME,
C_LAST
};
/* array indexes of wm file pointers */
enum {
WM_CTL,
@ -66,7 +57,6 @@ enum {
WM_BORDER,
WM_TAB,
WM_HANDLE_INC,
WM_LOCKED,
WM_SNAP_VALUE,
WM_SEL_PAGE,
WM_LAYOUT,
@ -155,13 +145,13 @@ struct Client {
int proto;
unsigned int border;
unsigned int ignore_unmap;
char name[256];
Bool destroyed;
Window win;
Window trans;
XRectangle rect;
XSizeHints size;
Frame *frame;
File *file[C_LAST];
Client *next;
Client *prev;
};

View File

@ -106,7 +106,7 @@ wmiir write /wm/default/handleinc $HANDLEINC
wmiir write /wm/default/border 1
wmiir write /wm/event/clientupdate \
'text=`{wmiir read /wm/sel/layout/sel/frame/sel/client/sel/name} \
'text=`{wmiir read /wm/sel/layout/sel/frame/sel/name} \
wmiir write /bar/'^$clab^'/data $"text'
wmiir write /wm/event/pageupdate \
'wmiir write /bar/'^$plab^'/data `{wmiir read /wm/sel/name} &&' ^ \
@ -143,8 +143,6 @@ kbind normal $MODKEY-S-f 'wmiir write /wm/sel/layout/sel/name float'
kbind normal $MODKEY-Return 'wmiir write /wm/sel/layout/sel/ctl ''swap west'''
kbind normal $MODKEY-S-Return 'wmiir write /wm/sel/layout/sel/ctl ''swap east'''
kbind normal $MODKEY-C-y 'wmiir write /wm/ctl new'
kbind normal $MODKEY-u 'wmiir write /wm/sel/layout/sel/frame/sel/locked 0'
kbind normal $MODKEY-S-u 'wmiir write /wm/sel/layout/sel/frame/sel/locked 1'
kbind normal $MODKEY-$WESTKEY 'wmiir write /wm/sel/layout/sel/ctl ''select west'''
kbind normal $MODKEY-$EASTKEY 'wmiir write /wm/sel/layout/sel/ctl ''select east'''
kbind normal $MODKEY-Tab 'wmiir write /wm/sel/layout/sel/ctl ''select next'''