diff --git a/awesomerc.lua.in b/awesomerc.lua.in index fe91957fd..c7347de79 100644 --- a/awesomerc.lua.in +++ b/awesomerc.lua.in @@ -106,7 +106,7 @@ mytaglist.label = awful.widget.taglist.label.all -- Create a tasklist widget mytasklist = widget({ type = "tasklist", name = "mytasklist" }) -mytasklist:mouse_add(mouse({ }, 1, function (object, c) c:focus_set(); c:raise() end)) +mytasklist:mouse_add(mouse({ }, 1, function (object, c) client.focus = c; c:raise() end)) mytasklist:mouse_add(mouse({ }, 4, function () awful.client.focusbyidx(1) end)) mytasklist:mouse_add(mouse({ }, 5, function () awful.client.focusbyidx(-1) end)) mytasklist.label = awful.widget.tasklist.label.currenttags @@ -187,7 +187,7 @@ for i = 1, keynumber do end):add() keybinding({ modkey, "Shift" }, i, function () - local sel = client.focus_get() + local sel = client.focus if sel then if tags[sel.screen][i] then awful.client.movetotag(tags[sel.screen][i]) @@ -196,7 +196,7 @@ for i = 1, keynumber do end):add() keybinding({ modkey, "Control", "Shift" }, i, function () - local sel = client.focus_get() + local sel = client.focus if sel then if tags[sel.screen][i] then awful.client.toggletag(tags[sel.screen][i]) @@ -217,15 +217,15 @@ keybinding({ modkey, "Shift" }, "q", awesome.quit):add() -- Client manipulation keybinding({ modkey }, "m", awful.client.maximize):add() -keybinding({ modkey, "Shift" }, "c", function () client.focus_get():kill() end):add() -keybinding({ modkey }, "j", function () awful.client.focusbyidx(1); client.focus_get():raise() end):add() -keybinding({ modkey }, "k", function () awful.client.focusbyidx(-1); client.focus_get():raise() end):add() +keybinding({ modkey, "Shift" }, "c", function () client.focus:kill() end):add() +keybinding({ modkey }, "j", function () awful.client.focusbyidx(1); client.focus:raise() end):add() +keybinding({ modkey }, "k", function () awful.client.focusbyidx(-1); client.focus:raise() end):add() keybinding({ modkey, "Shift" }, "j", function () awful.client.swap(1) end):add() keybinding({ modkey, "Shift" }, "k", function () awful.client.swap(-1) end):add() keybinding({ modkey, "Control" }, "j", function () awful.screen.focus(1) end):add() keybinding({ modkey, "Control" }, "k", function () awful.screen.focus(-1) end):add() keybinding({ modkey, "Control" }, "space", awful.client.togglefloating):add() -keybinding({ modkey, "Control" }, "Return", function () client.focus_get():swap(awful.client.master()) end):add() +keybinding({ modkey, "Control" }, "Return", function () client.focus:swap(awful.client.master()) end):add() keybinding({ modkey }, "o", awful.client.movetoscreen):add() keybinding({ modkey }, "Tab", awful.client.focus.history.previous):add() @@ -259,7 +259,7 @@ keybinding({ modkey, "Control" }, "y", function () tabbedview = tabulous.tab_create() tabulous.tab(tabbedview, nextclient) else - tabulous.tab(tabbedview, client.focus_get()) + tabulous.tab(tabbedview, client.focus) end else tabulous.tab(tabbedview, nextclient) @@ -336,7 +336,7 @@ end function hook_mouseover(c) -- Sloppy focus, but disabled for magnifier layout if awful.layout.get(c.screen) ~= "magnifier" then - c:focus_set() + client.focus = c end end @@ -349,14 +349,14 @@ function hook_manage(c) awful.titlebar.add(c, { modkey = modkey }) end -- Add mouse bindings - c:mouse_add(mouse({ }, 1, function (c) c:focus_set(); c:raise() end)) + c:mouse_add(mouse({ }, 1, function (c) client.focus = c; c:raise() end)) c:mouse_add(mouse({ modkey }, 1, function (c) c:mouse_move() end)) c:mouse_add(mouse({ modkey }, 3, function (c) c:mouse_resize() end)) -- New client may not receive focus -- if they're not focusable, so set border anyway. c.border_width = beautiful.border_width c.border_color = beautiful.border_normal - c:focus_set() + client.focus = c -- Check if the application should be floating. local cls = c.class @@ -395,14 +395,14 @@ function hook_arrange(screen) end -- If no window has focus, give focus to the latest in history - if not client.focus_get() then + if not client.focus then local c = awful.client.focus.history.get(screen, 0) - if c then c:focus_set() end + if c then client.focus = c end end -- Uncomment if you want mouse warping --[[ - local sel = client.focus_get() + local sel = client.focus if sel then local c_c = sel.coords local m_c = mouse.coords diff --git a/build-utils/fake-lua-src.lua b/build-utils/fake-lua-src.lua index 4b3f3351f..ea9003814 100755 --- a/build-utils/fake-lua-src.lua +++ b/build-utils/fake-lua-src.lua @@ -79,10 +79,12 @@ for i, line in ipairs(ilines) do if not libname and line:find("^luaA_.*_index") then local fctname, fctdef _, _, fctdef, fctname = line:find("^(luaA_(.+)_index)") - print(function_doc[fctdef]:comment_translate()) - print("-- @class table") - print("-- @name " .. fctname) - print(fctname) + if function_doc[fctdef] and not fctdef:find("_module_") then + print(function_doc[fctdef]:comment_translate()) + print("-- @class table") + print("-- @name " .. fctname) + print(fctname) + end end else if line:find("};") then diff --git a/client.c b/client.c index 351a56ccf..0630ad541 100644 --- a/client.c +++ b/client.c @@ -914,7 +914,7 @@ luaA_client_visible_get(lua_State *L) return 1; } -/** Get the currently focused client. +/** Get the currently focused client (DEPRECATED). * \param L The Lua VM state. * \luastack * \lreturn The currently focused client. @@ -924,6 +924,7 @@ luaA_client_focus_get(lua_State *L) { if(globalconf.screen_focus->client_focus) return luaA_client_userdata_new(L, globalconf.screen_focus->client_focus); + deprecate(); return 0; } @@ -982,7 +983,7 @@ luaA_client_swap(lua_State *L) return 0; } -/** Focus a client. +/** Focus a client (DEPRECATED). * \param L The Lua VM state. * * \luastack @@ -993,6 +994,7 @@ luaA_client_focus_set(lua_State *L) { client_t **c = luaA_checkudata(L, 1, "client"); client_focus(*c); + deprecate(); return 0; } @@ -1208,6 +1210,7 @@ luaA_client_newindex(lua_State *L) * \lfield titlebar The client titlebar. * \lfield urgent The client urgent state. * \lfield tags The clients tags. + * \lfield focus The focused client. */ static int luaA_client_index(lua_State *L) @@ -1334,11 +1337,62 @@ luaA_client_index(lua_State *L) return 1; } +/* Client module. + * \param L The Lua VM state. + * \return The number of pushed elements. + */ +static int +luaA_client_module_index(lua_State *L) +{ + size_t len; + const char *buf = luaL_checklstring(L, 2, &len); + + switch(a_tokenize(buf, len)) + { + case A_TK_FOCUS: + if(globalconf.screen_focus->client_focus) + luaA_client_userdata_new(L, globalconf.screen_focus->client_focus); + else + return 0; + break; + default: + return 0; + } + + return 1; +} + +/* Client module new index. + * \param L The Lua VM state. + * \return The number of pushed elements. + */ +static int +luaA_client_module_newindex(lua_State *L) +{ + size_t len; + const char *buf = luaL_checklstring(L, 2, &len); + client_t **c; + + switch(a_tokenize(buf, len)) + { + case A_TK_FOCUS: + c = luaA_checkudata(L, 3, "client"); + client_focus(*c); + break; + default: + break; + } + + return 0; +} + const struct luaL_reg awesome_client_methods[] = { { "get", luaA_client_get }, { "focus_get", luaA_client_focus_get }, { "visible_get", luaA_client_visible_get }, + { "__index", luaA_client_module_index }, + { "__newindex", luaA_client_module_newindex }, { NULL, NULL } }; const struct luaL_reg awesome_client_meta[] = diff --git a/lib/awful.lua.in b/lib/awful.lua.in index 51e190c59..b0606c620 100644 --- a/lib/awful.lua.in +++ b/lib/awful.lua.in @@ -123,7 +123,7 @@ end --- Focus the previous client in history. function client.focus.history.previous() - local sel = capi.client.focus_get() + local sel = capi.client.focus local s if sel then s = sel.screen @@ -131,7 +131,7 @@ function client.focus.history.previous() s = capi.mouse.screen end local c = client.focus.history.get(s, 1) - if c then c:focus_set() end + if c then capi.client.focus = c end end --- Get a client by its relative index to the focused window. @@ -141,7 +141,7 @@ end -- @return A client, or nil if no client is available. function client.next(i, c) -- Get currently focused client - local sel = c or capi.client.focus_get() + local sel = c or capi.client.focus if sel then -- Get all visible clients local cls = capi.client.visible_get(sel.screen) @@ -206,7 +206,7 @@ end -- @param dir The direction, can be either "up", "down", "left" or "right". -- @param c Optional client. function client.focusbydirection(dir, c) - local sel = c or capi.client.focus_get() + local sel = c or capi.client.focus if sel then local coords = sel.coords local dist, dist_min @@ -231,7 +231,7 @@ function client.focusbydirection(dir, c) -- If we found a client to focus, then do it. if target then - target:focus_set() + capi.client.focus = target end end end @@ -242,7 +242,7 @@ end function client.focusbyidx(i, c) local target = client.next(i, c) if target then - target:focus_set() + capi.client.focus = target end end @@ -250,7 +250,7 @@ end -- @param i The index. -- @param c Optional client, otherwise focused one is used. function client.swap(i, c) - local sel = c or capi.client.focus_get() + local sel = c or capi.client.focus local target = client.next(i, sel) if target then target:swap(sel) @@ -272,7 +272,7 @@ end -- @param h The relative height. -- @param c The optional client, otherwise focused one is used. function client.moveresize(x, y, w, h, c) - local sel = c or capi.client.focus_get() + local sel = c or capi.client.focus local coords = sel.coords coords['x'] = coords['x'] + x coords['y'] = coords['y'] + y @@ -284,7 +284,7 @@ end --- Maximize a client to use the full workarea. -- @param c A client, or the focused one if nil. function client.maximize(c) - local sel = c or capi.client.focus_get() + local sel = c or capi.client.focus if sel then local ws = capi.screen[sel.screen].workarea ws.width = ws.width - 2 * sel.border_width @@ -317,7 +317,7 @@ end --- Give the focus to a screen, and move pointer. -- @param Screen number. function screen.focus(i) - local sel = capi.client.focus_get() + local sel = capi.client.focus local s if sel then s = sel.screen @@ -326,7 +326,7 @@ function screen.focus(i) end s = cycle(capi.screen.count(), s + i) local c = client.focus.history.get(s, 0) - if c then c:focus_set() end + if c then capi.client.focus = c end -- Move the mouse on the screen capi.mouse.coords = capi.screen[s].coords end @@ -508,7 +508,7 @@ end -- @param target The tag to move the client to. -- @para c Optional client to move, otherwise the focused one is used. function client.movetotag(target, c) - local sel = c or capi.client.focus_get(); + local sel = c or capi.client.focus if sel then -- Check that tag and client screen are identical if sel.screen ~= target.screen then return end @@ -521,7 +521,7 @@ end -- @param target The tag to toggle. -- @param c Optional client to toggle, otherwise the focused one is used. function client.toggletag(target, c) - local sel = c or capi.client.focus_get(); + local sel = c or capi.client.focus -- Check that tag and client screen are identical if sel and sel.screen == target.screen then local tags = sel.tags @@ -537,7 +537,7 @@ end --- Toggle the floating status of a client. -- @param c Optional client, the focused on if not set. function client.togglefloating(c) - local sel = c or capi.client.focus_get(); + local sel = c or capi.client.focus if sel then sel.floating = not sel.floating end @@ -547,7 +547,7 @@ end -- @param c The client to move. -- @param s The screen number, default to current + 1. function client.movetoscreen(c, s) - local sel = c or capi.client.focus_get(); + local sel = c or capi.client.focus if sel then local sc = capi.screen.count() if not s then @@ -556,7 +556,7 @@ function client.movetoscreen(c, s) if s > sc then s = 1 elseif s < 1 then s = sc end sel.screen = s capi.mouse.coords = capi.screen[s].coords - sel:focus_set() + capi.client.focus = sel end end @@ -604,7 +604,7 @@ hooks.user.create('unmarked') -- @param c The client to mark, the focused one if not specified. -- @return True if the client has been marked. False if the client was already marked. function client.mark (c) - local cl = c or capi.client.focus_get() + local cl = c or capi.client.focus if cl then for k, v in pairs(awfulmarked) do if cl == v then @@ -624,7 +624,7 @@ end -- @param c The client to unmark, or the focused one if not specified. -- @return True if the client has been unmarked. False if the client was not marked. function client.unmark(c) - local cl = c or capi.client.focus_get() + local cl = c or capi.client.focus for k, v in pairs(awfulmarked) do if cl == v then @@ -640,7 +640,7 @@ end --- Check if a client is marked. -- @param c The client to check, or the focused one otherwise. function client.ismarked(c) - local cl = c or capi.client.focus_get() + local cl = c or capi.client.focus if cl then for k, v in pairs(awfulmarked) do if cl == v then @@ -654,7 +654,7 @@ end --- Toggle a client as marked. -- @param c The client to toggle mark. function client.togglemarked(c) - local cl = c or capi.client.focus_get() + local cl = c or capi.client.focus if not client.mark(c) then client.unmark(c) @@ -1151,7 +1151,7 @@ function widget.taglist.label.all(t, args) local bg_urgent = args.bg_urgent or theme.bg_urgent local text local background = "" - local sel = capi.client.focus_get() + local sel = capi.client.focus local bg_color = nil local fg_color = nil if t.selected then @@ -1237,7 +1237,7 @@ local function widget_tasklist_label_common(c, args) else name = escape(c.name) end - if capi.client.focus_get() == c then + if capi.client.focus == c then text = text .. " "..name.." " elseif c.urgent and bg_urgent and fg_urgent then text = text .. " "..name.." " @@ -1358,7 +1358,7 @@ function titlebar.update(c) if title then title.text = " " .. escape(c.name) end - if capi.client.focus_get() == c then + if capi.client.focus == c then c.titlebar.fg = titlebar.data[c].fg_focus c.titlebar.bg = titlebar.data[c].bg_focus if close then diff --git a/lua.h b/lua.h index ab5ee7ebf..99bc5b00f 100644 --- a/lua.h +++ b/lua.h @@ -39,6 +39,10 @@ typedef enum /** Type for Lua function */ typedef int luaA_ref; +#define deprecate(string, ...) _warn(__LINE__, \ + __FUNCTION__, \ + "This function is deprecated and will be removed.") + #define DO_LUA_NEW(decl, type, prefix, lua_type, type_ref) \ decl int \ luaA_##prefix##_userdata_new(lua_State *L, type *p) \ diff --git a/screen.c b/screen.c index 2844e1138..b7c3cede5 100644 --- a/screen.c +++ b/screen.c @@ -219,8 +219,7 @@ screen_client_moveto(client_t *c, int new_screen, bool doresize) * \param L The Lua VM state. * \return The number of elements pushed on stack. * \luastack - * \lfield coords The screen coordinates. - * \lfield padding The screen padding. + * \lfield number The screen number, to get a screen. */ static int luaA_screen_module_index(lua_State *L)