simplify arrange and restack

This commit is contained in:
Julien Danjou 2007-09-17 13:45:13 +02:00
parent bf9601f79c
commit 30e7cf5b40
7 changed files with 33 additions and 34 deletions

View File

@ -416,7 +416,7 @@ manage(Display * disp, int screen, DC *drawcontext, Window w, XWindowAttributes
attachstack(c); attachstack(c);
XMoveResizeWindow(disp, c->win, c->x, c->y, c->w, c->h); /* some windows require this */ XMoveResizeWindow(disp, c->win, c->x, c->y, c->w, c->h); /* some windows require this */
c->isbanned = True; c->isbanned = True;
arrange(disp, screen, drawcontext, awesomeconf); arrange(disp, drawcontext, awesomeconf);
} }
void void
@ -578,7 +578,7 @@ unmanage(Client * c, DC *drawcontext, long state, awesome_config *awesomeconf)
XSetErrorHandler(xerror); XSetErrorHandler(xerror);
XUngrabServer(c->display); XUngrabServer(c->display);
if(state != NormalState) if(state != NormalState)
arrange(c->display, c->screen, drawcontext, awesomeconf); arrange(c->display, drawcontext, awesomeconf);
p_delete(&c->tags); p_delete(&c->tags);
p_delete(&c); p_delete(&c);
} }

View File

@ -189,7 +189,7 @@ handle_event_buttonpress(XEvent * e, awesome_config *awesomeconf)
if(!IS_ARRANGE(floating) && !c->isfloating) if(!IS_ARRANGE(floating) && !c->isfloating)
uicb_togglefloating(e->xany.display, c->screen, &dc[c->screen], &awesomeconf[c->screen], NULL); uicb_togglefloating(e->xany.display, c->screen, &dc[c->screen], &awesomeconf[c->screen], NULL);
else else
restack(e->xany.display, c->screen, &dc[c->screen], &awesomeconf[c->screen]); restack(e->xany.display, &dc[c->screen], &awesomeconf[c->screen]);
movemouse(c, &awesomeconf[c->screen]); movemouse(c, &awesomeconf[c->screen]);
} }
else if(ev->button == Button2) else if(ev->button == Button2)
@ -204,7 +204,7 @@ handle_event_buttonpress(XEvent * e, awesome_config *awesomeconf)
if(!IS_ARRANGE(floating) && !c->isfloating) if(!IS_ARRANGE(floating) && !c->isfloating)
uicb_togglefloating(e->xany.display, c->screen, &dc[c->screen], &awesomeconf[c->screen], NULL); uicb_togglefloating(e->xany.display, c->screen, &dc[c->screen], &awesomeconf[c->screen], NULL);
else else
restack(e->xany.display, c->screen, &dc[c->screen], &awesomeconf[c->screen]); restack(e->xany.display, &dc[c->screen], &awesomeconf[c->screen]);
resizemouse(c, &awesomeconf[c->screen]); resizemouse(c, &awesomeconf[c->screen]);
} }
} }
@ -288,7 +288,7 @@ handle_event_configurenotify(XEvent * e, awesome_config *awesomeconf)
XResizeWindow(e->xany.display, awesomeconf[screen].statusbar.window, XResizeWindow(e->xany.display, awesomeconf[screen].statusbar.window,
DisplayWidth(e->xany.display, screen), awesomeconf[screen].statusbar.height); DisplayWidth(e->xany.display, screen), awesomeconf[screen].statusbar.height);
updatebarpos(e->xany.display, awesomeconf[screen].statusbar); updatebarpos(e->xany.display, awesomeconf[screen].statusbar);
arrange(e->xany.display, screen, &dc[screen], &awesomeconf[screen]); arrange(e->xany.display, &dc[screen], &awesomeconf[screen]);
} }
} }
@ -407,7 +407,7 @@ handle_event_propertynotify(XEvent * e, awesome_config *awesomeconf)
case XA_WM_TRANSIENT_FOR: case XA_WM_TRANSIENT_FOR:
XGetTransientForHint(e->xany.display, c->win, &trans); XGetTransientForHint(e->xany.display, c->win, &trans);
if(!c->isfloating && (c->isfloating = (getclient(trans) != NULL))) if(!c->isfloating && (c->isfloating = (getclient(trans) != NULL)))
arrange(e->xany.display, c->screen, &dc[c->screen], &awesomeconf[c->screen]); arrange(e->xany.display, &dc[c->screen], &awesomeconf[c->screen]);
break; break;
case XA_WM_NORMAL_HINTS: case XA_WM_NORMAL_HINTS:
updatesizehints(c); updatesizehints(c);

