--
-- ion/share/ioncore_misc.lua
--
--- Copyright (c) Tuomo Valkonen 2004-2006.
+-- Copyright (c) Tuomo Valkonen 2004-2008.
--
--- Ion is free software; you can redistribute it and/or modify it under
--- the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
+-- See the included file LICENSE for details.
--
+local group_tmpl = { type="WGroupWS" }
-local group_tmpl={type="WGroupWS", switchto=true}
+local default_tmpl = { switchto=true }
+
+local empty = { type="WGroupWS", managed={} }
+
+local layouts={
+ empty = empty,
+ default = empty,
+}
+
+--DOC
+-- Define a new workspace layout with name \var{name}, and
+-- attach/creation parameters given in \var{tab}. The layout
+-- "empty" may not be defined.
+function ioncore.deflayout(name, tab)
+ assert(layout ~= "empty")
+
+ if name=="default" and not tab then
+ layouts[name] = empty
+ else
+ layouts[name] = table.join(tab, group_tmpl)
+ end
+end
+
+--DOC
+-- Get named layout (or all of the latter parameter is set,
+-- but this is for internal use only).
+function ioncore.getlayout(name, all)
+ if all then
+ return layouts
+ else
+ return layouts[name]
+ end
+end
+
+ioncore.set{_get_layout=ioncore.getlayout}
--DOC
-- Create new workspace on screen \var{scr}. The table \var{tmpl}
--- may be used to override parts of \code{default_ws_params},
--- and \var{no_default} may be set to \code{true} to complete ignore it.
-function ioncore.create_ws(scr, tmpl, no_default)
- local dflt=(not no_default and ioncore.get().default_ws_params) or {}
- local t=table.join(table.join(tmpl or {}, dflt), group_tmpl)
+-- may be used to override parts of the layout named with \code{layout}.
+-- If no \var{layout} is given, "default" is used.
+function ioncore.create_ws(scr, tmpl, layout)
+ local lo=ioncore.getlayout(layout or "default")
- return scr:attach_new(t)
+ assert(lo, TR("Unknown layout"))
+
+ return scr:attach_new(table.join(tmpl or default_tmpl, lo))
end
end
---[[DOC
--- Run \var{cmd} with the environment variable DISPLAY set to point to the
--- root window of the X screen \var{reg} is on.
-function ioncore.exec_on(reg, cmd)
- return ioncore.do_exec_rw(reg:rootwin_of(), cmd)
+--DOC
+-- Attach tagged regions to \var{reg}. The method of attach
+-- depends on the types of attached regions and whether \var{reg}
+-- implements \code{attach_framed} and \code{attach}. If \var{param}
+-- is not set, the default of \verb!{switchto=true}! is used.
+-- The function returns \code{true} if all tagged regions were
+-- succesfully attached, and \code{false} otherwisse.
+function ioncore.tagged_attach(reg, param)
+ local errors=false
+ if not param then
+ param={switchto=true}
+ end
+ local tagged=function() return ioncore.tagged_first(true) end
+ for r in tagged do
+ local fn=((not obj_is(r, "WWindow") and reg.attach_framed)
+ or reg.attach)
+
+ if not (fn and fn(reg, r, param)) then
+ errors=true
+ end
+ end
+ return not errors
end
---]]
+