wibox: add mouse bindings
Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
f8063dea09
commit
59c04ce3dc
28
event.c
28
event.c
|
@ -144,12 +144,38 @@ event_handle_button(void *data, xcb_connection_t *connection, xcb_button_press_e
|
||||||
ev->event_x -= wibox->sw.geometry.x;
|
ev->event_x -= wibox->sw.geometry.x;
|
||||||
ev->event_y -= wibox->sw.geometry.y;
|
ev->event_y -= wibox->sw.geometry.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* check if we match a binding on the wibox */
|
||||||
|
button_array_t *b = &wibox->buttons;
|
||||||
|
|
||||||
|
for(int i = 0; i < b->len; i++)
|
||||||
|
if(ev->detail == b->tab[i]->button
|
||||||
|
&& XUTIL_MASK_CLEAN(ev->state) == b->tab[i]->mod)
|
||||||
|
switch(ev->response_type)
|
||||||
|
{
|
||||||
|
case XCB_BUTTON_PRESS:
|
||||||
|
if(b->tab[i]->press != LUA_REFNIL)
|
||||||
|
{
|
||||||
|
luaA_wibox_userdata_new(globalconf.L, wibox);
|
||||||
|
luaA_dofunction(globalconf.L, b->tab[i]->press, 1, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XCB_BUTTON_RELEASE:
|
||||||
|
if(b->tab[i]->release != LUA_REFNIL)
|
||||||
|
{
|
||||||
|
luaA_wibox_userdata_new(globalconf.L, wibox);
|
||||||
|
luaA_dofunction(globalconf.L, b->tab[i]->release, 1, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* then try to match a widget binding */
|
||||||
if((w = widget_getbycoords(wibox->position, &wibox->widgets,
|
if((w = widget_getbycoords(wibox->position, &wibox->widgets,
|
||||||
wibox->sw.geometry.width,
|
wibox->sw.geometry.width,
|
||||||
wibox->sw.geometry.height,
|
wibox->sw.geometry.height,
|
||||||
&ev->event_x, &ev->event_y)))
|
&ev->event_x, &ev->event_y)))
|
||||||
{
|
{
|
||||||
button_array_t *b = &w->buttons;
|
b = &w->buttons;
|
||||||
|
|
||||||
for(int i = 0; i < b->len; i++)
|
for(int i = 0; i < b->len; i++)
|
||||||
if(ev->detail == b->tab[i]->button
|
if(ev->detail == b->tab[i]->button
|
||||||
|
|
|
@ -99,6 +99,8 @@ typedef struct
|
||||||
bool need_update;
|
bool need_update;
|
||||||
/** Cursor */
|
/** Cursor */
|
||||||
char *cursor;
|
char *cursor;
|
||||||
|
/** Button bindings */
|
||||||
|
button_array_t buttons;
|
||||||
} wibox_t;
|
} wibox_t;
|
||||||
ARRAY_TYPE(wibox_t *, wibox)
|
ARRAY_TYPE(wibox_t *, wibox)
|
||||||
|
|
||||||
|
|
24
wibox.c
24
wibox.c
|
@ -455,6 +455,7 @@ void
|
||||||
wibox_delete(wibox_t **wibox)
|
wibox_delete(wibox_t **wibox)
|
||||||
{
|
{
|
||||||
simplewindow_wipe(&(*wibox)->sw);
|
simplewindow_wipe(&(*wibox)->sw);
|
||||||
|
button_array_wipe(&(*wibox)->buttons);
|
||||||
luaL_unref(globalconf.L, LUA_REGISTRYINDEX, (*wibox)->widgets_table);
|
luaL_unref(globalconf.L, LUA_REGISTRYINDEX, (*wibox)->widgets_table);
|
||||||
widget_node_array_wipe(&(*wibox)->widgets);
|
widget_node_array_wipe(&(*wibox)->widgets);
|
||||||
p_delete(wibox);
|
p_delete(wibox);
|
||||||
|
@ -1053,6 +1054,28 @@ luaA_wibox_newindex(lua_State *L)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get or set mouse buttons bindings to a wibox.
|
||||||
|
* \param L The Lua VM state.
|
||||||
|
* \luastack
|
||||||
|
* \lvalue A wibox.
|
||||||
|
* \lparam An array of mouse button bindings objects, or nothing.
|
||||||
|
* \return The array of mouse button bindings objects of this wibox.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
luaA_wibox_buttons(lua_State *L)
|
||||||
|
{
|
||||||
|
wibox_t **wibox = luaA_checkudata(L, 1, "wibox");
|
||||||
|
button_array_t *buttons = &(*wibox)->buttons;
|
||||||
|
|
||||||
|
if(lua_gettop(L) == 2)
|
||||||
|
{
|
||||||
|
luaA_button_array_set(L, 2, buttons);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return luaA_button_array_get(L, buttons);
|
||||||
|
}
|
||||||
|
|
||||||
const struct luaL_reg awesome_wibox_methods[] =
|
const struct luaL_reg awesome_wibox_methods[] =
|
||||||
{
|
{
|
||||||
{ "__call", luaA_wibox_new },
|
{ "__call", luaA_wibox_new },
|
||||||
|
@ -1060,6 +1083,7 @@ const struct luaL_reg awesome_wibox_methods[] =
|
||||||
};
|
};
|
||||||
const struct luaL_reg awesome_wibox_meta[] =
|
const struct luaL_reg awesome_wibox_meta[] =
|
||||||
{
|
{
|
||||||
|
{ "buttons", luaA_wibox_buttons },
|
||||||
{ "geometry", luaA_wibox_geometry },
|
{ "geometry", luaA_wibox_geometry },
|
||||||
{ "__index", luaA_wibox_index },
|
{ "__index", luaA_wibox_index },
|
||||||
{ "__newindex", luaA_wibox_newindex },
|
{ "__newindex", luaA_wibox_newindex },
|
||||||
|
|
Loading…
Reference in New Issue