View File

@ -33,22 +33,21 @@
extern Client *clients, *sel; /* global client list */ extern Client *clients, *sel; /* global client list */
void void
arrange(Display * disp, int screen, DC *drawcontext, awesome_config *awesomeconf) arrange(Display * disp, DC *drawcontext, awesome_config *awesomeconf)
{ {
Client *c; Client *c;
for(c = clients; c; c = c->next) for(c = clients; c; c = c->next)
{ {
if(c->screen != screen) if(isvisible(c, awesomeconf->screen, awesomeconf->selected_tags, awesomeconf->ntags))
continue;
if(isvisible(c, screen, awesomeconf->selected_tags, awesomeconf->ntags))
unban(c); unban(c);
else /* we don't touch other screens windows */
else if(c->screen == awesomeconf->screen)
ban(c); ban(c);
} }
awesomeconf->current_layout->arrange(disp, screen, awesomeconf); awesomeconf->current_layout->arrange(disp, awesomeconf->screen, awesomeconf);
focus(disp, drawcontext, NULL, True, awesomeconf); focus(disp, drawcontext, NULL, True, awesomeconf);
restack(disp, screen, drawcontext, awesomeconf); restack(disp, drawcontext, awesomeconf);
} }
void void
@ -68,7 +67,7 @@ uicb_focusnext(Display *disp __attribute__ ((unused)),
if(c) if(c)
{ {
focus(c->display, drawcontext, c, True, awesomeconf); focus(c->display, drawcontext, c, True, awesomeconf);
restack(c->display, screen, drawcontext, awesomeconf); restack(c->display, drawcontext, awesomeconf);
} }
} }
@ -92,7 +91,7 @@ uicb_focusprev(Display *disp __attribute__ ((unused)),
if(c) if(c)
{ {
focus(c->display, drawcontext, c, True, awesomeconf); focus(c->display, drawcontext, c, True, awesomeconf);
restack(c->display, screen, drawcontext, awesomeconf); restack(c->display, drawcontext, awesomeconf);
} }
} }
@ -112,13 +111,13 @@ loadawesomeprops(Display *disp, int screen, awesome_config * awesomeconf)
} }
void void
restack(Display * disp, int screen, DC * drawcontext, awesome_config *awesomeconf) restack(Display * disp, DC * drawcontext, awesome_config *awesomeconf)
{ {
Client *c; Client *c;
XEvent ev; XEvent ev;
XWindowChanges wc; XWindowChanges wc;
drawstatusbar(disp, screen, drawcontext, awesomeconf); drawstatusbar(disp, awesomeconf->screen, drawcontext, awesomeconf);
if(!sel) if(!sel)
return; return;
if(sel->isfloating || IS_ARRANGE(floating)) if(sel->isfloating || IS_ARRANGE(floating))
@ -134,7 +133,7 @@ restack(Display * disp, int screen, DC * drawcontext, awesome_config *awesomecon
} }
for(c = clients; c; c = c->next) for(c = clients; c; c = c->next)
{ {
if(!IS_TILED(c, screen, awesomeconf->selected_tags, awesomeconf->ntags) || c == sel) if(!IS_TILED(c, awesomeconf->screen, awesomeconf->selected_tags, awesomeconf->ntags) || c == sel)
continue; continue;
XConfigureWindow(disp, c->win, CWSibling | CWStackMode, &wc); XConfigureWindow(disp, c->win, CWSibling | CWStackMode, &wc);
wc.sibling = c->win; wc.sibling = c->win;
@ -187,7 +186,7 @@ uicb_setlayout(Display *disp,
c->ftview = True; c->ftview = True;
if(sel) if(sel)
arrange(disp, screen, drawcontext, awesomeconf); arrange(disp, drawcontext, awesomeconf);
else else
drawstatusbar(disp, DefaultScreen(disp), drawcontext, awesomeconf); drawstatusbar(disp, DefaultScreen(disp), drawcontext, awesomeconf);
@ -286,6 +285,6 @@ uicb_zoom(Display *disp __attribute__ ((unused)),
detach(sel); detach(sel);
attach(sel); attach(sel);
focus(sel->display, drawcontext, sel, True, awesomeconf); focus(sel->display, drawcontext, sel, True, awesomeconf);
arrange(sel->display, sel->screen, drawcontext, awesomeconf); arrange(sel->display, drawcontext, awesomeconf);
} }

View File

@ -29,8 +29,8 @@
#define AWESOMEPROPS_ATOM(disp) XInternAtom(disp, "_AWESOME_PROPERTIES", False) #define AWESOMEPROPS_ATOM(disp) XInternAtom(disp, "_AWESOME_PROPERTIES", False)
void arrange(Display *, int, DC *, awesome_config *); /* arranges all windows depending on the layout in use */ void arrange(Display *, DC *, awesome_config *); /* arranges all windows depending on the layout in use */
void restack(Display *, int, DC *, awesome_config *); /* restores z layers of all clients */ void restack(Display *, DC *, awesome_config *); /* restores z layers of all clients */
void uicb_focusnext(Display *, int, DC *, awesome_config *, const char *); /* focuses next visible client */ void uicb_focusnext(Display *, int, DC *, awesome_config *, const char *); /* focuses next visible client */
void uicb_focusprev(Display *, int, DC *, awesome_config *, const char *); /* focuses prev visible client */ void uicb_focusprev(Display *, int, DC *, awesome_config *, const char *); /* focuses prev visible client */
void uicb_setlayout(Display *, int, DC *, awesome_config *, const char *); /* sets layout, NULL means next layout */ void uicb_setlayout(Display *, int, DC *, awesome_config *, const char *); /* sets layout, NULL means next layout */

View File

@ -44,7 +44,7 @@ uicb_setnmaster(Display *disp,
if((awesomeconf->nmaster = (int) compute_new_value_from_arg(arg, (double) awesomeconf->nmaster)) < 0) if((awesomeconf->nmaster = (int) compute_new_value_from_arg(arg, (double) awesomeconf->nmaster)) < 0)
awesomeconf->nmaster = 0; awesomeconf->nmaster = 0;
arrange(disp, screen, drawcontext, awesomeconf); arrange(disp, drawcontext, awesomeconf);
} }
void void
@ -60,7 +60,7 @@ uicb_setncols(Display *disp,
if((awesomeconf->ncols = (int) compute_new_value_from_arg(arg, (double) awesomeconf->ncols)) < 1) if((awesomeconf->ncols = (int) compute_new_value_from_arg(arg, (double) awesomeconf->ncols)) < 1)
awesomeconf->ncols = 1; awesomeconf->ncols = 1;
arrange(disp, screen, drawcontext, awesomeconf); arrange(disp, drawcontext, awesomeconf);
} }
void void
@ -78,7 +78,7 @@ uicb_setmwfact(Display *disp,
else if(awesomeconf->mwfact > 0.9) else if(awesomeconf->mwfact > 0.9)
awesomeconf->mwfact = 0.9; awesomeconf->mwfact = 0.9;
arrange(disp, screen, drawcontext, awesomeconf); arrange(disp, drawcontext, awesomeconf);
} }
static void static void

