screen: replace screens pointer by a screen_t array
Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
9a66456f90
commit
486ef71a7f
80
client.c
80
client.c
|
@ -96,21 +96,19 @@ client_seturgent(client_t *c, bool urgent)
|
||||||
/** Returns true if a client is tagged
|
/** Returns true if a client is tagged
|
||||||
* with one of the tags of the specified screen.
|
* with one of the tags of the specified screen.
|
||||||
* \param c The client to check.
|
* \param c The client to check.
|
||||||
* \param screen Virtual screen number.
|
* \param screen Virtual screen.
|
||||||
* \return true if the client is visible, false otherwise.
|
* \return true if the client is visible, false otherwise.
|
||||||
*/
|
*/
|
||||||
bool
|
bool
|
||||||
client_maybevisible(client_t *c, int screen)
|
client_maybevisible(client_t *c, screen_t *screen)
|
||||||
{
|
{
|
||||||
if(c->screen == screen)
|
if(c->screen == screen)
|
||||||
{
|
{
|
||||||
if(c->issticky || c->type == WINDOW_TYPE_DESKTOP)
|
if(c->issticky || c->type == WINDOW_TYPE_DESKTOP)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
tag_array_t *tags = &globalconf.screens[screen].tags;
|
foreach(tag, screen->tags)
|
||||||
|
if((*tag)->selected && is_client_tagged(c, *tag))
|
||||||
for(int i = 0; i < tags->len; i++)
|
|
||||||
if(tags->tab[i]->selected && is_client_tagged(c, tags->tab[i]))
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -173,7 +171,7 @@ client_getbywin(xcb_window_t w)
|
||||||
void
|
void
|
||||||
client_unfocus_update(client_t *c)
|
client_unfocus_update(client_t *c)
|
||||||
{
|
{
|
||||||
globalconf.screens[c->phys_screen].client_focus = NULL;
|
globalconf.screens.tab[c->phys_screen].client_focus = NULL;
|
||||||
ewmh_update_net_active_window(c->phys_screen);
|
ewmh_update_net_active_window(c->phys_screen);
|
||||||
|
|
||||||
/* Call hook */
|
/* Call hook */
|
||||||
|
@ -192,7 +190,7 @@ void
|
||||||
client_unfocus(client_t *c)
|
client_unfocus(client_t *c)
|
||||||
{
|
{
|
||||||
xcb_window_t root_win = xutil_screen_get(globalconf.connection, c->phys_screen)->root;
|
xcb_window_t root_win = xutil_screen_get(globalconf.connection, c->phys_screen)->root;
|
||||||
globalconf.screens[c->phys_screen].client_focus = NULL;
|
globalconf.screens.tab[c->phys_screen].client_focus = NULL;
|
||||||
|
|
||||||
/* Set focus on root window, so no events leak to the current window. */
|
/* Set focus on root window, so no events leak to the current window. */
|
||||||
window_setfocus(root_win, true);
|
window_setfocus(root_win, true);
|
||||||
|
@ -222,7 +220,7 @@ client_ban(client_t *c)
|
||||||
wibox_update_positions();
|
wibox_update_positions();
|
||||||
|
|
||||||
/* Wait until the last moment to take away the focus from the window. */
|
/* Wait until the last moment to take away the focus from the window. */
|
||||||
if(globalconf.screens[c->phys_screen].client_focus == c)
|
if(globalconf.screens.tab[c->phys_screen].client_focus == c)
|
||||||
client_unfocus(c);
|
client_unfocus(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -243,7 +241,7 @@ client_focus_update(client_t *c)
|
||||||
/* unban the client before focusing for consistency */
|
/* unban the client before focusing for consistency */
|
||||||
client_unban(c);
|
client_unban(c);
|
||||||
|
|
||||||
globalconf.screen_focus = &globalconf.screens[c->phys_screen];
|
globalconf.screen_focus = &globalconf.screens.tab[c->phys_screen];
|
||||||
globalconf.screen_focus->client_focus = c;
|
globalconf.screen_focus->client_focus = c;
|
||||||
|
|
||||||
/* Some layouts use focused client differently, so call them back.
|
/* Some layouts use focused client differently, so call them back.
|
||||||
|
@ -277,7 +275,7 @@ client_focus(client_t *c)
|
||||||
if(!client_maybevisible(c, c->screen))
|
if(!client_maybevisible(c, c->screen))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
globalconf.screen_focus = &globalconf.screens[c->phys_screen];
|
globalconf.screen_focus = &globalconf.screens.tab[c->phys_screen];
|
||||||
globalconf.screen_focus->client_focus = c;
|
globalconf.screen_focus->client_focus = c;
|
||||||
|
|
||||||
window_setfocus(c->win, !c->nofocus);
|
window_setfocus(c->win, !c->nofocus);
|
||||||
|
@ -380,7 +378,6 @@ client_real_stack(void)
|
||||||
uint32_t config_win_vals[2];
|
uint32_t config_win_vals[2];
|
||||||
client_node_t *node, *last = *client_node_list_last(&globalconf.stack);
|
client_node_t *node, *last = *client_node_list_last(&globalconf.stack);
|
||||||
layer_t layer;
|
layer_t layer;
|
||||||
int screen;
|
|
||||||
|
|
||||||
config_win_vals[0] = XCB_NONE;
|
config_win_vals[0] = XCB_NONE;
|
||||||
config_win_vals[1] = XCB_STACK_MODE_ABOVE;
|
config_win_vals[1] = XCB_STACK_MODE_ABOVE;
|
||||||
|
@ -393,8 +390,8 @@ client_real_stack(void)
|
||||||
config_win_vals[0]);
|
config_win_vals[0]);
|
||||||
|
|
||||||
/* first stack not ontop wibox window */
|
/* first stack not ontop wibox window */
|
||||||
for(screen = 0; screen < globalconf.nscreen; screen++)
|
foreach(s, globalconf.screens)
|
||||||
foreach(_sb, globalconf.screens[screen].wiboxes)
|
foreach(_sb, s->wiboxes)
|
||||||
{
|
{
|
||||||
wibox_t *sb = *_sb;
|
wibox_t *sb = *_sb;
|
||||||
if(!sb->ontop)
|
if(!sb->ontop)
|
||||||
|
@ -415,8 +412,8 @@ client_real_stack(void)
|
||||||
config_win_vals[0]);
|
config_win_vals[0]);
|
||||||
|
|
||||||
/* then stack ontop wibox window */
|
/* then stack ontop wibox window */
|
||||||
for(screen = 0; screen < globalconf.nscreen; screen++)
|
foreach(s, globalconf.screens)
|
||||||
foreach(_sb, globalconf.screens[screen].wiboxes)
|
foreach(_sb, s->wiboxes)
|
||||||
{
|
{
|
||||||
wibox_t *sb = *_sb;
|
wibox_t *sb = *_sb;
|
||||||
if(sb->ontop)
|
if(sb->ontop)
|
||||||
|
@ -450,7 +447,7 @@ client_manage(xcb_window_t w, xcb_get_geometry_reply_t *wgeom, int phys_screen,
|
||||||
{
|
{
|
||||||
xcb_get_property_cookie_t ewmh_icon_cookie;
|
xcb_get_property_cookie_t ewmh_icon_cookie;
|
||||||
client_t *c, *tc = NULL;
|
client_t *c, *tc = NULL;
|
||||||
int screen;
|
screen_t *screen;
|
||||||
const uint32_t select_input_val[] = { CLIENT_SELECT_INPUT_EVENT_MASK };
|
const uint32_t select_input_val[] = { CLIENT_SELECT_INPUT_EVENT_MASK };
|
||||||
|
|
||||||
if(systray_iskdedockapp(w))
|
if(systray_iskdedockapp(w))
|
||||||
|
@ -468,7 +465,8 @@ client_manage(xcb_window_t w, xcb_get_geometry_reply_t *wgeom, int phys_screen,
|
||||||
client_array_push(&globalconf.clients, client_ref(globalconf.L));
|
client_array_push(&globalconf.clients, client_ref(globalconf.L));
|
||||||
|
|
||||||
|
|
||||||
screen = c->screen = screen_getbycoord(phys_screen, wgeom->x, wgeom->y);
|
screen = c->screen = screen_getbycoord(&globalconf.screens.tab[phys_screen],
|
||||||
|
wgeom->x, wgeom->y);
|
||||||
|
|
||||||
c->phys_screen = phys_screen;
|
c->phys_screen = phys_screen;
|
||||||
|
|
||||||
|
@ -666,13 +664,12 @@ client_geometry_hints(client_t *c, area_t geometry)
|
||||||
bool
|
bool
|
||||||
client_resize(client_t *c, area_t geometry, bool hints)
|
client_resize(client_t *c, area_t geometry, bool hints)
|
||||||
{
|
{
|
||||||
int new_screen;
|
|
||||||
area_t geometry_internal;
|
area_t geometry_internal;
|
||||||
area_t area;
|
area_t area;
|
||||||
|
|
||||||
/* offscreen appearance fixes */
|
/* offscreen appearance fixes */
|
||||||
area = display_area_get(c->phys_screen, NULL,
|
area = display_area_get(c->phys_screen, NULL,
|
||||||
&globalconf.screens[c->screen].padding);
|
&c->screen->padding);
|
||||||
|
|
||||||
if(geometry.x > area.width)
|
if(geometry.x > area.width)
|
||||||
geometry.x = area.width - geometry.width;
|
geometry.x = area.width - geometry.width;
|
||||||
|
@ -700,7 +697,8 @@ client_resize(client_t *c, area_t geometry, bool hints)
|
||||||
|| c->geometries.internal.width != geometry_internal.width
|
|| c->geometries.internal.width != geometry_internal.width
|
||||||
|| c->geometries.internal.height != geometry_internal.height)
|
|| c->geometries.internal.height != geometry_internal.height)
|
||||||
{
|
{
|
||||||
new_screen = screen_getbycoord(c->screen, geometry_internal.x, geometry_internal.y);
|
screen_t *new_screen = screen_getbycoord(c->screen,
|
||||||
|
geometry_internal.x, geometry_internal.y);
|
||||||
|
|
||||||
/* Values to configure a window is an array where values are
|
/* Values to configure a window is an array where values are
|
||||||
* stored according to 'value_mask' */
|
* stored according to 'value_mask' */
|
||||||
|
@ -746,7 +744,7 @@ client_resize(client_t *c, area_t geometry, bool hints)
|
||||||
* \param screen The screen that should be processed.
|
* \param screen The screen that should be processed.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
client_update_strut_positions(int screen)
|
client_update_strut_positions(screen_t *screen)
|
||||||
{
|
{
|
||||||
area_t allowed_area, geom;
|
area_t allowed_area, geom;
|
||||||
|
|
||||||
|
@ -772,8 +770,8 @@ client_update_strut_positions(int screen)
|
||||||
|
|
||||||
/* Screen area, minus padding, wibox'es and already processed struts. */
|
/* Screen area, minus padding, wibox'es and already processed struts. */
|
||||||
allowed_area = screen_area_get(c->screen,
|
allowed_area = screen_area_get(c->screen,
|
||||||
&globalconf.screens[c->screen].wiboxes,
|
&c->screen->wiboxes,
|
||||||
&globalconf.screens[c->screen].padding,
|
&c->screen->padding,
|
||||||
true);
|
true);
|
||||||
|
|
||||||
geom = c->geometry;
|
geom = c->geometry;
|
||||||
|
@ -815,8 +813,8 @@ client_update_strut_positions(int screen)
|
||||||
|
|
||||||
/* Screen area, minus padding, wibox'es and already processed struts. */
|
/* Screen area, minus padding, wibox'es and already processed struts. */
|
||||||
allowed_area = screen_area_get(c->screen,
|
allowed_area = screen_area_get(c->screen,
|
||||||
&globalconf.screens[c->screen].wiboxes,
|
&c->screen->wiboxes,
|
||||||
&globalconf.screens[c->screen].padding,
|
&c->screen->padding,
|
||||||
true);
|
true);
|
||||||
|
|
||||||
geom = c->geometry;
|
geom = c->geometry;
|
||||||
|
@ -858,8 +856,8 @@ client_update_strut_positions(int screen)
|
||||||
|
|
||||||
/* Screen area, minus padding, wibox'es and already processed struts. */
|
/* Screen area, minus padding, wibox'es and already processed struts. */
|
||||||
allowed_area = screen_area_get(c->screen,
|
allowed_area = screen_area_get(c->screen,
|
||||||
&globalconf.screens[c->screen].wiboxes,
|
&c->screen->wiboxes,
|
||||||
&globalconf.screens[c->screen].padding,
|
&c->screen->padding,
|
||||||
true);
|
true);
|
||||||
|
|
||||||
geom = c->geometry;
|
geom = c->geometry;
|
||||||
|
@ -901,8 +899,8 @@ client_update_strut_positions(int screen)
|
||||||
|
|
||||||
/* Screen area, minus padding, wibox'es and already processed struts. */
|
/* Screen area, minus padding, wibox'es and already processed struts. */
|
||||||
allowed_area = screen_area_get(c->screen,
|
allowed_area = screen_area_get(c->screen,
|
||||||
&globalconf.screens[c->screen].wiboxes,
|
&c->screen->wiboxes,
|
||||||
&globalconf.screens[c->screen].padding,
|
&c->screen->padding,
|
||||||
true);
|
true);
|
||||||
|
|
||||||
geom = c->geometry;
|
geom = c->geometry;
|
||||||
|
@ -1033,8 +1031,8 @@ client_setmaxhoriz(client_t *c, bool s)
|
||||||
client_setfullscreen(c, false);
|
client_setfullscreen(c, false);
|
||||||
|
|
||||||
geometry = screen_area_get(c->screen,
|
geometry = screen_area_get(c->screen,
|
||||||
&globalconf.screens[c->screen].wiboxes,
|
&c->screen->wiboxes,
|
||||||
&globalconf.screens[c->screen].padding,
|
&c->screen->padding,
|
||||||
true);
|
true);
|
||||||
geometry.y = c->geometry.y;
|
geometry.y = c->geometry.y;
|
||||||
geometry.height = c->geometry.height;
|
geometry.height = c->geometry.height;
|
||||||
|
@ -1073,8 +1071,8 @@ client_setmaxvert(client_t *c, bool s)
|
||||||
client_setfullscreen(c, false);
|
client_setfullscreen(c, false);
|
||||||
|
|
||||||
geometry = screen_area_get(c->screen,
|
geometry = screen_area_get(c->screen,
|
||||||
&globalconf.screens[c->screen].wiboxes,
|
&c->screen->wiboxes,
|
||||||
&globalconf.screens[c->screen].padding,
|
&c->screen->padding,
|
||||||
true);
|
true);
|
||||||
geometry.x = c->geometry.x;
|
geometry.x = c->geometry.x;
|
||||||
geometry.width = c->geometry.width;
|
geometry.width = c->geometry.width;
|
||||||
|
@ -1220,7 +1218,7 @@ client_unban(client_t *c)
|
||||||
void
|
void
|
||||||
client_unmanage(client_t *c)
|
client_unmanage(client_t *c)
|
||||||
{
|
{
|
||||||
tag_array_t *tags = &globalconf.screens[c->screen].tags;
|
tag_array_t *tags = &c->screen->tags;
|
||||||
|
|
||||||
/* Reset transient_for attributes of widows that maybe refering to us */
|
/* Reset transient_for attributes of widows that maybe refering to us */
|
||||||
foreach(_tc, globalconf.clients)
|
foreach(_tc, globalconf.clients)
|
||||||
|
@ -1230,7 +1228,7 @@ client_unmanage(client_t *c)
|
||||||
tc->transient_for = NULL;
|
tc->transient_for = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(globalconf.screens[c->phys_screen].client_focus == c)
|
if(globalconf.screens.tab[c->phys_screen].client_focus == c)
|
||||||
client_unfocus(c);
|
client_unfocus(c);
|
||||||
|
|
||||||
/* remove client from global list and everywhere else */
|
/* remove client from global list and everywhere else */
|
||||||
|
@ -1323,7 +1321,7 @@ luaA_client_get(lua_State *L)
|
||||||
|
|
||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
|
|
||||||
if(screen == SCREEN_UNDEF)
|
if(screen == -1)
|
||||||
foreach(c, globalconf.clients)
|
foreach(c, globalconf.clients)
|
||||||
{
|
{
|
||||||
client_push(L, *c);
|
client_push(L, *c);
|
||||||
|
@ -1333,7 +1331,7 @@ luaA_client_get(lua_State *L)
|
||||||
{
|
{
|
||||||
luaA_checkscreen(screen);
|
luaA_checkscreen(screen);
|
||||||
foreach(c, globalconf.clients)
|
foreach(c, globalconf.clients)
|
||||||
if((*c)->screen == screen)
|
if((*c)->screen == &globalconf.screens.tab[screen])
|
||||||
{
|
{
|
||||||
client_push(L, *c);
|
client_push(L, *c);
|
||||||
lua_rawseti(L, -2, i++);
|
lua_rawseti(L, -2, i++);
|
||||||
|
@ -1458,7 +1456,7 @@ static int
|
||||||
luaA_client_tags(lua_State *L)
|
luaA_client_tags(lua_State *L)
|
||||||
{
|
{
|
||||||
client_t *c = luaA_client_checkudata(L, 1);
|
client_t *c = luaA_client_checkudata(L, 1);
|
||||||
tag_array_t *tags = &globalconf.screens[c->screen].tags;
|
tag_array_t *tags = &c->screen->tags;
|
||||||
int j = 0;
|
int j = 0;
|
||||||
|
|
||||||
if(lua_gettop(L) == 2)
|
if(lua_gettop(L) == 2)
|
||||||
|
@ -1676,7 +1674,7 @@ luaA_client_newindex(lua_State *L)
|
||||||
{
|
{
|
||||||
i = luaL_checknumber(L, 3) - 1;
|
i = luaL_checknumber(L, 3) - 1;
|
||||||
luaA_checkscreen(i);
|
luaA_checkscreen(i);
|
||||||
screen_client_moveto(c, i, true, true);
|
screen_client_moveto(c, &globalconf.screens.tab[i], true, true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case A_TK_HIDE:
|
case A_TK_HIDE:
|
||||||
|
@ -1913,7 +1911,7 @@ luaA_client_index(lua_State *L)
|
||||||
lua_pushstring(L, c->icon_name);
|
lua_pushstring(L, c->icon_name);
|
||||||
break;
|
break;
|
||||||
case A_TK_SCREEN:
|
case A_TK_SCREEN:
|
||||||
lua_pushnumber(L, 1 + c->screen);
|
lua_pushnumber(L, 1 + c->screen->index);
|
||||||
break;
|
break;
|
||||||
case A_TK_HIDE:
|
case A_TK_HIDE:
|
||||||
lua_pushboolean(L, c->ishidden);
|
lua_pushboolean(L, c->ishidden);
|
||||||
|
|
10
client.h
10
client.h
|
@ -39,19 +39,19 @@ LUA_OBJECT_FUNCS(client_t, client, "client")
|
||||||
|
|
||||||
#define client_need_arrange(c) \
|
#define client_need_arrange(c) \
|
||||||
do { \
|
do { \
|
||||||
if(!globalconf.screens[(c)->screen].need_arrange \
|
if(!c->screen->need_arrange \
|
||||||
&& client_isvisible(c, (c)->screen)) \
|
&& client_isvisible(c, (c)->screen)) \
|
||||||
globalconf.screens[(c)->screen].need_arrange = true; \
|
c->screen->need_arrange = true; \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
bool client_maybevisible(client_t *, int);
|
bool client_maybevisible(client_t *, screen_t *);
|
||||||
client_t * client_getbywin(xcb_window_t);
|
client_t * client_getbywin(xcb_window_t);
|
||||||
void client_ban(client_t *);
|
void client_ban(client_t *);
|
||||||
void client_unban(client_t *);
|
void client_unban(client_t *);
|
||||||
void client_manage(xcb_window_t, xcb_get_geometry_reply_t *, int, bool);
|
void client_manage(xcb_window_t, xcb_get_geometry_reply_t *, int, bool);
|
||||||
area_t client_geometry_hints(client_t *, area_t);
|
area_t client_geometry_hints(client_t *, area_t);
|
||||||
bool client_resize(client_t *, area_t, bool);
|
bool client_resize(client_t *, area_t, bool);
|
||||||
void client_update_strut_positions(int);
|
void client_update_strut_positions(screen_t *);
|
||||||
void client_unmanage(client_t *);
|
void client_unmanage(client_t *);
|
||||||
void client_kill(client_t *);
|
void client_kill(client_t *);
|
||||||
void client_setsticky(client_t *, bool);
|
void client_setsticky(client_t *, bool);
|
||||||
|
@ -141,7 +141,7 @@ client_isfixed(client_t *c)
|
||||||
* \return true if the client is visible, false otherwise.
|
* \return true if the client is visible, false otherwise.
|
||||||
*/
|
*/
|
||||||
static inline bool
|
static inline bool
|
||||||
client_isvisible(client_t *c, int screen)
|
client_isvisible(client_t *c, screen_t *screen)
|
||||||
{
|
{
|
||||||
return (!c->ishidden && !c->isminimized && client_maybevisible(c, screen));
|
return (!c->ishidden && !c->isminimized && client_maybevisible(c, screen));
|
||||||
}
|
}
|
||||||
|
|
8
event.c
8
event.c
|
@ -375,8 +375,8 @@ event_handle_destroynotify(void *data __attribute__ ((unused)),
|
||||||
if(globalconf.embedded.tab[i].win == ev->window)
|
if(globalconf.embedded.tab[i].win == ev->window)
|
||||||
{
|
{
|
||||||
xembed_window_array_take(&globalconf.embedded, i);
|
xembed_window_array_take(&globalconf.embedded, i);
|
||||||
for(int j = 0; j < globalconf.nscreen; j++)
|
foreach(screen, globalconf.screens)
|
||||||
widget_invalidate_bytype(j, widget_systray);
|
widget_invalidate_bytype(screen, widget_systray);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -771,8 +771,8 @@ event_handle_unmapnotify(void *data __attribute__ ((unused)),
|
||||||
if(globalconf.embedded.tab[i].win == ev->window)
|
if(globalconf.embedded.tab[i].win == ev->window)
|
||||||
{
|
{
|
||||||
xembed_window_array_take(&globalconf.embedded, i);
|
xembed_window_array_take(&globalconf.embedded, i);
|
||||||
for(int j = 0; j < globalconf.nscreen; j++)
|
foreach(screen, globalconf.screens)
|
||||||
widget_invalidate_bytype(j, widget_systray);
|
widget_invalidate_bytype(screen, widget_systray);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
26
ewmh.c
26
ewmh.c
|
@ -45,7 +45,7 @@
|
||||||
static void
|
static void
|
||||||
ewmh_update_desktop_geometry(int phys_screen)
|
ewmh_update_desktop_geometry(int phys_screen)
|
||||||
{
|
{
|
||||||
area_t geom = screen_area_get(phys_screen,
|
area_t geom = screen_area_get(&globalconf.screens.tab[phys_screen],
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
false);
|
false);
|
||||||
|
@ -186,7 +186,7 @@ ewmh_update_net_client_list_stacking(int phys_screen)
|
||||||
void
|
void
|
||||||
ewmh_update_net_numbers_of_desktop(int phys_screen)
|
ewmh_update_net_numbers_of_desktop(int phys_screen)
|
||||||
{
|
{
|
||||||
uint32_t count = globalconf.screens[phys_screen].tags.len;
|
uint32_t count = globalconf.screens.tab[phys_screen].tags.len;
|
||||||
|
|
||||||
xcb_change_property(globalconf.connection, XCB_PROP_MODE_REPLACE,
|
xcb_change_property(globalconf.connection, XCB_PROP_MODE_REPLACE,
|
||||||
xutil_screen_get(globalconf.connection, phys_screen)->root,
|
xutil_screen_get(globalconf.connection, phys_screen)->root,
|
||||||
|
@ -196,9 +196,9 @@ ewmh_update_net_numbers_of_desktop(int phys_screen)
|
||||||
void
|
void
|
||||||
ewmh_update_net_current_desktop(int phys_screen)
|
ewmh_update_net_current_desktop(int phys_screen)
|
||||||
{
|
{
|
||||||
tag_array_t *tags = &globalconf.screens[phys_screen].tags;
|
tag_array_t *tags = &globalconf.screens.tab[phys_screen].tags;
|
||||||
uint32_t count = 0;
|
uint32_t count = 0;
|
||||||
tag_t **curtags = tags_get_current(phys_screen);
|
tag_t **curtags = tags_get_current( &globalconf.screens.tab[phys_screen]);
|
||||||
|
|
||||||
while(count < (uint32_t) tags->len && tags->tab[count] != curtags[0])
|
while(count < (uint32_t) tags->len && tags->tab[count] != curtags[0])
|
||||||
count++;
|
count++;
|
||||||
|
@ -213,7 +213,7 @@ ewmh_update_net_current_desktop(int phys_screen)
|
||||||
void
|
void
|
||||||
ewmh_update_net_desktop_names(int phys_screen)
|
ewmh_update_net_desktop_names(int phys_screen)
|
||||||
{
|
{
|
||||||
tag_array_t *tags = &globalconf.screens[phys_screen].tags;
|
tag_array_t *tags = &globalconf.screens.tab[phys_screen].tags;
|
||||||
buffer_t buf;
|
buffer_t buf;
|
||||||
|
|
||||||
buffer_inita(&buf, BUFSIZ);
|
buffer_inita(&buf, BUFSIZ);
|
||||||
|
@ -236,11 +236,11 @@ ewmh_update_net_desktop_names(int phys_screen)
|
||||||
void
|
void
|
||||||
ewmh_update_workarea(int phys_screen)
|
ewmh_update_workarea(int phys_screen)
|
||||||
{
|
{
|
||||||
tag_array_t *tags = &globalconf.screens[phys_screen].tags;
|
tag_array_t *tags = &globalconf.screens.tab[phys_screen].tags;
|
||||||
uint32_t *area = p_alloca(uint32_t, tags->len * 4);
|
uint32_t *area = p_alloca(uint32_t, tags->len * 4);
|
||||||
area_t geom = screen_area_get(phys_screen,
|
area_t geom = screen_area_get(&globalconf.screens.tab[phys_screen],
|
||||||
&globalconf.screens[phys_screen].wiboxes,
|
&globalconf.screens.tab[phys_screen].wiboxes,
|
||||||
&globalconf.screens[phys_screen].padding,
|
&globalconf.screens.tab[phys_screen].padding,
|
||||||
true);
|
true);
|
||||||
|
|
||||||
|
|
||||||
|
@ -389,7 +389,7 @@ ewmh_process_client_message(xcb_client_message_event_t *ev)
|
||||||
screen++)
|
screen++)
|
||||||
{
|
{
|
||||||
if(ev->window == xutil_screen_get(globalconf.connection, screen)->root)
|
if(ev->window == xutil_screen_get(globalconf.connection, screen)->root)
|
||||||
tag_view_only_byindex(screen, ev->data.data32[0]);
|
tag_view_only_byindex(&globalconf.screens.tab[screen], ev->data.data32[0]);
|
||||||
}
|
}
|
||||||
else if(ev->type == _NET_CLOSE_WINDOW)
|
else if(ev->type == _NET_CLOSE_WINDOW)
|
||||||
{
|
{
|
||||||
|
@ -400,7 +400,7 @@ ewmh_process_client_message(xcb_client_message_event_t *ev)
|
||||||
{
|
{
|
||||||
if((c = client_getbywin(ev->window)))
|
if((c = client_getbywin(ev->window)))
|
||||||
{
|
{
|
||||||
tag_array_t *tags = &globalconf.screens[c->screen].tags;
|
tag_array_t *tags = &c->screen->tags;
|
||||||
|
|
||||||
if(ev->data.data32[0] == 0xffffffff)
|
if(ev->data.data32[0] == 0xffffffff)
|
||||||
c->issticky = true;
|
c->issticky = true;
|
||||||
|
@ -477,7 +477,7 @@ void
|
||||||
ewmh_client_update_desktop(client_t *c)
|
ewmh_client_update_desktop(client_t *c)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
tag_array_t *tags = &globalconf.screens[c->screen].tags;
|
tag_array_t *tags = &c->screen->tags;
|
||||||
|
|
||||||
for(i = 0; i < tags->len; i++)
|
for(i = 0; i < tags->len; i++)
|
||||||
if(is_client_tagged(c, tags->tab[i]))
|
if(is_client_tagged(c, tags->tab[i]))
|
||||||
|
@ -536,7 +536,7 @@ ewmh_client_check_hints(client_t *c)
|
||||||
reply = xcb_get_property_reply(globalconf.connection, c0, NULL);
|
reply = xcb_get_property_reply(globalconf.connection, c0, NULL);
|
||||||
if(reply && reply->value_len && (data = xcb_get_property_value(reply)))
|
if(reply && reply->value_len && (data = xcb_get_property_value(reply)))
|
||||||
{
|
{
|
||||||
tag_array_t *tags = &globalconf.screens[c->screen].tags;
|
tag_array_t *tags = &c->screen->tags;
|
||||||
|
|
||||||
desktop = *(uint32_t *) data;
|
desktop = *(uint32_t *) data;
|
||||||
if(desktop == -1)
|
if(desktop == -1)
|
||||||
|
|
16
layout.c
16
layout.c
|
@ -25,11 +25,11 @@
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
#include "titlebar.h"
|
#include "titlebar.h"
|
||||||
|
|
||||||
/** Arrange windows following current selected layout
|
/** Arrange windows following current selected layout.
|
||||||
* \param screen the screen to arrange
|
* \param screen The screen to arrange.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
arrange(int screen)
|
arrange(screen_t *screen)
|
||||||
{
|
{
|
||||||
uint32_t select_input_val[] = { CLIENT_SELECT_INPUT_EVENT_MASK & ~(XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_LEAVE_WINDOW) };
|
uint32_t select_input_val[] = { CLIENT_SELECT_INPUT_EVENT_MASK & ~(XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_LEAVE_WINDOW) };
|
||||||
|
|
||||||
|
@ -72,12 +72,12 @@ arrange(int screen)
|
||||||
* This is needed if you call a function that relies
|
* This is needed if you call a function that relies
|
||||||
* on need_arrange while arrange is in progress.
|
* on need_arrange while arrange is in progress.
|
||||||
*/
|
*/
|
||||||
globalconf.screens[screen].need_arrange = false;
|
screen->need_arrange = false;
|
||||||
|
|
||||||
/* call hook */
|
/* call hook */
|
||||||
if(globalconf.hooks.arrange != LUA_REFNIL)
|
if(globalconf.hooks.arrange != LUA_REFNIL)
|
||||||
{
|
{
|
||||||
lua_pushnumber(globalconf.L, screen + 1);
|
lua_pushnumber(globalconf.L, screen->index + 1);
|
||||||
luaA_dofunction(globalconf.L, globalconf.hooks.arrange, 1, 0);
|
luaA_dofunction(globalconf.L, globalconf.hooks.arrange, 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,10 +96,8 @@ arrange(int screen)
|
||||||
void
|
void
|
||||||
layout_refresh(void)
|
layout_refresh(void)
|
||||||
{
|
{
|
||||||
int screen;
|
foreach(screen, globalconf.screens)
|
||||||
|
if(screen->need_arrange)
|
||||||
for(screen = 0; screen < globalconf.nscreen; screen++)
|
|
||||||
if(globalconf.screens[screen].need_arrange)
|
|
||||||
arrange(screen);
|
arrange(screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
luaa.h
2
luaa.h
|
@ -69,7 +69,7 @@
|
||||||
|
|
||||||
#define luaA_checkscreen(screen) \
|
#define luaA_checkscreen(screen) \
|
||||||
do { \
|
do { \
|
||||||
if(screen < 0 || screen >= globalconf.nscreen) \
|
if(screen < 0 || screen >= globalconf.screens.len) \
|
||||||
luaL_error(L, "invalid screen number: %d", screen + 1); \
|
luaL_error(L, "invalid screen number: %d", screen + 1); \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
|
|
23
mouse.c
23
mouse.c
|
@ -82,7 +82,7 @@ mouse_query_pointer(xcb_window_t window, int16_t *x, int16_t *y, xcb_window_t *c
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get the pointer position on the screen.
|
/** Get the pointer position on the screen.
|
||||||
* \param screen This will be set to the screen number the mouse is on.
|
* \param screen This will be set to the screen the mouse is on.
|
||||||
* \param x This will be set to the Pointer-x-coordinate relative to window.
|
* \param x This will be set to the Pointer-x-coordinate relative to window.
|
||||||
* \param y This will be set to the Pointer-y-coordinate relative to window.
|
* \param y This will be set to the Pointer-y-coordinate relative to window.
|
||||||
* \param child This will be set to the window under the pointer.
|
* \param child This will be set to the window under the pointer.
|
||||||
|
@ -90,7 +90,7 @@ mouse_query_pointer(xcb_window_t window, int16_t *x, int16_t *y, xcb_window_t *c
|
||||||
* \return True on success, false if an error occured.
|
* \return True on success, false if an error occured.
|
||||||
*/
|
*/
|
||||||
static bool
|
static bool
|
||||||
mouse_query_pointer_root(int *s, int16_t *x, int16_t *y, xcb_window_t *child, uint16_t *mask)
|
mouse_query_pointer_root(screen_t **s, int16_t *x, int16_t *y, xcb_window_t *child, uint16_t *mask)
|
||||||
{
|
{
|
||||||
for(int screen = 0;
|
for(int screen = 0;
|
||||||
screen < xcb_setup_roots_length(xcb_get_setup(globalconf.connection));
|
screen < xcb_setup_roots_length(xcb_get_setup(globalconf.connection));
|
||||||
|
@ -100,7 +100,7 @@ mouse_query_pointer_root(int *s, int16_t *x, int16_t *y, xcb_window_t *child, ui
|
||||||
|
|
||||||
if(mouse_query_pointer(root, x, y, child, mask))
|
if(mouse_query_pointer(root, x, y, child, mask))
|
||||||
{
|
{
|
||||||
*s = screen;
|
*s = &globalconf.screens.tab[screen];
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -331,7 +331,7 @@ luaA_mouse_index(lua_State *L)
|
||||||
size_t len;
|
size_t len;
|
||||||
const char *attr = luaL_checklstring(L, 2, &len);
|
const char *attr = luaL_checklstring(L, 2, &len);
|
||||||
int16_t mouse_x, mouse_y;
|
int16_t mouse_x, mouse_y;
|
||||||
int screen, i;
|
screen_t *screen;
|
||||||
|
|
||||||
switch(a_tokenize(attr, len))
|
switch(a_tokenize(attr, len))
|
||||||
{
|
{
|
||||||
|
@ -339,9 +339,9 @@ luaA_mouse_index(lua_State *L)
|
||||||
if(!mouse_query_pointer_root(&screen, &mouse_x, &mouse_y, NULL, NULL))
|
if(!mouse_query_pointer_root(&screen, &mouse_x, &mouse_y, NULL, NULL))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
i = screen_getbycoord(screen, mouse_x, mouse_y);
|
screen = screen_getbycoord(screen, mouse_x, mouse_y);
|
||||||
|
|
||||||
lua_pushnumber(L, i + 1);
|
lua_pushnumber(L, screen->index + 1);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -373,8 +373,8 @@ luaA_mouse_newindex(lua_State *L)
|
||||||
phys_screen = screen_virttophys(screen);
|
phys_screen = screen_virttophys(screen);
|
||||||
root = xutil_screen_get(globalconf.connection, phys_screen)->root;
|
root = xutil_screen_get(globalconf.connection, phys_screen)->root;
|
||||||
|
|
||||||
x = globalconf.screens[screen].geometry.x;
|
x = globalconf.screens.tab[screen].geometry.x;
|
||||||
y = globalconf.screens[screen].geometry.y;
|
y = globalconf.screens.tab[screen].geometry.y;
|
||||||
|
|
||||||
mouse_warp_pointer(root, x, y);
|
mouse_warp_pointer(root, x, y);
|
||||||
break;
|
break;
|
||||||
|
@ -427,8 +427,9 @@ static int
|
||||||
luaA_mouse_coords(lua_State *L)
|
luaA_mouse_coords(lua_State *L)
|
||||||
{
|
{
|
||||||
uint16_t mask;
|
uint16_t mask;
|
||||||
int screen, x, y;
|
int x, y;
|
||||||
int16_t mouse_x, mouse_y;
|
int16_t mouse_x, mouse_y;
|
||||||
|
screen_t *screen;
|
||||||
|
|
||||||
if(lua_gettop(L) == 1)
|
if(lua_gettop(L) == 1)
|
||||||
{
|
{
|
||||||
|
@ -442,7 +443,7 @@ luaA_mouse_coords(lua_State *L)
|
||||||
x = luaA_getopt_number(L, 1, "x", mouse_x);
|
x = luaA_getopt_number(L, 1, "x", mouse_x);
|
||||||
y = luaA_getopt_number(L, 1, "y", mouse_y);
|
y = luaA_getopt_number(L, 1, "y", mouse_y);
|
||||||
|
|
||||||
root = xutil_screen_get(globalconf.connection, screen)->root;
|
root = xutil_screen_get(globalconf.connection, screen->index)->root;
|
||||||
mouse_warp_pointer(root, x, y);
|
mouse_warp_pointer(root, x, y);
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
}
|
}
|
||||||
|
@ -462,7 +463,7 @@ luaA_mouse_coords(lua_State *L)
|
||||||
static int
|
static int
|
||||||
luaA_mouse_object_under_pointer(lua_State *L)
|
luaA_mouse_object_under_pointer(lua_State *L)
|
||||||
{
|
{
|
||||||
int screen;
|
screen_t *screen;
|
||||||
int16_t mouse_x, mouse_y;
|
int16_t mouse_x, mouse_y;
|
||||||
xcb_window_t child;
|
xcb_window_t child;
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
#include <xcb/xcb_atom.h>
|
#include <xcb/xcb_atom.h>
|
||||||
|
|
||||||
|
#include "screen.h"
|
||||||
#include "property.h"
|
#include "property.h"
|
||||||
#include "client.h"
|
#include "client.h"
|
||||||
#include "widget.h"
|
#include "widget.h"
|
||||||
|
@ -376,13 +377,13 @@ property_handle_xrootpmap_id(void *data __attribute__ ((unused)),
|
||||||
xcb_get_property_reply_t *reply)
|
xcb_get_property_reply_t *reply)
|
||||||
{
|
{
|
||||||
if(globalconf.xinerama_is_active)
|
if(globalconf.xinerama_is_active)
|
||||||
for(int screen = 0; screen < globalconf.nscreen; screen++)
|
foreach(screen, globalconf.screens)
|
||||||
foreach(w, globalconf.screens[screen].wiboxes)
|
foreach(w, screen->wiboxes)
|
||||||
(*w)->need_update = true;
|
(*w)->need_update = true;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int screen = xutil_root2screen(connection, window);
|
int screen = xutil_root2screen(connection, window);
|
||||||
foreach(w, globalconf.screens[screen].wiboxes)
|
foreach(w, globalconf.screens.tab[screen].wiboxes)
|
||||||
(*w)->need_update = true;
|
(*w)->need_update = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
100
screen.c
100
screen.c
|
@ -71,98 +71,87 @@ screen_scan(void)
|
||||||
xsi = xcb_xinerama_query_screens_screen_info(xsq);
|
xsi = xcb_xinerama_query_screens_screen_info(xsq);
|
||||||
xinerama_screen_number = xcb_xinerama_query_screens_screen_info_length(xsq);
|
xinerama_screen_number = xcb_xinerama_query_screens_screen_info_length(xsq);
|
||||||
|
|
||||||
globalconf.screens = p_new(screen_t, xinerama_screen_number);
|
|
||||||
|
|
||||||
/* now check if screens overlaps (same x,y): if so, we take only the biggest one */
|
/* now check if screens overlaps (same x,y): if so, we take only the biggest one */
|
||||||
for(int screen = 0; screen < xinerama_screen_number; screen++)
|
for(int screen = 0; screen < xinerama_screen_number; screen++)
|
||||||
{
|
{
|
||||||
bool drop = false;
|
bool drop = false;
|
||||||
for(int screen_to_test = 0; screen_to_test < globalconf.nscreen; screen_to_test++)
|
foreach(screen_to_test, globalconf.screens)
|
||||||
if(xsi[screen].x_org == globalconf.screens[screen_to_test].geometry.x
|
if(xsi[screen].x_org == screen_to_test->geometry.x
|
||||||
&& xsi[screen].y_org == globalconf.screens[screen_to_test].geometry.y)
|
&& xsi[screen].y_org == screen_to_test->geometry.y)
|
||||||
{
|
{
|
||||||
/* we already have a screen for this area, just check if
|
/* we already have a screen for this area, just check if
|
||||||
* it's not bigger and drop it */
|
* it's not bigger and drop it */
|
||||||
drop = true;
|
drop = true;
|
||||||
globalconf.screens[screen_to_test].geometry.width =
|
screen_to_test->geometry.width =
|
||||||
MAX(xsi[screen].width, xsi[screen_to_test].width);
|
MAX(xsi[screen].width, xsi[screen_to_test->index].width);
|
||||||
globalconf.screens[screen_to_test].geometry.height =
|
screen_to_test->geometry.height =
|
||||||
MAX(xsi[screen].height, xsi[screen_to_test].height);
|
MAX(xsi[screen].height, xsi[screen_to_test->index].height);
|
||||||
}
|
}
|
||||||
if(!drop)
|
if(!drop)
|
||||||
{
|
{
|
||||||
globalconf.screens[globalconf.nscreen].index = screen;
|
screen_t s;
|
||||||
globalconf.screens[globalconf.nscreen++].geometry = screen_xsitoarea(xsi[screen]);
|
p_clear(&s, 1);
|
||||||
|
s.index = screen;
|
||||||
|
s.geometry = screen_xsitoarea(xsi[screen]);
|
||||||
|
screen_array_append(&globalconf.screens, s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* realloc smaller if xinerama_screen_number != screen registered */
|
|
||||||
if(xinerama_screen_number != globalconf.nscreen)
|
|
||||||
{
|
|
||||||
screen_t *new = p_new(screen_t, globalconf.nscreen);
|
|
||||||
memcpy(new, globalconf.screens, globalconf.nscreen * sizeof(screen_t));
|
|
||||||
p_delete(&globalconf.screens);
|
|
||||||
globalconf.screens = new;
|
|
||||||
}
|
|
||||||
|
|
||||||
p_delete(&xsq);
|
p_delete(&xsq);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
/* One screen only / Zaphod mode */
|
||||||
|
for(int screen = 0;
|
||||||
|
screen < xcb_setup_roots_length(xcb_get_setup(globalconf.connection));
|
||||||
|
screen++)
|
||||||
{
|
{
|
||||||
globalconf.nscreen = xcb_setup_roots_length(xcb_get_setup(globalconf.connection));
|
xcb_screen_t *xcb_screen = xutil_screen_get(globalconf.connection, screen);
|
||||||
globalconf.screens = p_new(screen_t, globalconf.nscreen);
|
screen_t s;
|
||||||
for(int screen = 0; screen < globalconf.nscreen; screen++)
|
p_clear(&s, 1);
|
||||||
{
|
s.index = screen;
|
||||||
xcb_screen_t *s = xutil_screen_get(globalconf.connection, screen);
|
s.geometry.x = 0;
|
||||||
globalconf.screens[screen].index = screen;
|
s.geometry.y = 0;
|
||||||
globalconf.screens[screen].geometry.x = 0;
|
s.geometry.width = xcb_screen->width_in_pixels;
|
||||||
globalconf.screens[screen].geometry.y = 0;
|
s.geometry.height = xcb_screen->height_in_pixels;
|
||||||
globalconf.screens[screen].geometry.width = s->width_in_pixels;
|
screen_array_append(&globalconf.screens, s);
|
||||||
globalconf.screens[screen].geometry.height = s->height_in_pixels;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
globalconf.screen_focus = globalconf.screens;
|
globalconf.screen_focus = globalconf.screens.tab;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Return the Xinerama screen number where the coordinates belongs to.
|
/** Return the Xinerama screen number where the coordinates belongs to.
|
||||||
* \param screen The logical screen number.
|
* \param screen The logical screen number.
|
||||||
* \param x X coordinate
|
* \param x X coordinate
|
||||||
* \param y Y coordinate
|
* \param y Y coordinate
|
||||||
* \return Screen number or screen param if no match or no multi-head.
|
* \return Screen pointer or screen param if no match or no multi-head.
|
||||||
*/
|
*/
|
||||||
int
|
screen_t *
|
||||||
screen_getbycoord(int screen, int x, int y)
|
screen_getbycoord(screen_t *screen, int x, int y)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
|
|
||||||
/* don't waste our time */
|
/* don't waste our time */
|
||||||
if(!globalconf.xinerama_is_active)
|
if(!globalconf.xinerama_is_active)
|
||||||
return screen;
|
return screen;
|
||||||
|
|
||||||
for(i = 0; i < globalconf.nscreen; i++)
|
foreach(s, globalconf.screens)
|
||||||
{
|
|
||||||
screen_t *s = &globalconf.screens[i];
|
|
||||||
if((x < 0 || (x >= s->geometry.x && x < s->geometry.x + s->geometry.width))
|
if((x < 0 || (x >= s->geometry.x && x < s->geometry.x + s->geometry.width))
|
||||||
&& (y < 0 || (y >= s->geometry.y && y < s->geometry.y + s->geometry.height)))
|
&& (y < 0 || (y >= s->geometry.y && y < s->geometry.y + s->geometry.height)))
|
||||||
return i;
|
return s;
|
||||||
}
|
|
||||||
|
|
||||||
return screen;
|
return screen;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get screens info.
|
/** Get screens info.
|
||||||
* \param screen Screen number.
|
* \param screen Screen.
|
||||||
* \param wiboxes Wiboxes list to remove.
|
* \param wiboxes Wiboxes list to remove.
|
||||||
* \param padding Padding.
|
* \param padding Padding.
|
||||||
* \param strut Honor windows strut.
|
* \param strut Honor windows strut.
|
||||||
* \return The screen area.
|
* \return The screen area.
|
||||||
*/
|
*/
|
||||||
area_t
|
area_t
|
||||||
screen_area_get(int screen, wibox_array_t *wiboxes,
|
screen_area_get(screen_t *screen, wibox_array_t *wiboxes,
|
||||||
padding_t *padding, bool strut)
|
padding_t *padding, bool strut)
|
||||||
{
|
{
|
||||||
area_t area = globalconf.screens[screen].geometry;
|
area_t area = screen->geometry;
|
||||||
uint16_t top = 0, bottom = 0, left = 0, right = 0;
|
uint16_t top = 0, bottom = 0, left = 0, right = 0;
|
||||||
|
|
||||||
/* make padding corrections */
|
/* make padding corrections */
|
||||||
|
@ -296,17 +285,18 @@ screen_virttophys(int screen)
|
||||||
|
|
||||||
/** Move a client to a virtual screen.
|
/** Move a client to a virtual screen.
|
||||||
* \param c The client to move.
|
* \param c The client to move.
|
||||||
* \param new_screen The destinatiuon screen number.
|
* \param new_screen The destinatiuon screen.
|
||||||
* \param dotag Set to true if we also change tags.
|
* \param dotag Set to true if we also change tags.
|
||||||
* \param doresize Set to true if we also move the client to the new x and
|
* \param doresize Set to true if we also move the client to the new x and
|
||||||
* y of the new screen.
|
* y of the new screen.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
screen_client_moveto(client_t *c, int new_screen, bool dotag, bool doresize)
|
screen_client_moveto(client_t *c, screen_t *new_screen, bool dotag, bool doresize)
|
||||||
{
|
{
|
||||||
int i, old_screen = c->screen;
|
int i;
|
||||||
tag_array_t *old_tags = &globalconf.screens[old_screen].tags,
|
screen_t *old_screen = c->screen;
|
||||||
*new_tags = &globalconf.screens[new_screen].tags;
|
tag_array_t *old_tags = &old_screen->tags,
|
||||||
|
*new_tags = &new_screen->tags;
|
||||||
area_t from, to;
|
area_t from, to;
|
||||||
bool wasvisible = client_isvisible(c, c->screen);
|
bool wasvisible = client_isvisible(c, c->screen);
|
||||||
|
|
||||||
|
@ -334,7 +324,7 @@ screen_client_moveto(client_t *c, int new_screen, bool dotag, bool doresize)
|
||||||
}
|
}
|
||||||
|
|
||||||
if(wasvisible)
|
if(wasvisible)
|
||||||
globalconf.screens[old_screen].need_arrange = true;
|
old_screen->need_arrange = true;
|
||||||
client_need_arrange(c);
|
client_need_arrange(c);
|
||||||
|
|
||||||
if(!doresize)
|
if(!doresize)
|
||||||
|
@ -400,7 +390,7 @@ luaA_screen_module_index(lua_State *L)
|
||||||
int screen = luaL_checknumber(L, 2) - 1;
|
int screen = luaL_checknumber(L, 2) - 1;
|
||||||
|
|
||||||
luaA_checkscreen(screen);
|
luaA_checkscreen(screen);
|
||||||
lua_pushlightuserdata(L, &globalconf.screens[screen]);
|
lua_pushlightuserdata(L, &globalconf.screens.tab[screen]);
|
||||||
return luaA_settype(L, "screen");
|
return luaA_settype(L, "screen");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -427,7 +417,7 @@ luaA_screen_tags(lua_State *L)
|
||||||
|
|
||||||
/* remove current tags */
|
/* remove current tags */
|
||||||
for(i = 0; i < s->tags.len; i++)
|
for(i = 0; i < s->tags.len; i++)
|
||||||
s->tags.tab[i]->screen = SCREEN_UNDEF;
|
s->tags.tab[i]->screen = NULL;
|
||||||
|
|
||||||
tag_array_wipe(&s->tags);
|
tag_array_wipe(&s->tags);
|
||||||
tag_array_init(&s->tags);
|
tag_array_init(&s->tags);
|
||||||
|
@ -478,7 +468,7 @@ luaA_screen_index(lua_State *L)
|
||||||
luaA_pusharea(L, s->geometry);
|
luaA_pusharea(L, s->geometry);
|
||||||
break;
|
break;
|
||||||
case A_TK_WORKAREA:
|
case A_TK_WORKAREA:
|
||||||
luaA_pusharea(L, screen_area_get(s->index, &s->wiboxes, &s->padding, true));
|
luaA_pusharea(L, screen_area_get(s, &s->wiboxes, &s->padding, true));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -528,7 +518,7 @@ luaA_screen_padding(lua_State *L)
|
||||||
static int
|
static int
|
||||||
luaA_screen_count(lua_State *L)
|
luaA_screen_count(lua_State *L)
|
||||||
{
|
{
|
||||||
lua_pushnumber(L, globalconf.nscreen);
|
lua_pushnumber(L, globalconf.screens.len);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
34
screen.h
34
screen.h
|
@ -24,14 +24,40 @@
|
||||||
|
|
||||||
#include "structs.h"
|
#include "structs.h"
|
||||||
|
|
||||||
#define SCREEN_UNDEF (-1)
|
struct a_screen
|
||||||
|
{
|
||||||
|
/** Screen index */
|
||||||
|
int index;
|
||||||
|
/** Screen geometry */
|
||||||
|
area_t geometry;
|
||||||
|
/** true if we need to arrange() */
|
||||||
|
bool need_arrange;
|
||||||
|
/** Tag list */
|
||||||
|
tag_array_t tags;
|
||||||
|
/** Wiboxes */
|
||||||
|
wibox_array_t wiboxes;
|
||||||
|
/** Padding */
|
||||||
|
padding_t padding;
|
||||||
|
/** Window that contains the systray */
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
xcb_window_t window;
|
||||||
|
/** Systray window parent */
|
||||||
|
xcb_window_t parent;
|
||||||
|
} systray;
|
||||||
|
/** Focused client */
|
||||||
|
client_t *client_focus;
|
||||||
|
/** The monitor of startup notifications */
|
||||||
|
SnMonitorContext *snmonitor;
|
||||||
|
};
|
||||||
|
ARRAY_FUNCS(screen_t, screen, DO_NOTHING)
|
||||||
|
|
||||||
void screen_scan(void);
|
void screen_scan(void);
|
||||||
int screen_getbycoord(int, int, int);
|
screen_t *screen_getbycoord(screen_t *, int, int);
|
||||||
area_t screen_area_get(int, wibox_array_t *, padding_t *, bool);
|
area_t screen_area_get(screen_t *, wibox_array_t *, padding_t *, bool);
|
||||||
area_t display_area_get(int, wibox_array_t *, padding_t *);
|
area_t display_area_get(int, wibox_array_t *, padding_t *);
|
||||||
int screen_virttophys(int);
|
int screen_virttophys(int);
|
||||||
void screen_client_moveto(client_t *, int, bool, bool);
|
void screen_client_moveto(client_t *, screen_t *, bool, bool);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80
|
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80
|
||||||
|
|
2
spawn.c
2
spawn.c
|
@ -205,7 +205,7 @@ spawn_init(void)
|
||||||
const int screen_max = xcb_setup_roots_length(xcb_get_setup(globalconf.connection));
|
const int screen_max = xcb_setup_roots_length(xcb_get_setup(globalconf.connection));
|
||||||
|
|
||||||
for(int screen = 0; screen < screen_max; screen++)
|
for(int screen = 0; screen < screen_max; screen++)
|
||||||
globalconf.screens[screen].snmonitor = sn_monitor_context_new(globalconf.sndisplay,
|
globalconf.screens.tab[screen].snmonitor = sn_monitor_context_new(globalconf.sndisplay,
|
||||||
screen,
|
screen,
|
||||||
spawn_monitor_event,
|
spawn_monitor_event,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
|
|
45
structs.h
45
structs.h
|
@ -66,6 +66,7 @@ typedef enum
|
||||||
WIBOX_TYPE_TITLEBAR
|
WIBOX_TYPE_TITLEBAR
|
||||||
} wibox_type_t;
|
} wibox_type_t;
|
||||||
|
|
||||||
|
typedef struct a_screen screen_t;
|
||||||
typedef struct button_t button_t;
|
typedef struct button_t button_t;
|
||||||
typedef struct widget_t widget_t;
|
typedef struct widget_t widget_t;
|
||||||
typedef struct widget_node_t widget_node_t;
|
typedef struct widget_node_t widget_node_t;
|
||||||
|
@ -79,6 +80,8 @@ typedef struct awesome_t awesome_t;
|
||||||
|
|
||||||
ARRAY_TYPE(widget_node_t, widget_node)
|
ARRAY_TYPE(widget_node_t, widget_node)
|
||||||
ARRAY_TYPE(button_t *, button)
|
ARRAY_TYPE(button_t *, button)
|
||||||
|
ARRAY_TYPE(tag_t *, tag)
|
||||||
|
ARRAY_TYPE(screen_t, screen)
|
||||||
|
|
||||||
/** Wibox type */
|
/** Wibox type */
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -98,7 +101,7 @@ typedef struct
|
||||||
/** Alignment */
|
/** Alignment */
|
||||||
alignment_t align;
|
alignment_t align;
|
||||||
/** Screen */
|
/** Screen */
|
||||||
int screen;
|
screen_t *screen;
|
||||||
/** Widget list */
|
/** Widget list */
|
||||||
widget_node_array_t widgets;
|
widget_node_array_t widgets;
|
||||||
luaA_ref widgets_table;
|
luaA_ref widgets_table;
|
||||||
|
@ -129,9 +132,9 @@ struct widget_t
|
||||||
/** Widget destructor */
|
/** Widget destructor */
|
||||||
widget_destructor_t *destructor;
|
widget_destructor_t *destructor;
|
||||||
/** Geometry function */
|
/** Geometry function */
|
||||||
area_t (*geometry)(widget_t *, int, int, int);
|
area_t (*geometry)(widget_t *, screen_t *, int, int);
|
||||||
/** Draw function */
|
/** Draw function */
|
||||||
void (*draw)(widget_t *, draw_context_t *, area_t, int, wibox_t *);
|
void (*draw)(widget_t *, draw_context_t *, area_t, wibox_t *);
|
||||||
/** Index function */
|
/** Index function */
|
||||||
int (*index)(lua_State *, awesome_token_t);
|
int (*index)(lua_State *, awesome_token_t);
|
||||||
/** Newindex function */
|
/** Newindex function */
|
||||||
|
@ -230,7 +233,7 @@ struct client_t
|
||||||
/** Window holding command needed to start it (session management related) */
|
/** Window holding command needed to start it (session management related) */
|
||||||
xcb_window_t leader_win;
|
xcb_window_t leader_win;
|
||||||
/** Client logical screen */
|
/** Client logical screen */
|
||||||
int screen;
|
screen_t *screen;
|
||||||
/** Client physical screen */
|
/** Client physical screen */
|
||||||
int phys_screen;
|
int phys_screen;
|
||||||
/** Titlebar */
|
/** Titlebar */
|
||||||
|
@ -257,40 +260,12 @@ struct tag
|
||||||
/** Tag name */
|
/** Tag name */
|
||||||
char *name;
|
char *name;
|
||||||
/** Screen */
|
/** Screen */
|
||||||
int screen;
|
screen_t *screen;
|
||||||
/** true if selected */
|
/** true if selected */
|
||||||
bool selected;
|
bool selected;
|
||||||
/** clients in this tag */
|
/** clients in this tag */
|
||||||
client_array_t clients;
|
client_array_t clients;
|
||||||
};
|
};
|
||||||
ARRAY_TYPE(tag_t *, tag)
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
/** Screen index */
|
|
||||||
int index;
|
|
||||||
/** Screen geometry */
|
|
||||||
area_t geometry;
|
|
||||||
/** true if we need to arrange() */
|
|
||||||
bool need_arrange;
|
|
||||||
/** Tag list */
|
|
||||||
tag_array_t tags;
|
|
||||||
/** Wiboxes */
|
|
||||||
wibox_array_t wiboxes;
|
|
||||||
/** Padding */
|
|
||||||
padding_t padding;
|
|
||||||
/** Window that contains the systray */
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
xcb_window_t window;
|
|
||||||
/** Systray window parent */
|
|
||||||
xcb_window_t parent;
|
|
||||||
} systray;
|
|
||||||
/** Focused client */
|
|
||||||
client_t *client_focus;
|
|
||||||
/** The monitor of startup notifications */
|
|
||||||
SnMonitorContext *snmonitor;
|
|
||||||
} screen_t;
|
|
||||||
|
|
||||||
/** Main configuration structure */
|
/** Main configuration structure */
|
||||||
struct awesome_t
|
struct awesome_t
|
||||||
|
@ -306,9 +281,7 @@ struct awesome_t
|
||||||
/** Keys symbol table */
|
/** Keys symbol table */
|
||||||
xcb_key_symbols_t *keysyms;
|
xcb_key_symbols_t *keysyms;
|
||||||
/** Logical screens */
|
/** Logical screens */
|
||||||
screen_t *screens;
|
screen_array_t screens;
|
||||||
/** Number of screens */
|
|
||||||
int nscreen;
|
|
||||||
/** True if xinerama is active */
|
/** True if xinerama is active */
|
||||||
bool xinerama_is_active;
|
bool xinerama_is_active;
|
||||||
/** Root window key bindings */
|
/** Root window key bindings */
|
||||||
|
|
18
systray.c
18
systray.c
|
@ -23,6 +23,7 @@
|
||||||
#include <xcb/xcb_icccm.h>
|
#include <xcb/xcb_icccm.h>
|
||||||
#include <xcb/xcb_atom.h>
|
#include <xcb/xcb_atom.h>
|
||||||
|
|
||||||
|
#include "screen.h"
|
||||||
#include "systray.h"
|
#include "systray.h"
|
||||||
#include "window.h"
|
#include "window.h"
|
||||||
#include "widget.h"
|
#include "widget.h"
|
||||||
|
@ -55,9 +56,9 @@ systray_init(int phys_screen)
|
||||||
|
|
||||||
p_delete(&atom_name);
|
p_delete(&atom_name);
|
||||||
|
|
||||||
globalconf.screens[phys_screen].systray.window = xcb_generate_id(globalconf.connection);
|
globalconf.screens.tab[phys_screen].systray.window = xcb_generate_id(globalconf.connection);
|
||||||
xcb_create_window(globalconf.connection, xscreen->root_depth,
|
xcb_create_window(globalconf.connection, xscreen->root_depth,
|
||||||
globalconf.screens[phys_screen].systray.window,
|
globalconf.screens.tab[phys_screen].systray.window,
|
||||||
xscreen->root,
|
xscreen->root,
|
||||||
-1, -1, 1, 1, 0,
|
-1, -1, 1, 1, 0,
|
||||||
XCB_COPY_FROM_PARENT, xscreen->root_visual, 0, NULL);
|
XCB_COPY_FROM_PARENT, xscreen->root_visual, 0, NULL);
|
||||||
|
@ -69,7 +70,7 @@ systray_init(int phys_screen)
|
||||||
ev.format = 32;
|
ev.format = 32;
|
||||||
ev.type = MANAGER;
|
ev.type = MANAGER;
|
||||||
ev.data.data32[0] = XCB_CURRENT_TIME;
|
ev.data.data32[0] = XCB_CURRENT_TIME;
|
||||||
ev.data.data32[2] = globalconf.screens[phys_screen].systray.window;
|
ev.data.data32[2] = globalconf.screens.tab[phys_screen].systray.window;
|
||||||
ev.data.data32[3] = ev.data.data32[4] = 0;
|
ev.data.data32[3] = ev.data.data32[4] = 0;
|
||||||
|
|
||||||
if(!(atom_systray_r = xcb_intern_atom_reply(globalconf.connection, atom_systray_q, NULL)))
|
if(!(atom_systray_r = xcb_intern_atom_reply(globalconf.connection, atom_systray_q, NULL)))
|
||||||
|
@ -83,7 +84,7 @@ systray_init(int phys_screen)
|
||||||
p_delete(&atom_systray_r);
|
p_delete(&atom_systray_r);
|
||||||
|
|
||||||
xcb_set_selection_owner(globalconf.connection,
|
xcb_set_selection_owner(globalconf.connection,
|
||||||
globalconf.screens[phys_screen].systray.window,
|
globalconf.screens.tab[phys_screen].systray.window,
|
||||||
atom_systray,
|
atom_systray,
|
||||||
XCB_CURRENT_TIME);
|
XCB_CURRENT_TIME);
|
||||||
|
|
||||||
|
@ -130,7 +131,6 @@ systray_request_handle(xcb_window_t embed_win, int phys_screen, xembed_info_t *i
|
||||||
{
|
{
|
||||||
xembed_window_t em;
|
xembed_window_t em;
|
||||||
xcb_get_property_cookie_t em_cookie;
|
xcb_get_property_cookie_t em_cookie;
|
||||||
int i;
|
|
||||||
const uint32_t select_input_val[] =
|
const uint32_t select_input_val[] =
|
||||||
{
|
{
|
||||||
XCB_EVENT_MASK_STRUCTURE_NOTIFY
|
XCB_EVENT_MASK_STRUCTURE_NOTIFY
|
||||||
|
@ -152,7 +152,7 @@ systray_request_handle(xcb_window_t embed_win, int phys_screen, xembed_info_t *i
|
||||||
window_state_set(embed_win, XCB_WM_STATE_WITHDRAWN);
|
window_state_set(embed_win, XCB_WM_STATE_WITHDRAWN);
|
||||||
|
|
||||||
xcb_reparent_window(globalconf.connection, embed_win,
|
xcb_reparent_window(globalconf.connection, embed_win,
|
||||||
globalconf.screens[phys_screen].systray.window,
|
globalconf.screens.tab[phys_screen].systray.window,
|
||||||
0, 0);
|
0, 0);
|
||||||
|
|
||||||
em.win = embed_win;
|
em.win = embed_win;
|
||||||
|
@ -164,13 +164,13 @@ systray_request_handle(xcb_window_t embed_win, int phys_screen, xembed_info_t *i
|
||||||
xembed_info_get_reply(globalconf.connection, em_cookie, &em.info);
|
xembed_info_get_reply(globalconf.connection, em_cookie, &em.info);
|
||||||
|
|
||||||
xembed_embedded_notify(globalconf.connection, em.win,
|
xembed_embedded_notify(globalconf.connection, em.win,
|
||||||
globalconf.screens[phys_screen].systray.window,
|
globalconf.screens.tab[phys_screen].systray.window,
|
||||||
MIN(XEMBED_VERSION, em.info.version));
|
MIN(XEMBED_VERSION, em.info.version));
|
||||||
|
|
||||||
xembed_window_array_append(&globalconf.embedded, em);
|
xembed_window_array_append(&globalconf.embedded, em);
|
||||||
|
|
||||||
for(i = 0; i < globalconf.nscreen; i++)
|
foreach(screen, globalconf.screens)
|
||||||
widget_invalidate_bytype(i, widget_systray);
|
widget_invalidate_bytype(screen, widget_systray);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
67
tag.c
67
tag.c
|
@ -54,8 +54,8 @@ static void
|
||||||
tag_view(tag_t *tag, bool view)
|
tag_view(tag_t *tag, bool view)
|
||||||
{
|
{
|
||||||
tag->selected = view;
|
tag->selected = view;
|
||||||
ewmh_update_net_current_desktop(screen_virttophys(tag->screen));
|
ewmh_update_net_current_desktop(screen_virttophys(tag->screen->index));
|
||||||
globalconf.screens[tag->screen].need_arrange = true;
|
tag->screen->need_arrange = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Append a tag which on top of the stack to a screen.
|
/** Append a tag which on top of the stack to a screen.
|
||||||
|
@ -67,7 +67,7 @@ tag_append_to_screen(screen_t *s)
|
||||||
int phys_screen = screen_virttophys(s->index);
|
int phys_screen = screen_virttophys(s->index);
|
||||||
tag_t *tag = tag_ref(globalconf.L);
|
tag_t *tag = tag_ref(globalconf.L);
|
||||||
|
|
||||||
tag->screen = s->index;
|
tag->screen = s;
|
||||||
tag_array_append(&s->tags, tag);
|
tag_array_append(&s->tags, tag);
|
||||||
ewmh_update_net_numbers_of_desktop(phys_screen);
|
ewmh_update_net_numbers_of_desktop(phys_screen);
|
||||||
ewmh_update_net_desktop_names(phys_screen);
|
ewmh_update_net_desktop_names(phys_screen);
|
||||||
|
@ -89,9 +89,8 @@ tag_append_to_screen(screen_t *s)
|
||||||
static void
|
static void
|
||||||
tag_remove_from_screen(tag_t *tag)
|
tag_remove_from_screen(tag_t *tag)
|
||||||
{
|
{
|
||||||
int screen = tag->screen;
|
int phys_screen = screen_virttophys(tag->screen->index);
|
||||||
int phys_screen = screen_virttophys(tag->screen);
|
tag_array_t *tags = &tag->screen->tags;
|
||||||
tag_array_t *tags = &globalconf.screens[tag->screen].tags;
|
|
||||||
|
|
||||||
for(int i = 0; i < tags->len; i++)
|
for(int i = 0; i < tags->len; i++)
|
||||||
if(tags->tab[i] == tag)
|
if(tags->tab[i] == tag)
|
||||||
|
@ -102,12 +101,12 @@ tag_remove_from_screen(tag_t *tag)
|
||||||
ewmh_update_net_numbers_of_desktop(phys_screen);
|
ewmh_update_net_numbers_of_desktop(phys_screen);
|
||||||
ewmh_update_net_desktop_names(phys_screen);
|
ewmh_update_net_desktop_names(phys_screen);
|
||||||
ewmh_update_workarea(phys_screen);
|
ewmh_update_workarea(phys_screen);
|
||||||
tag->screen = SCREEN_UNDEF;
|
tag->screen = NULL;
|
||||||
|
|
||||||
/* call hook */
|
/* call hook */
|
||||||
if(globalconf.hooks.tags != LUA_REFNIL)
|
if(globalconf.hooks.tags != LUA_REFNIL)
|
||||||
{
|
{
|
||||||
lua_pushnumber(globalconf.L, screen + 1);
|
lua_pushnumber(globalconf.L, tag->screen->index + 1);
|
||||||
tag_push(globalconf.L, tag);
|
tag_push(globalconf.L, tag);
|
||||||
lua_pushliteral(globalconf.L, "remove");
|
lua_pushliteral(globalconf.L, "remove");
|
||||||
luaA_dofunction(globalconf.L, globalconf.hooks.tags, 3, 0);
|
luaA_dofunction(globalconf.L, globalconf.hooks.tags, 3, 0);
|
||||||
|
@ -182,19 +181,18 @@ is_client_tagged(client_t *c, tag_t *t)
|
||||||
|
|
||||||
/** Get the current tags for the specified screen.
|
/** Get the current tags for the specified screen.
|
||||||
* Returned pointer must be p_delete'd after.
|
* Returned pointer must be p_delete'd after.
|
||||||
* \param screen screen id
|
* \param screen Screen.
|
||||||
* \return a double pointer of tag list finished with a NULL element
|
* \return A double pointer of tag list finished with a NULL element.
|
||||||
*/
|
*/
|
||||||
tag_t **
|
tag_t **
|
||||||
tags_get_current(int screen)
|
tags_get_current(screen_t *screen)
|
||||||
{
|
{
|
||||||
tag_array_t *tags = &globalconf.screens[screen].tags;
|
tag_t **out = p_new(tag_t *, screen->tags.len + 1);
|
||||||
tag_t **out = p_new(tag_t *, tags->len + 1);
|
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
||||||
for(int i = 0; i < tags->len; i++)
|
foreach(tag, screen->tags)
|
||||||
if(tags->tab[i]->selected)
|
if((*tag)->selected)
|
||||||
out[n++] = tags->tab[i];
|
out[n++] = *tag;
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
@ -207,22 +205,18 @@ static void
|
||||||
tag_view_only(tag_t *target)
|
tag_view_only(tag_t *target)
|
||||||
{
|
{
|
||||||
if(target)
|
if(target)
|
||||||
{
|
foreach(tag, target->screen->tags)
|
||||||
tag_array_t *tags = &globalconf.screens[target->screen].tags;
|
tag_view(*tag, *tag == target);
|
||||||
|
|
||||||
for(int i = 0; i < tags->len; i++)
|
|
||||||
tag_view(tags->tab[i], tags->tab[i] == target);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** View only a tag, selected by its index.
|
/** View only a tag, selected by its index.
|
||||||
* \param screen screen id
|
* \param screen Screen.
|
||||||
* \param dindex the index
|
* \param dindex The index.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
tag_view_only_byindex(int screen, int dindex)
|
tag_view_only_byindex(screen_t *screen, int dindex)
|
||||||
{
|
{
|
||||||
tag_array_t *tags = &globalconf.screens[screen].tags;
|
tag_array_t *tags = &screen->tags;
|
||||||
|
|
||||||
if(dindex < 0 || dindex >= tags->len)
|
if(dindex < 0 || dindex >= tags->len)
|
||||||
return;
|
return;
|
||||||
|
@ -244,9 +238,6 @@ luaA_tag_new(lua_State *L)
|
||||||
|
|
||||||
a_iso2utf8(name, len, &tag->name, NULL);
|
a_iso2utf8(name, len, &tag->name, NULL);
|
||||||
|
|
||||||
/* to avoid error */
|
|
||||||
tag->screen = SCREEN_UNDEF;
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -317,9 +308,9 @@ luaA_tag_index(lua_State *L)
|
||||||
lua_pushstring(L, tag->name);
|
lua_pushstring(L, tag->name);
|
||||||
break;
|
break;
|
||||||
case A_TK_SCREEN:
|
case A_TK_SCREEN:
|
||||||
if(tag->screen == SCREEN_UNDEF)
|
if(!tag->screen)
|
||||||
return 0;
|
return 0;
|
||||||
lua_pushnumber(L, tag->screen + 1);
|
lua_pushnumber(L, tag->screen->index + 1);
|
||||||
break;
|
break;
|
||||||
case A_TK_SELECTED:
|
case A_TK_SELECTED:
|
||||||
lua_pushboolean(L, tag->selected);
|
lua_pushboolean(L, tag->selected);
|
||||||
|
@ -360,28 +351,28 @@ luaA_tag_newindex(lua_State *L)
|
||||||
luaA_checkscreen(screen);
|
luaA_checkscreen(screen);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
screen = SCREEN_UNDEF;
|
screen = -1;
|
||||||
|
|
||||||
if(tag->screen != SCREEN_UNDEF)
|
if(tag->screen)
|
||||||
tag_remove_from_screen(tag);
|
tag_remove_from_screen(tag);
|
||||||
|
|
||||||
if(screen != SCREEN_UNDEF)
|
if(screen != -1)
|
||||||
{
|
{
|
||||||
/* push tag on top of the stack */
|
/* push tag on top of the stack */
|
||||||
lua_pushvalue(L, 1);
|
lua_pushvalue(L, 1);
|
||||||
tag_append_to_screen(&globalconf.screens[screen]);
|
tag_append_to_screen(&globalconf.screens.tab[screen]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case A_TK_SELECTED:
|
case A_TK_SELECTED:
|
||||||
if(tag->screen != SCREEN_UNDEF)
|
if(tag->screen)
|
||||||
tag_view(tag, luaA_checkboolean(L, 3));
|
tag_view(tag, luaA_checkboolean(L, 3));
|
||||||
return 0;
|
return 0;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(tag->screen != SCREEN_UNDEF && tag->selected)
|
if(tag->screen && tag->selected)
|
||||||
globalconf.screens[tag->screen].need_arrange = true;
|
tag->screen->need_arrange = true;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
4
tag.h
4
tag.h
|
@ -25,11 +25,11 @@
|
||||||
#include "structs.h"
|
#include "structs.h"
|
||||||
#include "client.h"
|
#include "client.h"
|
||||||
|
|
||||||
tag_t **tags_get_current(int);
|
tag_t **tags_get_current(screen_t *);
|
||||||
void tag_client(client_t *);
|
void tag_client(client_t *);
|
||||||
void untag_client(client_t *, tag_t *);
|
void untag_client(client_t *, tag_t *);
|
||||||
bool is_client_tagged(client_t *, tag_t *);
|
bool is_client_tagged(client_t *, tag_t *);
|
||||||
void tag_view_only_byindex(int, int);
|
void tag_view_only_byindex(screen_t *, int);
|
||||||
void tag_append_to_screen(screen_t *);
|
void tag_append_to_screen(screen_t *);
|
||||||
void tag_unref_simplified(tag_t **);
|
void tag_unref_simplified(tag_t **);
|
||||||
|
|
||||||
|
|
|
@ -218,7 +218,7 @@ titlebar_client_detach(client_t *c)
|
||||||
c->geometry = titlebar_geometry_remove(c->titlebar, 0, c->geometry);
|
c->geometry = titlebar_geometry_remove(c->titlebar, 0, c->geometry);
|
||||||
simplewindow_wipe(&c->titlebar->sw);
|
simplewindow_wipe(&c->titlebar->sw);
|
||||||
c->titlebar->type = WIBOX_TYPE_NORMAL;
|
c->titlebar->type = WIBOX_TYPE_NORMAL;
|
||||||
c->titlebar->screen = SCREEN_UNDEF;
|
c->titlebar->screen = NULL;
|
||||||
|
|
||||||
wibox_unref(globalconf.L, c->titlebar);
|
wibox_unref(globalconf.L, c->titlebar);
|
||||||
c->titlebar = NULL;
|
c->titlebar = NULL;
|
||||||
|
@ -307,7 +307,7 @@ titlebar_set_visible(wibox_t *t, bool visible)
|
||||||
else
|
else
|
||||||
titlebar_ban(t);
|
titlebar_ban(t);
|
||||||
|
|
||||||
globalconf.screens[t->screen].need_arrange = true;
|
t->screen->need_arrange = true;
|
||||||
client_stack();
|
client_stack();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ void titlebar_unban(wibox_t *);
|
||||||
int luaA_titlebar_newindex(lua_State *, wibox_t *, awesome_token_t);
|
int luaA_titlebar_newindex(lua_State *, wibox_t *, awesome_token_t);
|
||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
titlebar_isvisible(client_t *c, int screen)
|
titlebar_isvisible(client_t *c, screen_t *screen)
|
||||||
{
|
{
|
||||||
if(client_isvisible(c, screen))
|
if(client_isvisible(c, screen))
|
||||||
{
|
{
|
||||||
|
|
78
wibox.c
78
wibox.c
|
@ -127,10 +127,10 @@ wibox_setposition(wibox_t *wibox, position_t p)
|
||||||
wibox_position_update(wibox);
|
wibox_position_update(wibox);
|
||||||
|
|
||||||
/* reset all wibox position */
|
/* reset all wibox position */
|
||||||
foreach(w, globalconf.screens[wibox->screen].wiboxes)
|
foreach(w, wibox->screen->wiboxes)
|
||||||
wibox_position_update(*w);
|
wibox_position_update(*w);
|
||||||
|
|
||||||
ewmh_update_workarea(screen_virttophys(wibox->screen));
|
ewmh_update_workarea(screen_virttophys(wibox->screen->index));
|
||||||
|
|
||||||
wibox_need_update(wibox);
|
wibox_need_update(wibox);
|
||||||
}
|
}
|
||||||
|
@ -144,23 +144,23 @@ wibox_systray_kickout(int phys_screen)
|
||||||
{
|
{
|
||||||
xcb_screen_t *s = xutil_screen_get(globalconf.connection, phys_screen);
|
xcb_screen_t *s = xutil_screen_get(globalconf.connection, phys_screen);
|
||||||
|
|
||||||
if(globalconf.screens[phys_screen].systray.parent != s->root)
|
if(globalconf.screens.tab[phys_screen].systray.parent != s->root)
|
||||||
{
|
{
|
||||||
/* Who! Check that we're not deleting a wibox with a systray, because it
|
/* Who! Check that we're not deleting a wibox with a systray, because it
|
||||||
* may be its parent. If so, we reparent to root before, otherwise it will
|
* may be its parent. If so, we reparent to root before, otherwise it will
|
||||||
* hurt very much. */
|
* hurt very much. */
|
||||||
xcb_reparent_window(globalconf.connection,
|
xcb_reparent_window(globalconf.connection,
|
||||||
globalconf.screens[phys_screen].systray.window,
|
globalconf.screens.tab[phys_screen].systray.window,
|
||||||
s->root, -512, -512);
|
s->root, -512, -512);
|
||||||
|
|
||||||
globalconf.screens[phys_screen].systray.parent = s->root;
|
globalconf.screens.tab[phys_screen].systray.parent = s->root;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
wibox_systray_refresh(wibox_t *wibox)
|
wibox_systray_refresh(wibox_t *wibox)
|
||||||
{
|
{
|
||||||
if(wibox->screen == SCREEN_UNDEF)
|
if(!wibox->screen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for(int i = 0; i < wibox->widgets.len; i++)
|
for(int i = 0; i < wibox->widgets.len; i++)
|
||||||
|
@ -180,10 +180,10 @@ wibox_systray_refresh(wibox_t *wibox)
|
||||||
{
|
{
|
||||||
/* Set background of the systray window. */
|
/* Set background of the systray window. */
|
||||||
xcb_change_window_attributes(globalconf.connection,
|
xcb_change_window_attributes(globalconf.connection,
|
||||||
globalconf.screens[phys_screen].systray.window,
|
globalconf.screens.tab[phys_screen].systray.window,
|
||||||
XCB_CW_BACK_PIXEL, config_back);
|
XCB_CW_BACK_PIXEL, config_back);
|
||||||
/* Map it. */
|
/* Map it. */
|
||||||
xcb_map_window(globalconf.connection, globalconf.screens[phys_screen].systray.window);
|
xcb_map_window(globalconf.connection, globalconf.screens.tab[phys_screen].systray.window);
|
||||||
/* Move it. */
|
/* Move it. */
|
||||||
switch(wibox->sw.orientation)
|
switch(wibox->sw.orientation)
|
||||||
{
|
{
|
||||||
|
@ -207,16 +207,16 @@ wibox_systray_refresh(wibox_t *wibox)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* reparent */
|
/* reparent */
|
||||||
if(globalconf.screens[phys_screen].systray.parent != wibox->sw.window)
|
if(globalconf.screens.tab[phys_screen].systray.parent != wibox->sw.window)
|
||||||
{
|
{
|
||||||
xcb_reparent_window(globalconf.connection,
|
xcb_reparent_window(globalconf.connection,
|
||||||
globalconf.screens[phys_screen].systray.window,
|
globalconf.screens.tab[phys_screen].systray.window,
|
||||||
wibox->sw.window,
|
wibox->sw.window,
|
||||||
config_win_vals[0], config_win_vals[1]);
|
config_win_vals[0], config_win_vals[1]);
|
||||||
globalconf.screens[phys_screen].systray.parent = wibox->sw.window;
|
globalconf.screens.tab[phys_screen].systray.parent = wibox->sw.window;
|
||||||
}
|
}
|
||||||
xcb_configure_window(globalconf.connection,
|
xcb_configure_window(globalconf.connection,
|
||||||
globalconf.screens[phys_screen].systray.window,
|
globalconf.screens.tab[phys_screen].systray.window,
|
||||||
XCB_CONFIG_WINDOW_X
|
XCB_CONFIG_WINDOW_X
|
||||||
| XCB_CONFIG_WINDOW_Y
|
| XCB_CONFIG_WINDOW_Y
|
||||||
| XCB_CONFIG_WINDOW_WIDTH
|
| XCB_CONFIG_WINDOW_WIDTH
|
||||||
|
@ -342,20 +342,20 @@ wibox_position_update_non_floating(wibox_t *wibox)
|
||||||
/* Everything we do below needs the wibox' screen.
|
/* Everything we do below needs the wibox' screen.
|
||||||
* No screen, nothing to do.
|
* No screen, nothing to do.
|
||||||
*/
|
*/
|
||||||
if (wibox->screen == SCREEN_UNDEF)
|
if (!wibox->screen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* This wibox limits the space available to clients and thus clients
|
/* This wibox limits the space available to clients and thus clients
|
||||||
* need to be repositioned.
|
* need to be repositioned.
|
||||||
*/
|
*/
|
||||||
globalconf.screens[wibox->screen].need_arrange = true;
|
wibox->screen->need_arrange = true;
|
||||||
|
|
||||||
/* Place wibox'es at the edge of the screen, struts come later. */
|
/* Place wibox'es at the edge of the screen, struts come later. */
|
||||||
area = screen_area_get(wibox->screen, NULL,
|
area = screen_area_get(wibox->screen, NULL,
|
||||||
&globalconf.screens[wibox->screen].padding, false);
|
&wibox->screen->padding, false);
|
||||||
|
|
||||||
/* Top and Bottom wibox_t have prio */
|
/* Top and Bottom wibox_t have prio */
|
||||||
foreach(_w, globalconf.screens[wibox->screen].wiboxes)
|
foreach(_w, wibox->screen->wiboxes)
|
||||||
{
|
{
|
||||||
wibox_t *w = *_w;
|
wibox_t *w = *_w;
|
||||||
/* Ignore every wibox after me that is in the same position */
|
/* Ignore every wibox after me that is in the same position */
|
||||||
|
@ -519,8 +519,8 @@ wibox_position_update(wibox_t *wibox)
|
||||||
wibox_t *
|
wibox_t *
|
||||||
wibox_getbywin(xcb_window_t win)
|
wibox_getbywin(xcb_window_t win)
|
||||||
{
|
{
|
||||||
for(int screen = 0; screen < globalconf.nscreen; screen++)
|
foreach(screen, globalconf.screens)
|
||||||
foreach(w, globalconf.screens[screen].wiboxes)
|
foreach(w, screen->wiboxes)
|
||||||
if((*w)->sw.window == win)
|
if((*w)->sw.window == win)
|
||||||
return *w;
|
return *w;
|
||||||
|
|
||||||
|
@ -556,8 +556,8 @@ wibox_draw(wibox_t *wibox)
|
||||||
void
|
void
|
||||||
wibox_refresh(void)
|
wibox_refresh(void)
|
||||||
{
|
{
|
||||||
for(int screen = 0; screen < globalconf.nscreen; screen++)
|
foreach(screen, globalconf.screens)
|
||||||
foreach(w, globalconf.screens[screen].wiboxes)
|
foreach(w, screen->wiboxes)
|
||||||
if((*w)->need_update)
|
if((*w)->need_update)
|
||||||
wibox_draw(*w);
|
wibox_draw(*w);
|
||||||
|
|
||||||
|
@ -574,8 +574,8 @@ wibox_refresh(void)
|
||||||
void
|
void
|
||||||
wibox_update_positions(void)
|
wibox_update_positions(void)
|
||||||
{
|
{
|
||||||
for(int screen = 0; screen < globalconf.nscreen; screen++)
|
foreach(screen, globalconf.screens)
|
||||||
foreach(w, globalconf.screens[screen].wiboxes)
|
foreach(w, screen->wiboxes)
|
||||||
wibox_position_update(*w);
|
wibox_position_update(*w);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -591,7 +591,7 @@ wibox_setvisible(wibox_t *wibox, bool v)
|
||||||
wibox->isvisible = v;
|
wibox->isvisible = v;
|
||||||
wibox->mouse_over = NULL;
|
wibox->mouse_over = NULL;
|
||||||
|
|
||||||
if(wibox->screen != SCREEN_UNDEF)
|
if(wibox->screen != NULL)
|
||||||
{
|
{
|
||||||
if(wibox->isvisible)
|
if(wibox->isvisible)
|
||||||
wibox_map(wibox);
|
wibox_map(wibox);
|
||||||
|
@ -602,7 +602,7 @@ wibox_setvisible(wibox_t *wibox, bool v)
|
||||||
wibox_systray_refresh(wibox);
|
wibox_systray_refresh(wibox);
|
||||||
|
|
||||||
/* All the other wibox and ourselves need to be repositioned */
|
/* All the other wibox and ourselves need to be repositioned */
|
||||||
foreach(w, globalconf.screens[wibox->screen].wiboxes)
|
foreach(w, wibox->screen->wiboxes)
|
||||||
wibox_position_update(*w);
|
wibox_position_update(*w);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -614,7 +614,7 @@ wibox_setvisible(wibox_t *wibox, bool v)
|
||||||
void
|
void
|
||||||
wibox_detach(wibox_t *wibox)
|
wibox_detach(wibox_t *wibox)
|
||||||
{
|
{
|
||||||
if(wibox->screen != SCREEN_UNDEF)
|
if(wibox->screen != NULL)
|
||||||
{
|
{
|
||||||
bool v;
|
bool v;
|
||||||
|
|
||||||
|
@ -630,16 +630,16 @@ wibox_detach(wibox_t *wibox)
|
||||||
|
|
||||||
simplewindow_wipe(&wibox->sw);
|
simplewindow_wipe(&wibox->sw);
|
||||||
|
|
||||||
globalconf.screens[wibox->screen].need_arrange = true;
|
wibox->screen->need_arrange = true;
|
||||||
|
|
||||||
foreach(item, globalconf.screens[wibox->screen].wiboxes)
|
foreach(item, wibox->screen->wiboxes)
|
||||||
if(*item == wibox)
|
if(*item == wibox)
|
||||||
{
|
{
|
||||||
wibox_array_remove(&globalconf.screens[wibox->screen].wiboxes, item);
|
wibox_array_remove(&wibox->screen->wiboxes, item);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
wibox->screen = SCREEN_UNDEF;
|
wibox->screen = NULL;
|
||||||
wibox_unref(globalconf.L, wibox);
|
wibox_unref(globalconf.L, wibox);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -657,10 +657,11 @@ wibox_attach(screen_t *s)
|
||||||
wibox_detach(wibox);
|
wibox_detach(wibox);
|
||||||
|
|
||||||
/* Set the wibox screen */
|
/* Set the wibox screen */
|
||||||
wibox->screen = s->index;
|
wibox->screen = s;
|
||||||
|
|
||||||
/* Check that the wibox coordinates matches the screen. */
|
/* Check that the wibox coordinates matches the screen. */
|
||||||
int cscreen = screen_getbycoord(wibox->screen, wibox->sw.geometry.x, wibox->sw.geometry.y);
|
screen_t *cscreen =
|
||||||
|
screen_getbycoord(wibox->screen, wibox->sw.geometry.x, wibox->sw.geometry.y);
|
||||||
|
|
||||||
/* If it does not match, move it to the screen coordinates */
|
/* If it does not match, move it to the screen coordinates */
|
||||||
if(cscreen != wibox->screen)
|
if(cscreen != wibox->screen)
|
||||||
|
@ -757,7 +758,6 @@ luaA_wibox_new(lua_State *L)
|
||||||
w->sw.geometry.width = luaA_getopt_number(L, 2, "width", 0);
|
w->sw.geometry.width = luaA_getopt_number(L, 2, "width", 0);
|
||||||
w->sw.geometry.height = luaA_getopt_number(L, 2, "height", 0);
|
w->sw.geometry.height = luaA_getopt_number(L, 2, "height", 0);
|
||||||
|
|
||||||
w->screen = SCREEN_UNDEF;
|
|
||||||
w->isvisible = true;
|
w->isvisible = true;
|
||||||
w->cursor = a_strdup("left_ptr");
|
w->cursor = a_strdup("left_ptr");
|
||||||
|
|
||||||
|
@ -806,8 +806,8 @@ luaA_wibox_hasitem(lua_State *L, wibox_t *wibox, const void *item)
|
||||||
void
|
void
|
||||||
luaA_wibox_invalidate_byitem(lua_State *L, const void *item)
|
luaA_wibox_invalidate_byitem(lua_State *L, const void *item)
|
||||||
{
|
{
|
||||||
for(int screen = 0; screen < globalconf.nscreen; screen++)
|
foreach(screen, globalconf.screens)
|
||||||
foreach(w, globalconf.screens[screen].wiboxes)
|
foreach(w, screen->wiboxes)
|
||||||
{
|
{
|
||||||
wibox_t *wibox = *w;
|
wibox_t *wibox = *w;
|
||||||
if(luaA_wibox_hasitem(L, wibox, item))
|
if(luaA_wibox_hasitem(L, wibox, item))
|
||||||
|
@ -866,9 +866,9 @@ luaA_wibox_index(lua_State *L)
|
||||||
case A_TK_CLIENT:
|
case A_TK_CLIENT:
|
||||||
return client_push(L, client_getbytitlebar(wibox));
|
return client_push(L, client_getbytitlebar(wibox));
|
||||||
case A_TK_SCREEN:
|
case A_TK_SCREEN:
|
||||||
if(wibox->screen == SCREEN_UNDEF)
|
if(!wibox->screen)
|
||||||
return 0;
|
return 0;
|
||||||
lua_pushnumber(L, wibox->screen + 1);
|
lua_pushnumber(L, wibox->screen->index + 1);
|
||||||
break;
|
break;
|
||||||
case A_TK_BORDER_WIDTH:
|
case A_TK_BORDER_WIDTH:
|
||||||
lua_pushnumber(L, wibox->sw.border.width);
|
lua_pushnumber(L, wibox->sw.border.width);
|
||||||
|
@ -968,7 +968,7 @@ luaA_wibox_geometry(lua_State *L)
|
||||||
|| wingeom.height != wibox->sw.geometry.height)
|
|| wingeom.height != wibox->sw.geometry.height)
|
||||||
{
|
{
|
||||||
wibox_resize(wibox, wingeom.width, wingeom.height);
|
wibox_resize(wibox, wingeom.width, wingeom.height);
|
||||||
globalconf.screens[wibox->screen].need_arrange = true;
|
wibox->screen->need_arrange = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1066,11 +1066,11 @@ luaA_wibox_newindex(lua_State *L)
|
||||||
{
|
{
|
||||||
int screen = luaL_checknumber(L, 3) - 1;
|
int screen = luaL_checknumber(L, 3) - 1;
|
||||||
luaA_checkscreen(screen);
|
luaA_checkscreen(screen);
|
||||||
if(screen != wibox->screen)
|
if(!wibox->screen || screen != wibox->screen->index)
|
||||||
{
|
{
|
||||||
titlebar_client_detach(client_getbytitlebar(wibox));
|
titlebar_client_detach(client_getbytitlebar(wibox));
|
||||||
lua_pushvalue(L, 1);
|
lua_pushvalue(L, 1);
|
||||||
wibox_attach(&globalconf.screens[screen]);
|
wibox_attach(&globalconf.screens.tab[screen]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
25
widget.c
25
widget.c
|
@ -24,6 +24,7 @@
|
||||||
#include <xcb/xcb.h>
|
#include <xcb/xcb.h>
|
||||||
#include <xcb/xcb_atom.h>
|
#include <xcb/xcb_atom.h>
|
||||||
|
|
||||||
|
#include "screen.h"
|
||||||
#include "mouse.h"
|
#include "mouse.h"
|
||||||
#include "widget.h"
|
#include "widget.h"
|
||||||
#include "wibox.h"
|
#include "wibox.h"
|
||||||
|
@ -270,8 +271,7 @@ widget_render(wibox_t *wibox)
|
||||||
{
|
{
|
||||||
widgets->tab[i].geometry.y = 0;
|
widgets->tab[i].geometry.y = 0;
|
||||||
widgets->tab[i].widget->draw(widgets->tab[i].widget,
|
widgets->tab[i].widget->draw(widgets->tab[i].widget,
|
||||||
ctx, widgets->tab[i].geometry,
|
ctx, widgets->tab[i].geometry, wibox);
|
||||||
wibox->screen, wibox);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(wibox->sw.orientation)
|
switch(wibox->sw.orientation)
|
||||||
|
@ -294,13 +294,13 @@ widget_render(wibox_t *wibox)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Invalidate widgets which should be refresh depending on their types.
|
/** Invalidate widgets which should be refresh depending on their types.
|
||||||
* \param screen Virtual screen number.
|
* \param screen Virtual screen.
|
||||||
* \param type Widget type to invalidate.
|
* \param type Widget type to invalidate.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
widget_invalidate_bytype(int screen, widget_constructor_t *type)
|
widget_invalidate_bytype(screen_t *screen, widget_constructor_t *type)
|
||||||
{
|
{
|
||||||
foreach(wibox, globalconf.screens[screen].wiboxes)
|
foreach(wibox, screen->wiboxes)
|
||||||
foreach(wnode, (*wibox)->widgets)
|
foreach(wnode, (*wibox)->widgets)
|
||||||
if(wnode->widget->type == type)
|
if(wnode->widget->type == type)
|
||||||
{
|
{
|
||||||
|
@ -316,18 +316,15 @@ widget_invalidate_bytype(int screen, widget_constructor_t *type)
|
||||||
void
|
void
|
||||||
widget_invalidate_bywidget(widget_t *widget)
|
widget_invalidate_bywidget(widget_t *widget)
|
||||||
{
|
{
|
||||||
for(int screen = 0; screen < globalconf.nscreen; screen++)
|
foreach(screen, globalconf.screens)
|
||||||
for(int i = 0; i < globalconf.screens[screen].wiboxes.len; i++)
|
foreach(wibox, screen->wiboxes)
|
||||||
|
if(!(*wibox)->need_update)
|
||||||
|
foreach(wnode, (*wibox)->widgets)
|
||||||
|
if(wnode->widget == widget)
|
||||||
{
|
{
|
||||||
wibox_t *wibox = globalconf.screens[screen].wiboxes.tab[i];
|
(*wibox)->need_update = true;
|
||||||
if(!wibox->need_update)
|
|
||||||
for(int j = 0; j < wibox->widgets.len; j++)
|
|
||||||
if(wibox->widgets.tab[j].widget == widget)
|
|
||||||
{
|
|
||||||
wibox->need_update = true;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
foreach(_c, globalconf.clients)
|
foreach(_c, globalconf.clients)
|
||||||
{
|
{
|
||||||
|
|
2
widget.h
2
widget.h
|
@ -40,7 +40,7 @@ void widget_render(wibox_t *);
|
||||||
void luaA_table2widgets(lua_State *, widget_node_array_t *);
|
void luaA_table2widgets(lua_State *, widget_node_array_t *);
|
||||||
|
|
||||||
void widget_invalidate_bywidget(widget_t *);
|
void widget_invalidate_bywidget(widget_t *);
|
||||||
void widget_invalidate_bytype(int, widget_constructor_t *);
|
void widget_invalidate_bytype(screen_t *, widget_constructor_t *);
|
||||||
|
|
||||||
widget_constructor_t widget_textbox;
|
widget_constructor_t widget_textbox;
|
||||||
widget_constructor_t widget_progressbar;
|
widget_constructor_t widget_progressbar;
|
||||||
|
|
|
@ -147,7 +147,7 @@ graph_plot_get(graph_data_t *d, const char *title)
|
||||||
}
|
}
|
||||||
|
|
||||||
static area_t
|
static area_t
|
||||||
graph_geometry(widget_t *widget, int screen, int height, int width)
|
graph_geometry(widget_t *widget, screen_t *screen, int height, int width)
|
||||||
{
|
{
|
||||||
area_t geometry;
|
area_t geometry;
|
||||||
graph_data_t *d = widget->data;
|
graph_data_t *d = widget->data;
|
||||||
|
@ -160,7 +160,6 @@ graph_geometry(widget_t *widget, int screen, int height, int width)
|
||||||
|
|
||||||
/** Draw a graph widget.
|
/** Draw a graph widget.
|
||||||
* \param ctx The draw context.
|
* \param ctx The draw context.
|
||||||
* \param screen The screen number.
|
|
||||||
* \param w The widget node we are called from.
|
* \param w The widget node we are called from.
|
||||||
* \param offset The offset to draw at.
|
* \param offset The offset to draw at.
|
||||||
* \param used The already used width.
|
* \param used The already used width.
|
||||||
|
@ -169,7 +168,7 @@ graph_geometry(widget_t *widget, int screen, int height, int width)
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
graph_draw(widget_t *widget, draw_context_t *ctx,
|
graph_draw(widget_t *widget, draw_context_t *ctx,
|
||||||
area_t geometry, int screen, wibox_t *p)
|
area_t geometry, wibox_t *p)
|
||||||
{
|
{
|
||||||
int margin_top, y;
|
int margin_top, y;
|
||||||
graph_data_t *d = widget->data;
|
graph_data_t *d = widget->data;
|
||||||
|
|
|
@ -33,7 +33,7 @@ typedef struct
|
||||||
} imagebox_data_t;
|
} imagebox_data_t;
|
||||||
|
|
||||||
static area_t
|
static area_t
|
||||||
imagebox_geometry(widget_t *widget, int screen, int height, int width)
|
imagebox_geometry(widget_t *widget, screen_t *screen, int height, int width)
|
||||||
{
|
{
|
||||||
area_t geometry;
|
area_t geometry;
|
||||||
imagebox_data_t *d = widget->data;
|
imagebox_data_t *d = widget->data;
|
||||||
|
@ -76,12 +76,10 @@ imagebox_geometry(widget_t *widget, int screen, int height, int width)
|
||||||
* \param widget The widget.
|
* \param widget The widget.
|
||||||
* \param ctx The draw context.
|
* \param ctx The draw context.
|
||||||
* \param geometry The geometry we draw in.
|
* \param geometry The geometry we draw in.
|
||||||
* \param screen The screen.
|
|
||||||
* \param p A pointer to the object we're draw onto.
|
* \param p A pointer to the object we're draw onto.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
imagebox_draw(widget_t *widget, draw_context_t *ctx, area_t geometry,
|
imagebox_draw(widget_t *widget, draw_context_t *ctx, area_t geometry, wibox_t *p)
|
||||||
int screen, wibox_t *p)
|
|
||||||
{
|
{
|
||||||
imagebox_data_t *d = widget->data;
|
imagebox_data_t *d = widget->data;
|
||||||
|
|
||||||
|
|
|
@ -132,7 +132,7 @@ progressbar_bar_get(bar_array_t *bars, const char *title)
|
||||||
}
|
}
|
||||||
|
|
||||||
static area_t
|
static area_t
|
||||||
progressbar_geometry(widget_t *widget, int screen, int height, int width)
|
progressbar_geometry(widget_t *widget, screen_t *screen, int height, int width)
|
||||||
{
|
{
|
||||||
area_t geometry;
|
area_t geometry;
|
||||||
progressbar_data_t *d = widget->data;
|
progressbar_data_t *d = widget->data;
|
||||||
|
@ -162,7 +162,6 @@ progressbar_geometry(widget_t *widget, int screen, int height, int width)
|
||||||
|
|
||||||
/** Draw a progressbar.
|
/** Draw a progressbar.
|
||||||
* \param ctx The draw context.
|
* \param ctx The draw context.
|
||||||
* \param screen The screen we're drawing for.
|
|
||||||
* \param w The widget node we're drawing for.
|
* \param w The widget node we're drawing for.
|
||||||
* \param offset Offset to draw at.
|
* \param offset Offset to draw at.
|
||||||
* \param used Space already used.
|
* \param used Space already used.
|
||||||
|
@ -170,8 +169,7 @@ progressbar_geometry(widget_t *widget, int screen, int height, int width)
|
||||||
* \return The width used.
|
* \return The width used.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
progressbar_draw(widget_t *widget, draw_context_t *ctx, area_t geometry,
|
progressbar_draw(widget_t *widget, draw_context_t *ctx, area_t geometry, wibox_t *p)
|
||||||
int screen, wibox_t *p)
|
|
||||||
{
|
{
|
||||||
/* pb_.. values points to the widget inside a potential border */
|
/* pb_.. values points to the widget inside a potential border */
|
||||||
int values_ticks, pb_x, pb_y, pb_height, pb_width, pb_progress, pb_offset;
|
int values_ticks, pb_x, pb_y, pb_height, pb_width, pb_progress, pb_offset;
|
||||||
|
|
|
@ -31,10 +31,10 @@
|
||||||
#define _NET_SYSTEM_TRAY_ORIENTATION_VERT 1
|
#define _NET_SYSTEM_TRAY_ORIENTATION_VERT 1
|
||||||
|
|
||||||
static area_t
|
static area_t
|
||||||
systray_geometry(widget_t *widget, int screen, int height, int width)
|
systray_geometry(widget_t *widget, screen_t *screen, int height, int width)
|
||||||
{
|
{
|
||||||
area_t geometry;
|
area_t geometry;
|
||||||
int phys_screen = screen_virttophys(screen), n = 0;
|
int phys_screen = screen_virttophys(screen->index), n = 0;
|
||||||
|
|
||||||
geometry.height = height;
|
geometry.height = height;
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ systray_geometry(widget_t *widget, int screen, int height, int width)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
systray_draw(widget_t *widget, draw_context_t *ctx,
|
systray_draw(widget_t *widget, draw_context_t *ctx,
|
||||||
area_t geometry, int screen, wibox_t *p)
|
area_t geometry, wibox_t *p)
|
||||||
{
|
{
|
||||||
uint32_t orient;
|
uint32_t orient;
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ systray_draw(widget_t *widget, draw_context_t *ctx,
|
||||||
/* set wibox orientation */
|
/* set wibox orientation */
|
||||||
/** \todo stop setting that property on each redraw */
|
/** \todo stop setting that property on each redraw */
|
||||||
xcb_change_property(globalconf.connection, XCB_PROP_MODE_REPLACE,
|
xcb_change_property(globalconf.connection, XCB_PROP_MODE_REPLACE,
|
||||||
globalconf.screens[p->sw.ctx.phys_screen].systray.window,
|
globalconf.screens.tab[p->sw.ctx.phys_screen].systray.window,
|
||||||
_NET_SYSTEM_TRAY_ORIENTATION, CARDINAL, 32, 1, &orient);
|
_NET_SYSTEM_TRAY_ORIENTATION, CARDINAL, 32, 1, &orient);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ typedef struct
|
||||||
} textbox_data_t;
|
} textbox_data_t;
|
||||||
|
|
||||||
static area_t
|
static area_t
|
||||||
textbox_geometry(widget_t *widget, int screen, int height, int width)
|
textbox_geometry(widget_t *widget, screen_t *screen, int height, int width)
|
||||||
{
|
{
|
||||||
area_t geometry;
|
area_t geometry;
|
||||||
textbox_data_t *d = widget->data;
|
textbox_data_t *d = widget->data;
|
||||||
|
@ -78,12 +78,10 @@ textbox_geometry(widget_t *widget, int screen, int height, int width)
|
||||||
/** Draw a textbox widget.
|
/** Draw a textbox widget.
|
||||||
* \param widget The widget.
|
* \param widget The widget.
|
||||||
* \param ctx The draw context.
|
* \param ctx The draw context.
|
||||||
* \param screen The screen.
|
|
||||||
* \param p A pointer to the object we're draw onto.
|
* \param p A pointer to the object we're draw onto.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
textbox_draw(widget_t *widget, draw_context_t *ctx, area_t geometry,
|
textbox_draw(widget_t *widget, draw_context_t *ctx, area_t geometry, wibox_t *p)
|
||||||
int screen, wibox_t *p)
|
|
||||||
{
|
{
|
||||||
textbox_data_t *d = widget->data;
|
textbox_data_t *d = widget->data;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue