Move window_setfocus and _hasproto to client_*
The only real change in here is the first hunk to client.c which needs to inline client_setfocus(). Nothing else in here should be a 'real' change. Signed-off-by: Uli Schlachter <psychon@znc.in> Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
f1b3583064
commit
28b80648a8
51
client.c
51
client.c
|
@ -191,12 +191,55 @@ 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;
|
||||||
/* 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);
|
* This kind of inlines client_setfocus(), but a root window will never have
|
||||||
|
* the WM_TAKE_FOCUS protocol.
|
||||||
|
*/
|
||||||
|
xcb_set_input_focus(globalconf.connection, XCB_INPUT_FOCUS_PARENT,
|
||||||
|
root_win, XCB_CURRENT_TIME);
|
||||||
|
|
||||||
client_unfocus_update(c);
|
client_unfocus_update(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Check if client supports protocol a protocole in WM_PROTOCOL.
|
||||||
|
* \param c The client.
|
||||||
|
* \return True if client has the atom in protocol, false otherwise.
|
||||||
|
*/
|
||||||
|
bool
|
||||||
|
client_hasproto(client_t *c, xcb_atom_t atom)
|
||||||
|
{
|
||||||
|
uint32_t i;
|
||||||
|
xcb_get_wm_protocols_reply_t protocols;
|
||||||
|
bool ret = false;
|
||||||
|
|
||||||
|
if(xcb_get_wm_protocols_reply(globalconf.connection,
|
||||||
|
xcb_get_wm_protocols_unchecked(globalconf.connection,
|
||||||
|
c->win, WM_PROTOCOLS),
|
||||||
|
&protocols, NULL))
|
||||||
|
{
|
||||||
|
for(i = 0; !ret && i < protocols.atoms_len; i++)
|
||||||
|
if(protocols.atoms[i] == atom)
|
||||||
|
ret = true;
|
||||||
|
xcb_get_wm_protocols_reply_wipe(&protocols);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Sets focus on window - using xcb_set_input_focus or WM_TAKE_FOCUS
|
||||||
|
* \param c Client that should get focus
|
||||||
|
* \param set_input_focus Should we call xcb_set_input_focus
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
client_setfocus(client_t *c, bool set_input_focus)
|
||||||
|
{
|
||||||
|
bool takefocus = client_hasproto(c, WM_TAKE_FOCUS);
|
||||||
|
if(set_input_focus)
|
||||||
|
xcb_set_input_focus(globalconf.connection, XCB_INPUT_FOCUS_PARENT,
|
||||||
|
c->win, XCB_CURRENT_TIME);
|
||||||
|
if(takefocus)
|
||||||
|
window_takefocus(c->win);
|
||||||
|
}
|
||||||
|
|
||||||
/** Ban client and move it out of the viewport.
|
/** Ban client and move it out of the viewport.
|
||||||
* \param c The client.
|
* \param c The client.
|
||||||
*/
|
*/
|
||||||
|
@ -281,7 +324,7 @@ client_focus(client_t *c)
|
||||||
if (!c->nofocus)
|
if (!c->nofocus)
|
||||||
client_focus_update(c);
|
client_focus_update(c);
|
||||||
|
|
||||||
window_setfocus(c->win, !c->nofocus);
|
client_setfocus(c, !c->nofocus);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Stack a window below.
|
/** Stack a window below.
|
||||||
|
@ -1050,7 +1093,7 @@ client_unmanage(client_t *c)
|
||||||
void
|
void
|
||||||
client_kill(client_t *c)
|
client_kill(client_t *c)
|
||||||
{
|
{
|
||||||
if(window_hasproto(c->win, WM_DELETE_WINDOW))
|
if(client_hasproto(c, WM_DELETE_WINDOW))
|
||||||
{
|
{
|
||||||
xcb_client_message_event_t ev;
|
xcb_client_message_event_t ev;
|
||||||
|
|
||||||
|
|
2
client.h
2
client.h
|
@ -188,6 +188,8 @@ void client_focus_update(client_t *);
|
||||||
void client_unfocus(client_t *);
|
void client_unfocus(client_t *);
|
||||||
void client_unfocus_update(client_t *);
|
void client_unfocus_update(client_t *);
|
||||||
void client_stack_refresh(void);
|
void client_stack_refresh(void);
|
||||||
|
bool client_hasproto(client_t *, xcb_atom_t);
|
||||||
|
void client_setfocus(client_t *, bool);
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
client_stack(void)
|
client_stack(void)
|
||||||
|
|
39
window.c
39
window.c
|
@ -162,30 +162,6 @@ window_opacity_set(xcb_window_t win, double opacity)
|
||||||
xcb_delete_property(globalconf.connection, win, _NET_WM_WINDOW_OPACITY);
|
xcb_delete_property(globalconf.connection, win, _NET_WM_WINDOW_OPACITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Check if client supports protocol a protocole in WM_PROTOCOL.
|
|
||||||
* \param win The window.
|
|
||||||
* \return True if client has the atom in protocol, false otherwise.
|
|
||||||
*/
|
|
||||||
bool
|
|
||||||
window_hasproto(xcb_window_t win, xcb_atom_t atom)
|
|
||||||
{
|
|
||||||
uint32_t i;
|
|
||||||
xcb_get_wm_protocols_reply_t protocols;
|
|
||||||
bool ret = false;
|
|
||||||
|
|
||||||
if(xcb_get_wm_protocols_reply(globalconf.connection,
|
|
||||||
xcb_get_wm_protocols_unchecked(globalconf.connection,
|
|
||||||
win, WM_PROTOCOLS),
|
|
||||||
&protocols, NULL))
|
|
||||||
{
|
|
||||||
for(i = 0; !ret && i < protocols.atoms_len; i++)
|
|
||||||
if(protocols.atoms[i] == atom)
|
|
||||||
ret = true;
|
|
||||||
xcb_get_wm_protocols_reply_wipe(&protocols);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Send WM_TAKE_FOCUS client message to window
|
/** Send WM_TAKE_FOCUS client message to window
|
||||||
* \param win destination window
|
* \param win destination window
|
||||||
*/
|
*/
|
||||||
|
@ -208,19 +184,4 @@ window_takefocus(xcb_window_t win)
|
||||||
XCB_EVENT_MASK_NO_EVENT, (char *) &ev);
|
XCB_EVENT_MASK_NO_EVENT, (char *) &ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Sets focus on window - using xcb_set_input_focus or WM_TAKE_FOCUS
|
|
||||||
* \param w Window that should get focus
|
|
||||||
* \param set_input_focus Should we call xcb_set_input_focus
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
window_setfocus(xcb_window_t w, bool set_input_focus)
|
|
||||||
{
|
|
||||||
bool takefocus = window_hasproto(w, WM_TAKE_FOCUS);
|
|
||||||
if(set_input_focus)
|
|
||||||
xcb_set_input_focus(globalconf.connection, XCB_INPUT_FOCUS_PARENT,
|
|
||||||
w, XCB_CURRENT_TIME);
|
|
||||||
if(takefocus)
|
|
||||||
window_takefocus(w);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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
window.h
2
window.h
|
@ -34,8 +34,6 @@ double window_opacity_get_from_reply(xcb_get_property_reply_t *);
|
||||||
void window_opacity_set(xcb_window_t, double);
|
void window_opacity_set(xcb_window_t, double);
|
||||||
void window_grabbuttons(xcb_window_t, xcb_window_t, button_array_t *);
|
void window_grabbuttons(xcb_window_t, xcb_window_t, button_array_t *);
|
||||||
void window_takefocus(xcb_window_t);
|
void window_takefocus(xcb_window_t);
|
||||||
bool window_hasproto(xcb_window_t, xcb_atom_t);
|
|
||||||
void window_setfocus(xcb_window_t, 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
|
||||||
|
|
Loading…
Reference in New Issue