ewmh: add support for _NET_WORKAREA
Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
63ab310585
commit
9490c0c3fd
42
ewmh.c
42
ewmh.c
|
@ -35,13 +35,14 @@
|
||||||
extern awesome_t globalconf;
|
extern awesome_t globalconf;
|
||||||
|
|
||||||
static xcb_atom_t net_supported;
|
static xcb_atom_t net_supported;
|
||||||
static xcb_atom_t net_supporting_wm_check;
|
|
||||||
static xcb_atom_t net_client_list;
|
static xcb_atom_t net_client_list;
|
||||||
static xcb_atom_t net_client_list_stacking;
|
static xcb_atom_t net_client_list_stacking;
|
||||||
static xcb_atom_t net_number_of_desktops;
|
static xcb_atom_t net_number_of_desktops;
|
||||||
static xcb_atom_t net_current_desktop;
|
static xcb_atom_t net_current_desktop;
|
||||||
static xcb_atom_t net_desktop_names;
|
static xcb_atom_t net_desktop_names;
|
||||||
static xcb_atom_t net_active_window;
|
static xcb_atom_t net_active_window;
|
||||||
|
static xcb_atom_t net_workarea;
|
||||||
|
static xcb_atom_t net_supporting_wm_check;
|
||||||
static xcb_atom_t net_close_window;
|
static xcb_atom_t net_close_window;
|
||||||
static xcb_atom_t net_wm_name;
|
static xcb_atom_t net_wm_name;
|
||||||
static xcb_atom_t net_wm_icon_name;
|
static xcb_atom_t net_wm_icon_name;
|
||||||
|
@ -71,13 +72,14 @@ typedef struct
|
||||||
static AtomItem AtomNames[] =
|
static AtomItem AtomNames[] =
|
||||||
{
|
{
|
||||||
{ "_NET_SUPPORTED", &net_supported },
|
{ "_NET_SUPPORTED", &net_supported },
|
||||||
{ "_NET_SUPPORTING_WM_CHECK", &net_supporting_wm_check },
|
|
||||||
{ "_NET_CLIENT_LIST", &net_client_list },
|
{ "_NET_CLIENT_LIST", &net_client_list },
|
||||||
{ "_NET_CLIENT_LIST_STACKING", &net_client_list_stacking },
|
{ "_NET_CLIENT_LIST_STACKING", &net_client_list_stacking },
|
||||||
{ "_NET_NUMBER_OF_DESKTOPS", &net_number_of_desktops },
|
{ "_NET_NUMBER_OF_DESKTOPS", &net_number_of_desktops },
|
||||||
{ "_NET_CURRENT_DESKTOP", &net_current_desktop },
|
{ "_NET_CURRENT_DESKTOP", &net_current_desktop },
|
||||||
{ "_NET_DESKTOP_NAMES", &net_desktop_names },
|
{ "_NET_DESKTOP_NAMES", &net_desktop_names },
|
||||||
{ "_NET_ACTIVE_WINDOW", &net_active_window },
|
{ "_NET_ACTIVE_WINDOW", &net_active_window },
|
||||||
|
{ "_NET_WORKAREA", &net_workarea },
|
||||||
|
{ "_NET_SUPPORTING_WM_CHECK", &net_supporting_wm_check },
|
||||||
|
|
||||||
{ "_NET_CLOSE_WINDOW", &net_close_window },
|
{ "_NET_CLOSE_WINDOW", &net_close_window },
|
||||||
|
|
||||||
|
@ -151,6 +153,7 @@ ewmh_set_supported_hints(int phys_screen)
|
||||||
atom[i++] = net_current_desktop;
|
atom[i++] = net_current_desktop;
|
||||||
atom[i++] = net_desktop_names;
|
atom[i++] = net_desktop_names;
|
||||||
atom[i++] = net_active_window;
|
atom[i++] = net_active_window;
|
||||||
|
atom[i++] = net_workarea;
|
||||||
|
|
||||||
atom[i++] = net_close_window;
|
atom[i++] = net_close_window;
|
||||||
|
|
||||||
|
@ -182,11 +185,11 @@ ewmh_set_supported_hints(int phys_screen)
|
||||||
|
|
||||||
xcb_change_property(globalconf.connection, XCB_PROP_MODE_REPLACE,
|
xcb_change_property(globalconf.connection, XCB_PROP_MODE_REPLACE,
|
||||||
xscreen->root, net_supporting_wm_check, WINDOW, 32,
|
xscreen->root, net_supporting_wm_check, WINDOW, 32,
|
||||||
1, (void *) &father);
|
1, &father);
|
||||||
|
|
||||||
xcb_change_property(globalconf.connection, XCB_PROP_MODE_REPLACE,
|
xcb_change_property(globalconf.connection, XCB_PROP_MODE_REPLACE,
|
||||||
father, net_supporting_wm_check, WINDOW, 32,
|
father, net_supporting_wm_check, WINDOW, 32,
|
||||||
1, (void *) &father);
|
1, &father);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -290,6 +293,37 @@ ewmh_update_net_desktop_names(int phys_screen)
|
||||||
net_desktop_names, utf8_string, 8, len, buf);
|
net_desktop_names, utf8_string, 8, len, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Update the work area space for each physical screen and each desktop.
|
||||||
|
* \param phys_screen The physical screen id.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
ewmh_update_workarea(int phys_screen)
|
||||||
|
{
|
||||||
|
uint32_t *area;
|
||||||
|
tag_t *tag;
|
||||||
|
int count = 0;
|
||||||
|
area_t geom = screen_area_get(phys_screen,
|
||||||
|
globalconf.screens[phys_screen].statusbar,
|
||||||
|
&globalconf.screens[phys_screen].padding);
|
||||||
|
|
||||||
|
for(tag = globalconf.screens[phys_screen].tags; tag; tag = tag->next)
|
||||||
|
count++;
|
||||||
|
|
||||||
|
area = p_new(uint32_t, count * 4);
|
||||||
|
for(tag = globalconf.screens[phys_screen].tags, count = 0; tag; tag = tag->next, count++)
|
||||||
|
{
|
||||||
|
area[4 * count + 0] = geom.x;
|
||||||
|
area[4 * count + 1] = geom.y;
|
||||||
|
area[4 * count + 2] = geom.width;
|
||||||
|
area[4 * count + 3] = geom.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
xcb_change_property(globalconf.connection, XCB_PROP_MODE_REPLACE,
|
||||||
|
xutil_screen_get(globalconf.connection, phys_screen)->root,
|
||||||
|
net_workarea, CARDINAL, 32, count, area);
|
||||||
|
p_delete(&area);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ewmh_update_net_active_window(int phys_screen)
|
ewmh_update_net_active_window(int phys_screen)
|
||||||
{
|
{
|
||||||
|
|
1
ewmh.h
1
ewmh.h
|
@ -41,6 +41,7 @@ void ewmh_update_net_active_window(int);
|
||||||
int ewmh_process_client_message(xcb_client_message_event_t *);
|
int ewmh_process_client_message(xcb_client_message_event_t *);
|
||||||
void ewmh_update_net_client_list_stacking(int);
|
void ewmh_update_net_client_list_stacking(int);
|
||||||
void ewmh_check_client_hints(client_t *);
|
void ewmh_check_client_hints(client_t *);
|
||||||
|
void ewmh_update_workarea(int);
|
||||||
NetWMIcon * ewmh_get_window_icon(xcb_window_t);
|
NetWMIcon * ewmh_get_window_icon(xcb_window_t);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
6
lua.c
6
lua.c
|
@ -33,8 +33,8 @@
|
||||||
#include <xcb/xcb.h>
|
#include <xcb/xcb.h>
|
||||||
#include <xcb/xcb_aux.h>
|
#include <xcb/xcb_aux.h>
|
||||||
|
|
||||||
|
#include "ewmh.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "common/socket.h"
|
|
||||||
#include "structs.h"
|
#include "structs.h"
|
||||||
#include "lua.h"
|
#include "lua.h"
|
||||||
#include "tag.h"
|
#include "tag.h"
|
||||||
|
@ -42,7 +42,9 @@
|
||||||
#include "window.h"
|
#include "window.h"
|
||||||
#include "statusbar.h"
|
#include "statusbar.h"
|
||||||
#include "titlebar.h"
|
#include "titlebar.h"
|
||||||
|
#include "screen.h"
|
||||||
#include "layouts/tile.h"
|
#include "layouts/tile.h"
|
||||||
|
#include "common/socket.h"
|
||||||
|
|
||||||
extern awesome_t globalconf;
|
extern awesome_t globalconf;
|
||||||
|
|
||||||
|
@ -165,6 +167,8 @@ luaA_padding_set(lua_State *L)
|
||||||
globalconf.screens[screen].padding.bottom = luaA_getopt_number(L, 2, "bottom", 0);
|
globalconf.screens[screen].padding.bottom = luaA_getopt_number(L, 2, "bottom", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ewmh_update_workarea(screen_virttophys(screen));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "tag.h"
|
#include "tag.h"
|
||||||
#include "widget.h"
|
#include "widget.h"
|
||||||
#include "window.h"
|
#include "window.h"
|
||||||
|
#include "ewmh.h"
|
||||||
|
|
||||||
extern awesome_t globalconf;
|
extern awesome_t globalconf;
|
||||||
|
|
||||||
|
@ -293,6 +294,8 @@ luaA_statusbar_position_set(lua_State *L)
|
||||||
statusbar_position_update(s, s->position);
|
statusbar_position_update(s, s->position);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ewmh_update_workarea((*sb)->phys_screen);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -433,6 +436,8 @@ luaA_statusbar_add(lua_State *L)
|
||||||
for(s = globalconf.screens[screen].statusbar; s; s = s->next)
|
for(s = globalconf.screens[screen].statusbar; s; s = s->next)
|
||||||
statusbar_position_update(s, s->position);
|
statusbar_position_update(s, s->position);
|
||||||
|
|
||||||
|
ewmh_update_workarea((*sb)->phys_screen);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
1
tag.c
1
tag.c
|
@ -95,6 +95,7 @@ tag_append_to_screen(tag_t *tag, int screen)
|
||||||
tag_ref(&tag);
|
tag_ref(&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);
|
||||||
widget_invalidate_cache(screen, WIDGET_CACHE_TAGS);
|
widget_invalidate_cache(screen, WIDGET_CACHE_TAGS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue