systray: Only register/unregister when needed

Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
Uli Schlachter 2014-08-20 11:47:47 +02:00
parent df3e89ad5c
commit 0face4fea7
2 changed files with 13 additions and 3 deletions

View File

@ -121,6 +121,8 @@ typedef struct
xcb_window_t window; xcb_window_t window;
/** Atom for _NET_SYSTEM_TRAY_%d */ /** Atom for _NET_SYSTEM_TRAY_%d */
xcb_atom_t atom; xcb_atom_t atom;
/** Do we own the systray selection? */
bool registered;
/** Systray window parent */ /** Systray window parent */
drawin_t *parent; drawin_t *parent;
} systray; } systray;

View File

@ -74,6 +74,11 @@ systray_register(void)
xcb_client_message_event_t ev; xcb_client_message_event_t ev;
xcb_screen_t *xscreen = globalconf.screen; xcb_screen_t *xscreen = globalconf.screen;
if(globalconf.systray.registered)
return;
globalconf.systray.registered = true;
/* Fill event */ /* Fill event */
p_clear(&ev, 1); p_clear(&ev, 1);
ev.response_type = XCB_CLIENT_MESSAGE; ev.response_type = XCB_CLIENT_MESSAGE;
@ -98,6 +103,11 @@ systray_register(void)
void void
systray_cleanup(void) systray_cleanup(void)
{ {
if(!globalconf.systray.registered)
return;
globalconf.systray.registered = false;
xcb_set_selection_owner(globalconf.connection, xcb_set_selection_owner(globalconf.connection,
XCB_NONE, XCB_NONE,
globalconf.systray.atom, globalconf.systray.atom,
@ -297,8 +307,6 @@ systray_update(int base_size, bool horizontal, bool reverse, int spacing)
int int
luaA_systray(lua_State *L) luaA_systray(lua_State *L)
{ {
if(globalconf.systray.parent == NULL)
systray_register(); systray_register();
if(lua_gettop(L) != 0) if(lua_gettop(L) != 0)