View File

@ -152,6 +152,6 @@ uicb_togglebar(Display *disp,
else else
awesomeconf->statusbar.position = BarOff; awesomeconf->statusbar.position = BarOff;
updatebarpos(disp, awesomeconf->statusbar); updatebarpos(disp, awesomeconf->statusbar);
arrange(disp, screen, drawcontext, awesomeconf); arrange(disp, drawcontext, awesomeconf);
} }

16
tag.c
View File

@ -160,7 +160,7 @@ uicb_tag(Display *disp,
if(i >= 0 && i < awesomeconf->ntags) if(i >= 0 && i < awesomeconf->ntags)
sel->tags[i] = True; sel->tags[i] = True;
saveprops(sel, awesomeconf->ntags); saveprops(sel, awesomeconf->ntags);
arrange(disp, screen, drawcontext, awesomeconf); arrange(disp, drawcontext, awesomeconf);
} }
/** Toggle floating state of a client /** Toggle floating state of a client
@ -190,7 +190,7 @@ uicb_togglefloating(Display *disp,
sel->rh = sel->h; sel->rh = sel->h;
} }
saveprops(sel, awesomeconf->ntags); saveprops(sel, awesomeconf->ntags);
arrange(disp, screen, drawcontext, awesomeconf); arrange(disp, drawcontext, awesomeconf);
} }
/** Toggle tag view /** Toggle tag view
@ -216,7 +216,7 @@ uicb_toggletag(Display *disp,
if(j == awesomeconf->ntags) if(j == awesomeconf->ntags)
sel->tags[i] = True; sel->tags[i] = True;
saveprops(sel, awesomeconf->ntags); saveprops(sel, awesomeconf->ntags);
arrange(disp, screen, drawcontext, awesomeconf); arrange(disp, drawcontext, awesomeconf);
} }
/** Add a tag to viewed tags /** Add a tag to viewed tags
@ -240,7 +240,7 @@ uicb_toggleview(Display *disp,
if(j == awesomeconf->ntags) if(j == awesomeconf->ntags)
awesomeconf->selected_tags[i] = True; /* cannot toggle last view */ awesomeconf->selected_tags[i] = True; /* cannot toggle last view */
saveawesomeprops(disp, screen, awesomeconf); saveawesomeprops(disp, screen, awesomeconf);
arrange(disp, screen, drawcontext, awesomeconf); arrange(disp, drawcontext, awesomeconf);
} }
/** View tag /** View tag
@ -270,7 +270,7 @@ uicb_view(Display *disp,
awesomeconf->current_layout = awesomeconf->tag_layouts[i]; awesomeconf->current_layout = awesomeconf->tag_layouts[i];
} }
saveawesomeprops(disp, screen, awesomeconf); saveawesomeprops(disp, screen, awesomeconf);
arrange(disp, screen, drawcontext, awesomeconf); arrange(disp, drawcontext, awesomeconf);
} }
/** View previously selected tags /** View previously selected tags
@ -295,7 +295,7 @@ uicb_viewprevtags(Display * disp,
awesomeconf->selected_tags[i] = awesomeconf->prev_selected_tags[i]; awesomeconf->selected_tags[i] = awesomeconf->prev_selected_tags[i];
awesomeconf->prev_selected_tags[i] = t; awesomeconf->prev_selected_tags[i] = t;
} }
arrange(disp, screen, drawcontext, awesomeconf); arrange(disp, drawcontext, awesomeconf);
} }
/** View next tag /** View next tag
@ -323,7 +323,7 @@ uicb_tag_viewnext(Display *disp,
firsttag = 0; firsttag = 0;
awesomeconf->selected_tags[firsttag] = True; awesomeconf->selected_tags[firsttag] = True;
saveawesomeprops(disp, screen, awesomeconf); saveawesomeprops(disp, screen, awesomeconf);
arrange(disp, screen, drawcontext, awesomeconf); arrange(disp, drawcontext, awesomeconf);
} }
/** View previous tag /** View previous tag
@ -351,5 +351,5 @@ uicb_tag_viewprev(Display *disp,
firsttag = awesomeconf->ntags - 1; firsttag = awesomeconf->ntags - 1;
awesomeconf->selected_tags[firsttag] = True; awesomeconf->selected_tags[firsttag] = True;
saveawesomeprops(disp, screen, awesomeconf); saveawesomeprops(disp, screen, awesomeconf);
arrange(disp, screen, drawcontext, awesomeconf); arrange(disp, drawcontext, awesomeconf);
} }