event: handle background changes
Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
946b38147e
commit
ede5a54355
|
@ -484,7 +484,8 @@ main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY
|
XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY
|
||||||
| XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_LEAVE_WINDOW
|
| XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_LEAVE_WINDOW
|
||||||
| XCB_EVENT_MASK_STRUCTURE_NOTIFY,
|
| XCB_EVENT_MASK_STRUCTURE_NOTIFY
|
||||||
|
| XCB_EVENT_MASK_PROPERTY_CHANGE,
|
||||||
globalconf.cursor[CurNormal]
|
globalconf.cursor[CurNormal]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -427,4 +427,21 @@ xutil_cursor_new(xcb_connection_t *conn, unsigned int cursor_font)
|
||||||
return cursor;
|
return cursor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Convert a root window a physical screen ID.
|
||||||
|
* \param connection The connection to the X server.
|
||||||
|
* \param root Root window.
|
||||||
|
* \return A physical screen number.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xutil_root2screen(xcb_connection_t *connection, xcb_window_t root)
|
||||||
|
{
|
||||||
|
xcb_screen_iterator_t iter;
|
||||||
|
int phys_screen = 0;
|
||||||
|
|
||||||
|
for(iter = xcb_setup_roots_iterator(xcb_get_setup(connection));
|
||||||
|
iter.rem && iter.data->root != root; xcb_screen_next(&iter), ++phys_screen);
|
||||||
|
|
||||||
|
return phys_screen;
|
||||||
|
}
|
||||||
|
|
||||||
// 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
|
||||||
|
|
|
@ -143,5 +143,7 @@ xutil_screen_get(xcb_connection_t *c, int screen)
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int xutil_root2screen(xcb_connection_t *, xcb_window_t);
|
||||||
|
|
||||||
#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
|
||||||
|
|
4
event.c
4
event.c
|
@ -511,7 +511,6 @@ event_handle_maprequest(void *data __attribute__ ((unused)),
|
||||||
xcb_query_pointer_reply_t *qp_r = NULL;
|
xcb_query_pointer_reply_t *qp_r = NULL;
|
||||||
xcb_get_geometry_cookie_t geom_c;
|
xcb_get_geometry_cookie_t geom_c;
|
||||||
xcb_get_geometry_reply_t *geom_r;
|
xcb_get_geometry_reply_t *geom_r;
|
||||||
xcb_screen_iterator_t iter;
|
|
||||||
|
|
||||||
wa_c = xcb_get_window_attributes_unchecked(connection, ev->window);
|
wa_c = xcb_get_window_attributes_unchecked(connection, ev->window);
|
||||||
|
|
||||||
|
@ -554,8 +553,7 @@ event_handle_maprequest(void *data __attribute__ ((unused)),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for(iter = xcb_setup_roots_iterator(xcb_get_setup(connection)), phys_screen = 0;
|
phys_screen = xutil_root2screen(connection, geom_r->root);
|
||||||
iter.rem && iter.data->root != geom_r->root; xcb_screen_next(&iter), ++phys_screen);
|
|
||||||
|
|
||||||
if(globalconf.xinerama_is_active
|
if(globalconf.xinerama_is_active
|
||||||
&& (qp_r = xcb_query_pointer_reply(connection, qp_c, NULL)))
|
&& (qp_r = xcb_query_pointer_reply(connection, qp_c, NULL)))
|
||||||
|
|
30
property.c
30
property.c
|
@ -321,6 +321,32 @@ property_handle_xembed_info(void *data __attribute__ ((unused)),
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
property_handle_xrootpmap_id(void *data __attribute__ ((unused)),
|
||||||
|
xcb_connection_t *connection,
|
||||||
|
uint8_t state,
|
||||||
|
xcb_window_t window,
|
||||||
|
xcb_atom_t name,
|
||||||
|
xcb_get_property_reply_t *reply)
|
||||||
|
{
|
||||||
|
if(globalconf.xinerama_is_active)
|
||||||
|
for(int screen = 0; screen < globalconf.nscreen; screen++)
|
||||||
|
{
|
||||||
|
wibox_array_t *w = &globalconf.screens[screen].wiboxes;
|
||||||
|
for(int i = 0; i < w->len; i++)
|
||||||
|
w->tab[i]->need_update = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int screen = xutil_root2screen(connection, window);
|
||||||
|
wibox_array_t *w = &globalconf.screens[screen].wiboxes;
|
||||||
|
for(int i = 0; i < w->len; i++)
|
||||||
|
w->tab[i]->need_update = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void a_xcb_set_property_handlers(void)
|
void a_xcb_set_property_handlers(void)
|
||||||
{
|
{
|
||||||
/* init */
|
/* init */
|
||||||
|
@ -347,6 +373,10 @@ void a_xcb_set_property_handlers(void)
|
||||||
property_handle_net_wm_strut_partial, NULL);
|
property_handle_net_wm_strut_partial, NULL);
|
||||||
xcb_property_set_handler(&globalconf.prophs, _NET_WM_ICON, UINT_MAX,
|
xcb_property_set_handler(&globalconf.prophs, _NET_WM_ICON, UINT_MAX,
|
||||||
property_handle_net_wm_icon, NULL);
|
property_handle_net_wm_icon, NULL);
|
||||||
|
|
||||||
|
/* background change */
|
||||||
|
xcb_property_set_handler(&globalconf.prophs, _XROOTPMAP_ID, 1,
|
||||||
|
property_handle_xrootpmap_id, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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
|
||||||
|
|
Loading…
Reference in New Issue