Support for multiple statusbar with the same position value
Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
c496df9fc6
commit
6337115e2e
53
statusbar.c
53
statusbar.c
|
@ -31,10 +31,17 @@
|
|||
extern AwesomeConf globalconf;
|
||||
|
||||
static void
|
||||
statusbar_update_position(Statusbar *statusbar)
|
||||
statusbar_position_update(Statusbar *statusbar)
|
||||
{
|
||||
Statusbar *sb;
|
||||
area_t area;
|
||||
|
||||
if(statusbar->position == Off)
|
||||
{
|
||||
XUnmapWindow(globalconf.display, statusbar->sw->window);
|
||||
return;
|
||||
}
|
||||
|
||||
XMapRaised(globalconf.display, statusbar->sw->window);
|
||||
|
||||
/* Top and Bottom Statusbar have prio */
|
||||
|
@ -47,6 +54,36 @@ statusbar_update_position(Statusbar *statusbar)
|
|||
globalconf.screens[statusbar->screen].statusbar,
|
||||
&globalconf.screens[statusbar->screen].padding);
|
||||
|
||||
for(sb = globalconf.screens[statusbar->screen].statusbar; sb && sb != statusbar; sb = sb->next)
|
||||
switch(sb->position)
|
||||
{
|
||||
case Top:
|
||||
if(sb->position == statusbar->position)
|
||||
area.y += sb->height;
|
||||
break;
|
||||
case Bottom:
|
||||
if(sb->position == statusbar->position)
|
||||
area.height -= sb->height;
|
||||
break;
|
||||
case Left:
|
||||
/* we need to re-add our own value removed in the
|
||||
* screen_get_area computation */
|
||||
if(statusbar->position == Left
|
||||
|| statusbar->position == Right)
|
||||
{
|
||||
area.x -= statusbar->sw->geometry.width;
|
||||
area.width += statusbar->sw->geometry.width;
|
||||
}
|
||||
break;
|
||||
case Right:
|
||||
if(statusbar->position == Left
|
||||
|| statusbar->position == Right)
|
||||
area.width += statusbar->sw->geometry.width;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch(statusbar->position)
|
||||
{
|
||||
case Top:
|
||||
|
@ -63,7 +100,6 @@ statusbar_update_position(Statusbar *statusbar)
|
|||
simplewindow_move(statusbar->sw, area.x + area.width, area.y);
|
||||
break;
|
||||
default:
|
||||
XUnmapWindow(globalconf.display, statusbar->sw->window);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -203,7 +239,7 @@ statusbar_init(Statusbar *statusbar)
|
|||
statusbar->width = area.width;
|
||||
}
|
||||
|
||||
switch(statusbar->dposition)
|
||||
switch(statusbar->position)
|
||||
{
|
||||
case Right:
|
||||
case Left:
|
||||
|
@ -220,7 +256,7 @@ statusbar_init(Statusbar *statusbar)
|
|||
|
||||
widget_calculate_alignments(statusbar->widgets);
|
||||
|
||||
statusbar_update_position(statusbar);
|
||||
statusbar_position_update(statusbar);
|
||||
|
||||
statusbar_draw(statusbar);
|
||||
}
|
||||
|
@ -245,7 +281,7 @@ statusbar_refresh()
|
|||
}
|
||||
|
||||
static Statusbar *
|
||||
get_statusbar_byname(int screen, const char *name)
|
||||
statusbar_get_byname(int screen, const char *name)
|
||||
{
|
||||
Statusbar *sb;
|
||||
|
||||
|
@ -264,7 +300,6 @@ statusbar_toggle(Statusbar *statusbar)
|
|||
else
|
||||
statusbar->position = Off;
|
||||
|
||||
statusbar_update_position(statusbar);
|
||||
globalconf.screens[statusbar->screen].need_arrange = True;
|
||||
}
|
||||
|
||||
|
@ -276,13 +311,17 @@ statusbar_toggle(Statusbar *statusbar)
|
|||
void
|
||||
uicb_statusbar_toggle(int screen, char *arg)
|
||||
{
|
||||
Statusbar *sb = get_statusbar_byname(screen, arg);
|
||||
Statusbar *sb = statusbar_get_byname(screen, arg);
|
||||
|
||||
if(sb)
|
||||
statusbar_toggle(sb);
|
||||
else
|
||||
for(sb = globalconf.screens[screen].statusbar; sb; sb = sb->next)
|
||||
statusbar_toggle(sb);
|
||||
|
||||
for(sb = globalconf.screens[screen].statusbar; sb; sb = sb->next)
|
||||
statusbar_position_update(sb);
|
||||
}
|
||||
|
||||
|
||||
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80
|
||||
|
|
Loading…
Reference in New Issue