Leave titlebars early
When a client is unmanaged, we know emit mouse::leave on its titlebar before the client object is invalidated, so that Lua can still work with it. Before, this event was emitted only when we got a LeaveNotify from the X11 server. Fixes: #620 Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
parent
720cd879f3
commit
430f4fab15
2
event.c
2
event.c
|
@ -426,7 +426,7 @@ event_handle_destroynotify(xcb_destroy_notify_event_t *ev)
|
|||
|
||||
/** Record that the given drawable contains the pointer.
|
||||
*/
|
||||
static void
|
||||
void
|
||||
event_drawable_under_mouse(lua_State *L, int ud)
|
||||
{
|
||||
void *d;
|
||||
|
|
3
event.h
3
event.h
|
@ -48,7 +48,8 @@ awesome_refresh(void)
|
|||
return xcb_flush(globalconf.connection);
|
||||
}
|
||||
|
||||
void event_handle(xcb_generic_event_t *event);
|
||||
void event_handle(xcb_generic_event_t *);
|
||||
void event_drawable_under_mouse(lua_State *, int);
|
||||
|
||||
#endif
|
||||
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80
|
||||
|
|
|
@ -1335,6 +1335,13 @@ client_unmanage(client_t *c, bool window_valid)
|
|||
if (c->titlebar[bar].drawable == NULL)
|
||||
continue;
|
||||
|
||||
if (globalconf.drawable_under_mouse == c->titlebar[bar].drawable) {
|
||||
/* Leave drawable before we invalidate the client */
|
||||
lua_pushnil(L);
|
||||
event_drawable_under_mouse(L, -1);
|
||||
lua_pop(L, 1);
|
||||
}
|
||||
|
||||
/* Forget about the drawable */
|
||||
luaA_object_push(L, c);
|
||||
luaA_object_unref_item(L, -1, c->titlebar[bar].drawable);
|
||||
|
|
Loading…
Reference in New Issue