/** Mouse library. * \param L The Lua VM state. * \return The number of elements pushed on stack. * \luastack * \lfield coords Mouse coordinates. * \lfield screen Mouse screen number. */ static int luaA_mouse_index(lua_State *L) { const char *attr = luaL_checkstring(L, 2); int16_t mouse_x, mouse_y; screen_t *screen; /* attr is not "screen"?! */ if (A_STRNEQ(attr, "screen")) return luaA_default_index(L); if (!mouse_query_pointer_root(&mouse_x, &mouse_y, NULL, NULL)) { /* Nothing ever handles mouse.screen being nil. Lying is better than * having lots of lua errors in this case. */ if (globalconf.focus.client) lua_pushnumber(L, screen_get_index(globalconf.focus.client->screen)); else lua_pushnumber(L, 1); return 1; } screen = screen_getbycoord(mouse_x, mouse_y); lua_pushnumber(L, screen_get_index(screen)); return 1; }
/** Newindex for mouse. * \param L The Lua VM state. * \return The number of elements pushed on stack. */ static int luaA_mouse_newindex(lua_State *L) { const char *attr = luaL_checkstring(L, 2); screen_t *screen; if (A_STRNEQ(attr, "screen")) return luaA_default_newindex(L); screen = luaA_checkscreen(L, 3); mouse_warp_pointer(globalconf.screen->root, screen->geometry.x, screen->geometry.y); return 0; }
/** Mouse library. * \param L The Lua VM state. * \return The number of elements pushed on stack. * \luastack * \lfield coords Mouse coordinates. * \lfield screen Mouse screen number. */ static int luaA_mouse_index(lua_State *L) { const char *attr = luaL_checkstring(L, 2); int16_t mouse_x, mouse_y; screen_t *screen; /* attr is not "screen"?! */ if (A_STRNEQ(attr, "screen")) return 0; if (!mouse_query_pointer_root(&mouse_x, &mouse_y, NULL, NULL)) return 0; screen = screen_getbycoord(mouse_x, mouse_y); lua_pushnumber(L, screen_array_indexof(&globalconf.screens, screen) + 1); return 1; }
/** Newindex for mouse. * \param L The Lua VM state. * \return The number of elements pushed on stack. */ static int luaA_mouse_newindex(lua_State *L) { const char *attr = luaL_checkstring(L, 2); int x, y = 0; int screen; if (A_STRNEQ(attr, "screen")) return 0; screen = luaL_checknumber(L, 3) - 1; luaA_checkscreen(screen); x = globalconf.screens.tab[screen].geometry.x; y = globalconf.screens.tab[screen].geometry.y; mouse_warp_pointer(globalconf.screen->root, x, y); return 0; }