diff -Nru notion-3+2014010901/build/lua-detect.mk notion-3+2015061300/build/lua-detect.mk --- notion-3+2014010901/build/lua-detect.mk 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/build/lua-detect.mk 2015-06-13 14:37:26.000000000 +0000 @@ -13,21 +13,22 @@ # * LUA (full path to lua interpreter) # * LUAC (full path to lua compiler) -LUA_VERSION := $(or $(LUA_VERSION), $(shell \ - (pkg-config --exists lua5.2 && echo 5.2) \ - || (pkg-config --exists lua5.1 && echo 5.1) \ - || (pkg-config --exists lua && echo 5.0))) +LUA_VERSIONS_CANDIDATES = $(or $(LUA_VERSION),5.2 5.1 5.0) -ifeq ($(LUA_VERSION),) - $(error Could not find any lua version. (Did you install the -dev package?)) +LUA_PKG := $(firstword $(foreach ver,$(LUA_VERSIONS_CANDIDATES),$(shell \ + ($(PKG_CONFIG) --exists lua-$(ver) && echo lua-$(ver)) \ + || ($(PKG_CONFIG) --exists lua$(ver:5.0=) && echo lua$(ver:5.0=))))) + +ifeq ($(LUA_PKG),) + $(error Could not find $(or $(LUA_VERSION),any) lua version. (Did you install the -dev package?)) endif +LUA_VERSION ?= $(or $(shell $(PKG_CONFIG) --variable=V $(LUA_PKG)),5.0) + # prior to 5.1 the lib didn't include version in name. -ifeq ($(LUA_VERSION),5.0) - LUA_VERSION= -endif +LUA_SUFFIX := $(if $(findstring $(LUA_VERSION),5.0),,$(LUA_VERSION)) -LUA_LIBS := $(or $(shell pkg-config --libs lua$(LUA_VERSION)), $(error "pkg-config couldn't find linker flags for lua$(LUA_VERSION)!")) -LUA_INCLUDES := $(shell pkg-config --cflags lua$(LUA_VERSION)) -LUA := $(or $(shell which lua$(LUA_VERSION)), $(error No lua$(LUA_VERSION) interpreter found!)) -LUAC := $(or $(shell which luac$(LUA_VERSION)), $(error No lua$(LUA_VERSION) compiler found!)) +LUA_LIBS := $(or $(shell $(PKG_CONFIG) --libs $(LUA_PKG)), $(error "pkg-config couldn't find linker flags for lua$(LUA_SUFFIX)!")) +LUA_INCLUDES := $(shell $(PKG_CONFIG) --cflags $(LUA_PKG)) +LUA := $(or $(shell which lua$(LUA_SUFFIX)), $(shell which lua), $(error No lua$(LUA_SUFFIX) interpreter found!)) +LUAC := $(or $(shell which luac$(LUA_SUFFIX)), $(shell which luac), $(error No lua$(LUA_SUFFIX) compiler found!)) diff -Nru notion-3+2014010901/build/mkman.lua notion-3+2015061300/build/mkman.lua --- notion-3+2014010901/build/mkman.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/build/mkman.lua 2015-06-13 14:37:26.000000000 +0000 @@ -70,7 +70,7 @@ local p={} local dummy = function() end - p.META="Mod1+" + p.META="Mod4+" p.ALTMETA="" p.dopath=dummy diff -Nru notion-3+2014010901/build/rules.mk notion-3+2015061300/build/rules.mk --- notion-3+2014010901/build/rules.mk 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/build/rules.mk 2015-06-13 14:37:26.000000000 +0000 @@ -34,10 +34,8 @@ .PHONY: subdirs .PHONY: subdirs-clean .PHONY: subdirs-realclean -.PHONY: subdirs-depend .PHONY: subdirs-install .PHONY: _install -.PHONY: _depend .PHONY: _exports all: subdirs _exports $(TARGETS) @@ -46,8 +44,6 @@ realclean: subdirs-realclean _clean _realclean -depend: subdirs-depend _depend - install: subdirs-install _install @@ -59,15 +55,14 @@ EXPORTS_C = exports.c EXPORTS_H = exports.h -DEPEND_DEPENDS += $(EXPORTS_H) - TO_CLEAN := $(TO_CLEAN) $(EXPORTS_C) $(EXPORTS_H) _exports: $(EXPORTS_C) -$(EXPORTS_H): $(EXPORTS_C) - -$(EXPORTS_C): $(SOURCES) $(MKEXPORTS_EXTRA_DEPS) +# this funny syntax (more than one pattern-based target) is meant to tell Make +# that this rule makes BOTH of these targets. Look at the last paragraph of +# http://www.gnu.org/software/make/manual/html_node/Pattern-Intro.html +%xports.c %xports.h: $(SOURCES) $(MKEXPORTS_EXTRA_DEPS) $(MKEXPORTS) -module $(MAKE_EXPORTS) -o $(EXPORTS_C) -h $(EXPORTS_H) \ $(SOURCES) $(MKEXPORTS_EXTRAS) @@ -105,7 +100,6 @@ ifdef MODULE_PATH ifeq ($(PRELOAD_MODULES),1) EXT_OBJS += $(foreach mod, $(MODULE_LIST), $(MODULE_PATH)/$(mod)/$(mod).a) -DEPEND_DEPENDS += preload.c SOURCES += preload.c TO_CLEAN += preload.c else # !PRELOAD_MODULES @@ -136,16 +130,17 @@ endif # EXECUTABLE + +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + ifdef MODULE ifneq ($(PRELOAD_MODULES),1) -CC_PICFLAGS=-fPIC -DPIC +CFLAGS += -fPIC -DPIC LD_SHAREDFLAGS=-shared -%.o: %.c $(EXPORTS_H) - $(CC) $(CC_PICFLAGS) $(CFLAGS) -c $< -o $@ - # notion might not link to Xext, so modules will have to link to it themselves # if they need it: LIBS += $(X11_LIBS) @@ -163,9 +158,6 @@ PICOPT=-fPIC -DPIC LINKOPT=-shared -%.o: %.c $(EXPORTS_H) - $(CC) $(CFLAGS) -c $< -o $@ - $(MODULE).a: $(OBJS) $(EXT_OBJS) $(AR) $(ARFLAGS) $@ $+ $(RANLIB) $@ @@ -188,13 +180,6 @@ endif #MODULE_STUB -else # !MODULE - - -%.o: %.c $(EXPORTS_H) - $(CC) $(CFLAGS) -c $< -o $@ - - endif# !MODULE @@ -202,7 +187,7 @@ ###################################### _clean: - $(RM) -f $(TO_CLEAN) core $(DEPEND_FILE) $(OBJS) + $(RM) -f $(TO_CLEAN) core *.d $(OBJS) _realclean: $(RM) -f $(TO_REALCLEAN) $(TARGETS) @@ -228,16 +213,8 @@ # Dependencies ###################################### -ifdef SOURCES - -_depend: $(DEPEND_DEPENDS) - $(MAKE_DEPEND) - -ifeq ($(DEPEND_FILE),$(wildcard $(DEPEND_FILE))) -include $(DEPEND_FILE) -endif - -endif +CFLAGS += -MMD +-include *.d # Subdirectories ###################################### @@ -247,9 +224,6 @@ subdirs: set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i; done -subdirs-depend: - set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i depend; done - subdirs-clean: set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i clean; done diff -Nru notion-3+2014010901/ChangeLog notion-3+2015061300/ChangeLog --- notion-3+2014010901/ChangeLog 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ChangeLog 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -(The ChangeLog will be generated by release scripts from svn logs) diff -Nru notion-3+2014010901/CHANGELOG notion-3+2015061300/CHANGELOG --- notion-3+2014010901/CHANGELOG 1970-01-01 00:00:00.000000000 +0000 +++ notion-3+2015061300/CHANGELOG 2015-06-13 14:37:26.000000000 +0000 @@ -0,0 +1,16 @@ +Version 20140528: +* Improvement: 'windows' key is now the default META key + +* Bugfix: seldomly triggered crash in memory pool +* Bugfix: save the session atomically +* Bugfix: various fixes to contributed scripts, notably more lua5.2 support + +* Improvement: various code cleanups (thanks to Campbell Barton) +* Improvement: various build/packaging improvements (thanks to Dima Kogan) + +* Feature: Workspace indicator (thanks to Dima Kogan) +* Feature: Delayed population of the focuslist (thanks to Dima Kogan) + +* Improvement: improved kludges/focus behavior (IntelliJ IDEA, xeyes) +* Improvement: expose 'warp_pointer' to lua +* Improvement: lock using i3lock when available diff -Nru notion-3+2014010901/config.h notion-3+2015061300/config.h --- notion-3+2014010901/config.h 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/config.h 2015-06-13 14:37:26.000000000 +0000 @@ -31,6 +31,12 @@ #define CF_USERTIME_DIFF_CURRENT 2000 #define CF_USERTIME_DIFF_NEW 4000 +/* disable this by default */ +#define CF_FOCUSLIST_INSERT_DELAY 0 + +/* disable this by default */ +#define CF_WORKSPACE_INDICATOR_TIMEOUT 0 + /* Cursors */ diff -Nru notion-3+2014010901/contrib/keybindings/cfg_mouse.lua notion-3+2015061300/contrib/keybindings/cfg_mouse.lua --- notion-3+2014010901/contrib/keybindings/cfg_mouse.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/keybindings/cfg_mouse.lua 2015-06-13 14:37:26.000000000 +0000 @@ -20,7 +20,7 @@ defbindings("WScreen", { - -- Switching workspaces can be done from anywhere using Mod1 and + -- Switching workspaces can be done from anywhere using META and -- the wheel, or without the keyboard by using the wheel over -- the left, right or bottom edges of the screen, or over a border -- or an empty frame. @@ -29,8 +29,8 @@ -- of the screen, most of them do.) mpress("Button4", "WScreen.switch_prev(_)"), mpress("Button5", "WScreen.switch_next(_)"), - mpress(MOD1.."Button4", "WScreen.switch_prev(_)"), - mpress(MOD1.."Button5", "WScreen.switch_next(_)"), + mpress(META.."Button4", "WScreen.switch_prev(_)"), + mpress(META.."Button5", "WScreen.switch_next(_)"), -- When a WClientWin is set to fullscreen mode, the mouse -- can do little about it unless there happen to be gaps @@ -44,12 +44,12 @@ defbindings("WFrame", { bdoc("Bring up a context menu from anywhere in the frame."), - mpress(MOD1.."Shift+Button3", "mod_menu.pmenu(_, _sub, 'ctxmenu')"), + mpress(META.."Shift+Button3", "mod_menu.pmenu(_, _sub, 'ctxmenu')"), bdoc("Toggle tagged."), - mpress(MOD1.."Button2", "_sub:set_tagged('toggle')"), + mpress(META.."Button2", "_sub:set_tagged('toggle')"), bdoc("Attach tagged regions."), - mpress(MOD1.."Shift+Button2", "_:attach_tagged()"), + mpress(META.."Shift+Button2", "_:tagged_attach()"), -- For mouse users I highly recommend button2 as a mainmenu, -- otherwise it would be difficult to start programs using the mouse. @@ -73,11 +73,11 @@ mpress("Button5", "_:parent():switch_next()"), mpress("Button4", "_:parent():switch_prev()"), - mpress(MOD1.."Button4", "_:parent():switch_prev()"), - mpress(MOD1.."Button5", "_:parent():switch_next()"), + mpress(META.."Button4", "_:parent():switch_prev()"), + mpress(META.."Button5", "_:parent():switch_next()"), - bdoc("Drag without aiming for a tab, using Mod1+Shift"), - mdrag(MOD1.."Shift+Button1", "WFrame.p_tabdrag(_)"), + bdoc("Drag without aiming for a tab, using META+Shift"), + mdrag(META.."Shift+Button1", "WFrame.p_tabdrag(_)"), --[[ These should already have happened in cfg_bindings.lua. -- Uncomment if necessary. @@ -88,10 +88,10 @@ bdoc("Resize the frame."), mdrag("Button1@border", "WFrame.p_resize(_)"), - mdrag(MOD1.."Button3", "WFrame.p_resize(_)"), + mdrag(META.."Button3", "WFrame.p_resize(_)"), bdoc("Move the frame."), - mdrag(MOD1.."Button1", "WFrame.p_move(_)"), + mdrag(META.."Button1", "WFrame.p_move(_)"), bdoc("Move objects between frames by dragging and dropping the tab."), mdrag("Button1@tab", "WFrame.p_tabdrag(_)"), @@ -101,8 +101,8 @@ -- Using alsa-utils, by any chance? Have some volume control. --[[ - mpress(MOD1.."Control+Button4", "ioncore.exec_on(_, 'amixer set PCM 1+')"), - mpress(MOD1.."Control+Button5", "ioncore.exec_on(_, 'amixer set PCM 1-')"), + mpress(META.."Control+Button4", "ioncore.exec_on(_, 'amixer set PCM 1+')"), + mpress(META.."Control+Button5", "ioncore.exec_on(_, 'amixer set PCM 1-')"), --]] }) @@ -124,13 +124,13 @@ else defbindings("WFrame", { bdoc("Show/hide tab"), - mclick(MOD1.."Shift+Button1", "WFrame.set_tabbar(_, 'toggle')"), + mclick(META.."Shift+Button1", "WFrame.set_tabbar(_, 'toggle')"), bdoc("Quickly rename a frame."), - mpress(MOD1.."Shift+Control+Button3", "mod_query.query_renameframe(_)"), + mpress(META.."Shift+Control+Button3", "mod_query.query_renameframe(_)"), - mpress(MOD1.."Shift+Button5", "WScreen.switch_next(_)"), - mpress(MOD1.."Shift+Button4", "WScreen.switch_prev(_)"), + mpress(META.."Shift+Button5", "WScreen.switch_next(_)"), + mpress(META.."Shift+Button4", "WScreen.switch_prev(_)"), }) end diff -Nru notion-3+2014010901/contrib/keybindings/dans_bindings.lua notion-3+2015061300/contrib/keybindings/dans_bindings.lua --- notion-3+2014010901/contrib/keybindings/dans_bindings.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/keybindings/dans_bindings.lua 2015-06-13 14:37:26.000000000 +0000 @@ -4,13 +4,13 @@ -- -- Dan's bindings: these allow you to navigate ion in a sane way. -- --- MOD1 + L/R cycles between clients in a frame. --- MOD1 + U/D cycles between workspaces. +-- META + L/R cycles between clients in a frame. +-- META + U/D cycles between workspaces. -- --- MOD1 + shift + L/R/U/D navigates frames intuitively on a WIonWS. +-- META + shift + L/R/U/D navigates frames intuitively on a WIonWS. -- --- MOD1 + control + L/R moves clients on a frame. --- MOD1 + control + U/D moves clients between workspaces. (TODO) +-- META + control + L/R moves clients on a frame. +-- META + control + U/D moves clients between workspaces. (TODO) -- Caution: these may break the default bindings. UP="Up" ; DOWN="Down" ; LEFT="Left" ; RIGHT="Right" @@ -18,15 +18,15 @@ -- UP="W" ; DOWN="S" ; LEFT="A" ; RIGHT="D" defbindings("WScreen", { - kpress(MOD1..UP, "WScreen.switch_prev(_)"), - kpress(MOD1..DOWN, "WScreen.switch_next(_)"), }) + kpress(META..UP, "WScreen.switch_prev(_)"), + kpress(META..DOWN, "WScreen.switch_next(_)"), }) defbindings("WFrame", { - kpress(MOD1..LEFT.."+Control", "WFrame.dec_index(_, _sub)", "_sub:non-nil"), - kpress(MOD1..RIGHT.."+Control", "WFrame.inc_index(_, _sub)", "_sub:non-nil"), - kpress(MOD1..LEFT, "WFrame.switch_prev(_)"), - kpress(MOD1..RIGHT, "WFrame.switch_next(_)"), }) + kpress(META..LEFT.."+Control", "WFrame.dec_index(_, _sub)", "_sub:non-nil"), + kpress(META..RIGHT.."+Control", "WFrame.inc_index(_, _sub)", "_sub:non-nil"), + kpress(META..LEFT, "WFrame.switch_prev(_)"), + kpress(META..RIGHT, "WFrame.switch_next(_)"), }) defbindings("WTiling", { - kpress(MOD1..UP.."+Shift", "WTiling.goto_dir(_, 'above')"), - kpress(MOD1..DOWN.."+Shift", "WTiling.goto_dir(_, 'below')"), - kpress(MOD1..LEFT.."+Shift", "WTiling.goto_dir(_, 'left')"), - kpress(MOD1..RIGHT.."+Shift", "WTiling.goto_dir(_, 'right')"), }) + kpress(META..UP.."+Shift", "WTiling.goto_dir(_, 'above')"), + kpress(META..DOWN.."+Shift", "WTiling.goto_dir(_, 'below')"), + kpress(META..LEFT.."+Shift", "WTiling.goto_dir(_, 'left')"), + kpress(META..RIGHT.."+Shift", "WTiling.goto_dir(_, 'right')"), }) diff -Nru notion-3+2014010901/contrib/keybindings/emacs_bindings.lua notion-3+2015061300/contrib/keybindings/emacs_bindings.lua --- notion-3+2014010901/contrib/keybindings/emacs_bindings.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/keybindings/emacs_bindings.lua 2015-06-13 14:37:26.000000000 +0000 @@ -166,7 +166,7 @@ -- kpress(META.."space", "WRegion.set_tagged(_sub, 'toggle')"), bdoc("Attach tagged objects to this frame."), - kpress(META.."Control+space", "WFrame.attach_tagged(_)"), + kpress(META.."Control+space", "WFrame.tagged_attach(_)"), bdoc("Query for Lua code to execute."), kpress(META.."Shift+colon", "mod_query.query_lua(_)"), diff -Nru notion-3+2014010901/contrib/scripts/app.lua notion-3+2015061300/contrib/scripts/app.lua --- notion-3+2014010901/contrib/scripts/app.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/app.lua 2015-06-13 14:37:26.000000000 +0000 @@ -28,8 +28,8 @@ -- If you use a multihead setup you can use something like this to start -- applictions on your current screen -- --- kpress(MOD1.."C", "app.byname('xterm -title shell', 'shell', _)"), --- kpress(MOD1.."T", "app.byclass('emacs', 'Emacs', _)"), +-- kpress(META.."C", "app.byname('xterm -title shell', 'shell', _)"), +-- kpress(META.."T", "app.byclass('emacs', 'Emacs', _)"), -- -- For emacs users there's also app.emacs_eval, and app.query_editfile, -- which interacts with any currently running emacs process (using @@ -72,7 +72,7 @@ function app.byname(prog, name, where) local win = ioncore.lookup_clientwin(name) if win then - ioncore.defer(function () win:goto() end) + ioncore.defer(function () win:goto_focus() end) else if where then ioncore.exec_on(where, prog) @@ -85,7 +85,7 @@ function app.byclass(prog, class, where) local win = app.match_class(class)[1] if win then - ioncore.defer(function () win:goto() end) + ioncore.defer(function () win:goto_focus() end) else if where then ioncore.exec_on(where, prog) @@ -98,7 +98,7 @@ function app.byinstance(prog, class, instance, where) local win = app.match_class(class, instance)[1] if win then - ioncore.defer(function () win:goto() end) + ioncore.defer(function () win:goto_focus() end) else if where then ioncore.exec_on(where, prog) @@ -112,7 +112,7 @@ local emacswin = app.match_class("Emacs")[1] if emacswin then ioncore.exec("gnuclient -batch -eval '"..expr.."'") - ioncore.defer(function () emacswin:goto() end) + ioncore.defer(function () emacswin:goto_focus() end) else ioncore.exec("emacs -eval '"..expr.."'") end diff -Nru notion-3+2014010901/contrib/scripts/autoprop.lua notion-3+2015061300/contrib/scripts/autoprop.lua --- notion-3+2014010901/contrib/scripts/autoprop.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/autoprop.lua 2015-06-13 14:37:26.000000000 +0000 @@ -66,15 +66,15 @@ return end - table.foreach(d, function(k, tab) - defwinprop{ - class=tab.class, - instance=tab.instance, - role=tab.role, - target=tab.target - } - autoprops[tab.class..tab.role..tab.instance]=tab - end) + for k,tab in pairs(d) do + defwinprop{ + class=tab.class, + instance=tab.instance, + role=tab.role, + target=tab.target + } + autoprops[tab.class..tab.role..tab.instance]=tab + end end local function init() diff -Nru notion-3+2014010901/contrib/scripts/bookmarks.lua notion-3+2015061300/contrib/scripts/bookmarks.lua --- notion-3+2014010901/contrib/scripts/bookmarks.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/bookmarks.lua 2015-06-13 14:37:26.000000000 +0000 @@ -4,8 +4,8 @@ -- -- Bookmarks support for Ion3 -- --- MOD1+b n Go to bookmark n (n=0..9) --- MOD1+b Shift+n Set bookmark n +-- META+b n Go to bookmark n (n=0..9) +-- META+b Shift+n Set bookmark n -- local bms={} @@ -15,9 +15,9 @@ bms[bm]=frame end -function bookmarks.goto(bm) +function bookmarks.goto_bm(bm) if bms[bm] then - bms[bm]:goto() + bms[bm]:goto_focus() end end @@ -25,12 +25,12 @@ for k=0, 9 do local bm=tostring(k) defbindings("WScreen", { - submap(MOD1.."b", { - kpress(bm, function() bookmarks.goto(bm) end), + submap(META.."b", { + kpress(bm, function() bookmarks.goto_bm(bm) end), }) }) defbindings("WFrame", { - submap(MOD1.."b", { + submap(META.."b", { kpress("Shift+"..bm, function(frame) bookmarks.set(bm, frame) end), }) diff -Nru notion-3+2014010901/contrib/scripts/cfg_dock2.lua notion-3+2015061300/contrib/scripts/cfg_dock2.lua --- notion-3+2014010901/contrib/scripts/cfg_dock2.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/cfg_dock2.lua 2015-06-13 14:37:26.000000000 +0000 @@ -25,15 +25,15 @@ -- Screenshot: http://silenceisdefeat.org/~chv/pics/screenshots/2docks.png -- -- --- Mod1+K D E toggle between floating and embedded modes --- Mod1+K D F flip --- Mod1+K D T transpose --- Mod1+K D R "resize mode" (it will move but not resize) --- Mod1+K D A attach clientwin to dock +-- META+K D E toggle between floating and embedded modes +-- META+K D F flip +-- META+K D T transpose +-- META+K D R "resize mode" (it will move but not resize) +-- META+K D A attach clientwin to dock -- Button1 flip -- Button2 transpose -- ___________ --- |7 8 9| Mod1+K D (number) to move a floating dock. +-- |7 8 9| META+K D (number) to move a floating dock. -- | | Same for embedded dock, limited to 1,3,7,9. -- |4 5 6| -- | | @@ -120,11 +120,11 @@ defbindings("WScreen", { bdoc("Toggle floating dock."), - kpress(MOD1.."D", "mod_dock.set_floating_shown_on(_, 'toggle')"), + kpress(META.."D", "mod_dock.set_floating_shown_on(_, 'toggle')"), }) defbindings("WMPlex", { - submap(MOD1.."K", { + submap(META.."K", { submap("D", { kpress("A", "get_dock(_:screen_of()):attach(_sub)", "_sub:WClientWin"), }), @@ -132,7 +132,7 @@ }) defbindings("WScreen", { - submap(MOD1.."K", { + submap(META.."K", { submap("D", { kpress("KP_7", "get_dock(_):set{pos='tl'}"), kpress("KP_8", "get_dock(_):set{pos='tc'}"), @@ -221,7 +221,7 @@ -- You can actually drag a floating dock anywhere. -- Position will be lost when ion restarts. mdrag("Button1", "_:p_move()"), - mdrag(MOD1.."Button1", "_:p_move()"), + mdrag(META.."Button1", "_:p_move()"), }) function flip_dock_direction(dock) diff -Nru notion-3+2014010901/contrib/scripts/collapse.lua notion-3+2015061300/contrib/scripts/collapse.lua --- notion-3+2014010901/contrib/scripts/collapse.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/collapse.lua 2015-06-13 14:37:26.000000000 +0000 @@ -28,5 +28,5 @@ ws:managed_i (function (region) return collapse.take_frame_to_here(region, current) end) - current:goto() + current:goto_focus() end diff -Nru notion-3+2014010901/contrib/scripts/exec_show.lua notion-3+2015061300/contrib/scripts/exec_show.lua --- notion-3+2014010901/contrib/scripts/exec_show.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/exec_show.lua 2015-06-13 14:37:26.000000000 +0000 @@ -52,6 +52,6 @@ defbindings("WMPlex", { bdoc("Execute a command and show the result."), - kpress(MOD1.."F4", "exec_and_show(_)"), -- change the binding to your liking + kpress(META.."F4", "exec_and_show(_)"), -- change the binding to your liking }) diff -Nru notion-3+2014010901/contrib/scripts/goto_by_tag.lua notion-3+2015061300/contrib/scripts/goto_by_tag.lua --- notion-3+2014010901/contrib/scripts/goto_by_tag.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/goto_by_tag.lua 2015-06-13 14:37:26.000000000 +0000 @@ -65,6 +65,6 @@ end end) if s then - s:goto() + s:goto_focus() end end diff -Nru notion-3+2014010901/contrib/scripts/legacy/adapt_menus.lua notion-3+2015061300/contrib/scripts/legacy/adapt_menus.lua --- notion-3+2014010901/contrib/scripts/legacy/adapt_menus.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/legacy/adapt_menus.lua 2015-06-13 14:37:26.000000000 +0000 @@ -37,7 +37,7 @@ -- Sep 2005, initial version, David Tweed function mkentryJump(frame,tgt,name) - return ioncore.menuentry(name, function() tgt:goto() end) + return ioncore.menuentry(name, function() tgt:goto_focus() end) end function mkentryClose(frame,tgt,name) @@ -50,7 +50,7 @@ function attachHere(frame,tgt) if tgt:manager()==frame then - tgt:goto() + tgt:goto_focus() else frame:attach(tgt,{switchto=true}) end @@ -175,11 +175,11 @@ --[[ -- some examples of usage defbindings("WFrame", { - kpress(MOD1.."F8", "mod_menu.menu(_,_sub,makelistEngine(_,'jump',mkentryJump,extend(ioncore.clientwin_list(),ioncore.region_list('WGenWS')),1))"), + kpress(META.."F8", "mod_menu.menu(_,_sub,makelistEngine(_,'jump',mkentryJump,extend(ioncore.clientwin_list(),ioncore.region_list('WGenWS')),1))"), kpress(MOD2.."F8", "mod_menu.menu(_,_sub,makelistEngine(_,'jumpWS',mkentryJump,ioncore.region_list('WGenWS'),4))"), - kpress(MOD1.."F7", "mod_menu.menu(_, _sub,makelistEngine(_,'attach',mkentryAttach,ioncore.clientwin_list(),1))"), + kpress(META.."F7", "mod_menu.menu(_, _sub,makelistEngine(_,'attach',mkentryAttach,ioncore.clientwin_list(),1))"), kpress(MOD2.."F7", "mod_menu.menu(_, _sub,makelistEngine(_,'close',mkentryClose,ioncore.clientwin_list(),1))"), - kpress(MOD1.."F6", "mod_menu.menu(_, _sub,makelistEngine(_,'raise',mkentryJump,extend(_:llist(1),ioncore.region_list('WGenWS')),4))"), + kpress(META.."F6", "mod_menu.menu(_, _sub,makelistEngine(_,'raise',mkentryJump,extend(_:llist(1),ioncore.region_list('WGenWS')),4))"), kpress(MOD2.."F6", "mod_menu.menu(_, _sub,makelistEngine(_,'close',mkentryClose,_:llist(1),4))"), }) --]] diff -Nru notion-3+2014010901/contrib/scripts/legacy/bindsearch.lua notion-3+2015061300/contrib/scripts/legacy/bindsearch.lua --- notion-3+2014010901/contrib/scripts/legacy/bindsearch.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/legacy/bindsearch.lua 2015-06-13 14:37:26.000000000 +0000 @@ -20,7 +20,7 @@ Example: bindsearch("K X") yields: WIonWS - [kcb] = Mod1+K + [kcb] = META+K [action] = kpress [submap] = table: 0x8254478 [cmd] = WIonWS.unsplit_at(_, _sub) diff -Nru notion-3+2014010901/contrib/scripts/legacy/ctrl_statusbar.lua notion-3+2015061300/contrib/scripts/legacy/ctrl_statusbar.lua --- notion-3+2014010901/contrib/scripts/legacy/ctrl_statusbar.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/legacy/ctrl_statusbar.lua 2015-06-13 14:37:26.000000000 +0000 @@ -233,7 +233,7 @@ ctrl_statusbar.init() ioncore.defbindings("WScreen", { - kpress(MOD1.."V", "mod_menu.bigmenu(_, _sub, ctrl_statusbar.show_list)") + kpress(META.."V", "mod_menu.bigmenu(_, _sub, ctrl_statusbar.show_list)") }) ioncore.defbindings("WStatusBar", { diff -Nru notion-3+2014010901/contrib/scripts/legacy/document_menus.lua notion-3+2015061300/contrib/scripts/legacy/document_menus.lua --- notion-3+2014010901/contrib/scripts/legacy/document_menus.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/legacy/document_menus.lua 2015-06-13 14:37:26.000000000 +0000 @@ -33,11 +33,11 @@ }) defbindings("WMPlex", { - kpress(MOD1.."minus", "mod_menu.menu(_, _sub, 'useful folders')"), + kpress(META.."minus", "mod_menu.menu(_, _sub, 'useful folders')"), }) defbindings("WScreen", { - submap(MOD1.."K", { + submap(META.."K", { kpress("minus", "docmenus.toggle_dotfiles()"), }), }) diff -Nru notion-3+2014010901/contrib/scripts/legacy/environment_placement_hook.lua notion-3+2015061300/contrib/scripts/legacy/environment_placement_hook.lua --- notion-3+2014010901/contrib/scripts/legacy/environment_placement_hook.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/legacy/environment_placement_hook.lua 2015-06-13 14:37:26.000000000 +0000 @@ -34,7 +34,7 @@ file:close() local rv = {} - for k, v in string.gfind(envstr, "(.-)=(.-)\\000") do + for k, v in string.gmatch(envstr, "(.-)=(.-)\\000") do rv[k] = v end return rv diff -Nru notion-3+2014010901/contrib/scripts/legacy/frame_client_menu.lua notion-3+2015061300/contrib/scripts/legacy/frame_client_menu.lua --- notion-3+2014010901/contrib/scripts/legacy/frame_client_menu.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/legacy/frame_client_menu.lua 2015-06-13 14:37:26.000000000 +0000 @@ -46,7 +46,7 @@ if reg == sub then initial = #myframemenu + 1 end - myframemenu[#myframemenu + 1] = ioncore.menuentry(reg:current():name(), function() reg:goto() end) + myframemenu[#myframemenu + 1] = ioncore.menuentry(reg:current():name(), function() reg:goto_focus() end) return true end) diff -Nru notion-3+2014010901/contrib/scripts/legacy/go_frame_or_desk.lua notion-3+2015061300/contrib/scripts/legacy/go_frame_or_desk.lua --- notion-3+2014010901/contrib/scripts/legacy/go_frame_or_desk.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/legacy/go_frame_or_desk.lua 2015-06-13 14:37:26.000000000 +0000 @@ -18,10 +18,10 @@ -- To use this function you need to bind keys for WIonWS, for exmaple: -- --defbindings("WIonWS", { --- kpress(MOD1.."Up", "go_frame_or_desk_up(_)"), --- kpress(MOD1.."Down", "go_frame_or_desk_down(_)"), --- kpress(MOD1.."Right", "go_frame_or_desk_right(_)"), --- kpress(MOD1.."Left", "go_frame_or_desk_left(_)"), +-- kpress(META.."Up", "go_frame_or_desk_up(_)"), +-- kpress(META.."Down", "go_frame_or_desk_down(_)"), +-- kpress(META.."Right", "go_frame_or_desk_right(_)"), +-- kpress(META.."Left", "go_frame_or_desk_left(_)"), --}) function go_frame_or_desk(workspace, direction) @@ -31,10 +31,10 @@ workspace:goto_dir(direction) elseif direction == "left" then screen:switch_prev() - screen:current():farthest("right"):goto() + screen:current():farthest("right"):goto_focus() elseif direction == "right" then screen:switch_next() - screen:current():farthest("left"):goto() + screen:current():farthest("left"):goto_focus() end end diff -Nru notion-3+2014010901/contrib/scripts/legacy/goto_multihead.lua notion-3+2015061300/contrib/scripts/legacy/goto_multihead.lua --- notion-3+2014010901/contrib/scripts/legacy/goto_multihead.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/legacy/goto_multihead.lua 2015-06-13 14:37:26.000000000 +0000 @@ -34,5 +34,5 @@ end end - nxt:goto() + nxt:goto_focus() end diff -Nru notion-3+2014010901/contrib/scripts/legacy/nest_ws.lua notion-3+2015061300/contrib/scripts/legacy/nest_ws.lua --- notion-3+2014010901/contrib/scripts/legacy/nest_ws.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/legacy/nest_ws.lua 2015-06-13 14:37:26.000000000 +0000 @@ -31,15 +31,15 @@ local nestmenu = {} if mod_ionws then - table.insert(nestmenu, menuentry("WIonWS", "_:attach_new({type=\"WIonWS\" }):goto()")) + table.insert(nestmenu, menuentry("WIonWS", "_:attach_new({type=\"WIonWS\" }):goto_focus()")) end if mod_floatws then - table.insert(nestmenu, menuentry("WFloatWS", "_:attach_new({type=\"WFloatWS\"}):goto()")) + table.insert(nestmenu, menuentry("WFloatWS", "_:attach_new({type=\"WFloatWS\"}):goto_focus()")) end if mod_panews then - table.insert(nestmenu, menuentry("WPaneWS", "_:attach_new({type=\"WPaneWS\" }):goto()")) + table.insert(nestmenu, menuentry("WPaneWS", "_:attach_new({type=\"WPaneWS\" }):goto_focus()")) end if #nestmenu > 0 then @@ -59,7 +59,7 @@ -- Legacy defmenu("menuattach", { - menuentry("WIonWS", "_:attach_new({type=\"WIonWS\" }):goto()"), - menuentry("WFloatWS", "_:attach_new({type=\"WFloatWS\"}):goto()"), - menuentry("WPaneWS", "_:attach_new({type=\"WPaneWS\" }):goto()"), + menuentry("WIonWS", "_:attach_new({type=\"WIonWS\" }):goto_focus()"), + menuentry("WFloatWS", "_:attach_new({type=\"WFloatWS\"}):goto_focus()"), + menuentry("WPaneWS", "_:attach_new({type=\"WPaneWS\" }):goto_focus()"), }) diff -Nru notion-3+2014010901/contrib/scripts/legacy/nextact.lua notion-3+2015061300/contrib/scripts/legacy/nextact.lua --- notion-3+2014010901/contrib/scripts/legacy/nextact.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/legacy/nextact.lua 2015-06-13 14:37:26.000000000 +0000 @@ -17,6 +17,6 @@ function goto_nextact() local l=filteri(WRegion.is_activity, ioncore.clientwin_list()) if l[1] then - l[1]:goto() + l[1]:goto_focus() end end diff -Nru notion-3+2014010901/contrib/scripts/legacy/xinerama_switcher.lua notion-3+2015061300/contrib/scripts/legacy/xinerama_switcher.lua --- notion-3+2014010901/contrib/scripts/legacy/xinerama_switcher.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/legacy/xinerama_switcher.lua 2015-06-13 14:37:26.000000000 +0000 @@ -14,10 +14,10 @@ -- The following keybindings may be useful: -- --defbindings("WIonWS", { --- kpress(MOD1.."Up", "xinerama_switcher_up(_)"), --- kpress(MOD1.."Down", "xinerama_switcher_down(_)"), --- kpress(MOD1.."Right", "xinerama_switcher_right(_)"), --- kpress(MOD1.."Left", "xinerama_switcher_left(_)"), +-- kpress(META.."Up", "xinerama_switcher_up(_)"), +-- kpress(META.."Down", "xinerama_switcher_down(_)"), +-- kpress(META.."Right", "xinerama_switcher_right(_)"), +-- kpress(META.."Left", "xinerama_switcher_left(_)"), --}) -- -- Based on go_desk_or_desk lua by Rene van Bevern , 2005 @@ -76,24 +76,24 @@ if direction == "left" then -- we move to the screen on the left local screen = goto_left_screen() - screen:current():farthest("right"):goto() + screen:current():farthest("right"):goto_focus() elseif direction == "right" then -- we move to the screen on the right local screen = goto_right_screen() - screen:current():farthest("left"):goto() + screen:current():farthest("left"):goto_focus() elseif direction == "up" then -- we switch to the workspace above this one local screen = workspace:screen_of() goto_workspace_up(screen) - screen:current():farthest("down"):goto() + screen:current():farthest("down"):goto_focus() elseif direction == "down" then -- we switch to the workspace below this one local screen = workspace:screen_of() goto_workspace_down(screen) - screen:current():farthest("up"):goto() + screen:current():farthest("up"):goto_focus() end end diff -Nru notion-3+2014010901/contrib/scripts/move_current.lua notion-3+2015061300/contrib/scripts/move_current.lua --- notion-3+2014010901/contrib/scripts/move_current.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/move_current.lua 2015-06-13 14:37:26.000000000 +0000 @@ -14,11 +14,11 @@ if frame2 then frame2:attach(cwin, { switchto=true }) end - cwin:goto() + cwin:goto_focus() end defbindings("WTiling", { - submap("Mod1+K", { + submap("META+K", { kpress("Up", function(ws) move_current.move(ws, "up") end), kpress("Down", function(ws) move_current.move(ws, "down") end), kpress("Left", function(ws) move_current.move(ws, "left") end), diff -Nru notion-3+2014010901/contrib/scripts/rss_feed_hh.lua notion-3+2015061300/contrib/scripts/rss_feed_hh.lua --- notion-3+2014010901/contrib/scripts/rss_feed_hh.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/rss_feed_hh.lua 2015-06-13 14:37:26.000000000 +0000 @@ -6,7 +6,7 @@ -- -- Use: -- You have to dopath() this script for it to work. I have set a binding --- MOD1+F11 for a popup-menu. You can also add %rss to the statusbar, which +-- META+F11 for a popup-menu. You can also add %rss to the statusbar, which -- will show a scrolling list of titles. You might want to give it a try -- before disabling. :) -- @@ -25,7 +25,7 @@ -- * Added Flag which allows to toggle if a feed will be displayed in -- the statusbar -- * A feed in the menu now opens the coresponding url in firefox --- * Now uses MOD1+F11 by default, so it doesnt overlap with the +-- * Now uses META+F11 by default, so it doesnt overlap with the -- menu anymore -- * I found the source-information in the statusbar distrubing so I removed -- it @@ -126,7 +126,7 @@ __, _ = string.find(data, "[^\n]+") if __ then src = string.sub(data, __, _) end - -- for title, desc in string.gfind(data,".-(.-).-(.-).-") do + -- for title, desc in string.gmatch(data,".-(.-).-(.-).-") do title, desc, data, link = get_next(data) while title do title = clean(title) @@ -138,7 +138,9 @@ end feeds[src] = new rss_string = "" - table.foreach(feeds, reconstruct_rss) + for k,v in pairs(feeds) do + reconstruct_rss(k,v) + end rss_length = string.len(rss_string) rss_string = rss_string .. string.sub(rss_string, 1, rss_feed.width) count = 1 @@ -238,7 +240,7 @@ init_rss() ioncore.defbindings("WScreen", { - kpress(MOD1.."Shift+D", "mod_query.message(_, rss_desc)"), - kpress(MOD1.."F11", 'mod_menu.bigmenu(_, _sub, show_menu)'), + kpress(META.."Shift+D", "mod_query.message(_, rss_desc)"), + kpress(META.."F11", 'mod_menu.bigmenu(_, _sub, show_menu)'), }) diff -Nru notion-3+2014010901/contrib/scripts/rss_feed.lua notion-3+2015061300/contrib/scripts/rss_feed.lua --- notion-3+2014010901/contrib/scripts/rss_feed.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/rss_feed.lua 2015-06-13 14:37:26.000000000 +0000 @@ -6,7 +6,7 @@ -- -- Use: -- You have to dopath() this script for it to work. I have set a binding --- MOD1+F12 for a popup-menu. You can also add %rss to the statusbar, which +-- META+F12 for a popup-menu. You can also add %rss to the statusbar, which -- will show a scrolling list of titles. You might want to give it a try -- before disabling. :) -- @@ -104,7 +104,7 @@ __, _ = string.find(data, "[^\n]+") if __ then src = string.sub(data, __, _) end - -- for title, desc in string.gfind(data,".-(.-).-(.-).-") do + -- for title, desc in string.gmatch(data,".-(.-).-(.-).-") do title, desc, data = get_next(data) while title do title = clean(title) @@ -115,7 +115,10 @@ end feeds[src] = new rss_string = "" - table.foreach(feeds, reconstruct_rss) + for k,v in pairs(feeds) do + reconstruct_rss(k,v) + end + rss_length = string.len(rss_string) rss_string = rss_string .. string.sub(rss_string, 1, rss_feed.width) count = 1 @@ -195,7 +198,7 @@ init_rss() ioncore.defbindings("WScreen", { - kpress(MOD1.."Shift+D", "mod_query.message(_, rss_desc)"), - kpress(MOD1.."F12", 'mod_menu.bigmenu(_, _sub, show_menu)'), + kpress(META.."Shift+D", "mod_query.message(_, rss_desc)"), + kpress(META.."F12", 'mod_menu.bigmenu(_, _sub, show_menu)'), }) diff -Nru notion-3+2014010901/contrib/scripts/schedule.lua notion-3+2015061300/contrib/scripts/schedule.lua --- notion-3+2014010901/contrib/scripts/schedule.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/schedule.lua 2015-06-13 14:37:26.000000000 +0000 @@ -207,13 +207,13 @@ -- defbindings("WMPlex", { -- you can change the key bindings to your liking - kpress(MOD1.."F5", "schedule.ask_message(_)"), - kpress(MOD1.."Shift+F5", function () -- clear notification + kpress(META.."F5", "schedule.ask_message(_)"), + kpress(META.."Shift+F5", function () -- clear notification mod_statusbar.inform("schedule", "") mod_statusbar.inform("schedule_hint", "") mod_statusbar.update() end), - kpress(MOD1.."Control+F5", "schedule.show_all(_)"), + kpress(META.."Control+F5", "schedule.show_all(_)"), }) dopath(schedule.save_filename, true) -- read any saved notifications diff -Nru notion-3+2014010901/contrib/scripts/send_to_ws.lua notion-3+2015061300/contrib/scripts/send_to_ws.lua --- notion-3+2014010901/contrib/scripts/send_to_ws.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/send_to_ws.lua 2015-06-13 14:37:26.000000000 +0000 @@ -105,7 +105,7 @@ end if jumpto then - cwin:goto() + cwin:goto_focus() end end @@ -122,5 +122,5 @@ newws=scr:attach_new{type="WTiling"} newws:current():attach(cwin) end - if jumpto then cwin:goto() end + if jumpto then cwin:goto_focus() end end diff -Nru notion-3+2014010901/contrib/scripts/simple_bindings.lua notion-3+2015061300/contrib/scripts/simple_bindings.lua --- notion-3+2014010901/contrib/scripts/simple_bindings.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/simple_bindings.lua 2015-06-13 14:37:26.000000000 +0000 @@ -107,7 +107,7 @@ for k,v in pairs(fenv) do local section, bindstr, keystr - keystr = v:gsub("([MCS])%-", {M = "Mod1+", C = "Control+", S = "Shift+"}) + keystr = v:gsub("([MCS])%-", {M = "META+", C = "Control+", S = "Shift+"}) if bindings[k] then bindstr = bindings[k].funcstr diff -Nru notion-3+2014010901/contrib/scripts/stock.lua notion-3+2015061300/contrib/scripts/stock.lua --- notion-3+2014010901/contrib/scripts/stock.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/stock.lua 2015-06-13 14:37:26.000000000 +0000 @@ -13,7 +13,7 @@ -- QUICKSTART -- 1. In template of you cfg_statusbar.lua insert: "%stock" (without quotes) -- 2. Insert, in you cfg_ion.lua or run: dopath("stock") --- 3. press MOD1+F10 to get the menu +-- 3. press META+F10 to get the menu -- 4. Add a ticket: e.g. "^N225" (without quotes) to monitor the Nikkei index. @@ -102,8 +102,8 @@ -- key bindings -- you can (should) change the key bindings to your liking defbindings("WMPlex", { - kpress(MOD1.."F10", "mod_query.query_menu(_, 'stockmenu', 'StockMonitor Menu: ')"), - kpress(MOD1.."Shift+F10", "StockMonitor.add_ticket(_)"), + kpress(META.."F10", "mod_query.query_menu(_, 'stockmenu', 'StockMonitor Menu: ')"), + kpress(META.."Shift+F10", "StockMonitor.add_ticket(_)"), }) defmenu("stockmenu", { menuentry("update now", "StockMonitor.update()"), diff -Nru notion-3+2014010901/contrib/scripts/tabmenu.lua notion-3+2015061300/contrib/scripts/tabmenu.lua --- notion-3+2014010901/contrib/scripts/tabmenu.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/tabmenu.lua 2015-06-13 14:37:26.000000000 +0000 @@ -41,7 +41,7 @@ local m={} _:mx_i(function(r) local e=menuentry(tabmenu.hack_displayname(r), - function() r:goto() end) + function() r:goto_focus() end) table.insert(m, e) if r==_sub then i=#m diff -Nru notion-3+2014010901/contrib/scripts/weather.lua notion-3+2015061300/contrib/scripts/weather.lua --- notion-3+2014010901/contrib/scripts/weather.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/weather.lua 2015-06-13 14:37:26.000000000 +0000 @@ -61,7 +61,7 @@ -- mymonitor2 = new_wm("LIBP") -- You can create a new monitor also at run time. Get the Lua code prompt --- (usually MOD1+F3) and run: +-- (usually META+F3) and run: -- mymonitor3 = new_wm("LIBC") -- Do not set any station in cfg_statusbar.lua, since that station would @@ -75,7 +75,7 @@ -- Each monitor can be also configured at run-time. -- For instance: if you are monitoring only one station, get the Lua code --- prompt (usually MOD1+F3) and run: +-- prompt (usually META+F3) and run: -- WeatherMonitor.config.unit.tempC = "C" -- or -- WeatherMonitor.config.critical.tempC = "15" @@ -95,7 +95,7 @@ -- mon2 = new_wm("KNYC") -- (Remember: in single mode the name of the object is WeatherMonitor.) --- Get the Lua code prompt (usually MOD1+F3) and: +-- Get the Lua code prompt (usually META+F3) and: -- 1. to force one monitor to update the data: -- mon1.update() diff -Nru notion-3+2014010901/contrib/scripts/wrap_workspace_or_screen.lua notion-3+2015061300/contrib/scripts/wrap_workspace_or_screen.lua --- notion-3+2014010901/contrib/scripts/wrap_workspace_or_screen.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/wrap_workspace_or_screen.lua 2015-06-13 14:37:26.000000000 +0000 @@ -52,29 +52,29 @@ if direction=='left' then local screen=ioncore.goto_prev_screen() local reg=ioncore.navi_first(underlying_manager(screen:current()), 'right') - if reg then reg:goto() end + if reg then reg:goto_focus() end elseif direction=='right' then local screen=ioncore.goto_next_screen() local reg=ioncore.navi_first(underlying_manager(screen:current()), 'left') - if reg then reg:goto() end + if reg then reg:goto_focus() end elseif direction=='up' then local screen=workspace:screen_of() local ws=underlying_manager(prev_ws(screen)) --For floating workspaces, ioncore.navi_first only seems to work --when the workspace is already displayed. Can someone explain --this? - ws:goto() + ws:goto_focus() local reg=ioncore.navi_first(ws, 'down', {no_ascend=ws,}) - if reg then reg:goto() end + if reg then reg:goto_focus() end elseif direction=='down' then local screen=workspace:screen_of() local ws=underlying_manager(next_ws(screen)) --For floating workspaces, ioncore.navi_first only seems to work --when the workspace is already displayed. Can someone explain --this? - ws:goto() + ws:goto_focus() local reg=ioncore.navi_first(ws, 'up', {no_ascend=ws,}) - if reg then reg:goto() end + if reg then reg:goto_focus() end end end end diff -Nru notion-3+2014010901/contrib/scripts/zoom.lua notion-3+2015061300/contrib/scripts/zoom.lua --- notion-3+2014010901/contrib/scripts/zoom.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/scripts/zoom.lua 2015-06-13 14:37:26.000000000 +0000 @@ -87,9 +87,9 @@ curframe:attach(zoomclient) end if zoomclient and options.goto then - zoomclient:goto() -- make it activated in the frame + zoomclient:goto_focus() -- make it activated in the frame end if curclient and options.goto then - curclient:goto() + curclient:goto_focus() end end diff -Nru notion-3+2014010901/contrib/statusd/statusd_cpustat.lua notion-3+2015061300/contrib/statusd/statusd_cpustat.lua --- notion-3+2014010901/contrib/statusd/statusd_cpustat.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/statusd/statusd_cpustat.lua 2015-06-13 14:37:26.000000000 +0000 @@ -59,7 +59,7 @@ local uptime_interv = current_uptime - last_uptime local t = {} - for tmp in string.gfind(s, "%s+(%d+)") do + for tmp in string.gmatch(s, "%s+(%d+)") do table.insert(t, tonumber(tmp)) end diff -Nru notion-3+2014010901/contrib/statusd/statusd_mocmon.lua notion-3+2015061300/contrib/statusd/statusd_mocmon.lua --- notion-3+2014010901/contrib/statusd/statusd_mocmon.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/statusd/statusd_mocmon.lua 2015-06-13 14:37:26.000000000 +0000 @@ -240,7 +240,7 @@ if mocdata and mocdata ~= "" then - for attribute, value in string.gfind(mocdata, "([^:]*):([^\n]*)\n") + for attribute, value in string.gmatch(mocdata, "([^:]*):([^\n]*)\n") do infotable[attribute] = string.gsub(value, "^%s*(.*)", "%1") end diff -Nru notion-3+2014010901/contrib/statusd/statusd_mpd.lua notion-3+2015061300/contrib/statusd/statusd_mpd.lua --- notion-3+2014010901/contrib/statusd/statusd_mpd.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/statusd/statusd_mpd.lua 2015-06-13 14:37:26.000000000 +0000 @@ -43,7 +43,14 @@ end local function get_mpd_status() + + -- The first version of cmd_string is the original, however, some versions + -- of MPD close the socket too quickly if close is included. If you see the + -- message: error querying mpd status + -- then try the second version. local cmd_string = "status\ncurrentsong\nclose\n" +-- local cmd_string = "status\ncurrentsong\n" + if settings.password ~= nil then cmd_string = "password " .. settings.password .. "\n" .. cmd_string end @@ -79,12 +86,19 @@ repeat data = saferead(mpd) if data == nil then break end - + local _,_,attrib,val = string.find(data, "(.-): (.*)") if attrib == "time" then _,_,info.pos,info.len = string.find(val, "(%d+):(%d+)") - info.pos = string.format("%d:%02d", math.floor(info.pos / 60), math.mod(info.pos, 60)) - info.len = string.format("%d:%02d", math.floor(info.len / 60), math.mod(info.len, 60)) + + -- Around Lua 5.1, math.mod() was renamed math.fmod(). + if type(math.mod) == "function" then + info.pos = string.format("%d:%02d", math.floor(info.pos / 60), math.mod(info.pos, 60)) + info.len = string.format("%d:%02d", math.floor(info.len / 60), math.mod(info.len, 60)) + else + info.pos = string.format("%d:%02d", math.floor(info.pos / 60), math.fmod(info.pos, 60)) + info.len = string.format("%d:%02d", math.floor(info.len / 60), math.fmod(info.len, 60)) + end elseif attrib == "state" then info.state = val end diff -Nru notion-3+2014010901/contrib/statusd/statusd_mpd-socket.lua notion-3+2015061300/contrib/statusd/statusd_mpd-socket.lua --- notion-3+2014010901/contrib/statusd/statusd_mpd-socket.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/statusd/statusd_mpd-socket.lua 2015-06-13 14:37:26.000000000 +0000 @@ -124,8 +124,15 @@ local _,_,attrib,val = string.find(data, "(.-): (.*)") if attrib == "time" then _,_,info.pos,info.len = string.find(val, "(%d+):(%d+)") - info.pos = string.format("%d:%02d", math.floor(info.pos / 60), math.mod(info.pos, 60)) - info.len = string.format("%d:%02d", math.floor(info.len / 60), math.mod(info.len, 60)) + + -- Around Lua 5.1, math.mod() was renamed math.fmod(). + if type(math.mod) == "function" then + info.pos = string.format("%d:%02d", math.floor(info.pos / 60), math.mod(info.pos, 60)) + info.len = string.format("%d:%02d", math.floor(info.len / 60), math.mod(info.len, 60)) + else + info.pos = string.format("%d:%02d", math.floor(info.pos / 60), math.fmod(info.pos, 60)) + info.len = string.format("%d:%02d", math.floor(info.len / 60), math.fmod(info.len, 60)) + end elseif attrib == "state" then info.state = val end diff -Nru notion-3+2014010901/contrib/statusd/statusd_netmon.lua notion-3+2015061300/contrib/statusd/statusd_netmon.lua --- notion-3+2014010901/contrib/statusd/statusd_netmon.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/statusd/statusd_netmon.lua 2015-06-13 14:37:26.000000000 +0000 @@ -78,7 +78,7 @@ local i = 0 local k = nil - for k in string.gfind(str, '(%w+)') do + for k in string.gmatch(str, '(%w+)') do ret[i] = k i = i + 1 end diff -Nru notion-3+2014010901/contrib/statusd/statusd_xmmsip.lua notion-3+2015061300/contrib/statusd/statusd_xmmsip.lua --- notion-3+2014010901/contrib/statusd/statusd_xmmsip.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/statusd/statusd_xmmsip.lua 2015-06-13 14:37:26.000000000 +0000 @@ -265,7 +265,7 @@ if pipedata and pipedata ~= "" then - for attribute, value in string.gfind(pipedata, "([^:]*):%s*([^\n]*)\n") + for attribute, value in string.gmatch(pipedata, "([^:]*):%s*([^\n]*)\n") do infotable[attribute] = value end diff -Nru notion-3+2014010901/contrib/styles/look_qt.lua notion-3+2015061300/contrib/styles/look_qt.lua --- notion-3+2014010901/contrib/styles/look_qt.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/contrib/styles/look_qt.lua 2015-06-13 14:37:26.000000000 +0000 @@ -56,7 +56,7 @@ if paletteid > 0 then local i = 1 - for v in string.gfind(line, "(#[0-9a-fA-F]+)") do + for v in string.gmatch(line, "(#[0-9a-fA-F]+)") do palette[paletteid][i] = v i = i+1 end diff -Nru notion-3+2014010901/de/brush.c notion-3+2015061300/de/brush.c --- notion-3+2014010901/de/brush.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/de/brush.c 2015-06-13 14:37:26.000000000 +0000 @@ -27,7 +27,6 @@ #define MATCHES(S, A) (gr_stylespec_score(&(S), A)>0) -#define MATCHES2(S, A1, A2) (gr_stylespec_score2(&(S), A1, A2)>0) #define ENSURE_INITSPEC(S, NM) \ if((S).attrs==NULL) gr_stylespec_load(&(S), NM); @@ -41,8 +40,6 @@ bool debrush_init(DEBrush *brush, Window win, const GrStyleSpec *spec, DEStyle *style) { - GrStyleSpec tmp; - brush->d=style; brush->extras_fn=NULL; brush->indicator_w=0; diff -Nru notion-3+2014010901/de/draw.c notion-3+2015061300/de/draw.c --- notion-3+2014010901/de/draw.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/de/draw.c 2015-06-13 14:37:26.000000000 +0000 @@ -402,10 +402,6 @@ d->stipple_gc=tmp; swapped=FALSE; } - /*if(MATCHES2("*-*-*-dragged", a1, a2)){ - XFillRectangle(ioncore_g.dpy, win, d->stipple_gc, - g->x, g->y, g->w, g->h); - }*/ } @@ -416,7 +412,7 @@ const GrFontExtents *fnte, const GrStyleSpec *a1, const GrStyleSpec *a2, - bool pre, int index) + bool pre, int UNUSED(index)) { int tx, ty; @@ -436,7 +432,7 @@ void debrush_do_draw_box(DEBrush *brush, const WRectangle *geom, - DEColourGroup *cg, bool needfill) + DEColourGroup *cg, bool UNUSED(needfill)) { GC gc=brush->d->normal_gc; @@ -558,7 +554,7 @@ #define MAXSHAPE 16 -void debrush_set_window_shape(DEBrush *brush, bool rough, +void debrush_set_window_shape(DEBrush *brush, bool UNUSED(rough), int n, const WRectangle *rects) { XRectangle r[MAXSHAPE]; @@ -571,25 +567,25 @@ n=MAXSHAPE; if(n==0){ - /* n==0 should clear the shape. As there's absolutely no - * documentation for XShape (as is typical of all sucky X - * extensions), I don't know how the shape should properly - * be cleared. Thus we just use a huge rectangle. - */ - n=1; - r[0].x=0; - r[0].y=0; - r[0].width=USHRT_MAX; - r[0].height=USHRT_MAX; + /* n==0 should clear the shape. As there's absolutely no + * documentation for XShape (as is typical of all sucky X + * extensions), I don't know how the shape should properly + * be cleared. Thus we just use a huge rectangle. + */ + n=1; + r[0].x=0; + r[0].y=0; + r[0].width=USHRT_MAX; + r[0].height=USHRT_MAX; }else{ - for(i=0; iwin, ShapeBounding, 0, 0, r, n, ShapeSet, Unsorted); diff -Nru notion-3+2014010901/de/font.c notion-3+2015061300/de/font.c --- notion-3+2014010901/de/font.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/de/font.c 2015-06-13 14:37:26.000000000 +0000 @@ -27,9 +27,6 @@ #define UTF_1 0x80 #define UTF_2 0xC0 #define UTF_3 0xE0 -#define UTF_4 0xF0 -#define UTF_5 0xF8 -#define UTF_6 0xFC static void toucs(const char *str_, int len, XChar2b **str16, int *len16) { diff -Nru notion-3+2014010901/de/fontset.c notion-3+2015061300/de/fontset.c --- notion-3+2014010901/de/fontset.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/de/fontset.c 2015-06-13 14:37:26.000000000 +0000 @@ -105,7 +105,6 @@ XFontSet fs; char **missing=NULL, *def="-"; int nmissing=0; - int i; LOG(DEBUG, FONT, "Creating fontset for: %s", fontname); diff -Nru notion-3+2014010901/de/init.c notion-3+2015061300/de/init.c --- notion-3+2014010901/de/init.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/de/init.c 2015-06-13 14:37:26.000000000 +0000 @@ -184,9 +184,7 @@ void de_get_extra_cgrps(WRootWin *rootwin, DEStyle *style, ExtlTab tab) { - uint i=0, nfailed=0, n=extl_table_get_n(tab); - char *name; ExtlTab sub; if(n==0) @@ -293,7 +291,6 @@ static bool filter_extras_iter_fn(ExtlAny k, ExtlAny v, void *p) { ExtlTab *tgt=(ExtlTab*)p; - const char *s; int i; if(k.type!='s' && k.type!='S') @@ -361,9 +358,7 @@ bool de_defstyle_rootwin(WRootWin *rootwin, const char *name, ExtlTab tab) { DEStyle *style, *based_on=NULL; - int based_on_score=-1; char *fnt, *bss; - uint n; if(name==NULL) return FALSE; diff -Nru notion-3+2014010901/de/Makefile notion-3+2015061300/de/Makefile --- notion-3+2014010901/de/Makefile 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/de/Makefile 2015-06-13 14:37:26.000000000 +0000 @@ -23,4 +23,6 @@ ###################################### +init.o: exports.h + _install: module_install diff -Nru notion-3+2014010901/de/style.c notion-3+2015061300/de/style.c --- notion-3+2014010901/de/style.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/de/style.c 2015-06-13 14:37:26.000000000 +0000 @@ -29,7 +29,6 @@ { XGCValues gcv; ulong gcvmask; - GC gc; /* Create normal gc */ gcv.line_style=LineSolid; diff -Nru notion-3+2014010901/debian/changelog notion-3+2015061300/debian/changelog --- notion-3+2014010901/debian/changelog 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/changelog 2016-07-15 06:07:51.000000000 +0000 @@ -1,3 +1,35 @@ +notion (3+2015061300-2) unstable; urgency=medium + + * Fixed dh_install rules to work properly with arch:all-only and + arch:any-only builds. Thanks to Santiago Vila for the patch. + (Closes: #830577, #830848) + + -- Dima Kogan Thu, 14 Jul 2016 23:06:27 -0700 + +notion (3+2015061300-1) unstable; urgency=medium + + * New upstream version + - Bugfixes + - seldomly triggered crash in memory pool + - save the session atomically + - various fixes to contributed scripts, notably more lua5.2 support + + - Improvements + - 'windows' key is now the default META key + - various code cleanups + - various build/packaging improvements + - improved kludges/focus behavior (IntelliJ IDEA, xeyes) + - expose 'warp_pointer' to lua + - lock using i3lock when available + + - Features + - Workspace indicator + - Delayed population of the focuslist + + * Simplified package build and moved to debhelper 9 + + -- Dima Kogan Tue, 24 Nov 2015 19:55:15 -0800 + notion (3+2014010901-1) unstable; urgency=medium * New upstream version diff -Nru notion-3+2014010901/debian/compat notion-3+2015061300/debian/compat --- notion-3+2014010901/debian/compat 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/compat 2016-07-15 04:12:02.000000000 +0000 @@ -1 +1 @@ -7 +9 diff -Nru notion-3+2014010901/debian/control notion-3+2015061300/debian/control --- notion-3+2014010901/debian/control 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/control 2016-07-15 05:59:12.000000000 +0000 @@ -2,9 +2,9 @@ Section: non-free/x11 Priority: extra Maintainer: Arnout Engelen -Uploaders: Dima Kogan +Uploaders: Dima Kogan Standards-Version: 3.9.5 -Build-Depends: debhelper (>= 7), pkg-config, lua5.2, liblua5.2-dev, libx11-dev, libxext-dev, libsm-dev, libxinerama-dev, libxrandr-dev +Build-Depends: debhelper (>= 9), pkg-config, lua5.2, liblua5.2-dev, libx11-dev, libxext-dev, libsm-dev, libxinerama-dev, libxrandr-dev XS-Autobuild: yes Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/notion.git Vcs-Git: git://anonscm.debian.org/collab-maint/notion.git @@ -14,8 +14,8 @@ Architecture: any Depends: ${misc:Depends}, ${shlibs:Depends}, xterm | x-terminal-emulator, x11-utils Recommends: xfonts-75dpi | xfonts-75dpi-transcoded | xfonts-100dpi | xfonts-100dpi-transcoded, libxrandr2, libxinerama1 -Suggests: menu (>= 2.1.9), docker, notion-doc, notion-scripts -Provides: x-window-manager, notion-api-${Notion:ApiVersion} +Suggests: menu (>= 2.1.9), docker +Provides: x-window-manager, notion-api-${source:Upstream-Version} Replaces: particleman Description: tiling tabbed window manager designed for keyboard users Notion divides the screen into tiles and places windows in these tiles diff -Nru notion-3+2014010901/debian/default/notion notion-3+2015061300/debian/default/notion --- notion-3+2014010901/debian/default/notion 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/default/notion 2016-07-15 04:12:02.000000000 +0000 @@ -1,2 +1,2 @@ -META="Mod1+" +META="Mod4+" ALTMETA="" diff -Nru notion-3+2014010901/debian/ion_NEWS notion-3+2015061300/debian/ion_NEWS --- notion-3+2014010901/debian/ion_NEWS 1970-01-01 00:00:00.000000000 +0000 +++ notion-3+2015061300/debian/ion_NEWS 2016-07-15 04:12:02.000000000 +0000 @@ -0,0 +1,186 @@ +ion3 (20070506-1) unstable; urgency=low + + Ion3 is now in the non-free section due to a trademark claim and + conditions on the use of its name. + + The change in behaviour of the frame context menu in 20070318 has + been reverted. + + Other significant changes are listed in RELNOTES.gz. + + -- Ben Hutchings Wed, 16 May 2007 23:54:29 +0100 + +ion3 (20070318-1) unstable; urgency=low + + * The context menu for a frame now affects the current window, not + the window whose tab the pointer was over when it opened. For + example, you cannot close a window that is not being displayed by + opening a context menu over its tab. That will close the current + window instead. + + * There is a new configuration file cfg_defaults.lua which loads the + default set of modules and other configuration files. This means + cfg_ion.lua can easily and safely be customised so long as it + calls do_path("cfg_defaults"). cfg_user.lua is now considered + obsolete, though it is still loaded if present. + + * Various backward compatibility code has been removed. This may + require changes to custom scripts. + + * Other significant changes are listed in RELNOTES.gz. + + -- Ben Hutchings Sun, 25 Mar 2007 22:45:52 +0100 + +ion3 (20070203-1) experimental; urgency=low + + * There's been changes in padding/spacing usage in styles. Frames + now surround stuff inside borders not with `spacing` pixels, but + with `padding_pixels`. Spacing is only used to space things within + the borders (all the tabs and the client window from each other). + Consequently, custom styles may need to be updated to reflect this, + by increasing the padding, possibly also altering/removing colour + (to set it to background colour). + + * The use of drawing engine attributes has also changed, and strict + ordering of them in the styles is no longer necessary. Additionally, + much more attributes are supported, including the name of every + statusbar meter. + + * Xinerama support is gone. In addition to being problematic as such, + it had bit-rotted, and I will not waste time fixing it. + + * `ioncore.set` no longer supports the `default_ws_params^N parameter + for configuring the default layout. It is replaced by + `ioncore.deflayout("default", { ... })`, which allows configuring + other layouts as well, known by `mod_query.query_workspace` (F9). + Some default layouts are configured in `cfg_layout.lua`. + + * It is now possible to automatically create new workspaces for + windows with the `new_group` winprop. + + -- Norbert Tretkowski Sat, 3 Feb 2007 16:19:24 +0100 + +ion3 (20061029-1) unstable; urgency=low + + Mostly this release still fixes issues in the big 3ds-20061015 release, + but in addition there are some improvements in the query department: + + * Query activation key now cycles completions (So e.g. the + in the context menu activated with META+M, this same key + can be used to cycle through the alternatives.) This does + not work for queries activated by submap bindings. + + * Likewise, it is no longer necessary to specify the key to + use for cycling for `mod_menu.grabmenu`. + + * Control+R can now be used for history completion in queries. + (Currently matching is done for full string up to 'point', but + this may be changed to substring match.) + + * Note that the parametrisation of WEdln.complete has changed, + and the second cycle parameter must be 'next' now instead of + `true`. + + -- Norbert Tretkowski Sun, 29 Oct 2006 10:50:06 +0100 + +ion3 (20061020-1) unstable; urgency=low + + Fixes some (expected, but minor) issues in the previous release. + + -- Norbert Tretkowski Mon, 23 Oct 2006 20:01:47 +0200 + +ion3 (20061015-1) unstable; urgency=low + + * WIonWS and WFloatWS and the corresponding modules are also gone, and + your custom configuration files will be broken with regard to these. + However, a partial backwards compatibility hack exists for layout + savefiles. + + The F9 and META-F9 bindings now by default create workspaces with + a tiled layout of two frames. To create an "empty" workspace, + corresponding to the old WFloatWS, use the context menu (META-M) + and chose "new-empty-workspace". It is also possible to change + the default layout. + + * Note that if you restart from an old version to this new version of Ion, + transients will stop working as expected for already existing windows. + They will work for newly-created windows, however. + + * There are a few new sets of binding (including one for ^WClientWin!), + and some old bindings may not work exactly as expected anymore. In + particular, those for switching to full-screen mode. + + ** + It is probably best to start from scratch with your custom bindings. + ** + + * ^WFrame.set_tabbar is gone. If you absolutely want to get rid off + the tabs, you must change the frame's "mode" with ^WFrame.set_mode. + The mode "tiled-alt" has been intended for this, and the corresponding + "framed-tiled-alt" style defaults to ^Bar = "none". + + * The rather popular ^Detach.lua script from the scripts repository + is obsoleted now, as Ion includes detach functionality in itself. + To detach a window, use META-K D in the default bindings. To tile + an existing from an a workspace that doesn't have a tiling yet, + use META-K B. + + -- Norbert Tretkowski Tue, 17 Oct 2006 18:08:45 +0200 + +ion3 (20060317-1) unstable; urgency=low + + * Changes in the set of configuration files. + + - cfg_ion.lua now simply load cfg_ioncore.lua and cfg_modules.lua + with the default set of modules, and includes some of the most + commonly changed options commented-out. This deprecates cfg_user.lua + - cfg_menus.lua and cfg_bindings.lua are now cfg_ioncore.lua. This + better matches how things for different modules are in their own + files. + + -- Norbert Tretkowski Fri, 17 Mar 2006 21:57:14 +0100 + +ion3 (20060305-1) unstable; urgency=low + + * The scrachpad class was removed. The scratchpad is just a normal frame + now, with a few special attributes. Your scratchpad configuration from + the layout savefile will be lost (and complained of). A new one should + open with the toggle key. + + * There's generic size policy code that both mplexes and client windows + use (for transients). The default size policy for (framed) transients + keeps them glued to the borders they're touching even if the parent or + they themselves are resized (unless this could not be done because a + small size and position are requested). + + -- Norbert Tretkowski Mon, 6 Mar 2006 17:26:47 +0100 + +ion3 (20050322-1) unstable; urgency=low + + * Those with custom configuration files should note that many exported toggle + functions were changed and renamed, and now accept a string parameter + incidating whether to toggle, set or unset the property. + + - WClientwin.set_fullsreen (replaces WClientWin.toggle_fullscreen) + - WRegion.set_tagged (replaces WRegion.tag/untag/toggle_tag) + - WFrame.set_tabbar (replaces WFrame.toggle_tabbar) + - WFrame.set_shaded (replaces WFrame.toggle_shade) + - WFloatFrame.set_sticky (replaces WFloatFrame.toggle_sticky) + - WMPlex.l2_set_hidden (replaces WMPlex.l2_hide/show) + - mod_sp.set_shown(_on) (replaces mod_sp.toggle(_on)) + - mod_dock.set_floating_shown_on (replaces mod_dock.toggle_floating_on) + - WRegion.set_activity (replaces WRegion.clear_activity and + WRegion.notify_activity) + + For example, WRegion.set_tagged(_, 'toggle') should be used in place of + WRegion.toggle_tagged(_) now. + + -- Norbert Tretkowski Tue, 22 Mar 2005 17:24:35 +0100 + +ion3 (20041104-1) unstable; urgency=low + + * The configuration files were renamed and changed a lot since 20040703-1, + please read /usr/share/doc/ion3/RELNOTES.gz and remember that this is a + development snapshot before reporting bugs. + + -- Norbert Tretkowski Sun, 05 Dec 2004 18:31:23 +0100 diff -Nru notion-3+2014010901/debian/NEWS notion-3+2015061300/debian/NEWS --- notion-3+2014010901/debian/NEWS 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/NEWS 1970-01-01 00:00:00.000000000 +0000 @@ -1,186 +0,0 @@ -ion3 (20070506-1) unstable; urgency=low - - Ion3 is now in the non-free section due to a trademark claim and - conditions on the use of its name. - - The change in behaviour of the frame context menu in 20070318 has - been reverted. - - Other significant changes are listed in RELNOTES.gz. - - -- Ben Hutchings Wed, 16 May 2007 23:54:29 +0100 - -ion3 (20070318-1) unstable; urgency=low - - * The context menu for a frame now affects the current window, not - the window whose tab the pointer was over when it opened. For - example, you cannot close a window that is not being displayed by - opening a context menu over its tab. That will close the current - window instead. - - * There is a new configuration file cfg_defaults.lua which loads the - default set of modules and other configuration files. This means - cfg_ion.lua can easily and safely be customised so long as it - calls do_path("cfg_defaults"). cfg_user.lua is now considered - obsolete, though it is still loaded if present. - - * Various backward compatibility code has been removed. This may - require changes to custom scripts. - - * Other significant changes are listed in RELNOTES.gz. - - -- Ben Hutchings Sun, 25 Mar 2007 22:45:52 +0100 - -ion3 (20070203-1) experimental; urgency=low - - * There's been changes in padding/spacing usage in styles. Frames - now surround stuff inside borders not with `spacing` pixels, but - with `padding_pixels`. Spacing is only used to space things within - the borders (all the tabs and the client window from each other). - Consequently, custom styles may need to be updated to reflect this, - by increasing the padding, possibly also altering/removing colour - (to set it to background colour). - - * The use of drawing engine attributes has also changed, and strict - ordering of them in the styles is no longer necessary. Additionally, - much more attributes are supported, including the name of every - statusbar meter. - - * Xinerama support is gone. In addition to being problematic as such, - it had bit-rotted, and I will not waste time fixing it. - - * `ioncore.set` no longer supports the `default_ws_params^N parameter - for configuring the default layout. It is replaced by - `ioncore.deflayout("default", { ... })`, which allows configuring - other layouts as well, known by `mod_query.query_workspace` (F9). - Some default layouts are configured in `cfg_layout.lua`. - - * It is now possible to automatically create new workspaces for - windows with the `new_group` winprop. - - -- Norbert Tretkowski Sat, 3 Feb 2007 16:19:24 +0100 - -ion3 (20061029-1) unstable; urgency=low - - Mostly this release still fixes issues in the big 3ds-20061015 release, - but in addition there are some improvements in the query department: - - * Query activation key now cycles completions (So e.g. the - in the context menu activated with META+M, this same key - can be used to cycle through the alternatives.) This does - not work for queries activated by submap bindings. - - * Likewise, it is no longer necessary to specify the key to - use for cycling for `mod_menu.grabmenu`. - - * Control+R can now be used for history completion in queries. - (Currently matching is done for full string up to 'point', but - this may be changed to substring match.) - - * Note that the parametrisation of WEdln.complete has changed, - and the second cycle parameter must be 'next' now instead of - `true`. - - -- Norbert Tretkowski Sun, 29 Oct 2006 10:50:06 +0100 - -ion3 (20061020-1) unstable; urgency=low - - Fixes some (expected, but minor) issues in the previous release. - - -- Norbert Tretkowski Mon, 23 Oct 2006 20:01:47 +0200 - -ion3 (20061015-1) unstable; urgency=low - - * WIonWS and WFloatWS and the corresponding modules are also gone, and - your custom configuration files will be broken with regard to these. - However, a partial backwards compatibility hack exists for layout - savefiles. - - The F9 and META-F9 bindings now by default create workspaces with - a tiled layout of two frames. To create an "empty" workspace, - corresponding to the old WFloatWS, use the context menu (META-M) - and chose "new-empty-workspace". It is also possible to change - the default layout. - - * Note that if you restart from an old version to this new version of Ion, - transients will stop working as expected for already existing windows. - They will work for newly-created windows, however. - - * There are a few new sets of binding (including one for ^WClientWin!), - and some old bindings may not work exactly as expected anymore. In - particular, those for switching to full-screen mode. - - ** - It is probably best to start from scratch with your custom bindings. - ** - - * ^WFrame.set_tabbar is gone. If you absolutely want to get rid off - the tabs, you must change the frame's "mode" with ^WFrame.set_mode. - The mode "tiled-alt" has been intended for this, and the corresponding - "framed-tiled-alt" style defaults to ^Bar = "none". - - * The rather popular ^Detach.lua script from the scripts repository - is obsoleted now, as Ion includes detach functionality in itself. - To detach a window, use META-K D in the default bindings. To tile - an existing from an a workspace that doesn't have a tiling yet, - use META-K B. - - -- Norbert Tretkowski Tue, 17 Oct 2006 18:08:45 +0200 - -ion3 (20060317-1) unstable; urgency=low - - * Changes in the set of configuration files. - - - cfg_ion.lua now simply load cfg_ioncore.lua and cfg_modules.lua - with the default set of modules, and includes some of the most - commonly changed options commented-out. This deprecates cfg_user.lua - - cfg_menus.lua and cfg_bindings.lua are now cfg_ioncore.lua. This - better matches how things for different modules are in their own - files. - - -- Norbert Tretkowski Fri, 17 Mar 2006 21:57:14 +0100 - -ion3 (20060305-1) unstable; urgency=low - - * The scrachpad class was removed. The scratchpad is just a normal frame - now, with a few special attributes. Your scratchpad configuration from - the layout savefile will be lost (and complained of). A new one should - open with the toggle key. - - * There's generic size policy code that both mplexes and client windows - use (for transients). The default size policy for (framed) transients - keeps them glued to the borders they're touching even if the parent or - they themselves are resized (unless this could not be done because a - small size and position are requested). - - -- Norbert Tretkowski Mon, 6 Mar 2006 17:26:47 +0100 - -ion3 (20050322-1) unstable; urgency=low - - * Those with custom configuration files should note that many exported toggle - functions were changed and renamed, and now accept a string parameter - incidating whether to toggle, set or unset the property. - - - WClientwin.set_fullsreen (replaces WClientWin.toggle_fullscreen) - - WRegion.set_tagged (replaces WRegion.tag/untag/toggle_tag) - - WFrame.set_tabbar (replaces WFrame.toggle_tabbar) - - WFrame.set_shaded (replaces WFrame.toggle_shade) - - WFloatFrame.set_sticky (replaces WFloatFrame.toggle_sticky) - - WMPlex.l2_set_hidden (replaces WMPlex.l2_hide/show) - - mod_sp.set_shown(_on) (replaces mod_sp.toggle(_on)) - - mod_dock.set_floating_shown_on (replaces mod_dock.toggle_floating_on) - - WRegion.set_activity (replaces WRegion.clear_activity and - WRegion.notify_activity) - - For example, WRegion.set_tagged(_, 'toggle') should be used in place of - WRegion.toggle_tagged(_) now. - - -- Norbert Tretkowski Tue, 22 Mar 2005 17:24:35 +0100 - -ion3 (20041104-1) unstable; urgency=low - - * The configuration files were renamed and changed a lot since 20040703-1, - please read /usr/share/doc/ion3/RELNOTES.gz and remember that this is a - development snapshot before reporting bugs. - - -- Norbert Tretkowski Sun, 05 Dec 2004 18:31:23 +0100 diff -Nru notion-3+2014010901/debian/NEWS.Debian notion-3+2015061300/debian/NEWS.Debian --- notion-3+2014010901/debian/NEWS.Debian 1970-01-01 00:00:00.000000000 +0000 +++ notion-3+2015061300/debian/NEWS.Debian 2016-07-15 04:12:02.000000000 +0000 @@ -0,0 +1,17 @@ +notion (3+2015061300-1) unstable; urgency=medium + + * The default META key has been changed from Mod1 ("Alt" on usual + keyboards) to Mod4 ("Windows" on usual keyboards). This cleanly + resolves a potential conflict between window manager bindings (all use + the "Windows" key) and applications (all use the "Alt" key). If you + were using the default without explicitly setting it AND you want to + stick with the previous setting, you MUST now add + + META="Mod1+" + + somewhere in your configuration. The configuration lives in ~/.notion + or if it isn't found there, in /etc/X11/notion. A reasonable place to + make this change is cfg_notion.lua or /etc/default/notion. + + -- Dima Kogan Tue, 24 Nov 2015 23:32:23 -0800 + diff -Nru notion-3+2014010901/debian/notion.docs notion-3+2015061300/debian/notion.docs --- notion-3+2014010901/debian/notion.docs 1970-01-01 00:00:00.000000000 +0000 +++ notion-3+2015061300/debian/notion.docs 2016-07-15 04:12:02.000000000 +0000 @@ -0,0 +1,5 @@ +README +ion_changelog.txt +debian/ion_NEWS +debian/README.Debian +debian/NEWS.Debian diff -Nru notion-3+2014010901/debian/notion.install notion-3+2015061300/debian/notion.install --- notion-3+2014010901/debian/notion.install 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/notion.install 2016-07-15 04:12:02.000000000 +0000 @@ -1,3 +1,9 @@ debian/notion.desktop usr/share/xsessions debian/default etc debian/install-notion-cfg usr/sbin + +debian/tmp/usr/bin/* +debian/tmp/usr/lib/* +debian/tmp/usr/share/notion/* +debian/tmp/usr/share/locale/* +debian/tmp/etc/* diff -Nru notion-3+2014010901/debian/notion.manpages notion-3+2015061300/debian/notion.manpages --- notion-3+2014010901/debian/notion.manpages 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/notion.manpages 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -man/notion.1 -man/notionflux.1 -debian/install-notion-cfg.1 diff -Nru notion-3+2014010901/debian/notion.postinst notion-3+2015061300/debian/notion.postinst --- notion-3+2014010901/debian/notion.postinst 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/notion.postinst 2016-07-15 04:12:02.000000000 +0000 @@ -1,21 +1,11 @@ #!/bin/sh set -e -. /usr/share/debconf/confmodule - -UPSTREAM_VERSION= -DEBIAN_VERSION= update-alternatives --install \ /usr/bin/x-window-manager x-window-manager /usr/bin/notion 49 \ --slave /usr/share/man/man1/x-window-manager.1.gz x-window-manager.1.gz \ /usr/share/man/man1/notion.1.gz -# i18n menu method -inst=/etc/menu-methods/notion-i18n -if [ -f $inst ]; then - chmod a+x $inst -fi - # Initialise extra configuration file list if missing [ -f /etc/X11/notion/cfg_debian_ext.lua ] || >/etc/X11/notion/cfg_debian_ext.lua diff -Nru notion-3+2014010901/debian/notion.README.Debian notion-3+2015061300/debian/notion.README.Debian --- notion-3+2014010901/debian/notion.README.Debian 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/notion.README.Debian 1970-01-01 00:00:00.000000000 +0000 @@ -1,78 +0,0 @@ -Notion -====== - -Notion is now considered stable, but there have been substantial changes -from earlier development snapshots. - -Instructions for using Notion can be found in the manual page ("man -notion"). Additional documentation is included in the notion-doc package: -"Configuring and extending Notion with Lua" and "Notion: Notes for the -module and patch writer". - -Some scripts extending Notion are available in the notion-scripts package - -Docks and system trays ----------------------- - -Notion is compatible with the docking protocols used by WindowMaker and -KDE. It can place docked applications windows either in a corner -dock, or in a "system tray" in the status bar. - -For a corner dock, add: - - dopath("mod_dock") - -to cfg_notion.lua or cfg_modules.lua and edit cfg_dock.lua to your -preferences. The dock window's visibility can be toggled using -MOD1+D. - -For a system tray, edit cfg_statusbar.lua to include: - - mod_statusbar.create { - ... - systray=true, - template="... %systray" - } - -You can also configure specific windows to appear in the status bar: - - -- In cfg_notion.lua: - defwinprop { - class = "foo-window-class", - statusbar = "foo" - } - - -- In cfg_status_bar.lua: - mod_statusbar.create { - ... - template="... %systray_foo" - } - -GNOME unfortunately uses a different dock protocol. However, the -docker program can adapt from this to the WindowMaker protocol. So you -can include a GNOME system tray in your status bar by including docker -in your X session and this in your Notion configuration: - - -- In cfg_notion.lua: - defwinprop { - class = "Docker", - statusbar = "dock" - } - - -- In cfg_statusbar.lua: - mod_statusbar.create { - ... - template="... %systray_dock" - } - -Adding configuration files to the defaults ------------------------------------------- - -Notion extension packages may add and remove configuration files to -those included by cfg_defaults.lua. The configuration files must be -installed under /etc/X11/notion. Run "install-notion-cfg cfg_foo" in the -postinst script to add the configuration file -/etc/X11/notion/cfg_foo.lua. Run "install-notion-cfg --remove cfg_foo" in -the prerm script to remove it. - - -- Ben Hutchings Thu, 07 Feb 2008 20:35:27 +0000 diff -Nru notion-3+2014010901/debian/patches/0001-201_build-config.patch notion-3+2015061300/debian/patches/0001-201_build-config.patch --- notion-3+2014010901/debian/patches/0001-201_build-config.patch 1970-01-01 00:00:00.000000000 +0000 +++ notion-3+2015061300/debian/patches/0001-201_build-config.patch 2016-07-15 04:12:02.000000000 +0000 @@ -0,0 +1,45 @@ +From: Arnout Engelen +Date: Fri, 30 Oct 2015 18:58:59 -0700 +Subject: 201_build-config + +Build options suitable for installation from the official package on Debian +--- + system-autodetect.mk | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/system-autodetect.mk b/system-autodetect.mk +index e8abc54..c5a89cc 100644 +--- a/system-autodetect.mk ++++ b/system-autodetect.mk +@@ -12,7 +12,7 @@ PKG_CONFIG ?= pkg-config + # Installation path prefix. Unless you know what you're doing, the default + # of /usr/local is likely the correct choice. + #DIST: PREFIX=/usr/local +-PREFIX ?= /usr/local ++PREFIX ?= /usr + + # Unless you are creating a package conforming to some OS's standards, you + # probably do not want to modify the following directories: +@@ -28,11 +28,11 @@ DOCDIR=$(PREFIX)/share/doc/notion + # Nothing at the moment + LIBDIR=$(PREFIX)/lib + # Modules +-MODULEDIR=$(LIBDIR)/notion/mod ++MODULEDIR=$(LIBDIR)/notion + # Compiled Lua source code + LCDIR=$(LIBDIR)/notion/lc + # ion-completefile (does not belong in SHAREDIR being a binary file) +-EXTRABINDIR=$(LIBDIR)/notion/bin ++EXTRABINDIR=$(LIBDIR)/notion + # For notion-completeman system-wide cache + VARDIR=/var/cache/notion + # Message catalogs +@@ -40,7 +40,7 @@ LOCALEDIR=$(PREFIX)/share/locale + + # Configuration .lua files. Overrideable, as config files are usually + # not placed under $(PREFIX). +-ETCDIR ?= $(PREFIX)/etc/notion ++ETCDIR ?= /etc/X11/notion + + # Force all include files to be installed to /usr even if the + # PREFIX is unset. No header files are installed at the moment diff -Nru notion-3+2014010901/debian/patches/0002-206_use-x-terminal-emulator.patch notion-3+2015061300/debian/patches/0002-206_use-x-terminal-emulator.patch --- notion-3+2014010901/debian/patches/0002-206_use-x-terminal-emulator.patch 1970-01-01 00:00:00.000000000 +0000 +++ notion-3+2015061300/debian/patches/0002-206_use-x-terminal-emulator.patch 2016-07-15 04:12:02.000000000 +0000 @@ -0,0 +1,51 @@ +From: Arnout Engelen +Date: Fri, 30 Oct 2015 18:58:59 -0700 +Subject: 206_use-x-terminal-emulator + +Use x-terminal-emulator as the default terminal emulator +--- + etc/cfg_notioncore.lua | 9 ++++----- + utils/ion-runinxterm | 2 +- + 2 files changed, 5 insertions(+), 6 deletions(-) + +diff --git a/etc/cfg_notioncore.lua b/etc/cfg_notioncore.lua +index f3752cd..650bded 100644 +--- a/etc/cfg_notioncore.lua ++++ b/etc/cfg_notioncore.lua +@@ -152,11 +152,10 @@ defbindings("WMPlex.toplevel", { + kpress(META.."F1", "ioncore.exec_on(_, ':man notion')"), + + bdoc("Run a terminal emulator."), +- kpress(ALTMETA.."F2", "mod_query.exec_on_merr(_, XTERM or 'xterm')"), +- ++ kpress(ALTMETA.."F2", "mod_query.exec_on_merr(_, XTERM or 'x-terminal-emulator')"), ++ + bdoc("Query for command line to execute."), + kpress(ALTMETA.."F3", "mod_query.query_exec(_)"), +- + bdoc("Query for Lua code to execute."), + kpress(META.."F3", "mod_query.query_lua(_)"), + +@@ -341,8 +340,8 @@ defbindings("WMoveresMode", { + -- Main menu + defmenu("mainmenu", { + menuentry("Run...", "mod_query.query_exec(_)"), +- menuentry("Terminal", "mod_query.exec_on_merr(_, XTERM or 'xterm')"), +- menuentry("Lock screen", ++ menuentry("Terminal", "mod_query.exec_on_merr(_, XTERM or 'x-terminal-emulator')"), ++ menuentry("Lock screen", + "notioncore.exec_on(_, notioncore.lookup_script('notion-lock'))"), + menuentry("Help", "mod_query.query_man(_)"), + menuentry("About Notion", "mod_query.show_about_ion(_)"), +diff --git a/utils/ion-runinxterm b/utils/ion-runinxterm +index fc16dac..b0aa3a5 100755 +--- a/utils/ion-runinxterm ++++ b/utils/ion-runinxterm +@@ -1,6 +1,6 @@ + #!/bin/sh + +-test "$XTERMCMD" || XTERMCMD="xterm" ++test "$XTERMCMD" || XTERMCMD="x-terminal-emulator" + + title="" + wait="" diff -Nru notion-3+2014010901/debian/patches/0003-209_use-etc-default.patch notion-3+2015061300/debian/patches/0003-209_use-etc-default.patch --- notion-3+2014010901/debian/patches/0003-209_use-etc-default.patch 1970-01-01 00:00:00.000000000 +0000 +++ notion-3+2015061300/debian/patches/0003-209_use-etc-default.patch 2016-07-15 04:12:02.000000000 +0000 @@ -0,0 +1,24 @@ +From: Arnout Engelen +Date: Fri, 30 Oct 2015 18:58:59 -0700 +Subject: 209_use-etc-default + +Allow for custom configuration in /etc/default/notion +--- + etc/cfg_notion.lua | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/etc/cfg_notion.lua b/etc/cfg_notion.lua +index 22d931a..312aa70 100644 +--- a/etc/cfg_notion.lua ++++ b/etc/cfg_notion.lua +@@ -18,6 +18,10 @@ + -- instead. The 'xmodmap' tool can be used to get/set which key codes correspond + -- to which modifiers, and the 'xev' tool can be used to see what codes are + -- generated by particular keys. ++ ++-- These may be defined in /etc/default/notion, loaded as cfg_debian. ++dopath("cfg_debian") ++ + --META="Mod4+" + --ALTMETA="" + diff -Nru notion-3+2014010901/debian/patches/0004-210_use-cfg_debian_ext.patch notion-3+2015061300/debian/patches/0004-210_use-cfg_debian_ext.patch --- notion-3+2014010901/debian/patches/0004-210_use-cfg_debian_ext.patch 1970-01-01 00:00:00.000000000 +0000 +++ notion-3+2015061300/debian/patches/0004-210_use-cfg_debian_ext.patch 2016-07-15 04:12:02.000000000 +0000 @@ -0,0 +1,20 @@ +From: Arnout Engelen +Date: Fri, 30 Oct 2015 18:58:59 -0700 +Subject: 210_use-cfg_debian_ext + +Allow for extra configuration files +--- + etc/cfg_defaults.lua | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/etc/cfg_defaults.lua b/etc/cfg_defaults.lua +index f2f709c..9ee2932 100644 +--- a/etc/cfg_defaults.lua ++++ b/etc/cfg_defaults.lua +@@ -13,3 +13,6 @@ dopath("mod_statusbar") + dopath("mod_sp") + dopath("mod_notionflux") + dopath("mod_xrandr") ++ ++-- Debian extra configuration files ++dopath("cfg_debian_ext") diff -Nru notion-3+2014010901/debian/patches/0005-211_add-debian-menu.patch notion-3+2015061300/debian/patches/0005-211_add-debian-menu.patch --- notion-3+2014010901/debian/patches/0005-211_add-debian-menu.patch 1970-01-01 00:00:00.000000000 +0000 +++ notion-3+2015061300/debian/patches/0005-211_add-debian-menu.patch 2016-07-15 04:12:02.000000000 +0000 @@ -0,0 +1,37 @@ +From: Arnout Engelen +Date: Fri, 30 Oct 2015 18:58:59 -0700 +Subject: 211_add-debian-menu + +Add a 'Debian' menu populated by the Debian menu system +--- + etc/cfg_notioncore.lua | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/etc/cfg_notioncore.lua b/etc/cfg_notioncore.lua +index 650bded..6ae9323 100644 +--- a/etc/cfg_notioncore.lua ++++ b/etc/cfg_notioncore.lua +@@ -346,6 +346,7 @@ defmenu("mainmenu", { + menuentry("Help", "mod_query.query_man(_)"), + menuentry("About Notion", "mod_query.show_about_ion(_)"), + submenu("Styles", "stylemenu"), ++ submenu("Debian", "Debian"), + submenu("Session", "sessionmenu"), + }) + +@@ -391,3 +392,15 @@ defctxmenu("WGroupWS", "Workspace", { + defctxmenu("WClientWin", "Client window", { + menuentry("Kill", "WClientWin.kill(_)"), + }) ++ ++-- Auto-generated Debian menu definitions ++if os then ++ havemenus = os.execute("test -x /usr/bin/update-menus") ++ if havemenus == 0 or havemenus == true then ++ if ioncore.is_i18n() then ++ dopath("debian-menu-i18n") ++ else ++ dopath("debian-menu") ++ end ++ end ++end diff -Nru notion-3+2014010901/debian/patches/201_build-config.diff notion-3+2015061300/debian/patches/201_build-config.diff --- notion-3+2014010901/debian/patches/201_build-config.diff 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/patches/201_build-config.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -Build options suitable for installation from the official package on Debian ---- a/system-autodetect.mk -+++ b/system-autodetect.mk -@@ -9,7 +9,7 @@ - # Installation path prefix. Unless you know what you're doing, the default - # of /usr/local is likely the correct choice. - #DIST: PREFIX=/usr/local --PREFIX ?= /usr/local -+PREFIX ?= /usr - - # Unless you are creating a package conforming to some OS's standards, you - # probably do not want to modify the following directories: -@@ -25,11 +25,11 @@ - # Nothing at the moment - LIBDIR=$(PREFIX)/lib - # Modules --MODULEDIR=$(LIBDIR)/notion/mod -+MODULEDIR=$(LIBDIR)/notion - # Compiled Lua source code - LCDIR=$(LIBDIR)/notion/lc - # ion-completefile (does not belong in SHAREDIR being a binary file) --EXTRABINDIR=$(LIBDIR)/notion/bin -+EXTRABINDIR=$(LIBDIR)/notion - # For notion-completeman system-wide cache - VARDIR=/var/cache/notion - # Message catalogs -@@ -37,7 +37,7 @@ - - # Configuration .lua files. Overrideable, as config files are usually - # not placed under $(PREFIX). --ETCDIR ?= $(PREFIX)/etc/notion -+ETCDIR ?= /etc/X11/notion - - # Force all include files to be installed to /usr even if the - # PREFIX is unset. No header files are installed at the moment diff -Nru notion-3+2014010901/debian/patches/206_use-x-terminal-emulator.diff notion-3+2015061300/debian/patches/206_use-x-terminal-emulator.diff --- notion-3+2014010901/debian/patches/206_use-x-terminal-emulator.diff 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/patches/206_use-x-terminal-emulator.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -Use x-terminal-emulator as the default terminal emulator ---- a/etc/cfg_notioncore.lua -+++ b/etc/cfg_notioncore.lua -@@ -152,7 +152,7 @@ - kpress(META.."F1", "ioncore.exec_on(_, ':man notion')"), - - bdoc("Run a terminal emulator."), -- kpress(ALTMETA.."F2", "mod_query.exec_on_merr(_, XTERM or 'xterm')"), -+ kpress(ALTMETA.."F2", "mod_query.exec_on_merr(_, XTERM or 'x-terminal-emulator')"), - - bdoc("Query for command line to execute."), - kpress(ALTMETA.."F3", "mod_query.query_exec(_)"), -@@ -341,7 +341,7 @@ - -- Main menu - defmenu("mainmenu", { - menuentry("Run...", "mod_query.query_exec(_)"), -- menuentry("Terminal", "mod_query.exec_on_merr(_, XTERM or 'xterm')"), -+ menuentry("Terminal", "mod_query.exec_on_merr(_, XTERM or 'x-terminal-emulator')"), - menuentry("Lock screen", - "notioncore.exec_on(_, notioncore.lookup_script('notion-lock'))"), - menuentry("Help", "mod_query.query_man(_)"), ---- a/utils/ion-runinxterm -+++ b/utils/ion-runinxterm -@@ -1,6 +1,6 @@ - #!/bin/sh - --test "$XTERMCMD" || XTERMCMD="xterm" -+test "$XTERMCMD" || XTERMCMD="x-terminal-emulator" - - title="" - wait="" diff -Nru notion-3+2014010901/debian/patches/209_use-etc-default.diff notion-3+2015061300/debian/patches/209_use-etc-default.diff --- notion-3+2014010901/debian/patches/209_use-etc-default.diff 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/patches/209_use-etc-default.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -Allow for custom configuration in /etc/default/notion ---- a/etc/cfg_notion.lua -+++ b/etc/cfg_notion.lua -@@ -16,6 +16,8 @@ - -- Set default modifiers. Alt should usually be mapped to Mod1 on - -- XFree86-based systems. The flying window keys are probably Mod3 - -- or Mod4; see the output of 'xmodmap'. -+-- These may be defined in /etc/default/notion, loaded as cfg_debian. -+dopath("cfg_debian") - --META="Mod1+" - --ALTMETA="" - diff -Nru notion-3+2014010901/debian/patches/210_use-cfg_debian_ext.diff notion-3+2015061300/debian/patches/210_use-cfg_debian_ext.diff --- notion-3+2014010901/debian/patches/210_use-cfg_debian_ext.diff 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/patches/210_use-cfg_debian_ext.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -Allow for extra configuration files ---- a/etc/cfg_defaults.lua -+++ b/etc/cfg_defaults.lua -@@ -13,3 +13,6 @@ - dopath("mod_sp") - dopath("mod_notionflux") - dopath("mod_xrandr") -+ -+-- Debian extra configuration files -+dopath("cfg_debian_ext") diff -Nru notion-3+2014010901/debian/patches/211_add-debian-menu.diff notion-3+2015061300/debian/patches/211_add-debian-menu.diff --- notion-3+2014010901/debian/patches/211_add-debian-menu.diff 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/patches/211_add-debian-menu.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -Add a 'Debian' menu populated by the Debian menu system ---- a/etc/cfg_notioncore.lua -+++ b/etc/cfg_notioncore.lua -@@ -347,6 +347,7 @@ - menuentry("Help", "mod_query.query_man(_)"), - menuentry("About Notion", "mod_query.show_about_ion(_)"), - submenu("Styles", "stylemenu"), -+ submenu("Debian", "Debian"), - submenu("Session", "sessionmenu"), - }) - -@@ -392,3 +393,15 @@ - defctxmenu("WClientWin", "Client window", { - menuentry("Kill", "WClientWin.kill(_)"), - }) -+ -+-- Auto-generated Debian menu definitions -+if os then -+ havemenus = os.execute("test -x /usr/bin/update-menus") -+ if havemenus == 0 or havemenus == true then -+ if ioncore.is_i18n() then -+ dopath("debian-menu-i18n") -+ else -+ dopath("debian-menu") -+ end -+ end -+end diff -Nru notion-3+2014010901/debian/patches/212_suggest-notion-doc.diff notion-3+2015061300/debian/patches/212_suggest-notion-doc.diff --- notion-3+2014010901/debian/patches/212_suggest-notion-doc.diff 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/patches/212_suggest-notion-doc.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -Refer users to a notion-doc package rather than the home page ---- a/man/notion.in -+++ b/man/notion.in -@@ -151,8 +151,8 @@ - .SH SEE ALSO - The Notion home page, \fIhttp://notion.sf.net/\fP - .PP --The document "Configuring and extending Notion with Lua" found on the --Notion home page. -+The document "Configuring and extending Notion with Lua" found in the -+notion-doc package. - .PP - .I DOCDIR/ - .PP ---- a/man/welcome.head -+++ b/man/welcome.head -@@ -14,11 +14,10 @@ - accessed with . - - When you feel ready to write customized configuration files (you're going --to do that in any case), please see the configuration manual available from --the Notion webpage listed at the end of the user manual below. It may, however, --be beneficial to become well acquainted with Notion before delving into this --so that you have grasped the basic concepts necessary to understand the --binding configuration files. -+to do that in any case), please see the configuration manual available in -+the notion-doc package. It may, however, be beneficial to become well -+acquainted with Notion before delving into this so that you have grasped the -+basic concepts necessary to understand the binding configuration files. - - - ---- Manual page follows ---- diff -Nru notion-3+2014010901/debian/patches/216_hardening-flags.diff notion-3+2015061300/debian/patches/216_hardening-flags.diff --- notion-3+2014010901/debian/patches/216_hardening-flags.diff 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/patches/216_hardening-flags.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -Use dpkg-buildflags, which introduces hardening/fortify flags. - -Note that lintian still complains some .so's are not fortified, but it looks -like this is a false positive. - -This should eventually make its way in the default build procedure. ---- a/system-autodetect.mk -+++ b/system-autodetect.mk -@@ -154,9 +154,10 @@ - -Wparentheses -pedantic -Wuninitialized - - CFLAGS += -Os $(WARN) $(DEFINES) $(INCLUDES) $(EXTRA_INCLUDES) \ -- -DHAS_SYSTEM_ASPRINTF=$(HAS_SYSTEM_ASPRINTF) -+ -DHAS_SYSTEM_ASPRINTF=$(HAS_SYSTEM_ASPRINTF) \ -+ $(shell dpkg-buildflags --get CFLAGS) $(shell dpkg-buildflags --get CPPFLAGS) - --LDFLAGS += -Wl,--as-needed $(LIBS) $(EXTRA_LIBS) -+LDFLAGS += -Wl,--as-needed $(LIBS) $(EXTRA_LIBS) $(shell dpkg-buildflags --get LDFLAGS) - EXPORT_DYNAMIC=-Xlinker --export-dynamic - - # The following options are mainly for development use and can be used diff -Nru notion-3+2014010901/debian/patches/218_drop_changelog.diff notion-3+2015061300/debian/patches/218_drop_changelog.diff --- notion-3+2014010901/debian/patches/218_drop_changelog.diff 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/patches/218_drop_changelog.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -Don't include the empty upstream changelog. ---- a/Makefile -+++ b/Makefile -@@ -16,7 +16,7 @@ - - SUBDIRS = $(LIBS_SUBDIRS) $(INSTALL_SUBDIRS) - --DOCS = README LICENSE ChangeLog RELNOTES -+DOCS = README LICENSE RELNOTES - - TO_REALCLEAN = build/ac/system-ac.mk - diff -Nru notion-3+2014010901/debian/patches/series notion-3+2015061300/debian/patches/series --- notion-3+2014010901/debian/patches/series 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/patches/series 2016-07-15 04:12:02.000000000 +0000 @@ -1,8 +1,5 @@ -201_build-config.diff -206_use-x-terminal-emulator.diff -209_use-etc-default.diff -210_use-cfg_debian_ext.diff -211_add-debian-menu.diff -212_suggest-notion-doc.diff -216_hardening-flags.diff -218_drop_changelog.diff +0001-201_build-config.patch +0002-206_use-x-terminal-emulator.patch +0003-209_use-etc-default.patch +0004-210_use-cfg_debian_ext.patch +0005-211_add-debian-menu.patch diff -Nru notion-3+2014010901/debian/README.Debian notion-3+2015061300/debian/README.Debian --- notion-3+2014010901/debian/README.Debian 1970-01-01 00:00:00.000000000 +0000 +++ notion-3+2015061300/debian/README.Debian 2016-07-15 04:12:02.000000000 +0000 @@ -0,0 +1,74 @@ +Notion +====== + +Notion is now considered stable, but there have been substantial changes +from earlier development snapshots. + +Instructions for using Notion can be found in the manual page ("man +notion"). + +Docks and system trays +---------------------- + +Notion is compatible with the docking protocols used by WindowMaker and +KDE. It can place docked applications windows either in a corner +dock, or in a "system tray" in the status bar. + +For a corner dock, add: + + dopath("mod_dock") + +to cfg_notion.lua or cfg_modules.lua and edit cfg_dock.lua to your +preferences. The dock window's visibility can be toggled using +MOD1+D. + +For a system tray, edit cfg_statusbar.lua to include: + + mod_statusbar.create { + ... + systray=true, + template="... %systray" + } + +You can also configure specific windows to appear in the status bar: + + -- In cfg_notion.lua: + defwinprop { + class = "foo-window-class", + statusbar = "foo" + } + + -- In cfg_status_bar.lua: + mod_statusbar.create { + ... + template="... %systray_foo" + } + +GNOME unfortunately uses a different dock protocol. However, the +docker program can adapt from this to the WindowMaker protocol. So you +can include a GNOME system tray in your status bar by including docker +in your X session and this in your Notion configuration: + + -- In cfg_notion.lua: + defwinprop { + class = "Docker", + statusbar = "dock" + } + + -- In cfg_statusbar.lua: + mod_statusbar.create { + ... + template="... %systray_dock" + } + +Adding configuration files to the defaults +------------------------------------------ + +Notion extension packages may add and remove configuration files to +those included by cfg_defaults.lua. The configuration files must be +installed under /etc/X11/notion. Run "install-notion-cfg cfg_foo" in the +postinst script to add the configuration file +/etc/X11/notion/cfg_foo.lua. Run "install-notion-cfg --remove cfg_foo" in +the prerm script to remove it. + + -- Ben Hutchings Thu, 07 Feb 2008 20:35:27 +0000 diff -Nru notion-3+2014010901/debian/rules notion-3+2015061300/debian/rules --- notion-3+2014010901/debian/rules 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/rules 2016-07-15 04:15:11.000000000 +0000 @@ -1,151 +1,45 @@ #!/usr/bin/make -f +# -*- makefile -*- -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 +%: + dh $@ -export SHELL=/bin/bash +# The upstream Makefiles do not look at CPPFLAGS. They should, and this should +# be unnecessary +override_dh_auto_build: + CFLAGS="$(CFLAGS) $(CPPFLAGS)" dh_auto_build + +override_dh_installman-arch: + for langdir in debian/tmp/usr/share/man/*; do \ + lang=`basename $$langdir`; \ + test $$lang = "man1" || dh_installman --language $$lang debian/tmp/usr/share/man/$$lang/man1/*; \ + done + dh_installman --language C debian/tmp/usr/share/man/man1/* debian/install-notion-cfg.1 + +# I disable tests because these fail in multiple ways. The previous package +# didn't run the tests anyway +override_dh_auto_test: + true + +override_dh_installmenu-arch: + dh_installmenu + install -m644 debian/notion.menu-method.i18n \ + debian/notion/etc/menu-methods/notion-i18n -PACKAGE := $(shell dpkg-parsechangelog | sed -r 's/^Source: //; t; d') -PACKAGE_DEV := $(PACKAGE)-dev -INSTDIR := debian/$(PACKAGE) -INSTDIR_DEV := debian/$(PACKAGE_DEV) -DEBIAN_VERSION := $(shell dpkg-parsechangelog | sed -r 's/^Version: //; t; d') -UPSTREAM_VERSION := $(shell echo $(DEBIAN_VERSION) | sed -r 's/^[0-9]*://; s/-[^-]*$$//') +override_dh_install-indep: + dh_install -build-indep: build-indep-stamp -build-indep-stamp: - dh_testdir - - cd libextl && $(MAKE) libextl-mkexports - - touch build-indep-stamp - -build-arch: build-arch-stamp -build-arch-stamp: - dh_testdir - - $(MAKE) - - touch build-arch-stamp - -build: build-indep build-arch - -clean: - dh_testdir - dh_testroot - rm -f build-indep-stamp build-arch-stamp - - $(MAKE) realclean - - dh_clean - -install-indep: build-indep - dh_testdir - dh_testroot - dh_prep -i - dh_installdirs -i - dh_install -i - -# install headers + # install headers find . \( -name debian -o -name .pc -o -name config.h -o -name snprintf.h \) \ -prune -o -name '*.h' -exec install -m644 -D {} \ - $(INSTDIR_DEV)/usr/include/$(PACKAGE)/{} \; - -install-arch: build-arch - dh_testdir - dh_testroot - dh_prep -a - dh_installdirs -a - - $(MAKE) install \ - PREFIX=$(CURDIR)/$(INSTDIR)/usr \ - ETCDIR=$(CURDIR)/$(INSTDIR)/etc/X11/notion - -# install other things (mainly -dev) - dh_install -a - -binary-indep: build-indep install-indep - dh_testdir - dh_testroot - -# automatically keep track of api version - dh_installchangelogs -i - dh_installdocs -i - -# dh_installexamples -i -# dh_install -i -# dh_installmenu -i -# dh_installdebconf -i -# dh_installlogrotate -i -# dh_installemacsen -i -# dh_installpam -i -# dh_installmime -i -# dh_installinit -i -# dh_installcron -i -# dh_installinfo -i -# dh_undocumented -i - dh_installman -i - dh_link -i -# dh_strip -i - dh_compress -i - dh_fixperms -i - chmod 755 $(INSTDIR_DEV)/usr/lib/notion/libextl/libextl-mkexports -# dh_perl -i -# dh_python -i -# dh_makeshlibs -i - dh_installdeb -i -# dh_shlibdeps -i - dh_gencontrol -i - dh_md5sums -i - dh_builddeb -i - -binary-arch: build-arch install-arch - dh_testdir - dh_testroot - -# automatically keep track of api version - echo Notion:ApiVersion=$$((cat version.h; echo ION_API_VERSION) \ - | cpp -P | tail -1 | sed 's/"//g') >>debian/$(PACKAGE).substvars - - dh_installchangelogs -a - dh_installdocs -a - rm -f $(INSTDIR)/usr/share/doc/$(PACKAGE)/LICENSE -# mv $(INSTDIR)/usr/share/doc/$(PACKAGE)/ChangeLog $(INSTDIR)/usr/share/doc/$(PACKAGE)/changelog -# dh_installexamples -a -# dh_install -a - dh_installmenu -a - install -m644 debian/$(PACKAGE).menu-method.i18n \ - $(INSTDIR)/etc/menu-methods/$(PACKAGE)-i18n - - dh_installdebconf -a -# dh_installlogrotate -a -# dh_installemacsen -a -# dh_installpam -a -# dh_installmime -a -# dh_installinit -a -# dh_installcron -a -# dh_installinfo -a -# dh_undocumented -a - dh_installman -a - dh_link -a - dh_strip -a - dh_compress -a -X.lua - dh_fixperms -a -# dh_perl -a -# dh_python -a -# dh_makeshlibs -a - dh_installdeb -a - sed -i 's/^DEBIAN_VERSION=/&$(DEBIAN_VERSION)/; s/^UPSTREAM_VERSION=/&$(UPSTREAM_VERSION)/' \ - $(INSTDIR)/DEBIAN/postinst - dh_shlibdeps -a - dh_gencontrol -a - dh_md5sums -a - dh_builddeb -a - -binary: binary-indep binary-arch - -get-orig-source: - uscan --force-download + debian/notion-dev/usr/include/notion/{} \; -.PHONY: build-indep build-arch build clean binary-indep binary-arch binary \ - install-indep install-arch get-orig-source +override_dh_fixperms-indep: + dh_fixperms + # this needs to be executable + chmod a+x debian/notion-dev/usr/lib/notion/libextl/libextl-mkexports + +override_dh_install-arch: + dh_install + # notionflux should go into /usr/bin. The upstream install should probably do this + mv debian/notion/usr/lib/notion/notionflux debian/notion/usr/bin diff -Nru notion-3+2014010901/debian/watch notion-3+2015061300/debian/watch --- notion-3+2014010901/debian/watch 2014-04-24 03:54:45.000000000 +0000 +++ notion-3+2015061300/debian/watch 2016-07-15 04:12:02.000000000 +0000 @@ -1,3 +1,2 @@ -version=3 -opts="uversionmangle=s/-/+/" \ - http://sf.net/notion/notion-(3-.+)-src\.tar\.gz +version = 3 +opts=uversionmangle=s/-/+/ https://github.com/raboof/notion/tags .*/notion/archive/(\d-\d+).tar.gz diff -Nru notion-3+2014010901/etc/cfg_dock.lua notion-3+2015061300/etc/cfg_dock.lua --- notion-3+2014010901/etc/cfg_dock.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/etc/cfg_dock.lua 2015-06-13 14:37:26.000000000 +0000 @@ -2,35 +2,39 @@ -- Notion dock module configuration -- --- Create a dock +-- Create a dock. mod_dock.create{ - -- Dock mode: embedded|floating + -- Dock mode: embedded|floating. mode="floating", - -- The screen to create the dock on + + -- The screen to create the dock on. screen=0, + -- Corner or side of the screen to place the dock on. - -- For embedded dock the valid values are: tl|tr|bl|br - -- For floating dock the following are also valid: tc|bc|ml|mc|mr + -- For embedded dock the valid values are: tl|tr|bl|br. + -- For floating dock the following are also valid: tc|bc|ml|mc|mr. pos="bl", - -- Growth direction: left|right|up|down + + -- Growth direction: left|right|up|down. grow="right", - -- Whether new dockapps should be added automatically to this dock - is_auto=true, + + -- Whether new dockapps should be added automatically to this dock. + is_auto=true, + -- Show floating dock initially? floating_hidden=false, - -- Name of the dock + + -- Name of the dock. name="*dock*", } - -- For floating docks, you may want the following toggle binding. defbindings("WScreen", { bdoc("Toggle floating dock."), - kpress(META.."D", "mod_dock.set_floating_shown_on(_, 'toggle')") + kpress(META.."D", "mod_dock.set_floating_shown_on(_, 'toggle')"), }) - --- Dock settings menu. For this to work, mod_menu must have been loaded +-- Dock settings menu. For this to work, mod_menu must have been loaded -- previously. if mod_menu then defmenu("dock-settings", { @@ -43,9 +47,8 @@ menuentry("Grow-U", "_:set{grow='up'}"), menuentry("Grow-D", "_:set{grow='down'}"), }) - + defbindings("WDock", { mpress("Button3", "mod_menu.pmenu(_, _sub, 'dock-settings')"), }) end - diff -Nru notion-3+2014010901/etc/cfg_kludges.lua notion-3+2015061300/etc/cfg_kludges.lua --- notion-3+2014010901/etc/cfg_kludges.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/etc/cfg_kludges.lua 2015-06-13 14:37:26.000000000 +0000 @@ -2,33 +2,30 @@ -- Options to get some programs work more nicely (or at all) -- - -defwinprop{ +defwinprop { class = "AcroRead", instance = "documentShell", - acrobatic = true + acrobatic = true, } - -defwinprop{ +defwinprop { class = "Xpdf", instance = "openDialog_popup", ignore_cfgrq = true, } -- Better would be to apply these settings automatically whenever a window --- has type _NET_WM_WINDOW_TYPE_NOTIFICATION -defwinprop{ - class = "Xfce4-notifyd", - - float = true, - userpos = true, - switchto = false, +-- has type _NET_WM_WINDOW_TYPE_NOTIFICATION. +defwinprop { + class = "Xfce4-notifyd", + float = true, + userpos = true, + switchto = false, } --- Put all dockapps in the statusbar's systray, also adding the missing --- size hints necessary for this to work. -defwinprop{ +-- Put all dockapps in the statusbar's systray, also adding the missing size +-- hints necessary for this to work. +defwinprop { is_dockapp = true, statusbar = "systray", max_size = { w = 64, h = 64}, @@ -36,38 +33,59 @@ } -- Make an exception for Docker, which sets correct size hints. -defwinprop{ +defwinprop { is_dockapp = true, class = "Docker", statusbar = "systray", } -- https://sourceforge.net/tracker/?func=detail&aid=3471910&group_id=314802&atid=1324528 -defwinprop{ - class = "Gimp", +defwinprop { + class = "Gimp", acrobatic = true, } --- You might want to enable these if you really must use XMMS. +-- You might want to enable these if you really must use XMMS. --[[ -defwinprop{ +defwinprop { class = "xmms", instance = "XMMS_Playlist", - transient_mode = "off" + transient_mode = "off", } -defwinprop{ +defwinprop { class = "xmms", instance = "XMMS_Player", - transient_mode = "off" + transient_mode = "off", } --]] - - --- Define some additional title shortening rules to use when the full --- title doesn't fit in the available space. The first-defined matching --- rule that succeeds in making the title short enough is used. +-- InteiilJ IDEA - I wonder whether we should do this for *all* +-- sun-awt-X11-XWindowPeer windows. +defwinprop { + class = "jetbrains-idea-ce", + instance = "sun-awt-X11-XWindowPeer", + transient_mode = "current", +} +defwinprop { + class = "jetbrains-idea-ce", + instance = "sun-awt-X11-XDialogPeer", + transient_mode = "current", +} +defwinprop { + class = "jetbrains-idea", + instance = "sun-awt-X11-XWindowPeer", + transient_mode = "current", +} +defwinprop { + class = "jetbrains-idea", + instance = "sun-awt-X11-XDialogPeer", + transient_mode = "current", +} + +-- Define some additional title shortening rules to use when the full title +-- doesn't fit in the available space. The first-defined matching rule that +-- succeeds in making the title short enough is used. ioncore.defshortening("(.*) - Mozilla(<[0-9]+>)", "$1$2$|$1$<...$2") ioncore.defshortening("(.*) - Mozilla", "$1$|$1$<...") ioncore.defshortening("XMMS - (.*)", "$1$|...$>$1") diff -Nru notion-3+2014010901/etc/cfg_layouts.lua notion-3+2015061300/etc/cfg_layouts.lua --- notion-3+2014010901/etc/cfg_layouts.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/etc/cfg_layouts.lua 2015-06-13 14:37:26.000000000 +0000 @@ -6,16 +6,16 @@ -- Helper routines and structures -- --- Tiled frame template for the layouts below +-- Tiled frame template for the layouts below. local a_frame = { type="WSplitRegion", regparams = { - type = "WFrame", + type = "WFrame", frame_style = "frame-tiled" } } --- Helper function for generating splits for layouts +-- Helper function for generating splits for layouts. local function mksplit(dir, tl, br, float) return { type = (float and "WSplitFloat" or "WSplitSplit"), @@ -32,7 +32,7 @@ managed = { { type = "WTiling", - bottom = true, -- Make it the bottom of the group + bottom = true, -- Make it the bottom of the group. split_tree = split_tree, } } @@ -40,36 +40,36 @@ end -- --- The layouts +-- Layouts -- --- Tiling with single 1:1 horizontal split +-- Tiling with single 1:1 horizontal split. local tmp=mktiling(mksplit("horizontal", a_frame, a_frame)) ioncore.deflayout("hsplit", tmp) ioncore.deflayout("default", tmp) --- Tiling with single 1:1 vertical split +-- Tiling with single 1:1 vertical split. ioncore.deflayout("vsplit", mktiling(mksplit("vertical", a_frame, a_frame)) ) --- Tiling with single 1:1 floating horizontal split -ioncore.deflayout("hfloat", +-- Tiling with single 1:1 floating horizontal split. +ioncore.deflayout("hfloat", mktiling(mksplit("horizontal", a_frame, a_frame, true)) ) --- Tiling with single 1:1 floating vertical split -ioncore.deflayout("vfloat", +-- Tiling with single 1:1 floating vertical split. +ioncore.deflayout("vfloat", mktiling(mksplit("vertical", a_frame, a_frame, true)) ) --- Tiling with horizontal and then vertical splits +-- Tiling with horizontal and then vertical splits. ioncore.deflayout("2x2", - mktiling(mksplit("horizontal", + mktiling(mksplit("horizontal", mksplit("vertical", a_frame, a_frame), mksplit("vertical", a_frame, a_frame)) ) ) --- Tiling with single full screen frame +-- Tiling with single full screen frame. ioncore.deflayout("full", mktiling(a_frame)) diff -Nru notion-3+2014010901/etc/cfg_menu.lua notion-3+2015061300/etc/cfg_menu.lua --- notion-3+2014010901/etc/cfg_menu.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/etc/cfg_menu.lua 2015-06-13 14:37:26.000000000 +0000 @@ -1,32 +1,26 @@ -- --- Menu module configuration. --- --- Only bindings that are effect in menus are configured here. --- See ion-menus.lua for menu definitions and ion-bindings.lua --- for bindings to display menus. +-- Menu module configuration -- - defbindings("WMenu", { bdoc("Close the menu."), kpress("Escape", "WMenu.cancel(_)"), kpress("Control+G", "WMenu.cancel(_)"), kpress("Control+C", "WMenu.cancel(_)"), kpress("Left", "WMenu.cancel(_)"), - + bdoc("Activate current menu entry."), kpress("Return", "WMenu.finish(_)"), kpress("KP_Enter", "WMenu.finish(_)"), kpress("Control+M", "WMenu.finish(_)"), kpress("Right", "WMenu.finish(_)"), - + bdoc("Select next/previous menu entry."), kpress("Control+N", "WMenu.select_next(_)"), kpress("Control+P", "WMenu.select_prev(_)"), kpress("Up", "WMenu.select_prev(_)"), kpress("Down", "WMenu.select_next(_)"), - + bdoc("Clear the menu's typeahead find buffer."), kpress("BackSpace", "WMenu.typeahead_clear(_)"), }) - diff -Nru notion-3+2014010901/etc/cfg_notioncore.lua notion-3+2015061300/etc/cfg_notioncore.lua --- notion-3+2014010901/etc/cfg_notioncore.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/etc/cfg_notioncore.lua 2015-06-13 14:37:26.000000000 +0000 @@ -3,9 +3,9 @@ -- --- +-- -- Bindings. This includes global bindings and bindings common to --- screens and all types of frames only. See modules' configuration +-- screens and all types of frames only. See modules' configuration -- files for other bindings. -- @@ -14,9 +14,9 @@ -- -- The bindings in this context are available all the time. -- --- The variable META should contain a string of the form 'Mod1+' --- where Mod1 maybe replaced with the modifier you want to use for most --- of the bindings. Similarly ALTMETA may be redefined to add a +-- The variable META should contain a string of the form 'Mod4+' +-- where Mod4 maybe replaced with the modifier you want to use for most +-- of the bindings. Similarly ALTMETA may be redefined to add a -- modifier to some of the F-key bindings. defbindings("WScreen", { @@ -32,7 +32,7 @@ kpress(META.."8", "WScreen.switch_nth(_, 7)"), kpress(META.."9", "WScreen.switch_nth(_, 8)"), kpress(META.."0", "WScreen.switch_nth(_, 9)"), - + bdoc("Switch to next/previous object within current screen."), kpress(META.."comma", "WScreen.switch_prev(_)"), kpress(META.."period", "WScreen.switch_next(_)"), @@ -45,10 +45,10 @@ --bdoc("Go to previous active object."), --kpress("K", "ioncore.goto_previous()"), - + --bdoc("Go to first object on activity/urgency list."), --kpress("I", "ioncore.goto_activity()"), - + bdoc("Clear all tags."), kpress("T", "ioncore.tagged_clear()"), }), @@ -60,21 +60,21 @@ kpress(META.."W", "ioncore.goto_nth_screen(1)"), kpress(META.."Shift+3", "ioncore.goto_nth_screen(2)"), kpress(META.."E", "ioncore.goto_nth_screen(2)"), - + bdoc("Go to next/previous screen on multihead setup."), kpress(META.."Shift+comma", "ioncore.goto_prev_screen()"), kpress(META.."I", "ioncore.goto_prev_screen()"), kpress(META.."O", "ioncore.goto_next_screen()"), kpress(META.."grave", "ioncore.goto_next_screen()"), - + bdoc("Create a new workspace of chosen default type."), kpress(META.."F9", "ioncore.create_ws(_)"), - + bdoc("Display the main menu."), kpress(ALTMETA.."F12", "mod_query.query_menu(_, _sub, 'mainmenu', 'Main menu:')"), --kpress(ALTMETA.."F12", "mod_menu.menu(_, _sub, 'mainmenu', {big=true})"), mpress("Button3", "mod_menu.pmenu(_, _sub, 'mainmenu')"), - + bdoc("Display the window list menu."), mpress("Button2", "mod_menu.pmenu(_, _sub, 'windowlist')"), @@ -84,13 +84,13 @@ -- the managing group of that window. The right/left directions are -- used instead of next/prev, because they work better in conjunction -- with tilings. - kpress(META.."Tab", "ioncore.goto_next(_chld, 'right')", + kpress(META.."Tab", "ioncore.goto_next(_chld, 'right')", "_chld:non-nil"), - submap(META.."K", { + submap(META.."K", { bdoc("Backward-circulate focus."), - kpress("AnyModifier+Tab", "ioncore.goto_next(_chld, 'left')", + kpress("AnyModifier+Tab", "ioncore.goto_next(_chld, 'left')", "_chld:non-nil"), - + bdoc("Raise focused object, if possible."), kpress("AnyModifier+R", "WRegion.rqorder(_chld, 'front')", "_chld:non-nil"), @@ -111,7 +111,7 @@ bdoc("Kill client owning the client window."), kpress("C", "WClientWin.kill(_)"), - + bdoc("Send next key press to the client window. ".. "Some programs may not allow this by default."), kpress("Q", "WClientWin.quote_next(_)"), @@ -130,7 +130,7 @@ -- WMPlex context bindings -- -- These bindings work in frames and on screens. The innermost of such --- contexts/objects always gets to handle the key press. +-- contexts/objects always gets to handle the key press. defbindings("WMPlex", { bdoc("Close current object."), @@ -144,7 +144,7 @@ bdoc("Lock screen"), kpress(META.."L", "notioncore.exec_on(_, notioncore.lookup_script('notion-lock'))"), - + bdoc("Query for manual page to be displayed."), kpress(ALTMETA.."F1", "mod_query.query_man(_, ':man')"), @@ -153,7 +153,7 @@ bdoc("Run a terminal emulator."), kpress(ALTMETA.."F2", "mod_query.exec_on_merr(_, XTERM or 'xterm')"), - + bdoc("Query for command line to execute."), kpress(ALTMETA.."F3", "mod_query.query_exec(_)"), @@ -164,27 +164,27 @@ kpress(ALTMETA.."F4", "mod_query.query_ssh(_, ':ssh')"), bdoc("Query for file to edit."), - kpress(ALTMETA.."F5", + kpress(ALTMETA.."F5", "mod_query.query_editfile(_, 'run-mailcap --action=edit')"), bdoc("Query for file to view."), - kpress(ALTMETA.."F6", + kpress(ALTMETA.."F6", "mod_query.query_runfile(_, 'run-mailcap --action=view')"), bdoc("Query for workspace to go to or create a new one."), kpress(ALTMETA.."F9", "mod_query.query_workspace(_)"), - + bdoc("Query for a client window to go to."), kpress(META.."G", "mod_query.query_gotoclient(_)"), - + bdoc("Display context menu."), --kpress(META.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"), kpress(META.."M", "mod_query.query_menu(_, _sub, 'ctxmenu', 'Context menu:')"), - + submap(META.."K", { bdoc("Detach (float) or reattach an object to its previous location."), -- By using _chld instead of _sub, we can detach/reattach queries - -- attached to a group. The detach code checks if the parameter + -- attached to a group. The detach code checks if the parameter -- (_chld) is a group 'bottom' and detaches the whole group in that -- case. kpress("D", "ioncore.detach(_chld, 'toggle')", "_chld:non-nil"), @@ -203,30 +203,30 @@ kpress("H", "WFrame.maximize_horiz(_)"), kpress("V", "WFrame.maximize_vert(_)"), }), - + bdoc("Display context menu."), mpress("Button3", "mod_menu.pmenu(_, _sub, 'ctxmenu')"), - + bdoc("Begin move/resize mode."), kpress(META.."R", "WFrame.begin_kbresize(_)"), - + bdoc("Switch the frame to display the object indicated by the tab."), mclick("Button1@tab", "WFrame.p_switch_tab(_)"), mclick("Button2@tab", "WFrame.p_switch_tab(_)"), - + bdoc("Resize the frame."), mdrag("Button1@border", "WFrame.p_resize(_)"), mdrag(META.."Button3", "WFrame.p_resize(_)"), - + bdoc("Move the frame."), mdrag(META.."Button1", "WFrame.p_move(_)"), - + bdoc("Move objects between frames by dragging and dropping the tab."), mdrag("Button1@tab", "WFrame.p_tabdrag(_)"), mdrag("Button2@tab", "WFrame.p_tabdrag(_)"), - + bdoc("Switch to next/previous object within the frame."), - mclick(META.."Button4", "WFrame.switch_next(_)"), + mclick(META.."Button4", "WFrame.switch_next(_)"), mclick(META.."Button5", "WFrame.switch_prev(_)"), }) @@ -235,11 +235,11 @@ defbindings("WFrame.toplevel", { bdoc("Query for a client window to attach."), kpress(META.."A", "mod_query.query_attachclient(_)"), - + submap(META.."K", { -- Display tab numbers when modifiers are released submap_wait("ioncore.tabnum.show(_)"), - + bdoc("Switch to n:th object within the frame."), kpress("1", "WFrame.switch_nth(_, 0)"), kpress("2", "WFrame.switch_nth(_, 1)"), @@ -251,15 +251,15 @@ kpress("8", "WFrame.switch_nth(_, 7)"), kpress("9", "WFrame.switch_nth(_, 8)"), kpress("0", "WFrame.switch_nth(_, 9)"), - + bdoc("Switch to next/previous object within the frame."), kpress("N", "WFrame.switch_next(_)"), kpress("P", "WFrame.switch_prev(_)"), - + bdoc("Move current object within the frame left/right."), kpress("comma", "WFrame.dec_index(_, _sub)", "_sub:non-nil"), kpress("period", "WFrame.inc_index(_, _sub)", "_sub:non-nil"), - + bdoc("Maximize the frame horizontally/vertically."), kpress("H", "WFrame.maximize_horiz(_)"), kpress("V", "WFrame.maximize_vert(_)"), @@ -269,27 +269,27 @@ }), }) --- Bindings for floating frames. +-- Bindings for floating frames defbindings("WFrame.floating", { bdoc("Toggle shade mode"), mdblclick("Button1@tab", "WFrame.set_shaded(_, 'toggle')"), - + bdoc("Raise the frame."), mpress("Button1@tab", "WRegion.rqorder(_, 'front')"), mpress("Button1@border", "WRegion.rqorder(_, 'front')"), mclick(META.."Button1", "WRegion.rqorder(_, 'front')"), - + bdoc("Lower the frame."), mclick(META.."Button3", "WRegion.rqorder(_, 'back')"), - + bdoc("Move the frame."), mdrag("Button1@tab", "WFrame.p_move(_)"), }) -- WMoveresMode context bindings --- +-- -- These bindings are available keyboard move/resize mode. The mode -- is activated on frames with the command begin_kbresize (bound to -- META.."R" above by default). @@ -310,7 +310,7 @@ kpress("B", "WMoveresMode.resize(_, 0, 1, 0, 0)"), kpress("P", "WMoveresMode.resize(_, 0, 0, 1, 0)"), kpress("N", "WMoveresMode.resize(_, 0, 0, 0, 1)"), - + bdoc("Shrink in specified direction."), kpress("Shift+Left", "WMoveresMode.resize(_,-1, 0, 0, 0)"), kpress("Shift+Right", "WMoveresMode.resize(_, 0,-1, 0, 0)"), @@ -320,7 +320,7 @@ kpress("Shift+B", "WMoveresMode.resize(_, 0,-1, 0, 0)"), kpress("Shift+P", "WMoveresMode.resize(_, 0, 0,-1, 0)"), kpress("Shift+N", "WMoveresMode.resize(_, 0, 0, 0,-1)"), - + bdoc("Move in specified direction."), kpress(META.."Left", "WMoveresMode.move(_,-1, 0)"), kpress(META.."Right", "WMoveresMode.move(_, 1, 0)"), @@ -342,7 +342,7 @@ defmenu("mainmenu", { menuentry("Run...", "mod_query.query_exec(_)"), menuentry("Terminal", "mod_query.exec_on_merr(_, XTERM or 'xterm')"), - menuentry("Lock screen", + menuentry("Lock screen", "notioncore.exec_on(_, notioncore.lookup_script('notion-lock'))"), menuentry("Help", "mod_query.query_man(_)"), menuentry("About Notion", "mod_query.show_about_ion(_)"), @@ -376,7 +376,7 @@ -- Context menu for groups (workspaces, client windows) defctxmenu("WGroup", "Group", { menuentry("Toggle tag", "WRegion.set_tagged(_, 'toggle')"), - menuentry("De/reattach", "ioncore.detach(_, 'toggle')"), + menuentry("De/reattach", "ioncore.detach(_, 'toggle')"), }) diff -Nru notion-3+2014010901/etc/cfg_notion.lua notion-3+2015061300/etc/cfg_notion.lua --- notion-3+2014010901/etc/cfg_notion.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/etc/cfg_notion.lua 2015-06-13 14:37:26.000000000 +0000 @@ -3,26 +3,28 @@ -- -- This file only includes some settings that are rather frequently altered. -- The rest of the settings are in cfg_notioncore.lua and individual modules' --- configuration files (cfg_modulename.lua). +-- configuration files (cfg_modulename.lua). -- --- When any binding and other customisations that you want are minor, it is +-- When any binding and other customisations that you want are minor, it is -- recommended that you include them in a copy of this file in ~/.notion/. -- Simply create or copy the relevant settings at the end of this file (from --- the other files), recalling that a key can be unbound by passing 'nil' --- (without the quotes) as the callback. For more information, please see +-- the other files), recalling that a key can be unbound by passing 'nil' +-- (without the quotes) as the callback. For more information, please see -- the Notion configuration manual available from the Notion Web page. -- --- Set default modifiers. Alt should usually be mapped to Mod1 on --- XFree86-based systems. The flying window keys are probably Mod3 --- or Mod4; see the output of 'xmodmap'. ---META="Mod1+" +-- Set default modifiers. The default is the 'windows' key; it is usually mapped +-- to Mod4 on Xorg-based systems. Any other modifier, such as Alt, can be used +-- instead. The 'xmodmap' tool can be used to get/set which key codes correspond +-- to which modifiers, and the 'xev' tool can be used to see what codes are +-- generated by particular keys. +--META="Mod4+" --ALTMETA="" --- Terminal emulator +-- Terminal emulator. --XTERM="xterm" --- Some basic settings +-- Some basic settings. ioncore.set{ -- Maximum delay between clicks in milliseconds to be considered a -- double click. @@ -39,25 +41,25 @@ -- Movement commands warp the pointer to frames instead of just -- changing focus. Enabled by default. --warp=true, - - -- Switch frames to display newly mapped windows + + -- Switch frames to display newly mapped windows. --switchto=true, - + -- Default index for windows in frames: one of 'last', 'next' (for -- after current), or 'next-act' (for after current and anything with -- activity right after it). --frame_default_index='next', - + -- Auto-unsqueeze transients/menus/queries. --unsqueeze=true, - + -- Display notification tooltips for activity on hidden workspace. --screen_notify=true, - + -- Automatically save layout on restart and exit. --autosave_layout=true, - - -- Mouse focus mode; set to "sloppy" if you want the focus to follow the + + -- Mouse focus mode; set to "sloppy" if you want the focus to follow the -- mouse, and to "disabled" otherwise. --mousefocus="sloppy", @@ -65,14 +67,29 @@ -- "ignore" to ignore these requests, and to "activate" to set the activity -- flag on a window that requests to be stacked "Above". --window_stacking_request="ignore", -} + -- Time (in ms) that a window has to be focussed in order to be added to the + -- focus list. Set this to <=0 (or comment it out) to disable the logic, and + -- update the focus list immediately. + --focuslist_insert_delay=1000, + + -- If enabled, activity notifiers are displayed on ALL the screens, not just + -- the screen that contains the window producing the notification. This is + -- only relevant on multi-head setups. By default this is disabled. + --activity_notification_on_all_screens=false, + + -- If enabled, a workspace indicator comes up at the bottom-left of the + -- screen when a new workspace is selected. This indicator stays active for + -- only as long as indicated by this variable (in ms). Timeout values <=0 + -- disable the indicator altogether. This is disabled by default. + --workspace_indicator_timeout=0, +} -- Load default settings. The file cfg_defaults loads all the files -- commented out below, except mod_dock. If you do not want to load -- something, comment out this line, and uncomment the lines corresponding --- the the modules or configuration files that you want, below. --- The modules' configuration files correspond to the names of the +-- the modules or configuration files that you want, below. +-- The modules' configuration files correspond to the names of the -- modules with 'mod' replaced by 'cfg'. dopath("cfg_defaults") @@ -82,7 +99,7 @@ -- Load some kludges to make apps behave better. --dopath("cfg_kludges") --- Define some layouts. +-- Define some layouts. --dopath("cfg_layouts") -- Load some modules. Bindings and other configuration specific to modules @@ -96,7 +113,6 @@ --dopath("mod_notionflux") --dopath("mod_xrandr") - -- -- Common customisations -- @@ -111,4 +127,3 @@ --defbindings("WMPlex.toplevel", { -- kpress(META.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"), --}) - diff -Nru notion-3+2014010901/etc/cfg_query.lua notion-3+2015061300/etc/cfg_query.lua --- notion-3+2014010901/etc/cfg_query.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/etc/cfg_query.lua 2015-06-13 14:37:26.000000000 +0000 @@ -1,11 +1,6 @@ -- --- Query module configuration. +-- Query module configuration -- --- Only bindings that are in effect in queries and message displays are --- configured here. Actions to display queries are configured in --- ion-bindings.lua --- - defbindings("WEdln", { bdoc("Move one character forward/backward."), @@ -13,13 +8,13 @@ kpress("Control+B", "WEdln.back(_)"), kpress("Right", "WEdln.forward(_)"), kpress("Left", "WEdln.back(_)"), - + bdoc("Go to end/beginning."), kpress("Control+E", "WEdln.eol(_)"), kpress("Control+A", "WEdln.bol(_)"), kpress("End", "WEdln.eol(_)"), kpress("Home", "WEdln.bol(_)"), - + bdoc("Skip one word forward/backward."), kpress("Control+X", "WEdln.skip_word(_)"), kpress("Control+Z", "WEdln.bskip_word(_)"), @@ -27,21 +22,21 @@ bdoc("Delete next character."), kpress("Control+D", "WEdln.delete(_)"), kpress("Delete", "WEdln.delete(_)"), - + bdoc("Delete previous character."), kpress("BackSpace", "WEdln.backspace(_)"), kpress("Control+H", "WEdln.backspace(_)"), - + bdoc("Delete one word forward/backward."), kpress("Control+W", "WEdln.kill_word(_)"), kpress("Control+O", "WEdln.bkill_word(_)"), bdoc("Delete to end of line."), kpress("Control+J", "WEdln.kill_to_eol(_)"), - + bdoc("Delete the whole line."), kpress("Control+Y", "WEdln.kill_line(_)"), - + bdoc("Transpose characters."), kpress("Control+T", "WEdln.transpose_chars(_)"), @@ -57,16 +52,16 @@ mclick("Button2", "WEdln.paste(_)"), submap("Control+K", { kpress("C", "WEdln.paste(_)"), - + bdoc("Set mark/begin selection."), kpress("B", "WEdln.set_mark(_)"), - + bdoc("Cut selection."), kpress("Y", "WEdln.cut(_)"), - + bdoc("Copy selection."), kpress("K", "WEdln.copy(_)"), - + bdoc("Clear mark/cancel selection."), kpress("G", "WEdln.clear_mark(_)"), @@ -75,28 +70,27 @@ }), bdoc("Try to complete the entered text or cycle through completions."), - kpress("Tab", "WEdln.complete(_, 'next', 'normal')"), + kpress("Tab", "WEdln.complete(_, 'next', 'normal')"), kpress("Shift+Tab", "WEdln.complete(_, 'prev', 'normal')"), - -- Do not cycle; only force evaluation of new completions + -- Do not cycle; only force evaluation of new completions. kpress("Control+Tab", "WEdln.complete(_, nil, 'normal')"), - + bdoc("Complete from history"), kpress("Control+R", "WEdln.complete(_, 'next', 'history')"), kpress("Control+S", "WEdln.complete(_, 'prev', 'history')"), - + bdoc("Close the query and execute bound action."), kpress("Control+M", "WEdln.finish(_)"), kpress("Return", "WEdln.finish(_)"), kpress("KP_Enter", "WEdln.finish(_)"), }) - defbindings("WInput", { bdoc("Close the query/message box, not executing bound actions."), kpress("Escape", "WInput.cancel(_)"), kpress("Control+G", "WInput.cancel(_)"), kpress("Control+C", "WInput.cancel(_)"), - + bdoc("Scroll the message or completions up/down."), kpress("Control+U", "WInput.scrollup(_)"), kpress("Control+V", "WInput.scrolldown(_)"), @@ -104,21 +98,20 @@ kpress("Page_Down", "WInput.scrolldown(_)"), }) - --- Some settings +-- Settings --[[ mod_query.set{ - -- Auto-show completions? + -- Auto-show completions? autoshowcompl=true, - - -- Delay for completion after latest keypress/modification in - -- milliseconds + + -- Delay for completion after latest keypress/modification in + -- milliseconds. autoshowcompl_delay=250, - - -- Case-insensitive completion? (Some queries only.) + + -- Case-insensitive completion (some queries only)? caseicompl=true, - - -- Sub-string completion? (Some queries only.) + + -- Sub-string completion (some queries only)? substrcompl=true, } --]] diff -Nru notion-3+2014010901/etc/cfg_statusbar.lua notion-3+2015061300/etc/cfg_statusbar.lua --- notion-3+2014010901/etc/cfg_statusbar.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/etc/cfg_statusbar.lua 2015-06-13 14:37:26.000000000 +0000 @@ -1,19 +1,20 @@ -- -- Notion statusbar module configuration file --- - +-- --- Create a statusbar +-- Create a statusbar. mod_statusbar.create{ - -- First screen, bottom left corner + -- First screen, bottom left corner. screen=0, pos='bl', - -- Set this to true if you want a full-width statusbar + + -- Set this to true if you want a full-width statusbar. fullsize=false, - -- Swallow systray windows + + -- Swallow systray windows. systray=true, - -- Template. Tokens %string are replaced with the value of the + -- Template. Tokens %string are replaced with the value of the -- corresponding meter. Currently supported meters are: -- date date -- load load average (1min, 5min, 15min) @@ -26,7 +27,7 @@ -- mail_*_total mail count -- -- Space preceded by % adds stretchable space for alignment of variable - -- meter value widths. > before meter name aligns right using this + -- meter value widths. > before meter name aligns right using this -- stretchable space , < left, and | centers. -- Meter values may be zero-padded to a width preceding the meter name. -- These alignment and padding specifiers and the meter name may be @@ -41,27 +42,26 @@ --template="[ %date || load: %05load_1min || mail: %02mail_new/%02mail_total ] %filler%systray", } - -- Launch ion-statusd. This must be done after creating any statusbars -- for necessary statusd modules to be parsed from the templates. mod_statusbar.launch_statusd{ -- Date meter date={ - -- ISO-8601 date format with additional abbreviated day name + -- ISO-8601 date format with additional abbreviated day name. date_format='%a %Y-%m-%d %H:%M', -- Finnish etc. date format --date_format='%a %d.%m.%Y %H:%M', -- Locale date format (usually shows seconds, which would require -- updating rather often and can be distracting) --date_format='%c', - - -- Additional date formats. - --[[ - formats={ + + -- Additional date formats. + --[[ + formats={ time = '%H:%M', -- %date_time } --]] - }, + }, -- Load meter load={ @@ -85,4 +85,3 @@ --files={}, }, } - diff -Nru notion-3+2014010901/etc/cfg_tiling.lua notion-3+2015061300/etc/cfg_tiling.lua --- notion-3+2014010901/etc/cfg_tiling.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/etc/cfg_tiling.lua 2015-06-13 14:37:26.000000000 +0000 @@ -3,7 +3,6 @@ -- -- Bindings for the tilings. - defbindings("WTiling", { bdoc("Split current frame vertically."), kpress(META.."S", "WTiling.split_at(_, _sub, 'bottom', true)"), @@ -13,6 +12,7 @@ kpress(META.."N", "ioncore.goto_next(_sub, 'down', {no_ascend=_})"), mclick(META.."Shift+Button4", "ioncore.goto_next(_sub, 'up', {no_ascend=_})"), mclick(META.."Shift+Button5", "ioncore.goto_next(_sub, 'down', {no_ascend=_})"), + bdoc("Go to frame right/left of current frame."), kpress(META.."Tab", "ioncore.goto_next(_sub, 'right')"), submap(META.."K", { @@ -26,9 +26,7 @@ }), }) - --- Frame bindings - +-- Frame bindings. defbindings("WFrame.floating", { submap(META.."K", { bdoc("Tile frame, if no tiling exists on the workspace"), @@ -36,9 +34,7 @@ }), }) - -- Context menu for tiled workspaces. - defctxmenu("WTiling", "Tiling", { menuentry("Destroy frame", "WTiling.unsplit_at(_, _sub)"), @@ -74,11 +70,8 @@ }), }) - -- Extra context menu extra entries for floatframes. - defctxmenu("WFrame.floating", "Floating frame", { append=true, menuentry("New tiling", "mod_tiling.mkbottom(_)"), }) - diff -Nru notion-3+2014010901/.gitignore notion-3+2015061300/.gitignore --- notion-3+2014010901/.gitignore 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/.gitignore 2015-06-13 14:37:26.000000000 +0000 @@ -1,6 +1,7 @@ TAGS tags .project +*.d *.a *.o *.so @@ -12,8 +13,10 @@ po/*.mo man/*.1 man/welcome*.txt +mod_notionflux/notionflux/notionflux notion/notion notion/preload.c utils/ion-completeman utils/ion-statusd/ion-statusd utils/ion-completefile/ion-completefile +cscope.* diff -Nru notion-3+2014010901/ion_changelog.txt notion-3+2015061300/ion_changelog.txt --- notion-3+2014010901/ion_changelog.txt 1970-01-01 00:00:00.000000000 +0000 +++ notion-3+2015061300/ion_changelog.txt 2015-06-13 14:37:26.000000000 +0000 @@ -0,0 +1,1244 @@ +Notion is a fork of Ion. Here's the old changelog from the Ion project. The git +history holds this data for Notion + + +ion-3-20081002 +-------------- + +Some minor fixes again, including a few that should've already +been in the previous release. + + +ion-3-20080825 +-------------- + +This release again fixes some issues found with the previous one. + + +ion-3-20080707 +-------------- + +This is yet another maintenance release fixing a few issues. + + +ion-3-20080411 +-------------- + +This is a maintenance release that fixes a few issues in the +previous release. + + +ion-3-20080207 +-------------- + +. + + +ion-3rc-20080103 +---------------- + +This release features a few minor fixes to behavioural regressions +in the previous release, as well as some build configuration file +self-documentation improvements. + + +ion-3rc-20071220 +---------------- + +There are a few minor fixes in this RC, plus a major one related to +layout restore under a session manager. + + +ion-3rc-20071130 +---------------- + +This RC features various minor fixes, and some clarifications and +simplifications to the license, which people seem to have had trouble +understanding. + + +ion-3rc-20071109 +---------------- + +It seems people are a bit slow, or only scaring them with a final +release makes them report issues. So, still no stable release but +a candidate, with many minor fixes and improvements wrt. important +omissions. The most important changes are better behaviour of the +unsplit operation, better handling of main window being closed +before a transient, and use of the workspace's working directory +for run query file name completion. + + +ion-3rc-20070927 +---------------- + +Another attempt at last "rc" release. + + +ion-3rc-20070902 +---------------- + +This release features a few minor fixes. If no major problems are +discovered, this is likely to be the last "rc" release before the +first and hopefully final "stable" release. + + +ion-3rc-20070720 +---------------- + +This fourth "rc" release fixes some minor bugs and omissions in +the previous release. + + +ion-3rc-20070708 +---------------- + +This third "rc" release again simply fixes some minor problems in +the previous release. + + +ion-3rc-20070608 +---------------- + +This is the second "rc" release, and contains primarily bug fixes +and other minor improvements. + + +ion-3rc-20070506 +---------------- + +This is the first "rc" or "(stable) release candidate" release of +Ion3. This means that there will not be any further major changes +to it. Bugs will be fixed, and as an exception to the general +feature freeze, some hooks may still be added, if deemed useful. +Translations may also be included. After no new bugs (that can not +be deemed features) have been found in this or following "rc" +releases, the stable Ion3 will be released. + +Most of the changes in this release to the previous one already +are bug fixes, in addition to some general clean-up. Other notable +changes are: + + * Winprop matching improvements: it is possible to match against + `is_dockapp` and `is_transient` (booleans), and there's a hack + to support `class` and `instance` for dockapps too. + + * The default configuration puts dockapps in the statusbar's + tray area. + + * The autoconf kludge has been removed, as I will have nothing + to do with it, and nobody else seems to support or maintain + it either. + + * Tab numbers are displayed when releasing modifiers in the + `Mod1+K` submap. + +Distributors should pay heed to the name policy notice in the +LICENSE file. + + +ion-3ds-20070318 +---------------- + +This may be the last "ds" release if Ion3; if all goes well, the next +release is likely to be an "rc". Some minor improvements will still +be done, and minor requests may be accepted, so be quick. + +The most notable changes in this release from the previous one are: + + * Transients and queries in too small frames are "unsqueezed" out + of them, unless disabled with `ioncore.set{ unsqueeze = false }`. + + * Some changes in default `cfg_notion.lua`: instead of loading + various other files, just `cfg_default.lua` is loaded instead. + + * `mod_tiling.untile` (available in the context menu) may be used + to decompose tilings into floating frames. (This is the approximate + opposite of `mod_tiling.mkbottom` and the "new tiling" context menu + entry.) + + * Improved context menus. + + * Slightly improved defaults style, using the drawing engine's + added possibility of partial borders. + + * Various fixes and other improvements, in particular in relation + to focus code. + + +ion-3ds-20070203 +---------------- + + * There's been changes in padding/spacing usage in styles. Frames + now surround stuff inside borders not with `spacing` pixels, but + with `padding_pixels`. Spacing is only used to space things within + the borders (all the tabs and the client window from each other). + Consequently, custom styles may need to be updated to reflect this, + by increasing the padding, possibly also altering/removing colour + (to set it to background colour). + + * The use of drawing engine attributes has also changed, and strict + ordering of them in the styles is no longer necessary. Additionally, + much more attributes are supported, including the name of every + statusbar meter. + + * Xinerama support is gone. In addition to being problematic as such, + it had bit-rotted, and I will not waste time fixing it. + + * `ioncore.set` no longer supports the `default_ws_params` parameter + for configuring the default layout. It is replaced by + `ioncore.deflayout("default", { ... })`, which allows configuring + other layouts as well, known by `mod_query.query_workspace` (F9). + Some default layouts are configured in `cfg_layout.lua`. + + * It is now possible to automatically create new workspaces for + windows with the `new_group` winprop. + + +ion-3ds-20061223 +---------------- + +There's nothing major in this release, primarily just some minor fixes +and tuning to the previous release, that it was time to release. + + +ion-3ds-20061029 +---------------- + +Mostly this release still fixes issues in the big 3ds-20061015 release, +but in addition there are some improvements in the query department: + + * Query activation key now cycles completions (So e.g. the + in the context menu activated with META+M, this same key + can be used to cycle through the alternatives.) This does + not work for queries activated by submap bindings. + + * Likewise, it is no longer necessary to specify the key to + use for cycling for `mod_menu.grabmenu`. + + * Control+R can now be used for history completion in queries. + (Currently matching is done for full string up to 'point', but + this may be changed to substring match.) + + * Note that the parametrisation of WEdln.complete has changed, + and the second cycle parameter must be 'next' now instead of + `true`. + + +ion-3ds-20061020 +---------------- + +Fixes some (expected, but minor) issues in the previous release. + + +ion-3ds-20061015 +---------------- + + * WIonWS and WFloatWS and the corresponding modules are gone, and + your custom configuration files will be broken with regard to these. + However, a partial backwards compatibility hack exists for layout + savefiles. + + The F9 and META-F9 bindings now by default create workspaces with + a tiled layout of two frames. To create an "empty" workspace, + corresponding to the old WFloatWS, use the context menu (META-M) + and choose "new-empty-workspace". It is also possible to change + the default layout. + + * Note that if you restart from an old version to this new version of Ion, + transients will stop working as expected for already existing windows. + They will work for newly-created windows, however. + + * There are a few new sets of binding (including one for `WClientWin`!), + and some old bindings may not work exactly as expected anymore. In + particular, those for switching to full-screen mode. + + **It is probably best to start from scratch with your custom + bindings.** + + * `WFrame.set_tabbar` is gone. If you absolutely want to get rid off + the tabs, you must change the frame's "mode" with `WFrame.set_mode`. + The mode "tiled-alt" has been intended for this, and the corresponding + "framed-tiled-alt" style defaults to `bar = "none"`. + + * The rather popular `detach.lua` script from the scripts repository + is obsoleted now, as Ion includes detach functionality in itself. + To detach a window, use META-K D in the default bindings. To tile + an existing frame from a workspace that doesn't have a tiling yet, + use META-K B. + + +ion-3ds-20060519 +---------------- + +Some notable changes in this release include + + * Lua 5.1 is now required. + + * Framed transients on by default now. New binding contexts + "WFrame.toplevel" and "WMPlex.toplevel" were added to allow + for separate sets of bindings for nested transient frames and + top-level frames. Some of the bindings in the default binding + maps that are likely to be unwanted on transient frames were + moved to these contexts. Old custom bindings will continue to + work unless they modify the defaults by unbinding some of the + moved bindings. + + * Pressing Mod1+K K in the default bindings now switches to any + region with the "activity" flag set (indicated by the a box + at a corner of the screen), if there's one, before cycling to + previously active region. The same effect can be achieved in + your custom bindings with + + ioncore.activity_goto() or ioncore.goto_previous() + + +ion-3ds-20050607 +---------------- + +This release mostly features minor bugfixes and other improvements. The most +visible non-bugfix changes are: + + * Faster "fontset" filling kludge: only `-misc-fixed-*` fonts are tried. Ion + should now load faster in UTF-8 environments, and usually with no less + fonts in the fontset than before. (UTF-8 string drawing still does not + fully utilise these fonts under XFree86, but it does under XOrg.) + + * Experimental auto-show-completions support, which is also on by default + now. In this mode the Tab key can be used to cycle forward through the + completions, and Shift+Tab backwards. Modify the settings seen in the + new `mod_query.lua` to get normal Tab-completion, or change the completion + delay. + + * The release scripts do not run automatically autoconf anymore so maybe + a few more people would look into the README first. + + +ion-3ds-20050322 +---------------- + +The most visible changes in this release are: + + * Mod1+space now toggles the scratchpad by default and Mod1+D the dock. + + * The `ion-(ssh|man|view|edit)` wrapper scripts were removed and instead + the programs used can be configured in Ion's configuration files. + + * `ioncore.exec(_on)` also support the `:cmd` notation for "run cmd in + xterm" familiar from the run query. The `::cmd` notation can be used + to ask for enter to be pressed even when the program quit succesfully. + + * Those with custom configuration files should note that many exported toggle + functions were changed and renamed, and now accept a string parameter + incidating whether to toggle, set or unset the property. + + - `WClientwin.set_fullsreen` (replaces `WClientWin.toggle_fullscreen`) + - `WRegion.set_tagged` (replaces `WRegion.tag/untag/toggle_tag`) + - `WFrame.set_tabbar` (replaces `WFrame.toggle_tabbar`) + - `WFrame.set_shaded` (replaces `WFrame.toggle_shade`) + - `WFloatFrame.set_sticky` (replaces `WFloatFrame.toggle_sticky`) + - `WMPlex.l2_set_hidden` (replaces `WMPlex.l2_hide/show`) + - `mod_sp.set_shown(_on)` (replaces `mod_sp.toggle(_on)`) + - `mod_dock.set_floating_shown_on` (replaces `mod_dock.toggle_floating_on`) + - `WRegion.set_activity` (replaces `WRegion.clear_activity` and + `WRegion.notify_activity`) + + For example, `WRegion.set_tagged(_, 'toggle')` should be used in place of + `WRegion.toggle_tagged(_)` now. + +Obviously there are some other changes and fixes too. See the changelog +for details as usual. + + +ion-3ds-20050304 +---------------- + +This is mostly a bug fix release, but also features improved +`mod_query.query_exec` (F3 key) completion support. Script writers should be +aware that As a side effect of one of these bug fixes, many hooks are now +called in "protected mode" and can not call any functions that modify the +internal state of Ion, except ioncore.defer. + + +ion-3ds-20050227 +---------------- + +The most important changes in this release are: + + * So-called "placeholders". With the help of these the positions of + full-screen windows are remembered in their original frames, and don't + just get inserted after currently active window when returning from + full-screen mode. Under a session manager placeholders are also used + to remember the original order of windows. + + * Improved `mod_statusbar` and `ion-statusd` communication, and colouring + of important/critical meters. + + * A number of small fixes. + + +ion-3ds-20041104 +---------------- + +This monthly snapshot adds a few new and improved features. + + * 'Grabbed menus' that have a single cycling key and activate selected + entry when all modifiers have been released. See + + + + for an application. + + * Potentially blocking status meters are now in a separate ion-statusd + program. Please write your additional status meters that do not monitor + the state of Ion itself for ion-statusd (and contribute them in the + Ion3 scripts repository at ). + For help on writing such status meters, see e.g. source for + `statusd_load` in `ext_statusbar/ion-statusd`. + + * Floating splits are now supported on plain tiled workspaces as well as + on pane workspaces. To create such a split, use the workspace context + menu (Mod1+M by default) or write your own bindings. + + * Line editor now supports history search; Control+Up/Down only scrolls + through history entries with matching initial part. + + * Arbitrary winprop matching criteria is supported. Lua scripts have + access to X properties. + +Of course there are some other minor fixes and improvements as well. + + +ion-3ds-20040906 +---------------- + +This release finally includes a usable (yet still incomplete) version +of the `mod_panews` workspace module (that has also bored the name 'autows' +and 'rubberws' previously). The final outcome is not exactly what I +initially planned, as those plans turned out not to be that workable. +Instead, what `mod_panews` does is add to the basic tiled ionws approach +overlappable splits and automatically filled panes that are initially +empty. Each window is classified and assigned to the pane matching that +classification. (The default classifications are T(erminal), V(iewer) +and M(iscellaneous).) + +For a better feel for it, try it out yourself and please give feedback. +The overlapping panes may be a bit confusing (this is one place where +true translucency might actually be useful and not just eyecandy) at +first, but you'll get used to them if you use the feature, and e.g. +the Gimp works quite splendidly with the toolboxes in the 'M' pane and +image windows in the 'V' pane -- although the simple initial size-based +classification heuristics don't always get it right and overriding +winprops (setting: `panews_classification`) should eventually added. + +In addition to the new module, this release adds support for translations +of program messages and the manual page, regardless of whether such is +of any use in a program like Ion or not. (Currently Finnish and Czech +translations are available.) Of course there are some bug fixes and +other minor additions as well, and the `./configure` script is also back, +the abandonment of libtool being final now. + + +ion-3ds-20040730 +---------------- + +The first thing you'll notice when you start up this release of Ion is +that isn't reading your old configuration that. The next thing you +should notice is a neat layout-adapting statusbar at the bottom of the +screen. That's right, Ion now includes an `ext_statusbar` Lua script that +is enabled by default and displays date/time/load/mail count in a +configurable format. + +So why is it not reading your configuration and save files? Firstly, +all of the `.lua` files were renamed to be indicative of their purpose. +Secondly, there have been so many changes that your old files would be +incompatible anyway. + +The `.lua` files are now named as follows: + + cfg_*.lua Configuration file that the user may wish to edit + look_*.lua Drawing engine style file + saved_*.lua Save file + mod_*.lua Module stub loader + ext_*.lua A bigger Lua extension without a C counterpart + so that it is not a module + +The configuration file for `mod_foobar` or `ext_foobar`, if it has one, is, +of course, `cfg_foobar.lua`. In the topic of file names, also note that +the default installation paths and binary names have changed to include +the component '3' to reflect the situation with many binary packages +of Ion. + +You perhaps noticed above that modules have stub loaders now, so the +user has no need to use the `ioncore.load_module` routine. All extensions +and additional configuration files can now be loaded with 'dopath' +(used to be 'include'). Also, the `menulib`, `querylib`, and `ioncorelib` +Lua libraries are gone and instead their contents can be found in the same +`mod_whatever` namespace with the corresponding module (the "stub" loader +for these modules is a bit more than just a stub...). Some may also +want to know that for `mod_*` and `ext_*` only the compiled .lc files are +now installed, and not the source `.lua` files, thus removing redundant +files and making the installation slightly smaller. + +There are few other changes to the contents of the configuration files +as well, so you're probably best off simply rewriting your modified +configuration files based on the new defaults. There quite likely won't +be any more _big_ changes to the configuration files before the release +of final Ion3, wherever that will be. (Most likely we won't see 3rc:s +yet this year.) However, some functions and variables are still likely +to be renamed or changed. + +In addition to being renamed, the layout savefile of this Ion release +is incompatible with older releases. This is due to the changes made +to the `WIonWS` (and `WAutoWS`) split tree code to make it more modularly +extensible with the new kinds of nodes that `WAutoWS` requires. + +The `mod_autows` module has infact been through many changes since the +last release, and I think I have the final form of it finally figured +out. However, it is still far from finished and unlikely to be ready +for use yet. + + +ion-3ds-20040703 +---------------- + +The major new features of this snapshot release are: + + * `WMPlex` support for a sticky status display area to which `WIonWS`s + adjust properly. Modified to the dock module to support this method. + See the new `dock.lua` to set up the dock in the new embedded or old + floating manner (the API for the latter has also changed). + * Primitive session management support. + +There are also some bug fixes and many minor improvements; see the ChangeLog +for details. Work on `mod_autows` has also started, but it isn't ready for +use yet. + + +### Note on ./configure: + +./configure does not exist for the moment as the source autoconf script +is not up-to-date. Ion no longer uses libtool/libltdl due to problems +with inter-module dependencies, and I have not asked Tom Payne to fix +the script yet, as this change may not be final (although that is most +likely the case; those without Linux-compatible libdl and a flexible +binary format such as ELF will just have to link statically against the +modules). + + +### Notes on session management: + +Ion loads `mod_sm` automatically when the SESSION_MANAGER environment +variable that should be set by the session manager is set, so there's +no need load it in `ion.lua`. + +When session management is in use, all entries in the 'Session' menu +(previously 'Exit' menu) actually invoke the session manager to do the +task. 'Save' asks the SM save the whole session and 'Exit' (ioncore.shutdown) +asks it to shut down the session instead of just causing the WM to quite. +To do the latter, use ioncore.resign. + +Unfortunately, all session managers I have tried (from Debian/unstable), +are broken/incomplete in one way or another: + + +xsm: doesn't support any requests from applications. This makes Ion's +session menu complete unfunctional. The only way to restart/exit/save +state is through xsm's window. + + +gnome-session: This seems the most complete of the all the session managers +and works fine until it is requested to shut down the session, when it dumps +core and session state is lost if was not explicitly saved previously. + +A `~/.gnome2/session` file to use with Ion follows: + + [Default] + num_clients=2 + 0,id=default0 + 0,Priority=0 + 0,RestartCommand=gnome-smproxy --sm-client-id default0 + 1,id=default1 + 1,Priority=10 + 1,RestartCommand=/usr/local/ion-3/bin/ion -smclientid default1 + + +ksmserver: Only supports a global shutdown request, so that Ion can not be +restarted or session state saved in the middle of a session. + + +ion-3ds-20040316 +---------------- + +This is the first development snapshot release of what is to be Ion3. +The most visible changes to Ion2 so far are: + + * Default installation directory is `/usr/local/ion-3` while user + configuration files go in `~/.ion3` + + * The `mod_sp` module was added. It creates an extra toggleable + "scratchpad" frame on each screen. Toggle is for now bound by default + to Mod1+section, which should be very conveniently located on most + Nordic keyboards (left of "1"), but you may have to change it. The + scratchpad should be nice for xconsole or similar monitors, xmessage + and other popups and just as temporary holding space for windows. + + * All modules except the drawing engine are now called `mod_something`. + + * Man-page complection supports a cache of known man-pages for faster + completion. See the README for instructions on setting up a cronjob + or manually generating the index if you want to use the feature. + Also `query_man_path` is no longer used. Instead we try the + `ION_MC_MANPATH` and `MANPATH` environment variables and the + 'manpath' program. + + * Exported functions are now separated into tables (namespaces) + instead of cluttering the globals table. Some frequently used + configuration functions are imported into the globals table, though. + Some functions have also been removed or renamed for simpler and + more consistent function set. + + * New binding configuration mechanism. Dozens of `*_bindings` functions + were replaced with a single `[ioncorelib.]defbindings` function that + accepts a context parameter. Callbacks are specified as strings + (although passing functions still works) to make it easier for + external configuration programs to understand the configuration + files and perhaps remove some confusion among users who do not + care to read a tiny bit of Lua documentation and understand the + concept of anonymous functions. + + * It is now also possible to retrieve a list of bindings with + `ioncorelib.getbindings`, for example, for self-documentation. + + * Single move/resize mode bindings instead of separate for both + ionframe and floatframe. + +There are also quite a few internal changes; see the ChangeLog for +details. No documentation tarball is available at the moment as the +documentation is out-of-date except for the function reference. If +you need the reference, just checkout the documentation from the +Subversion repository with + + svn co http://tao.uab.es/ion/svn/ion-doc/trunk ion-doc-3ds + +and build the documentation. + + +ion-2rc-20040114 +---------------- + +This release is finally what can be called "Ion 2 release candidate #1". +No more new features will be added to "Ion 2" after this release, and the +configuration interface has already been frozen for a while. I will wait a +couple of weeks for bug reports, and if nothing serious is found, the new +stable Ion should finally be released then. + +The most notable changes since the previous release are: + + * The dock module is included + * An optional autoconf script was added + * A few minor bugs were fixed + * Some incomplete features were polished, especially focus control on + floatws, and: + * Changes in X keyboard map are supported now (so e.g. switching to + dvorak after Ion has started should update the bindings to match the + locations of symbols in the dvorak layout). + + +About the version numbering scheme: + +Due to a demand of a version numbering scheme more indicative of the status +of the project, I was thinking of various different new version numbering +schemes for this release: ion-2rc1 (then 2r1, 3d1, etc.), ion-2-20040114-rc1, +ion-2.20040114rc1, ion-20040114-2rc1, etc.). It would've been nice if +simple lexicographical sorting could be used to order the packages, but +in the end I decided to stick with a scheme that is consistent with the +'ion-devel' package names: + + project-branch_and_status-release_date + +Therefore this release is 'ion-2rc-20040114', and the "stable" one will be +'ion-2-20040???'. + + +ion-devel-20031211 +------------------ + +This is a big clean-up release. The most noticeable changes are that +'-devel' has been removed from path names, user configuration files go +in `~/.ion2/` and the main configuration file is 'ion.lua'. (The other +`ioncore-*.lua` files have also been renamed.) There have been no notable +changes in the configuration files themselves, so your old files will +work if you move them to the correct directory and rename the changed +files. (`mv ~/.ion-devel ~/.ion2; cd ~/.ion2; mv ioncore.lua ion.lua;` +etc.) + +This release also finally contains a working PWM binary. (The ioncore+ +scripts scheme was replaced with separate binaries statically linked +to ioncore.a.) Floating workspaces now support edge snapping and +sticky windows, but some PWM features are probably still missing. + +Some bugs were also fixed and users are now force-fed the manual page +the first time Ion is started. Transients can be toggled between +top/bottom of the main window with Mod1+K T. The SSH query uses +`~/.ssh/known_hosts` for completion instead of a manually defined list. + +There may be a few additions (e.g. the dock) and bug fixes, of course, +before the stable release, but this release should pretty much be what +the new "stable" Ion should look like. Please upgrade to it to help +weed out the bugs. Note that you need to upgrade Lua to the 5.0.1 +pre-release. + + +ion-devel-20031119 +------------------ + + +It's finally time for a new release on Ion's development branch. Most +likely this will also be the last "big" release before finally, after +almost two years, releasing a new "stable" version of Ion. A few bug +fix and code clean-up releases should appear in between, though. + +The most important additions, changes and non-changes in this release +are: + + * Menu module + * A little less broken extended character set and string encoding + support + * Extended WM hints fullscreen request support + * Hopefully a little clarified configuration file layout + * Quite a few fixes + * And most important of all: + +> Configuration files written for the previous release should +> still work this time! + +(However, Ion will complain of old drawing engine styles.) + +The menu module provides both drop-down menus (in the stock configuration +pressing Button3 on a tab should show a context menu) and query-like +"in-mplex" menus (F12: main menu at screen level; Mod1+M: the same context +menu as above at frame level). + +What was done enhance support for strings (mostly window titles) in +languages that need more than 8-bit character sets is: + + * Remove UTF8 restriction and support almost arbitrary multibyte + encodings instead. (Statefull encodings will not work and combining + characters can cause clutter. Both are a sign of bad encoding, IMHO.) + + * The XCreateFontSet routine that is used to load fonts in the kind + of structure the X utf8 and multibyte routines want apparently wants + to be able to load glyphs for all character sets specified in the + locale and therefore often fails if only single font is specified. + Therefore a kludge was added that tries loading more fonts while + keeping the fonts' size the same. (The ",*" kludge could load huge + fonts). Unfortunately this has a noticeable effect in startup time :(. + + * There is no longer a system.mk option to enable utf8 (now multibyte) + support, but must still specifically be enabled with the -i18n + command line switch, mostly thanks to troublesome utf-8 locales. + +Because Xlib's UTF-8 string drawing code is broken and very unlikely to +be fixed, decent text output in an UTF-8 locale is still unlikely and +dependent on the fonts loaded in the system. The Xmb routines that are now +used always use an iso10646-1 font even if other fonts are loaded and the +unicode font does not contain a particular glyph to be drawn. The use of +the Xutf8 routines in an utf8 locale can be enabled with the +`CF_DE_USE_XUTF8` compile-time option. The advantage of this is that +these routines seem to choose the font to draw particular character in +most cases more sanely. The downside is that there are other more serious +problems with unknown characters. + +All in all, even if I'd like to support a universal move to UTF-8, thanks +to Xlib brokenness I can't really recommend using UTF-8 locales with Ion +and the default drawing engine if there's a decent alternative encoding. +Most if not all other stateless encodings shouldn't have the problems +UTF-8 has. An alternative drawing engine that didn't use the Xlib i18n +string drawing routines might solve the troubles with utf-8 support. + +One more note: + +If you have saved a custom system.mk, you'll need to set LUAC +point to the Lua compiler there as some of the share/ files +are compiled now. + + +ion-devel-20030810 +------------------ + +It's been a while since the previous release as I wanted to freeze the +Lua configuration/scripting interface for this release and therefore +finish work on a few things. Well, on my part the interface is frozen, +but I will still accept constructive complaints for a short time and +after that the implemented parts of the scripting interface will be +frozen. But in all likelihood, if no one has anything else to say, but +"it's ok", "it sucks", the interface will no longer change, only possibly +grow. + +What's new for this release then? + + * Drawing engine module support. + * OO-style exported functions. The old `class_fn` functions are now + `WClass.fn` (an ugly wrapper is provided in `compat.lua`). + * No more screen-specific configuration or savefiles. + * Session name (can be specified on command line) instead of display + name based savefiles. Also affects query history and not just workspace + saves. + * Bug fixes, most small and one bigger (almost complete rewrite of + the split resizing algorithm). + * Some documentation improvements. + +Converting configuration files. + +Old `.lua` colour schemes and workspace save files can be automatically +converted to a format suitable to be loaded by this latest release. +Other files will have to be ported manually. To convert colour schemes, +use the script `utils/lookconv.lua`. The usage is + + lookconv.lua look-old.lua > look-new.lua + +To convert workspaces savefiles, use the script `utils/saveconv.sh`. +The usage is + + saveconf.sh ~/.ion-devel/saves/workspaces-DISPLAY.*.lua \ + > ~/.ion-devel/SESSIONNAME/workspaces.lua + +`DISPLAY` here is the actual display part of `$DISPLAY`, probably just `:0`. +'*' stands for all screens (if you have only one screen you could do with +perhaps just `workspaces-:0.0.lua`). SESSIONNAME is the name of the session +where you want to use the converted savefiles. Default session name for +`DISPLAY` is `default-session-DISPLAY` with the colon in `DISPLAY` converted +to a dash. For most people this is `default-session--0`. In the simplest +case the whole command line is therefore + + saveconv.sh ~/.ion-devel/saves/workspaces-:0.0.lua \ + > ~/.ion-devel/default-session--0/workspaces.lua + +The scripts may or may not work and are only provided as a potential +convenience that will not be maintained and will be removed eventually. + + +ion-devel-20030623 +------------------ + +Quite a few bug fixes and one most likely unnoticeable improvement: + +2003-06-23: + + * Fixed pointer warping on screen change. + * A bug in grab handler calling code could crash Ion when leaving + keyboard resize mode manually. + * Resize display was showing incorrect values for keyboard resize. + +2003-06-21: + + * Client window last height request bookkeeping code had been lost + when configure request policy was changed. This caused transient + sizes to be calculated incorrectly. + * Return from full screen mode to floatws had been broken. + * As the number of dynamic functions has been getting bigger, the + functions are now sorted on first use and then binary-searched + instead of naive linear searching. + * Screen lookup had been broken for windows that are not properly + on any screen. + + +ion-devel-20030620 +------------------ + +Just some bug fixes and minor behavioural changes and improvements in +this release: + + +ion-devel-20030617 +------------------ + +This release fixes some small problems with the previous release and +adds a workaround kludge for the XFree86 textprop bug (it's been fixed +but no release with the fix is available) that could cause Opera to +crash Ion when UTF8 support was enabled. I also added the winprop +needed for galeon's find dialog to default `kludges.lua` and there's +some extra documentation and defaults for some systems in system.mk. + + +ion-devel-20030614 +------------------ + +Most changes in this release centre around making Ion more tolerant +to broken configuration files; for details see the ChangeLog. There +are also changes in binding configuration as I already mentioned in +an earlier poting. Namely `common-frame-bindings.lua` is gone and the +bindings previously set there (into variables that the `*ws.lua` +files later referenced) were moved to `ioncore-bindings.lua` and are +set using the new functions `mplex_bindings` and `genframe_bindings` +are were added. Old modified configuration files should still work, +however, but if you use `make_active_leaf_fn`, you will need to +include `compat.lua` as the `global_bindings` that used this were +replaced by bindings in `mplex_bindings` and the function +`make_current_clientwin_fn`. + +There are also some (minor) bug fixes and a few other improvements +worth a mention. In particular all regions are now given names of +the form `WFoobar` by default and `DEFAULT_MOD.."F9"` was bound to +create a new workspace without asking for a name. This binding and +`QueryLib.query_workspace` use the workspace type defined in the +variable `default_ws_type` instead of being hardcoded to `WIonWS`. + +All objects passed to Lua now have a unique userdata (a `WWatch` +cached in a weak table) so they can be used e.g. as indices to tables. + + +ion-devel-20030606 +------------------ + +This release unifies some parts of `WScreen` and `WGenFrame`, which makes +screen-level queries possible. (Later the queries for small frames might +be changed to be shown at screen level.) The statusbar restriction from +ion-devel-20030531 was also removed by this some change and a few +non-fatal bugs have been fixed. + + +ion-devel-20030601 +------------------ + +A bug was discovered: + +2003-06-01: + + * An off-by-one error in `extl_l1_finalize` caused references to some + Lua tables (including large completions) never to be released. + +It could be that this bug was causing some other errors in Lua as well. +Sometimes QueryLib bindings failed because some function generators +returned nil although they shouldn't. Adding dummy lines (!) in those +functions fixed the problem and for some reason this patch also seemed +to remove those problems. + + +One more note: as `ioncorelib.lua` and `querylib.lua` are now installed +in `$SHAREDIR`, you must remove the old files in `$ETCDIR` if installing +over a previous release or else there will be errors. You should also +not use any possible old copies you have in `~/.ion-devel/`. (One of the +reasons for moving these to `$SHAREDIR` is to stop users from making +copies of them as they are not configuration files.) + + +ion-devel-20030531 +------------------ + +As the subject line says, Ion-devel-20030531 was just released. The short +list of changes is: + + * The license was changed from the Clarified Artistic License to the + GNU Library/Lesser General Public License (LGPL). + * Screen, viewport and root window renames and other changes (see below). + * Some installation directory changes; the ion-* helper programs are now + installed either in `$SHAREDIR` or `$EXTRABINDIR` and QueryLib searches + for them on the script path (`~/.ion-devel/`, `$ETCDIR`, `$SHAREDIR`, + `$EXTRABINDIR`) instead of assuming them being on `$PATH`. + * Client windows are now in a separate namespace. + * Resize/maximize/shade changes: Shading should work on `WIonFrame`s too + and shade mode is automatic when the client area gets too small when + resizing. Maximize toggle restores frame to previous size if shaded + instead of maximizing. The move/resize mode bindings were changed again + to be more consistent and predictable: Left/Right/Up/Down and F/B/P/N + grow the frame in the specific direction, Shift+keys shrink and in + case of floating frames, `DEFAULT_MOD+keys` move + * Returning from full screen mode should work on `WFloatWS`s too. + * Lots of minor fixes, export additions and clean-up. + +As usual, see the (long!) list of new ChangeLog entries at the end of +this message for details. + + +I've finally personally switched from the old "stable" 20020207 to using +the latest development release at home too and I must say that it is +finally starting to look good. There are still things to be written, but +unless you need "proven" stability, I see no reason to sticking to that +old release anymore. Unless, of course, if you find a problem that I have +not encountered or simply have no need for the new features and don't want +to port your configuration files. + + +On screens, viewports, root windows and problems with the new +implementation + +The objects previously called "screens" are now called "root windows" +and what were called "viewports" are called "screens" to better reflect +what the user sees. (When Xinerama is not used there's no difference +between a root window and a screen, but when Xinerama is used a root +window may be split over multiple screens.) + +This release also creates so-called virtual root windows for each +Xinerama screen when there are more than one. This is to better separate +the windows on different screens and thus emulate normal multihead, the +main difference being that windows can be moved between screens. +Especially the virtual roots are there to keep the windows that are on +a floatws on the right screen. + +Virtual root windows will, however, break a few apps: + + * Mozilla -remote won't work because of its crappy method for looking + up existing windows that can't handle multiple levels of WM windows. + Nested workspaces have the same problem. There is, however, a simple + solution to this problem: gnome-moz-remote. It seems to use a saner + method for looking up an existing Gecko browser and also works with + at least Phoenix/MozillaFirebird and Galeon. + +These two are problems only if you use floatws:s (other problems with +which virtual root windows are intended to solve): + + * The background-setting apps I am aware of will require a following + 'xrefresh' for the changes to be updated to the (transparent) virtual + roots. Background setting apps that support the `_NET_VIRTUAL_ROOTS` + property (which, I think, was meant for root window-sized WS + backgrounds) could be used to set a separate background for each + Xinerama screen, though. I am not aware of any such app. + * Some apps' resize and move features will behave erratically on those + Xinerama screens not at (0, 0) on the root window. This is again + because the apps are assuming there's at most one WM window between + them and the root and are requesting windows' positions incorrectly. + The ICCCM is quite vague on this and I think _all_ apps that I have + tried are doing it wrong but the way e.g. XMMS does it certainly is + not an interpretation of the ICCCM. The apps that now behave correctly + request position for the outermost WM window. Nested workspaces have + the same problem. + +There is one more temporary problem: + + * Status bar modules (and the dock module's statusbar mode) will be + *temporarily* broken when virtual roots are _not_ used. This will be + fixed later when parts of screen and frame code are unified (it should + then be possible to run Ion without any workspace modules and have + queries attached to screens). In the meanwhile, if you don't care about + the above-mentioned problems and want a statusbar (which probably needs + to be ported to this release), you can defined `CF_ALWAYS_VIRTUAL_ROOT` + when compiling Ion. + + +ion-devel-20030510 +------------------ + +There are quite a few small fixes and minor enhancements invisible to +the user in this release. The splitting functions were renamed to be +more consistent and there are a couple of enhancements in the Lua code +query that should make it much more usable. First, tab-completion can +now descend into tables and complete subexpressions. Secondly, the local +variable `_` in addition to 'arg[1]' is set to point to the the frame in +which the query is executing. + +I have also written some new documentation that is now available from +the Ion web page. + + +ion-devel-20030506 +------------------ + +The most notable change in this release is that the `target_id` system +was removed and instead client window status is also saved over +restarts in the saves/workspaces-* files. (It shouldn't be too hard +to hook a session management module over this.) Thanks to this +modification, floatframes can also save their status now. Note +that if you restart from older version of Ion to this one, client +window layout will be messed up. + +There are also a few bug fixes and code to save and load line editor +history was added. + + +ion-devel-20030503 +------------------ + +There are lots of minor improvements in this release, see the +new ChangeLog entries for details. + + +ion-devel-20030427 +------------------ + +Some minor feature enhancements and a few fixes in this new release: + +The file system scanning completions are now put in the background +by receiving the data from external programs through pipes and select() +for data in the main event loop. This way long taking completions don't +block Ion from processing other events and NFS problems shouldn't hang +it. + +Basic window stacking management support code was added. Transients +on floatws:s should now be stacked above their parents. If you don't +want to change your modified binding configurations at this point and +need the functions `floatframe_raise/lower`, include `compat.lua`. + + +ion-devel-20030412 +------------------ + +This release again fixes some minor problems and enhances a few +features. Most of the enhancements are related to UTF8 support and +the floatws module. If UTF8 support is enabled, Ion now tries to +load the "fixed" font at startup after setting up locales. If locales +aren't properly set up, this probably fails and Ion will reset locale +back to "POSIX" as this might make fonts loadable although support for +non-ASCII characters will be crippled. It might now be safe for +package maintainers to enable UTF8 support by default + +As apps seem to have switched to using `_NET_WM_NAME` for UTF8 titles +and filling `WM_NAME` with crap, this property is also preferred over +`WM_NAME` if set. Support for some other "extended" WM hints might be +added in the future but I have no intentions of moking Ion NetWM- +compliant. I might have thought of attempting to do so a few years +ago when I last read the specification but it seems that since then +they've filled it with lots of pointless bloat that may even be in +opposition to Ion's goals. Take multi-parent transients, for example. + +Full error log is also displayed with xmessage on startup whether +it is possible to continue or not. + + +ion-devel-20030410 +------------------ + +There was a bug in QueryLib written yesterday, therefore this release. + + +ion-devel-20030409 +------------------ + +I started converting the query code to Lua and discovered some rather +silly bugs in the Lua interface so here's a new release with the new +and improved query code included. The names of queries have changed +(they're all in the table QueryLib defined in `querylib.lua` -- only +`query_query` and a few temporary handlers are implemented in query.so) +so your modified configuration files will be broken again :(. + + +ion-devel-20030408 +------------------ + +Be prepared to completely rewrite your configuration files once +again: a new version of Ion-devel has been released that uses Lua + for all configuration. Version 5.0 of the +language/library is required. Although scripting possibilities +are now much better than before, there is one rather big drawback: +Lua is not nearly as error-tolerant as Ion's old configuration +parser so a syntax error in a file will cause the file not to be +executed and may even cause Ion not to be able to start. More +comments and documentation on scripting will follow at a later time. + +Libtool and libltdl are also now used to implement module support. +Hopefully this will make compiling Ion easier on a wider range of +platforms. (On the other hand, this could also induce new problems.) + +Finally, the preferred linking address for Ion's home page is now +. The pages are still located at the +old address, but this redirected address should be more permanent. + + +ion-devel-20030327 +------------------ + +Just some minor fixes, binary rename and better embedded workspace +support in this release. I'm still contemplating whether to convert +Ion to C++ and haven't written many things that I intended to as +that decision will affect how those are implemented. + +To create an embedded workspaces in a frame, at the moment you have +to modify the appropriate workspace save file (when Ion is not running!) +by adding lines such as + + region "WFloatWS", "testiupotus" { + } + +inside the frame definition after the other options (flags, `target_id`; +those options will be ignored if after any region definitions). + +One more thing to note: debugging infos are no longer automatically +stripped from the ioncore binary or modules by 'make install' so that +I don't have to explain how to get proper backtraces every time a bug +is found. If you you are confident that you can send me proper backtraces +when you find a bug (or maybe can fix it yourself), you can make the +binary and the modules a _lot_ smaller by running 'strip' on them. + + +ion-devel-20030311 +------------------ + +The list of new ChangeLog entries is long this time, but I'm finally +starting to get to what I started working on almost two years ago. Yes, +there is *experimental* support for PWM-like "floating frame" workspaces. +A lot of the functionality is still missing -- no need to complain of +such at the time -- but the floatws.so module and basic functionality +is there. Most notably perhaps a menu module is not yet implemented. +(Porting the PWM menu code should a nice little task for whomever +interested... *wink*.) To create some PWM workspaces, load the floatws.so +module (should be loaded by default) and in `query_workspace` (F9) +prefix workspace name with 'WFloatWS:' (or load the module before +ionws.so). + +This release is also finally fully modularised: In addition to the +ion core binary that can not function alone, there are the modules +ionws.so, floatws.so and query.so. It is also possible statically +compile the modules in the core binary if the system doesn't support +libdl. + +There's also *experimental* UTF8 support that must be specifically +enabled from system.mk. You must have XFree86 (4.x?) and C99 wide +char support available (either libc directly or maybe libutf8+libiconv). +Thanks to bugs (?) in some of the XFree86 Xutf8 functions, your locales +must be properly set up or else X will stop drawing strings at non-ascii +characters instead of ignoring them. See my earlier rants on the mailing +list for reasons on not using the more standard Xmb functions. +To actually see any special characters, you must load the necessary fonts +by specifying a comma-separated list of fonts to the font and `tab_font` +draw.conf options. Multiple font loading does not work when Xft support +is enabled at the time being. + +There has been a lot of changes in the config files, again, and I can +promise there's still more to come. See the ChangeLog for details. +If you want to use your old workspaces configurations, move them to +`~/.ion-devel/saves` and replace the strings "WFrame" and "WWorkspace" +with "WIonFrame" and "WIonWS", respectively. + + +ion-devel-20030225 +------------------ + +I've made the bugfix release as promised. Get it from the usual place. + + +ion-devel-20030223 +------------------ + +There's a new major development release available from Ion web page. +Not many changes are visible to the end user, though, but a lot was +rewritten to be more flexible and simpler; see the ChangeLog for a +full account. The older development release is also still available +because this release can not be considered as stable after major +changes to the code. The most visible changes are + + * Changes in binding configuration + * A (mostly) working full screen mode toggle (see below) + * The ability to switch workspaces while dragging tabs (experimental) + * The ability to re-read draw.conf without restarting Ion + * Some bug fixes. + + +Some notes on full screen mode toggle: + + * Ion doesn't detect programs trying to leave full screen mode--it + should be possible to devise some method using window properties, + however. + * At least Opera unmaps the window also before changing the size to + enter full screen mode, so Ion doesn't remember the last frame. + * Mozilla sometimes has trouble entering full screen mode but when it + succeeds, Ion remembers the last frame. However, if + `clientwin_toggle_fullscreen` is used to leave the full screen mode + started from Mozilla, Mozilla doesn't know that the mode has been + left. + +Clearly there should be some method of communication between Ion and the +programs for full screen toggles to fully work. At the moment I suggest +using `clientwin_toggle_fullscreen` instead of the programs' native toggles +unless the program has some special full screen mode and you really want +it. diff -Nru notion-3+2014010901/ioncore/activity.c notion-3+2015061300/ioncore/activity.c --- notion-3+2014010901/ioncore/activity.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/activity.c 2015-06-13 14:37:26.000000000 +0000 @@ -40,7 +40,7 @@ if(mgr==NULL) return; - mgr->mgd_activity=maxof(0, mgr->mgd_activity-1); + mgr->mgd_activity=MAXOF(0, mgr->mgd_activity-1); if(!region_is_activity_r(mgr)){ region_notify_change(mgr, ioncore_g.notifies.sub_activity); diff -Nru notion-3+2014010901/ioncore/binding.c notion-3+2015061300/ioncore/binding.c --- notion-3+2014010901/ioncore/binding.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/binding.c 2015-06-13 14:37:26.000000000 +0000 @@ -551,19 +551,19 @@ int ioncore_modstate() { - char keys[32]; - int state=0; - int j; - - XQueryKeymap(ioncore_g.dpy, keys); + char keys[32]; + int state=0; + int j; + + XQueryKeymap(ioncore_g.dpy, keys); - for(j=0; jmax_keypermod; j++){ + for(j=0; jmax_keypermod; j++){ int a=(modmap->modifiermap[j]&7); - int b=(modmap->modifiermap[j]>>3); - if(b<32){ - if(keys[b]&(1<max_keypermod]; - } + int b=(modmap->modifiermap[j]>>3); + if(b<32){ + if(keys[b]&(1<max_keypermod]; + } } #ifdef CF_HACK_IGNORE_EVIL_LOCKS diff -Nru notion-3+2014010901/ioncore/clientwin.c notion-3+2015061300/ioncore/clientwin.c --- notion-3+2014010901/ioncore/clientwin.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/clientwin.c 2015-06-13 14:37:26.000000000 +0000 @@ -78,20 +78,6 @@ } -static WSizePolicy get_sizepolicy_winprop(WClientWin *cwin, - const char *propname, - WSizePolicy value) -{ - char *szplcy; - - if(extl_table_gets_s(cwin->proptab, propname, &szplcy)){ - string2sizepolicy(szplcy, &value); - free(szplcy); - } - return value; -} - - #define SIZEHINT_PROPS (CLIENTWIN_PROP_MAXSIZE| \ CLIENTWIN_PROP_MINSIZE| \ CLIENTWIN_PROP_ASPECT| \ @@ -167,46 +153,60 @@ } } - -void clientwin_get_size_hints(WClientWin *cwin) +void clientwin_apply_size_hint_winprops(XSizeHints original, WClientWin *cwin) { - XSizeHints tmp=cwin->size_hints; - - xwindow_get_sizehints(cwin->win, &(cwin->size_hints)); - if(cwin->flags&CLIENTWIN_PROP_I_MAXSIZE){ cwin->size_hints.flags&=~PMaxSize; }else if(cwin->flags&CLIENTWIN_PROP_MAXSIZE){ - cwin->size_hints.max_width=tmp.max_width; - cwin->size_hints.max_height=tmp.max_height; + cwin->size_hints.max_width=original.max_width; + cwin->size_hints.max_height=original.max_height; cwin->size_hints.flags|=PMaxSize; } if(cwin->flags&CLIENTWIN_PROP_I_MINSIZE){ cwin->size_hints.flags&=~PMinSize; }else if(cwin->flags&CLIENTWIN_PROP_MINSIZE){ - cwin->size_hints.min_width=tmp.min_width; - cwin->size_hints.min_height=tmp.min_height; + cwin->size_hints.min_width=original.min_width; + cwin->size_hints.min_height=original.min_height; cwin->size_hints.flags|=PMinSize; } if(cwin->flags&CLIENTWIN_PROP_I_ASPECT){ cwin->size_hints.flags&=~PAspect; }else if(cwin->flags&CLIENTWIN_PROP_ASPECT){ - cwin->size_hints.min_aspect=tmp.min_aspect; - cwin->size_hints.max_aspect=tmp.max_aspect; + cwin->size_hints.min_aspect=original.min_aspect; + cwin->size_hints.max_aspect=original.max_aspect; cwin->size_hints.flags|=PAspect; } if(cwin->flags&CLIENTWIN_PROP_I_RSZINC){ cwin->size_hints.flags&=~PResizeInc; }else if(cwin->flags&CLIENTWIN_PROP_RSZINC){ - cwin->size_hints.width_inc=tmp.width_inc; - cwin->size_hints.height_inc=tmp.height_inc; + cwin->size_hints.width_inc=original.width_inc; + cwin->size_hints.height_inc=original.height_inc; cwin->size_hints.flags|=PResizeInc; } } +int clientwin_get_size_hints(WClientWin *cwin) +{ + XSizeHints original=cwin->size_hints; + + int ret=xwindow_get_sizehints(cwin->win, &(cwin->size_hints)); + + clientwin_apply_size_hint_winprops(original, cwin); + + return ret; +} + +void clientwin_reset_size_hints(WClientWin *cwin) +{ + XSizeHints original=cwin->size_hints; + + memset(&(cwin->size_hints), 0, sizeof(cwin->size_hints)); + clientwin_apply_size_hint_winprops(original, cwin); +} + void clientwin_get_input_wm_hint(WClientWin *cwin) { XWMHints *hints; @@ -556,8 +556,8 @@ goto fail2; } - attr.width=maxof(attr.width, 1); - attr.height=maxof(attr.height, 1); + attr.width=MAXOF(attr.width, 1); + attr.height=MAXOF(attr.height, 1); /* Find root window */ FOR_ALL_ROOTWINS(rootwin){ @@ -691,16 +691,16 @@ }else{ int dr=REGION_GEOM(par).w-REGION_GEOM(cwin).w-REGION_GEOM(cwin).x; int db=REGION_GEOM(par).h-REGION_GEOM(cwin).h-REGION_GEOM(cwin).y; - dr=maxof(dr, 0); - db=maxof(db, 0); + dr=MAXOF(dr, 0); + db=MAXOF(db, 0); XTranslateCoordinates(ioncore_g.dpy, par->win, attr.root, 0, 0, &x, &y, &dummy); x-=xgravity_deltax(cwin->size_hints.win_gravity, - maxof(0, REGION_GEOM(cwin).x), dr); + MAXOF(0, REGION_GEOM(cwin).x), dr); y-=xgravity_deltay(cwin->size_hints.win_gravity, - maxof(0, REGION_GEOM(cwin).y), db); + MAXOF(0, REGION_GEOM(cwin).y), db); } XReparentWindow(ioncore_g.dpy, cwin->win, attr.root, x, y); @@ -711,8 +711,6 @@ void clientwin_deinit(WClientWin *cwin) { - WRegion *reg; - if(cwin->win!=None){ region_pointer_focus_hack(&cwin->region); @@ -823,7 +821,7 @@ } -void clientwin_rqclose(WClientWin *cwin, bool relocate_ignored) +void clientwin_rqclose(WClientWin *cwin, bool UNUSED(relocate_ignored)) { /* Ignore relocate parameter -- client windows can always be * destroyed by the application in any case, so way may just as @@ -1020,8 +1018,8 @@ REGION_GEOM(cwin)=geom; - w=maxof(1, geom.w); - h=maxof(1, geom.h); + w=MAXOF(1, geom.w); + h=MAXOF(1, geom.h); if(cwin->flags&CLIENTWIN_PROP_ACROBATIC && !REGION_IS_MAPPED(cwin)){ XMoveResizeWindow(ioncore_g.dpy, cwin->win, @@ -1130,7 +1128,7 @@ ExtlTab clientwin_get_ident(WClientWin *cwin) { char **p=NULL, **p2=NULL, *wrole=NULL; - int n=0, n2=0, n3=0, tmp=0; + int n=0, n2=0, n3=0; Window tforwin=None; ExtlTab tab; bool dockapp_hack=FALSE; @@ -1252,7 +1250,7 @@ rq.geom.x+=xgravity_deltax(cwin->size_hints.win_gravity, 0, ev->width-rq.geom.w); } - rq.geom.w=maxof(ev->width, 1); + rq.geom.w=MAXOF(ev->width, 1); rq.flags&=~REGION_RQGEOM_WEAK_W; } if(ev->value_mask&CWHeight){ @@ -1261,7 +1259,7 @@ rq.geom.y+=xgravity_deltay(cwin->size_hints.win_gravity, 0, ev->height-rq.geom.h); } - rq.geom.h=maxof(ev->height, 1); + rq.geom.h=MAXOF(ev->height, 1); rq.flags&=~REGION_RQGEOM_WEAK_H; } if(ev->value_mask&CWX){ @@ -1470,7 +1468,7 @@ convert_geom(fp, cwin, &rg); REGION_GEOM(cwin)=rg; do_reparent_clientwin(cwin, par->win, rg.x, rg.y); - XResizeWindow(ioncore_g.dpy, win, maxof(1, rg.w), maxof(1, rg.h)); + XResizeWindow(ioncore_g.dpy, win, MAXOF(1, rg.w), MAXOF(1, rg.h)); if(!postmanage_check(cwin, &attr)){ clientwin_destroyed(cwin); diff -Nru notion-3+2014010901/ioncore/clientwin.h notion-3+2015061300/ioncore/clientwin.h --- notion-3+2014010901/ioncore/clientwin.h 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/clientwin.h 2015-06-13 14:37:26.000000000 +0000 @@ -67,7 +67,14 @@ extern void clientwin_get_protocols(WClientWin *cwin); -extern void clientwin_get_size_hints(WClientWin *cwin); +/** + * On failure, sets cwin->sizehints based on winprops and returns -1 + * On success, sets cwin->sizehints based on WM_NORMAL_HINTS and winprops + * and returns a nonnegative value. + */ +extern int clientwin_get_size_hints(WClientWin *cwin); +/** Resets cwin->sizehints based on winprops. */ +extern void clientwin_reset_size_hints(WClientWin *cwin); extern void clientwin_unmapped(WClientWin *cwin); extern void clientwin_destroyed(WClientWin *cwin); extern void clientwin_kill(WClientWin *cwin); diff -Nru notion-3+2014010901/ioncore/colormap.c notion-3+2015061300/ioncore/colormap.c --- notion-3+2014010901/ioncore/colormap.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/colormap.c 2015-06-13 14:37:26.000000000 +0000 @@ -163,7 +163,6 @@ void clientwin_clear_colormaps(WClientWin *cwin) { int i; - XWindowAttributes attr; if(cwin->n_cmapwins==0) return; diff -Nru notion-3+2014010901/ioncore/conf-bindings.c notion-3+2015061300/ioncore/conf-bindings.c --- notion-3+2014010901/ioncore/conf-bindings.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/conf-bindings.c 2015-06-13 14:37:26.000000000 +0000 @@ -93,7 +93,6 @@ } if(!button && keysym!=NoSymbol){ - int tmp; if(*ksb_ret!=NoSymbol){ warn_obj(str, TR("Insane key combination.")); break; @@ -257,7 +256,6 @@ char *action_str=NULL, *ksb_str=NULL, *area_str=NULL; int action=0; uint ksb=0, mod=0; - WBinding *bnd=NULL; ExtlTab subtab; ExtlFn func; bool wr=FALSE; @@ -378,7 +376,6 @@ static char *get_key(char *mods, uint ksb) { const char *s=XKeysymToString(ksb); - char *ret=NULL; if(s==NULL){ warn(TR("Unable to convert keysym to string.")); @@ -392,7 +389,6 @@ static char *get_button(char *mods, uint ksb) { const char *s=stringintmap_key(button_map, ksb, NULL); - char *ret=NULL; if(s==NULL){ warn(TR("Unable to convert button to string.")); diff -Nru notion-3+2014010901/ioncore/conf.c notion-3+2015061300/ioncore/conf.c --- notion-3+2014010901/ioncore/conf.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/conf.c 2015-06-13 14:37:26.000000000 +0000 @@ -96,6 +96,21 @@ * requests. \codestr{ignore} to do nothing, * \codestr{activate} to set the activity flag on a * window requesting to be stacked Above. \\ + * \var{focuslist_insert_delay} & (integer) Time (in ms) that a window must + * stay focused in order to be added to the focus list. + * If this value is set <=0, this logic is disabled: + * the focus list is updated immediately \\ + * \var{activity_notification_on_all_screens} & (boolean) If enabled, activity + * notifiers are displayed on ALL the screens, not just + * the screen that contains the window producing the + * notification. This is only relevant on multi-head + * setups. By default this is disabled \\ + * \var{workspace_indicator_timeout} & (integer) If enabled, a workspace + * indicator comes up at the bottom-left of the screen + * when a new workspace is selected. This indicator + * stays active for only as long as indicated by this + * variable (in ms). Timeout values <=0 disable the + * indicator altogether. This is disabled by default \\ * \end{tabularx} * * When a keyboard resize function is called, and at most \var{kbresize_t_max} @@ -109,9 +124,8 @@ EXTL_EXPORT void ioncore_set(ExtlTab tab) { - int dd, rd; - char *wst, *tmp; - ExtlTab t; + int dd; + char *tmp; ExtlFn fn; extl_table_gets_b(tab, "opaque_resize", &(ioncore_g.opaque_resize)); @@ -146,14 +160,23 @@ } if(extl_table_gets_i(tab, "dblclick_delay", &dd)) - ioncore_g.dblclick_delay=maxof(0, dd); + ioncore_g.dblclick_delay=MAXOF(0, dd); if(extl_table_gets_i(tab, "usertime_diff_current", &dd)) - ioncore_g.usertime_diff_current=maxof(0, dd); + ioncore_g.usertime_diff_current=MAXOF(0, dd); if(extl_table_gets_i(tab, "usertime_diff_new", &dd)) - ioncore_g.usertime_diff_new=maxof(0, dd); - + ioncore_g.usertime_diff_new=MAXOF(0, dd); + + if(extl_table_gets_i(tab, "focuslist_insert_delay", &dd)) + ioncore_g.focuslist_insert_delay=MAXOF(0, dd); + + if(extl_table_gets_i(tab, "workspace_indicator_timeout", &dd)) + ioncore_g.workspace_indicator_timeout=MAXOF(0, dd); + + extl_table_gets_b(tab, "activity_notification_on_all_screens", + &(ioncore_g.activity_notification_on_all_screens)); + ioncore_set_moveres_accel(tab); ioncore_groupws_set(tab); @@ -194,6 +217,10 @@ extl_table_sets_b(tab, "unsqueeze", ioncore_g.unsqueeze_enabled); extl_table_sets_b(tab, "autoraise", ioncore_g.autoraise); extl_table_sets_b(tab, "autosave_layout", ioncore_g.autosave_layout); + extl_table_sets_i(tab, "focuslist_insert_delay", ioncore_g.focuslist_insert_delay); + extl_table_sets_i(tab, "workspace_indicator_timeout", ioncore_g.workspace_indicator_timeout); + extl_table_sets_b(tab, "activity_notification_on_all_screens", + ioncore_g.activity_notification_on_all_screens); extl_table_sets_s(tab, "window_stacking_request", stringintmap_key(win_stackrq, diff -Nru notion-3+2014010901/ioncore/event.c notion-3+2015061300/ioncore/event.c --- notion-3+2014010901/ioncore/event.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/event.c 2015-06-13 14:37:26.000000000 +0000 @@ -200,7 +200,7 @@ /*{{{ X connection FD handler */ -void ioncore_x_connection_handler(int conn, void *unused) +void ioncore_x_connection_handler(int UNUSED(conn), void *UNUSED(unused)) { XEvent ev; diff -Nru notion-3+2014010901/ioncore/eventh.c notion-3+2015061300/ioncore/eventh.c --- notion-3+2014010901/ioncore/eventh.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/eventh.c 2015-06-13 14:37:26.000000000 +0000 @@ -28,6 +28,7 @@ #include "activity.h" #include "netwm.h" #include "xwindow.h" +#include "log.h" /*{{{ ioncore_handle_event */ @@ -235,7 +236,11 @@ } XFree(hints); }else if(ev->atom==XA_WM_NORMAL_HINTS){ - clientwin_get_size_hints(cwin); + if(ev->state==PropertyNewValue){ + if(clientwin_get_size_hints(cwin)<0) + LOG(WARN, GENERAL, "Retrieving sizehints failed for cwin '%s'", cwin->region.ni.name); + }else if(ev->state==PropertyDelete) + clientwin_reset_size_hints(cwin); }else if(ev->atom==XA_WM_NAME){ if(!(cwin->flags&CLIENTWIN_USE_NET_WM_NAME)) clientwin_get_set_name(cwin); @@ -284,7 +289,6 @@ void ioncore_handle_expose(const XExposeEvent *ev) { WWindow *wwin; - WRootWin *rootwin; XEvent tmp; while(XCheckWindowEvent(ioncore_g.dpy, ev->window, ExposureMask, &tmp)) @@ -460,14 +464,11 @@ void ioncore_handle_buttonpress(XEvent *ev) { XEvent tmp; - Window win_pressed; bool finished=FALSE; if(ioncore_grab_held()) return; - win_pressed=ev->xbutton.window; - if(!ioncore_do_handle_buttonpress(&(ev->xbutton))) return; diff -Nru notion-3+2014010901/ioncore/focus.c notion-3+2015061300/ioncore/focus.c --- notion-3+2014010901/ioncore/focus.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/focus.c 2015-06-13 14:37:26.000000000 +0000 @@ -7,17 +7,23 @@ */ #include +#include #include "common.h" #include "focus.h" #include "global.h" #include "window.h" #include "region.h" +#include "frame.h" #include "colormap.h" #include "activity.h" #include "xwindow.h" #include "regbind.h" +#include "log.h" +#include "screen-notify.h" +static void region_focuslist_awaiting_insertion_trigger(void); + /*{{{ Hooks. */ @@ -34,7 +40,7 @@ { WRegion *mgrp=region_manager_or_parent(reg); - UNLINK_ITEM(ioncore_g.focus_current, reg, active_next, active_prev); + UNLINK_ITEM(ioncore_g.focuslist, reg, active_next, active_prev); if(mgrp!=NULL) region_focuslist_remove_with_mgrs(mgrp); @@ -44,26 +50,26 @@ void region_focuslist_push(WRegion *reg) { region_focuslist_remove_with_mgrs(reg); - LINK_ITEM_FIRST(ioncore_g.focus_current, reg, active_next, active_prev); + LINK_ITEM_FIRST(ioncore_g.focuslist, reg, active_next, active_prev); } void region_focuslist_move_after(WRegion *reg, WRegion *after) { region_focuslist_remove_with_mgrs(reg); - LINK_ITEM_AFTER(ioncore_g.focus_current, after, reg, + LINK_ITEM_AFTER(ioncore_g.focuslist, after, reg, active_next, active_prev); } -void region_focuslist_deinit(WRegion *reg) +static void region_focuslist_deinit(WRegion *reg) { WRegion *replace=region_manager_or_parent(reg); if(replace!=NULL) region_focuslist_move_after(replace, reg); - UNLINK_ITEM(ioncore_g.focus_current, reg, active_next, active_prev); + UNLINK_ITEM(ioncore_g.focuslist, reg, active_next, active_prev); } @@ -78,13 +84,17 @@ { WRegion *next; - if(ioncore_g.focus_current==NULL) + if(ioncore_g.focuslist==NULL) return NULL; + + /* We're trying to access the focus list from lua (likely from the UI). I + * thus force any pending focuslist updates to complete now */ + region_focuslist_awaiting_insertion_trigger(); /* Find the first region on focus history list that isn't currently * active. */ - for(next=ioncore_g.focus_current->active_next; + for(next=ioncore_g.focuslist->active_next; next!=NULL; next=next->active_next){ @@ -110,13 +120,17 @@ { WRegion *next; - if(ioncore_g.focus_current==NULL) + if(ioncore_g.focuslist==NULL) return FALSE; + /* We're trying to access the focus list from lua (likely from the UI). I + * thus force any pending focuslist updates to complete now */ + region_focuslist_awaiting_insertion_trigger(); + /* Find the first region on focus history list that isn't currently * active. */ - for(next=ioncore_g.focus_current->active_next; + for(next=ioncore_g.focuslist->active_next; next!=NULL; next=next->active_next){ @@ -137,7 +151,7 @@ static Watch await_watch=WATCH_INIT; -static void await_watch_handler(Watch *watch, WRegion *prev) +static void await_watch_handler(Watch *UNUSED(watch), WRegion *prev) { WRegion *r; while(1){ @@ -209,6 +223,61 @@ /*}}}*/ +/*{{{ focuslist delayed insertion logic */ + +static WTimer* focuslist_insert_timer=NULL; +static WRegion* region_awaiting_insertion; + +static void timer_expired__focuslist_insert(WTimer* UNUSED(dummy1), Obj* UNUSED(dummy2)) +{ + region_focuslist_push(region_awaiting_insertion); + region_awaiting_insertion = NULL; +} + +static void schedule_focuslist_insert_timer(WRegion *reg) +{ + /* if the delay is disabled, add to the list NOW */ + if( ioncore_g.focuslist_insert_delay <= 0 ) + { + region_focuslist_push(reg); + return; + } + + if( focuslist_insert_timer == NULL) + { + focuslist_insert_timer=create_timer(); + if( focuslist_insert_timer == NULL ) + return; + } + + region_awaiting_insertion = reg; + timer_set(focuslist_insert_timer, ioncore_g.focuslist_insert_delay, + (WTimerHandler*)timer_expired__focuslist_insert, NULL); +} + +static void region_focuslist_awaiting_insertion_cancel_if_is( WRegion* reg ) +{ + if( region_awaiting_insertion == reg && + focuslist_insert_timer != NULL ) + { + timer_reset(focuslist_insert_timer); + } +} + +static void region_focuslist_awaiting_insertion_trigger(void) +{ + if( focuslist_insert_timer != NULL && + region_awaiting_insertion != NULL ) + { + timer_expired__focuslist_insert(NULL,NULL); + timer_reset(focuslist_insert_timer); + } +} + + +/*}}}*/ + + /*{{{ Events */ @@ -220,9 +289,13 @@ region_set_activity(reg, SETPARAM_UNSET); - if(reg->active_sub==NULL){ - region_focuslist_push(reg); - /*ioncore_g.focus_current=reg;*/ + if(reg->active_sub==NULL) + { + /* I update the current focus indicator right now. The focuslist is + * updated on a timer to keep the list ordered by importance (to keep + * windows that the user quickly cycles through at the bottom of the list) */ + ioncore_g.focus_current = reg; + schedule_focuslist_insert_timer(reg); } if(!REGION_IS_ACTIVE(reg)){ @@ -250,6 +323,8 @@ */ if(reg->active_sub==NULL && !OBJ_IS(reg, WClientWin)) rootwin_install_colormap(region_rootwin_of(reg), None); + + screen_update_workspace_indicatorwin( reg ); } @@ -268,18 +343,6 @@ region_update_owned_grabs(par); } - -#if 0 - if(ioncore_g.focus_current==reg){ - /* Find the closest active parent, or if none is found, stop at the - * screen and mark it "currently focused". - */ - while(par!=NULL && !REGION_IS_ACTIVE(par) && !OBJ_IS(par, WScreen)) - par=REGION_PARENT_REG(par); - ioncore_g.focus_current=par; - } -#endif - D(fprintf(stderr, "lost focus (act) %s [%p:]\n", OBJ_TYPESTR(reg), reg);) reg->flags&=~REGION_ACTIVE; @@ -290,6 +353,20 @@ } +void region_focus_deinit(WRegion *reg) +{ + /* if the region that's waiting to be added to the focuslist is being + * deleted, cancel the insertion */ + if(region_awaiting_insertion) + region_focuslist_awaiting_insertion_cancel_if_is(reg); + + region_focuslist_deinit(reg); + + if(ioncore_g.focus_current==reg) + ioncore_g.focus_current=ioncore_g.focuslist; +} + + /*}}}*/ @@ -346,9 +423,35 @@ /*Time ioncore_focus_time=CurrentTime;*/ +bool ioncore_should_focus_parent_when_refusing_focus(WRegion* reg){ + WWindow* parent = reg->parent; -void region_finalise_focusing(WRegion* reg, Window win, bool warp, Time time, int set_input) -{ + LOG(DEBUG, FOCUS, "Region %s refusing focus", reg->ni.name); + + if(parent==NULL) + return FALSE; + + /** + * If the region is refusing focus, this might be because the mouse + * entered it but it doesn't accept any focus (like in the case of + * oclock). In that case we want to focus its parent WTiling, if any. + * + * However, when for example IntelliJ IDEA's main window is refusing + * the focus because some transient completion popup is open, we want + * to leave the focus alone. + */ + LOG(DEBUG, FOCUS, "Parent is %s", parent->region.ni.name); + + if (obj_is((Obj*)parent, &CLASSDESCR(WFrame)) + && ((WFrame*)parent)->mode == FRAME_MODE_TILED) { + LOG(DEBUG, FOCUS, "Parent %s is a tiled WFrame", parent->region.ni.name); + return TRUE; + } + + return FALSE; +} + +void region_finalise_focusing(WRegion* reg, Window win, bool warp, Time time, int set_input) { if(warp) region_do_warp(reg); @@ -356,8 +459,12 @@ return; region_set_await_focus(reg); + if(set_input) XSetInputFocus(ioncore_g.dpy, win, RevertToParent, time); + else if(ioncore_should_focus_parent_when_refusing_focus(reg)) { + XSetInputFocus(ioncore_g.dpy, reg->parent->win, RevertToParent, time); + } } @@ -375,7 +482,7 @@ bool region_do_warp_default(WRegion *reg) { int x, y, w, h, px=0, py=0; - Window root; + WRootWin *root; reg=find_warp_to_reg(reg); @@ -384,19 +491,18 @@ D(fprintf(stderr, "region_do_warp %p %s\n", reg, OBJ_TYPESTR(reg))); - root=region_root_of(reg); + root=region_rootwin_of(reg); region_rootpos(reg, &x, &y); w=REGION_GEOM(reg).w; h=REGION_GEOM(reg).h; - if(xwindow_pointer_pos(root, &px, &py)){ + if(xwindow_pointer_pos(WROOTWIN_ROOT(root), &px, &py)){ if(px>=x && py>=y && pxni.name : "NULL"); + + if( reg == NULL || + reg->active_next == NULL || + reg == reg->active_next ) + { + break; + } + + reg = reg->active_next; + } + + LOG(DEBUG, GENERAL, "focus list end ========================="); +} + +/*}}}*/ diff -Nru notion-3+2014010901/ioncore/focus.h notion-3+2015061300/ioncore/focus.h --- notion-3+2014010901/ioncore/focus.h 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/focus.h 2015-06-13 14:37:26.000000000 +0000 @@ -48,7 +48,9 @@ extern void region_focuslist_remove_with_mgrs(WRegion *reg); extern void region_focuslist_push(WRegion *reg); extern void region_focuslist_move_after(WRegion *reg, WRegion *after); -extern void region_focuslist_deinit(WRegion *reg); + +/* Notify the focus handling that the region is deinit'ing */ +extern void region_focus_deinit(WRegion *reg); extern WRegion *ioncore_goto_previous(); @@ -61,4 +63,7 @@ extern void region_pointer_focus_hack(WRegion *reg); +/* testing/debugging helper */ +void region_focuslist_debugprint(void); + #endif /* ION_IONCORE_FOCUS_H */ diff -Nru notion-3+2014010901/ioncore/frame.c notion-3+2015061300/ioncore/frame.c --- notion-3+2014010901/ioncore/frame.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/frame.c 2015-06-13 14:37:26.000000000 +0000 @@ -152,18 +152,18 @@ WFrameMode modea=framemode_unalt(frame->mode); if(modea==FRAME_MODE_FLOATING){ - region_add_bindmap((WRegion*)frame, ioncore_mplex_toplevel_bindmap); - region_add_bindmap((WRegion*)frame, ioncore_frame_toplevel_bindmap); + region_add_bindmap((WRegion*)frame, ioncore_mplex_toplevel_bindmap); + region_add_bindmap((WRegion*)frame, ioncore_frame_toplevel_bindmap); region_add_bindmap((WRegion*)frame, ioncore_frame_floating_bindmap); }else if(modea==FRAME_MODE_TRANSIENT){ region_add_bindmap((WRegion*)frame, ioncore_frame_transient_bindmap); region_add_bindmap((WRegion*)frame, ioncore_frame_floating_bindmap); }else{ /* mode==FRAME_MODE_TILED || mode==FRAME_MODE_TILED_ALT || mode==FRAME_MODE_UNKNOWN */ - region_add_bindmap((WRegion*)frame, ioncore_mplex_toplevel_bindmap); - region_add_bindmap((WRegion*)frame, ioncore_frame_toplevel_bindmap); + region_add_bindmap((WRegion*)frame, ioncore_mplex_toplevel_bindmap); + region_add_bindmap((WRegion*)frame, ioncore_frame_toplevel_bindmap); region_add_bindmap((WRegion*)frame, ioncore_frame_tiled_bindmap); - } + } } @@ -228,12 +228,11 @@ EXTL_EXPORT_AS(WFrame, set_mode) bool frame_set_mode_extl(WFrame *frame, const char *modestr) { - WFrameMode mode; int idx; idx=stringintmap_ndx(frame_modes, modestr); if(idx<0) - return FALSE; + return FALSE; frame_set_mode(frame, frame_modes[idx].value); @@ -303,8 +302,6 @@ void frame_update_attr_nth(WFrame *frame, int i) { - WRegion *reg; - if(i<0 || i>=frame->titles_n) return; @@ -445,8 +442,8 @@ mplex_managed_geom((WMPlex*)frame, &subgeom); - woff=maxof(REGION_GEOM(frame).w-subgeom.w, 0); - hoff=maxof(REGION_GEOM(frame).h-subgeom.h, 0); + woff=MAXOF(REGION_GEOM(frame).w-subgeom.w, 0); + hoff=MAXOF(REGION_GEOM(frame).h-subgeom.h, 0); if(FRAME_CURRENT(frame)!=NULL) region_size_hints(FRAME_CURRENT(frame), hints_ret); @@ -480,10 +477,14 @@ hints_ret->base_width+=woff; hints_ret->base_height+=hoff; - if(hints_ret->max_width!=INT_MAX) - hints_ret->max_width+=woff; - if(hints_ret->max_height!=INT_MAX) - hints_ret->max_height+=hoff; + + if(hints_ret->max_set) { + if(hints_ret->max_width!=INT_MAX) + hints_ret->max_width+=woff; + if(hints_ret->max_height!=INT_MAX) + hints_ret->max_height+=hoff; + } + hints_ret->min_width+=woff; hints_ret->min_height+=hoff; @@ -521,7 +522,6 @@ WRQGeomParams rq2=RQGEOMPARAMS_INIT; int gravity=ForgetGravity; WRectangle off; - WRegion *par; rq2.geom=rq->geom; rq2.flags=rq->flags&(REGION_RQGEOM_WEAK_ALL @@ -537,8 +537,8 @@ off.w=REGION_GEOM(frame).w-off.w; off.h=REGION_GEOM(frame).h-off.h; - rq2.geom.w=maxof(rq2.geom.w+off.w, 0); - rq2.geom.h=maxof(rq2.geom.h+off.h, 0); + rq2.geom.w=MAXOF(rq2.geom.w+off.w, 0); + rq2.geom.h=MAXOF(rq2.geom.h+off.h, 0); /*region_size_hints_correct((WRegion*)frame, &(geom.w), &(geom.h), TRUE);*/ @@ -552,7 +552,7 @@ rq2.geom.x+=off.x; else rq2.geom.x+=xgravity_deltax(gravity, -off.x, off.x+off.w); - + if(rq->flags®ION_RQGEOM_WEAK_Y) rq2.geom.y+=off.y; else @@ -659,8 +659,6 @@ bool set=(frame->flags&FRAME_SHADED); bool nset=libtu_do_setparam(sp, set); WRQGeomParams rq=RQGEOMPARAMS_INIT; - GrBorderWidths bdw; - int h; if(!XOR(nset, set)) return nset; @@ -762,7 +760,7 @@ } -void frame_managed_notify(WFrame *frame, WRegion *sub, WRegionNotify how) +void frame_managed_notify(WFrame *frame, WRegion *UNUSED(sub), WRegionNotify how) { bool complete; @@ -833,7 +831,7 @@ } -int frame_default_index(WFrame *frame) +int frame_default_index(WFrame *UNUSED(frame)) { return ioncore_g.frame_default_index; } @@ -894,7 +892,6 @@ void frame_do_load(WFrame *frame, ExtlTab tab) { - int flags=0; int p=0, s=0; if(extl_table_gets_i(tab, "saved_x", &p) && diff -Nru notion-3+2014010901/ioncore/framedpholder.c notion-3+2015061300/ioncore/framedpholder.c --- notion-3+2014010901/ioncore/framedpholder.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/framedpholder.c 2015-06-13 14:37:26.000000000 +0000 @@ -109,8 +109,8 @@ */ region_size_hints(reg, &szh); sizehints_correct(&szh, &iw, &ih, TRUE, TRUE); - rqg.w=maxof(1, iw+(REGION_GEOM(frame).w-mg.w)); - rqg.h=maxof(1, ih+(REGION_GEOM(frame).h-mg.h)); + rqg.w=MAXOF(1, iw+(REGION_GEOM(frame).w-mg.w)); + rqg.h=MAXOF(1, ih+(REGION_GEOM(frame).h-mg.h)); if(!(fp->mode®ION_FIT_WHATEVER)) rectangle_constrain(&rqg, &fp->g); diff -Nru notion-3+2014010901/ioncore/frame-draw.c notion-3+2015061300/ioncore/frame-draw.c --- notion-3+2014010901/ioncore/frame-draw.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/frame-draw.c 2015-06-13 14:37:26.000000000 +0000 @@ -116,7 +116,7 @@ if(!BAR_INSIDE_BORDER(frame) && frame->brush!=NULL){ geom->y+=frame->bar_h; - geom->h=maxof(0, geom->h-frame->bar_h); + geom->h=MAXOF(0, geom->h-frame->bar_h); } } @@ -132,8 +132,8 @@ geom->x+=bdw.left; geom->y+=bdw.top; - geom->w=maxof(0, geom->w-(bdw.left+bdw.right)); - geom->h=maxof(0, geom->h-(bdw.top+bdw.bottom)); + geom->w=MAXOF(0, geom->w-(bdw.left+bdw.right)); + geom->h=MAXOF(0, geom->h-(bdw.top+bdw.bottom)); } } @@ -155,7 +155,7 @@ } geom->x+=off; geom->y+=off; - geom->w=maxof(0, geom->w-2*off); + geom->w=MAXOF(0, geom->w-2*off); geom->h=BAR_H(frame); } @@ -178,8 +178,8 @@ geom->h-=frame->bar_h+spacing; } - geom->w=maxof(geom->w, 0); - geom->h=maxof(geom->h, 0); + geom->w=MAXOF(geom->w, 0); + geom->h=MAXOF(geom->h, 0); } @@ -324,7 +324,6 @@ void frame_brushes_updated(WFrame *frame) { WFrameBarMode barmode; - ExtlTab tab; char *s; if(frame->brush==NULL) @@ -348,7 +347,7 @@ barmode=FRAME_BAR_SHAPED; else if(strcmp(s, "none")==0) barmode=FRAME_BAR_NONE; - free(s); + free(s); } frame->barmode=barmode; diff -Nru notion-3+2014010901/ioncore/frame-pointer.c notion-3+2015061300/ioncore/frame-pointer.c --- notion-3+2014010901/ioncore/frame-pointer.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/frame-pointer.c 2015-06-13 14:37:26.000000000 +0000 @@ -129,7 +129,6 @@ { XKeyEvent *ev=&xev->xkey; WBinding *binding=NULL; - WBindmap **bindptr; if(ev->type==KeyRelease) return FALSE; @@ -151,7 +150,6 @@ static void setup_dragwin(WFrame *frame, uint tab) { - WRectangle g; WRootWin *rw; WFitParams fp; const char *tab_style=framemode_get_tab_style(frame->mode); @@ -181,11 +179,9 @@ } -static void p_tabdrag_motion(WFrame *frame, XMotionEvent *ev, +static void p_tabdrag_motion(WFrame *UNUSED(frame), XMotionEvent *UNUSED(ev), int dx, int dy) { - WRootWin *rootwin=region_rootwin_of((WRegion*)frame); - p_tab_x+=dx; p_tab_y+=dy; @@ -203,8 +199,6 @@ static void p_tabdrag_begin(WFrame *frame, XMotionEvent *ev, int dx, int dy) { - WRootWin *rootwin=region_rootwin_of((WRegion*)frame); - if(p_tabnum<0) return; @@ -306,7 +300,6 @@ { WRegion *sub=NULL; WRegion *dropped_on; - Window win=None; sub=sub_at_tab(frame); @@ -364,21 +357,9 @@ EXTL_EXPORT_MEMBER void frame_p_switch_tab(WFrame *frame) { - /*WRegion *sub;*/ - if(ioncore_pointer_grab_region()!=(WRegion*)frame) return; - /* - sub=sub_at_tab(frame); - if(sub!=NULL){ - bool mcf=region_may_control_focus((WRegion*)frame); - region_goto_flags(sub, (mcf - ? REGION_GOTO_FOCUS|REGION_GOTO_NOWARP - : 0)); - } - */ - mplex_switch_nth((WMPlex*)frame, p_tabnum); } diff -Nru notion-3+2014010901/ioncore/frame-tabs-recalc.c notion-3+2015061300/ioncore/frame-tabs-recalc.c --- notion-3+2014010901/ioncore/frame-tabs-recalc.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/frame-tabs-recalc.c 2015-06-13 14:37:26.000000000 +0000 @@ -82,7 +82,7 @@ */ static int frame_shaped_recalc_bar_size_equal(WFrame *frame) { - int bar_w, textw=0, tmaxw=frame->tabs_params.tab_min_w, tmp=0; + int bar_w, tmaxw=frame->tabs_params.tab_min_w, tmp=0; GrBorderWidths bdw; uint bdtotal; int i, m; diff -Nru notion-3+2014010901/ioncore/fullscreen.c notion-3+2015061300/ioncore/fullscreen.c --- notion-3+2014010901/ioncore/fullscreen.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/fullscreen.c 2015-06-13 14:37:26.000000000 +0000 @@ -27,8 +27,6 @@ bool region_fullscreen_scr(WRegion *reg, WScreen *scr, bool switchto) { - int rootx, rooty; - bool wasfs=TRUE; int swf=(switchto ? MPLEX_ATTACH_SWITCHTO : 0); WPHolder *ph=NULL; bool newph=FALSE, ret; @@ -126,7 +124,6 @@ { WScreen *scr; WMwmHints *mwm; - WRectangle *rwgeom; mwm=xwindow_get_mwmhints(cwin->win); if(mwm==NULL || !(mwm->flags&MWM_HINTS_DECORATIONS) || diff -Nru notion-3+2014010901/ioncore/global.h notion-3+2015061300/ioncore/global.h --- notion-3+2014010901/ioncore/global.h 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/global.h 2015-06-13 14:37:26.000000000 +0000 @@ -81,8 +81,19 @@ * some problems so these are handled as a special case. * * This is a doubly-linked list with links 'active_next' and 'active_prev' + * + * This is the list of previously-focused windows, in order of recent + * usefulness. The currently-focussed window is deemed most important (first + * item on this list) if focuslist_insert_delay is disabled, or if + * focuslist_insert_delay is enabled and its timer has expired */ - WRegion *focus_current; + WRegion* focuslist; + + /* This is the region that is currently focused. It is usually the first + * item in the focuslist, but not always. It isn't the first item if + * focuslist_insert_delay is enabled, and the corresponding timer is active */ + WRegion* focus_current; + int input_mode; int opmode; @@ -101,7 +112,10 @@ int window_stacking_request; Time usertime_diff_current; Time usertime_diff_new; - + Time focuslist_insert_delay; + Time workspace_indicator_timeout; + bool activity_notification_on_all_screens; + bool use_mb; /* use mb routines? */ bool enc_sb; /* 8-bit charset? If unset, use_mb must be set. */ bool enc_utf8; /* mb encoding is utf8? */ diff -Nru notion-3+2014010901/ioncore/grab.c notion-3+2015061300/ioncore/grab.c --- notion-3+2014010901/ioncore/grab.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/grab.c 2015-06-13 14:37:26.000000000 +0000 @@ -88,7 +88,7 @@ static void do_holder_remove(WRegion *holder, bool killed); -static void grab_watch_handler(Watch *w, Obj *obj) +static void grab_watch_handler(Watch *UNUSED(w), Obj *obj) { do_holder_remove((WRegion*)obj, TRUE); } diff -Nru notion-3+2014010901/ioncore/gr.c notion-3+2015061300/ioncore/gr.c --- notion-3+2014010901/ioncore/gr.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/gr.c 2015-06-13 14:37:26.000000000 +0000 @@ -187,10 +187,10 @@ uint i; for(i=0; in; i++){ - int sc=scorefind(attr1, &spec->attrs[i]); + uint sc=scorefind(attr1, &spec->attrs[i]); if(attr2!=NULL) - sc=maxof(sc, scorefind(attr2, &spec->attrs[i])); + sc=MAXOF(sc, scorefind(attr2, &spec->attrs[i])); if(sc==0){ score=0; @@ -448,13 +448,13 @@ /*{{{ Init, deinit */ -bool grbrush_init(GrBrush *brush) +bool grbrush_init(GrBrush *UNUSED(brush)) { return TRUE; } -void grbrush_deinit(GrBrush *brush) +void grbrush_deinit(GrBrush *UNUSED(brush)) { } diff -Nru notion-3+2014010901/ioncore/group.c notion-3+2015061300/ioncore/group.c --- notion-3+2014010901/ioncore/group.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/group.c 2015-06-13 14:37:26.000000000 +0000 @@ -44,9 +44,6 @@ #include "return.h" -static void group_place_stdisp(WGroup *ws, WWindow *parent, - int pos, WRegion *stdisp); - static void group_remanage_stdisp(WGroup *ws); static void group_do_set_bottom(WGroup *grp, WStacking *st); @@ -120,12 +117,6 @@ /*{{{ region dynfun implementations */ -static void group_fit(WGroup *ws, const WRectangle *geom) -{ - REGION_GEOM(ws)=*geom; -} - - bool group_fitrep(WGroup *ws, WWindow *par, const WFitParams *fp) { WGroupIterTmp tmp; @@ -301,21 +292,16 @@ { bool mcf=region_may_control_focus((WRegion*)ws); WStacking *st, *next_st=NULL; - bool was_stdisp=FALSE, was_bottom=FALSE; bool was_current=FALSE; st=group_find_stacking(ws, reg); if(st!=NULL){ - if(st==ws->bottom){ - was_bottom=TRUE; + if(st==ws->bottom) group_do_set_bottom(ws, NULL); - } - if(st==ws->managed_stdisp){ + if(st==ws->managed_stdisp) ws->managed_stdisp=NULL; - was_stdisp=TRUE; - } if(st==ws->current_managed){ ws->current_managed=NULL; @@ -564,7 +550,6 @@ WSizePolicy szplcy) { WStacking *st=NULL, *tmp=NULL; - Window bottom=None, top=None; WStacking **stackingp=group_get_stackingp(ws); WFrame *frame; @@ -609,8 +594,8 @@ { wg->x=g->x+REGION_GEOM(ws).x; wg->y=g->y+REGION_GEOM(ws).y; - wg->w=maxof(1, g->w); - wg->h=maxof(1, g->h); + wg->w=MAXOF(1, g->w); + wg->h=MAXOF(1, g->h); } @@ -742,8 +727,7 @@ WRegionAttachData *data) { WFitParams fp; - WRegion *reg; - + if(ws->bottom!=NULL && param->bottom){ warn(TR("'bottom' already set.")); return NULL; @@ -1199,24 +1183,6 @@ } -static WStacking *find_stacking_if_not_on_ws(WGroup *ws, Window w) -{ - WRegion *r=xwindow_region_of(w); - WStacking *st=NULL; - - while(r!=NULL){ - if(REGION_MANAGER(r)==(WRegion*)ws) - break; - st=group_find_stacking(ws, r); - if(st!=NULL) - break; - r=REGION_MANAGER(r); - } - - return st; -} - - bool group_managed_rqorder(WGroup *grp, WRegion *reg, WRegionOrder order) { WStacking **stackingp=group_get_stackingp(grp); @@ -1323,7 +1289,6 @@ ExtlTab tab, mgds, subtab, g; WStacking *st; WGroupIterTmp tmp; - WMPlex *par; int n=0; WRectangle tmpg; @@ -1378,7 +1343,6 @@ for(i=1; i<=n; i++){ if(extl_table_geti_t(substab, i, &subtab)){ WGroupAttachParams par=GROUPATTACHPARAMS_INIT; - WRegionAttachData data; WFitParams fp; WPHolder *ph; diff -Nru notion-3+2014010901/ioncore/group-cw.c notion-3+2015061300/ioncore/group-cw.c --- notion-3+2014010901/ioncore/group-cw.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/group-cw.c 2015-06-13 14:37:26.000000000 +0000 @@ -292,9 +292,7 @@ WRegion *groupcw_load(WWindow *par, const WFitParams *fp, ExtlTab tab) { WGroupCW *cwg; - ExtlTab substab, subtab; - int i, n; - + cwg=create_groupcw(par, fp); if(cwg==NULL) diff -Nru notion-3+2014010901/ioncore/grouppholder.c notion-3+2015061300/ioncore/grouppholder.c --- notion-3+2014010901/ioncore/grouppholder.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/grouppholder.c 2015-06-13 14:37:26.000000000 +0000 @@ -17,9 +17,6 @@ #include "grouppholder.h" -static void group_watch_handler(Watch *watch, Obj *ws); - - /*{{{ Primitives */ @@ -172,12 +169,6 @@ /*{{{ Dynfuns */ -static WPHolder *get_recreate_ph(WGroupPHolder *ph) -{ - return get_head(ph)->recreate_pholder; -} - - typedef struct{ WGroupPHolder *ph, *ph_head; WRegionAttachData *data; @@ -226,7 +217,7 @@ WRegionAttachData *data) { WRegionAttachData data2; - WPHolder *root, *rph; + WPHolder *rph; WRegion *res; RP rp; diff -Nru notion-3+2014010901/ioncore/group-ws.c notion-3+2015061300/ioncore/group-ws.c --- notion-3+2014010901/ioncore/group-ws.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/group-ws.c 2015-06-13 14:37:26.000000000 +0000 @@ -27,6 +27,7 @@ #include "resize.h" #include "conf.h" #include "saveload.h" +#include "screen-notify.h" /*{{{ Settings */ @@ -49,7 +50,7 @@ free(method); } if(extl_table_gets_i(tab, "float_placement_padding", &fpp)) - ioncore_placement_padding=maxof(0, fpp); + ioncore_placement_padding=MAXOF(0, fpp); } @@ -244,12 +245,11 @@ WPHolder *groupws_prepare_manage_transient(WGroupWS *ws, const WClientWin *cwin, const WManageParams *param, - int unused) + int UNUSED(unused)) { WGroupAttachParams ap=GROUPATTACHPARAMS_INIT; WFramedParam fp=FRAMEDPARAM_INIT; WPHolder *ph; - bool tmp; ap.stack_above=OBJ_CAST(REGION_PARENT(param->tfor), WRegion); if(ap.stack_above==NULL) @@ -329,6 +329,9 @@ void groupws_deinit(WGroupWS *ws) { extl_unref_table(ws->initial_outputs); + + screen_unnotify_if_workspace(ws); + group_deinit(&(ws->grp)); } diff -Nru notion-3+2014010901/ioncore/infowin.c notion-3+2015061300/ioncore/infowin.c --- notion-3+2014010901/ioncore/infowin.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/infowin.c 2015-06-13 14:37:26.000000000 +0000 @@ -106,7 +106,7 @@ /*{{{ Drawing and geometry */ -void infowin_draw(WInfoWin *p, bool complete) +void infowin_draw(WInfoWin *p, bool UNUSED(complete)) { WRectangle g; diff -Nru notion-3+2014010901/ioncore/ioncore.c notion-3+2015061300/ioncore/ioncore.c --- notion-3+2014010901/ioncore/ioncore.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/ioncore.c 2015-06-13 14:37:26.000000000 +0000 @@ -352,6 +352,7 @@ ioncore_g.warp_next=FALSE; ioncore_g.focus_next_source=IONCORE_FOCUSNEXT_OTHER; + ioncore_g.focuslist=NULL; ioncore_g.focus_current=NULL; ioncore_g.input_mode=IONCORE_INPUTMODE_NORMAL; @@ -367,7 +368,10 @@ ioncore_g.autoraise=TRUE; ioncore_g.autosave_layout=TRUE; ioncore_g.window_stacking_request=IONCORE_WINDOWSTACKINGREQUEST_IGNORE; - + ioncore_g.focuslist_insert_delay=CF_FOCUSLIST_INSERT_DELAY; + ioncore_g.workspace_indicator_timeout=CF_WORKSPACE_INDICATOR_TIMEOUT; + ioncore_g.activity_notification_on_all_screens=FALSE; + ioncore_g.enc_utf8=FALSE; ioncore_g.enc_sb=TRUE; ioncore_g.use_mb=FALSE; @@ -577,7 +581,6 @@ int x, y, wx, wy; uint mask; WScreen *scr; - WWindow *wwin; XQueryPointer(ioncore_g.dpy, None, &root, &win, &x, &y, &wx, &wy, &mask); @@ -651,7 +654,6 @@ void ioncore_deinit() { Display *dpy; - WRootWin *rootwin; ioncore_g.opmode=IONCORE_OPMODE_DEINIT; diff -Nru notion-3+2014010901/ioncore/ioncore_ext.lua notion-3+2015061300/ioncore/ioncore_ext.lua --- notion-3+2014010901/ioncore/ioncore_ext.lua 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/ioncore_ext.lua 2015-06-13 14:37:26.000000000 +0000 @@ -12,8 +12,8 @@ if package.loaded["ioncore"] then return end -- Default modifiers ---MOD1="Mod1+" ---MOD2="" +--META="Mod4+" +--ALTMETA="" -- Maximum number of bytes to read from pipes ioncore.RESULT_DATA_LIMIT=1024^2 @@ -31,11 +31,17 @@ -- Modifier setup compatibility kludge local oldindex +-- Historically, the options now called 'META' and 'ALTMETA' were called 'MOD1' and 'MOD2'. +-- The code below makes sure: +-- * the default values for those settings are 'Mod4+' (the 'windows key') and '' +-- * that setting either META/ALTMETA or MOD1/MOD2 will specify the primary and secondary meta keys +-- * that getting either META/ALTMETA or MOD1/MOD2 will return the (default or configured) primary and secondary meta keys + local function getmod(t, s) if s=="META" then - return rawget(t, "MOD1") or "Mod1+" + return rawget(t, "MOD1") or "Mod4+" elseif s=="MOD1" then - return rawget(t, "META") or "Mod1+" + return rawget(t, "META") or "Mod4+" elseif s=="ALTMETA" then return rawget(t, "MOD2") or "" elseif s=="MOD2" then diff -Nru notion-3+2014010901/ioncore/kbresize.c notion-3+2015061300/ioncore/kbresize.c --- notion-3+2014010901/ioncore/kbresize.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/kbresize.c 2015-06-13 14:37:26.000000000 +0000 @@ -60,9 +60,9 @@ if(extl_table_gets_d(tab, "kbresize_maxacc", &maxacc)) accelmax=(maxacc>0 ? maxacc*maxacc : 1); if(extl_table_gets_i(tab, "kbresize_delay", &rd)) - resize_delay=maxof(0, rd); + resize_delay=MAXOF(0, rd); if(extl_table_gets_i(tab, "edge_resistance", &er)) - ioncore_edge_resistance=maxof(0, er); + ioncore_edge_resistance=MAXOF(0, er); } @@ -91,13 +91,6 @@ return (int)(t1-t2); } -#define SIGN_NZ(X) ((X) < 0 ? -1 : 1) - -static double max(double a, double b) -{ - return (axkey; WBinding *binding=NULL; - WBindmap **bindptr; WMoveresMode *mode; if(ev->type==KeyRelease) @@ -194,7 +186,7 @@ static WTimer *resize_timer=NULL; -static void tmr_end_resize(WTimer *unused, WMoveresMode *mode) +static void tmr_end_resize(WTimer *UNUSED(unused), WMoveresMode *mode) { if(mode!=NULL) moveresmode_cancel(mode); diff -Nru notion-3+2014010901/ioncore/key.c notion-3+2015061300/ioncore/key.c --- notion-3+2014010901/ioncore/key.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/key.c 2015-06-13 14:37:26.000000000 +0000 @@ -33,7 +33,7 @@ static XComposeStatus cs={NULL, 0}; char buf[32]={0,}; Status stat; - int n, i; + int n; KeySym ksym; if(wwin->xic!=NULL){ @@ -95,7 +95,7 @@ } -static bool waitrelease_handler(WRegion *reg, XEvent *ev) +static bool waitrelease_handler(WRegion *UNUSED(reg), XEvent *ev) { return (ioncore_unmod(ev->xkey.state, ev->xkey.keycode)==0); } @@ -105,7 +105,7 @@ { if(ioncore_modstate()==0) return; - + /* We need to grab on the root window as might have been * ioncore_defer_destroy:ed by the binding handler (the most common case * for using this kpress_wait!). In such a case the grab may @@ -205,7 +205,6 @@ } -static XKeyEvent *current_key_event=NULL; static uint current_kcb, current_state; static bool current_submap; diff -Nru notion-3+2014010901/ioncore/log.c notion-3+2015061300/ioncore/log.c --- notion-3+2014010901/ioncore/log.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/log.c 2015-06-13 14:37:26.000000000 +0000 @@ -20,11 +20,10 @@ }; /** For this category, show log messages at this loglevel and above */ -LogLevel minimumLevel(LogCategory category) +static LogLevel minimumLevel(LogCategory category) { switch(category){ - case FONT: - /** For https://sourceforge.net/p/notion/bugs/63/ */ + case VALGRIND: return DEBUG; default: return INFO; @@ -33,14 +32,14 @@ #define TIME_BUFFER_MAXSIZE 100 -void printtime(FILE *stream, const char *format, time_t time) +static void printtime(FILE *stream, const char *format, time_t time) { char buf[TIME_BUFFER_MAXSIZE]; strftime(buf, TIME_BUFFER_MAXSIZE, format, localtime(&time)); fprintf(stream, "%s", buf); } -void vlog_message(LogLevel level, LogCategory category, const char *file, int line, const char *function, const char *message, va_list argp) +static void vlog_message(LogLevel level, LogCategory category, const char *file, int line, const char *function, const char *message, va_list argp) { if(level >= minimumLevel(category)){ printtime(stderr, "%F %T ", time(NULL)); diff -Nru notion-3+2014010901/ioncore/log.h notion-3+2015061300/ioncore/log.h --- notion-3+2014010901/ioncore/log.h 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/log.h 2015-06-13 14:37:26.000000000 +0000 @@ -18,7 +18,10 @@ typedef enum{ GENERAL, - FONT + FONT, + RANDR, + FOCUS, + VALGRIND /* Useful while debugging valgrind warnings */ } LogCategory; diff -Nru notion-3+2014010901/ioncore/Makefile notion-3+2015061300/ioncore/Makefile --- notion-3+2014010901/ioncore/Makefile 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/Makefile 2015-06-13 14:37:26.000000000 +0000 @@ -53,6 +53,8 @@ profiling.o: profiling.c $(CC) $(CFLAGS:-finstrument-functions=) -c profiling.c -o profiling.o +ioncore.o: exports.h + ioncore.a: $(OBJS) $(AR) $(ARFLAGS) $@ $+ $(RANLIB) $@ diff -Nru notion-3+2014010901/ioncore/manage.c notion-3+2015061300/ioncore/manage.c --- notion-3+2014010901/ioncore/manage.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/manage.c 2015-06-13 14:37:26.000000000 +0000 @@ -180,7 +180,7 @@ WScreen *scr=NULL; WPHolder *ph=NULL; int swf=(param->switchto ? PHOLDER_ATTACH_SWITCHTO : 0); - bool ok, uq=FALSE; + bool uq=FALSE; WRegion *createroot=NULL; /* Find a suitable screen */ @@ -397,7 +397,6 @@ bool region_rescue_some_clientwins(WRegion *reg, WRescueInfo *info, WRegionIterator *iter, void *st) { - bool res=FALSE; int fails=0; if(info->failed_get) diff -Nru notion-3+2014010901/ioncore/modules.c notion-3+2015061300/ioncore/modules.c --- notion-3+2014010901/ioncore/modules.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/modules.c 2015-06-13 14:37:26.000000000 +0000 @@ -161,7 +161,7 @@ } -static int try_load(const char *file, void *param) +static int try_load(const char *file, void *UNUSED(param)) { dlhandle handle=NULL; const char *slash, *dot; diff -Nru notion-3+2014010901/ioncore/mplex.c notion-3+2015061300/ioncore/mplex.c --- notion-3+2014010901/ioncore/mplex.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/mplex.c 2015-06-13 14:37:26.000000000 +0000 @@ -451,7 +451,6 @@ void mplex_do_fit_managed(WMPlex *mplex, WFitParams *fp) { - WRectangle geom; WMPlexIterTmp tmp; WStacking *node; WFitParams fp2; @@ -491,7 +490,6 @@ const WRQGeomParams *rq, WRectangle *geomret) { - WRectangle rg; WFitParams fp; WStacking *node; @@ -706,14 +704,14 @@ */ static WStacking *mplex_to_focus(WMPlex *mplex) { - WStacking *foc=NULL, *fallback=NULL; + WStacking *foc=NULL; WRegion *reg=NULL; foc=maybe_focusable(REGION_ACTIVE_SUB(mplex)); if(foc==NULL){ /* Search focus history if no specific attempt set.*/ - for(reg=ioncore_g.focus_current; reg!=NULL; reg=reg->active_next){ + for(reg=ioncore_g.focuslist; reg!=NULL; reg=reg->active_next){ foc=has_stacking_within(mplex, reg); if(foc!=NULL) break; @@ -1102,7 +1100,7 @@ return region_navi_cont((WRegion*)mplex, st->reg, data); } } - + if(st==sti) break; } @@ -1215,9 +1213,9 @@ static void mplex_unstack(WMPlex *mplex, WStacking *st) { - WStacking *stacking; + /*WStacking *stacking;*/ - stacking=mplex_get_stacking(mplex); + /*stacking=mplex_get_stacking(mplex);*/ stacking_unstack(&mplex->win, st); } @@ -1232,7 +1230,7 @@ WStacking *node=NULL; WLListNode *lnode=NULL; WMPlexAttachParams *param=&ph->param; - bool mx_was_empty, sw, modal, mcf, hidden; + bool mx_was_empty, sw, mcf, hidden; WSizePolicy szplcy; uint level; @@ -1247,9 +1245,6 @@ ? SIZEPOLICY_FULL_BOUNDS : SIZEPOLICY_FULL_EXACT)); - modal=(param->flags&MPLEX_ATTACH_LEVEL - && param->level>=STACKING_LEVEL_MODAL1); - level=(param->flags&MPLEX_ATTACH_LEVEL ? param->level : (param->flags&MPLEX_ATTACH_UNNUMBERED @@ -1450,7 +1445,6 @@ WMPlexAttachParams *par) { int tmp; - char *tmpstr; int ok=~mask; if(ok&MPLEX_ATTACH_LEVEL){ @@ -1462,7 +1456,7 @@ } if(extl_table_is_bool_set(tab, "modal")) - par->level=maxof(par->level, STACKING_LEVEL_MODAL1); + par->level=MAXOF(par->level, STACKING_LEVEL_MODAL1); } if(extl_table_is_bool_set(tab, "unnumbered")) @@ -1600,7 +1594,6 @@ WMPlexAttachParams ap; WPHolder *ph=NULL; WMPlexPHolder *mph; - WLListNode *after; /* Check current */ { WStacking *cur=mplex_current_node(mplex); @@ -1832,7 +1825,7 @@ }; -static bool do_attach_stdisp(WRegion *mplex, WRegion *reg, void *unused) +static bool do_attach_stdisp(WRegion *UNUSED(mplex), WRegion *UNUSED(reg), void *UNUSED(unused)) { /* We do not actually manage the stdisp. */ return TRUE; @@ -1883,7 +1876,6 @@ if(s==NULL || strcmp(s, "replace")==0){ WRegionAttachData data; WFitParams fp; - int o2; fp.g.x=0; fp.g.y=0; @@ -2107,7 +2099,7 @@ ExtlTab mplex_get_configuration(WMPlex *mplex) { - ExtlTab tab, subs, stdisptab; + ExtlTab tab, subs /*, stdisptab*/; WMPlexIterTmp tmp; WLListIterTmp ltmp; WLListNode *lnode; diff -Nru notion-3+2014010901/ioncore/mplexpholder.c notion-3+2015061300/ioncore/mplexpholder.c --- notion-3+2014010901/ioncore/mplexpholder.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/mplexpholder.c 2015-06-13 14:37:26.000000000 +0000 @@ -22,7 +22,7 @@ /*{{{ Primitives */ -static bool on_ph_list(WMPlexPHolder *ll, WMPlexPHolder *ph) +static bool on_ph_list(WMPlexPHolder *UNUSED(ll), WMPlexPHolder *ph) { return ph->prev!=NULL; } @@ -263,7 +263,6 @@ { WRegionAttachData data2; WFramedPHolder *fph; - WPHolder *root; WRegion *res; RP rp; diff -Nru notion-3+2014010901/ioncore/names.c notion-3+2015061300/ioncore/names.c --- notion-3+2014010901/ioncore/names.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/names.c 2015-06-13 14:37:26.000000000 +0000 @@ -125,7 +125,7 @@ /* Check name part first */ - mc=strncmp(ni1->name, ni2->name, minof(l1, l2)); + mc=strncmp(ni1->name, ni2->name, MINOF(l1, l2)); if(mc!=0) return mc; @@ -165,7 +165,6 @@ { int l1, l2; int i1, i2; - int mc; assert(ni1->name!=NULL); @@ -347,11 +346,9 @@ static bool use_name_parseany(WRegion *reg, WNamespace *ns, const char *name) { - int l, inst; + int inst; const char *startinst; - l=strlen(name); - inst=parseinst(name, &startinst); if(inst>=0){ bool retval=FALSE; @@ -541,7 +538,6 @@ static bool do_list(ExtlFn fn, WNamespace *ns, const char *typenam) { Rb_node node; - int n=0; if(!ns->initialised) return FALSE; diff -Nru notion-3+2014010901/ioncore/netwm.c notion-3+2015061300/ioncore/netwm.c --- notion-3+2014010901/ioncore/netwm.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/netwm.c 2015-06-13 14:37:26.000000000 +0000 @@ -111,7 +111,6 @@ { int i, n; - int ret=0; long *data; n=xwindow_get_property(cwin->win, atom_net_wm_state, XA_ATOM, @@ -330,9 +329,8 @@ WClientWin *cur=OBJ_CAST(ioncore_g.focus_current, WClientWin); /* the new window */ Window win=region_xwindow((WRegion*)cwin); - Time now=ioncore_get_timestamp(); /* TODO: should really use the event.. */ - /* user time, current window user time */ - CARD32 ut=0, cut=0; + /* user time */ + CARD32 ut=0; /* whether the new (got) and current (gotcut) windows had their usertime * set */ bool got=FALSE, gotcut=FALSE; @@ -340,6 +338,7 @@ if(cur!=NULL){ Window curwin; + /* current window user time */ CARD32 cut; if(param->tfor==cur) return; diff -Nru notion-3+2014010901/ioncore/pholder.c notion-3+2015061300/ioncore/pholder.c --- notion-3+2014010901/ioncore/pholder.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/pholder.c 2015-06-13 14:37:26.000000000 +0000 @@ -13,13 +13,13 @@ #include "focus.h" -bool pholder_init(WPHolder *ph) +bool pholder_init(WPHolder *UNUSED(ph)) { return TRUE; } -void pholder_deinit(WPHolder *ph) +void pholder_deinit(WPHolder *UNUSED(ph)) { } diff -Nru notion-3+2014010901/ioncore/pointer.c notion-3+2015061300/ioncore/pointer.c --- notion-3+2014010901/ioncore/pointer.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/pointer.c 2015-06-13 14:37:26.000000000 +0000 @@ -128,8 +128,6 @@ static void call_button(WBinding *binding, XButtonEvent *ev) { - WButtonHandler *fn; - if(binding==NULL) return; @@ -163,8 +161,6 @@ static void call_motion_begin(WBinding *binding, XMotionEvent *ev, int dx, int dy) { - WMotionHandler *fn; - if(binding==NULL) return; @@ -208,7 +204,7 @@ } -static void pointer_grab_killed(WRegion *unused) +static void pointer_grab_killed(WRegion *UNUSED(unused)) { if(p_reg!=NULL && p_killed_handler!=NULL) p_killed_handler(p_reg); diff -Nru notion-3+2014010901/ioncore/presize.c notion-3+2015061300/ioncore/presize.c --- notion-3+2014010901/ioncore/presize.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/presize.c 2015-06-13 14:37:26.000000000 +0000 @@ -69,7 +69,7 @@ } -static void p_moveres_end(WWindow *wwin, XButtonEvent *ev) +static void p_moveres_end(WWindow *wwin, XButtonEvent *UNUSED(ev)) { WMoveresMode *mode=moveres_mode((WRegion*)wwin); if(mode!=NULL) @@ -93,7 +93,7 @@ } -static void p_resize_motion(WWindow *wwin, XMotionEvent *ev, int dx, int dy) +static void p_resize_motion(WWindow *wwin, XMotionEvent *UNUSED(ev), int dx, int dy) { WMoveresMode *mode=moveres_mode((WRegion*)wwin); if(mode!=NULL){ @@ -136,7 +136,7 @@ /*{{{ Move */ -static void p_move_motion(WWindow *wwin, XMotionEvent *ev, int dx, int dy) +static void p_move_motion(WWindow *wwin, XMotionEvent *UNUSED(ev), int dx, int dy) { WMoveresMode *mode=moveres_mode((WRegion*)wwin); if(mode!=NULL) diff -Nru notion-3+2014010901/ioncore/rectangle.c notion-3+2015061300/ioncore/rectangle.c --- notion-3+2014010901/ioncore/rectangle.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/rectangle.c 2015-06-13 14:37:26.000000000 +0000 @@ -17,10 +17,10 @@ { const WRectangle tmpg=*g; - g->x=minof(maxof(tmpg.x, bounds->x), tmpg.x+tmpg.w-1); - g->y=minof(maxof(tmpg.y, bounds->y), tmpg.y+tmpg.h-1); - g->w=maxof(1, minof(bounds->x+bounds->w, tmpg.x+tmpg.w)-g->x); - g->h=maxof(1, minof(bounds->y+bounds->h, tmpg.y+tmpg.h)-g->y); + g->x=MINOF(MAXOF(tmpg.x, bounds->x), tmpg.x+tmpg.w-1); + g->y=MINOF(MAXOF(tmpg.y, bounds->y), tmpg.y+tmpg.h-1); + g->w=MAXOF(1, MINOF(bounds->x+bounds->w, tmpg.x+tmpg.w)-g->x); + g->h=MAXOF(1, MINOF(bounds->y+bounds->h, tmpg.y+tmpg.h)-g->y); } diff -Nru notion-3+2014010901/ioncore/regbind.c notion-3+2015061300/ioncore/regbind.c --- notion-3+2014010901/ioncore/regbind.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/regbind.c 2015-06-13 14:37:26.000000000 +0000 @@ -73,7 +73,7 @@ void rbind_binding_added(const WRegBindingInfo *rbind, const WBinding *binding, - const WBindmap *bindmap) + const WBindmap *UNUSED(bindmap)) { if(binding->area==0 && rbind->reg->flags®ION_BINDINGS_ARE_GRABBED) do_binding_grab_on_ungrab_on(rbind->reg, binding, rbind->bindmap, TRUE); @@ -82,7 +82,7 @@ void rbind_binding_removed(const WRegBindingInfo *rbind, const WBinding *binding, - const WBindmap *bindmap) + const WBindmap *UNUSED(bindmap)) { if(binding->area==0 && rbind->reg->flags®ION_BINDINGS_ARE_GRABBED) do_binding_grab_on_ungrab_on(rbind->reg, binding, rbind->bindmap, FALSE); @@ -205,8 +205,7 @@ WBinding *binding=NULL; const WSubmapState *s=NULL; WBindmap *bindmap=NULL; - int i; - + *binding_owner_ret=reg; for(rbind=(WRegBindingInfo*)reg->bindings; rbind!=NULL; rbind=rbind->next){ @@ -272,7 +271,6 @@ { WRegion *rx=REGION_MANAGER(r2); WRegBindingInfo *rbind, *rb2; - WBinding *binding=NULL; if(rx!=NULL && REGION_PARENT_REG(rx)==reg){ /* The recursion is here to get the bindmaps correctly ordered. */ diff -Nru notion-3+2014010901/ioncore/region.c notion-3+2015061300/ioncore/region.c --- notion-3+2014010901/ioncore/region.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/region.c 2015-06-13 14:37:26.000000000 +0000 @@ -28,7 +28,8 @@ #include "region-iter.h" #include "return.h" #include "key.h" - +#include "log.h" +#include "screen-notify.h" #define D2(X) @@ -123,7 +124,7 @@ region_unregister(reg); - region_focuslist_deinit(reg); + region_focus_deinit(reg); if(ioncore_g.focus_next==reg){ D(warn("Region to be focused next destroyed[2].")); @@ -480,7 +481,7 @@ } -static WRegion *region_managed_disposeroot_default(WRegion *mgr, WRegion *reg) +static WRegion *region_managed_disposeroot_default(WRegion *UNUSED(mgr), WRegion *reg) { return reg; } @@ -975,6 +976,48 @@ /*}}}*/ +/*{{{ Debug printers */ + +#define REGION_DEBUGPRINT( what, next ) \ + do { \ + int indent = 1; \ + char line_indent[24]; \ + line_indent[0] = ' '; \ + line_indent[1] = '\0'; \ + \ + LOG(DEBUG, GENERAL, what " list start ========:"); \ + while( reg != NULL ) \ + { \ + LOG(DEBUG, GENERAL, "%s%p (%s)", line_indent, (void*)reg, reg->ni.name); \ + \ + if( indent == sizeof(line_indent )-1 ) \ + { \ + LOG(DEBUG, GENERAL, "too long. cut off"); \ + break; \ + } \ + \ + reg = next; \ + line_indent[indent] = ' '; \ + indent++; \ + line_indent[indent] = '\0'; \ + } \ + LOG(DEBUG, GENERAL, what " list end =========="); \ + } while(0) + +void region_debugprint_parents ( const WRegion* reg ) +{ + REGION_DEBUGPRINT( "parent", reg->parent && reg->parent->region.ni.name ? ®->parent->region : NULL ); +} + +void region_debugprint_managers( const WRegion* reg ) +{ + REGION_DEBUGPRINT( "manager", reg->manager ); +} + +#undef REGION_DEBUGPRINT + +/*}}}*/ + /*{{{ Dynamic function table and class implementation */ diff -Nru notion-3+2014010901/ioncore/region.h notion-3+2015061300/ioncore/region.h --- notion-3+2014010901/ioncore/region.h 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/region.h 2015-06-13 14:37:26.000000000 +0000 @@ -199,4 +199,7 @@ void ioncore_region_notify(WRegion *reg, WRegionNotify how); +void region_debugprint_parents ( const WRegion* reg ); +void region_debugprint_managers( const WRegion* reg ); + #endif /* ION_IONCORE_REGION_H */ diff -Nru notion-3+2014010901/ioncore/resize.c notion-3+2015061300/ioncore/resize.c --- notion-3+2014010901/ioncore/resize.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/resize.c 2015-06-13 14:37:26.000000000 +0000 @@ -125,7 +125,6 @@ static void moveres_draw_infowin(WMoveresMode *mode) { - WRectangle geom; char *buf; if(mode->infowin==NULL) @@ -143,13 +142,13 @@ h=mode->geom.h; if(mode->hints.base_set){ - w=maxof(0, w-mode->hints.base_width); - h=maxof(0, h-mode->hints.base_height); + w=MAXOF(0, w-mode->hints.base_width); + h=MAXOF(0, h-mode->hints.base_height); } if(mode->hints.inc_set){ - w/=maxof(1, mode->hints.width_inc); - h/=maxof(1, mode->hints.height_inc); + w/=MAXOF(1, mode->hints.width_inc); + h/=MAXOF(1, mode->hints.height_inc); } snprintf(buf, INFOWIN_BUFFER_LEN, "%dx%d", w, h); @@ -165,7 +164,6 @@ static void moveres_draw_rubberband(WMoveresMode *mode) { WRectangle rgeom=mode->geom; - int rx, ry; WRootWin *rootwin=(mode->reg==NULL ? NULL : region_rootwin_of(mode->reg)); @@ -378,8 +376,8 @@ realdy2=sg->y+sg->h-rq.geom.y-rq.geom.h; } - w=maxof(1, mode->origgeom.w-realdx1+realdx2); - h=maxof(1, mode->origgeom.h-realdy1+realdy2); + w=MAXOF(1, mode->origgeom.w-realdx1+realdx2); + h=MAXOF(1, mode->origgeom.h-realdy1+realdy2); if(mode->snap_enabled && mode->hints.base_set){ w=clamp_up(w, mode->hints.base_width-er, mode->hints.base_width); @@ -448,7 +446,7 @@ void moveresmode_rqgeom(WMoveresMode *mode, WRQGeomParams *rq, - WRectangle *rret) + WRectangle *UNUSED(rret)) { mode->mode=MOVERES_SIZE; moveresmode_do_newgeom(mode, rq); @@ -561,8 +559,8 @@ if(extl_table_gets_i(g, "h", &(rq->geom.h))) rq->flags&=~REGION_RQGEOM_WEAK_H; - rq->geom.w=maxof(1, rq->geom.w); - rq->geom.h=maxof(1, rq->geom.h); + rq->geom.w=MAXOF(1, rq->geom.w); + rq->geom.h=MAXOF(1, rq->geom.h); } @@ -603,7 +601,7 @@ } -void region_managed_rqgeom_allow(WRegion *mgr, WRegion *reg, +void region_managed_rqgeom_allow(WRegion *UNUSED(mgr), WRegion *reg, const WRQGeomParams *rq, WRectangle *geomret) { @@ -615,8 +613,8 @@ } -void region_managed_rqgeom_unallow(WRegion *mgr, WRegion *reg, - const WRQGeomParams *rq, +void region_managed_rqgeom_unallow(WRegion *UNUSED(mgr), WRegion *reg, + const WRQGeomParams *UNUSED(rq), WRectangle *geomret) { if(geomret!=NULL) diff -Nru notion-3+2014010901/ioncore/return.c notion-3+2015061300/ioncore/return.c --- notion-3+2014010901/ioncore/return.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/return.c 2015-06-13 14:37:26.000000000 +0000 @@ -32,7 +32,6 @@ bool region_do_set_return(WRegion *reg, WPHolder *ph) { Rb_node node; - int found=0; assert(!OBJ_IS_BEING_DESTROYED(reg)); diff -Nru notion-3+2014010901/ioncore/rootwin.c notion-3+2015061300/ioncore/rootwin.c --- notion-3+2014010901/ioncore/rootwin.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/rootwin.c 2015-06-13 14:37:26.000000000 +0000 @@ -45,7 +45,7 @@ static bool ignore_badwindow=TRUE; -static int my_redirect_error_handler(Display *dpy, XErrorEvent *ev) +static int my_redirect_error_handler(Display *UNUSED(dpy), XErrorEvent *UNUSED(ev)) { redirect_error=TRUE; return 0; @@ -200,9 +200,6 @@ } -static Atom net_virtual_roots=None; - - static bool rootwin_init(WRootWin *rootwin, int xscr) { Display *dpy=ioncore_g.dpy; @@ -240,7 +237,6 @@ fp.g.h=DisplayHeight(dpy, xscr); if(!window_do_init((WWindow*)rootwin, NULL, &fp, root, "WRootWin")){ - free(rootwin); return FALSE; } @@ -260,7 +256,6 @@ scr=create_screen(rootwin, &fp, xscr); if(scr==NULL){ - free(rootwin); return FALSE; } region_set_manager((WRegion*)scr, (WRegion*)rootwin); @@ -330,21 +325,21 @@ } -static bool rootwin_fitrep(WRootWin *rootwin, WWindow *par, - const WFitParams *fp) +static bool rootwin_fitrep(WRootWin *UNUSED(rootwin), WWindow *UNUSED(par), + const WFitParams *UNUSED(fp)) { D(warn("Don't know how to reparent or fit root windows.")); return FALSE; } -static void rootwin_map(WRootWin *rootwin) +static void rootwin_map(WRootWin *UNUSED(rootwin)) { D(warn("Attempt to map a root window.")); } -static void rootwin_unmap(WRootWin *rootwin) +static void rootwin_unmap(WRootWin *UNUSED(rootwin)) { D(warn("Attempt to unmap a root window -- impossible.")); } @@ -355,7 +350,7 @@ region_unset_manager(reg, (WRegion*)rootwin); } -static WRegion *rootwin_managed_disposeroot(WRootWin *rootwin, WRegion *reg) +static WRegion *rootwin_managed_disposeroot(WRootWin *UNUSED(rootwin), WRegion *reg) { WScreen *scr=OBJ_CAST(reg, WScreen); if(scr!=NULL && scr==scr->prev_scr){ @@ -411,6 +406,19 @@ return scr; } +/*EXTL_DOC + * Warp the cursor pointer to this location + * + * I'm not *entirely* sure what 'safe' means, but this doesn't change internal + * notion state, so I guess it's 'safe'... + */ +EXTL_SAFE +EXTL_EXPORT_MEMBER +void rootwin_warp_pointer(WRootWin *root, int x, int y) +{ + XWarpPointer(ioncore_g.dpy, None, WROOTWIN_ROOT(root), 0, 0, 0, 0, x, y); +} + /*EXTL_DOC * Returns the first WRootWin diff -Nru notion-3+2014010901/ioncore/rootwin.h notion-3+2015061300/ioncore/rootwin.h --- notion-3+2014010901/ioncore/rootwin.h 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/rootwin.h 2015-06-13 14:37:26.000000000 +0000 @@ -41,6 +41,7 @@ extern void rootwin_deinit(WRootWin *rootwin); extern WScreen *rootwin_current_scr(WRootWin *rootwin); +extern void rootwin_warp_pointer(WRootWin *root, int x, int y); extern void rootwin_manage_initial_windows(WRootWin *rootwin); extern WRootWin *create_rootwin(int xscr); diff -Nru notion-3+2014010901/ioncore/saveload.c notion-3+2015061300/ioncore/saveload.c --- notion-3+2014010901/ioncore/saveload.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/saveload.c 2015-06-13 14:37:26.000000000 +0000 @@ -79,8 +79,6 @@ WRegionLoadCreateFn* fn=NULL; WRegClassInfo *info=NULL; WRegion *reg=NULL; - bool grouped=FALSE; - char *grouped_name=NULL; WPHolder **old_ph_p; if(!extl_table_gets_s(tab, "type", &objclass)) @@ -251,7 +249,7 @@ return FALSE; } warn(TR(backup_msg), backup); - if(!extl_serialise(backup, tab)) + if(!extl_serialize(backup, tab)) warn(TR("Failed backup.")); free(backup); } diff -Nru notion-3+2014010901/ioncore/screen.c notion-3+2015061300/ioncore/screen.c --- notion-3+2014010901/ioncore/screen.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/screen.c 2015-06-13 14:37:26.000000000 +0000 @@ -60,6 +60,7 @@ watch_init(&(scr->notifywin_watch)); watch_init(&(scr->infowin_watch)); + watch_init(&(scr->workspace_indicatorwin_watch)); attr.background_pixmap=ParentRelative; attrflags=CWBackPixmap; @@ -121,8 +122,9 @@ { UNLINK_ITEM(ioncore_g.screens, scr, next_scr, prev_scr); - screen_unnotify(scr); - screen_nowindowinfo(scr); + screen_unnotify_notifywin(scr); + screen_unnotify_infowin(scr); + screen_unnotify_if_screen(scr); mplex_deinit((WMPlex*)scr); } @@ -140,8 +142,8 @@ geom->y=scr->managed_off.y; geom->w=REGION_GEOM(scr).w+scr->managed_off.w; geom->h=REGION_GEOM(scr).h+scr->managed_off.h; - geom->w=maxof(geom->w, 0); - geom->h=maxof(geom->h, 0); + geom->w=MAXOF(geom->w, 0); + geom->h=MAXOF(geom->h, 0); } @@ -356,7 +358,7 @@ } -static bool screen_may_dispose(WScreen *scr) +static bool screen_may_dispose(WScreen *UNUSED(scr)) { return TRUE; } @@ -410,13 +412,6 @@ } -static WRegion *do_create_initial(WWindow *parent, const WFitParams *fp, - WRegionLoadCreateFn *fn) -{ - return fn(parent, fp, extl_table_none()); -} - - static bool create_initial_ws(WScreen *scr) { WRegion *reg=NULL; @@ -442,10 +437,6 @@ bool screen_init_layout(WScreen *scr, ExtlTab tab) { - char *name; - ExtlTab substab, subtab; - int n, i; - if(tab==extl_table_none()) return create_initial_ws(scr); diff -Nru notion-3+2014010901/ioncore/screen.h notion-3+2015061300/ioncore/screen.h --- notion-3+2014010901/ioncore/screen.h 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/screen.h 2015-06-13 14:37:26.000000000 +0000 @@ -44,6 +44,7 @@ WScreen *next_scr, *prev_scr; Watch notifywin_watch; Watch infowin_watch; + Watch workspace_indicatorwin_watch; }; extern bool screen_init(WScreen *scr, WRootWin *parent, const WFitParams *fp, diff -Nru notion-3+2014010901/ioncore/screen-notify.c notion-3+2015061300/ioncore/screen-notify.c --- notion-3+2014010901/ioncore/screen-notify.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/screen-notify.c 2015-06-13 14:37:26.000000000 +0000 @@ -10,6 +10,7 @@ #include #include +#include #include "common.h" #include "global.h" @@ -28,13 +29,12 @@ /*{{{ Generic stuff */ -static WInfoWin *do_get_notifywin(WScreen *scr, Watch *watch, uint pos, +static WInfoWin *do_get_popup_win(WScreen *scr, Watch *watch, uint pos, char *style) { WInfoWin *iw=(WInfoWin*)(watch->obj); - WFitParams fp; - + if(iw==NULL){ WMPlexAttachParams param=MPLEXATTACHPARAMS_INIT; @@ -96,6 +96,16 @@ } } +// returns the position or the stdisp, or -1 if there isn't one +static int get_stdisp_pos(WScreen *scr) +{ + WRegion* stdisp=NULL; + WMPlexSTDispInfo info; + + mplex_get_stdisp(&scr->mplex, &stdisp, &info); + + return (stdisp!=NULL) ? info.pos : -1; +} /*}}}*/ @@ -105,15 +115,11 @@ static WInfoWin *get_notifywin(WScreen *scr) { - WRegion *stdisp=NULL; - WMPlexSTDispInfo info; - uint pos=MPLEX_STDISP_TL; - - mplex_get_stdisp(&scr->mplex, &stdisp, &info); - if(stdisp!=NULL) - pos=info.pos; - - return do_get_notifywin(scr, &scr->notifywin_watch, pos, "actnotify"); + int stdisp_pos = get_stdisp_pos(scr); + return do_get_popup_win(scr, + &scr->notifywin_watch, + (stdisp_pos >= 0) ? stdisp_pos : MPLEX_STDISP_TL, + "actnotify"); } @@ -128,7 +134,7 @@ } -void screen_unnotify(WScreen *scr) +void screen_unnotify_notifywin(WScreen *scr) { do_unnotify(&scr->notifywin_watch); } @@ -166,7 +172,8 @@ * pois (+ n) */ FOR_ALL_ON_OBJLIST(WRegion*, reg, actlist, tmp){ - if(region_screen_of(reg)!=scr || ws_mapped(scr, reg)) + if(!ioncore_g.activity_notification_on_all_screens && + (region_screen_of(reg)!=scr || ws_mapped(scr, reg))) continue; if(region_name(reg)==NULL) continue; @@ -234,18 +241,31 @@ return; unnotify: - screen_unnotify(scr); + screen_unnotify_notifywin(scr); } -static void screen_do_update_notifywin(WScreen *scr) +static void _screen_do_update_notifywin(WScreen *scr) { if(ioncore_g.screen_notify) screen_managed_activity(scr); else - screen_unnotify(scr); + screen_unnotify_notifywin(scr); } +static void screen_do_update_notifywin(WScreen *scr) +{ + if( ioncore_g.activity_notification_on_all_screens ) + { + WScreen* scr_iterated; + FOR_ALL_SCREENS(scr_iterated) + { + _screen_do_update_notifywin(scr_iterated); + } + } + else + _screen_do_update_notifywin(scr); +} /*}}}*/ @@ -255,30 +275,15 @@ static WInfoWin *get_infowin(WScreen *scr) { - WRegion *stdisp=NULL; - WMPlexSTDispInfo info; - uint pos=MPLEX_STDISP_TR; - - mplex_get_stdisp(&scr->mplex, &stdisp, &info); - if(stdisp!=NULL && info.pos==MPLEX_STDISP_TR) - pos=MPLEX_STDISP_BR; - - return do_get_notifywin(scr, &scr->infowin_watch, pos, "tab-info"); -} - - -void screen_windowinfo(WScreen *scr, const char *str) -{ - WInfoWin *iw=get_infowin(scr); - - if(iw!=NULL){ - int maxw=REGION_GEOM(scr).w/3; - infowin_set_text(iw, str, maxw); - } + int stdisp_pos = get_stdisp_pos(scr); + return do_get_popup_win(scr, + &scr->infowin_watch, + (stdisp_pos == MPLEX_STDISP_TR) ? MPLEX_STDISP_BR : MPLEX_STDISP_TR, + "tab-info"); } -void screen_nowindowinfo(WScreen *scr) +void screen_unnotify_infowin(WScreen *scr) { do_unnotify(&scr->infowin_watch); } @@ -318,13 +323,12 @@ if(tag || act){ const char *n=region_displayname(reg); - WInfoWin *iw; - - screen_windowinfo(scr, n); - - iw=(WInfoWin*)scr->infowin_watch.obj; - + WInfoWin *iw=get_infowin(scr); + if(iw!=NULL){ + int maxw=REGION_GEOM(scr).w/3; + infowin_set_text(iw, n, maxw); + GrStyleSpec *spec=infowin_stylespec(iw); init_attr(); @@ -339,11 +343,122 @@ } }else{ - screen_nowindowinfo(scr); + screen_unnotify_infowin(scr); + } +} + + + +/*}}}*/ + + +/*{{{ workspace indicator win */ + +// A single timer for ALL the screens +static WTimer* workspace_indicator_remove_timer = NULL; +static WScreen* workspace_indicator_active_screen = NULL; +static WGroupWS* workspace_indicator_last_workspace = NULL; + +static WInfoWin *get_workspace_indicatorwin(WScreen *scr) +{ + return do_get_popup_win(scr, + &scr->workspace_indicatorwin_watch, + MPLEX_STDISP_BL, + "tab-info"); +} + + +void screen_unnotify_workspace_indicatorwin(void) +{ + if( workspace_indicator_active_screen != NULL) + { + do_unnotify(&workspace_indicator_active_screen->workspace_indicatorwin_watch); + workspace_indicator_active_screen = NULL; } + + if( workspace_indicator_remove_timer ) + timer_reset( workspace_indicator_remove_timer ); } +static void timer_expired__workspace_indicator_remove(WTimer* UNUSED(dummy1), Obj* UNUSED(dummy2)) +{ + if( workspace_indicator_active_screen != NULL ) + screen_unnotify_workspace_indicatorwin(); +} + +// Called when a region is focused. In response this function may either put up +// a new workspace-indicator or remove an existing one +void screen_update_workspace_indicatorwin(WRegion* reg_focused) +{ + if( ioncore_g.workspace_indicator_timeout <= 0 ) + return; + + WScreen* scr = region_screen_of(reg_focused); + WRegion* mplex; + if( scr == NULL || + (mplex = mplex_mx_current(&(scr->mplex))) == NULL || + !OBJ_IS(mplex, WGroupWS) || + mplex->ni.name == NULL) + { + return; + } + // remove the indicator from the other screen that it is on (if it IS on + // another screen) + if( workspace_indicator_active_screen != NULL && + workspace_indicator_active_screen != scr ) + { + screen_unnotify_workspace_indicatorwin(); + } + else if( (WGroupWS*)mplex == workspace_indicator_last_workspace ) + // If I'm already on this workspace, do nothing + return; + + const char* name = mplex->ni.name; + + WInfoWin *iw=get_workspace_indicatorwin(scr); + + if(iw!=NULL){ + int maxw=REGION_GEOM(scr).w/3; + infowin_set_text(iw, name, maxw); + + GrStyleSpec *spec=infowin_stylespec(iw); + init_attr(); + gr_stylespec_unalloc(spec); + + gr_stylespec_set(spec, GR_ATTR(selected)); + gr_stylespec_set(spec, GR_ATTR(not_dragged)); + gr_stylespec_set(spec, GR_ATTR(active)); + } + + // set up the indicator on THIS screen + workspace_indicator_active_screen = scr; + workspace_indicator_last_workspace = (WGroupWS*)mplex; + + // create and set the timer + if( workspace_indicator_remove_timer == NULL ) + workspace_indicator_remove_timer = create_timer(); + if( workspace_indicator_remove_timer == NULL ) + return; + + timer_set(workspace_indicator_remove_timer, ioncore_g.workspace_indicator_timeout, + (WTimerHandler*)timer_expired__workspace_indicator_remove, NULL); +} + +void screen_unnotify_if_screen( WScreen* reg ) +{ + if( reg == workspace_indicator_active_screen ) + screen_unnotify_workspace_indicatorwin(); +} + +void screen_unnotify_if_workspace( WGroupWS* reg) +{ + if( reg == workspace_indicator_last_workspace ) + { + screen_unnotify_workspace_indicatorwin(); + workspace_indicator_last_workspace = NULL; + } +} /*}}}*/ @@ -365,7 +480,7 @@ } -void screen_managed_notify(WScreen *scr, WRegion *reg, WRegionNotify how) +void screen_managed_notify(WScreen *scr, WRegion *UNUSED(reg), WRegionNotify how) { if(how==ioncore_g.notifies.tag) screen_update_infowin(scr); diff -Nru notion-3+2014010901/ioncore/screen-notify.h notion-3+2015061300/ioncore/screen-notify.h --- notion-3+2014010901/ioncore/screen-notify.h 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/screen-notify.h 2015-06-13 14:37:26.000000000 +0000 @@ -13,13 +13,18 @@ #include "region.h" #include "screen.h" -void screen_unnotify(WScreen *scr); -void screen_nowindowinfo(WScreen *scr); +void screen_unnotify_infowin(WScreen *scr); +void screen_unnotify_notifywin(WScreen *scr); +void screen_unnotify_workspace_indicatorwin(void); // there's just one indicator void screen_managed_notify(WScreen *scr, WRegion *reg, WRegionNotify how); void screen_update_infowin(WScreen *scr); void screen_update_notifywin(WScreen *scr); +void screen_update_workspace_indicatorwin(WRegion* reg_focused); + +void screen_unnotify_if_screen( WScreen* reg); +void screen_unnotify_if_workspace( WGroupWS* reg); extern void ioncore_screen_activity_notify(WRegion *reg, WRegionNotify how); diff -Nru notion-3+2014010901/ioncore/selection.c notion-3+2015061300/ioncore/selection.c --- notion-3+2014010901/ioncore/selection.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/selection.c 2015-06-13 14:37:26.000000000 +0000 @@ -115,7 +115,6 @@ { Atom prop=ev->property; Window win=ev->requestor; - WWindow *wwin; if(prop!=None){ insert_selection(win, prop); diff -Nru notion-3+2014010901/ioncore/sizehint.c notion-3+2015061300/ioncore/sizehint.c --- notion-3+2014010901/ioncore/sizehint.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/sizehint.c 2015-06-13 14:37:26.000000000 +0000 @@ -69,11 +69,10 @@ { int w=*wp, tw, bw=(hints->base_set ? hints->base_width : 0); int h=*hp, th, bh=(hints->base_set ? hints->base_height : 0); - int bs=0; if(min && hints->min_set){ - w=maxof(w, hints->min_width); - h=maxof(h, hints->min_height); + w=MAXOF(w, hints->min_width); + h=MAXOF(h, hints->min_height); } if(hints->no_constrain && !override_no_constrain){ @@ -99,8 +98,8 @@ h=th+bh; if(hints->max_set){ - w=minof(w, hints->max_width); - h=minof(h, hints->max_height); + w=MINOF(w, hints->max_width); + h=MINOF(h, hints->max_height); } *wp=w; @@ -126,8 +125,8 @@ } } - hints->min_width=maxof(hints->min_width, 0); - hints->min_height=maxof(hints->min_height, 0); + hints->min_width=MAXOF(hints->min_width, 0); + hints->min_height=MAXOF(hints->min_height, 0); if(!(hints->flags&PBaseSize) || hints->base_width<0) hints->base_width=hints->min_width; @@ -135,8 +134,8 @@ hints->base_height=hints->min_height; if(hints->flags&PMaxSize){ - hints->max_width=maxof(hints->max_width, hints->min_width); - hints->max_height=maxof(hints->max_height, hints->min_height); + hints->max_width=MAXOF(hints->max_width, hints->min_width); + hints->max_height=MAXOF(hints->max_height, hints->min_height); } hints->flags|=(PBaseSize|PMinSize); @@ -179,17 +178,17 @@ hints->min_width=tmp_hints.min_width; hints->min_height=tmp_hints.min_height; }else{ - hints->min_width=maxof(hints->min_width, + hints->min_width=MAXOF(hints->min_width, tmp_hints.min_width); - hints->min_height=maxof(hints->min_height, + hints->min_height=MAXOF(hints->min_height, tmp_hints.min_height); } } if(tmp_hints.max_set && hints->max_set){ - hints->max_width=maxof(hints->max_width, + hints->max_width=MAXOF(hints->max_width, tmp_hints.max_width); - hints->max_height=maxof(hints->max_height, + hints->max_height=MAXOF(hints->max_height, tmp_hints.max_height); }else{ hints->max_set=FALSE; diff -Nru notion-3+2014010901/ioncore/sizepolicy.c notion-3+2015061300/ioncore/sizepolicy.c --- notion-3+2014010901/ioncore/sizepolicy.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/sizepolicy.c 2015-06-13 14:37:26.000000000 +0000 @@ -19,17 +19,17 @@ static int fit_x(int x, int w, const WRectangle *max_geom) { - int mw=maxof(max_geom->w, 1); - w=minof(mw, w); - return minof(maxof(x, max_geom->x), max_geom->x+mw-w); + int mw=MAXOF(max_geom->w, 1); + w=MINOF(mw, w); + return MINOF(MAXOF(x, max_geom->x), max_geom->x+mw-w); } static int fit_y(int y, int h, const WRectangle *max_geom) { - int mh=maxof(max_geom->h, 1); - h=minof(mh, h); - return minof(maxof(y, max_geom->y), max_geom->y+mh-h); + int mh=MAXOF(max_geom->h, 1); + h=MINOF(mh, h); + return MINOF(MAXOF(y, max_geom->y), max_geom->y+mh-h); } @@ -87,8 +87,8 @@ fp->g=*rq_geom; - w=(ws ? max_geom.w : minof(rq_geom->w, max_geom.w)); - h=(hs ? max_geom.h : minof(rq_geom->h, max_geom.h)); + w=(ws ? max_geom.w : MINOF(rq_geom->w, max_geom.w)); + h=(hs ? max_geom.h : MINOF(rq_geom->h, max_geom.h)); if(reg!=NULL) region_size_hints_correct(reg, &w, &h, FALSE); @@ -110,8 +110,8 @@ bool fullh=((rq_flags®ION_RQGEOM_WEAK_H) && (*szplcy&SIZEPOLICY_VERT_MASK)==SIZEPOLICY_VERT_CENTER); - int w=(fullw ? max_geom.w : minof(rq_geom->w, max_geom.w)); - int h=(fullh ? max_geom.h : minof(rq_geom->h, max_geom.h)); + int w=(fullw ? max_geom.w : MINOF(rq_geom->w, max_geom.w)); + int h=(fullh ? max_geom.h : MINOF(rq_geom->h, max_geom.h)); int x_=0, y_=0; /* ignore out-of-bound values for 'x' entirely */ @@ -132,7 +132,7 @@ if(((*szplcy)&SIZEPOLICY_HORIZ_MASK)==SIZEPOLICY_HORIZ_RIGHT) w=max_geom.x+max_geom.w-x_; else - w=minof(w, max_geom.x+max_geom.w-x_); + w=MINOF(w, max_geom.x+max_geom.w-x_); } if(!(rq_flags®ION_RQGEOM_WEAK_Y) @@ -141,7 +141,7 @@ if(((*szplcy)&SIZEPOLICY_VERT_MASK)==SIZEPOLICY_VERT_BOTTOM) h=max_geom.y+max_geom.h-y_; else - h=minof(h, max_geom.y+max_geom.h-y_); + h=MINOF(h, max_geom.y+max_geom.h-y_); } if(reg!=NULL) @@ -292,10 +292,10 @@ /* Constraint such that at least min(size, CF_VISIBILITY_CONSTRAINT) * much is visible at each border. */ - int dx=maxof(0, tmp.w-CF_VISIBILITY_CONSTRAINT); - int dy=maxof(0, tmp.h-CF_VISIBILITY_CONSTRAINT); - tmp.x=maxof(fp->g.x-dx, minof(tmp.x, fp->g.x+fp->g.w+dx-tmp.w)); - tmp.y=maxof(fp->g.y-dy, minof(tmp.y, fp->g.y+fp->g.h+dy-tmp.h)); + int dx=MAXOF(0, tmp.w-CF_VISIBILITY_CONSTRAINT); + int dy=MAXOF(0, tmp.h-CF_VISIBILITY_CONSTRAINT); + tmp.x=MAXOF(fp->g.x-dx, MINOF(tmp.x, fp->g.x+fp->g.w+dx-tmp.w)); + tmp.y=MAXOF(fp->g.y-dy, MINOF(tmp.y, fp->g.y+fp->g.h+dy-tmp.h)); } fp->g=tmp; break; diff -Nru notion-3+2014010901/ioncore/stacking.c notion-3+2015061300/ioncore/stacking.c --- notion-3+2014010901/ioncore/stacking.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/stacking.c 2015-06-13 14:37:26.000000000 +0000 @@ -126,43 +126,6 @@ } -static WStacking *link_list_before(WStacking *l1, - WStacking *i1, - WStacking *l2) -{ - WStacking *tmp; - - if(i1==l1) - return link_lists(l2, l1); - - l2->prev->next=i1; - i1->prev->next=l2; - tmp=i1->prev; - i1->prev=l2->prev; - l2->prev=tmp; - - return l1; -} - - -static WStacking *link_list_after(WStacking *l1, - WStacking *i1, - WStacking *l2) -{ - WStacking *tmp; - - if(i1==l1->prev) - return link_lists(l1, l2); - - i1->next->prev=l2->prev; - l2->prev->next=i1->next; - i1->next=l2; - l2->prev=i1; - - return l1; -} - - WStacking *stacking_unstack(WWindow *par, WStacking *regst) { WStacking *nxt=NULL, *st; @@ -583,14 +546,14 @@ } if(st->level>=STACKING_LEVEL_MODAL1) - min_level=maxof(min_level, st->level); + min_level=MAXOF(min_level, st->level); }while(st!=stacking); return found; } -static bool mapped_filt(WStacking *st, void *unused) +static bool mapped_filt(WStacking *st, void *UNUSED(unused)) { return (st->reg!=NULL && REGION_IS_MAPPED(st->reg)); } diff -Nru notion-3+2014010901/ioncore/strings.c notion-3+2015061300/ioncore/strings.c --- notion-3+2014010901/ioncore/strings.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/strings.c 2015-06-13 14:37:26.000000000 +0000 @@ -10,6 +10,7 @@ #include #include #include +#include "log.h" #include "common.h" #include "global.h" #include "strings.h" @@ -188,20 +189,6 @@ /*{{{ Title shortening */ -static char *scatn3(const char *p1, int l1, - const char *p2, int l2, - const char *p3, int l3) -{ - char *p=ALLOC_N(char, l1+l2+l3+1); - - if(p!=NULL){ - strncat(p, p1, l1); - strncat(p, p2, l2); - strncat(p, p3, l3); - } - return p; -} - INTRSTRUCT(SR); DECLSTRUCT(SR){ diff -Nru notion-3+2014010901/ioncore/window.c notion-3+2015061300/ioncore/window.c --- notion-3+2014010901/ioncore/window.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/window.c 2015-06-13 14:37:26.000000000 +0000 @@ -137,8 +137,8 @@ { bool move=(REGION_GEOM(wwin).x!=geom->x || REGION_GEOM(wwin).y!=geom->y); - int w=maxof(1, geom->w); - int h=maxof(1, geom->h); + int w=MAXOF(1, geom->w); + int h=MAXOF(1, geom->h); if(par!=NULL){ region_unset_parent((WRegion*)wwin); diff -Nru notion-3+2014010901/ioncore/xwindow.c notion-3+2015061300/ioncore/xwindow.c --- notion-3+2014010901/ioncore/xwindow.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/xwindow.c 2015-06-13 14:37:26.000000000 +0000 @@ -56,8 +56,8 @@ Window create_xwindow(WRootWin *rw, Window par, const WRectangle *geom, const char *name) { - int w=maxof(1, geom->w); - int h=maxof(1, geom->h); + int w=MAXOF(1, geom->w); + int h=MAXOF(1, geom->h); const char *p[1]; Window window; @@ -130,15 +130,17 @@ /*{{{ Size hints */ -void xwindow_get_sizehints(Window win, XSizeHints *hints) +int xwindow_get_sizehints(Window win, XSizeHints *hints) { - int minh, minw; long supplied=0; - memset(hints, 0, sizeof(*hints)); - XGetWMNormalHints(ioncore_g.dpy, win, hints, &supplied); - - xsizehints_sanity_adjust(hints); + if (XGetWMNormalHints(ioncore_g.dpy, win, hints, &supplied)!=0){ + xsizehints_sanity_adjust(hints); + return 0; + }else{ + memset(hints, 0, sizeof(*hints)); + return -1; + } } diff -Nru notion-3+2014010901/ioncore/xwindow.h notion-3+2015061300/ioncore/xwindow.h --- notion-3+2014010901/ioncore/xwindow.h 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/ioncore/xwindow.h 2015-06-13 14:37:26.000000000 +0000 @@ -27,7 +27,12 @@ extern void xwindow_set_cursor(Window win, int cursor); -extern void xwindow_get_sizehints(Window win, XSizeHints *hints); +/** + * On failure, clears winprops and returns -1. + * On success, sets hints according to the window's WM_NORMAL_HINTS and + * returns a nonnegative value. + */ +extern int xwindow_get_sizehints(Window win, XSizeHints *hints); extern bool xwindow_pointer_pos(Window rel, int *px, int *py); diff -Nru notion-3+2014010901/libextl/build/rules.mk notion-3+2015061300/libextl/build/rules.mk --- notion-3+2014010901/libextl/build/rules.mk 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/libextl/build/rules.mk 2015-06-13 14:37:26.000000000 +0000 @@ -23,10 +23,8 @@ .PHONY: subdirs .PHONY: subdirs-clean .PHONY: subdirs-realclean -.PHONY: subdirs-depend .PHONY: subdirs-install .PHONY: _install -.PHONY: _depend .PHONY: _exports all: subdirs _exports $(TARGETS) @@ -35,8 +33,6 @@ realclean: subdirs-realclean _clean _realclean -depend: subdirs-depend _depend - install: subdirs-install _install @@ -48,15 +44,14 @@ EXPORTS_C = exports.c EXPORTS_H = exports.h -DEPEND_DEPENDS += $(EXPORTS_H) - TO_CLEAN := $(TO_CLEAN) $(EXPORTS_C) $(EXPORTS_H) _exports: $(EXPORTS_C) -$(EXPORTS_H): $(EXPORTS_C) - -$(EXPORTS_C): +# this funny syntax (more than one pattern-based target) is meant to tell Make +# that this rule makes BOTH of these targets. Look at the last paragraph of +# http://www.gnu.org/software/make/manual/html_node/Pattern-Intro.html +%xports.c %xports.h: $(MKEXPORTS) -module $(MAKE_EXPORTS) -o $(EXPORTS_C) -h $(EXPORTS_H) $(SOURCES) else # !MAKE_EXPORTS @@ -134,7 +129,7 @@ ###################################### _clean: - $(RM) -f $(TO_CLEAN) core $(DEPEND_FILE) $(OBJS) libextl.a + $(RM) -f $(TO_CLEAN) core *.d $(OBJS) libextl.a _realclean: $(RM) -f $(TO_REALCLEAN) $(TARGETS) @@ -160,16 +155,8 @@ # Dependencies ###################################### -ifdef SOURCES - -_depend: $(DEPEND_DEPENDS) - $(MAKE_DEPEND) - -ifeq ($(DEPEND_FILE),$(wildcard $(DEPEND_FILE))) -include $(DEPEND_FILE) -endif - -endif +CFLAGS += -MMD +-include *.d # Subdirectories ###################################### @@ -179,9 +166,6 @@ subdirs: set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i; done -subdirs-depend: - set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i depend; done - subdirs-clean: set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i clean; done diff -Nru notion-3+2014010901/libextl/libextl-mkexports.in notion-3+2015061300/libextl/libextl-mkexports.in --- notion-3+2014010901/libextl/libextl-mkexports.in 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/libextl/libextl-mkexports.in 2015-06-13 14:37:26.000000000 +0000 @@ -509,6 +509,12 @@ #include #include +/* quiet warnings for generated code */ +#ifdef __GNUC__ +#pragma GCC diagnostic ignored "-Wunused-parameter" +#pragma GCC diagnostic ignored "-Wunused-macros" +#endif + ]]) -- end blockwrite diff -Nru notion-3+2014010901/libextl/luaextl.c notion-3+2015061300/libextl/luaextl.c --- notion-3+2014010901/libextl/luaextl.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/libextl/luaextl.c 2015-06-13 14:37:26.000000000 +0000 @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -392,7 +393,6 @@ static int extl_current_file_or_dir(lua_State *st, bool dir) { - int r; lua_Debug ar; const char *s, *p; @@ -1178,7 +1178,6 @@ int extl_table_get_n(ExtlTab ref) { GetNParams params; - int oldtop; params.ref=ref; params.n=0; @@ -1508,7 +1507,6 @@ */ static bool extl_dodo_call_vararg(lua_State *st, ExtlDoCallParam *param) { - bool ret=TRUE; int n=0, m=0; if(lua_isnil(st, -1)) @@ -2055,7 +2053,7 @@ static bool extl_do_register_function(lua_State *st, RegData *data) { - ExtlExportedFnSpec *spec=data->spec, *spec2; + ExtlExportedFnSpec *spec=data->spec; #if LUA_VERSION_NUM>=502 int ind; #else @@ -2508,7 +2506,7 @@ fprintf(f, "}"); break; default: - extl_warn(TR("Unable to serialise type %s."), + extl_warn(TR("Unable to serialize type %s."), lua_typename(st, lua_type(st, -1))); } lua_pop(st, 1); @@ -2516,7 +2514,7 @@ } -static bool extl_do_serialise(lua_State *st, SerData *d) +static bool extl_do_serialize(lua_State *st, SerData *d) { if(!extl_getref(st, d->tab)) return FALSE; @@ -2526,35 +2524,55 @@ /* Tab must not contain recursive references! */ -extern bool extl_serialise(const char *file, ExtlTab tab) +extern bool extl_serialize(const char *file, ExtlTab tab) { SerData d; bool ret; + int fd; + char tmp_file[strlen(file) + 8]; + + tmp_file[0] = '\0'; + strcat(tmp_file, file); + strcat(tmp_file, ".XXXXXX"); + fd = mkstemp(tmp_file); + if(fd == -1) { + extl_warn_err_obj(tmp_file); + return FALSE; + } d.tab=tab; - d.f=fopen(file, "w"); + d.f=fdopen(fd, "w"); if(d.f==NULL){ - extl_warn_err_obj(file); + extl_warn_err_obj(tmp_file); + unlink(tmp_file); return FALSE; } fprintf(d.f, TR("-- This file has been generated by %s. Do not edit.\n"), libtu_progname()); fprintf(d.f, "return "); - ret=extl_cpcall(l_st, (ExtlCPCallFn*)extl_do_serialise, &d); + ret=extl_cpcall(l_st, (ExtlCPCallFn*)extl_do_serialize, &d); fprintf(d.f, "\n\n"); fclose(d.f); - + + if(ret && rename(tmp_file, file) != 0) { + extl_warn_err_obj(file); + ret = FALSE; + } + + if(!ret) { + unlink(tmp_file); + } + return ret; } void extl_dohook(lua_State *L, lua_Debug *ar) { enum ExtlHookEvent event; - const char *source; lua_getinfo(L, "Sn", ar); if (ar->event == LUA_HOOKCALL) diff -Nru notion-3+2014010901/libextl/luaextl.h notion-3+2015061300/libextl/luaextl.h --- notion-3+2014010901/libextl/luaextl.h 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/libextl/luaextl.h 2015-06-13 14:37:26.000000000 +0000 @@ -164,7 +164,7 @@ extern bool extl_loadfile(const char *file, ExtlFn *ret); extern bool extl_loadstring(const char *str, ExtlFn *ret); -extern bool extl_serialise(const char *file, ExtlTab tab); +extern bool extl_serialize(const char *file, ExtlTab tab); /* Register */ diff -Nru notion-3+2014010901/libextl/readconfig.c notion-3+2015061300/libextl/readconfig.c --- notion-3+2014010901/libextl/readconfig.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/libextl/readconfig.c 2015-06-13 14:37:26.000000000 +0000 @@ -103,7 +103,6 @@ bool extl_set_sessiondir(const char *session) { char *tmp; - bool ret=FALSE; if(strchr(session, '/')!=NULL){ tmp=extl_scopy(session); @@ -192,7 +191,7 @@ ExtlTryConfigFn *tryfn, void *tryfnparam) { const char *const *file=NULL; - int i, ret, ret2=EXTL_TRYCONFIG_NOTFOUND; + int ret, ret2=EXTL_TRYCONFIG_NOTFOUND; char *path, *colon, *dir; if(sessiondir!=NULL){ @@ -370,7 +369,7 @@ return tmp; } -static int warn_notfound(const char *file, void *param) +static int warn_notfound(const char *file, void *UNUSED(param)) { warn(TR("Tried: '%s'"), file); @@ -440,8 +439,6 @@ static bool ensuredir(char *f) { char *p; - int tryno=0; - bool ret=TRUE; if(access(f, F_OK)==0) return TRUE; @@ -503,7 +500,7 @@ char *fname=extl_get_savefile(basename); if(fname!=NULL){ - ret=extl_serialise(fname, tab); + ret=extl_serialize(fname, tab); free(fname); } diff -Nru notion-3+2014010901/libextl/system-autodetect.mk notion-3+2015061300/libextl/system-autodetect.mk --- notion-3+2014010901/libextl/system-autodetect.mk 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/libextl/system-autodetect.mk 2015-06-13 14:37:26.000000000 +0000 @@ -129,15 +129,6 @@ # might allow for those optimisations to be taken without any special # libc or compiler options. - -## -## make depend -## - -DEPEND_FILE=.depend -DO_MAKE_DEPEND=$(CC) -MM $(DEFINES) $(EXTRA_INCLUDES) $(INCLUDES) -MAKE_DEPEND=$(DO_MAKE_DEPEND) $(SOURCES) > $(DEPEND_FILE) - ## ## AR ## diff -Nru notion-3+2014010901/libmainloop/defer.c notion-3+2015061300/libmainloop/defer.c --- notion-3+2014010901/libmainloop/defer.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/libmainloop/defer.c 2015-06-13 14:37:26.000000000 +0000 @@ -64,14 +64,14 @@ static void free_defer(WDeferred *d) { if(d>=dbuf && d> " : " ", 3); diff -Nru notion-3+2014010901/libtu/minmax.h notion-3+2015061300/libtu/minmax.h --- notion-3+2014010901/libtu/minmax.h 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/libtu/minmax.h 2015-06-13 14:37:26.000000000 +0000 @@ -10,18 +10,20 @@ #ifndef LIBTU_MINMAX_H #define LIBTU_MINMAX_H +#if defined(__GNUC__) || defined(__clang__) -static int minof(int x, int y) -{ - return (xy ? x : y); -} - +#define MINOF(a, b) __extension__ ({ \ + __typeof(a) a_ = (a); __typeof(b) b_ = (b); \ + ((a_) < (b_) ? (a_) : (b_)); }) +#define MAXOF(a, b) __extension__ ({ \ + __typeof(a) a_ = (a); __typeof(b) b_ = (b); \ + ((a_) > (b_) ? (a_) : (b_)); }) + +#else + +#define MINOF(X,Y) ((X) < (Y) ? (X) : (Y)) +#define MAXOF(X,Y) ((X) > (Y) ? (X) : (Y)) +#endif #endif /* LIBTU_MINMAX_H */ diff -Nru notion-3+2014010901/libtu/misc.h notion-3+2015061300/libtu/misc.h --- notion-3+2014010901/libtu/misc.h 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/libtu/misc.h 2015-06-13 14:37:26.000000000 +0000 @@ -23,6 +23,13 @@ #define XOR(X, Y) (((X)==0) != ((Y)==0)) +/* UNUSED macro, for function argument */ +#ifdef __GNUC__ +# define UNUSED(x) UNUSED_ ## x __attribute__((__unused__)) +#else +# define UNUSED(x) UNUSED_ ## x +#endif + extern void* malloczero(size_t size); extern void* remalloczero(void *ptr, size_t oldsize, size_t newsize); diff -Nru notion-3+2014010901/libtu/objlist.c notion-3+2015061300/libtu/objlist.c --- notion-3+2014010901/libtu/objlist.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/libtu/objlist.c 2015-06-13 14:37:26.000000000 +0000 @@ -27,24 +27,6 @@ } -static ObjList *reuse_last(ObjList **objlist) -{ - ObjList *node=*objlist; - - if(node==NULL) - return NULL; - - node=node->prev; - - if(node!=NULL && node->watch.obj==NULL){ - UNLINK_ITEM(*objlist, node, next, prev); - return node; - } - - return NULL; -} - - static ObjList *reuse(ObjList **objlist) { ObjList *first=reuse_first(objlist); @@ -72,7 +54,7 @@ } -void watch_handler(Watch *watch, Obj *obj) +void watch_handler(Watch *watch, Obj *UNUSED(obj)) { ObjList *node=(ObjList*)watch; diff -Nru notion-3+2014010901/libtu/parser.c notion-3+2015061300/libtu/parser.c --- notion-3+2014010901/libtu/parser.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/libtu/parser.c 2015-06-13 14:37:26.000000000 +0000 @@ -664,7 +664,7 @@ } -static bool opt_include(Tokenizer *tokz, int n, Token *toks) +static bool opt_include(Tokenizer *tokz, int UNUSED(n), Token *toks) { const char *fname=TOK_STRING_VAL(toks+1); const char *lastndx=NULL; diff -Nru notion-3+2014010901/libtu/rb.c notion-3+2015061300/libtu/rb.c --- notion-3+2014010901/libtu/rb.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/libtu/rb.c 2015-06-13 14:37:26.000000000 +0000 @@ -248,7 +248,7 @@ Rb_node rb_insert_b(Rb_node n, const void *key, void *val) { - Rb_node newleft, newright, newnode, list, p; + Rb_node newleft, newright, newnode, p; if (ishead(n)) { if (n->p.root == n) { /* Tree is empty */ @@ -328,7 +328,6 @@ { int rl=0, ir=0; Rb_node x=NULL, yp=NULL; - void *tmp=NULL; ir = isroot(y); yp = y->p.parent; diff -Nru notion-3+2014010901/libtu/system-autodetect.mk notion-3+2015061300/libtu/system-autodetect.mk --- notion-3+2014010901/libtu/system-autodetect.mk 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/libtu/system-autodetect.mk 2015-06-13 14:37:26.000000000 +0000 @@ -58,14 +58,6 @@ ## -## make depend -## - -DEPEND_FILE=.depend -MAKE_DEPEND=$(CC) -M $(DEFINES) $(INCLUDES) $(EXTRA_INCLUDES) > $(DEPEND_FILE) - - -## ## AR ## diff -Nru notion-3+2014010901/LICENSE notion-3+2015061300/LICENSE --- notion-3+2014010901/LICENSE 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/LICENSE 2015-06-13 14:37:26.000000000 +0000 @@ -11,11 +11,6 @@ - A version that does not significantly differ from one of the copyright holder's releases, must be provided by default. - - Versions not based on the copyright holder's latest release (on - the corresponding "branch", such as Ion3(tm)), must within 28 days - of this release, be prominently marked as (potentially) obsolete - and unsupported. - - Significantly altered versions may be provided only if the user explicitly requests for those modifications to be applied, and is prominently notified that the software is no longer considered @@ -60,27 +55,8 @@ standard behaviour, are insignificant. Everything else is significant, unless expressly declared otherwise by the copyright holder. -Distributions: For example, suppose an aggregate distribution of software -provides an `installpkg` command for installing packages. Then the action -`installpkg ion3` (resp. `installpkg ion`) should provide the latest release -of Ion3 (resp. the latest stable release) 28 days from release date at the -latest, or prominently notify the user that the provided version is (likely -to be) obsolete and unsupported. The latest release being provided by -default, or prominently appearing in a listing, constitutes prominent -marking of earlier releases as obsolete. Specific versions (including -modified versions) may be provided if the user explicitly requests for -those, within the constraints set above. - -The intent of these terms is to curb the power that "distributions", as -the primary sources of software for many users, have in defining what -is perceived as Ion. By providing significantly modified versions and -out-dated development snapshots without prominently mentioning this fact, -they do not present the work in a light that the author can agree with, -and create a burden of dealing with (new) users seeking for support for -such versions. - ---- +- --- GNU LESSER GENERAL PUBLIC LICENSE diff -Nru notion-3+2014010901/Makefile notion-3+2015061300/Makefile --- notion-3+2014010901/Makefile 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/Makefile 2015-06-13 14:37:26.000000000 +0000 @@ -16,7 +16,7 @@ SUBDIRS = $(LIBS_SUBDIRS) $(INSTALL_SUBDIRS) -DOCS = README LICENSE ChangeLog RELNOTES +DOCS = README LICENSE CHANGELOG TO_REALCLEAN = build/ac/system-ac.mk diff -Nru notion-3+2014010901/man/notion.cs.in notion-3+2015061300/man/notion.cs.in --- notion-3+2014010901/man/notion.cs.in 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/man/notion.cs.in 2015-06-13 14:37:26.000000000 +0000 @@ -1,35 +1,35 @@ .TH NOTION 1 .SH NÃZEV Notion - správce oken systému X11 -.SH PØEHLED +.SH PŘEHLED .B notion .I "[volby]" .SH "POPIS" -Notion je dla¾dicový správce oken se zálo¾kami navr¾ený pro klávesnicové u¾ivatele. +Notion je dlaždicový správce oken se záložkami navržený pro klávesnicové uživatele. .SH "VOLBY" .TP -.B \-display poèítaè:displej.obrazovka +.B \-display poÄítaÄ:displej.obrazovka X displej, který se má spravovat .TP .B \-conffile soubor -Konfiguraèní soubor, který se má pou¾ít +KonfiguraÄní soubor, který se má použít .TP -.B \-searchdir adresáø -Adresáø, ve kterém se budou hledat konfiguraèní soubory a ostatní skripty +.B \-searchdir adresář +Adresář, ve kterém se budou hledat konfiguraÄní soubory a ostatní skripty .TP .B \-oneroot Na X serverech s více obrazovkami (ne-Xinerama) bude spravovat pouze výchozí -obrazovku (koøenové okno). (Tedy ne v¹echny, které byly zadány v parametru -\-display nebo v promìnné DISPLAY.) +obrazovku (koÅ™enové okno). (Tedy ne vÅ¡echny, které byly zadány v parametru +\-display nebo v promÄ›nné DISPLAY.) .TP .B \-session název_sezení -Nastaví název sezení. Tato volba ovlivní, kam se ulo¾í pracovní plochy -a ostatní soubory. Pokud není nastavená, pou¾ije se ~/.notion/session_name. +Nastaví název sezení. Tato volba ovlivní, kam se uloží pracovní plochy +a ostatní soubory. Pokud není nastavená, použije se ~/.notion/session_name. .TP .B \-help -Zobrazí nápovìdu k pøíkazovým parametrùm +Zobrazí nápovÄ›du k příkazovým parametrům .TP .B \-version Zobrazí verzi @@ -39,119 +39,119 @@ .SH Základní pojetí -Tato sekce pøiná¹í pøehled typù objektù, které se objevují na X displeji +Tato sekce pÅ™ináší pÅ™ehled typů objektů, které se objevují na X displeji spravovaném Notionem. To je nezbytné pro pochopení operací s objekty a pro -pochopení, proè jsou rùzná klávesová pøiøazení dostupná jen u nìkterých -objektù. Podrobnìj¹í popis nutný pro psaní vlastních pøizpùsobení naleznete +pochopení, proÄ jsou různá klávesová pÅ™iÅ™azení dostupná jen u nÄ›kterých +objektů. PodrobnÄ›jší popis nutný pro psaní vlastních pÅ™izpůsobení naleznete na webových stránkách Notionu. -Nejvy¹¹ími objekty jsou \fBobrazovky\fP, které odpovídají fyzickým -obrazovkám. Obrazovky obsahují \fBpracovní plochy\fP (co¾ je nìco jako -\fBskupiny\fP) a \fBklientská okna\fP v celoobrazovkovém re¾imu. V jeden -okam¾ik mù¾e být na obrazovce zobrazen právì jeden takový objekt. - -Pracovní plochy mohou obsahovat \fBdla¾dice\fP a odpojené/plovoucí -\fBrámy\fP. Dla¾dice obsahují \fBrámy\fP tak, aby bezezbytku vyplnily -(vydlá¾dily) celou obrazovku, a pøípadnì stavový øádek a dok. Podobnì -jako obrazovky obsahují i rámy dal¹í objekty, ale v tomto pøípadì ji¾ -jde vìt¹inou o \fBskupiny\fP klientských oken. Po vìt¹inu èasu bývají -rámy jedinou viditelnou èástí Notionu - volitelnì mohou mít kolem sebe -orámování a pro ka¾dého potomka zobrazují \fBzálo¾ku\fP. - -Dal¹í viditelnou èástí jsou \fBdotazy\fP. Nejde o nic jiného ne¾ obdélníky, -které se objeví ve spodní èásti rámù nebo obrazovek v¾dy, kdy¾ se Notion ptá -na nìjakou informaci (tøeba název okna pro pøipojení, nebo název programu, -který se má spustit). Vìt¹ina dotazù podporuje doplòování klávesou tab. +Nejvyššími objekty jsou \fBobrazovky\fP, které odpovídají fyzickým +obrazovkám. Obrazovky obsahují \fBpracovní plochy\fP (což je nÄ›co jako +\fBskupiny\fP) a \fBklientská okna\fP v celoobrazovkovém režimu. V jeden +okamžik může být na obrazovce zobrazen právÄ› jeden takový objekt. + +Pracovní plochy mohou obsahovat \fBdlaždice\fP a odpojené/plovoucí +\fBrámy\fP. Dlaždice obsahují \fBrámy\fP tak, aby bezezbytku vyplnily +(vydláždily) celou obrazovku, a případnÄ› stavový řádek a dok. PodobnÄ› +jako obrazovky obsahují i rámy další objekty, ale v tomto případÄ› již +jde vÄ›tÅ¡inou o \fBskupiny\fP klientských oken. Po vÄ›tÅ¡inu Äasu bývají +rámy jedinou viditelnou Äástí Notionu - volitelnÄ› mohou mít kolem sebe +orámování a pro každého potomka zobrazují \fBzáložku\fP. + +Další viditelnou Äástí jsou \fBdotazy\fP. Nejde o nic jiného než obdélníky, +které se objeví ve spodní Äásti rámů nebo obrazovek vždy, když se Notion ptá +na nÄ›jakou informaci (tÅ™eba název okna pro pÅ™ipojení, nebo název programu, +který se má spustit). VÄ›tÅ¡ina dotazů podporuje doplňování klávesou tab. -.SH PØIØAZENà +.SH PŘIŘAZENà -Toto jsou výchozí pøiøazení klávesových zkratek. Pøiøazení modifikátoru -(\fBMod1\fP) závisí na systému. Na PCèkách s XFree86 bude nejspí¹ navázán +Toto jsou výchozí pÅ™iÅ™azení klávesových zkratek. PÅ™iÅ™azení modifikátoru +(\fBMod1\fP) závisí na systému. Na PCÄkách s XFree86 bude nejspíš navázán na levou klávesu Alt (\fBAlt_L\fP). Na Sunech je obvykle namapován na klávesy -s diamanty (\fBMeta_L\fP, \fBMeta_R\fP). Konkrétní pøiøazení zjistíte +s diamanty (\fBMeta_L\fP, \fBMeta_R\fP). Konkrétní pÅ™iÅ™azení zjistíte programem \fIxmodmap(1)\fP. -Øetìzec v hranatých závorkách urèuje modul, jeho¾ konfiguraèní soubor -definuje toto pøiøazení. +ŘetÄ›zec v hranatých závorkách urÄuje modul, jehož konfiguraÄní soubor +definuje toto pÅ™iÅ™azení. -.SS Globální pøiøazení +.SS Globální pÅ™iÅ™azení BINDINGS:WScreen -.SS Pøiøazení pro práci s rámy a obrazovkami +.SS PÅ™iÅ™azení pro práci s rámy a obrazovkami BINDINGS:WMPlex -.SS Pøiøazení pro práci se v¹emi rámy +.SS PÅ™iÅ™azení pro práci se vÅ¡emi rámy BINDINGS:WFrame -.SS Pøiøazení pro práci s nejvy¹¹ími rámy (ne s doèasnými) a obrazovkami +.SS PÅ™iÅ™azení pro práci s nejvyššími rámy (ne s doÄasnými) a obrazovkami BINDINGS:WMPlex.toplevel -.SS Pøiøazení pro práci s nejvy¹¹ími rámy (ne s doèasnými) +.SS PÅ™iÅ™azení pro práci s nejvyššími rámy (ne s doÄasnými) BINDINGS:WFrame.toplevel -.SS Pøiøazení pro práci s plovoucími/odpojenými rámy +.SS PÅ™iÅ™azení pro práci s plovoucími/odpojenými rámy BINDINGS:WFrame.floating -.SS Pøiøazení pro dla¾dicové plochy a rámy [mod_tiling] +.SS PÅ™iÅ™azení pro dlaždicové plochy a rámy [mod_tiling] BINDINGS:WTiling .\" BINDINGS:WFrame.tiled -.SS Pøiøazení pro klientská okna +.SS PÅ™iÅ™azení pro klientská okna BINDINGS:WClientWin BINDINGS:WGroupCW -.SS Pøiøazení pro pøesun/zmìnu velikosti +.SS PÅ™iÅ™azení pro pÅ™esun/zmÄ›nu velikosti BINDINGS:WMoveresMode -.SS Pøiøazení pro informaèní zprávy a dotazy [mod_query] +.SS PÅ™iÅ™azení pro informaÄní zprávy a dotazy [mod_query] BINDINGS:WInput -.SS Pøiøazení pro úpravu dotazù [mod_query] +.SS PÅ™iÅ™azení pro úpravu dotazů [mod_query] Tyto jsou podobné jako v textovém editoru \fIjoe(1)\fP. -Vyjmutí, kopírování a vlo¾ení sice pracují mírnì konvenènìji, ale +Vyjmutí, kopírování a vložení sice pracují mírnÄ› konvenÄnÄ›ji, ale klávesy jsou shodné. BINDINGS:WEdln -.SS Pøiøazení pro menu [mod_menu] +.SS PÅ™iÅ™azení pro menu [mod_menu] BINDINGS:WMenu -.SH SOUBORY A ADRESÃØE +.SH SOUBORY A ADRESÃŘE .TP .B ETCDIR/cfg_notion.lua -Hlavní systémový konfiguraèní soubor +Hlavní systémový konfiguraÄní soubor .TP .B ETCDIR/cfg_*.lua -Ostatní konfiguraèní soubory +Ostatní konfiguraÄní soubory .TP .B ETCDIR/look_*.lua Soubory nastavující barevné schéma .TP .B ~/.notion/ -U¾ivatelské konfiguraèní soubory +Uživatelské konfiguraÄní soubory .TP .B ~/.notion/cfg_notion.lua -Hlavní u¾ivatelský konfiguraèní soubor (pøepisuje systémové nastavení) +Hlavní uživatelský konfiguraÄní soubor (pÅ™episuje systémové nastavení) .SH VIZ TAKÉ Domovská stránka Notionu \fIhttp://notion.sf.net/\fP .PP Dokument "Configuring and extending Notion with Lua" k nalezení -tamté¾. +tamtéž. .PP .I DOCDIR/ .PP @@ -161,5 +161,5 @@ Notion napsal Notion Team Ion napsal Tuomo Valkonen . -.SH PØEKLAD -Do èe¹tiny pøelo¾il Miroslav Kuøe . +.SH PŘEKLAD +Do ÄeÅ¡tiny pÅ™eložil Miroslav KuÅ™e . diff -Nru notion-3+2014010901/man/notion.in notion-3+2015061300/man/notion.in --- notion-3+2014010901/man/notion.in 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/man/notion.in 2015-06-13 14:37:26.000000000 +0000 @@ -67,11 +67,13 @@ .SH BINDINGS - -These are the default key and pointer bindings. (\fBMod1\fP) depends on your -system. On PC:s with XFree86 it is probably bound to the left Alt key -(\fBAlt_L\fP). On Suns it is usually bound to the diamond keys -(\fBMeta_L\fP, \fBMeta_R\fP). Use \fIxmodmap(1x)\fP to find out. +These are the default key and pointer bindings. Below, \fBMod4\fP refers to the +modifier used by Notion. \fBMod4\fP is the default, but this can be configured +by setting \fBMETA\fP in the configuration. The particular key that is +interpreted as \fBMod4\fP depends on your system. On Xorg-based systems it is +usually bound to the \fBwindows\fP key. The \fIxmodmap(1x)\fP tool can be used +to get/set which key codes correspond to which modifiers, and the \fIxev(1x)\fP +tool can be used to see what codes are generated by particular keys. The string in square brackets after a binding group heading below indicates the module whose configuration file defines these bindings. diff -Nru notion-3+2014010901/man/welcome.cs.head notion-3+2015061300/man/welcome.cs.head --- notion-3+2014010901/man/welcome.cs.head 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/man/welcome.cs.head 2015-06-13 14:37:26.000000000 +0000 @@ -1,24 +1,24 @@ Vítejte v Notionu! -Pokud jste je¹tì nikdy Notion nepou¾ívali, silnì vám doporuèujeme -prostudovat si pøed pokraèováním jeho manuálovou stránku. Kopii -manuálové stránky naleznete ní¾e, ale mù¾ete se k ní kdykoliv vrátit -napøíklad stiskem klávesy následované klávesou , nebo -v terminálu spu¹tìním pøíkazu 'man notion'. (Pøedpokládáme, ¾e jste -Notion nainstalovali standardním zpùsobem a ¾e systémové pøíkazy ví, kde +Pokud jste jeÅ¡tÄ› nikdy Notion nepoužívali, silnÄ› vám doporuÄujeme +prostudovat si pÅ™ed pokraÄováním jeho manuálovou stránku. Kopii +manuálové stránky naleznete níže, ale můžete se k ní kdykoliv vrátit +například stiskem klávesy následované klávesou , nebo +v terminálu spuÅ¡tÄ›ním příkazu 'man notion'. (PÅ™edpokládáme, že jste +Notion nainstalovali standardním způsobem a že systémové příkazy ví, kde naleznou manuálovou stránku.) -Jestli¾e jste pøíli¹ nedoèkaví a pøeze v¹echna doporuèení si -manuálovou stránku nepøeètete, mìli byste alespoò vìdìt, ¾e klávesou - by se mìl spustit emulátor terminálu (xterm) a ¾e do hlavního +Jestliže jste příliÅ¡ nedoÄkaví a pÅ™eze vÅ¡echna doporuÄení si +manuálovou stránku nepÅ™eÄtete, mÄ›li byste alespoň vÄ›dÄ›t, že klávesou + by se mÄ›l spustit emulátor terminálu (xterm) a že do hlavního menu se dostanete klávesou . -A¾ se budete cítit pøipraveni na psaní vlastních konfiguraèních -souborù (jednou k tomu stejnì dojde), prostudujte si konfiguraèní -manuál dostupný na webových stránkách Notionu. Pøedtím ale doporuèujeme -Notion nìjakou dobu pou¾ívat, abyste pochytili základní koncepty nutné -pro porozumìní konfiguraèních souborù. +Až se budete cítit pÅ™ipraveni na psaní vlastních konfiguraÄních +souborů (jednou k tomu stejnÄ› dojde), prostudujte si konfiguraÄní +manuál dostupný na webových stránkách Notionu. PÅ™edtím ale doporuÄujeme +Notion nÄ›jakou dobu používat, abyste pochytili základní koncepty nutné +pro porozumÄ›ní konfiguraÄních souborů. ---- Následuje manuálová stránka ---- diff -Nru notion-3+2014010901/mod_dock/dock.c notion-3+2015061300/mod_dock/dock.c --- notion-3+2014010901/mod_dock/dock.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_dock/dock.c 2015-06-13 14:37:26.000000000 +0000 @@ -66,17 +66,6 @@ /*}}}*/ -/*{{{ Macros */ - -#ifdef __GNUC__ -#define UNUSED __attribute__ ((unused)) -#else -#define UNUSED -#endif - -/*}}}*/ - - /*{{{ Variables */ #include "../version.h" @@ -626,11 +615,11 @@ int w=da->geom.w, h=da->geom.h; if(grow==DOCK_GROW_UP || grow==DOCK_GROW_DOWN){ - da->geom.w=minof(w, tile_size->w); + da->geom.w=MINOF(w, tile_size->w); da->geom.h=h; }else{ da->geom.w=w; - da->geom.h=minof(h, tile_size->h); + da->geom.h=MINOF(h, tile_size->h); } region_size_hints_correct(da->reg, &(da->geom.w), &(da->geom.h), TRUE); @@ -643,30 +632,16 @@ bool just_update_minmax) { WDockApp *dockapp=NULL, *thisdockapp=NULL, thisdockapp_copy; - WRectangle parent_geom, dock_geom, border_dock_geom; + WRectangle dock_geom, border_dock_geom; GrBorderWidths dock_bdw, dockapp_bdw; int n_dockapps=0, max_w=1, max_h=1, total_w=0, total_h=0; int pos, grow; WRectangle tile_size; - WWindow *par=REGION_PARENT(dock); /* dock_resize calls with NULL parameters. */ assert(reg!=NULL || (geomret==NULL && !(flags®ION_RQGEOM_TRYONLY))); dock_get_pos_grow(dock, &pos, &grow); - - /* Determine parent and tile geoms */ - parent_geom.x=0; - parent_geom.y=0; - if(par!=NULL){ - parent_geom.w=REGION_GEOM(par).w; - parent_geom.h=REGION_GEOM(par).h; - }else{ - /* Should not happen in normal operation. */ - parent_geom.w=1; - parent_geom.h=1; - } - dock_get_tile_size(dock, &tile_size); /* Determine dock and dockapp border widths */ @@ -1222,7 +1197,6 @@ /* Final setup */ if(floating){ - const WRectangle *pg=®ION_GEOM(screen); WMPlexAttachParams par=MPLEXATTACHPARAMS_INIT; WRegionAttachData data; @@ -1320,11 +1294,10 @@ /*{{{ Client window management setup */ -static bool dock_do_attach_final(WDock *dock, WRegion *reg, void *unused) +static bool dock_do_attach_final(WDock *dock, WRegion *reg, void *UNUSED(unused)) { WDockApp *dockapp, *before_dockapp; WRectangle geom; - WFitParams fp; bool draw_border=TRUE; int pos=INT_MAX; @@ -1393,7 +1366,6 @@ bool dock_attach(WDock *dock, WRegion *reg) { WRegionAttachData data; - WFitParams fp; data.type=REGION_ATTACH_REPARENT; data.u.reg=reg; @@ -1402,20 +1374,20 @@ } -static bool dock_handle_drop(WDock *dock, int x, int y, +static bool dock_handle_drop(WDock *dock, int UNUSED(x), int UNUSED(y), WRegion *dropped) { return dock_attach(dock, dropped); } -static WRegion *dock_ph_handler(WDock *dock, int flags, WRegionAttachData *data) +static WRegion *dock_ph_handler(WDock *dock, int UNUSED(flags), WRegionAttachData *data) { return dock_do_attach(dock, data); } -static WPHolder *dock_managed_get_pholder(WDock *dock, WRegion *mgd) +static WPHolder *dock_managed_get_pholder(WDock *dock, WRegion *UNUSED(mgd)) { return (WPHolder*)create_basicpholder((WRegion*)dock, ((WBasicPHolderHandler*) @@ -1423,8 +1395,8 @@ } -static WPHolder *dock_prepare_manage(WDock *dock, const WClientWin *cwin, - const WManageParams *param UNUSED, +static WPHolder *dock_prepare_manage(WDock *dock, const WClientWin *UNUSED(cwin), + const WManageParams *UNUSED(param), int priority) { if(!MANAGE_PRIORITY_OK(priority, MANAGE_PRIORITY_LOW)) @@ -1520,8 +1492,8 @@ if(atom__kde_net_wm_system_tray_window_for==None){ atom__kde_net_wm_system_tray_window_for=XInternAtom(ioncore_g.dpy, - "_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR", - False); + "_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR", + False); } if(XGetWindowProperty(ioncore_g.dpy, cwin->win, atom__kde_net_wm_system_tray_window_for, 0, diff -Nru notion-3+2014010901/mod_dock/Makefile notion-3+2015061300/mod_dock/Makefile --- notion-3+2014010901/mod_dock/Makefile 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_dock/Makefile 2015-06-13 14:37:26.000000000 +0000 @@ -29,6 +29,8 @@ ###################################### +dock.o: exports.h + .PHONY: tags tags: exuberant-ctags -R . $(TOPDIR) diff -Nru notion-3+2014010901/mod_menu/grabmenu.c notion-3+2015061300/mod_menu/grabmenu.c --- notion-3+2014010901/mod_menu/grabmenu.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_menu/grabmenu.c 2015-06-13 14:37:26.000000000 +0000 @@ -62,7 +62,6 @@ WMenuCreateParams fnp; WMPlexAttachParams par; WMenu *menu; - XKeyEvent *ev; uint state, kcb; bool sub; diff -Nru notion-3+2014010901/mod_menu/Makefile notion-3+2015061300/mod_menu/Makefile --- notion-3+2014010901/mod_menu/Makefile 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_menu/Makefile 2015-06-13 14:37:26.000000000 +0000 @@ -24,4 +24,6 @@ ###################################### +main.o: exports.h + _install: module_install diff -Nru notion-3+2014010901/mod_menu/menu.c notion-3+2015061300/mod_menu/menu.c --- notion-3+2014010901/mod_menu/menu.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_menu/menu.c 2015-06-13 14:37:26.000000000 +0000 @@ -80,8 +80,8 @@ geom->y+=bdw.top; geom->w-=bdw.left+bdw.right; geom->h-=bdw.top+bdw.bottom; - geom->w=maxof(0, geom->w); - geom->h=maxof(0, geom->h); + geom->w=MAXOF(0, geom->w); + geom->h=MAXOF(0, geom->h); } } @@ -191,7 +191,7 @@ GrBorderWidths bdw, e_bdw; char *str; int i; - int nath, bdh, maxew=menu->max_entry_w; + int bdh, maxew=menu->max_entry_w; grbrush_get_border_widths(menu->brush, &bdw); grbrush_get_border_widths(menu->entry_brush, &e_bdw); @@ -330,11 +330,11 @@ t=refg->y-yoff; b=refg->y+refg->h-yoff; - geom.x=maxof(l, r-geom.w); + geom.x=MAXOF(l, r-geom.w); if(geom.x+geom.w>maxg->x+maxg->w) geom.x=maxg->x; - geom.y=minof(b-geom.h, t); + geom.y=MINOF(b-geom.h, t); if(geom.yy) geom.y=maxg->y; }else{ @@ -364,8 +364,8 @@ int xdiff=REGION_GEOM(menu).x-oldfp->g.x; int ydiff=(REGION_GEOM(menu).y+REGION_GEOM(menu).h -(oldfp->g.y+oldfp->g.h)); - geom.x=maxof(0, minof(maxg->x+xdiff, maxg->x+maxg->w-geom.w)); - geom.y=maxof(0, minof(maxg->y+maxg->h+ydiff, maxg->y+maxg->h)-geom.h); + geom.x=MAXOF(0, MINOF(maxg->x+xdiff, maxg->x+maxg->w-geom.w)); + geom.y=MAXOF(0, MINOF(maxg->y+maxg->h+ydiff, maxg->y+maxg->h)-geom.h); } window_do_fitrep(&menu->win, par, &geom); @@ -394,7 +394,7 @@ { int n=menu->n_entries; int w=menu->max_entry_w; - int h=menu->entry_h*n + menu->entry_spacing*maxof(0, n-1); + int h=menu->entry_h*n + menu->entry_spacing*MAXOF(0, n-1); if(menu->brush!=NULL){ GrBorderWidths bdw; @@ -453,7 +453,6 @@ static bool menu_init_gr(WMenu *menu, WRootWin *rootwin, Window win) { GrBrush *brush, *entry_brush; - char *st; const char *style=(menu->big_mode ? "input-menu-big" : (menu->pmenu_mode @@ -590,8 +589,7 @@ const WMenuCreateParams *params) { Window win; - int i; - + menu->entries=preprocess_menu(params->tab, &(menu->n_entries)); if(menu->entries==NULL){ @@ -813,10 +811,10 @@ extl_protect(NULL); extl_call(fn, NULL, "i", &(fnp.initial)); extl_unprotect(NULL); - extl_unref_fn(fn); + extl_unref_fn(fn); }else{ extl_table_getis(menu->tab, n+1, "initial", 'i', &(fnp.initial)); - } + } } submenu=create_menu(par, &fp, &fnp); @@ -1050,9 +1048,9 @@ int a, t; if(extl_table_gets_i(tab, "scroll_amount", &a)) - scroll_amount=maxof(0, a); + scroll_amount=MAXOF(0, a); if(extl_table_gets_i(tab, "scroll_delay", &t)) - scroll_time=maxof(0, t); + scroll_time=MAXOF(0, t); } @@ -1106,11 +1104,12 @@ pg=®ION_GEOM(p); while(menu!=NULL){ - diff=maxof(diff, calc_diff(®ION_GEOM(menu), pg, d)); + int new_diff = calc_diff(®ION_GEOM(menu), pg, d); + diff=MAXOF(diff, new_diff); menu=menu->submenu; } - return minof(maxof(0, diff), scroll_amount); + return MINOF(MAXOF(0, diff), scroll_amount); } @@ -1319,7 +1318,7 @@ } -void menu_motion(WMenu *menu, XMotionEvent *ev, int dx, int dy) +void menu_motion(WMenu *menu, XMotionEvent *ev, int UNUSED(dx), int UNUSED(dy)) { menu_select_entry_at(menu, ev->x_root, ev->y_root); check_scroll(menu, ev->x_root, ev->y_root); @@ -1334,7 +1333,7 @@ } -int menu_press(WMenu *menu, XButtonEvent *ev, WRegion **reg_ret) +int menu_press(WMenu *menu, XButtonEvent *ev, WRegion **UNUSED(reg_ret)) { menu_button(menu, ev); menu=menu_head(menu); @@ -1376,7 +1375,6 @@ entry=menu->selected_entry; do{ if(menu->entries[entry].title!=NULL){ - size_t l=strlen(menu->entries[entry].title); if(libtu_strcasestr(menu->entries[entry].title, newta)){ found=TRUE; break; diff -Nru notion-3+2014010901/mod_notionflux/mod_notionflux.c notion-3+2015061300/mod_notionflux/mod_notionflux.c --- notion-3+2014010901/mod_notionflux/mod_notionflux.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_notionflux/mod_notionflux.c 2015-06-13 14:37:26.000000000 +0000 @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -40,7 +41,6 @@ static int listenfd=-1; static char *listenfile=NULL; static ExtlFn tostringfn; -static int tmp[CHUNK]; /* Without the 'or nil' kludge tostring may have no parameters. */ @@ -142,10 +142,9 @@ } -static void connection_attempt(int lfd, void *data) +static void connection_attempt(int lfd, void *UNUSED(data)) { int i, fd; - Buf *buf=NULL; struct sockaddr_un from; socklen_t fromlen=sizeof(from); @@ -209,7 +208,6 @@ static bool start_listening() { struct sockaddr_un addr; - int sock; listenfile=tmpnam(NULL); if(listenfile==NULL){ @@ -233,14 +231,14 @@ strcpy(addr.sun_path, listenfile); { - int fl=fcntl(listenfd, F_GETFD); - if(fl!=-1) - fl=fcntl(listenfd, F_SETFD, fl|FD_CLOEXEC); - if(fl==-1) - goto errwarn; + int fl=fcntl(listenfd, F_GETFD); + if(fl!=-1) + fl=fcntl(listenfd, F_SETFD, fl|FD_CLOEXEC); + if(fl==-1) + goto errwarn; } - if(bind(listenfd, (struct sockaddr*) &addr, + if(bind(listenfd, (struct sockaddr*) &addr, strlen(addr.sun_path)+sizeof(addr.sun_family))<0){ goto errwarn; } diff -Nru notion-3+2014010901/mod_notionflux/notionflux/Makefile notion-3+2015061300/mod_notionflux/notionflux/Makefile --- notion-3+2014010901/mod_notionflux/notionflux/Makefile 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_notionflux/notionflux/Makefile 2015-06-13 14:37:26.000000000 +0000 @@ -14,9 +14,9 @@ LIBS += $(X11_LIBS) -SOURCES=notionflux.c +EXTRA_EXECUTABLE = notionflux -TARGETS=notionflux +SOURCES=notionflux.c ###################################### @@ -24,9 +24,4 @@ ###################################### -notionflux: $(SOURCES) - $(CC) $< $(CFLAGS) $(LDFLAGS) -o $@ - -_install: - $(INSTALLDIR) $(DESTDIR)$(BINDIR) - $(INSTALL) -s -m $(BIN_MODE) notionflux $(DESTDIR)$(BINDIR) +_install: executable_install diff -Nru notion-3+2014010901/mod_notionflux/notionflux/notionflux.c notion-3+2015061300/mod_notionflux/notionflux/notionflux.c --- notion-3+2014010901/mod_notionflux/notionflux/notionflux.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_notionflux/notionflux/notionflux.c 2015-06-13 14:37:26.000000000 +0000 @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -186,7 +187,7 @@ if(argc>1){ if(argc!=3 || strcmp(argv[1], "-e")!=0) - die("Usage: ionflux [-e code]"); + die("Usage: notionflux [-e code]"); if(strlen(argv[2])>=MAX_DATA) die("Too much data."); diff -Nru notion-3+2014010901/mod_query/complete.c notion-3+2015061300/mod_query/complete.c --- notion-3+2014010901/mod_query/complete.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_query/complete.c 2015-06-13 14:37:26.000000000 +0000 @@ -121,7 +121,6 @@ bool nosort) { int len; - int i; if(ncomp==0){ return 0; diff -Nru notion-3+2014010901/mod_query/edln.c notion-3+2015061300/mod_query/edln.c --- notion-3+2014010901/mod_query/edln.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_query/edln.c 2015-06-13 14:37:26.000000000 +0000 @@ -292,7 +292,7 @@ void edln_back(Edln *edln) { - int p=edln->point; + /*int p=edln->point;*/ do_edln_back(edln); /*if(edln->point!=p)*/ UPDATE_MOVED(edln->point); @@ -613,7 +613,7 @@ edln->histent=e; edln_setstr(edln, str); edln->point=(match - ? minof(edln->point, edln->psize) + ? MINOF(edln->point, edln->psize) : edln->psize); edln->mark=-1; edln->modified=FALSE; diff -Nru notion-3+2014010901/mod_query/listing.c notion-3+2015061300/mod_query/listing.c --- notion-3+2014010901/mod_query/listing.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_query/listing.c 2015-06-13 14:37:26.000000000 +0000 @@ -36,7 +36,7 @@ } -static int getbeg(GrBrush *brush, int maxw, char *str, int l, int *wret) +static int getbeg(GrBrush *brush, int maxw, char *str, int *wret) { int n=0, nprev=0, w; GrFontExtents fnte; @@ -98,7 +98,7 @@ w=grbrush_get_text_width(brush, str, l); if(w>rmaxw){ - l2=getbeg(brush, rmaxw-wrapw, str, l, &w); + l2=getbeg(brush, rmaxw-wrapw, str, &w); if(l2<=0) l2=1; } @@ -124,7 +124,6 @@ { int wrapw=grbrush_get_text_width(brush, "\\", 1); int ciw=grbrush_get_text_width(brush, CONT_INDENT, CONT_INDENT_LEN); - int i, s; iinf->n_parts=0; iinf->len=strlen(str); @@ -188,7 +187,6 @@ static bool one_row_up(WListing *l, int *ip, int *rp) { int i=*ip, r=*rp; - int ir=ITEMROWS(l, i); if(r>0){ (*rp)--; @@ -305,8 +303,6 @@ void deinit_listing(WListing *l) { - int i; - if(l->strs==NULL) return; @@ -393,14 +389,6 @@ } -static int prevsel=-1; - -static bool filteridx_sel(WListing *l, int i) -{ - return (i==prevsel || i==l->selected_str); -} - - void draw_listing(GrBrush *brush, const WRectangle *geom, WListing *l, int mode, GrAttr selattr) { diff -Nru notion-3+2014010901/mod_query/listing.h notion-3+2015061300/mod_query/listing.h --- notion-3+2014010901/mod_query/listing.h 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_query/listing.h 2015-06-13 14:37:26.000000000 +0000 @@ -37,7 +37,7 @@ #define LISTING_DRAW_COMPLETE 1 #define LISTING_DRAW_ALL 0 -#define LISTING_DRAW_SELECTED(X) minof(-1, -(X)-2) +#define LISTING_DRAW_SELECTED(X) MINOF(-1, -(X)-2) #define LISTING_DRAW_GET_SELECTED(X) (-(X)-2) diff -Nru notion-3+2014010901/mod_query/main.c notion-3+2015061300/mod_query/main.c --- notion-3+2014010901/mod_query/main.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_query/main.c 2015-06-13 14:37:26.000000000 +0000 @@ -53,7 +53,7 @@ ModQueryConfig mod_query_config={ 250, TRUE, - FALSE, + TRUE, TRUE }; @@ -68,9 +68,9 @@ * \var{autoshowcompl_delay} & (integer) auto-show-completions delay * in milliseconds (default: 250). \\ * \var{caseicompl} & (boolean) Turn some completions case-insensitive - * (default: false). \\ + * (default: true). \\ * \var{substrcompl} & (boolean) Complete on sub-strings in some cases - * (default: ftrue). \\ + * (default: true). \\ * \end{tabularx} */ EXTL_EXPORT @@ -84,7 +84,7 @@ if(extl_table_gets_i(tab, "autoshowcompl_delay", &c->autoshowcompl_delay)){ - c->autoshowcompl_delay=maxof(c->autoshowcompl_delay, 0); + c->autoshowcompl_delay=MAXOF(c->autoshowcompl_delay, 0); } } diff -Nru notion-3+2014010901/mod_query/Makefile notion-3+2015061300/mod_query/Makefile --- notion-3+2014010901/mod_query/Makefile 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_query/Makefile 2015-06-13 14:37:26.000000000 +0000 @@ -26,4 +26,6 @@ ###################################### +main.o: exports.h + _install: module_install lc_install diff -Nru notion-3+2014010901/mod_query/query.c notion-3+2015061300/mod_query/query.c --- notion-3+2014010901/mod_query/query.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_query/query.c 2015-06-13 14:37:26.000000000 +0000 @@ -32,7 +32,6 @@ ExtlFn handler, ExtlFn completor, ExtlFn cycle, ExtlFn bcycle) { - WRectangle geom; WEdlnCreateParams fnp; WMPlexAttachParams par; WEdln *wedln; diff -Nru notion-3+2014010901/mod_query/wedln.c notion-3+2015061300/mod_query/wedln.c --- notion-3+2014010901/mod_query/wedln.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_query/wedln.c 2015-06-13 14:37:26.000000000 +0000 @@ -48,9 +48,8 @@ } -static int wedln_draw_strsect(WEdln *wedln, const WRectangle *geom, - int x, int y, const char *str, int len, - GrAttr a) +static int wedln_draw_strsect(WEdln *wedln, int x, int y, const char *str, + int len, GrAttr a) { if(len==0) return 0; @@ -77,7 +76,7 @@ #define DSTRSECT(LEN, A) \ if(LEN>0){ \ - tx+=wedln_draw_strsect(wedln, geom, geom->x+tx, ty, \ + tx+=wedln_draw_strsect(wedln, geom->x+tx, ty, \ str, LEN, GR_ATTR(A)); \ str+=LEN; len-=LEN; \ } @@ -121,7 +120,7 @@ DSTRSECT(cursor, normal); } if(len==0){ - tx+=wedln_draw_strsect(wedln, geom, geom->x+tx, ty, + tx+=wedln_draw_strsect(wedln, geom->x+tx, ty, " ", 1, GR_ATTR(cursor)); }else{ ll=str_nextoff(str, 0); @@ -179,7 +178,6 @@ int vstart=wedln->vstart; int point=wedln->edln.point; int len=wedln->edln.psize; - int mark=wedln->edln.mark; const char *str=wedln->edln.p; bool ret; @@ -284,8 +282,8 @@ geom->w-=bdw.left+bdw.right; geom->y+=bdw.top; geom->h-=bdw.top+bdw.bottom; - geom->w=maxof(0, geom->w); - geom->h=maxof(0, geom->h); + geom->w=MAXOF(0, geom->w); + geom->h=MAXOF(0, geom->h); } @@ -293,7 +291,7 @@ { get_inner_geom(wedln, mode, geom); geom->x+=wedln->prompt_w; - geom->w=maxof(0, geom->w - wedln->prompt_w - wedln->info_w); + geom->w=MAXOF(0, geom->w - wedln->prompt_w - wedln->info_w); } @@ -471,7 +469,6 @@ static void wedln_set_info(WEdln *wedln, const char *info) { WRectangle tageom; - char *p; if(wedln->info!=NULL){ free(wedln->info); @@ -663,7 +660,7 @@ static int wedln_alloc_compl_id(WEdln *wedln) { int id=wedln->compl_waiting_id+1; - wedln->compl_waiting_id=maxof(0, wedln->compl_waiting_id+1); + wedln->compl_waiting_id=MAXOF(0, wedln->compl_waiting_id+1); return id; } @@ -713,7 +710,7 @@ } -static void timed_complete(WTimer *tmr, Obj *obj) +static void timed_complete(WTimer *UNUSED(tmr), Obj *obj) { WEdln *wedln=(WEdln*)obj; @@ -873,7 +870,7 @@ from=wedln->vstart; } - from=maxof(0, from-wedln->vstart); + from=MAXOF(0, from-wedln->vstart); wedln_draw_str_box(wedln, &geom, wedln->vstart, wedln->edln.p, from, wedln->edln.point, wedln->edln.mark); @@ -1071,7 +1068,7 @@ } -static const char *wedln_style(WEdln *wedln) +static const char *wedln_style(WEdln *UNUSED(wedln)) { return "input-edln"; } diff -Nru notion-3+2014010901/mod_query/wmessage.c notion-3+2015061300/mod_query/wmessage.c --- notion-3+2014010901/mod_query/wmessage.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_query/wmessage.c 2015-06-13 14:37:26.000000000 +0000 @@ -21,7 +21,6 @@ #define WMSG_BRUSH(WMSG) ((WMSG)->input.brush) -#define WMSG_WIN(WMSG) ((WMSG)->input.win.win) /*{{{ Sizecalc */ @@ -235,7 +234,7 @@ } -static const char *wmsg_style(WMessage *wmsg) +static const char *wmsg_style(WMessage *UNUSED(wmsg)) { return "input-message"; } diff -Nru notion-3+2014010901/mod_sm/Makefile notion-3+2015061300/mod_sm/Makefile --- notion-3+2014010901/mod_sm/Makefile 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_sm/Makefile 2015-06-13 14:37:26.000000000 +0000 @@ -24,4 +24,6 @@ ###################################### +sm.o: exports.h + _install: module_install diff -Nru notion-3+2014010901/mod_sm/sm.c notion-3+2015061300/mod_sm/sm.c --- notion-3+2014010901/mod_sm/sm.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_sm/sm.c 2015-06-13 14:37:26.000000000 +0000 @@ -44,7 +44,6 @@ static bool sm_do_manage(WClientWin *cwin, const WManageParams *param) { - int transient_mode=TRANSIENT_MODE_OFF; WPHolder *ph; bool ret; diff -Nru notion-3+2014010901/mod_sm/sm_matchwin.c notion-3+2015061300/mod_sm/sm_matchwin.c --- notion-3+2014010901/mod_sm/sm_matchwin.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_sm/sm_matchwin.c 2015-06-13 14:37:26.000000000 +0000 @@ -60,9 +60,9 @@ atom=XInternAtom(ioncore_g.dpy, "WM_CLIENT_LEADER", False); if(XGetWindowProperty(ioncore_g.dpy, window, atom, - 0L, 1L, False, AnyPropertyType, &actual_type, - &actual_format, &nitems, &bytes_after, - &prop) == Success) + 0L, 1L, False, AnyPropertyType, &actual_type, + &actual_format, &nitems, &bytes_after, + &prop) == Success) { if(actual_type == XA_WINDOW && actual_format == 32 && nitems == 1 && bytes_after == 0) @@ -80,7 +80,7 @@ Atom atom; if((client_leader=mod_sm_get_client_leader(window))!=0){ - atom=XInternAtom(ioncore_g.dpy, "SM_CLIENT_ID", False); + atom=XInternAtom(ioncore_g.dpy, "SM_CLIENT_ID", False); if (XGetTextProperty (ioncore_g.dpy, client_leader, &tp, atom)) if (tp.encoding == XA_STRING && tp.format == 8 && tp.nitems != 0) client_id = (char *) tp.value; @@ -130,7 +130,7 @@ if(match->wm_name) free(match->wm_name); if(match->wm_cmd) - free(match->wm_cmd); + free(match->wm_cmd); free(match); } @@ -216,7 +216,7 @@ } } if(win_match>2) - break; + break; } XFree(client_id); XFree(window_role); diff -Nru notion-3+2014010901/mod_sm/sm_session.c notion-3+2015061300/mod_sm/sm_session.c --- notion-3+2014010901/mod_sm/sm_session.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_sm/sm_session.c 2015-06-13 14:37:26.000000000 +0000 @@ -64,7 +64,7 @@ unpacks the message and sends it to the client via registered callbacks. */ -static void sm_process_messages(int fd, void *data) +static void sm_process_messages(int UNUSED(fd), void *UNUSED(data)) { Bool ret; @@ -77,9 +77,9 @@ opened or closed. */ static void sm_ice_watch_fd(IceConn conn, - IcePointer client_data, + IcePointer UNUSED(client_data), Bool opening, - IcePointer *watch_data) + IcePointer *UNUSED(watch_data)) { if(opening){ if(sm_fd!=-1){ /* shouldn't happen */ @@ -220,7 +220,7 @@ saving state. This is requested in the save yourself callback by clients like this one that manages other clients. */ -static void sm_save_yourself_phase2(SmcConn conn, SmPointer client_data) +static void sm_save_yourself_phase2(SmcConn conn, SmPointer UNUSED(client_data)) { Bool success; @@ -236,12 +236,12 @@ /* Callback. Called when the client recieves a save yourself message from the sm. */ -static void sm_save_yourself(SmcConn conn, - SmPointer client_data, - int save_type, - Bool shutdown, - int interact_style, - Bool fast) +static void sm_save_yourself(SmcConn UNUSED(conn), + SmPointer UNUSED(client_data), + int UNUSED(save_type), + Bool UNUSED(shutdown), + int UNUSED(interact_style), + Bool UNUSED(fast)) { if(!SmcRequestSaveYourselfPhase2(sm_conn, sm_save_yourself_phase2, NULL)){ warn(TR("Failed to request save-yourself-phase2 from " @@ -255,7 +255,7 @@ /* Response to the shutdown cancelled message */ -static void sm_shutdown_cancelled(SmcConn conn, SmPointer client_data) +static void sm_shutdown_cancelled(SmcConn conn, SmPointer UNUSED(client_data)) { save_complete_fn=NULL; if(!sent_save_done){ @@ -266,7 +266,7 @@ /* Callback */ -static void sm_save_complete(SmcConn conn, SmPointer client_data) +static void sm_save_complete(SmcConn UNUSED(conn), SmPointer UNUSED(client_data)) { if(save_complete_fn){ save_complete_fn(); @@ -276,7 +276,7 @@ /* Callback */ -static void sm_die(SmcConn conn, SmPointer client_data) +static void sm_die(SmcConn conn, SmPointer UNUSED(client_data)) { assert(conn==sm_conn); ioncore_do_exit(); diff -Nru notion-3+2014010901/mod_sp/main.c notion-3+2015061300/mod_sp/main.c --- notion-3+2014010901/mod_sp/main.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_sp/main.c 2015-06-13 14:37:26.000000000 +0000 @@ -53,14 +53,14 @@ static WRegion *create_frame_scratchpad(WWindow *parent, const WFitParams *fp, - void *unused) + void *UNUSED(unused)) { return (WRegion*)create_frame(parent, fp, FRAME_MODE_UNKNOWN, "Scratchpad Frame"); } static WRegion *create_scratchws(WWindow *parent, const WFitParams *fp, - void *unused) + void *UNUSED(unused)) { WRegion *reg; WRegionAttachData data; @@ -82,8 +82,8 @@ par.szplcy=SIZEPOLICY_FREE_GLUE; par.geom_set=TRUE; - par.geom.w=minof(fp->g.w, CF_SCRATCHPAD_DEFAULT_W); - par.geom.h=minof(fp->g.h, CF_SCRATCHPAD_DEFAULT_H); + par.geom.w=MINOF(fp->g.w, CF_SCRATCHPAD_DEFAULT_W); + par.geom.h=MINOF(fp->g.h, CF_SCRATCHPAD_DEFAULT_H); par.geom.x=(fp->g.w-par.geom.w)/2; par.geom.y=(fp->g.h-par.geom.h)/2; diff -Nru notion-3+2014010901/mod_sp/Makefile notion-3+2015061300/mod_sp/Makefile --- notion-3+2014010901/mod_sp/Makefile 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_sp/Makefile 2015-06-13 14:37:26.000000000 +0000 @@ -24,4 +24,6 @@ ###################################### +main.o: exports.h + _install: module_install etc_install diff -Nru notion-3+2014010901/mod_statusbar/draw.c notion-3+2015061300/mod_statusbar/draw.c --- notion-3+2014010901/mod_statusbar/draw.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_statusbar/draw.c 2015-06-13 14:37:26.000000000 +0000 @@ -56,7 +56,6 @@ GrBorderWidths bdw; WMPlex *mgr=NULL; bool right_align=FALSE; - int minx, maxx; int nleft=0, nright=0; if(sb->brush==NULL || sb->elems==NULL) @@ -105,8 +104,7 @@ static void draw_elems(GrBrush *brush, WRectangle *g, int ty, - WSBElem *elems, int nelems, bool needfill, - bool complete) + WSBElem *elems, int nelems, bool needfill) { int prevx=g->x; int maxx=g->x+g->w; @@ -150,7 +148,6 @@ WRectangle g; GrBorderWidths bdw; GrFontExtents fnte; - Window win=sb->wwin.win; int ty; if(sb->brush==NULL) @@ -178,7 +175,7 @@ ty=(g.y+fnte.baseline+(g.h-fnte.max_height)/2); - draw_elems(sb->brush, &g, ty, sb->elems, sb->nelems, TRUE, complete); + draw_elems(sb->brush, &g, ty, sb->elems, sb->nelems, TRUE); grbrush_end(sb->brush); } diff -Nru notion-3+2014010901/mod_statusbar/Makefile notion-3+2015061300/mod_statusbar/Makefile --- notion-3+2014010901/mod_statusbar/Makefile 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_statusbar/Makefile 2015-06-13 14:37:26.000000000 +0000 @@ -24,5 +24,6 @@ ###################################### -_install: module_install +main.o: exports.h +_install: module_install diff -Nru notion-3+2014010901/mod_statusbar/statusbar.c notion-3+2015061300/mod_statusbar/statusbar.c --- notion-3+2014010901/mod_statusbar/statusbar.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_statusbar/statusbar.c 2015-06-13 14:37:26.000000000 +0000 @@ -34,9 +34,7 @@ static void statusbar_set_elems(WStatusBar *sb, ExtlTab t); static void statusbar_free_elems(WStatusBar *sb); -static void statusbar_update_natural_size(WStatusBar *p); static void statusbar_arrange_systray(WStatusBar *p); -static int statusbar_systray_x(WStatusBar *p); static void statusbar_rearrange(WStatusBar *sb, bool rs); static void do_calc_systray_w(WStatusBar *p, WSBElem *el); static void statusbar_calc_systray_w(WStatusBar *p); @@ -70,7 +68,7 @@ return FALSE; } - window_select_input(&(p->wwin), IONCORE_EVENTMASK_NORMAL); + window_select_input(&(p->wwin), IONCORE_EVENTMASK_CWINMGR); region_register((WRegion*)p); @@ -172,7 +170,7 @@ extl_table_gets_s(tt, "tmpl", &(el[i].tmpl)); extl_table_gets_i(tt, "align", &(el[i].align)); extl_table_gets_i(tt, "zeropad", &(el[i].zeropad)); - el[i].zeropad=maxof(el[i].zeropad, 0); + el[i].zeropad=MAXOF(el[i].zeropad, 0); }else if(el[i].type==WSBELEM_SYSTRAY){ const char *tmp; @@ -285,13 +283,14 @@ } if(el->type==WSBELEM_METER){ + int str_w = 0; + str=(el->text!=NULL ? el->text : STATUSBAR_NX_STR); el->text_w=grbrush_get_text_width(brush, str, strlen(str)); str=el->tmpl; - el->max_w=maxof((str!=NULL - ? grbrush_get_text_width(brush, str, strlen(str)) - : 0), - el->text_w); + + str_w=str!=NULL ? grbrush_get_text_width(brush, str, strlen(str)) : 0; + el->max_w=MAXOF(str_w, el->text_w); }else{ str=el->text; el->text_w=(str!=NULL @@ -333,11 +332,11 @@ totw+=p->elems[i].max_w; FOR_ALL_ON_PTRLIST(WRegion*, reg, p->traywins, tmp){ - stmh=maxof(stmh, REGION_GEOM(reg).h); + stmh=MAXOF(stmh, REGION_GEOM(reg).h); } p->natural_w=bdw.left+totw+bdw.right; - p->natural_h=maxof(stmh, fnte.max_height)+bdw.top+bdw.bottom; + p->natural_h=MAXOF(stmh, fnte.max_height)+bdw.top+bdw.bottom; } @@ -429,7 +428,7 @@ w=w+REGION_GEOM(reg).w+padding; } - el->text_w=maxof(0, w); + el->text_w=MAXOF(0, w); el->max_w=el->text_w; /* for now */ } @@ -489,7 +488,7 @@ static WRegion *statusbar_do_attach_final(WStatusBar *sb, WRegion *reg, - void *unused) + void *UNUSED(unused)) { WFitParams fp; WSBElem *el; @@ -538,7 +537,7 @@ } -static WRegion *statusbar_attach_ph(WStatusBar *sb, int flags, +static WRegion *statusbar_attach_ph(WStatusBar *sb, int UNUSED(flags), WRegionAttachData *data) { return statusbar_do_attach(sb, data); @@ -546,8 +545,8 @@ static WPHolder *statusbar_prepare_manage(WStatusBar *sb, - const WClientWin *cwin, - const WManageParams *param, + const WClientWin *UNUSED(cwin), + const WManageParams *UNUSED(param), int priority) { if(!MANAGE_PRIORITY_OK(priority, MANAGE_PRIORITY_LOW)) @@ -651,7 +650,7 @@ WPHolder *statusbar_prepare_manage_transient(WStatusBar *sb, const WClientWin *cwin, const WManageParams *param, - int unused) + int UNUSED(unused)) { WRegion *mgr=REGION_MANAGER(sb); @@ -770,7 +769,7 @@ int i; for(i=0; inelems; i++) - sb->elems[i].stretch=maxof(0, sb->elems[i].stretch); + sb->elems[i].stretch=MAXOF(0, sb->elems[i].stretch); } @@ -779,7 +778,6 @@ int i, j, k; int diff; WSBElem *el, *lel, *rel; - const char *str; for(i=0; inelems; i++){ el=&(sb->elems[i]); @@ -977,7 +975,7 @@ /*{{{ Misc */ -int statusbar_orientation(WStatusBar *sb) +int statusbar_orientation(WStatusBar *UNUSED(sb)) { return REGION_ORIENTATION_HORIZONTAL; } diff -Nru notion-3+2014010901/mod_statusbar/statusd-launch.c notion-3+2015061300/mod_statusbar/statusd-launch.c --- notion-3+2014010901/mod_statusbar/statusd-launch.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_statusbar/statusd-launch.c 2015-06-13 14:37:26.000000000 +0000 @@ -37,7 +37,6 @@ { char buf[BL]; int n; - bool fnret; *eagain=FALSE; @@ -64,7 +63,7 @@ { fd_set rfds; struct timeval tv, endtime, now; - int nfds=maxof(outfd, errfd); + int nfds=MAXOF(outfd, errfd); int retval; bool dummy, doneseen, eagain=FALSE; @@ -190,8 +189,8 @@ return -1; } - // Send SIGHUP to the specified statusd process to indicate - // that we're done. + /* Send SIGHUP to the specified statusd process to indicate + * that we're done. */ kill( (pid_t)pid, SIGHUP); return 0; diff -Nru notion-3+2014010901/mod_tiling/Makefile notion-3+2015061300/mod_tiling/Makefile --- notion-3+2014010901/mod_tiling/Makefile 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_tiling/Makefile 2015-06-13 14:37:26.000000000 +0000 @@ -25,7 +25,6 @@ ###################################### -_install: module_install - - +main.o: exports.h +_install: module_install diff -Nru notion-3+2014010901/mod_tiling/split.c notion-3+2015061300/mod_tiling/split.c --- notion-3+2014010901/mod_tiling/split.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_tiling/split.c 2015-06-13 14:37:26.000000000 +0000 @@ -56,19 +56,6 @@ } -static int reg_calcresize(WRegion *reg, int dir, int nsize) -{ - int tmp; - - if(dir==SPLIT_HORIZONTAL) - tmp=region_min_w(reg); - else - tmp=region_min_h(reg); - - return (nsizereg, &hints); - snode->min_w=maxof(1, hints.min_set ? hints.min_width : 1); + snode->min_w=MAXOF(1, hints.min_set ? hints.min_width : 1); snode->max_w=INT_MAX; snode->unused_w=-1; - snode->min_h=maxof(1, hints.min_set ? hints.min_height : 1); + snode->min_h=MAXOF(1, hints.min_set ? hints.min_height : 1); snode->max_h=INT_MAX; snode->unused_h=-1; } -static void splitst_update_bounds(WSplitST *node, bool rec) +static void splitst_update_bounds(WSplitST *node, bool UNUSED(rec)) { WSplit *snode=(WSplit*)node; @@ -349,10 +325,10 @@ }else{ WSizeHints hints; region_size_hints(node->regnode.reg, &hints); - snode->min_w=maxof(1, hints.min_set ? hints.min_width : 1); - snode->max_w=maxof(snode->min_w, hints.min_width); - snode->min_h=maxof(1, hints.min_set ? hints.min_height : 1); - snode->max_h=maxof(snode->min_h, hints.min_height); + snode->min_w=MAXOF(1, hints.min_set ? hints.min_width : 1); + snode->max_w=MAXOF(snode->min_w, hints.min_width); + snode->min_h=MAXOF(1, hints.min_set ? hints.min_height : 1); + snode->max_h=MAXOF(snode->min_h, hints.min_height); } snode->unused_w=-1; @@ -387,16 +363,16 @@ node->max_w=infadd(tl->max_w, br->max_w); node->min_w=infadd(tl->min_w, br->min_w); node->unused_w=unusedadd(tl->unused_w, br->unused_w); - node->min_h=maxof(tl->min_h, br->min_h); - node->max_h=maxof(minof(tl->max_h, br->max_h), node->min_h); - node->unused_h=minof(tl->unused_h, br->unused_h); + node->min_h=MAXOF(tl->min_h, br->min_h); + node->max_h=MAXOF(MINOF(tl->max_h, br->max_h), node->min_h); + node->unused_h=MINOF(tl->unused_h, br->unused_h); }else{ node->max_h=infadd(tl->max_h, br->max_h); node->min_h=infadd(tl->min_h, br->min_h); node->unused_h=unusedadd(tl->unused_h, br->unused_h); - node->min_w=maxof(tl->min_w, br->min_w); - node->max_w=maxof(minof(tl->max_w, br->max_w), node->min_w); - node->unused_w=minof(tl->unused_w, br->unused_w); + node->min_w=MAXOF(tl->min_w, br->min_w); + node->max_w=MAXOF(MINOF(tl->max_w, br->max_w), node->min_w); + node->unused_w=MINOF(tl->unused_w, br->unused_w); } } @@ -409,8 +385,6 @@ void splitsplit_update_geom_from_children(WSplitSplit *node) { - WSplit *split=(WSplit*)node; - if(node->dir==SPLIT_VERTICAL){ ((WSplit*)node)->geom.h=node->tl->geom.h+node->br->geom.h; ((WSplit*)node)->geom.y=node->tl->geom.y; @@ -549,16 +523,16 @@ static void split_do_resize_default(WSplit *node, const WRectangle *ng, - WPrimn hprimn, WPrimn vprimn, - bool transpose) + WPrimn UNUSED(hprimn), WPrimn UNUSED(vprimn), + bool UNUSED(transpose)) { node->geom=*ng; } static void splitregion_do_resize(WSplitRegion *node, const WRectangle *ng, - WPrimn hprimn, WPrimn vprimn, - bool transpose) + WPrimn UNUSED(hprimn), WPrimn UNUSED(vprimn), + bool UNUSED(transpose)) { assert(node->reg!=NULL); region_fit(node->reg, ng, REGION_FIT_EXACT); @@ -628,12 +602,12 @@ { if(dir==SPLIT_VERTICAL){ *min=node->min_h; - *max=maxof(*min, node->max_h); - *unused=minof(node->unused_h, node->geom.h); + *max=MAXOF(*min, node->max_h); + *unused=MINOF(node->unused_h, node->geom.h); }else{ *min=node->min_w; - *max=maxof(*min, node->max_w); - *unused=minof(node->unused_w, node->geom.w); + *max=MAXOF(*min, node->max_w); + *unused=MINOF(node->unused_w, node->geom.w); } } @@ -663,8 +637,8 @@ get_minmaxunused(tl, dir, &tlmin, &tlmax, &tlunused); get_minmaxunused(br, dir, &brmin, &brmax, &brunused); - tlused=maxof(0, tls-maxof(0, tlunused)); - brused=maxof(0, brs-maxof(0, brunused)); + tlused=MAXOF(0, tls-MAXOF(0, tlunused)); + brused=MAXOF(0, brs-MAXOF(0, brunused)); /* tlmin, brmin >= 1 => (tls>=tlmin, brs>=brmin => sz>0) */ if(sz>2){ @@ -932,7 +906,6 @@ WSplitST *st; WRectangle stg; WRectangle rstg; - WRectangle ngr; int ori; if(!OBJ_IS(ws, WTiling) || ((WTiling*)ws)->stdispnode==NULL) @@ -1019,7 +992,7 @@ return ret; } -bool splitst_do_restore(WSplit *node, int dir) +bool splitst_do_restore(WSplit *UNUSED(node), int UNUSED(dir)) { return FALSE; } @@ -1112,7 +1085,7 @@ frame->flags&=~FRAME_KEEP_FLAGS; } -void splitst_do_maxhelper(WSplit *node, int dir, int action) +void splitst_do_maxhelper(WSplit *UNUSED(node), int UNUSED(dir), int UNUSED(action)) { return; } @@ -1173,7 +1146,7 @@ return ret; } -bool splitst_do_verify(WSplit *node, int dir) +bool splitst_do_verify(WSplit *UNUSED(node), int UNUSED(dir)) { return TRUE; } @@ -1219,15 +1192,15 @@ static void flexibility(WSplit *node, int dir, int *shrink, int *stretch) { if(dir==SPLIT_VERTICAL){ - *shrink=maxof(0, node->geom.h-node->min_h); + *shrink=MAXOF(0, node->geom.h-node->min_h); if(OBJ_IS(node, WSplitST)) - *stretch=maxof(0, node->max_h-node->geom.h); + *stretch=MAXOF(0, node->max_h-node->geom.h); else *stretch=INT_MAX; }else{ - *shrink=maxof(0, node->geom.w-node->min_w); + *shrink=MAXOF(0, node->geom.w-node->min_w); if(OBJ_IS(node, WSplitST)) - *stretch=maxof(0, node->max_w-node->geom.w); + *stretch=MAXOF(0, node->max_w-node->geom.w); else *stretch=INT_MAX; } @@ -1241,9 +1214,9 @@ flexibility(other, dir, &shrink, &stretch); if(rs>0) - *amount=minof(rs, shrink); + *amount=MINOF(rs, shrink); else if(rs<0) - *amount=-minof(-rs, stretch); + *amount=-MINOF(-rs, stretch); else *amount=0; } @@ -1300,8 +1273,8 @@ ng=pg; if(p->dir==SPLIT_VERTICAL){ - ng.h=maxof(0, node->geom.h+amount); - og.h=maxof(0, other->geom.h-amount); + ng.h=MAXOF(0, node->geom.h+amount); + og.h=MAXOF(0, other->geom.h-amount); adjust_sizes(&(ng.h), &(og.h), pg.h, ng.h+og.h, node->min_h, other->min_h, node->max_h, other->max_h, PRIMN_TL /* node is passed as tl param */); @@ -1311,8 +1284,8 @@ ng.y=pg.y+pg.h-ng.h; vprimn=thisnode; }else{ - ng.w=maxof(0, node->geom.w+amount); - og.w=maxof(0, other->geom.w-amount); + ng.w=MAXOF(0, node->geom.w+amount); + og.w=MAXOF(0, other->geom.w-amount); adjust_sizes(&(ng.w), &(og.w), pg.w, ng.w+og.w, node->min_w, other->min_w, node->max_w, other->max_w, PRIMN_TL /* node is passed as tl param */); @@ -1494,16 +1467,12 @@ if(extl_table_gets_i(g, "h", &(geom.h))) flags&=~REGION_RQGEOM_WEAK_H; - geom.w=maxof(1, geom.w); - geom.h=maxof(1, geom.h); + geom.w=MAXOF(1, geom.w); + geom.h=MAXOF(1, geom.h); splittree_rqgeom(node, flags, &geom, &ogeom); return extl_table_from_rectangle(&ogeom); - -err: - warn(TR("Invalid node.")); - return extl_table_none(); } @@ -1555,8 +1524,8 @@ int minsize, WRegionSimpleCreateFn *fn, WWindow *parent) { - int objmin, objmax; - int s, sn, so, pos; + int objmin; + int s, sn, so; WSplitSplit *nsplit; WSplitRegion *nnode; WSplitInner *psplit; @@ -1587,8 +1556,8 @@ objmin=(dir==SPLIT_VERTICAL ? node->min_h : node->min_w); s=split_size(node, dir); - sn=maxof(minsize, s/2); - so=maxof(objmin, s-sn); + sn=MAXOF(minsize, s/2); + so=MAXOF(objmin, s-sn); if(sn+so!=s){ int rs; @@ -1609,7 +1578,7 @@ sn=minsize; so=rs-sn; }else{ - so=maxof(rs/2, objmin); + so=MAXOF(rs/2, objmin); sn=rs-so; } }else{ @@ -1789,7 +1758,7 @@ static WSplit *split_current_todir_default(WSplit *node, - WPrimn hprimn, WPrimn vprimn, + WPrimn UNUSED(hprimn), WPrimn UNUSED(vprimn), WSplitFilter *filter) { if(filter==NULL) @@ -1896,7 +1865,7 @@ } -void splitinner_mark_current_default(WSplitInner *split, WSplit *child) +void splitinner_mark_current_default(WSplitInner *split, WSplit *UNUSED(child)) { if(((WSplit*)split)->parent!=NULL) splitinner_mark_current(((WSplit*)split)->parent, (WSplit*)split); diff -Nru notion-3+2014010901/mod_tiling/splitfloat.c notion-3+2015061300/mod_tiling/splitfloat.c --- notion-3+2014010901/mod_tiling/splitfloat.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_tiling/splitfloat.c 2015-06-13 14:37:26.000000000 +0000 @@ -273,9 +273,9 @@ void splitfloat_tl_pwin_to_cnt(WSplitFloat *split, WRectangle *g) { if(split->ssplit.dir==SPLIT_HORIZONTAL) - g->w=maxof(1, g->w-split->tlpwin->bdw.right); + g->w=MAXOF(1, g->w-split->tlpwin->bdw.right); else - g->h=maxof(1, g->h-split->tlpwin->bdw.bottom); + g->h=MAXOF(1, g->h-split->tlpwin->bdw.bottom); } @@ -283,11 +283,11 @@ { if(split->ssplit.dir==SPLIT_HORIZONTAL){ int delta=split->tlpwin->bdw.left; - g->w=maxof(1, g->w-delta); + g->w=MAXOF(1, g->w-delta); g->x+=delta; }else{ int delta=split->tlpwin->bdw.top; - g->h=maxof(1, g->h-delta); + g->h=MAXOF(1, g->h-delta); g->y+=delta; } } @@ -296,9 +296,9 @@ void splitfloat_tl_cnt_to_pwin(WSplitFloat *split, WRectangle *g) { if(split->ssplit.dir==SPLIT_HORIZONTAL) - g->w=maxof(1, g->w+split->tlpwin->bdw.right); + g->w=MAXOF(1, g->w+split->tlpwin->bdw.right); else - g->h=maxof(1, g->h+split->tlpwin->bdw.bottom); + g->h=MAXOF(1, g->h+split->tlpwin->bdw.bottom); } @@ -306,11 +306,11 @@ { if(split->ssplit.dir==SPLIT_HORIZONTAL){ int delta=split->tlpwin->bdw.left; - g->w=maxof(1, g->w+delta); + g->w=MAXOF(1, g->w+delta); g->x-=delta; }else{ int delta=split->tlpwin->bdw.top; - g->h=maxof(1, g->h+delta); + g->h=MAXOF(1, g->h+delta); g->y-=delta; } } @@ -383,18 +383,18 @@ if(split->ssplit.dir==SPLIT_HORIZONTAL){ node->max_w=infadd(tl_max_w, br_max_w); - node->min_w=minof(tl_min_w, br_min_w); + node->min_w=MINOF(tl_min_w, br_min_w); node->unused_w=0; - node->min_h=maxof(tl_min_h, br_min_h); - node->max_h=maxof(minof(tl_max_h, br_max_h), node->min_h); - node->unused_h=minof(tl->unused_h, br->unused_h); + node->min_h=MAXOF(tl_min_h, br_min_h); + node->max_h=MAXOF(MINOF(tl_max_h, br_max_h), node->min_h); + node->unused_h=MINOF(tl->unused_h, br->unused_h); }else{ node->max_h=infadd(tl_max_h, br_max_h); - node->min_h=minof(tl_min_h, br_min_h); + node->min_h=MINOF(tl_min_h, br_min_h); node->unused_h=0; - node->min_w=maxof(tl_min_w, br_min_w); - node->max_w=maxof(minof(tl_max_w, br_max_w), node->min_w); - node->unused_w=minof(tl->unused_w, br->unused_w); + node->min_w=MAXOF(tl_min_w, br_min_w); + node->max_w=MAXOF(MINOF(tl_max_w, br_max_w), node->min_w); + node->unused_w=MINOF(tl->unused_w, br->unused_w); } } @@ -432,26 +432,26 @@ int tlmin, int brmin, int tlmax, int brmax, int primn) { - int tls=maxof(0, *tls_); - int brs=maxof(0, *brs_); - nsize=maxof(1, nsize); + int tls=MAXOF(0, *tls_); + int brs=MAXOF(0, *brs_); + nsize=MAXOF(1, nsize); if(primn==PRIMN_TL){ - tls=maxof(1, nsize-brs); + tls=MAXOF(1, nsize-brs); bound(&tls, tlmin, tlmax); brs=nsize-tls; bound(&brs, brmin, brmax); tls=nsize-brs; bound(&tls, tlmin, tlmax); }else if(primn==PRIMN_BR){ - brs=maxof(1, nsize-tls); + brs=MAXOF(1, nsize-tls); bound(&brs, brmin, brmax); tls=nsize-brs; bound(&tls, tlmin, tlmax); brs=nsize-tls; bound(&brs, brmin, brmax); }else{ /* && PRIMN_ANY */ - tls=tls*nsize/maxof(2, tls+brs); + tls=tls*nsize/MAXOF(2, tls+brs); bound(&tls, tlmin, tlmax); brs=nsize-tls; bound(&brs, brmin, brmax); @@ -468,7 +468,7 @@ { int mi=splitfloat_get_min(f, dir, s); int ma=splitfloat_get_max(f, dir, s); - *sz=maxof(mi, minof(*sz, ma)); + *sz=MAXOF(mi, MINOF(*sz, ma)); } @@ -478,7 +478,6 @@ WRectangle tlg=GEOM(split->ssplit.tl); WRectangle brg=GEOM(split->ssplit.br); WRectangle ntlg=*ng, nbrg=*ng; - WRectangle *og=&((WSplit*)split)->geom; int dir=split->ssplit.dir; bool adjust=TRUE; @@ -501,14 +500,14 @@ if(dir==SPLIT_VERTICAL){ if(ng->h<=tlg.h+brg.h){ if(transpose){ - ntlg.h=minof(tlg.w, ng->h*2/3); - nbrg.h=minof(brg.w, ng->h*2/3); + ntlg.h=MINOF(tlg.w, ng->h*2/3); + nbrg.h=MINOF(brg.w, ng->h*2/3); adjust_size(&ntlg.h, dir, split, split->ssplit.tl); adjust_size(&nbrg.h, dir, split, split->ssplit.br); adjust=(ng->h>ntlg.h+nbrg.h); }else{ - ntlg.h=minof(ng->h, tlg.h); - nbrg.h=minof(ng->h, brg.h); + ntlg.h=MINOF(ng->h, tlg.h); + nbrg.h=MINOF(ng->h, brg.h); adjust=FALSE; } }else{ @@ -529,14 +528,14 @@ }else{ if(ng->w<=tlg.w+brg.w){ if(transpose){ - ntlg.w=minof(tlg.h, ng->w*2/3); - nbrg.w=minof(brg.h, ng->w*2/3); + ntlg.w=MINOF(tlg.h, ng->w*2/3); + nbrg.w=MINOF(brg.h, ng->w*2/3); adjust_size(&ntlg.w, dir, split, split->ssplit.tl); adjust_size(&nbrg.w, dir, split, split->ssplit.br); adjust=(ng->w>ntlg.w+nbrg.w); }else{ - ntlg.w=minof(ng->w, tlg.w); - nbrg.w=minof(ng->w, brg.w); + ntlg.w=MINOF(ng->w, tlg.w); + nbrg.w=MINOF(ng->w, brg.w); adjust=FALSE; } }else{ @@ -575,19 +574,19 @@ if(rs>=0){ if(p->dir==SPLIT_VERTICAL) - *amount=maxof(0, minof(rs, GEOM(p).h-ng->h)); + *amount=MAXOF(0, MINOF(rs, GEOM(p).h-ng->h)); else - *amount=maxof(0, minof(rs, GEOM(p).w-ng->w)); + *amount=MAXOF(0, MINOF(rs, GEOM(p).w-ng->w)); }else{ if(p->dir==SPLIT_VERTICAL){ - int overlap=maxof(0, og->h-(GEOM(p).h-ng->h)); - *amount=-minof(-rs, overlap); - *oamount=maxof(0, minof(*amount-rs, omax-og->h)); + int overlap=MAXOF(0, og->h-(GEOM(p).h-ng->h)); + *amount=-MINOF(-rs, overlap); + *oamount=MAXOF(0, MINOF(*amount-rs, omax-og->h)); *amount-=*oamount; }else{ - int overlap=maxof(0, og->w-(GEOM(p).w-ng->w)); - *amount=-minof(-rs, overlap); - *oamount=maxof(0, minof(*amount-rs, omax-og->w)); + int overlap=MAXOF(0, og->w-(GEOM(p).w-ng->w)); + *amount=-MINOF(-rs, overlap); + *oamount=MAXOF(0, MINOF(*amount-rs, omax-og->w)); *amount-=*oamount; } } @@ -655,16 +654,16 @@ nng=pg; if(p->dir==SPLIT_VERTICAL){ - nog.h=minof(pg.h, maxof(0, og.h+oamount)); - nng.h=minof(pg.h, maxof(0, ng.h+amount+pg.h-GEOM(p).h)); + nog.h=MINOF(pg.h, MAXOF(0, og.h+oamount)); + nng.h=MINOF(pg.h, MAXOF(0, ng.h+amount+pg.h-GEOM(p).h)); if(thisnode==PRIMN_TL) nog.y=pg.y+pg.h-nog.h; else nng.y=pg.y+pg.h-nng.h; vprimn=thisnode; }else{ - nog.w=minof(pg.w, maxof(0, og.w+oamount)); - nng.w=minof(pg.w, maxof(0, ng.w+amount+pg.w-GEOM(p).w)); + nog.w=MINOF(pg.w, MAXOF(0, og.w+oamount)); + nng.w=MINOF(pg.w, MAXOF(0, ng.w+amount+pg.w-GEOM(p).w)); if(thisnode==PRIMN_TL) nog.x=pg.x+pg.w-nog.w; else @@ -730,8 +729,8 @@ *brs=total-(*tls); } - *tls=minof(maxof(MINS, *tls), total); - *brs=minof(maxof(MINS, *brs), total); + *tls=MINOF(MAXOF(MINS, *tls), total); + *brs=MINOF(MAXOF(MINS, *brs), total); } @@ -884,7 +883,7 @@ bo=BR_BORDER(sf); } - mins=maxof(omins+bo, nmins+bn); + mins=MAXOF(omins+bo, nmins+bn); /* Potentially resize old node. */ @@ -912,8 +911,8 @@ /* Calculate geometries. */ - sn=maxof(nmins+bn, s/2); - so=maxof(omins+bo, s-s/2); + sn=MAXOF(nmins+bn, s/2); + so=MAXOF(omins+bo, s-s/2); ((WSplit*)sf)->geom=node->geom; diff -Nru notion-3+2014010901/mod_tiling/split-stdisp.c notion-3+2015061300/mod_tiling/split-stdisp.c --- notion-3+2014010901/mod_tiling/split-stdisp.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_tiling/split-stdisp.c 2015-06-13 14:37:26.000000000 +0000 @@ -51,30 +51,6 @@ } -static void swap(int *x, int *y) -{ - int z=*x; - *x=*y; - *y=z; -} - - -static void swapptr(WSplit **x, WSplit **y) -{ - void *z=*x; - *x=*y; - *y=z; -} - - -static void swapgeom(WRectangle *g, WRectangle *h) -{ - WRectangle tmp=*g; - *g=*h; - *h=tmp; -} - - int stdisp_recommended_w(WSplitST *stdisp) { if(stdisp->regnode.reg==NULL) @@ -86,7 +62,7 @@ return REGION_GEOM(ws).w; } - return maxof(CF_STDISP_MIN_SZ, region_min_w(stdisp->regnode.reg)); + return MAXOF(CF_STDISP_MIN_SZ, region_min_w(stdisp->regnode.reg)); } @@ -101,7 +77,7 @@ return REGION_GEOM(ws).h; } - return maxof(CF_STDISP_MIN_SZ, region_min_h(stdisp->regnode.reg)); + return MAXOF(CF_STDISP_MIN_SZ, region_min_h(stdisp->regnode.reg)); } @@ -270,8 +246,6 @@ static void flip_right(WSplitSplit *a, WSplitSplit *p) { - WSplit *tmp; - assert(a->tl==(WSplit*)p); /* Right flip: @@ -336,8 +310,6 @@ static void flip_left(WSplitSplit *a, WSplitSplit *p) { - WSplit *tmp; - assert(a->br==(WSplit*)p); /* Left flip: diff -Nru notion-3+2014010901/mod_tiling/tiling.c notion-3+2015061300/mod_tiling/tiling.c --- notion-3+2014010901/mod_tiling/tiling.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_tiling/tiling.c 2015-06-13 14:37:26.000000000 +0000 @@ -42,9 +42,6 @@ -static WTilingIterTmp tiling_iter_default_tmp; - - /*{{{ Some helper routines */ @@ -97,7 +94,6 @@ bool tiling_fitrep(WTiling *ws, WWindow *par, const WFitParams *fp) { - WTilingIterTmp tmp; bool ok=FALSE; if(par!=NULL){ @@ -118,7 +114,6 @@ REGION_GEOM(ws)=fp->g; if(ws->split_tree!=NULL){ - bool done=FALSE; if(fp->mode®ION_FIT_ROTATE) ok=split_rotate_to(ws->split_tree, &(fp->g), fp->rotation); if(!ok) @@ -195,7 +190,7 @@ static WTimer *restack_timer=NULL; -static void restack_handler(WTimer *tmr, Obj *obj) +static void restack_handler(WTimer *UNUSED(tmr), Obj *obj) { if(obj!=NULL){ WTiling *ws=(WTiling*)obj; @@ -333,7 +328,6 @@ int corner, int orientation, bool fullsize) { - int flags=REGION_RQGEOM_WEAK_X|REGION_RQGEOM_WEAK_Y; WRectangle *wg=®ION_GEOM(ws), dg; WSplitST *stdispnode; WSplitSplit *split; @@ -483,7 +477,6 @@ bool tiling_managed_add_default(WTiling *ws, WRegion *reg) { - Window bottom=None, top=None; WFrame *frame; if(TILING_STDISP_OF(ws)!=reg){ @@ -622,8 +615,7 @@ { WRegion *reg; WTilingIterTmp tmp; - WMPlex *remanage_mplex=NULL; - + tiling_unmanage_stdisp(ws, FALSE, TRUE); FOR_ALL_MANAGED_BY_TILING(reg, ws, tmp){ @@ -742,15 +734,6 @@ } -static bool mplexfilter(WSplit *node) -{ - WSplitRegion *regnode=OBJ_CAST(node, WSplitRegion); - - return (regnode!=NULL && regnode->reg!=NULL && - OBJ_IS(regnode->reg, WMPlex)); -} - - static WPHolder *find_ph_result=NULL; static WRegion *find_ph_param=NULL; @@ -1553,15 +1536,15 @@ if(split==NULL) return NULL; - tls=maxof(tls, MINS); - brs=maxof(brs, MINS); + tls=MAXOF(tls, MINS); + brs=MAXOF(brs, MINS); geom2=*geom; if(dir==SPLIT_HORIZONTAL){ - tls=maxof(0, geom->w)*tls/(tls+brs); + tls=MAXOF(0, geom->w)*tls/(tls+brs); geom2.w=tls; }else{ - tls=maxof(0, geom->h)*tls/(tls+brs); + tls=MAXOF(0, geom->h)*tls/(tls+brs); geom2.h=tls; } diff -Nru notion-3+2014010901/mod_xinerama/Makefile notion-3+2015061300/mod_xinerama/Makefile --- notion-3+2014010901/mod_xinerama/Makefile 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_xinerama/Makefile 2015-06-13 14:37:26.000000000 +0000 @@ -52,6 +52,8 @@ tags: exuberant-ctags -R . $(TOPDIR) +mod_xinerama.o: exports.h + ################ ls_xinerama utility ############### ls_xinerama: ls_xinerama.c diff -Nru notion-3+2014010901/mod_xkbevents/Makefile notion-3+2015061300/mod_xkbevents/Makefile --- notion-3+2014010901/mod_xkbevents/Makefile 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_xkbevents/Makefile 2015-06-13 14:37:26.000000000 +0000 @@ -18,10 +18,13 @@ MODULE=mod_xkbevents + ###################################### include $(TOPDIR)/build/rules.mk ###################################### +mod_xkbevents.o: exports.h + _install: module_install diff -Nru notion-3+2014010901/mod_xkbevents/mod_xkbevents.c notion-3+2015061300/mod_xkbevents/mod_xkbevents.c --- notion-3+2014010901/mod_xkbevents/mod_xkbevents.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_xkbevents/mod_xkbevents.c 2015-06-13 14:37:26.000000000 +0000 @@ -142,6 +142,8 @@ WHook *hook=NULL; XkbEvent *kev=NULL; WHookMarshallExtl *fn=NULL; + WGroupParams pgp; + WBellParams pbp; if(ev->type!=xkb_event_code) return FALSE; @@ -151,46 +153,44 @@ switch(kev->any.xkb_type){ case XkbStateNotify: { - WGroupParams p2; - p=&p2; + p=&pgp; hook=xkb_group_event; fn=(WHookMarshallExtl*)mrsh_group_extl; - PARAM_ANY(p2,state); + PARAM_ANY(pgp,state); - p2.group=CHANGED(State,group); - p2.base_group=CHANGED(Base,base_group); - p2.latched_group=CHANGED(Latch,latched_group); - p2.locked_group=CHANGED(Lock,locked_group); + pgp.group=CHANGED(State,group); + pgp.base_group=CHANGED(Base,base_group); + pgp.latched_group=CHANGED(Latch,latched_group); + pgp.locked_group=CHANGED(Lock,locked_group); } break; case XkbBellNotify: { - WBellParams p2; - p=&p2; + p=&pbp; hook=xkb_bell_event; fn=(WHookMarshallExtl*)mrsh_bell_extl; - PARAM_ANY(p2,bell); + PARAM_ANY(pbp,bell); - p2.percent=kev->bell.percent; - p2.pitch=kev->bell.pitch; - p2.duration=kev->bell.duration; + pbp.percent=kev->bell.percent; + pbp.pitch=kev->bell.pitch; + pbp.duration=kev->bell.duration; - p2.bell_class=kev->bell.bell_class; - p2.bell_id=kev->bell.bell_id; + pbp.bell_class=kev->bell.bell_class; + pbp.bell_id=kev->bell.bell_id; - p2.name=NULL; + pbp.name=NULL; if(kev->bell.name!=None) - p2.name=get_atom_name(kev->bell.name); + pbp.name=get_atom_name(kev->bell.name); - p2.window=NULL; + pbp.window=NULL; if(kev->bell.window!=None) - p2.window=XWINDOW_REGION_OF_T(kev->bell.window, WClientWin); + pbp.window=XWINDOW_REGION_OF_T(kev->bell.window, WClientWin); - p2.event_only=kev->bell.event_only; + pbp.event_only=kev->bell.event_only; } break; } @@ -213,7 +213,7 @@ EXTL_EXPORT int mod_xkbevents_lock_group(int state) { - return XkbLockGroup(ioncore_g.dpy, XkbUseCoreKbd, state); + return XkbLockGroup(ioncore_g.dpy, XkbUseCoreKbd, state); } /*EXTL_DOC @@ -223,7 +223,7 @@ EXTL_EXPORT int mod_xkbevents_lock_modifiers(int affect, int values) { - return XkbLockModifiers(ioncore_g.dpy, XkbUseCoreKbd, affect, values); + return XkbLockModifiers(ioncore_g.dpy, XkbUseCoreKbd, affect, values); } /*{{{ Init & deinit */ diff -Nru notion-3+2014010901/mod_xrandr/Makefile notion-3+2015061300/mod_xrandr/Makefile --- notion-3+2014010901/mod_xrandr/Makefile 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_xrandr/Makefile 2015-06-13 14:37:26.000000000 +0000 @@ -20,6 +20,7 @@ MODULE_STUB=mod_xrandr.lua ETC=cfg_xrandr.lua + ###################################### include $(TOPDIR)/build/rules.mk @@ -51,3 +52,5 @@ .PHONY: tags tags: exuberant-ctags -R . $(TOPDIR) + +mod_xrandr.o: exports.h diff -Nru notion-3+2014010901/mod_xrandr/mod_xrandr.c notion-3+2015061300/mod_xrandr/mod_xrandr.c --- notion-3+2014010901/mod_xrandr/mod_xrandr.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/mod_xrandr/mod_xrandr.c 2015-06-13 14:37:26.000000000 +0000 @@ -36,6 +36,7 @@ #include #include #include +#include #include #include "exports.h" @@ -80,7 +81,8 @@ WFitParams fp; WScreen *screen; - bool pivot=FALSE; + LOG(DEBUG, RANDR, "XRRScreenChangeNotifyEvent size %dx%d (%dx%d mm)", + rev->width, rev->height, rev->mwidth, rev->mheight); screen=XWINDOW_REGION_OF_T(rev->root, WScreen); @@ -137,7 +139,6 @@ static bool check_pivots() { WScreen *scr; - XRRScreenConfiguration *cfg; rotations=make_rb(); @@ -216,8 +217,6 @@ ExtlTab result = extl_create_table(); for(i=0; i < res->noutput; i++){ - int x,y; - int w,h; XRROutputInfo *output_info = XRRGetOutputInfo(ioncore_g.dpy, res, res->outputs[i]); if(output_info->crtc != None){ XRRCrtcInfo *crtc_info = XRRGetCrtcInfo(ioncore_g.dpy, res, output_info->crtc); diff -Nru notion-3+2014010901/notion/notion.c notion-3+2015061300/notion/notion.c --- notion-3+2014010901/notion/notion.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/notion/notion.c 2015-06-13 14:37:26.000000000 +0000 @@ -80,7 +80,6 @@ const char *userdir=extl_userdir(); char *oldbeard=NULL; char *tmp=NULL, *cmd=NULL; - pid_t pid; bool ret; if(userdir==NULL){ @@ -240,7 +239,6 @@ if(ioncore_startup(display, cfgfile, stflags)) may_continue=TRUE; -fail: if(!may_continue) warn(TR("Refusing to start due to encountered errors.")); else diff -Nru notion-3+2014010901/po/cs.po notion-3+2015061300/po/cs.po --- notion-3+2014010901/po/cs.po 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/po/cs.po 2015-06-13 14:37:26.000000000 +0000 @@ -19,34 +19,34 @@ #: ../ioncore/conf-bindings.c:93 msgid "Insane key combination." -msgstr "©ílená klávesová kombinace." +msgstr "Šílená klávesová kombinace." #: ../ioncore/conf-bindings.c:97 msgid "Could not convert keysym to keycode." -msgstr "Nemohu pøevést keysym na keycode." +msgstr "Nemohu pÅ™evést keysym na keycode." #: ../ioncore/conf-bindings.c:108 #, c-format msgid "Unknown button \"%s\"." -msgstr "Neznámé tlaèítko \"%s\"." +msgstr "Neznámé tlaÄítko \"%s\"." #: ../ioncore/conf-bindings.c:113 msgid "Insane button combination." -msgstr "©ílená kombinace tlaèítek." +msgstr "Šílená kombinace tlaÄítek." #: ../ioncore/conf-bindings.c:120 ../ioncore/conf-bindings.c:127 msgid "Insane modifier combination." -msgstr "©ílená kombinace modifikátorù." +msgstr "Šílená kombinace modifikátorů." #: ../ioncore/conf-bindings.c:165 #, c-format msgid "Can not wait on modifiers when no modifiers set in \"%s\"." -msgstr "Nemohu èekat na modifikátory, kdy¾ ¾ádné nebyly nastaveny v \"%s\"." +msgstr "Nemohu Äekat na modifikátory, když žádné nebyly nastaveny v \"%s\"." #: ../ioncore/conf-bindings.c:183 #, c-format msgid "Unable to add binding %s." -msgstr "Nemohu pøidat vazbu %s." +msgstr "Nemohu pÅ™idat vazbu %s." #: ../ioncore/conf-bindings.c:188 #, c-format @@ -56,70 +56,70 @@ #: ../ioncore/conf-bindings.c:228 #, c-format msgid "Unable to add submap for binding %s." -msgstr "Nemohu pøidat **** pro vazbu %s." +msgstr "Nemohu pÅ™idat **** pro vazbu %s." # #: ../ioncore/conf-bindings.c:261 msgid "Binding type not set." -msgstr "Typ vazby není nastaven." +msgstr "Typ vazby není nastaven." #: ../ioncore/conf-bindings.c:271 #, c-format msgid "Unknown binding type \"%s\"." -msgstr "Neznámý typ vazby \"%s\"." +msgstr "Neznámý typ vazby \"%s\"." #: ../ioncore/conf-bindings.c:295 #, c-format msgid "Unknown area \"%s\" for binding %s." -msgstr "Neznámá oblast \"%s\" pro vazbu %s." +msgstr "Neznámá oblast \"%s\" pro vazbu %s." #: ../ioncore/conf-bindings.c:336 #, c-format msgid "Unable to get bindmap entry %d." -msgstr "Nemohu získat záznam o vazbì %d." +msgstr "Nemohu získat záznam o vazbÄ› %d." #: ../ioncore/conf-bindings.c:378 msgid "Unable to convert keysym to string." -msgstr "Nemohu pøevést keysym na øetìzec." +msgstr "Nemohu pÅ™evést keysym na Å™etÄ›zec." #: ../ioncore/conf-bindings.c:392 msgid "Unable to convert button to string." -msgstr "Nemohu pøevést tlaèítko na øetìzec." +msgstr "Nemohu pÅ™evést tlaÄítko na Å™etÄ›zec." # #: ../ioncore/event.c:110 msgid "Time request from X server failed." -msgstr "Èasový po¾adavek od X serveru selhal." +msgstr "ÄŒasový požadavek od X serveru selhal." # #: ../ioncore/exec.c:185 msgid "Not saving state: running under session manager." -msgstr "Neukládám stav: bì¾ím pod správcem sezení." +msgstr "Neukládám stav: běžím pod správcem sezení." #: ../ioncore/strings.c:104 ../ioncore/strings.c:140 ../ioncore/strings.c:173 msgid "Invalid multibyte string." -msgstr "Neplatný vícebajtový øetìzec." +msgstr "Neplatný vícebajtový Å™etÄ›zec." #: ../ioncore/strings.c:264 #, c-format msgid "Error compiling regular expression: %s" -msgstr "Chyba pøi kompilaci regulárního výrazu: %s" +msgstr "Chyba pÅ™i kompilaci regulárního výrazu: %s" #: ../ioncore/modules.c:155 msgid "Invalid module name." -msgstr "Neplatné jméno modulu." +msgstr "Neplatné jméno modulu." # #: ../ioncore/modules.c:167 msgid "The module is already loaded." -msgstr "Modul je ji¾ zaveden." +msgstr "Modul je již zaveden." #: ../ioncore/modules.c:182 msgid "" "Module version information not found or version mismatch. Refusing to use." msgstr "" -"Nemohu najít informace o verzi modulu, nebo verze nesouhlasí. Odmítám modul " -"pou¾ít." +"Nemohu najít informace o verzi modulu, nebo verze nesouhlasí. Odmítám modul " +"použít." #: ../ioncore/modules.c:193 #, c-format @@ -129,11 +129,11 @@ #: ../ioncore/modules.c:217 ../../libextl-3/readconfig.c:388 #, c-format msgid "Unable to find '%s' on search path." -msgstr "V prohledávané cestì nemohu najít \"%s\"." +msgstr "V prohledávané cestÄ› nemohu najít \"%s\"." #: ../ioncore/modules.c:288 msgid "Unknown module." -msgstr "Neznámý modul." +msgstr "Neznámý modul." #: ../ioncore/modules.c:296 msgid "Unable to initialise module." @@ -141,36 +141,36 @@ #: ../ioncore/modules.c:341 msgid "No module to load given." -msgstr "Nebyl zadán modul pro zavedení." +msgstr "Nebyl zadán modul pro zavedení." #: ../ioncore/property.c:350 ../ioncore/property.c:359 msgid "Invalid arguments." -msgstr "Neplatné argumenty." +msgstr "Neplatné argumenty." #: ../ioncore/screen.c:382 msgid "Only workspace may not be destroyed/detached." -msgstr "Jediná pracovní plocha nemù¾e být zru¹ena." +msgstr "Jediná pracovní plocha nemůže být zruÅ¡ena." #: ../ioncore/screen.c:393 msgid "Screens may not be destroyed." -msgstr "Obrazovky nesmí být znièeny." +msgstr "Obrazovky nesmí být zniÄeny." #: ../ioncore/screen.c:429 msgid "Invalid offset." -msgstr "Neplatné odsazení" +msgstr "Neplatné odsazení" #: ../ioncore/screen.c:468 #, c-format msgid "Unable to create a workspace on screen %d." -msgstr "Nemohu vytvoøit pracovní plochu na obrazovce %d." +msgstr "Nemohu vytvoÅ™it pracovní plochu na obrazovce %d." #: ../ioncore/sizehint.c:146 msgid "Invalid client-supplied width/height increment." -msgstr "Klient zadal neplatný pøírùstek ¹íøky/vý¹ky." +msgstr "Klient zadal neplatný přírůstek šířky/výšky." #: ../ioncore/sizehint.c:154 msgid "Invalid client-supplied aspect-ratio." -msgstr "Klient zadal neplatný pomìr stran." +msgstr "Klient zadal neplatný pomÄ›r stran." #: ../ioncore/ioncore.c:79 msgid "" @@ -184,48 +184,48 @@ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" msgstr "" -"Tento program je v podstatì licencovaný pod licencí GNU Lesser\n" -"General Public Licence (LGPL) verze 2.1, s mo¾nou výjimkou\n" -"komponent získaných jinde. Na pou¾ití jména projektu, Ion(tm),\n" -"se vztahují dal¹í podmínky. Podrobnosti naleznete v souboru\n" -"LICENSE, který byste mìli obdr¾et spolu s tímto softwarem.\n" +"Tento program je v podstatÄ› licencovaný pod licencí GNU Lesser\n" +"General Public Licence (LGPL) verze 2.1, s možnou výjimkou\n" +"komponent získaných jinde. Na použití jména projektu, Ion(tm),\n" +"se vztahují další podmínky. Podrobnosti naleznete v souboru\n" +"LICENSE, který byste mÄ›li obdržet spolu s tímto softwarem.\n" "\n" -"Tento program je distribuovaný v nadìji, ¾e bude u¾iteèný, ale\n" -"BEZ JAKÉKOLIV ZÁRUKY.\n" +"Tento program je distribuovaný v nadÄ›ji, že bude užiteÄný, ale\n" +"BEZ JAKÉKOLIV ZÃRUKY.\n" #: ../ioncore/ioncore.c:160 msgid "No encoding given in LC_CTYPE." -msgstr "V LC_CTYPE není zadáno kódování." +msgstr "V LC_CTYPE není zadáno kódování." #: ../ioncore/ioncore.c:478 #, c-format msgid "Could not connect to X display '%s'" -msgstr "Nemohu se pøipojit na X displej \"%s\"" +msgstr "Nemohu se pÅ™ipojit na X displej \"%s\"" #: ../ioncore/ioncore.c:531 msgid "Could not find a screen to manage." -msgstr "Nemohu najít obrazovku, kterou bych mohl spravovat." +msgstr "Nemohu najít obrazovku, kterou bych mohl spravovat." #: ../ioncore/xic.c:35 msgid "Failed to open input method." -msgstr "Selhalo otevøení vstupní metody." +msgstr "Selhalo otevÅ™ení vstupní metody." #: ../ioncore/xic.c:40 msgid "Input method doesn't support any style." -msgstr "Vstupní metoda nepodporuje ¾ádný styl." +msgstr "Vstupní metoda nepodporuje žádný styl." #: ../ioncore/xic.c:55 msgid "input method doesn't support my preedit type." -msgstr "Vstupní metoda nepodporuje mùj pøedpøipravený typ." +msgstr "Vstupní metoda nepodporuje můj pÅ™edpÅ™ipravený typ." #: ../ioncore/xic.c:83 msgid "Failed to create input context." -msgstr "Selhalo vytvoøení vstupního kontextu." +msgstr "Selhalo vytvoÅ™ení vstupního kontextu." #: ../ioncore/clientwin.c:376 #, c-format msgid "The transient_for hint for \"%s\" points to itself." -msgstr "Nápovìda transient_for pro \"%s\" ukazuje sama na sebe." +msgstr "NápovÄ›da transient_for pro \"%s\" ukazuje sama na sebe." #: ../ioncore/clientwin.c:380 #, c-format @@ -233,13 +233,13 @@ "Client window \"%s\" has broken transient_for hint. (\"Extended WM hints\" " "multi-parent brain damage?)" msgstr "" -"Klientské okno \"%s\" má poru¹enou nápovìdu transient_for. (Schizofrenie " -"více rodièù \"Extended WM hints\"?)" +"Klientské okno \"%s\" má poruÅ¡enou nápovÄ›du transient_for. (Schizofrenie " +"více rodiÄů \"Extended WM hints\"?)" #: ../ioncore/clientwin.c:385 #, c-format msgid "The transient_for window for \"%s\" is not on the same screen." -msgstr "Okno transient_for pro \"%s\" není na stejné obrazovce." +msgstr "Okno transient_for pro \"%s\" není na stejné obrazovce." #: ../ioncore/clientwin.c:405 ../ioncore/clientwin.c:512 #: ../ioncore/clientwin.c:1327 @@ -249,16 +249,16 @@ #: ../ioncore/clientwin.c:532 msgid "Unable to find a matching root window!" -msgstr "Nemohu najít odpovídající koøenové okno!" +msgstr "Nemohu najít odpovídající koÅ™enové okno!" #: ../ioncore/clientwin.c:571 #, c-format msgid "Unable to manage client window %#x." -msgstr "Nemohu spravovat klientské okno %#x." +msgstr "Nemohu spravovat klientské okno %#x." #: ../ioncore/clientwin.c:620 msgid "Changes is WM_TRANSIENT_FOR property are unsupported." -msgstr "Zmìny vlastnosti WM_TRANSIENT_FOR nejsou podporovány." +msgstr "ZmÄ›ny vlastnosti WM_TRANSIENT_FOR nejsou podporovány." # #: ../ioncore/clientwin.c:792 @@ -267,70 +267,70 @@ #: ../ioncore/clientwin.c:1333 msgid "Saved client window does not want to be managed." -msgstr "Ulo¾ené klientské okno nechce být spravováno." +msgstr "Uložené klientské okno nechce být spravováno." # #: ../ioncore/colormap.c:93 msgid "Unable to store colourmap watch info." -msgstr "Nemohu ulo¾it informace o barevné mapì." +msgstr "Nemohu uložit informace o barevné mapÄ›." #: ../ioncore/region.c:45 msgid "Creating region with negative width or height!" -msgstr "Vytváøím oblast se zápornou ¹íøkou nebo vý¹kou!" +msgstr "Vytvářím oblast se zápornou šířkou nebo výškou!" #: ../ioncore/region.c:93 #, c-format msgid "Destroying object \"%s\" with client windows as children." -msgstr "Nièím objekt \"%s\" spoleènì s klientskými okny jako dìtmi." +msgstr "NiÄím objekt \"%s\" spoleÄnÄ› s klientskými okny jako dÄ›tmi." #: ../ioncore/region.c:434 #, c-format msgid "Can not destroy %s: contains client windows." -msgstr "Nemohu znièit %s: obsahuje klientská okna." +msgstr "Nemohu zniÄit %s: obsahuje klientská okna." #: ../ioncore/region.c:435 msgid "(unknown)" -msgstr "(neznámý)" +msgstr "(neznámý)" #: ../ioncore/region.c:498 msgid "Failed to rescue some client windows - not closing." -msgstr "Záchrana nìkterých klientských oken selhala - nezavírám." +msgstr "Záchrana nÄ›kterých klientských oken selhala - nezavírám." #: ../ioncore/attach.c:55 ../ioncore/frame-pointer.c:278 #, c-format msgid "Attempt to make region %s manage its ancestor %s." -msgstr "Pokus, aby oblast %s spravovala svého pøedka %s." +msgstr "Pokus, aby oblast %s spravovala svého pÅ™edka %s." #: ../ioncore/attach.c:80 msgid "Unable to reparent." -msgstr "Nemohu zmìnit rodièe." +msgstr "Nemohu zmÄ›nit rodiÄe." #: ../ioncore/attach.c:89 msgid "Unexpected attach error: trying to recover by attaching to screen." -msgstr "Neoèekávaná chyba pøipojení: zkou¹ím obnovit pøipojením k obrazovce." +msgstr "NeoÄekávaná chyba pÅ™ipojení: zkouším obnovit pÅ™ipojením k obrazovce." #: ../ioncore/attach.c:108 msgid "Failed recovery." -msgstr "Obnovení selhalo." +msgstr "Obnovení selhalo." #: ../ioncore/manage.c:190 msgid "Unable to find a screen for a new client window." -msgstr "Nemohu najít obrazovku pro nové klientské okno." +msgstr "Nemohu najít obrazovku pro nové klientské okno." #: ../ioncore/rootwin.c:215 #, c-format msgid "Unable to redirect root window events for screen %d." -msgstr "Nemohu pøesmìrovat události koøenového okna na obrazovce %d." +msgstr "Nemohu pÅ™esmÄ›rovat události koÅ™enového okna na obrazovce %d." #: ../ioncore/names.c:88 #, c-format msgid "Corrupt instance number %s." -msgstr "Poru¹ená instance èíslo %s." +msgstr "PoruÅ¡ená instance Äíslo %s." #: ../ioncore/saveload.c:95 #, c-format msgid "Unknown class \"%s\", cannot create region." -msgstr "Neznámá tøída \"%s\", nemohu vytvoøit oblast." +msgstr "Neznámá třída \"%s\", nemohu vytvoÅ™it oblast." #: ../ioncore/saveload.c:199 #, c-format @@ -343,113 +343,113 @@ "configuration files that are causing this problem. (Maybe a missing\n" "module?)" msgstr "" -"Pøi nahrávání rozlo¾ení se vyskytly chyby. Zálohuji aktuální soubor\n" -"s rozlo¾ením jako %s.\n" -"Pokud _nepou¾íváte_ správce sezení a chcete obnovit své staré rozlo¾ení,\n" -"ukonèete Ion a zkopírujte tento zálo¾ní soubor pøes soubor s rozlo¾ením.\n" -"Pøedtím nezapomeòte opravit konfiguraèní soubory, které zpùsobily tyto\n" -"problémy. (Mo¾ná chybìjící modul?)" +"PÅ™i nahrávání rozložení se vyskytly chyby. Zálohuji aktuální soubor\n" +"s rozložením jako %s.\n" +"Pokud _nepoužíváte_ správce sezení a chcete obnovit své staré rozložení,\n" +"ukonÄete Ion a zkopírujte tento záložní soubor pÅ™es soubor s rozložením.\n" +"PÅ™edtím nezapomeňte opravit konfiguraÄní soubory, které způsobily tyto\n" +"problémy. (Možná chybÄ›jící modul?)" #: ../ioncore/saveload.c:250 msgid "Unable to get file for layout backup." -msgstr "Nemohu získat soubor pro zálohu rozlo¾ení." +msgstr "Nemohu získat soubor pro zálohu rozložení." #: ../ioncore/saveload.c:254 #, c-format msgid "Backup file %s already exists." -msgstr "Zálo¾ní soubor %s ji¾ existuje." +msgstr "Záložní soubor %s již existuje." #: ../ioncore/saveload.c:260 msgid "Failed backup." -msgstr "Selhala záloha." +msgstr "Selhala záloha." # #: ../ioncore/saveload.c:265 msgid "Unable to initialise layout on any screen." -msgstr "Na ¾ádné obrazovce nemohu inicializovat rozlo¾ení." +msgstr "Na žádné obrazovce nemohu inicializovat rozložení." #: ../ioncore/saveload.c:292 #, c-format msgid "Unable to get configuration for screen %d." -msgstr "Nemohu získat nastavení pro obrazovku %d." +msgstr "Nemohu získat nastavení pro obrazovku %d." #: ../ioncore/saveload.c:305 msgid "Unable to save layout." -msgstr "Nemohu ulo¾it rozlo¾ení." +msgstr "Nemohu uložit rozložení." #: ../ioncore/conf.c:237 msgid "User directory can not be set." -msgstr "U¾ivatelský adresáø nemù¾e být nastaven." +msgstr "Uživatelský adresář nemůže být nastaven." #: ../ioncore/conf.c:311 msgid "Some bindmaps were empty, loading ioncore_efbb." -msgstr "Nìkteré tabulky kláves jsou prázdné, nahrávám ioncore_efbb." +msgstr "NÄ›které tabulky kláves jsou prázdné, nahrávám ioncore_efbb." #: ../ioncore/fullscreen.c:46 msgid "Failed to enter full screen mode." -msgstr "Selhal pøechod do celoobrazovkového re¾imu." +msgstr "Selhal pÅ™echod do celoobrazovkového režimu." #: ../ioncore/fullscreen.c:80 msgid "" "Failed to return from full screen mode; remaining manager or parent from " "previous location refused to manage us." msgstr "" -"Návrat z celoobrazovkového re¾imu se nezdaøil; zbývající správce nebo rodiè " -"z pøedchozího umístìní nás nechce spravovat." +"Návrat z celoobrazovkového režimu se nezdaÅ™il; zbývající správce nebo rodiÄ " +"z pÅ™edchozího umístÄ›ní nás nechce spravovat." # #: ../ioncore/mplex.c:1797 msgid "Invalid position setting." -msgstr "Neplatné nastavení pozice." +msgstr "Neplatné nastavení pozice." # #: ../ioncore/mplex.c:1837 msgid "Invalid action setting." -msgstr "Neplatné nastavení akce." +msgstr "Neplatné nastavení akce." #: ../ioncore/gr.c:117 #, c-format msgid "Drawing engine %s is not registered!" -msgstr "Vykreslovací jednotka %s není registrována!" +msgstr "Vykreslovací jednotka %s není registrována!" #: ../ioncore/gr.c:136 #, c-format msgid "Unable to find brush for style '%s'." -msgstr "Nemohu najít ¹tìtec pro styl \"%s\"." +msgstr "Nemohu najít Å¡tÄ›tec pro styl \"%s\"." #: ../ioncore/gr.c:652 msgid "No drawing engines loaded, trying \"de\"." -msgstr "Nebyly nahrány ¾ádné vykreslovací jednotky, zkou¹ím \"%s\"." +msgstr "Nebyly nahrány žádné vykreslovací jednotky, zkouším \"%s\"." #: ../ioncore/frame-draw.c:311 msgid "" -msgstr "" +msgstr "" #: ../ioncore/group.c:183 ../mod_tiling/tiling.c:89 #, c-format msgid "Error reparenting %s." -msgstr "Chyba zmìny rodièe %s." +msgstr "Chyba zmÄ›ny rodiÄe %s." #: ../ioncore/group.c:708 msgid "'bottom' already set." -msgstr "'bottom' je ji¾ nastaven." +msgstr "'bottom' je již nastaven." #: ../ioncore/navi.c:42 msgid "Invalid parameter." -msgstr "Neplatný parametr" +msgstr "Neplatný parametr" #: ../ioncore/navi.c:69 msgid "Invalid direction parameter." -msgstr "Neplatný parametr smìru." +msgstr "Neplatný parametr smÄ›ru." #: ../ioncore/group-ws.c:48 #, c-format msgid "Unknown placement method \"%s\"." -msgstr "Neznámý zpùsob umístìní \"%s\"." +msgstr "Neznámý způsob umístÄ›ní \"%s\"." #: ../ioncore/detach.c:174 msgid "Failed to reattach." -msgstr "Znovupøipojení selhalo." +msgstr "ZnovupÅ™ipojení selhalo." #: ../ioncore/screen-notify.c:187 msgid "act: " @@ -458,137 +458,137 @@ # #: ../mod_tiling/tiling.c:70 msgid "Split not on workspace." -msgstr "Rozdìlení není na pracovní plo¹e." +msgstr "RozdÄ›lení není na pracovní ploÅ¡e." #: ../mod_tiling/tiling.c:345 msgid "Unable to create a node for status display." -msgstr "Nemohu vytvoøit uzel pro stavový øádek." +msgstr "Nemohu vytvoÅ™it uzel pro stavový řádek." #: ../mod_tiling/tiling.c:358 msgid "Unable to create new split for status display." -msgstr "Nemohu vytvoøit nové rozdìlení pro stavový øádek." +msgstr "Nemohu vytvoÅ™it nové rozdÄ›lení pro stavový řádek." #: ../mod_tiling/tiling.c:709 msgid "Tiling in useless state." -msgstr "Dl¾dice v neu¾iteèném stavu." +msgstr "Dlždice v neužiteÄném stavu." #: ../mod_tiling/tiling.c:923 msgid "Invalid direction" -msgstr "Neplatný smìr" +msgstr "Neplatný smÄ›r" # #: ../mod_tiling/tiling.c:956 ../mod_tiling/split.c:1030 msgid "Invalid node." -msgstr "Neplatný uzel." +msgstr "Neplatný uzel." # #: ../mod_tiling/tiling.c:975 msgid "Unable to split." -msgstr "Nemohu rozdìlit." +msgstr "Nemohu rozdÄ›lit." #: ../mod_tiling/tiling.c:1190 msgid "Nil parameter." -msgstr "Prázdný parametr." +msgstr "Prázdný parametr." #: ../mod_tiling/tiling.c:1195 msgid "Manager doesn't match." -msgstr "Správce se neshoduje." +msgstr "Správce se neshoduje." #: ../mod_tiling/tiling.c:1232 msgid "The status display is not a valid parameter for this routine." -msgstr "Stavový displej není v této rutinì platným parametrem." +msgstr "Stavový displej není v této rutinÄ› platným parametrem." #: ../mod_tiling/tiling.c:1323 msgid "Refusing to float split directly containing the status display." -msgstr "Odmítám rozdìlit pøímo prvek obsahující stavový displej." +msgstr "Odmítám rozdÄ›lit přímo prvek obsahující stavový displej." #: ../mod_tiling/tiling.c:1387 msgid "No suitable split here." -msgstr "®ádné vhodné rozdìlení." +msgstr "Žádné vhodné rozdÄ›lení." # #: ../mod_tiling/tiling.c:1423 msgid "Could not get split tree." -msgstr "Nemohu získat strom rozdìlení" +msgstr "Nemohu získat strom rozdÄ›lení" #: ../mod_tiling/tiling.c:1444 msgid "Workspace already has a status display node." -msgstr "Pracovní plocha ji¾ obsahuje stavový displej." +msgstr "Pracovní plocha již obsahuje stavový displej." # #: ../mod_tiling/tiling.c:1482 msgid "Missing region parameters." -msgstr "Chybìjící parametry oblasti." +msgstr "ChybÄ›jící parametry oblasti." #: ../mod_tiling/tiling.c:1526 ../mod_tiling/splitfloat.c:777 msgid "Invalid direction." -msgstr "Neplatný smìr." +msgstr "Neplatný smÄ›r." # #: ../mod_tiling/tiling.c:1601 msgid "No split type given." -msgstr "Nebyl zadán typ rozdìlení." +msgstr "Nebyl zadán typ rozdÄ›lení." #: ../mod_tiling/tiling.c:1614 msgid "Unknown split type." -msgstr "Neznámý typ rozdìlení." +msgstr "Neznámý typ rozdÄ›lení." # # #: ../mod_tiling/tiling.c:1654 msgid "The workspace is empty." -msgstr "Pracovní plocha je prázdná." +msgstr "Pracovní plocha je prázdná." #: ../mod_tiling/placement.c:101 #, c-format msgid "" "Ooops... could not find a region to attach client window to on workspace %s." msgstr "" -"Ooops... na pracovní plo¹e %s nemohu najít oblast, ke které se má pøipojit " -"klientské okno." +"Ooops... na pracovní ploÅ¡e %s nemohu najít oblast, ke které se má pÅ™ipojit " +"klientské okno." # #: ../mod_tiling/split.c:536 msgid "Unable to move the status display out of way." -msgstr "Nemohu pøesunout stavový øádek tak, aby nezavazel." +msgstr "Nemohu pÅ™esunout stavový řádek tak, aby nezavazel." #: ../mod_tiling/split.c:949 msgid "REGION_RQGEOM_TRYONLY unsupported for status display." -msgstr "REGION_RQGEOM_TRYONLY není stavovým displejem podporován." +msgstr "REGION_RQGEOM_TRYONLY není stavovým displejem podporován." # #: ../mod_tiling/split.c:1102 msgid "Splitting the status display is not allowed." -msgstr "Rozdìlení stavového displeje není povoleno." +msgstr "RozdÄ›lení stavového displeje není povoleno." #: ../mod_tiling/split.c:1128 ../mod_tiling/splitfloat.c:900 msgid "Unable to split: not enough free space." -msgstr "Nelze rozdìlit: nedostatek volného místa." +msgstr "Nelze rozdÄ›lit: nedostatek volného místa." #: ../mod_tiling/split.c:1881 #, c-format msgid "Unable to get configuration for %s." -msgstr "Nemohu získat nastavení pro %s." +msgstr "Nemohu získat nastavení pro %s." #: ../mod_tiling/split-stdisp.c:599 ../mod_tiling/split-stdisp.c:624 msgid "Status display in bad split configuration." -msgstr "Stavový øádek se nachází v chybné konfiguraci rozdìlení." +msgstr "Stavový řádek se nachází v chybné konfiguraci rozdÄ›lení." #: ../mod_tiling/split-stdisp.c:664 msgid "Status display badly located in split tree." -msgstr "Stavový øádek je ve stromu rozdìlení umístìn na ¹patném místì." +msgstr "Stavový řádek je ve stromu rozdÄ›lení umístÄ›n na Å¡patném místÄ›." #: ../mod_tiling/ops.c:69 ../mod_tiling/ops.c:117 msgid "Not member of a group" -msgstr "Není èlenem skupiny" +msgstr "Není Älenem skupiny" #: ../mod_tiling/ops.c:74 msgid "Manager group already has bottom" -msgstr "Øídící skupina ji¾ má dno" +msgstr "Řídící skupina již má dno" #: ../mod_tiling/ops.c:151 msgid "Unable to move a region from tiling to group." -msgstr "Nemohu pøesunout regiion z dlá¾dìní do skupiny." +msgstr "Nemohu pÅ™esunout regiion z dláždÄ›ní do skupiny." #: ../mod_query/wedln.c:811 msgid "history" @@ -601,55 +601,55 @@ # #: ../mod_menu/menu.c:598 msgid "Empty menu." -msgstr "Prázdné menu." +msgstr "Prázdné menu." # #: ../mod_sm/sm.c:108 msgid "Failed to set session directory." -msgstr "Selhalo nastavení adresáøe s relací." +msgstr "Selhalo nastavení adresáře s relací." #: ../mod_sm/sm_session.c:86 msgid "Too many ICE connections." -msgstr "Pøíli¹ mnoho ICE spojení." +msgstr "PříliÅ¡ mnoho ICE spojení." #: ../mod_sm/sm_session.c:228 msgid "Failed to save session state" -msgstr "Selhalo ulo¾ení stavu sezení." +msgstr "Selhalo uložení stavu sezení." #: ../mod_sm/sm_session.c:247 msgid "Failed to request save-yourself-phase2 from session manager." -msgstr "Selhalo vy¾ádání save-yourself-phase2 od správce sezení." +msgstr "Selhalo vyžádání save-yourself-phase2 od správce sezení." # #: ../mod_sm/sm_session.c:296 msgid "SESSION_MANAGER environment variable not set." -msgstr "Promìnná SESSION_MANAGER není nastavena." +msgstr "PromÄ›nná SESSION_MANAGER není nastavena." #: ../mod_sm/sm_session.c:301 msgid "Session Manager: IceAddConnectionWatch failed." -msgstr "Správce sezení: IceAddConnectionWatch selhalo." +msgstr "Správce sezení: IceAddConnectionWatch selhalo." # #: ../mod_sm/sm_session.c:326 msgid "Unable to connect to the session manager." -msgstr "Nemohu se pøipojit ke správci sezení." +msgstr "Nemohu se pÅ™ipojit ke správci sezení." #: ../mod_sp/main.c:124 msgid "Unable to create scratchpad." -msgstr "Nemohu vytvoøit poznámkový blok." +msgstr "Nemohu vytvoÅ™it poznámkový blok." #: ../mod_statusbar/main.c:74 msgid "reading a pipe" -msgstr "ètu rouru" +msgstr "Ätu rouru" #: ../mod_statusbar/main.c:163 msgid "ion-statusd timed out." -msgstr "Èas ion-statusd vypr¹el." +msgstr "ÄŒas ion-statusd vyprÅ¡el." #: ../mod_statusbar/statusbar.c:1079 #, c-format msgid "[ %date || load: %load ] %filler%systray" -msgstr "[ %date || vytí¾ení: %load ] %filler%systray" +msgstr "[ %date || vytížení: %load ] %filler%systray" #: ../de/init.c:65 #, c-format @@ -659,12 +659,12 @@ #: ../de/init.c:88 #, c-format msgid "Unknown border style \"%s\"." -msgstr "Neznámý styl okraje \"%s\"." +msgstr "Neznámý styl okraje \"%s\"." #: ../de/init.c:108 #, c-format msgid "Unknown border side configuration \"%s\"." -msgstr "Neznámé nastavení okraje \"%s\"." +msgstr "Neznámé nastavení okraje \"%s\"." #: ../de/init.c:144 #, c-format @@ -674,12 +674,12 @@ #: ../de/init.c:220 #, c-format msgid "Corrupt substyle table %d." -msgstr "Poru¹ená tabulka stylù %d." +msgstr "PoruÅ¡ená tabulka stylů %d." #: ../de/init.c:253 #, c-format msgid "Unknown text alignment \"%s\"." -msgstr "Neznámý textový prvek \"%s\"." +msgstr "Neznámý textový prvek \"%s\"." #: ../de/font.c:44 #, c-format @@ -687,67 +687,67 @@ "Fontset for font pattern '%s' implements context dependent drawing, which is " "unsupported. Expect clutter." msgstr "" -"Sada fontù pro vzor '%s' implementuje kontextovì závislé kreslení, co¾ není " -"podporováno. Oèekávejte nesmysly." +"Sada fontů pro vzor '%s' implementuje kontextovÄ› závislé kreslení, což není " +"podporováno. OÄekávejte nesmysly." #: ../de/font.c:56 #, c-format msgid "Could not load font \"%s\", trying \"%s\"" -msgstr "Nemohu nahrát font \"%s\", zkou¹ím \"%s\"." +msgstr "Nemohu nahrát font \"%s\", zkouším \"%s\"." #: ../de/font.c:60 msgid "Failed to load fallback font." -msgstr "Nahrání zálo¾ního fontu selhalo." +msgstr "Nahrání záložního fontu selhalo." #: ../de/style.c:291 #, c-format msgid "Style is still in use [%d] but the module is being unloaded!" -msgstr "Styl se stále pou¾ívá [%d], ale modul se ji¾ ru¹í z pamìti!" +msgstr "Styl se stále používá [%d], ale modul se již ruší z pamÄ›ti!" #: ../ion/ion.c:39 ../pwm/pwm.c:39 msgid "X display to use" -msgstr "X displej, který se má pou¾ít" +msgstr "X displej, který se má použít" #: ../ion/ion.c:42 ../pwm/pwm.c:42 msgid "Configuration file" -msgstr "Konfiguraèní soubor" +msgstr "KonfiguraÄní soubor" #: ../ion/ion.c:45 ../pwm/pwm.c:45 msgid "Add directory to search path" -msgstr "Pøidá adresáø do prohledávané cesty" +msgstr "PÅ™idá adresář do prohledávané cesty" #: ../ion/ion.c:48 ../pwm/pwm.c:48 msgid "Manage default screen only" -msgstr "Spravuje pouze výchozí obrazovku" +msgstr "Spravuje pouze výchozí obrazovku" #: ../ion/ion.c:51 ../pwm/pwm.c:51 msgid "Name of session (affects savefiles)" -msgstr "Jméno sezení (ovlivní místo ulo¾ení)" +msgstr "Jméno sezení (ovlivní místo uložení)" #: ../ion/ion.c:54 ../pwm/pwm.c:54 msgid "Session manager client ID" -msgstr "Klientské ID správce sezení" +msgstr "Klientské ID správce sezení" #: ../ion/ion.c:57 ../pwm/pwm.c:57 msgid "Do not create startup error log and display it with xmessage." msgstr "" -"Nevytváøet záznam o chybách pøi startu a nezobrazovat jej pomocí xmessage." +"Nevytvářet záznam o chybách pÅ™i startu a nezobrazovat jej pomocí xmessage." #: ../ion/ion.c:61 ../pwm/pwm.c:61 msgid "Show this help" -msgstr "Zobrazí tuto nápovìdu" +msgstr "Zobrazí tuto nápovÄ›du" #: ../ion/ion.c:64 ../pwm/pwm.c:64 msgid "Show program version" -msgstr "Zobrazí verzi programu" +msgstr "Zobrazí verzi programu" #: ../ion/ion.c:67 ../pwm/pwm.c:67 msgid "Show about text" -msgstr "Zobrazí nìco o programu" +msgstr "Zobrazí nÄ›co o programu" #: ../ion/ion.c:82 msgid "Could not get user configuration file directory." -msgstr "Nemohu získat u¾ivatelùv adresáø s nastavením." +msgstr "Nemohu získat uživatelův adresář s nastavením." #: ../ion/ion.c:96 #, c-format @@ -760,56 +760,56 @@ "Usage: %s [options]\n" "\n" msgstr "" -"Pou¾ití: %s [volby]\n" +"Použití: %s [volby]\n" "\n" # #: ../ion/ion.c:197 ../pwm/pwm.c:147 msgid "Invalid command line." -msgstr "Neplatná pøíkazová øádka." +msgstr "Neplatná příkazová řádka." #: ../ion/ion.c:219 msgid "Ion startup error log:\n" -msgstr "Záznam chyb pøi startu Ionu:\n" +msgstr "Záznam chyb pÅ™i startu Ionu:\n" #: ../ion/ion.c:230 ../pwm/pwm.c:180 msgid "Refusing to start due to encountered errors." -msgstr "Odmítám se spustit kvùli zaznamenaným chybám." +msgstr "Odmítám se spustit kvůli zaznamenaným chybám." #: ../pwm/pwm.c:169 msgid "PWM startup error log:\n" -msgstr "Záznam chyb pøi startu PWM:\n" +msgstr "Záznam chyb pÅ™i startu PWM:\n" #: ../../libextl-3/readconfig.c:86 msgid "$HOME not set" -msgstr "Promìnná $HOME není nastavená" +msgstr "PromÄ›nná $HOME není nastavená" #: ../../libextl-3/readconfig.c:113 msgid "User directory not set. Unable to set session directory." -msgstr "U¾ivatelský adresáø není nastaven. Nemohu nastavit adresáø pro sezení." +msgstr "Uživatelský adresář není nastaven. Nemohu nastavit adresář pro sezení." #: ../../libextl-3/readconfig.c:254 #, c-format msgid "Falling back to %s." -msgstr "Nouzovì pou¾ívám %s." +msgstr "NouzovÄ› používám %s." #: ../../libextl-3/readconfig.c:474 #, c-format msgid "Unable to create session directory \"%s\"." -msgstr "Nemohu vytvoøit adresáø pro sezení \"%s\"." +msgstr "Nemohu vytvoÅ™it adresář pro sezení \"%s\"." #: ../../libextl-3/luaextl.c:117 msgid "Lua stack full." -msgstr "Lua zásobník je plný." +msgstr "Lua zásobník je plný." # #: ../../libextl-3/luaextl.c:143 msgid "Unknown Lua error." -msgstr "Neznámá Lua chyba." +msgstr "Neznámá Lua chyba." #: ../../libextl-3/luaextl.c:490 msgid "Stack trace:" -msgstr "Výpis zásobníku:" +msgstr "Výpis zásobníku:" #: ../../libextl-3/luaextl.c:497 #, c-format @@ -818,7 +818,7 @@ "(Unable to get debug info for level %d)" msgstr "" "\n" -"(Nemohu získat ladicí informace pro úroveò %d)" +"(Nemohu získat ladicí informace pro úroveň %d)" #: ../../libextl-3/luaextl.c:515 msgid "" @@ -826,11 +826,11 @@ " [Skipping unnamed C functions.]" msgstr "" "\n" -" [Pøeskakuji nepojmenované C funkce.]" +" [PÅ™eskakuji nepojmenované C funkce.]" #: ../../libextl-3/luaextl.c:566 msgid "Internal error." -msgstr "Interní chyba." +msgstr "Interní chyba." #: ../../libextl-3/luaextl.c:585 msgid "Unable to initialize Lua." @@ -840,26 +840,26 @@ msgid "" "Too many return values. Use a C compiler that has va_copy to support more." msgstr "" -"Pøíli¹ mnoho návratových hodnot. Pou¾ijte kompilátor C, který obsahuje " +"PříliÅ¡ mnoho návratových hodnot. Použijte kompilátor C, který obsahuje " "va_copy." #: ../../libextl-3/luaextl.c:1489 msgid "Returned dead object." -msgstr "Vrácen mrtvý objekt." +msgstr "Vrácen mrtvý objekt." #: ../../libextl-3/luaextl.c:1492 #, c-format msgid "Invalid return value (expected '%c', got lua type \"%s\")." -msgstr "Neplatná návratová hodnota (oèekávána %c, obdr¾en lua typ \"%s\")." +msgstr "Neplatná návratová hodnota (oÄekávána %c, obdržen lua typ \"%s\")." #: ../../libextl-3/luaextl.c:1528 ../../libextl-3/luaextl.c:1883 msgid "Stack full." -msgstr "Zásobník je plný." +msgstr "Zásobník je plný." #: ../../libextl-3/luaextl.c:1894 #, c-format msgid "Argument %d to %s is a dead object." -msgstr "Argument %d pro %s je mrtvý objekt." +msgstr "Argument %d pro %s je mrtvý objekt." #: ../../libextl-3/luaextl.c:1897 #, c-format @@ -867,41 +867,41 @@ "Argument %d to %s is of invalid type. (Argument template is '%s', got lua " "type %s)." msgstr "" -"Argument %d pro %s má neplatný typ. (©ablona argumentu je '%s', dostal jsem " +"Argument %d pro %s má neplatný typ. (Å ablona argumentu je '%s', dostal jsem " "lua typ %s)." #: ../../libextl-3/luaextl.c:1960 msgid "L1 call handler upvalues corrupt." -msgstr "Obsluha volání L1 je poru¹ená." +msgstr "Obsluha volání L1 je poruÅ¡ená." #: ../../libextl-3/luaextl.c:1965 msgid "Called function has been unregistered." -msgstr "Volaná funkce byla byla odregistrována." +msgstr "Volaná funkce byla byla odregistrována." #: ../../libextl-3/luaextl.c:1976 #, c-format msgid "Attempt to call an unsafe function \"%s\" in restricted mode." -msgstr "Pokus o volání nebezpeèné funkce \"%s\" v omezeném re¾imu." +msgstr "Pokus o volání nebezpeÄné funkce \"%s\" v omezeném režimu." #: ../../libextl-3/luaextl.c:2089 #, c-format msgid "" "Function '%s' has more parameters than the level 1 call handler can handle" -msgstr "Funkce '%s' má víc parametrù, ne¾ lze zpracovat obsluhou v 1. úrovni" +msgstr "Funkce '%s' má víc parametrů, než lze zpracovat obsluhou v 1. úrovni" # #: ../../libextl-3/luaextl.c:2480 msgid "Maximal serialisation depth reached." -msgstr "Dosa¾ena maximální hloubka serializace." +msgstr "Dosažena maximální hloubka serializace." #: ../../libextl-3/luaextl.c:2501 #, c-format -msgid "Unable to serialise type %s." +msgid "Unable to serialize type %s." msgstr "Nemohu serializovat typ %s." #: ../../libextl-3/luaextl.c:2532 msgid "-- This file has been generated by %s. Do not edit.\n" -msgstr "-- Tento soubor byl vytvoøen %sem. Neupravujte jej.\n" +msgstr "-- Tento soubor byl vytvoÅ™en %sem. Neupravujte jej.\n" #: ../../libextl-3/misc.c:17 #, c-format @@ -909,99 +909,99 @@ "Type checking failed in level 2 call handler for parameter %d (got %s, " "expected %s)." msgstr "" -"Kontrola typu selhala ve druhé úrovni obsluhy volání pro parametr %d " -"(obdr¾el %s, oèekával %s)." +"Kontrola typu selhala ve druhé úrovni obsluhy volání pro parametr %d " +"(obdržel %s, oÄekával %s)." msgid "Scroll the message or completions up/down." -msgstr "Roluje zprávu nebo seznam dokonèení nahoru/dolù." +msgstr "Roluje zprávu nebo seznam dokonÄení nahoru/dolů." msgid "Close the query/message box, not executing bound actions." -msgstr "Zavøe okno s dotazem/zprávou, ani¾ by se spustily svázané akce.." +msgstr "ZavÅ™e okno s dotazem/zprávou, aniž by se spustily svázané akce.." msgid "Close the query and execute bound action." -msgstr "Zavøe dotaz a spustí svázanou akci." +msgstr "ZavÅ™e dotaz a spustí svázanou akci." msgid "Complete from history" -msgstr "Doplní z historie." +msgstr "Doplní z historie." msgid "Try to complete the entered text or cycle through completions." -msgstr "Zkusí doplnit zadaný text nebo bude cyklovat mezi mo¾nostmi." +msgstr "Zkusí doplnit zadaný text nebo bude cyklovat mezi možnostmi." # msgid "Clear mark/cancel selection." -msgstr "Sma¾e znaèku/zru¹í výbìr." +msgstr "Smaže znaÄku/zruší výbÄ›r." # msgid "Copy selection." -msgstr "Zkopíruje výbìr." +msgstr "Zkopíruje výbÄ›r." # msgid "Cut selection." -msgstr "Vyjme výbìr." +msgstr "Vyjme výbÄ›r." # msgid "Set mark/begin selection." -msgstr "Nastaví znaèku/zaèátek výbìru." +msgstr "Nastaví znaÄku/zaÄátek výbÄ›ru." msgid "Paste from the clipboard." -msgstr "Vlo¾í ze schránky." +msgstr "Vloží ze schránky." msgid "Select next/previous (matching) history entry." -msgstr "Vybere dal¹í/pøedchozí (odpovídající) polo¾ku historie." +msgstr "Vybere další/pÅ™edchozí (odpovídající) položku historie." msgid "Transpose characters." msgstr "Transponuje znaky." msgid "Delete the whole line." -msgstr "Sma¾e celý øádek." +msgstr "Smaže celý řádek." msgid "Delete to end of line." -msgstr "Sma¾e text do konce øádky." +msgstr "Smaže text do konce řádky." msgid "Delete one word forward/backward." -msgstr "Sma¾e slovo pøed/za kurzorem." +msgstr "Smaže slovo pÅ™ed/za kurzorem." msgid "Delete previous character." -msgstr "Sma¾e pøedchozí znak." +msgstr "Smaže pÅ™edchozí znak." msgid "Delete next character." -msgstr "Sma¾e následující znak." +msgstr "Smaže následující znak." msgid "Skip one word forward/backward." -msgstr "Pøeskoèí slovo dopøedu/dozadu." +msgstr "PÅ™eskoÄí slovo dopÅ™edu/dozadu." msgid "Go to end/beginning." -msgstr "Skoèí na konec/zaèátek." +msgstr "SkoÄí na konec/zaÄátek." msgid "Move one character forward/backward." -msgstr "Posune se o znak vpøed/vzad." +msgstr "Posune se o znak vpÅ™ed/vzad." msgid "Kill" -msgstr "Ukonèit" +msgstr "UkonÄit" msgid "Attach tagged" -msgstr "Pøipojit oznaèené" +msgstr "PÅ™ipojit oznaÄené" msgid "Rename" -msgstr "Pøejmenovat" +msgstr "PÅ™ejmenovat" msgid "Close" -msgstr "Zavøít" +msgstr "Zavřít" msgid "De/reattach" -msgstr "Od/pøipojit" +msgstr "Od/pÅ™ipojit" msgid "Toggle tag" -msgstr "(Od)znaèit" +msgstr "(Od)znaÄit" msgid "Window info" -msgstr "Informace o oknì" +msgstr "Informace o oknÄ›" msgid "Clear tags" -msgstr "Vyèistit znaèky" +msgstr "VyÄistit znaÄky" msgid "Exit" -msgstr "Ukonèit" +msgstr "UkonÄit" msgid "Restart TWM" msgstr "Restartovat TWM" @@ -1010,10 +1010,10 @@ msgstr "Restartovat" msgid "Save" -msgstr "Ulo¾it" +msgstr "Uložit" msgid "Session" -msgstr "Sezení" +msgstr "Sezení" msgid "Styles" msgstr "Styly" @@ -1022,13 +1022,13 @@ msgstr "O Ionu" msgid "Help" -msgstr "Nápovìda" +msgstr "NápovÄ›da" msgid "Lock screen" msgstr "Zamknout obrazovku" msgid "Terminal" -msgstr "Terminál" +msgstr "Terminál" # msgid "Run..." @@ -1036,186 +1036,186 @@ # msgid "Move in specified direction." -msgstr "Posune se v zadaném smìru." +msgstr "Posune se v zadaném smÄ›ru." msgid "Shrink in specified direction." -msgstr "Zmen¹uje v zadaném smìru." +msgstr "ZmenÅ¡uje v zadaném smÄ›ru." # msgid "Grow in specified direction." -msgstr "Roste v zadaném smìru." +msgstr "Roste v zadaném smÄ›ru." msgid "End the resize mode." -msgstr "Ukonèí re¾im zmìny velikosti." +msgstr "UkonÄí režim zmÄ›ny velikosti." msgid "Cancel the resize mode." -msgstr "Zru¹í re¾im zmìny velikosti." +msgstr "Zruší režim zmÄ›ny velikosti." msgid "Move the frame." -msgstr "Pøesune rám." +msgstr "PÅ™esune rám." msgid "Lower the frame." -msgstr "Pøesune rám do pozadí" +msgstr "PÅ™esune rám do pozadí" # msgid "Raise the frame." -msgstr "Pøesune rám do popøedí." +msgstr "PÅ™esune rám do popÅ™edí." msgid "Toggle shade mode" -msgstr "Pøepne stínový re¾im" +msgstr "PÅ™epne stínový režim" msgid "Attach tagged objects to this frame." -msgstr "Pøipojí oznaèené objekty k tomuto rámu." +msgstr "PÅ™ipojí oznaÄené objekty k tomuto rámu." msgid "Maximize the frame horizontally/vertically." -msgstr "Maximalizuje rám horizontálnì/vertikálnì." +msgstr "Maximalizuje rám horizontálnÄ›/vertikálnÄ›." msgid "Move current object within the frame left/right." -msgstr "Pøesune objekt v rámu vlevo/vpravo." +msgstr "PÅ™esune objekt v rámu vlevo/vpravo." msgid "Switch to next/previous object within the frame." -msgstr "Pøepne se na dal¹í/pøedchozí objekt v rámu." +msgstr "PÅ™epne se na další/pÅ™edchozí objekt v rámu." msgid "Switch to n:th object within the frame." -msgstr "Pøepne se do n-tého objektu v rámu." +msgstr "PÅ™epne se do n-tého objektu v rámu." # msgid "Query for a client window to attach." -msgstr "Dotá¾e se na klientské okno, které má pøipojit." +msgstr "Dotáže se na klientské okno, které má pÅ™ipojit." msgid "Move objects between frames by dragging and dropping the tab." -msgstr "Pøesune objekty mezi rámy pomocí ta¾ení za zálo¾ku." +msgstr "PÅ™esune objekty mezi rámy pomocí tažení za záložku." msgid "Resize the frame." -msgstr "Zmìní velikost rámu." +msgstr "ZmÄ›ní velikost rámu." msgid "Switch the frame to display the object indicated by the tab." -msgstr "Pøepne rám, aby zobrazoval objekt urèený zálo¾kou." +msgstr "PÅ™epne rám, aby zobrazoval objekt urÄený záložkou." msgid "Begin move/resize mode." -msgstr "Zahájí re¾im pøesunu/zmìny velikosti." +msgstr "Zahájí režim pÅ™esunu/zmÄ›ny velikosti." msgid "Display context menu." -msgstr "Zobrazí kontextové menu." +msgstr "Zobrazí kontextové menu." # msgid "Query for a client window to go to." -msgstr "Dotá¾e se na klientské okno, do nìho¾ má pøejít." +msgstr "Dotáže se na klientské okno, do nÄ›hož má pÅ™ejít." msgid "Query for workspace to go to or create a new one." -msgstr "Zeptá se na pracovní plochu, na kterou má pøejít, nebo ji vytvoøit." +msgstr "Zeptá se na pracovní plochu, na kterou má pÅ™ejít, nebo ji vytvoÅ™it." msgid "Query for file to view." -msgstr "Zeptá se na soubor, který chcete zobrazit." +msgstr "Zeptá se na soubor, který chcete zobrazit." msgid "Query for file to edit." -msgstr "Zeptá se na soubor, který chcete upravit." +msgstr "Zeptá se na soubor, který chcete upravit." msgid "Query for host to connect to with SSH." -msgstr "Zeptá se na jméno poèítaèe, ke kterému se má pøipojit pomocí SSH." +msgstr "Zeptá se na jméno poÄítaÄe, ke kterému se má pÅ™ipojit pomocí SSH." msgid "Query for Lua code to execute." -msgstr "Zeptá se na lua kód, který má vykonat." +msgstr "Zeptá se na lua kód, který má vykonat." msgid "Query for command line to execute." -msgstr "Zeptá se na pøíkaz, který má spustit." +msgstr "Zeptá se na příkaz, který má spustit." # msgid "Run a terminal emulator." -msgstr "Spustí emulátor terminálu." +msgstr "Spustí emulátor terminálu." msgid "Show the Ion manual page." -msgstr "Zobrazí manuálovou stránku Ionu." +msgstr "Zobrazí manuálovou stránku Ionu." msgid "Query for manual page to be displayed." -msgstr "Zeptá se na manuálovou stánku, kterou má zobrazit." +msgstr "Zeptá se na manuálovou stánku, kterou má zobrazit." msgid "Toggle tag of current object." -msgstr "Pøepne oznaèení aktuálního objektu." +msgstr "PÅ™epne oznaÄení aktuálního objektu." msgid "Detach (float) or reattach an object to its previous location." -msgstr "Odpojí nebo znovu pøipojí objekt z/do pùvodního umístìní." +msgstr "Odpojí nebo znovu pÅ™ipojí objekt z/do původního umístÄ›ní." msgid "Close current object." -msgstr "Zavøe aktuální objekt." +msgstr "ZavÅ™e aktuální objekt." msgid "Toggle client window group full-screen mode" -msgstr "Pøepne skupinu klientského okna do celoobrazovkového re¾imu." +msgstr "PÅ™epne skupinu klientského okna do celoobrazovkového režimu." # msgid "" "Send next key press to the client window. Some programs may not allow this " "by default." msgstr "" -"Po¹le následující stisk klávesy klientskému oknu. Nìkteré programy to " -"implicitnì nepovolují." +"PoÅ¡le následující stisk klávesy klientskému oknu. NÄ›které programy to " +"implicitnÄ› nepovolují." # msgid "Kill client owning the client window." -msgstr "Ukonèí klienta vlastnícího klientské okno." +msgstr "UkonÄí klienta vlastnícího klientské okno." # msgid "" "Nudge the client window. This might help with some programs' resizing " "problems." msgstr "" -"Postrèí klientské okno. To mù¾e pomoci nìkterým programùm, které mají " -"problémy se zmìnou velikosti." +"PostrÄí klientské okno. To může pomoci nÄ›kterým programům, které mají " +"problémy se zmÄ›nou velikosti." msgid "Raise focused object, if possible." -msgstr "Pokud je to mo¾né, pøesune zamìøený objekt nahoru." +msgstr "Pokud je to možné, pÅ™esune zaměřený objekt nahoru." msgid "Backward-circulate focus." msgstr "Cykluje vzad." msgid "Forward-circulate focus." -msgstr "Cykluje vpøed." +msgstr "Cykluje vpÅ™ed." msgid "Display the window list menu." -msgstr "Zobrazí menu se seznamem oken." +msgstr "Zobrazí menu se seznamem oken." msgid "Display the main menu." -msgstr "Zobrazí hlavní menu." +msgstr "Zobrazí hlavní menu." # # msgid "Create a new workspace of chosen default type." -msgstr "Vytvoøí novou pracovní plochu vybraného typu." +msgstr "Vytvoří novou pracovní plochu vybraného typu." # msgid "Go to next/previous screen on multihead setup." -msgstr "Ve víceobrazovkovém nastavení pøejde na dal¹í/pøedchozí obrazovku." +msgstr "Ve víceobrazovkovém nastavení pÅ™ejde na další/pÅ™edchozí obrazovku." # msgid "Go to n:th screen on multihead setup." -msgstr "U víceobrazovkového nastavení pøejde na n-tou obrazovku." +msgstr "U víceobrazovkového nastavení pÅ™ejde na n-tou obrazovku." # msgid "Clear all tags." -msgstr "Vyèistí v¹echny znaèky." +msgstr "VyÄistí vÅ¡echny znaÄky." msgid "Go to first region demanding attention or previously active one." msgstr "" -"Pøejde do prvního regionu vy¾adujícího pozornost nebo do pøedchozího " -"aktivního." +"PÅ™ejde do prvního regionu vyžadujícího pozornost nebo do pÅ™edchozího " +"aktivního." # msgid "Switch to next/previous object within current screen." -msgstr "Pøepne se na dal¹í/pøedchozí objekt v aktuální obrazovce." +msgstr "PÅ™epne se na další/pÅ™edchozí objekt v aktuální obrazovce." # msgid "" "Switch to n:th object (workspace, full screen client window) within current " "screen." msgstr "" -"Pøepne se na n-tý objekt (pracovní plochu, celoobrazovkové okno) na aktuální " +"PÅ™epne se na n-tý objekt (pracovní plochu, celoobrazovkové okno) na aktuální " "obrazovce." msgid "List" msgstr "Seznam" msgid "New" -msgstr "Nový" +msgstr "Nový" msgid "Dillo" msgstr "Dillo" @@ -1240,16 +1240,16 @@ # msgid "Workspaces" -msgstr "Pracovní plochy" +msgstr "Pracovní plochy" msgid "Programs" msgstr "Programy" msgid "Show the PWM manual page." -msgstr "Zobrazí manuálovou stránku PWM." +msgstr "Zobrazí manuálovou stránku PWM." msgid "Toggle scratchpad." -msgstr "Zapne poznámkový blok." +msgstr "Zapne poznámkový blok." msgid "" "\n" @@ -1259,94 +1259,94 @@ "%sXID: 0x%x" msgstr "" "\n" -"%sTøída: %s\n" +"%sTřída: %s\n" "%sRole: %s\n" "%sInstance: %s\n" "%sXID: 0x%x" msgid "No entry '%s'" -msgstr "®ádný záznam '%s'" +msgstr "Žádný záznam '%s'" msgid "%s:" msgstr "%s:" msgid "Missing submenu " -msgstr "Chybìjící podmenu" +msgstr "ChybÄ›jící podmenu" msgid "Unknown menu %s." -msgstr "Neznámé menu %s." +msgstr "Neznámé menu %s." msgid "Lua code:" -msgstr "Lua kód:" +msgstr "Lua kód:" msgid "Manual page (%s):" -msgstr "Manuálová stránka (%s):" +msgstr "Manuálová stránka (%s):" msgid "SSH to:" msgstr "SSH na:" msgid "Failed to open ~/.ssh/config" -msgstr "Selhalo otevøení ~/.ssh/config" +msgstr "Selhalo otevÅ™ení ~/.ssh/config" msgid "Failed to open ~/.ssh/known_hosts" -msgstr "Selhalo otevøení ~/.ssh/known_hosts" +msgstr "Selhalo otevÅ™ení ~/.ssh/known_hosts" msgid "Run:" msgstr "Spustit:" msgid "View file:" -msgstr "Prohlédnout soubor:" +msgstr "Prohlédnout soubor:" msgid "Edit file:" msgstr "Upravit soubor:" msgid "Workspace name:" -msgstr "Název pracovní plochy:" +msgstr "Název pracovní plochy:" msgid "Frame name:" -msgstr "Název rámu:" +msgstr "Název rámu:" msgid "Restart Notion (y/n)?" msgstr "Restartovat Notion (y/n)?" msgid "Exit Notion/Shutdown session (y/n)?" -msgstr "Ukonèit Notion/ukonèit sezení (y/n)?" +msgstr "UkonÄit Notion/ukonÄit sezení (y/n)?" msgid "Go to or create workspace:" -msgstr "Vytvoøit nebo pøejít na pracovní plochu:" +msgstr "VytvoÅ™it nebo pÅ™ejít na pracovní plochu:" msgid "Attach window:" -msgstr "Pøipojit okno:" +msgstr "PÅ™ipojit okno:" msgid "Go to window:" -msgstr "Jít do okna:" +msgstr "Jít do okna:" msgid "New workspace layout (default):" -msgstr "Rozlo¾ení nové pracovní plochy (default):" +msgstr "Rozložení nové pracovní plochy (default):" msgid "Unknown error" -msgstr "Neznámá chyba" +msgstr "Neznámá chyba" msgid "Unknown layout" -msgstr "Neznámé rozlo¾ení." +msgstr "Neznámé rozložení." msgid "Cannot attach: different root windows." -msgstr "Nemohu pøipojit: rùzná koøenová okna." +msgstr "Nemohu pÅ™ipojit: různá koÅ™enová okna." msgid "Could not find client window %s." -msgstr "Nemohu najít klientské okno %s." +msgstr "Nemohu najít klientské okno %s." msgid "Too much result data" -msgstr "Pøíli¹ mnoho výsledkù" +msgstr "PříliÅ¡ mnoho výsledků" msgid "Save look selection in %s?" -msgstr "Ulo¾it nastavení vzhledu do %s?" +msgstr "Uložit nastavení vzhledu do %s?" msgid "Cannot save selection." -msgstr "Nemohu ulo¾it výbìr." +msgstr "Nemohu uložit výbÄ›r." msgid "Unable to append to non-table menu" -msgstr "Nelze pøidat do netabulkového menu" +msgstr "Nelze pÅ™idat do netabulkového menu" msgid "" "Making the following minimal emergency mappings:\n" @@ -1356,7 +1356,7 @@ " Mod1+C -> close\n" " Mod1+K P/N -> WFrame.switch_next/switch_prev\n" msgstr "" -"Vytváøím nouzové pøiøazení kláves:\n" +"Vytvářím nouzové pÅ™iÅ™azení kláves:\n" " F2 -> xterm\n" " F11 -> restart\n" " F12 -> exit\n" @@ -1364,105 +1364,105 @@ " Mod1+K P/N -> WFrame.switch_next/switch_prev\n" msgid "Recursive table - unable to deepcopy" -msgstr "Rekurzivní tabulka - nemohu provést hlubokou kopii" +msgstr "Rekurzivní tabulka - nemohu provést hlubokou kopii" msgid "Frame" -msgstr "Rám" +msgstr "Rám" msgid "Screen" msgstr "Obrazovka" # msgid "Workspace" -msgstr "Pracovní plocha" +msgstr "Pracovní plocha" msgid "Tiling" -msgstr "Dla¾dice" +msgstr "Dlaždice" msgid "Tiled frame" -msgstr "Dla¾dicový rám" +msgstr "Dlaždicový rám" msgid "Floating frame" -msgstr "Plovoucí rám" +msgstr "Plovoucí rám" msgid "Context menu:" -msgstr "Kontextové menu:" +msgstr "Kontextové menu:" msgid "Main menu:" -msgstr "Hlavní menu:" +msgstr "Hlavní menu:" msgid "Invalid guard %s." -msgstr "Neplatná ochrana %s." +msgstr "Neplatná ochrana %s." msgid "Error compiling guard: %s" -msgstr "Chyba pøi sestavení strá¾ce: %s" +msgstr "Chyba pÅ™i sestavení strážce: %s" msgid "Error in command string: " -msgstr "Chyba v pøíkazu: " +msgstr "Chyba v příkazu: " msgid "Invalid command" -msgstr "Neplatný pøíkaz" +msgstr "Neplatný příkaz" msgid "Not a directory." -msgstr "Není adresáøem." +msgstr "Není adresářem." msgid "Could not find %s" -msgstr "Nemohu najít %s" +msgstr "Nemohu najít %s" msgid "ion-statusd quit." -msgstr "ion-statusd konèí." +msgstr "ion-statusd konÄí." msgid "Errors starting ion-statusd:\n" -msgstr "Chyba pøi startu ion-statusd:\n" +msgstr "Chyba pÅ™i startu ion-statusd:\n" msgid "Failed to start ion-statusd." -msgstr "Selhalo spu¹tìní ion-statusd." +msgstr "Selhalo spuÅ¡tÄ›ní ion-statusd." msgid "Screen not found." msgstr "Obrazovka nebyla nalezna." msgid "Screen already has an stdisp. Refusing to create a statusbar." -msgstr "Obrazovka ji¾ obsahuje stdisp. Odmítám vytvoøit stavový øádek." +msgstr "Obrazovka již obsahuje stdisp. Odmítám vytvoÅ™it stavový řádek." msgid "Failed to create statusbar." -msgstr "Selhalo vytvoøení stavového øádku." +msgstr "Selhalo vytvoÅ™ení stavového řádku." msgid "Split current frame vertically." -msgstr "Rozpùlí rám vertikálnì." +msgstr "Rozpůlí rám vertikálnÄ›." msgid "Go to frame above/below/right/left of current frame." -msgstr "Pøejde do rámu nad/pod/vpravo/vlevo od aktuálního rámu." +msgstr "PÅ™ejde do rámu nad/pod/vpravo/vlevo od aktuálního rámu." msgid "Split current frame horizontally." -msgstr "Rozpùlí rám horizontálnì." +msgstr "Rozpůlí rám horizontálnÄ›." msgid "Destroy current frame." -msgstr "Znièí aktuální rám." +msgstr "ZniÄí aktuální rám." msgid "Tile frame, if no tiling exists on the workspace" msgstr "" -"Zmìní rám na dla¾dice (pokud zatím dla¾dice na pracovní plo¹e neexistují)." +"ZmÄ›ní rám na dlaždice (pokud zatím dlaždice na pracovní ploÅ¡e neexistují)." msgid "Destroy frame" -msgstr "Znièit rám" +msgstr "ZniÄit rám" msgid "Split vertically" -msgstr "Rozpùlit vertikálnì" +msgstr "Rozpůlit vertikálnÄ›" msgid "Split horizontally" -msgstr "Rozpùlit horizontálnì" +msgstr "Rozpůlit horizontálnÄ›" msgid "Flip" -msgstr "Obrátit" +msgstr "Obrátit" msgid "Transpose" msgstr "Transponovat" msgid "Untile" -msgstr "Zru¹it dla¾dice" +msgstr "ZruÅ¡it dlaždice" msgid "Float split" -msgstr "Plovoucí okraj" +msgstr "Plovoucí okraj" msgid "At left" msgstr "Vlevo" @@ -1471,33 +1471,33 @@ msgstr "Vpravo" msgid "Above" -msgstr "Nahoøe" +msgstr "NahoÅ™e" msgid "Below" msgstr "Dole" msgid "At root" -msgstr "Na koøenu" +msgstr "Na koÅ™enu" msgid "New tiling" -msgstr "Vytvoøit dla¾dice" +msgstr "VytvoÅ™it dlaždice" msgid "Close the menu." -msgstr "Zavøe menu." +msgstr "ZavÅ™e menu." # # msgid "Activate current menu entry." -msgstr "Aktivuje vybranou polo¾ku v menu." +msgstr "Aktivuje vybranou položku v menu." msgid "Select next/previous menu entry." -msgstr "V menu vybere dal¹í/pøedchozí polo¾ku." +msgstr "V menu vybere další/pÅ™edchozí položku." msgid "Clear the menu's typeahead find buffer." -msgstr "Vyma¾e buffer pro dopøedné hledání v menu." +msgstr "Vymaže buffer pro dopÅ™edné hledání v menu." msgid "Toggle floating dock." -msgstr "Zapne plovoucí dok." +msgstr "Zapne plovoucí dok." msgid "Pos-TL" msgstr "Pozice LH" @@ -1512,28 +1512,28 @@ msgstr "Pozice PD" msgid "Grow-L" -msgstr "Rùst vlevo" +msgstr "Růst vlevo" msgid "Grow-R" -msgstr "Rùst vpravo" +msgstr "Růst vpravo" msgid "Grow-U" -msgstr "Rùst nahoru" +msgstr "Růst nahoru" msgid "Grow-D" -msgstr "Rùst dolù" +msgstr "Růst dolů" msgid "press" msgstr "stisk" msgid "click" -msgstr "kliknutí" +msgstr "kliknutí" msgid "drag" -msgstr "ta¾ení" +msgstr "tažení" msgid "double click" -msgstr "dvojité kliknutí" +msgstr "dvojité kliknutí" msgid "%s %s" msgstr "%s %s" @@ -1544,29 +1544,29 @@ #~ msgid "" #~ "Unable to unsplit: Could not move client windows elsewhere within the " #~ "tiling." -#~ msgstr "Nemohu slouèit: Nemohu pøesunout klientské okno nìkam do dla¾dic." +#~ msgstr "Nemohu slouÄit: Nemohu pÅ™esunout klientské okno nÄ›kam do dlaždic." #~ msgid "'based_on' for %s points back to the style itself." -#~ msgstr "Èást 'based_on' stylu %s ukazuje sama na sebe." +#~ msgstr "Část 'based_on' stylu %s ukazuje sama na sebe." #~ msgid "Unknown base style. \"%s\"" -#~ msgstr "Neznámý základní styl. \"%s\"" +#~ msgstr "Neznámý základní styl. \"%s\"" #~ msgid "Tag current object within the frame." -#~ msgstr "Oznaèí aktuální objekt v rámu." +#~ msgstr "OznaÄí aktuální objekt v rámu." #~ msgid "Xinerama sanity check failed; overlapping screens detected." -#~ msgstr "Kontrola Xineramy selhala: byly nalezeny pøekrývající se obrazovky." +#~ msgstr "Kontrola Xineramy selhala: byly nalezeny pÅ™ekrývající se obrazovky." #~ msgid "Xinerama sanity check failed; zero size detected." -#~ msgstr "Kontrola Xineramy selhala: byla nalezena nulová velikost." +#~ msgstr "Kontrola Xineramy selhala: byla nalezena nulová velikost." #~ msgid "" #~ "Don't know how to get Xinerama information for multiple X root windows." -#~ msgstr "Nevím, jak zpracovat informace z Xineramy pro více koøenových oken." +#~ msgstr "Nevím, jak zpracovat informace z Xineramy pro více koÅ™enových oken." #~ msgid "Error retrieving Xinerama information." -#~ msgstr "Chyba pøi získávání informaci z Xineramy." +#~ msgstr "Chyba pÅ™i získávání informaci z Xineramy." #~ msgid "Unable to setup Xinerama screen %d." #~ msgstr "Nemohu nastavit obrazovku Xineramy %d." @@ -1575,189 +1575,189 @@ #~ msgstr "Nemohu nastavit X obrazovku %d." #~ msgid "Refusing to destroy - not empty." -#~ msgstr "Odmítám zru¹it - není prázdné." +#~ msgstr "Odmítám zruÅ¡it - není prázdné." #~ msgid "Workspace not empty - refusing to destroy." -#~ msgstr "Pracovní plocha není prázdná - odmítám zru¹it." +#~ msgstr "Pracovní plocha není prázdná - odmítám zruÅ¡it." #~ msgid "Nil frame." -#~ msgstr "Prázdný rám." +#~ msgstr "Prázdný rám." #~ msgid "The frame is not managed by the workspace." -#~ msgstr "Rám není spravován pracovní plochou." +#~ msgstr "Rám není spravován pracovní plochou." #~ msgid "Already detached" -#~ msgstr "Ji¾ je odpojen" +#~ msgstr "Již je odpojen" #~ msgid "ion-statusd launch timeout." -#~ msgstr "Èas spou¹tìní ion-statusd vypr¹el." +#~ msgstr "ÄŒas spouÅ¡tÄ›ní ion-statusd vyprÅ¡el." #~ msgid "Use Xinerama screen information (default: 1/yes)" -#~ msgstr "Pou¾ít Xineramu (implicitnì: 1/ano)" +#~ msgstr "Použít Xineramu (implicitnÄ›: 1/ano)" #~ msgid "Ignored: not compiled with Xinerama support" -#~ msgstr "Ignorováno: program je sestaven bez podpory Xineramy" +#~ msgstr "Ignorováno: program je sestaven bez podpory Xineramy" #~ msgid "Invalid parameter to -xinerama." -#~ msgstr "Neplatný parametr pro -xinerama." +#~ msgstr "Neplatný parametr pro -xinerama." #~ msgid "Use Xinerama screen information (default: 0/no)" -#~ msgstr "Pou¾ít Xineramu (implicitnì: 0/ne) " +#~ msgstr "Použít Xineramu (implicitnÄ›: 0/ne) " #~ msgid "Detach window from tiled frame" -#~ msgstr "Odpojí okno od dla¾dicového rámu" +#~ msgstr "Odpojí okno od dlaždicového rámu" # #~ msgid "New workspace" -#~ msgstr "Nová pracovní plocha" +#~ msgstr "Nová pracovní plocha" #~ msgid "New empty workspace" -#~ msgstr "Nová prázdná pracovní plocha" +#~ msgstr "Nová prázdná pracovní plocha" # #~ msgid "Close workspace" -#~ msgstr "Zavøít pracovní plochu" +#~ msgstr "Zavřít pracovní plochu" #~ msgid "Unable to re-initialise workspace. Destroying." -#~ msgstr "Nemohu znovu inicializovat pracovní plochu. Nièím." +#~ msgstr "Nemohu znovu inicializovat pracovní plochu. NiÄím." #~ msgid "Refusing to close non-empty workspace." -#~ msgstr "Odmítám zavøít neprázdnou pracovní plochu." +#~ msgstr "Odmítám zavřít neprázdnou pracovní plochu." #~ msgid "Malfunctioning placement hook; condition #%d." -#~ msgstr "Nefunkèní volání pro umístìní; podmínka #%d." +#~ msgstr "NefunkÄní volání pro umístÄ›ní; podmínka #%d." #~ msgid "Resize the area." -#~ msgstr "Zmìní velikost oblasti." +#~ msgstr "ZmÄ›ní velikost oblasti." #~ msgid "Refresh list" #~ msgstr "Obnovit seznam" #~ msgid "Could not find a complete workspace class. Please load some modules." -#~ msgstr "Nemohu najít úplnou tøídu pracovní plochy. Zaveïte nìjaké moduly." +#~ msgstr "Nemohu najít úplnou třídu pracovní plochy. ZaveÄte nÄ›jaké moduly." #~ msgid "Failed to rescue some client windows." -#~ msgstr "Záchrana nìkterých klientských oken selhala." +#~ msgstr "Záchrana nÄ›kterých klientských oken selhala." #~ msgid "Same manager." -#~ msgstr "Stejný mana¾er." +#~ msgstr "Stejný manažer." # #~ msgid "Invalid split type parameter." -#~ msgstr "Neplatný parametr typu rozdìlení." +#~ msgstr "Neplatný parametr typu rozdÄ›lení." # #~ msgid "Failure to create a new frame." -#~ msgstr "Chyba pøi vytváøení nového rámu." +#~ msgstr "Chyba pÅ™i vytváření nového rámu." # #~ msgid "Region not managed by the workspace." -#~ msgstr "Oblast není spravována pracovní plochou." +#~ msgstr "Oblast není spravována pracovní plochou." #~ msgid "No geometry specified." -#~ msgstr "Nebyla zadána geometrie." +#~ msgstr "Nebyla zadána geometrie." #~ msgid "none" -#~ msgstr "¾ádná" +#~ msgstr "žádná" # #~ msgid "mail" -#~ msgstr "po¹ta" +#~ msgstr "poÅ¡ta" #~ msgid "" #~ "\n" #~ "Transients:\n" #~ msgstr "" #~ "\n" -#~ "Doèasná okna:\n" +#~ "DoÄasná okna:\n" #~ msgid "Workspace type (%s):" -#~ msgstr "Typ pracovní plochy (%s):" +#~ msgstr "Typ pracovní plochy (%s):" #~ msgid "Go to previous active object." -#~ msgstr "Pøejde na pøedchozí aktivní objekt." +#~ msgstr "PÅ™ejde na pÅ™edchozí aktivní objekt." # # #~ msgid "Toggle fullscreen mode of current client window." -#~ msgstr "Zapne celoobrazovkový re¾im u aktuálního klientského okna." +#~ msgstr "Zapne celoobrazovkový režim u aktuálního klientského okna." #~ msgid "WStatusBar expected." -#~ msgstr "Oèekáván WStatusBar." +#~ msgstr "OÄekáván WStatusBar." #~ msgid "Backwards-circulate focus and raise the newly focused frame." -#~ msgstr "Zpìtnì cykluje mezi rámy a pøesune je nahoru." +#~ msgstr "ZpÄ›tnÄ› cykluje mezi rámy a pÅ™esune je nahoru." #~ msgid "(Un)stick" -#~ msgstr "(Pøi/Od)lepit" +#~ msgstr "(PÅ™i/Od)lepit" # #~ msgid "Query for a client window to attach to active frame." -#~ msgstr "Zeptá se na klientské okno, které se má pøipojit k aktivnímu rámu." +#~ msgstr "Zeptá se na klientské okno, které se má pÅ™ipojit k aktivnímu rámu." #~ msgid "Raise/lower active frame." -#~ msgstr "Pøesune aktivní rám do popøedí/pozadí." +#~ msgstr "PÅ™esune aktivní rám do popÅ™edí/pozadí." #~ msgid "Unable to create workspace: no screen." -#~ msgstr "Nemohu vytvoøit pracovní plochu: obrazovka neexistuje." +#~ msgstr "Nemohu vytvoÅ™it pracovní plochu: obrazovka neexistuje." #~ msgid "load" -#~ msgstr "vytí¾ení" +#~ msgstr "vytížení" #~ msgid "Mozilla Firefox" #~ msgstr "Mozilla Firefox" #~ msgid "Circulate focus and raise the newly focused frame." -#~ msgstr "Cykluje mezi rámy a pøesune je nahoru." +#~ msgstr "Cykluje mezi rámy a pÅ™esune je nahoru." #~ msgid "Restart PWM" #~ msgstr "Restartovat PWM" #~ msgid "(Un)tag" -#~ msgstr "(Od)znaèit" +#~ msgstr "(Od)znaÄit" # #~ msgid "Could not find a root window." -#~ msgstr "Nemohu najít koøenové okno." +#~ msgstr "Nemohu najít koÅ™enové okno." #~ msgid "Caught fatal signal %d. Dying without deinit." -#~ msgstr "Zachycen signál %d. Umírám bez ulo¾ení." +#~ msgstr "Zachycen signál %d. Umírám bez uložení." #~ msgid "Caught signal %d. Dying." -#~ msgstr "Zachycen signál %d. Umírám." +#~ msgstr "Zachycen signál %d. Umírám." # #~ msgid "Object destroyed while deferred actions are still pending." -#~ msgstr "Objekt byl zru¹en, zatímco pozdr¾eé akce èekají na vyøízení." +#~ msgstr "Objekt byl zruÅ¡en, zatímco pozdržeé akce Äekají na vyřízení." #~ msgid "Unable to rescue \"%s\"." -#~ msgstr "Nemohu zachránit \"%s\"." +#~ msgstr "Nemohu zachránit \"%s\"." #~ msgid "Frame is not empty." -#~ msgstr "Rám není prázdný." +#~ msgstr "Rám není prázdný." # #~ msgid "No function given." -#~ msgstr "Nebyla zadána ¾ádná funkce." +#~ msgstr "Nebyla zadána žádná funkce." # #~ msgid "Frame not managed by the workspace." -#~ msgstr "Rám není spravován pracovní plochou." +#~ msgstr "Rám není spravován pracovní plochou." #~ msgid "Failed to rescue managed objects." -#~ msgstr "Záchrana spravovaných objektù selhala." +#~ msgstr "Záchrana spravovaných objektů selhala." #~ msgid "Split" -#~ msgstr "Rozdìlit" +#~ msgstr "RozdÄ›lit" #~ msgid "Failed to create a timer for statusbar." -#~ msgstr "Selhalo vytvoøení èasovaèe pro stavový pruh." +#~ msgstr "Selhalo vytvoÅ™ení ÄasovaÄe pro stavový pruh." #~ msgid "Vertically at root" -#~ msgstr "Vertikálnì na koøenu" +#~ msgstr "VertikálnÄ› na koÅ™enu" #~ msgid "Flip&transpose" -#~ msgstr "Obrátit&transponovat" +#~ msgstr "Obrátit&transponovat" #~ msgid "Horizontally at root" -#~ msgstr "Horizontálnì na koøenu" +#~ msgstr "HorizontálnÄ› na koÅ™enu" diff -Nru notion-3+2014010901/po/de.po notion-3+2015061300/po/de.po --- notion-3+2014010901/po/de.po 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/po/de.po 2015-06-13 14:37:26.000000000 +0000 @@ -866,7 +866,7 @@ #: ../libextl/luaextl.c:2501 #, c-format -msgid "Unable to serialise type %s." +msgid "Unable to serialize type %s." msgstr "Typ %s kann nicht serialisiert werden." #: ../libextl/luaextl.c:2532 diff -Nru notion-3+2014010901/po/fi.po notion-3+2015061300/po/fi.po --- notion-3+2014010901/po/fi.po 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/po/fi.po 2015-06-13 14:37:26.000000000 +0000 @@ -21,11 +21,11 @@ #: ../ioncore/conf-bindings.c:93 msgid "Insane key combination." -msgstr "Järjetön näppäinyhdistelmä." +msgstr "Järjetön näppäinyhdistelmä." #: ../ioncore/conf-bindings.c:97 msgid "Could not convert keysym to keycode." -msgstr "Näppäinsymbolin muunto näppäinkoodiksi epäonnistui." +msgstr "Näppäinsymbolin muunto näppäinkoodiksi epäonnistui." #: ../ioncore/conf-bindings.c:108 #, c-format @@ -34,23 +34,23 @@ #: ../ioncore/conf-bindings.c:113 msgid "Insane button combination." -msgstr "Järjetön nappiyhdistelmä." +msgstr "Järjetön nappiyhdistelmä." #: ../ioncore/conf-bindings.c:120 ../ioncore/conf-bindings.c:127 msgid "Insane modifier combination." -msgstr "Järjestön näppäinmuunninyhdistelmä." +msgstr "Järjestön näppäinmuunninyhdistelmä." #: ../ioncore/conf-bindings.c:165 #, c-format msgid "Can not wait on modifiers when no modifiers set in \"%s\"." msgstr "" -"Näppäinmuuntimia ei voida odottaa sidonnassa \"%s\", koska siinä ei ole " -"niitä." +"Näppäinmuuntimia ei voida odottaa sidonnassa \"%s\", koska siinä ei ole " +"niitä." #: ../ioncore/conf-bindings.c:183 #, c-format msgid "Unable to add binding %s." -msgstr "Ei voitu lisätä sidontaa %s." +msgstr "Ei voitu lisätä sidontaa %s." #: ../ioncore/conf-bindings.c:188 #, c-format @@ -60,12 +60,12 @@ #: ../ioncore/conf-bindings.c:228 #, c-format msgid "Unable to add submap for binding %s." -msgstr "Ei voida lisätä alikarttaa sidonnalle %s." +msgstr "Ei voida lisätä alikarttaa sidonnalle %s." # #: ../ioncore/conf-bindings.c:261 msgid "Binding type not set." -msgstr "Sidonnan tyyppiä ei ole asetettu." +msgstr "Sidonnan tyyppiä ei ole asetettu." #: ../ioncore/conf-bindings.c:271 #, c-format @@ -80,20 +80,20 @@ #: ../ioncore/conf-bindings.c:336 #, c-format msgid "Unable to get bindmap entry %d." -msgstr "Sidontakartan alkion %d haussa epäonnistuttiin." +msgstr "Sidontakartan alkion %d haussa epäonnistuttiin." #: ../ioncore/conf-bindings.c:378 msgid "Unable to convert keysym to string." -msgstr "Näppäinsymbolia muunto merkkijonoksi epäonnistui." +msgstr "Näppäinsymbolia muunto merkkijonoksi epäonnistui." #: ../ioncore/conf-bindings.c:392 msgid "Unable to convert button to string." -msgstr "Napin tunnistetteen muunto merkkijonoksi epäonnistui." +msgstr "Napin tunnistetteen muunto merkkijonoksi epäonnistui." # #: ../ioncore/event.c:110 msgid "Time request from X server failed." -msgstr "Ajan pyyntö X-palvelimelta epäonnistui." +msgstr "Ajan pyyntö X-palvelimelta epäonnistui." # #: ../ioncore/exec.c:185 @@ -107,7 +107,7 @@ #: ../ioncore/strings.c:264 #, c-format msgid "Error compiling regular expression: %s" -msgstr "Virhe säännölisen lausekkeen käännöksessä: %s" +msgstr "Virhe säännölisen lausekkeen käännöksessä: %s" #: ../ioncore/modules.c:155 msgid "Invalid module name." @@ -122,8 +122,8 @@ msgid "" "Module version information not found or version mismatch. Refusing to use." msgstr "" -"Moduulin versiotieto joko puuttuu tai on väärä. Näin ollen sitä " -"kieltäydytään käyttämästä." +"Moduulin versiotieto joko puuttuu tai on väärä. Näin ollen sitä " +"kieltäydytään käyttämästä." #: ../ioncore/modules.c:193 #, c-format @@ -133,7 +133,7 @@ #: ../ioncore/modules.c:217 ../../libextl-3/readconfig.c:388 #, c-format msgid "Unable to find '%s' on search path." -msgstr "Hakupolulta ei löytynyt '%s':ää." +msgstr "Hakupolulta ei löytynyt '%s':ää." #: ../ioncore/modules.c:288 msgid "Unknown module." @@ -141,7 +141,7 @@ #: ../ioncore/modules.c:296 msgid "Unable to initialise module." -msgstr "Moduulin alustus epäonnistui." +msgstr "Moduulin alustus epäonnistui." #: ../ioncore/modules.c:341 msgid "No module to load given." @@ -155,12 +155,12 @@ # #: ../ioncore/screen.c:382 msgid "Only workspace may not be destroyed/detached." -msgstr "Ainoata työpöytää ei voi tuhota/irroitaa." +msgstr "Ainoata työpöytää ei voi tuhota/irroitaa." # #: ../ioncore/screen.c:393 msgid "Screens may not be destroyed." -msgstr "Näyttöjä ei voi tuhota." +msgstr "Näyttöjä ei voi tuhota." #: ../ioncore/screen.c:429 msgid "Invalid offset." @@ -169,11 +169,11 @@ #: ../ioncore/screen.c:468 #, c-format msgid "Unable to create a workspace on screen %d." -msgstr "Työpöydän luonti ruudulle %d epäonnistui." +msgstr "Työpöydän luonti ruudulle %d epäonnistui." #: ../ioncore/sizehint.c:146 msgid "Invalid client-supplied width/height increment." -msgstr "Asiakkaan ilmoittama pysty/vaakalisäys koolle on virheellinen." +msgstr "Asiakkaan ilmoittama pysty/vaakalisäys koolle on virheellinen." #: ../ioncore/sizehint.c:154 msgid "Invalid client-supplied aspect-ratio." @@ -191,15 +191,15 @@ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" msgstr "" -"Tämä ohjelma on olennaisesti GNU vähäisemmän yleisen lisenssin (LGPL)\n" +"Tämä ohjelma on olennaisesti GNU vähäisemmän yleisen lisenssin (LGPL)\n" "version 2.1 alla, ellei komponenteissa muutoin mainita. Projektin\n" -"nimen Ion(tm) käyttöön liittyy lisäehtoja. Yksityiskohdat löydät\n" -"tiedostosta LICENSE, joka sinun olisi pitänyt saada tämän ohjelman\n" +"nimen Ion(tm) käyttöön liittyy lisäehtoja. Yksityiskohdat löydät\n" +"tiedostosta LICENSE, joka sinun olisi pitänyt saada tämän ohjelman\n" "mukana.\n" "\n" -"Tätä ohjelmaa levitetään siinä toivossa, että se olisi hyödyllinen,\n" -"mutta ILMAN MITÄÄN TAKUUTA; ilman edes hiljaista takuuta kaupallisesti\n" -"hyväksyttävästä laadusta tai soveltuvuudesta tiettyyn tarkoitukseen.\n" +"Tätä ohjelmaa levitetään siinä toivossa, että se olisi hyödyllinen,\n" +"mutta ILMAN MITÄÄN TAKUUTA; ilman edes hiljaista takuuta kaupallisesti\n" +"hyväksyttävästä laadusta tai soveltuvuudesta tiettyyn tarkoitukseen.\n" #: ../ioncore/ioncore.c:160 msgid "No encoding given in LC_CTYPE." @@ -208,32 +208,32 @@ #: ../ioncore/ioncore.c:478 #, c-format msgid "Could not connect to X display '%s'" -msgstr "Yhteydenotto X-palvelimeen '%s' epäonnistui." +msgstr "Yhteydenotto X-palvelimeen '%s' epäonnistui." #: ../ioncore/ioncore.c:531 msgid "Could not find a screen to manage." -msgstr "Yhtään hallittavissa olevaa juuri-ikkunaa ei löytynyt." +msgstr "Yhtään hallittavissa olevaa juuri-ikkunaa ei löytynyt." #: ../ioncore/xic.c:35 msgid "Failed to open input method." -msgstr "Syöttömenetelmän avaaminen epäonnistui." +msgstr "Syöttömenetelmän avaaminen epäonnistui." #: ../ioncore/xic.c:40 msgid "Input method doesn't support any style." -msgstr "Syöttömenetelmä ei tue yhtään syöttötapaa." +msgstr "Syöttömenetelmä ei tue yhtään syöttötapaa." #: ../ioncore/xic.c:55 msgid "input method doesn't support my preedit type." -msgstr "Syöttömenetelmä ei tue kaivattua esimuokkaustyyliä." +msgstr "Syöttömenetelmä ei tue kaivattua esimuokkaustyyliä." #: ../ioncore/xic.c:83 msgid "Failed to create input context." -msgstr "Syöttökontekstin luonti epäonnistui." +msgstr "Syöttökontekstin luonti epäonnistui." #: ../ioncore/clientwin.c:376 #, c-format msgid "The transient_for hint for \"%s\" points to itself." -msgstr "Ikkunan \"%s\" transient_for neuvo osoittaa itseensä." +msgstr "Ikkunan \"%s\" transient_for neuvo osoittaa itseensä." #: ../ioncore/clientwin.c:380 #, c-format @@ -245,7 +245,7 @@ #: ../ioncore/clientwin.c:385 #, c-format msgid "The transient_for window for \"%s\" is not on the same screen." -msgstr "Ikkunan \"%s\" transient_for neuvo osoittaa eri näytölle." +msgstr "Ikkunan \"%s\" transient_for neuvo osoittaa eri näytölle." #: ../ioncore/clientwin.c:405 ../ioncore/clientwin.c:512 #: ../ioncore/clientwin.c:1327 @@ -255,12 +255,12 @@ #: ../ioncore/clientwin.c:532 msgid "Unable to find a matching root window!" -msgstr "Vastaavaa juuri-ikkunaa ei löytynyt." +msgstr "Vastaavaa juuri-ikkunaa ei löytynyt." #: ../ioncore/clientwin.c:571 #, c-format msgid "Unable to manage client window %#x." -msgstr "Asiakasikkunan %x hallittavaksi saattaminen epäonnistui." +msgstr "Asiakasikkunan %x hallittavaksi saattaminen epäonnistui." #: ../ioncore/clientwin.c:620 msgid "Changes is WM_TRANSIENT_FOR property are unsupported." @@ -273,26 +273,26 @@ #: ../ioncore/clientwin.c:1333 msgid "Saved client window does not want to be managed." -msgstr "Talletettu asiakasikkuna ei halua sitä hallittavan." +msgstr "Talletettu asiakasikkuna ei halua sitä hallittavan." # #: ../ioncore/colormap.c:93 msgid "Unable to store colourmap watch info." -msgstr "Värikartan valvonnan alustaminen epäonnistui." +msgstr "Värikartan valvonnan alustaminen epäonnistui." #: ../ioncore/region.c:45 msgid "Creating region with negative width or height!" -msgstr "Yritys luoda korkeudeltaan tai leveydeltään negatiivinen alue." +msgstr "Yritys luoda korkeudeltaan tai leveydeltään negatiivinen alue." #: ../ioncore/region.c:93 #, c-format msgid "Destroying object \"%s\" with client windows as children." -msgstr "Tuhotaan kappale \"%s\", jolla on vielä asiakasikkunoita." +msgstr "Tuhotaan kappale \"%s\", jolla on vielä asiakasikkunoita." #: ../ioncore/region.c:434 #, c-format msgid "Can not destroy %s: contains client windows." -msgstr "Kappaletta %s ei voida tuhota, sillä se sisältää asiakasikkunoita." +msgstr "Kappaletta %s ei voida tuhota, sillä se sisältää asiakasikkunoita." #: ../ioncore/region.c:435 msgid "(unknown)" @@ -301,7 +301,7 @@ # #: ../ioncore/region.c:498 msgid "Failed to rescue some client windows - not closing." -msgstr "Joidenkin asiakasikkunoiden pelastaminen epäonnistui - ei suljeta." +msgstr "Joidenkin asiakasikkunoiden pelastaminen epäonnistui - ei suljeta." #: ../ioncore/attach.c:55 ../ioncore/frame-pointer.c:278 #, c-format @@ -310,29 +310,29 @@ #: ../ioncore/attach.c:80 msgid "Unable to reparent." -msgstr "Vanhemman vaihto epäonnistui." +msgstr "Vanhemman vaihto epäonnistui." #: ../ioncore/attach.c:89 msgid "Unexpected attach error: trying to recover by attaching to screen." -msgstr "Tuntematon liitäntävirhe: yritetään toipua liittämällä näyttöön." +msgstr "Tuntematon liitäntävirhe: yritetään toipua liittämällä näyttöön." #: ../ioncore/attach.c:108 msgid "Failed recovery." -msgstr "Toipuminen epäonnistui." +msgstr "Toipuminen epäonnistui." #: ../ioncore/manage.c:190 msgid "Unable to find a screen for a new client window." -msgstr "Uudelle asiakasikkunalle ei löytynyt näyttöä." +msgstr "Uudelle asiakasikkunalle ei löytynyt näyttöä." #: ../ioncore/rootwin.c:215 #, c-format msgid "Unable to redirect root window events for screen %d." -msgstr "Juuri-ikkunan %d viestien uudelleenohjaus epäonnistui." +msgstr "Juuri-ikkunan %d viestien uudelleenohjaus epäonnistui." #: ../ioncore/names.c:88 #, c-format msgid "Corrupt instance number %s." -msgstr "Rikkinäinen instanssinumero %s." +msgstr "Rikkinäinen instanssinumero %s." #: ../ioncore/saveload.c:95 #, c-format @@ -350,17 +350,17 @@ "configuration files that are causing this problem. (Maybe a missing\n" "module?)" msgstr "" -"Talletetun sijoittelun latauksessa oli virheitä. Siitä tehdään varmuuskopio\n" +"Talletetun sijoittelun latauksessa oli virheitä. Siitä tehdään varmuuskopio\n" "%s.\n" -"Jos _et_ käytä istunnonhallintaohjelmaa ja haluat palauttaa edellisen\n" -"sijoittelun, kopioi tämä varmuuskopio uuden talletustiedoston päälle\n" -"samassa hakemistossa kun Ion ei ole ajossa, ja kun olet korjannut tämän\n" +"Jos _et_ käytä istunnonhallintaohjelmaa ja haluat palauttaa edellisen\n" +"sijoittelun, kopioi tämä varmuuskopio uuden talletustiedoston päälle\n" +"samassa hakemistossa kun Ion ei ole ajossa, ja kun olet korjannut tämän\n" "tilanteen aiheuttavat virheet (mahdollisesti puuttuva moduuli?) muissa\n" "asetustiedostoissasi." #: ../ioncore/saveload.c:250 msgid "Unable to get file for layout backup." -msgstr "Sijoittelun varmuuskopiolle ei voitu muodostaa tiedostonimeä." +msgstr "Sijoittelun varmuuskopiolle ei voitu muodostaa tiedostonimeä." #: ../ioncore/saveload.c:254 #, c-format @@ -369,12 +369,12 @@ #: ../ioncore/saveload.c:260 msgid "Failed backup." -msgstr "Varmuuskopionti epäonnistui." +msgstr "Varmuuskopionti epäonnistui." # #: ../ioncore/saveload.c:265 msgid "Unable to initialise layout on any screen." -msgstr "Sijoittelun alustus epäonnistui kaikilla näytöillä." +msgstr "Sijoittelun alustus epäonnistui kaikilla näytöillä." #: ../ioncore/saveload.c:292 #, c-format @@ -383,27 +383,27 @@ #: ../ioncore/saveload.c:305 msgid "Unable to save layout." -msgstr "Sijoittelun talletus epäonnistui." +msgstr "Sijoittelun talletus epäonnistui." #: ../ioncore/conf.c:237 msgid "User directory can not be set." -msgstr "Käyttäjän hakemistoa ei pystytä asettamaan." +msgstr "Käyttäjän hakemistoa ei pystytä asettamaan." #: ../ioncore/conf.c:311 msgid "Some bindmaps were empty, loading ioncore_efbb." -msgstr "Jotkut sidontakartat olivat tyhjiä. Ladataan ioncore_efbb." +msgstr "Jotkut sidontakartat olivat tyhjiä. Ladataan ioncore_efbb." #: ../ioncore/fullscreen.c:46 msgid "Failed to enter full screen mode." -msgstr "Vaihto kokoruudun tilaan epäonnistui." +msgstr "Vaihto kokoruudun tilaan epäonnistui." #: ../ioncore/fullscreen.c:80 msgid "" "Failed to return from full screen mode; remaining manager or parent from " "previous location refused to manage us." msgstr "" -"Asiakasikkunan paluu kokoruudun tilasta epäonnistui; edellinen hallitsija " -"tai vanhempi kieltäytyi hallitsemasta ikkunaa." +"Asiakasikkunan paluu kokoruudun tilasta epäonnistui; edellinen hallitsija " +"tai vanhempi kieltäytyi hallitsemasta ikkunaa." # #: ../ioncore/mplex.c:1797 @@ -418,21 +418,21 @@ #: ../ioncore/gr.c:117 #, c-format msgid "Drawing engine %s is not registered!" -msgstr "Piirtomoottoria %s ei ole rekisteröity!" +msgstr "Piirtomoottoria %s ei ole rekisteröity!" #: ../ioncore/gr.c:136 #, c-format msgid "Unable to find brush for style '%s'." -msgstr "Tyylille '%s' ei löytynyt pensseliä." +msgstr "Tyylille '%s' ei löytynyt pensseliä." #: ../ioncore/gr.c:652 msgid "No drawing engines loaded, trying \"de\"." -msgstr "Yhtään piirtomoottoria ei ole ladattu. Yritetään oletusta \"de\"." +msgstr "Yhtään piirtomoottoria ei ole ladattu. Yritetään oletusta \"de\"." # #: ../ioncore/frame-draw.c:311 msgid "" -msgstr "" +msgstr "" #: ../ioncore/group.c:183 ../mod_tiling/tiling.c:89 #, c-format @@ -455,11 +455,11 @@ #: ../ioncore/group-ws.c:48 #, c-format msgid "Unknown placement method \"%s\"." -msgstr "Tuntematon sijoittelumenetelmä \"%s\"." +msgstr "Tuntematon sijoittelumenetelmä \"%s\"." #: ../ioncore/detach.c:174 msgid "Failed to reattach." -msgstr "Uudelleenliittäminen epäonnistui" +msgstr "Uudelleenliittäminen epäonnistui" #: ../ioncore/screen-notify.c:187 msgid "act: " @@ -469,15 +469,15 @@ # #: ../mod_tiling/tiling.c:70 msgid "Split not on workspace." -msgstr "Jako ei ole tällä työpöydällä." +msgstr "Jako ei ole tällä työpöydällä." #: ../mod_tiling/tiling.c:345 msgid "Unable to create a node for status display." -msgstr "Solmun luonti tilanäytölle epäonnistui." +msgstr "Solmun luonti tilanäytölle epäonnistui." #: ../mod_tiling/tiling.c:358 msgid "Unable to create new split for status display." -msgstr "Uuden jaon tekeminen tilanäytölle epäonnistui." +msgstr "Uuden jaon tekeminen tilanäytölle epäonnistui." #: ../mod_tiling/tiling.c:709 msgid "Tiling in useless state." @@ -490,7 +490,7 @@ # #: ../mod_tiling/tiling.c:956 ../mod_tiling/split.c:1030 msgid "Invalid node." -msgstr "Epäkelpo solmu." +msgstr "Epäkelpo solmu." # #: ../mod_tiling/tiling.c:975 @@ -503,19 +503,19 @@ #: ../mod_tiling/tiling.c:1195 msgid "Manager doesn't match." -msgstr "Hallitsija on väärä." +msgstr "Hallitsija on väärä." #: ../mod_tiling/tiling.c:1232 msgid "The status display is not a valid parameter for this routine." -msgstr "Tilanäyttö ei ole kelpo parametri tälle toiminnolle." +msgstr "Tilanäyttö ei ole kelpo parametri tälle toiminnolle." #: ../mod_tiling/tiling.c:1323 msgid "Refusing to float split directly containing the status display." -msgstr "Tilanäytön suoraan sisältävää jakoa ei voida kelluttaa." +msgstr "Tilanäytön suoraan sisältävää jakoa ei voida kelluttaa." #: ../mod_tiling/tiling.c:1387 msgid "No suitable split here." -msgstr "Ei sopivaa jakoa tässä." +msgstr "Ei sopivaa jakoa tässä." # #: ../mod_tiling/tiling.c:1423 @@ -524,7 +524,7 @@ #: ../mod_tiling/tiling.c:1444 msgid "Workspace already has a status display node." -msgstr "Työpöydällä on jo solmu tilanäytölle." +msgstr "Työpöydällä on jo solmu tilanäytölle." # #: ../mod_tiling/tiling.c:1482 @@ -538,7 +538,7 @@ # #: ../mod_tiling/tiling.c:1601 msgid "No split type given." -msgstr "Halkaisun tyyppiä ei ole asetettu." +msgstr "Halkaisun tyyppiä ei ole asetettu." #: ../mod_tiling/tiling.c:1614 msgid "Unknown split type." @@ -548,31 +548,31 @@ # #: ../mod_tiling/tiling.c:1654 msgid "The workspace is empty." -msgstr "Työpöytä on tyhjä." +msgstr "Työpöytä on tyhjä." #: ../mod_tiling/placement.c:101 #, c-format msgid "" "Ooops... could not find a region to attach client window to on workspace %s." -msgstr "Työpöydältä %s ei löytynyt aluetta johon liittää asiakasikkuna." +msgstr "Työpöydältä %s ei löytynyt aluetta johon liittää asiakasikkuna." # #: ../mod_tiling/split.c:536 msgid "Unable to move the status display out of way." -msgstr "Tilanäyttöä ei voida siirtää pois tieltä." +msgstr "Tilanäyttöä ei voida siirtää pois tieltä." #: ../mod_tiling/split.c:949 msgid "REGION_RQGEOM_TRYONLY unsupported for status display." -msgstr "REGION_RQGEOM_TRYONLY:ä ei tueta tilanäytölle." +msgstr "REGION_RQGEOM_TRYONLY:ä ei tueta tilanäytölle." # #: ../mod_tiling/split.c:1102 msgid "Splitting the status display is not allowed." -msgstr "Tilanäytön halkaisu ei ole sallittu." +msgstr "Tilanäytön halkaisu ei ole sallittu." #: ../mod_tiling/split.c:1128 ../mod_tiling/splitfloat.c:900 msgid "Unable to split: not enough free space." -msgstr "Ei voida halkaista: liian vähän tilaa." +msgstr "Ei voida halkaista: liian vähän tilaa." #: ../mod_tiling/split.c:1881 #, c-format @@ -581,15 +581,15 @@ #: ../mod_tiling/split-stdisp.c:599 ../mod_tiling/split-stdisp.c:624 msgid "Status display in bad split configuration." -msgstr "Tilanäyttö huonossa halkaisuasetelmassa." +msgstr "Tilanäyttö huonossa halkaisuasetelmassa." #: ../mod_tiling/split-stdisp.c:664 msgid "Status display badly located in split tree." -msgstr "Tilanäyttö on huonosti sijoittuneena halkaisupuuhun." +msgstr "Tilanäyttö on huonosti sijoittuneena halkaisupuuhun." #: ../mod_tiling/ops.c:69 ../mod_tiling/ops.c:117 msgid "Not member of a group" -msgstr "Ei jäsenenä missään ryhmässä" +msgstr "Ei jäsenenä missään ryhmässä" #: ../mod_tiling/ops.c:74 msgid "Manager group already has bottom" @@ -597,11 +597,11 @@ #: ../mod_tiling/ops.c:151 msgid "Unable to move a region from tiling to group." -msgstr "Ei voitu siirtää kappaletta laatoituksesta ryhmään." +msgstr "Ei voitu siirtää kappaletta laatoituksesta ryhmään." #: ../mod_query/wedln.c:811 msgid "history" -msgstr "hist.täyd." +msgstr "hist.täyd." #: ../mod_query/fwarn.c:32 msgid "Error:\n" @@ -610,29 +610,29 @@ # #: ../mod_menu/menu.c:598 msgid "Empty menu." -msgstr "Tyhjä valikko." +msgstr "Tyhjä valikko." # #: ../mod_sm/sm.c:108 msgid "Failed to set session directory." -msgstr "Istuntohakemiston asetus epäonnistui." +msgstr "Istuntohakemiston asetus epäonnistui." #: ../mod_sm/sm_session.c:86 msgid "Too many ICE connections." -msgstr "Liian monta ICE-yhteyttä." +msgstr "Liian monta ICE-yhteyttä." #: ../mod_sm/sm_session.c:228 msgid "Failed to save session state" -msgstr "Istunnon tilan tallentaminen epäonnistui." +msgstr "Istunnon tilan tallentaminen epäonnistui." #: ../mod_sm/sm_session.c:247 msgid "Failed to request save-yourself-phase2 from session manager." -msgstr "Save-yourself vaiheen kaksi pyyntö istunnonhallitsijalta epäonnistui." +msgstr "Save-yourself vaiheen kaksi pyyntö istunnonhallitsijalta epäonnistui." # #: ../mod_sm/sm_session.c:296 msgid "SESSION_MANAGER environment variable not set." -msgstr "Ympäristömuuttujaa SESSION_MANAGER ei ole asetettu." +msgstr "Ympäristömuuttujaa SESSION_MANAGER ei ole asetettu." #: ../mod_sm/sm_session.c:301 msgid "Session Manager: IceAddConnectionWatch failed." @@ -641,11 +641,11 @@ # #: ../mod_sm/sm_session.c:326 msgid "Unable to connect to the session manager." -msgstr "Yhteydenotto istunnonhallintaohjelmaan epäonnistui." +msgstr "Yhteydenotto istunnonhallintaohjelmaan epäonnistui." #: ../mod_sp/main.c:124 msgid "Unable to create scratchpad." -msgstr "Suttausalueen luonti epäonnistui." +msgstr "Suttausalueen luonti epäonnistui." #: ../mod_statusbar/main.c:74 msgid "reading a pipe" @@ -653,7 +653,7 @@ #: ../mod_statusbar/main.c:163 msgid "ion-statusd timed out." -msgstr "ion-statusd:n käynnistyksen aikaraja umpeutui." +msgstr "ion-statusd:n käynnistyksen aikaraja umpeutui." #: ../mod_statusbar/statusbar.c:1079 #, c-format @@ -663,7 +663,7 @@ #: ../de/init.c:65 #, c-format msgid "Border attribute %s sanity check failed." -msgstr "Reunan arvon '%s' järkevyystarkistus epäonnistui." +msgstr "Reunan arvon '%s' järkevyystarkistus epäonnistui." #: ../de/init.c:88 #, c-format @@ -678,7 +678,7 @@ #: ../de/init.c:144 #, c-format msgid "Unable to allocate colour \"%s\"." -msgstr "Värin \"%s\" varaaminen epäonnistui." +msgstr "Värin \"%s\" varaaminen epäonnistui." #: ../de/init.c:220 #, c-format @@ -702,19 +702,19 @@ #: ../de/font.c:56 #, c-format msgid "Could not load font \"%s\", trying \"%s\"" -msgstr "Kirjaisimen \"%s\" lataaminen epäonnistui. Yritetään \"%s\":ää." +msgstr "Kirjaisimen \"%s\" lataaminen epäonnistui. Yritetään \"%s\":ää." #: ../de/font.c:60 msgid "Failed to load fallback font." -msgstr "Hätävarakirjaisimen lataus epäonnistui." +msgstr "Hätävarakirjaisimen lataus epäonnistui." #: ../de/style.c:291 msgid "Style is still in use [%d] but the module is being unloaded!" -msgstr "Tyyli %s on vielä käytössä [%d], mutta moduulia poistetaan!" +msgstr "Tyyli %s on vielä käytössä [%d], mutta moduulia poistetaan!" #: ../ion/ion.c:39 ../pwm/pwm.c:39 msgid "X display to use" -msgstr "Käytettävä X-palvelin/näyttö" +msgstr "Käytettävä X-palvelin/näyttö" #: ../ion/ion.c:42 ../pwm/pwm.c:42 msgid "Configuration file" @@ -722,7 +722,7 @@ #: ../ion/ion.c:45 ../pwm/pwm.c:45 msgid "Add directory to search path" -msgstr "Lisää hakemisto hakupolulle" +msgstr "Lisää hakemisto hakupolulle" #: ../ion/ion.c:48 ../pwm/pwm.c:48 msgid "Manage default screen only" @@ -738,23 +738,23 @@ #: ../ion/ion.c:57 ../pwm/pwm.c:57 msgid "Do not create startup error log and display it with xmessage." -msgstr "Älä luo käynnistysvirhelokia ja näytä sitä xmessage:lla." +msgstr "Älä luo käynnistysvirhelokia ja näytä sitä xmessage:lla." #: ../ion/ion.c:61 ../pwm/pwm.c:61 msgid "Show this help" -msgstr "Näytä tämä aputeksti" +msgstr "Näytä tämä aputeksti" #: ../ion/ion.c:64 ../pwm/pwm.c:64 msgid "Show program version" -msgstr "Näytä ohjelman versio" +msgstr "Näytä ohjelman versio" #: ../ion/ion.c:67 ../pwm/pwm.c:67 msgid "Show about text" -msgstr "Näytä tietoja ohjelmasta" +msgstr "Näytä tietoja ohjelmasta" #: ../ion/ion.c:82 msgid "Could not get user configuration file directory." -msgstr "Käyttäjän asetustiedostohakemisto puuttuu, eikä sitä voitu luoda." +msgstr "Käyttäjän asetustiedostohakemisto puuttuu, eikä sitä voitu luoda." #: ../ion/ion.c:96 #, c-format @@ -767,7 +767,7 @@ "Usage: %s [options]\n" "\n" msgstr "" -"Käyttö: %s [valintoja]\n" +"Käyttö: %s [valintoja]\n" "\n" # @@ -777,39 +777,39 @@ #: ../ion/ion.c:219 msgid "Ion startup error log:\n" -msgstr "Ionin käynnistysvirheloki:\n" +msgstr "Ionin käynnistysvirheloki:\n" #: ../ion/ion.c:230 ../pwm/pwm.c:180 msgid "Refusing to start due to encountered errors." -msgstr "Ohjelma kieltäytyy käynnistymästä tavattujen virheiden johdosta." +msgstr "Ohjelma kieltäytyy käynnistymästä tavattujen virheiden johdosta." #: ../pwm/pwm.c:169 msgid "PWM startup error log:\n" -msgstr "PWM:n käynnistysvirheloki:\n" +msgstr "PWM:n käynnistysvirheloki:\n" #: ../../libextl-3/readconfig.c:86 msgid "$HOME not set" -msgstr "Ympäristömuuttujaa HOME ei ole asetettu." +msgstr "Ympäristömuuttujaa HOME ei ole asetettu." #: ../../libextl-3/readconfig.c:113 msgid "User directory not set. Unable to set session directory." msgstr "" -"Käyttäjän hakemistoa ei ole asetettu, joten istuntohakemistoa ei voida " +"Käyttäjän hakemistoa ei ole asetettu, joten istuntohakemistoa ei voida " "asettaa." #: ../../libextl-3/readconfig.c:254 #, c-format msgid "Falling back to %s." -msgstr "Yritetään tiedostoa %s." +msgstr "Yritetään tiedostoa %s." #: ../../libextl-3/readconfig.c:474 #, c-format msgid "Unable to create session directory \"%s\"." -msgstr "Istuntohakemiston \"%s\" luonti epäonnistui." +msgstr "Istuntohakemiston \"%s\" luonti epäonnistui." #: ../../libextl-3/luaextl.c:117 msgid "Lua stack full." -msgstr "Luan pino on täysi." +msgstr "Luan pino on täysi." # #: ../../libextl-3/luaextl.c:143 @@ -818,7 +818,7 @@ #: ../../libextl-3/luaextl.c:490 msgid "Stack trace:" -msgstr "Pinojälki:" +msgstr "Pinojälki:" #: ../../libextl-3/luaextl.c:497 #, c-format @@ -827,7 +827,7 @@ "(Unable to get debug info for level %d)" msgstr "" "\n" -"(Debuggaustiedot eivät ole saatavilla tasolle %d)" +"(Debuggaustiedot eivät ole saatavilla tasolle %d)" #: ../../libextl-3/luaextl.c:515 msgid "" @@ -835,22 +835,22 @@ " [Skipping unnamed C functions.]" msgstr "" "\n" -" [Ohitetaan nimettömiä C-funktioita.]" +" [Ohitetaan nimettömiä C-funktioita.]" #: ../../libextl-3/luaextl.c:566 msgid "Internal error." -msgstr "Sisäinen virhe." +msgstr "Sisäinen virhe." #: ../../libextl-3/luaextl.c:585 msgid "Unable to initialize Lua." -msgstr "Lua:n alustus epäonnistui." +msgstr "Lua:n alustus epäonnistui." #: ../../libextl-3/luaextl.c:1469 msgid "" "Too many return values. Use a C compiler that has va_copy to support more." msgstr "" -"Liian monta paluuarvoa. Useamman tukemiseksi käytä C-kääntäjää, joka tukee " -"va_copy:ä." +"Liian monta paluuarvoa. Useamman tukemiseksi käytä C-kääntäjää, joka tukee " +"va_copy:ä." #: ../../libextl-3/luaextl.c:1489 msgid "Returned dead object." @@ -860,12 +860,12 @@ #, c-format msgid "Invalid return value (expected '%c', got lua type \"%s\")." msgstr "" -"Virheellinen paluuarvo (odotettiin tyyppiä '%c', mutta saatiin Lua:n tyyppi " +"Virheellinen paluuarvo (odotettiin tyyppiä '%c', mutta saatiin Lua:n tyyppi " "\"%s\")." #: ../../libextl-3/luaextl.c:1528 ../../libextl-3/luaextl.c:1883 msgid "Stack full." -msgstr "Pino täysi." +msgstr "Pino täysi." #: ../../libextl-3/luaextl.c:1894 #, c-format @@ -878,12 +878,12 @@ "Argument %d to %s is of invalid type. (Argument template is '%s', got lua " "type %s)." msgstr "" -"Parameteri %d funktiolle %s on väärää tyyppiä. (Parametripohja on '%s', " +"Parameteri %d funktiolle %s on väärää tyyppiä. (Parametripohja on '%s', " "saatiin Lua:n tyyppi '%s'.)" #: ../../libextl-3/luaextl.c:1960 msgid "L1 call handler upvalues corrupt." -msgstr "Tason 1 kutsunkäsittelijän \"upvalue\":t rikki." +msgstr "Tason 1 kutsunkäsittelijän \"upvalue\":t rikki." #: ../../libextl-3/luaextl.c:1965 msgid "Called function has been unregistered." @@ -899,7 +899,7 @@ msgid "" "Function '%s' has more parameters than the level 1 call handler can handle" msgstr "" -"Funktiolla %s on enemmän parametrejä kuin mihin tason yksi kutsunkäsittelijä " +"Funktiolla %s on enemmän parametrejä kuin mihin tason yksi kutsunkäsittelijä " "kykenee." # @@ -909,12 +909,12 @@ #: ../../libextl-3/luaextl.c:2501 #, c-format -msgid "Unable to serialise type %s." -msgstr "Tyyppiä %s ei voida tallettaa." +msgid "Unable to serialize type %s." +msgstr "Tyyppiä %s ei voida tallettaa." #: ../../libextl-3/luaextl.c:2532 msgid "-- This file has been generated by %s. Do not edit.\n" -msgstr "-- Tämä tiedosto on %sin luoma. Älä editoi sitä.\n" +msgstr "-- Tämä tiedosto on %sin luoma. Älä editoi sitä.\n" #: ../../libextl-3/misc.c:17 #, c-format @@ -922,11 +922,11 @@ "Type checking failed in level 2 call handler for parameter %d (got %s, " "expected %s)." msgstr "" -"Tyyppitarkistus epäonnistui tason 2 kutsunkäsittelijässä parametrille #%d " +"Tyyppitarkistus epäonnistui tason 2 kutsunkäsittelijässä parametrille #%d " "(oli %s, odotettiin %s)." msgid "Scroll the message or completions up/down." -msgstr "Vieritä viestiä tai täydennyksiä ylös/alas." +msgstr "Vieritä viestiä tai täydennyksiä ylös/alas." msgid "Close the query/message box, not executing bound actions." msgstr "Sulje kysely/viesti suorittamatta sidottuja toimintoja." @@ -935,10 +935,10 @@ msgstr "Sulje kysely ja suorita sidottu toiminta." msgid "Complete from history" -msgstr "Täydennä historiasta" +msgstr "Täydennä historiasta" msgid "Try to complete the entered text or cycle through completions." -msgstr "Yritä täydentää syötetty teksti tai selaa täydennyksiä." +msgstr "Yritä täydentää syötetty teksti tai selaa täydennyksiä." # msgid "Clear mark/cancel selection." @@ -961,7 +961,7 @@ # msgid "Select next/previous (matching) history entry." -msgstr "Näytä seuraava/edellinen vastaus muistista." +msgstr "Näytä seuraava/edellinen vastaus muistista." msgid "Transpose characters." msgstr "Transponoi merkit." @@ -982,7 +982,7 @@ msgstr "Poista seuraava merkki." msgid "Skip one word forward/backward." -msgstr "Ohita yksi sana eteen/taaksepäin" +msgstr "Ohita yksi sana eteen/taaksepäin" msgid "Go to end/beginning." msgstr "Mene rivin alkuun/loppuun." @@ -994,34 +994,34 @@ msgstr "Tapa" msgid "Attach tagged" -msgstr "Liitä merkityt" +msgstr "Liitä merkityt" msgid "Rename" -msgstr "Uudelleennimeä" +msgstr "Uudelleennimeä" msgid "Close" msgstr "Sulje" msgid "De/reattach" -msgstr "Irroita/liitä" +msgstr "Irroita/liitä" msgid "Toggle tag" -msgstr "Muuta merkintää" +msgstr "Muuta merkintää" msgid "Window info" msgstr "Ikkunan tiedot" msgid "Clear tags" -msgstr "Poista merkinnät" +msgstr "Poista merkinnät" msgid "Exit" msgstr "Poistu" msgid "Restart TWM" -msgstr "Käynnistä TWM" +msgstr "Käynnistä TWM" msgid "Restart" -msgstr "Uudelleenkäynnistä" +msgstr "Uudelleenkäynnistä" msgid "Save" msgstr "Talleta" @@ -1039,10 +1039,10 @@ msgstr "Ohjeet" msgid "Lock screen" -msgstr "Lukitse näyttö" +msgstr "Lukitse näyttö" msgid "Terminal" -msgstr "Pääteohjelma" +msgstr "Pääteohjelma" # msgid "Run..." @@ -1066,27 +1066,27 @@ msgstr "Peruuta tilasta." msgid "Move the frame." -msgstr "Siirrä kehystä." +msgstr "Siirrä kehystä." msgid "Lower the frame." -msgstr "Alenna kehystä." +msgstr "Alenna kehystä." # msgid "Raise the frame." msgstr "Nosta kehys." msgid "Toggle shade mode" -msgstr "Kytke litistys päälle/pois." +msgstr "Kytke litistys päälle/pois." msgid "Attach tagged objects to this frame." -msgstr "Liitä merkityt kappaleet tähän kehykseen." +msgstr "Liitä merkityt kappaleet tähän kehykseen." msgid "Maximize the frame horizontally/vertically." msgstr "Maksimoi kehys vaaka/pystysuunnassa." msgid "Move current object within the frame left/right." msgstr "" -"Siirrä kehyksessä tällä hetkellä näytettävää kappaletta vasemmalle/oikealle." +"Siirrä kehyksessä tällä hetkellä näytettävää kappaletta vasemmalle/oikealle." msgid "Switch to next/previous object within the frame." msgstr "Siirry seuraavaan/edelliseen kehyksen jakavaan kappaleeseen." @@ -1096,76 +1096,76 @@ # msgid "Query for a client window to attach." -msgstr "Kysy liitettävää asiakasikkunaa." +msgstr "Kysy liitettävää asiakasikkunaa." msgid "Move objects between frames by dragging and dropping the tab." msgstr "" -"Siirrä kappaletta kehysten välillä raahaamalla ja pudottamalla välilehti." +"Siirrä kappaletta kehysten välillä raahaamalla ja pudottamalla välilehti." msgid "Resize the frame." msgstr "Muuta kehyksen kokoa." msgid "Switch the frame to display the object indicated by the tab." -msgstr "Vaihda kehys näyttämään välilehden ilmoittama kappale." +msgstr "Vaihda kehys näyttämään välilehden ilmoittama kappale." msgid "Begin move/resize mode." msgstr "Aloita siirto ja koonmuutostila." msgid "Display context menu." -msgstr "Näytä kontekstivalikko." +msgstr "Näytä kontekstivalikko." # msgid "Query for a client window to go to." -msgstr "Kysy asiakasikkunaa, johon siirtyä." +msgstr "Kysy asiakasikkunaa, johon siirtyä." msgid "Query for workspace to go to or create a new one." -msgstr "Kysy työpöytää jolle siirtyä, tai luo uusi." +msgstr "Kysy työpöytää jolle siirtyä, tai luo uusi." msgid "Query for file to view." -msgstr "Kysy tiedostoa näytettäväksi." +msgstr "Kysy tiedostoa näytettäväksi." msgid "Query for file to edit." msgstr "Kysy tiedostoa muokattavaksi." msgid "Query for host to connect to with SSH." -msgstr "Ota SSH-yhteys kyseltävään koneeseen." +msgstr "Ota SSH-yhteys kyseltävään koneeseen." msgid "Query for Lua code to execute." msgstr "Kysy Lua-koodia ajettavaksi." msgid "Query for command line to execute." -msgstr "Kysy komentoriviä suoritettavaksi." +msgstr "Kysy komentoriviä suoritettavaksi." # msgid "Run a terminal emulator." -msgstr "Käynnistä pääte-emulaattori." +msgstr "Käynnistä pääte-emulaattori." msgid "Show the Ion manual page." -msgstr "Näytä Ionin ohjesivu." +msgstr "Näytä Ionin ohjesivu." msgid "Query for manual page to be displayed." -msgstr "Kysy ohjesivua näytettäväksi." +msgstr "Kysy ohjesivua näytettäväksi." msgid "Toggle tag of current object." msgstr "Merkitse aktiivinen kappale." msgid "Detach (float) or reattach an object to its previous location." msgstr "" -"Irroita (kelluta) tai uudelleenliitä kappale sen edelliseen sijaintiin." +"Irroita (kelluta) tai uudelleenliitä kappale sen edelliseen sijaintiin." msgid "Close current object." msgstr "Sulje aktiivinen kappale." msgid "Toggle client window group full-screen mode" -msgstr "Muuta asiakasikkunaryhmän kokoruudun tilaa" +msgstr "Muuta asiakasikkunaryhmän kokoruudun tilaa" # msgid "" "Send next key press to the client window. Some programs may not allow this " "by default." msgstr "" -"Lähetä seuraava näppäinpainallus aktiiviselle asiakasikkunalle. Kaikki " -"ohjelmat eivät välttämättä salli tätä oletuksena." +"Lähetä seuraava näppäinpainallus aktiiviselle asiakasikkunalle. Kaikki " +"ohjelmat eivät välttämättä salli tätä oletuksena." # msgid "Kill client owning the client window." @@ -1176,56 +1176,56 @@ "Nudge the client window. This might help with some programs' resizing " "problems." msgstr "" -"Tönäise aktiivista asiakasikkunaa. Tämä saattaa auttaa joidenkin ohjelmien " +"Tönäise aktiivista asiakasikkunaa. Tämä saattaa auttaa joidenkin ohjelmien " "koko-ongelmien kanssa." msgid "Raise focused object, if possible." msgstr "Nosta aktiivista kappaletta, jos mahdollista." msgid "Backward-circulate focus." -msgstr "Kierrätä fokusta taaksepäin" +msgstr "Kierrätä fokusta taaksepäin" msgid "Forward-circulate focus." -msgstr "Kierrätä fokusta eteenpäin." +msgstr "Kierrätä fokusta eteenpäin." msgid "Display the window list menu." -msgstr "Näytä ikkunavalikko." +msgstr "Näytä ikkunavalikko." msgid "Display the main menu." -msgstr "Näytä päävalikko." +msgstr "Näytä päävalikko." # # msgid "Create a new workspace of chosen default type." -msgstr "Luo uusi työpöytä ennalta asetettua tyyppiä." +msgstr "Luo uusi työpöytä ennalta asetettua tyyppiä." # msgid "Go to next/previous screen on multihead setup." -msgstr "Mene seuraavalle/edelliselle näytölle usean näytön järjestelmässä." +msgstr "Mene seuraavalle/edelliselle näytölle usean näytön järjestelmässä." # msgid "Go to n:th screen on multihead setup." -msgstr "Siirry näytölle n usean näytön järjestelmässä." +msgstr "Siirry näytölle n usean näytön järjestelmässä." # msgid "Clear all tags." -msgstr "Poista kaikki merkinnät." +msgstr "Poista kaikki merkinnät." msgid "Go to first region demanding attention or previously active one." msgstr "" -"Mene ensimmäiseen huomiota vaativaan alueeseen, tai edelliseen aktiiviseen." +"Mene ensimmäiseen huomiota vaativaan alueeseen, tai edelliseen aktiiviseen." # msgid "Switch to next/previous object within current screen." msgstr "" -"Siirry seuraavaan/edelliseen tämänhetkisen näytön lomittamaan kappaleeseen." +"Siirry seuraavaan/edelliseen tämänhetkisen näytön lomittamaan kappaleeseen." # msgid "" "Switch to n:th object (workspace, full screen client window) within current " "screen." msgstr "" -"Siirry n:teen tämänhetkisen näytön lomittamaan kappaleeseen (työpöytä, " +"Siirry n:teen tämänhetkisen näytön lomittamaan kappaleeseen (työpöytä, " "kokoruudun asiakasikkuna)." msgid "List" @@ -1257,16 +1257,16 @@ # msgid "Workspaces" -msgstr "Työpöydät" +msgstr "Työpöydät" msgid "Programs" msgstr "Ohjelmat" msgid "Show the PWM manual page." -msgstr "Näytä PWM:n ohjesivu." +msgstr "Näytä PWM:n ohjesivu." msgid "Toggle scratchpad." -msgstr "Kytke suttausalue päälle/pois" +msgstr "Kytke suttausalue päälle/pois" msgid "" "\n" @@ -1303,43 +1303,43 @@ msgstr "Avaa SSH-yhteys:" msgid "Failed to open ~/.ssh/config" -msgstr "Tiedoston ~/.ssh/config avaaminen epäonnistui." +msgstr "Tiedoston ~/.ssh/config avaaminen epäonnistui." msgid "Failed to open ~/.ssh/known_hosts" -msgstr "Tiedostoa ~/.ssh/known_hosts avaaminen epäonnistui." +msgstr "Tiedostoa ~/.ssh/known_hosts avaaminen epäonnistui." msgid "Run:" msgstr "Suorita:" msgid "View file:" -msgstr "Näytä tiedosto:" +msgstr "Näytä tiedosto:" msgid "Edit file:" msgstr "Muokkaa tiedostoa:" msgid "Workspace name:" -msgstr "Työpöydän nimi:" +msgstr "Työpöydän nimi:" msgid "Frame name:" msgstr "Kehyksen nimi:" msgid "Restart Notion (y/n)?" -msgstr "Uudelleenkäynnistä Notion (kyllä: y, ei: n)?" +msgstr "Uudelleenkäynnistä Notion (kyllä: y, ei: n)?" msgid "Exit Notion/Shutdown session (y/n)?" -msgstr "Poistu Notionista/Lopeta istunto (kyllä: y, ei: n)?" +msgstr "Poistu Notionista/Lopeta istunto (kyllä: y, ei: n)?" msgid "Go to or create workspace:" -msgstr "Mene tai luo työpöytä:" +msgstr "Mene tai luo työpöytä:" msgid "Attach window:" -msgstr "Liitä ikkuna:" +msgstr "Liitä ikkuna:" msgid "Go to window:" msgstr "Mene ikkunaan:" msgid "New workspace layout (default):" -msgstr "Uuden työpöydän sijoitelma (default):" +msgstr "Uuden työpöydän sijoitelma (default):" msgid "Unknown error" msgstr "Tuntematon virhe" @@ -1348,22 +1348,22 @@ msgstr "Tuntematon sijoittelu." msgid "Cannot attach: different root windows." -msgstr "Ei voida liittää: eri juuri-ikkunat." +msgstr "Ei voida liittää: eri juuri-ikkunat." msgid "Could not find client window %s." -msgstr "Asiakasikkunaa %s ei löytynyt." +msgstr "Asiakasikkunaa %s ei löytynyt." msgid "Too much result data" msgstr "Liian suuri vastaus" msgid "Save look selection in %s?" -msgstr "Talletaanko ulkonäköasetus tiedostoon %s?" +msgstr "Talletaanko ulkonäköasetus tiedostoon %s?" msgid "Cannot save selection." msgstr "Ei voida tallettaa valintaa." msgid "Unable to append to non-table menu" -msgstr "Ei voida lisätä valikkoon, koska sitä ei ole määritelty tauluna " +msgstr "Ei voida lisätä valikkoon, koska sitä ei ole määritelty tauluna " msgid "" "Making the following minimal emergency mappings:\n" @@ -1373,25 +1373,25 @@ " Mod1+C -> close\n" " Mod1+K P/N -> WFrame.switch_next/switch_prev\n" msgstr "" -"Tehdään seuraavat vähimmäiset hätäsidonnat:\n" +"Tehdään seuraavat vähimmäiset hätäsidonnat:\n" " F2 -> xterm\n" -" F11 -> uudelleenkäynnistys\n" +" F11 -> uudelleenkäynnistys\n" " F12 -> lopetus\n" " Mod1+C -> sulkeminen\n" -" Mod1+K P/N -> vaihto kehyksen sisällä\n" +" Mod1+K P/N -> vaihto kehyksen sisällä\n" msgid "Recursive table - unable to deepcopy" -msgstr "Rekursiivinen taulu - ei voida syväkopioida." +msgstr "Rekursiivinen taulu - ei voida syväkopioida." msgid "Frame" msgstr "Kehys" msgid "Screen" -msgstr "Näyttö" +msgstr "Näyttö" # msgid "Workspace" -msgstr "Työpöytä" +msgstr "Työpöytä" msgid "Tiling" msgstr "Laatoitus" @@ -1406,13 +1406,13 @@ msgstr "Kontekstivalikko:" msgid "Main menu:" -msgstr "Päävalikko:" +msgstr "Päävalikko:" msgid "Invalid guard %s." msgstr "Virheellinen vahti %s." msgid "Error compiling guard: %s" -msgstr "Virhe vahdin käännössä. %s" +msgstr "Virhe vahdin käännössä. %s" msgid "Error in command string: " msgstr "Virhe komentojonossa:" @@ -1424,42 +1424,42 @@ msgstr "Ei hakemisto." msgid "Could not find %s" -msgstr "Ei löydettyä %s:ää." +msgstr "Ei löydettyä %s:ää." msgid "ion-statusd quit." -msgstr "ion-statusd päätti suorituksen." +msgstr "ion-statusd päätti suorituksen." msgid "Errors starting ion-statusd:\n" -msgstr "Ion-statusd:n käynnistysvirheet:\n" +msgstr "Ion-statusd:n käynnistysvirheet:\n" msgid "Failed to start ion-statusd." -msgstr "Ion-statusd:n käynnistys eopäonnistui." +msgstr "Ion-statusd:n käynnistys eopäonnistui." msgid "Screen not found." -msgstr "Ruutua ei löytynyt." +msgstr "Ruutua ei löytynyt." msgid "Screen already has an stdisp. Refusing to create a statusbar." -msgstr "Ruudulla on jo tilanäyttö. Kieltäydytään luomasta tilariviä." +msgstr "Ruudulla on jo tilanäyttö. Kieltäydytään luomasta tilariviä." msgid "Failed to create statusbar." -msgstr "Epäonnistuttiin tilarivin luonnissa" +msgstr "Epäonnistuttiin tilarivin luonnissa" msgid "Split current frame vertically." -msgstr "Halkaise tämänhetkinen kehys pystysuunnassa." +msgstr "Halkaise tämänhetkinen kehys pystysuunnassa." msgid "Go to frame above/below/right/left of current frame." msgstr "" -"Siirry tämänhetkisen kehyksen yllä/alla/vasemmalle/oikealla olevaan " +"Siirry tämänhetkisen kehyksen yllä/alla/vasemmalle/oikealla olevaan " "kehykseen." msgid "Split current frame horizontally." -msgstr "Halkaise tämänhetkinen kehys vaakasuunnassa." +msgstr "Halkaise tämänhetkinen kehys vaakasuunnassa." msgid "Destroy current frame." -msgstr "Tuhoa tämänhetkinen kehys." +msgstr "Tuhoa tämänhetkinen kehys." msgid "Tile frame, if no tiling exists on the workspace" -msgstr "Laatoita kehys, jos työpöydällä ei ole kehystä" +msgstr "Laatoita kehys, jos työpöydällä ei ole kehystä" # msgid "Destroy frame" @@ -1481,7 +1481,7 @@ # msgid "Transpose" -msgstr "Käännä" +msgstr "Käännä" msgid "Untile" msgstr "Hajoita laatoitus" @@ -1496,7 +1496,7 @@ msgstr "Oikealla" msgid "Above" -msgstr "Yläpuolella" +msgstr "Yläpuolella" msgid "Below" msgstr "Alapuolella" @@ -1520,16 +1520,16 @@ msgstr "Siirry seuraavaan/edelliseen valintaan." msgid "Clear the menu's typeahead find buffer." -msgstr "Tyhjää valikon hakupuskuri." +msgstr "Tyhjää valikon hakupuskuri." msgid "Toggle floating dock." -msgstr "Näytä/piiloita kelluva laituri (dock)." +msgstr "Näytä/piiloita kelluva laituri (dock)." msgid "Pos-TL" -msgstr "Paikka: ylävasen" +msgstr "Paikka: ylävasen" msgid "Pos-TR" -msgstr "Paikka: yläoikea" +msgstr "Paikka: yläoikea" msgid "Pos-BL" msgstr "Paikka: alavasen" @@ -1544,7 +1544,7 @@ msgstr "Kasvu: oikealle" msgid "Grow-U" -msgstr "Kasvu: ylös" +msgstr "Kasvu: ylös" msgid "Grow-D" msgstr "Kasvu: alas" @@ -1571,89 +1571,89 @@ #~ "Unable to unsplit: Could not move client windows elsewhere within the " #~ "tiling." #~ msgstr "" -#~ "Ei voida poistaa halkaisua: asiakasikkunoita ei voitu siirtää muualle " +#~ "Ei voida poistaa halkaisua: asiakasikkunoita ei voitu siirtää muualle " #~ "laatoituksessa." #~ msgid "'based_on' for %s points back to the style itself." -#~ msgstr "Tyylin %s 'based_on' -asetus osoittaa itseensä." +#~ msgstr "Tyylin %s 'based_on' -asetus osoittaa itseensä." #~ msgid "Unknown base style. \"%s\"" #~ msgstr "Tuntematon pohjatyyli \"%s\"." #~ msgid "Tag current object within the frame." -#~ msgstr "Merkitse kehyksen tällä hetkellä näyttämä kappale." +#~ msgstr "Merkitse kehyksen tällä hetkellä näyttämä kappale." #~ msgid "Xinerama sanity check failed; overlapping screens detected." -#~ msgstr "Xinerama-tiedon järkevyystarkastus havaitsi päällekkäisiä ruutuja." +#~ msgstr "Xinerama-tiedon järkevyystarkastus havaitsi päällekkäisiä ruutuja." #~ msgid "Xinerama sanity check failed; zero size detected." -#~ msgstr "Xinerama-tiedon järkevyystarkastus havaitsi päällekkäisiä ruutuja." +#~ msgstr "Xinerama-tiedon järkevyystarkastus havaitsi päällekkäisiä ruutuja." #~ msgid "" #~ "Don't know how to get Xinerama information for multiple X root windows." -#~ msgstr "Xinerama-tietoa ei osata käyttää usealle juuri-ikkunalle." +#~ msgstr "Xinerama-tietoa ei osata käyttää usealle juuri-ikkunalle." #~ msgid "Error retrieving Xinerama information." #~ msgstr "Xinerama-tietoja ei saatu." #~ msgid "Unable to setup Xinerama screen %d." -#~ msgstr "Xinerama-ruudun %d hallittavaksi saattaminen epäonnistui." +#~ msgstr "Xinerama-ruudun %d hallittavaksi saattaminen epäonnistui." #~ msgid "Unable to setup X screen %d." -#~ msgstr "X-ruudun %d hallittavaksi saattaminen epäonnistui." +#~ msgstr "X-ruudun %d hallittavaksi saattaminen epäonnistui." # #~ msgid "Refusing to destroy - not empty." -#~ msgstr "Tuhoamisesta kieltäydytään - ei tyhjä." +#~ msgstr "Tuhoamisesta kieltäydytään - ei tyhjä." # #~ msgid "Workspace not empty - refusing to destroy." -#~ msgstr "Työpöytää ei voida tuhota, koska se ei ole tyhjä." +#~ msgstr "Työpöytää ei voida tuhota, koska se ei ole tyhjä." #~ msgid "Nil frame." #~ msgstr "Kehys on asettamatta." #~ msgid "The frame is not managed by the workspace." -#~ msgstr "Kehys ei ole tämän työpöydän hallinnoima." +#~ msgstr "Kehys ei ole tämän työpöydän hallinnoima." #~ msgid "Already detached" #~ msgstr "Irroitettu jo" #~ msgid "Use Xinerama screen information (default: 1/yes)" -#~ msgstr "Hyödynnä Xineramaa (oletus: 1/kyllä)" +#~ msgstr "Hyödynnä Xineramaa (oletus: 1/kyllä)" #~ msgid "Ignored: not compiled with Xinerama support" -#~ msgstr "Jätetään huomiotta: ohjelmaa ei ole käännetty Xinerama-tuella" +#~ msgstr "Jätetään huomiotta: ohjelmaa ei ole käännetty Xinerama-tuella" #~ msgid "Invalid parameter to -xinerama." #~ msgstr "Virheellinen parametri -xinerama:lle" #~ msgid "Use Xinerama screen information (default: 0/no)" -#~ msgstr "Hyödynnä Xineramaa (oletus: 0/ei)" +#~ msgstr "Hyödynnä Xineramaa (oletus: 0/ei)" #~ msgid "Detach window from tiled frame" -#~ msgstr "Irroita ikkuna laatoitetusta kehyksestä" +#~ msgstr "Irroita ikkuna laatoitetusta kehyksestä" # #~ msgid "New workspace" -#~ msgstr "Uusi työpöytä" +#~ msgstr "Uusi työpöytä" #~ msgid "New empty workspace" -#~ msgstr "Uusi tyhjä työpöytä" +#~ msgstr "Uusi tyhjä työpöytä" # #~ msgid "Close workspace" -#~ msgstr "Sulje työpöytä" +#~ msgstr "Sulje työpöytä" #~ msgid "Could not find a complete workspace class. Please load some modules." #~ msgstr "" -#~ "Yhtäkään täydellistä työpöytäluokkaa ei löydy. Ole hyvä ja lataa joitakin " +#~ "Yhtäkään täydellistä työpöytäluokkaa ei löydy. Ole hyvä ja lataa joitakin " #~ "moduuleita." # # #~ msgid "Failed to rescue some client windows." -#~ msgstr "Joidenkin asiakasikkunoiden pelastaminen epäonnistui." +#~ msgstr "Joidenkin asiakasikkunoiden pelastaminen epäonnistui." #~ msgid "Same manager." #~ msgstr "Sama manageri." @@ -1665,26 +1665,26 @@ # #~ msgid "Failure to create a new frame." -#~ msgstr "Uuden kehyksen luonti epäonnistui." +#~ msgstr "Uuden kehyksen luonti epäonnistui." # #~ msgid "Region not managed by the workspace." -#~ msgstr "Alue ei ole työpöydän hallinnassa." +#~ msgstr "Alue ei ole työpöydän hallinnassa." #~ msgid "No geometry specified." #~ msgstr "Geometria on asettamatta." #~ msgid "Unable to re-initialise workspace. Destroying." -#~ msgstr "Työpöydän uudelleenalustus epäonnistui, joten se tuhotaan." +#~ msgstr "Työpöydän uudelleenalustus epäonnistui, joten se tuhotaan." #~ msgid "Refusing to close non-empty workspace." -#~ msgstr "Työpöydän tuhoamisesta kieltäydytään, koska se ei ole tyhjä." +#~ msgstr "Työpöydän tuhoamisesta kieltäydytään, koska se ei ole tyhjä." #~ msgid "Malfunctioning placement hook; condition #%d." -#~ msgstr "Rikkinäinen koukku; tapaus #%d." +#~ msgstr "Rikkinäinen koukku; tapaus #%d." #~ msgid "none" -#~ msgstr "ei mikään" +#~ msgstr "ei mikään" # #~ msgid "mail" @@ -1695,10 +1695,10 @@ #~ "Transients:\n" #~ msgstr "" #~ "\n" -#~ "Väliaikaisikkunat:\n" +#~ "Väliaikaisikkunat:\n" #~ msgid "Workspace type (%s):" -#~ msgstr "Työpöydän tyyppi (%s):" +#~ msgstr "Työpöydän tyyppi (%s):" #~ msgid "Go to previous active object." #~ msgstr "Mene edelliseen aktiiviseen olioon." @@ -1706,20 +1706,20 @@ # # #~ msgid "Toggle fullscreen mode of current client window." -#~ msgstr "Kytke aktiivisen asiakasikkunan kokoruudun tila päälle/pois." +#~ msgstr "Kytke aktiivisen asiakasikkunan kokoruudun tila päälle/pois." #~ msgid "WStatusBar expected." #~ msgstr "Odotettiin WStatusBaria." #~ msgid "Backwards-circulate focus and raise the newly focused frame." -#~ msgstr "Kierrätä fokusta taaksepäin ja nosta fokusoitu kehys." +#~ msgstr "Kierrätä fokusta taaksepäin ja nosta fokusoitu kehys." #~ msgid "(Un)stick" #~ msgstr "Aseta tahmaus" # #~ msgid "Query for a client window to attach to active frame." -#~ msgstr "Kysy asiakasikkunaa liitettäväksi kehykseen." +#~ msgstr "Kysy asiakasikkunaa liitettäväksi kehykseen." # #~ msgid "Resize the area." @@ -1729,29 +1729,29 @@ #~ msgstr "Nosta/alenna aktiivinen kehys." #~ msgid "Restart PWM" -#~ msgstr "Käynnistä PWM" +#~ msgstr "Käynnistä PWM" #~ msgid "Refresh list" -#~ msgstr "Virkistä lista" +#~ msgstr "Virkistä lista" #~ msgid "Unable to create workspace: no screen." -#~ msgstr "Ei voida luoda työpöytää: ei ruutua." +#~ msgstr "Ei voida luoda työpöytää: ei ruutua." #~ msgid "load" #~ msgstr "kuorma" #~ msgid "(Un)tag" -#~ msgstr "Vaihda merkintä" +#~ msgstr "Vaihda merkintä" #~ msgid "Circulate focus and raise the newly focused frame." -#~ msgstr "Kierrätä fokusta ja nosta uudelleen fokusoitu kehys." +#~ msgstr "Kierrätä fokusta ja nosta uudelleen fokusoitu kehys." # #~ msgid "No function given." #~ msgstr "Funktiota ei ole annettu." #~ msgid "Failed to create a timer for statusbar." -#~ msgstr "Epäonnistuttiin ajastimen luonnissa tilariville." +#~ msgstr "Epäonnistuttiin ajastimen luonnissa tilariville." #~ msgid "Vertically at root" #~ msgstr "Pystysuunnassa juuressa" @@ -1761,27 +1761,27 @@ # #~ msgid "Transpose at root" -#~ msgstr "Käännä juuri" +#~ msgstr "Käännä juuri" #~ msgid "Flip&transpose" -#~ msgstr "Peilaa&käännä" +#~ msgstr "Peilaa&käännä" #~ msgid "Horizontally at root" #~ msgstr "Vaakasuunnassa juuressa" #~ msgid "Frame may not be destroyed." -#~ msgstr "Kehystä ei saa tuhota." +#~ msgstr "Kehystä ei saa tuhota." #~ msgid "Failed to rescue managed objects." -#~ msgstr "Hallittujen olioiden pelastaminen epäonnistui." +#~ msgstr "Hallittujen olioiden pelastaminen epäonnistui." # #~ msgid "Could not find a root window." -#~ msgstr "Juuri-ikkunaa ei löytynyt." +#~ msgstr "Juuri-ikkunaa ei löytynyt." #~ msgid "Caught fatal signal %d. Dying without deinit." #~ msgstr "" -#~ "Ohjelma lopettaa ilman jälkien putsausta tuhoisan signaalin %d " +#~ "Ohjelma lopettaa ilman jälkien putsausta tuhoisan signaalin %d " #~ "vastaanottoon." #~ msgid "Caught signal %d. Dying." @@ -1789,17 +1789,17 @@ # #~ msgid "Object destroyed while deferred actions are still pending." -#~ msgstr "Viivästettyä toimintoja jonossa vielä oliota tuhottaessa." +#~ msgstr "Viivästettyä toimintoja jonossa vielä oliota tuhottaessa." #~ msgid "Unable to rescue \"%s\"." -#~ msgstr "Alueen \"%s\" pelastaminen epäonnistui." +#~ msgstr "Alueen \"%s\" pelastaminen epäonnistui." #~ msgid "Frame is not empty." -#~ msgstr "Kehys ei ole tyhjä." +#~ msgstr "Kehys ei ole tyhjä." # #~ msgid "Frame not managed by the workspace." -#~ msgstr "Kehys ei ole tämän työpöydän hallitsema." +#~ msgstr "Kehys ei ole tämän työpöydän hallitsema." #~ msgid "Vertically/root" #~ msgstr "Pystysuunnassa juuressa" diff -Nru notion-3+2014010901/po/fr.po notion-3+2015061300/po/fr.po --- notion-3+2014010901/po/fr.po 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/po/fr.po 2015-06-13 14:37:26.000000000 +0000 @@ -906,7 +906,7 @@ #: ../libextl/luaextl.c:2368 #, c-format -msgid "Unable to serialise type %s." +msgid "Unable to serialize type %s." msgstr "Incapable de sérialiser le type %s." #: ../libextl/luaextl.c:2399 diff -Nru notion-3+2014010901/README notion-3+2015061300/README --- notion-3+2014010901/README 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/README 2015-06-13 14:37:26.000000000 +0000 @@ -2,7 +2,7 @@ Notion === -Copyright (c) the Notion team 2010-2011. +Copyright (c) the Notion team 2010-2014. Copyright (c) Tuomo Valkonen 1999-2009. http://notion.sf.net @@ -15,11 +15,8 @@ https://sourceforge.net/apps/mediawiki/notion/index.php?title=Development -1. Get the source code. Make sure all submodules are present and up to date. +1. Get the source code. git clone git://notion.git.sourceforge.net/gitroot/notion/notion - cd notion - git submodule init - git submodule update 2. In addition to the standard C library headers and the GNU toolchain, you will need the following tools and libraries for building Notion. @@ -70,9 +67,6 @@ a `.xinitrc` should usually do much more setup than simply start a few programs of your choice. -Please see the file `RELNOTES` for additional release-specific installation -and configuration notes. - Some optional installation steps -------------------------------- diff -Nru notion-3+2014010901/RELNOTES notion-3+2015061300/RELNOTES --- notion-3+2014010901/RELNOTES 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/RELNOTES 1970-01-01 00:00:00.000000000 +0000 @@ -1,1241 +0,0 @@ - -ion-3-20081002 --------------- - -Some minor fixes again, including a few that should've already -been in the previous release. - - -ion-3-20080825 --------------- - -This release again fixes some issues found with the previous one. - - -ion-3-20080707 --------------- - -This is yet another maintenance release fixing a few issues. - - -ion-3-20080411 --------------- - -This is a maintenance release that fixes a few issues in the -previous release. - - -ion-3-20080207 --------------- - -. - - -ion-3rc-20080103 ----------------- - -This release features a few minor fixes to behavioural regressions -in the previous release, as well as some build configuration file -self-documentation improvements. - - -ion-3rc-20071220 ----------------- - -There are a few minor fixes in this RC, plus a major one related to -layout restore under a session manager. - - -ion-3rc-20071130 ----------------- - -This RC features various minor fixes, and some clarifications and -simplifications to the license, which people seem to have had trouble -understanding. - - -ion-3rc-20071109 ----------------- - -It seems people are a bit slow, or only scaring them with a final -release makes them report issues. So, still no stable release but -a candidate, with many minor fixes and improvements wrt. important -omissions. The most important changes are better behaviour of the -unsplit operation, better handling of main window being closed -before a transient, and use of the workspace's working directory -for run query file name completion. - - -ion-3rc-20070927 ----------------- - -Another attempt at last "rc" release. - - -ion-3rc-20070902 ----------------- - -This release features a few minor fixes. If no major problems are -discovered, this is likely to be the last "rc" release before the -first and hopefully final "stable" release. - - -ion-3rc-20070720 ----------------- - -This fourth "rc" release fixes some minor bugs and omissions in -the previous release. - - -ion-3rc-20070708 ----------------- - -This third "rc" release again simply fixes some minor problems in -the previous release. - - -ion-3rc-20070608 ----------------- - -This is the second "rc" release, and contains primarily bug fixes -and other minor improvements. - - -ion-3rc-20070506 ----------------- - -This is the first "rc" or "(stable) release candidate" release of -Ion3. This means that there will not be any further major changes -to it. Bugs will be fixed, and as an exception to the general -feature freeze, some hooks may still be added, if deemed useful. -Translations may also be included. After no new bugs (that can not -be deemed features) have been found in this or following "rc" -releases, the stable Ion3 will be released. - -Most of the changes in this release to the previous one already -are bug fixes, in addition to some general clean-up. Other notable -changes are: - - * Winprop matching improvements: it is possible to match against - `is_dockapp` and `is_transient` (booleans), and there's a hack - to support `class` and `instance` for dockapps too. - - * The default configuration puts dockapps in the statusbar's - tray area. - - * The autoconf kludge has been removed, as I will have nothing - to do with it, and nobody else seems to support or maintain - it either. - - * Tab numbers are displayed when releasing modifiers in the - `Mod1+K` submap. - -Distributors should pay heed to the name policy notice in the -LICENSE file. - - -ion-3ds-20070318 ----------------- - -This may be the last "ds" release if Ion3; if all goes well, the next -release is likely to be an "rc". Some minor improvements will still -be done, and minor requests may be accepted, so be quick. - -The most notable changes in this release from the previous one are: - - * Transients and queries in too small frames are "unsqueezed" out - of them, unless disabled with `ioncore.set{ unsqueeze = false }`. - - * Some changes in default `cfg_notion.lua`: instead of loading - various other files, just `cfg_default.lua` is loaded instead. - - * `mod_tiling.untile` (available in the context menu) may be used - to decompose tilings into floating frames. (This is the approximate - opposite of `mod_tiling.mkbottom` and the "new tiling" context menu - entry.) - - * Improved context menus. - - * Slightly improved defaults style, using the drawing engine's - added possibility of partial borders. - - * Various fixes and other improvements, in particular in relation - to focus code. - - -ion-3ds-20070203 ----------------- - - * There's been changes in padding/spacing usage in styles. Frames - now surround stuff inside borders not with `spacing` pixels, but - with `padding_pixels`. Spacing is only used to space things within - the borders (all the tabs and the client window from each other). - Consequently, custom styles may need to be updated to reflect this, - by increasing the padding, possibly also altering/removing colour - (to set it to background colour). - - * The use of drawing engine attributes has also changed, and strict - ordering of them in the styles is no longer necessary. Additionally, - much more attributes are supported, including the name of every - statusbar meter. - - * Xinerama support is gone. In addition to being problematic as such, - it had bit-rotted, and I will not waste time fixing it. - - * `ioncore.set` no longer supports the `default_ws_params` parameter - for configuring the default layout. It is replaced by - `ioncore.deflayout("default", { ... })`, which allows configuring - other layouts as well, known by `mod_query.query_workspace` (F9). - Some default layouts are configured in `cfg_layout.lua`. - - * It is now possible to automatically create new workspaces for - windows with the `new_group` winprop. - - -ion-3ds-20061223 ----------------- - -There's nothing major in this release, primarily just some minor fixes -and tuning to the previous release, that it was time to release. - - -ion-3ds-20061029 ----------------- - -Mostly this release still fixes issues in the big 3ds-20061015 release, -but in addition there are some improvements in the query department: - - * Query activation key now cycles completions (So e.g. the - in the context menu activated with META+M, this same key - can be used to cycle through the alternatives.) This does - not work for queries activated by submap bindings. - - * Likewise, it is no longer necessary to specify the key to - use for cycling for `mod_menu.grabmenu`. - - * Control+R can now be used for history completion in queries. - (Currently matching is done for full string up to 'point', but - this may be changed to substring match.) - - * Note that the parametrisation of WEdln.complete has changed, - and the second cycle parameter must be 'next' now instead of - `true`. - - -ion-3ds-20061020 ----------------- - -Fixes some (expected, but minor) issues in the previous release. - - -ion-3ds-20061015 ----------------- - - * WIonWS and WFloatWS and the corresponding modules are gone, and - your custom configuration files will be broken with regard to these. - However, a partial backwards compatibility hack exists for layout - savefiles. - - The F9 and META-F9 bindings now by default create workspaces with - a tiled layout of two frames. To create an "empty" workspace, - corresponding to the old WFloatWS, use the context menu (META-M) - and choose "new-empty-workspace". It is also possible to change - the default layout. - - * Note that if you restart from an old version to this new version of Ion, - transients will stop working as expected for already existing windows. - They will work for newly-created windows, however. - - * There are a few new sets of binding (including one for `WClientWin`!), - and some old bindings may not work exactly as expected anymore. In - particular, those for switching to full-screen mode. - - **It is probably best to start from scratch with your custom - bindings.** - - * `WFrame.set_tabbar` is gone. If you absolutely want to get rid off - the tabs, you must change the frame's "mode" with `WFrame.set_mode`. - The mode "tiled-alt" has been intended for this, and the corresponding - "framed-tiled-alt" style defaults to `bar = "none"`. - - * The rather popular `detach.lua` script from the scripts repository - is obsoleted now, as Ion includes detach functionality in itself. - To detach a window, use META-K D in the default bindings. To tile - an existing frame from a workspace that doesn't have a tiling yet, - use META-K B. - - -ion-3ds-20060519 ----------------- - -Some notable changes in this release include - - * Lua 5.1 is now required. - - * Framed transients on by default now. New binding contexts - "WFrame.toplevel" and "WMPlex.toplevel" were added to allow - for separate sets of bindings for nested transient frames and - top-level frames. Some of the bindings in the default binding - maps that are likely to be unwanted on transient frames were - moved to these contexts. Old custom bindings will continue to - work unless they modify the defaults by unbinding some of the - moved bindings. - - * Pressing Mod1+K K in the default bindings now switches to any - region with the "activity" flag set (indicated by the a box - at a corner of the screen), if there's one, before cycling to - previously active region. The same effect can be achieved in - your custom bindings with - - ioncore.activity_goto() or ioncore.goto_previous() - - -ion-3ds-20050607 ----------------- - -This release mostly features minor bugfixes and other improvements. The most -visible non-bugfix changes are: - - * Faster "fontset" filling kludge: only `-misc-fixed-*` fonts are tried. Ion - should now load faster in UTF-8 environments, and usually with no less - fonts in the fontset than before. (UTF-8 string drawing still does not - fully utilise these fonts under XFree86, but it does under XOrg.) - - * Experimental auto-show-completions support, which is also on by default - now. In this mode the Tab key can be used to cycle forward through the - completions, and Shift+Tab backwards. Modify the settings seen in the - new `mod_query.lua` to get normal Tab-completion, or change the completion - delay. - - * The release scripts do not run automatically autoconf anymore so maybe - a few more people would look into the README first. - - -ion-3ds-20050322 ----------------- - -The most visible changes in this release are: - - * Mod1+space now toggles the scratchpad by default and Mod1+D the dock. - - * The `ion-(ssh|man|view|edit)` wrapper scripts were removed and instead - the programs used can be configured in Ion's configuration files. - - * `ioncore.exec(_on)` also support the `:cmd` notation for "run cmd in - xterm" familiar from the run query. The `::cmd` notation can be used - to ask for enter to be pressed even when the program quit succesfully. - - * Those with custom configuration files should note that many exported toggle - functions were changed and renamed, and now accept a string parameter - incidating whether to toggle, set or unset the property. - - - `WClientwin.set_fullsreen` (replaces `WClientWin.toggle_fullscreen`) - - `WRegion.set_tagged` (replaces `WRegion.tag/untag/toggle_tag`) - - `WFrame.set_tabbar` (replaces `WFrame.toggle_tabbar`) - - `WFrame.set_shaded` (replaces `WFrame.toggle_shade`) - - `WFloatFrame.set_sticky` (replaces `WFloatFrame.toggle_sticky`) - - `WMPlex.l2_set_hidden` (replaces `WMPlex.l2_hide/show`) - - `mod_sp.set_shown(_on)` (replaces `mod_sp.toggle(_on)`) - - `mod_dock.set_floating_shown_on` (replaces `mod_dock.toggle_floating_on`) - - `WRegion.set_activity` (replaces `WRegion.clear_activity` and - `WRegion.notify_activity`) - - For example, `WRegion.set_tagged(_, 'toggle')` should be used in place of - `WRegion.toggle_tagged(_)` now. - -Obviously there are some other changes and fixes too. See the changelog -for details as usual. - - -ion-3ds-20050304 ----------------- - -This is mostly a bug fix release, but also features improved -`mod_query.query_exec` (F3 key) completion support. Script writers should be -aware that As a side effect of one of these bug fixes, many hooks are now -called in "protected mode" and can not call any functions that modify the -internal state of Ion, except ioncore.defer. - - -ion-3ds-20050227 ----------------- - -The most important changes in this release are: - - * So-called "placeholders". With the help of these the positions of - full-screen windows are remembered in their original frames, and don't - just get inserted after currently active window when returning from - full-screen mode. Under a session manager placeholders are also used - to remember the original order of windows. - - * Improved `mod_statusbar` and `ion-statusd` communication, and colouring - of important/critical meters. - - * A number of small fixes. - - -ion-3ds-20041104 ----------------- - -This monthly snapshot adds a few new and improved features. - - * 'Grabbed menus' that have a single cycling key and activate selected - entry when all modifiers have been released. See - - - - for an application. - - * Potentially blocking status meters are now in a separate ion-statusd - program. Please write your additional status meters that do not monitor - the state of Ion itself for ion-statusd (and contribute them in the - Ion3 scripts repository at ). - For help on writing such status meters, see e.g. source for - `statusd_load` in `ext_statusbar/ion-statusd`. - - * Floating splits are now supported on plain tiled workspaces as well as - on pane workspaces. To create such a split, use the workspace context - menu (Mod1+M by default) or write your own bindings. - - * Line editor now supports history search; Control+Up/Down only scrolls - through history entries with matching initial part. - - * Arbitrary winprop matching criteria is supported. Lua scripts have - access to X properties. - -Of course there are some other minor fixes and improvements as well. - - -ion-3ds-20040906 ----------------- - -This release finally includes a usable (yet still incomplete) version -of the `mod_panews` workspace module (that has also bored the name 'autows' -and 'rubberws' previously). The final outcome is not exactly what I -initially planned, as those plans turned out not to be that workable. -Instead, what `mod_panews` does is add to the basic tiled ionws approach -overlappable splits and automatically filled panes that are initially -empty. Each window is classified and assigned to the pane matching that -classification. (The default classifications are T(erminal), V(iewer) -and M(iscellaneous).) - -For a better feel for it, try it out yourself and please give feedback. -The overlapping panes may be a bit confusing (this is one place where -true translucency might actually be useful and not just eyecandy) at -first, but you'll get used to them if you use the feature, and e.g. -the Gimp works quite splendidly with the toolboxes in the 'M' pane and -image windows in the 'V' pane -- although the simple initial size-based -classification heuristics don't always get it right and overriding -winprops (setting: `panews_classification`) should eventually added. - -In addition to the new module, this release adds support for translations -of program messages and the manual page, regardless of whether such is -of any use in a program like Ion or not. (Currently Finnish and Czech -translations are available.) Of course there are some bug fixes and -other minor additions as well, and the `./configure` script is also back, -the abandonment of libtool being final now. - - -ion-3ds-20040730 ----------------- - -The first thing you'll notice when you start up this release of Ion is -that isn't reading your old configuration that. The next thing you -should notice is a neat layout-adapting statusbar at the bottom of the -screen. That's right, Ion now includes an `ext_statusbar` Lua script that -is enabled by default and displays date/time/load/mail count in a -configurable format. - -So why is it not reading your configuration and save files? Firstly, -all of the `.lua` files were renamed to be indicative of their purpose. -Secondly, there have been so many changes that your old files would be -incompatible anyway. - -The `.lua` files are now named as follows: - - cfg_*.lua Configuration file that the user may wish to edit - look_*.lua Drawing engine style file - saved_*.lua Save file - mod_*.lua Module stub loader - ext_*.lua A bigger Lua extension without a C counterpart - so that it is not a module - -The configuration file for `mod_foobar` or `ext_foobar`, if it has one, is, -of course, `cfg_foobar.lua`. In the topic of file names, also note that -the default installation paths and binary names have changed to include -the component '3' to reflect the situation with many binary packages -of Ion. - -You perhaps noticed above that modules have stub loaders now, so the -user has no need to use the `ioncore.load_module` routine. All extensions -and additional configuration files can now be loaded with 'dopath' -(used to be 'include'). Also, the `menulib`, `querylib`, and `ioncorelib` -Lua libraries are gone and instead their contents can be found in the same -`mod_whatever` namespace with the corresponding module (the "stub" loader -for these modules is a bit more than just a stub...). Some may also -want to know that for `mod_*` and `ext_*` only the compiled .lc files are -now installed, and not the source `.lua` files, thus removing redundant -files and making the installation slightly smaller. - -There are few other changes to the contents of the configuration files -as well, so you're probably best off simply rewriting your modified -configuration files based on the new defaults. There quite likely won't -be any more _big_ changes to the configuration files before the release -of final Ion3, wherever that will be. (Most likely we won't see 3rc:s -yet this year.) However, some functions and variables are still likely -to be renamed or changed. - -In addition to being renamed, the layout savefile of this Ion release -is incompatible with older releases. This is due to the changes made -to the `WIonWS` (and `WAutoWS`) split tree code to make it more modularly -extensible with the new kinds of nodes that `WAutoWS` requires. - -The `mod_autows` module has infact been through many changes since the -last release, and I think I have the final form of it finally figured -out. However, it is still far from finished and unlikely to be ready -for use yet. - - -ion-3ds-20040703 ----------------- - -The major new features of this snapshot release are: - - * `WMPlex` support for a sticky status display area to which `WIonWS`s - adjust properly. Modified to the dock module to support this method. - See the new `dock.lua` to set up the dock in the new embedded or old - floating manner (the API for the latter has also changed). - * Primitive session management support. - -There are also some bug fixes and many minor improvements; see the ChangeLog -for details. Work on `mod_autows` has also started, but it isn't ready for -use yet. - - -### Note on ./configure: - -./configure does not exist for the moment as the source autoconf script -is not up-to-date. Ion no longer uses libtool/libltdl due to problems -with inter-module dependencies, and I have not asked Tom Payne to fix -the script yet, as this change may not be final (although that is most -likely the case; those without Linux-compatible libdl and a flexible -binary format such as ELF will just have to link statically against the -modules). - - -### Notes on session management: - -Ion loads `mod_sm` automatically when the SESSION_MANAGER environment -variable that should be set by the session manager is set, so there's -no need load it in `ion.lua`. - -When session management is in use, all entries in the 'Session' menu -(previously 'Exit' menu) actually invoke the session manager to do the -task. 'Save' asks the SM save the whole session and 'Exit' (ioncore.shutdown) -asks it to shut down the session instead of just causing the WM to quite. -To do the latter, use ioncore.resign. - -Unfortunately, all session managers I have tried (from Debian/unstable), -are broken/incomplete in one way or another: - - -xsm: doesn't support any requests from applications. This makes Ion's -session menu complete unfunctional. The only way to restart/exit/save -state is through xsm's window. - - -gnome-session: This seems the most complete of the all the session managers -and works fine until it is requested to shut down the session, when it dumps -core and session state is lost if was not explicitly saved previously. - -A `~/.gnome2/session` file to use with Ion follows: - - [Default] - num_clients=2 - 0,id=default0 - 0,Priority=0 - 0,RestartCommand=gnome-smproxy --sm-client-id default0 - 1,id=default1 - 1,Priority=10 - 1,RestartCommand=/usr/local/ion-3/bin/ion -smclientid default1 - - -ksmserver: Only supports a global shutdown request, so that Ion can not be -restarted or session state saved in the middle of a session. - - -ion-3ds-20040316 ----------------- - -This is the first development snapshot release of what is to be Ion3. -The most visible changes to Ion2 so far are: - - * Default installation directory is `/usr/local/ion-3` while user - configuration files go in `~/.ion3` - - * The `mod_sp` module was added. It creates an extra toggleable - "scratchpad" frame on each screen. Toggle is for now bound by default - to Mod1+section, which should be very conveniently located on most - Nordic keyboards (left of "1"), but you may have to change it. The - scratchpad should be nice for xconsole or similar monitors, xmessage - and other popups and just as temporary holding space for windows. - - * All modules except the drawing engine are now called `mod_something`. - - * Man-page complection supports a cache of known man-pages for faster - completion. See the README for instructions on setting up a cronjob - or manually generating the index if you want to use the feature. - Also `query_man_path` is no longer used. Instead we try the - `ION_MC_MANPATH` and `MANPATH` environment variables and the - 'manpath' program. - - * Exported functions are now separated into tables (namespaces) - instead of cluttering the globals table. Some frequently used - configuration functions are imported into the globals table, though. - Some functions have also been removed or renamed for simpler and - more consistent function set. - - * New binding configuration mechanism. Dozens of `*_bindings` functions - were replaced with a single `[ioncorelib.]defbindings` function that - accepts a context parameter. Callbacks are specified as strings - (although passing functions still works) to make it easier for - external configuration programs to understand the configuration - files and perhaps remove some confusion among users who do not - care to read a tiny bit of Lua documentation and understand the - concept of anonymous functions. - - * It is now also possible to retrieve a list of bindings with - `ioncorelib.getbindings`, for example, for self-documentation. - - * Single move/resize mode bindings instead of separate for both - ionframe and floatframe. - -There are also quite a few internal changes; see the ChangeLog for -details. No documentation tarball is available at the moment as the -documentation is out-of-date except for the function reference. If -you need the reference, just checkout the documentation from the -Subversion repository with - - svn co http://tao.uab.es/ion/svn/ion-doc/trunk ion-doc-3ds - -and build the documentation. - - -ion-2rc-20040114 ----------------- - -This release is finally what can be called "Ion 2 release candidate #1". -No more new features will be added to "Ion 2" after this release, and the -configuration interface has already been frozen for a while. I will wait a -couple of weeks for bug reports, and if nothing serious is found, the new -stable Ion should finally be released then. - -The most notable changes since the previous release are: - - * The dock module is included - * An optional autoconf script was added - * A few minor bugs were fixed - * Some incomplete features were polished, especially focus control on - floatws, and: - * Changes in X keyboard map are supported now (so e.g. switching to - dvorak after Ion has started should update the bindings to match the - locations of symbols in the dvorak layout). - - -About the version numbering scheme: - -Due to a demand of a version numbering scheme more indicative of the status -of the project, I was thinking of various different new version numbering -schemes for this release: ion-2rc1 (then 2r1, 3d1, etc.), ion-2-20040114-rc1, -ion-2.20040114rc1, ion-20040114-2rc1, etc.). It would've been nice if -simple lexicographical sorting could be used to order the packages, but -in the end I decided to stick with a scheme that is consistent with the -'ion-devel' package names: - - project-branch_and_status-release_date - -Therefore this release is 'ion-2rc-20040114', and the "stable" one will be -'ion-2-20040???'. - - -ion-devel-20031211 ------------------- - -This is a big clean-up release. The most noticeable changes are that -'-devel' has been removed from path names, user configuration files go -in `~/.ion2/` and the main configuration file is 'ion.lua'. (The other -`ioncore-*.lua` files have also been renamed.) There have been no notable -changes in the configuration files themselves, so your old files will -work if you move them to the correct directory and rename the changed -files. (`mv ~/.ion-devel ~/.ion2; cd ~/.ion2; mv ioncore.lua ion.lua;` -etc.) - -This release also finally contains a working PWM binary. (The ioncore+ -scripts scheme was replaced with separate binaries statically linked -to ioncore.a.) Floating workspaces now support edge snapping and -sticky windows, but some PWM features are probably still missing. - -Some bugs were also fixed and users are now force-fed the manual page -the first time Ion is started. Transients can be toggled between -top/bottom of the main window with Mod1+K T. The SSH query uses -`~/.ssh/known_hosts` for completion instead of a manually defined list. - -There may be a few additions (e.g. the dock) and bug fixes, of course, -before the stable release, but this release should pretty much be what -the new "stable" Ion should look like. Please upgrade to it to help -weed out the bugs. Note that you need to upgrade Lua to the 5.0.1 -pre-release. - - -ion-devel-20031119 ------------------- - - -It's finally time for a new release on Ion's development branch. Most -likely this will also be the last "big" release before finally, after -almost two years, releasing a new "stable" version of Ion. A few bug -fix and code clean-up releases should appear in between, though. - -The most important additions, changes and non-changes in this release -are: - - * Menu module - * A little less broken extended character set and string encoding - support - * Extended WM hints fullscreen request support - * Hopefully a little clarified configuration file layout - * Quite a few fixes - * And most important of all: - -> Configuration files written for the previous release should -> still work this time! - -(However, Ion will complain of old drawing engine styles.) - -The menu module provides both drop-down menus (in the stock configuration -pressing Button3 on a tab should show a context menu) and query-like -"in-mplex" menus (F12: main menu at screen level; Mod1+M: the same context -menu as above at frame level). - -What was done enhance support for strings (mostly window titles) in -languages that need more than 8-bit character sets is: - - * Remove UTF8 restriction and support almost arbitrary multibyte - encodings instead. (Statefull encodings will not work and combining - characters can cause clutter. Both are a sign of bad encoding, IMHO.) - - * The XCreateFontSet routine that is used to load fonts in the kind - of structure the X utf8 and multibyte routines want apparently wants - to be able to load glyphs for all character sets specified in the - locale and therefore often fails if only single font is specified. - Therefore a kludge was added that tries loading more fonts while - keeping the fonts' size the same. (The ",*" kludge could load huge - fonts). Unfortunately this has a noticeable effect in startup time :(. - - * There is no longer a system.mk option to enable utf8 (now multibyte) - support, but must still specifically be enabled with the -i18n - command line switch, mostly thanks to troublesome utf-8 locales. - -Because Xlib's UTF-8 string drawing code is broken and very unlikely to -be fixed, decent text output in an UTF-8 locale is still unlikely and -dependent on the fonts loaded in the system. The Xmb routines that are now -used always use an iso10646-1 font even if other fonts are loaded and the -unicode font does not contain a particular glyph to be drawn. The use of -the Xutf8 routines in an utf8 locale can be enabled with the -`CF_DE_USE_XUTF8` compile-time option. The advantage of this is that -these routines seem to choose the font to draw particular character in -most cases more sanely. The downside is that there are other more serious -problems with unknown characters. - -All in all, even if I'd like to support a universal move to UTF-8, thanks -to Xlib brokenness I can't really recommend using UTF-8 locales with Ion -and the default drawing engine if there's a decent alternative encoding. -Most if not all other stateless encodings shouldn't have the problems -UTF-8 has. An alternative drawing engine that didn't use the Xlib i18n -string drawing routines might solve the troubles with utf-8 support. - -One more note: - -If you have saved a custom system.mk, you'll need to set LUAC -point to the Lua compiler there as some of the share/ files -are compiled now. - - -ion-devel-20030810 ------------------- - -It's been a while since the previous release as I wanted to freeze the -Lua configuration/scripting interface for this release and therefore -finish work on a few things. Well, on my part the interface is frozen, -but I will still accept constructive complaints for a short time and -after that the implemented parts of the scripting interface will be -frozen. But in all likelihood, if no one has anything else to say, but -"it's ok", "it sucks", the interface will no longer change, only possibly -grow. - -What's new for this release then? - - * Drawing engine module support. - * OO-style exported functions. The old `class_fn` functions are now - `WClass.fn` (an ugly wrapper is provided in `compat.lua`). - * No more screen-specific configuration or savefiles. - * Session name (can be specified on command line) instead of display - name based savefiles. Also affects query history and not just workspace - saves. - * Bug fixes, most small and one bigger (almost complete rewrite of - the split resizing algorithm). - * Some documentation improvements. - -Converting configuration files. - -Old `.lua` colour schemes and workspace save files can be automatically -converted to a format suitable to be loaded by this latest release. -Other files will have to be ported manually. To convert colour schemes, -use the script `utils/lookconv.lua`. The usage is - - lookconv.lua look-old.lua > look-new.lua - -To convert workspaces savefiles, use the script `utils/saveconv.sh`. -The usage is - - saveconf.sh ~/.ion-devel/saves/workspaces-DISPLAY.*.lua \ - > ~/.ion-devel/SESSIONNAME/workspaces.lua - -`DISPLAY` here is the actual display part of `$DISPLAY`, probably just `:0`. -'*' stands for all screens (if you have only one screen you could do with -perhaps just `workspaces-:0.0.lua`). SESSIONNAME is the name of the session -where you want to use the converted savefiles. Default session name for -`DISPLAY` is `default-session-DISPLAY` with the colon in `DISPLAY` converted -to a dash. For most people this is `default-session--0`. In the simplest -case the whole command line is therefore - - saveconv.sh ~/.ion-devel/saves/workspaces-:0.0.lua \ - > ~/.ion-devel/default-session--0/workspaces.lua - -The scripts may or may not work and are only provided as a potential -convenience that will not be maintained and will be removed eventually. - - -ion-devel-20030623 ------------------- - -Quite a few bug fixes and one most likely unnoticeable improvement: - -2003-06-23: - - * Fixed pointer warping on screen change. - * A bug in grab handler calling code could crash Ion when leaving - keyboard resize mode manually. - * Resize display was showing incorrect values for keyboard resize. - -2003-06-21: - - * Client window last height request bookkeeping code had been lost - when configure request policy was changed. This caused transient - sizes to be calculated incorrectly. - * Return from full screen mode to floatws had been broken. - * As the number of dynamic functions has been getting bigger, the - functions are now sorted on first use and then binary-searched - instead of naive linear searching. - * Screen lookup had been broken for windows that are not properly - on any screen. - - -ion-devel-20030620 ------------------- - -Just some bug fixes and minor behavioural changes and improvements in -this release: - - -ion-devel-20030617 ------------------- - -This release fixes some small problems with the previous release and -adds a workaround kludge for the XFree86 textprop bug (it's been fixed -but no release with the fix is available) that could cause Opera to -crash Ion when UTF8 support was enabled. I also added the winprop -needed for galeon's find dialog to default `kludges.lua` and there's -some extra documentation and defaults for some systems in system.mk. - - -ion-devel-20030614 ------------------- - -Most changes in this release centre around making Ion more tolerant -to broken configuration files; for details see the ChangeLog. There -are also changes in binding configuration as I already mentioned in -an earlier poting. Namely `common-frame-bindings.lua` is gone and the -bindings previously set there (into variables that the `*ws.lua` -files later referenced) were moved to `ioncore-bindings.lua` and are -set using the new functions `mplex_bindings` and `genframe_bindings` -are were added. Old modified configuration files should still work, -however, but if you use `make_active_leaf_fn`, you will need to -include `compat.lua` as the `global_bindings` that used this were -replaced by bindings in `mplex_bindings` and the function -`make_current_clientwin_fn`. - -There are also some (minor) bug fixes and a few other improvements -worth a mention. In particular all regions are now given names of -the form `WFoobar` by default and `DEFAULT_MOD.."F9"` was bound to -create a new workspace without asking for a name. This binding and -`QueryLib.query_workspace` use the workspace type defined in the -variable `default_ws_type` instead of being hardcoded to `WIonWS`. - -All objects passed to Lua now have a unique userdata (a `WWatch` -cached in a weak table) so they can be used e.g. as indices to tables. - - -ion-devel-20030606 ------------------- - -This release unifies some parts of `WScreen` and `WGenFrame`, which makes -screen-level queries possible. (Later the queries for small frames might -be changed to be shown at screen level.) The statusbar restriction from -ion-devel-20030531 was also removed by this some change and a few -non-fatal bugs have been fixed. - - -ion-devel-20030601 ------------------- - -A bug was discovered: - -2003-06-01: - - * An off-by-one error in `extl_l1_finalize` caused references to some - Lua tables (including large completions) never to be released. - -It could be that this bug was causing some other errors in Lua as well. -Sometimes QueryLib bindings failed because some function generators -returned nil although they shouldn't. Adding dummy lines (!) in those -functions fixed the problem and for some reason this patch also seemed -to remove those problems. - - -One more note: as `ioncorelib.lua` and `querylib.lua` are now installed -in `$SHAREDIR`, you must remove the old files in `$ETCDIR` if installing -over a previous release or else there will be errors. You should also -not use any possible old copies you have in `~/.ion-devel/`. (One of the -reasons for moving these to `$SHAREDIR` is to stop users from making -copies of them as they are not configuration files.) - - -ion-devel-20030531 ------------------- - -As the subject line says, Ion-devel-20030531 was just released. The short -list of changes is: - - * The license was changed from the Clarified Artistic License to the - GNU Library/Lesser General Public License (LGPL). - * Screen, viewport and root window renames and other changes (see below). - * Some installation directory changes; the ion-* helper programs are now - installed either in `$SHAREDIR` or `$EXTRABINDIR` and QueryLib searches - for them on the script path (`~/.ion-devel/`, `$ETCDIR`, `$SHAREDIR`, - `$EXTRABINDIR`) instead of assuming them being on `$PATH`. - * Client windows are now in a separate namespace. - * Resize/maximize/shade changes: Shading should work on `WIonFrame`s too - and shade mode is automatic when the client area gets too small when - resizing. Maximize toggle restores frame to previous size if shaded - instead of maximizing. The move/resize mode bindings were changed again - to be more consistent and predictable: Left/Right/Up/Down and F/B/P/N - grow the frame in the specific direction, Shift+keys shrink and in - case of floating frames, `DEFAULT_MOD+keys` move - * Returning from full screen mode should work on `WFloatWS`s too. - * Lots of minor fixes, export additions and clean-up. - -As usual, see the (long!) list of new ChangeLog entries at the end of -this message for details. - - -I've finally personally switched from the old "stable" 20020207 to using -the latest development release at home too and I must say that it is -finally starting to look good. There are still things to be written, but -unless you need "proven" stability, I see no reason to sticking to that -old release anymore. Unless, of course, if you find a problem that I have -not encountered or simply have no need for the new features and don't want -to port your configuration files. - - -On screens, viewports, root windows and problems with the new -implementation - -The objects previously called "screens" are now called "root windows" -and what were called "viewports" are called "screens" to better reflect -what the user sees. (When Xinerama is not used there's no difference -between a root window and a screen, but when Xinerama is used a root -window may be split over multiple screens.) - -This release also creates so-called virtual root windows for each -Xinerama screen when there are more than one. This is to better separate -the windows on different screens and thus emulate normal multihead, the -main difference being that windows can be moved between screens. -Especially the virtual roots are there to keep the windows that are on -a floatws on the right screen. - -Virtual root windows will, however, break a few apps: - - * Mozilla -remote won't work because of its crappy method for looking - up existing windows that can't handle multiple levels of WM windows. - Nested workspaces have the same problem. There is, however, a simple - solution to this problem: gnome-moz-remote. It seems to use a saner - method for looking up an existing Gecko browser and also works with - at least Phoenix/MozillaFirebird and Galeon. - -These two are problems only if you use floatws:s (other problems with -which virtual root windows are intended to solve): - - * The background-setting apps I am aware of will require a following - 'xrefresh' for the changes to be updated to the (transparent) virtual - roots. Background setting apps that support the `_NET_VIRTUAL_ROOTS` - property (which, I think, was meant for root window-sized WS - backgrounds) could be used to set a separate background for each - Xinerama screen, though. I am not aware of any such app. - * Some apps' resize and move features will behave erratically on those - Xinerama screens not at (0, 0) on the root window. This is again - because the apps are assuming there's at most one WM window between - them and the root and are requesting windows' positions incorrectly. - The ICCCM is quite vague on this and I think _all_ apps that I have - tried are doing it wrong but the way e.g. XMMS does it certainly is - not an interpretation of the ICCCM. The apps that now behave correctly - request position for the outermost WM window. Nested workspaces have - the same problem. - -There is one more temporary problem: - - * Status bar modules (and the dock module's statusbar mode) will be - *temporarily* broken when virtual roots are _not_ used. This will be - fixed later when parts of screen and frame code are unified (it should - then be possible to run Ion without any workspace modules and have - queries attached to screens). In the meanwhile, if you don't care about - the above-mentioned problems and want a statusbar (which probably needs - to be ported to this release), you can defined `CF_ALWAYS_VIRTUAL_ROOT` - when compiling Ion. - - -ion-devel-20030510 ------------------- - -There are quite a few small fixes and minor enhancements invisible to -the user in this release. The splitting functions were renamed to be -more consistent and there are a couple of enhancements in the Lua code -query that should make it much more usable. First, tab-completion can -now descend into tables and complete subexpressions. Secondly, the local -variable `_` in addition to 'arg[1]' is set to point to the the frame in -which the query is executing. - -I have also written some new documentation that is now available from -the Ion web page. - - -ion-devel-20030506 ------------------- - -The most notable change in this release is that the `target_id` system -was removed and instead client window status is also saved over -restarts in the saves/workspaces-* files. (It shouldn't be too hard -to hook a session management module over this.) Thanks to this -modification, floatframes can also save their status now. Note -that if you restart from older version of Ion to this one, client -window layout will be messed up. - -There are also a few bug fixes and code to save and load line editor -history was added. - - -ion-devel-20030503 ------------------- - -There are lots of minor improvements in this release, see the -new ChangeLog entries for details. - - -ion-devel-20030427 ------------------- - -Some minor feature enhancements and a few fixes in this new release: - -The file system scanning completions are now put in the background -by receiving the data from external programs through pipes and select() -for data in the main event loop. This way long taking completions don't -block Ion from processing other events and NFS problems shouldn't hang -it. - -Basic window stacking management support code was added. Transients -on floatws:s should now be stacked above their parents. If you don't -want to change your modified binding configurations at this point and -need the functions `floatframe_raise/lower`, include `compat.lua`. - - -ion-devel-20030412 ------------------- - -This release again fixes some minor problems and enhances a few -features. Most of the enhancements are related to UTF8 support and -the floatws module. If UTF8 support is enabled, Ion now tries to -load the "fixed" font at startup after setting up locales. If locales -aren't properly set up, this probably fails and Ion will reset locale -back to "POSIX" as this might make fonts loadable although support for -non-ASCII characters will be crippled. It might now be safe for -package maintainers to enable UTF8 support by default - -As apps seem to have switched to using `_NET_WM_NAME` for UTF8 titles -and filling `WM_NAME` with crap, this property is also preferred over -`WM_NAME` if set. Support for some other "extended" WM hints might be -added in the future but I have no intentions of moking Ion NetWM- -compliant. I might have thought of attempting to do so a few years -ago when I last read the specification but it seems that since then -they've filled it with lots of pointless bloat that may even be in -opposition to Ion's goals. Take multi-parent transients, for example. - -Full error log is also displayed with xmessage on startup whether -it is possible to continue or not. - - -ion-devel-20030410 ------------------- - -There was a bug in QueryLib written yesterday, therefore this release. - - -ion-devel-20030409 ------------------- - -I started converting the query code to Lua and discovered some rather -silly bugs in the Lua interface so here's a new release with the new -and improved query code included. The names of queries have changed -(they're all in the table QueryLib defined in `querylib.lua` -- only -`query_query` and a few temporary handlers are implemented in query.so) -so your modified configuration files will be broken again :(. - - -ion-devel-20030408 ------------------- - -Be prepared to completely rewrite your configuration files once -again: a new version of Ion-devel has been released that uses Lua - for all configuration. Version 5.0 of the -language/library is required. Although scripting possibilities -are now much better than before, there is one rather big drawback: -Lua is not nearly as error-tolerant as Ion's old configuration -parser so a syntax error in a file will cause the file not to be -executed and may even cause Ion not to be able to start. More -comments and documentation on scripting will follow at a later time. - -Libtool and libltdl are also now used to implement module support. -Hopefully this will make compiling Ion easier on a wider range of -platforms. (On the other hand, this could also induce new problems.) - -Finally, the preferred linking address for Ion's home page is now -. The pages are still located at the -old address, but this redirected address should be more permanent. - - -ion-devel-20030327 ------------------- - -Just some minor fixes, binary rename and better embedded workspace -support in this release. I'm still contemplating whether to convert -Ion to C++ and haven't written many things that I intended to as -that decision will affect how those are implemented. - -To create an embedded workspaces in a frame, at the moment you have -to modify the appropriate workspace save file (when Ion is not running!) -by adding lines such as - - region "WFloatWS", "testiupotus" { - } - -inside the frame definition after the other options (flags, `target_id`; -those options will be ignored if after any region definitions). - -One more thing to note: debugging infos are no longer automatically -stripped from the ioncore binary or modules by 'make install' so that -I don't have to explain how to get proper backtraces every time a bug -is found. If you you are confident that you can send me proper backtraces -when you find a bug (or maybe can fix it yourself), you can make the -binary and the modules a _lot_ smaller by running 'strip' on them. - - -ion-devel-20030311 ------------------- - -The list of new ChangeLog entries is long this time, but I'm finally -starting to get to what I started working on almost two years ago. Yes, -there is *experimental* support for PWM-like "floating frame" workspaces. -A lot of the functionality is still missing -- no need to complain of -such at the time -- but the floatws.so module and basic functionality -is there. Most notably perhaps a menu module is not yet implemented. -(Porting the PWM menu code should a nice little task for whomever -interested... *wink*.) To create some PWM workspaces, load the floatws.so -module (should be loaded by default) and in `query_workspace` (F9) -prefix workspace name with 'WFloatWS:' (or load the module before -ionws.so). - -This release is also finally fully modularised: In addition to the -ion core binary that can not function alone, there are the modules -ionws.so, floatws.so and query.so. It is also possible statically -compile the modules in the core binary if the system doesn't support -libdl. - -There's also *experimental* UTF8 support that must be specifically -enabled from system.mk. You must have XFree86 (4.x?) and C99 wide -char support available (either libc directly or maybe libutf8+libiconv). -Thanks to bugs (?) in some of the XFree86 Xutf8 functions, your locales -must be properly set up or else X will stop drawing strings at non-ascii -characters instead of ignoring them. See my earlier rants on the mailing -list for reasons on not using the more standard Xmb functions. -To actually see any special characters, you must load the necessary fonts -by specifying a comma-separated list of fonts to the font and `tab_font` -draw.conf options. Multiple font loading does not work when Xft support -is enabled at the time being. - -There has been a lot of changes in the config files, again, and I can -promise there's still more to come. See the ChangeLog for details. -If you want to use your old workspaces configurations, move them to -`~/.ion-devel/saves` and replace the strings "WFrame" and "WWorkspace" -with "WIonFrame" and "WIonWS", respectively. - - -ion-devel-20030225 ------------------- - -I've made the bugfix release as promised. Get it from the usual place. - - -ion-devel-20030223 ------------------- - -There's a new major development release available from Ion web page. -Not many changes are visible to the end user, though, but a lot was -rewritten to be more flexible and simpler; see the ChangeLog for a -full account. The older development release is also still available -because this release can not be considered as stable after major -changes to the code. The most visible changes are - - * Changes in binding configuration - * A (mostly) working full screen mode toggle (see below) - * The ability to switch workspaces while dragging tabs (experimental) - * The ability to re-read draw.conf without restarting Ion - * Some bug fixes. - - -Some notes on full screen mode toggle: - - * Ion doesn't detect programs trying to leave full screen mode--it - should be possible to devise some method using window properties, - however. - * At least Opera unmaps the window also before changing the size to - enter full screen mode, so Ion doesn't remember the last frame. - * Mozilla sometimes has trouble entering full screen mode but when it - succeeds, Ion remembers the last frame. However, if - `clientwin_toggle_fullscreen` is used to leave the full screen mode - started from Mozilla, Mozilla doesn't know that the mode has been - left. - -Clearly there should be some method of communication between Ion and the -programs for full screen toggles to fully work. At the moment I suggest -using `clientwin_toggle_fullscreen` instead of the programs' native toggles -unless the program has some special full screen mode and you really want -it. diff -Nru notion-3+2014010901/system-autodetect.mk notion-3+2015061300/system-autodetect.mk --- notion-3+2014010901/system-autodetect.mk 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/system-autodetect.mk 2015-06-13 14:37:26.000000000 +0000 @@ -2,6 +2,9 @@ ## System settings ## +# Some system may have custom pkg-config executable name +PKG_CONFIG ?= pkg-config + ## ## Installation paths ## @@ -147,11 +150,7 @@ CC ?= gcc -# Same as '-Wall -pedantic' without '-Wunused' as callbacks often -# have unused variables. -WARN= -W -Wimplicit -Wreturn-type -Wswitch -Wcomment \ - -Wtrigraphs -Wformat -Wchar-subscripts \ - -Wparentheses -pedantic -Wuninitialized +WARN=-W -Wall -pedantic CFLAGS += -Os $(WARN) $(DEFINES) $(INCLUDES) $(EXTRA_INCLUDES) \ -DHAS_SYSTEM_ASPRINTF=$(HAS_SYSTEM_ASPRINTF) @@ -183,16 +182,6 @@ # might allow for those optimisations to be taken without any special # libc or compiler options. - -## -## make depend -## - -DEPEND_FILE=.depend -DO_MAKE_DEPEND=$(CC) -MM $(DEFINES) $(INCLUDES) $(EXTRA_INCLUDES) -MAKE_DEPEND=$(DO_MAKE_DEPEND) $(SOURCES) > $(DEPEND_FILE) - - ## ## AR ## diff -Nru notion-3+2014010901/test/integration/Xinerama.c notion-3+2015061300/test/integration/Xinerama.c --- notion-3+2014010901/test/integration/Xinerama.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/test/integration/Xinerama.c 2015-06-13 14:37:26.000000000 +0000 @@ -142,19 +142,19 @@ XineramaScreenInfo *scrnInfo = NULL; initFakeXinerama(); if(num_screens) { - if((scrnInfo = Xmalloc(sizeof(XineramaScreenInfo) * num_screens))) { - int i; + if((scrnInfo = Xmalloc(sizeof(XineramaScreenInfo) * num_screens))) { + int i; - for(i = 0; i < num_screens; i++) { - scrnInfo[i].screen_number = i; - scrnInfo[i].x_org = screen_info[ i ].x_org; - scrnInfo[i].y_org = screen_info[ i ].y_org; - scrnInfo[i].width = screen_info[ i ].width; - scrnInfo[i].height = screen_info[ i ].height; - } + for(i = 0; i < num_screens; i++) { + scrnInfo[i].screen_number = i; + scrnInfo[i].x_org = screen_info[ i ].x_org; + scrnInfo[i].y_org = screen_info[ i ].y_org; + scrnInfo[i].width = screen_info[ i ].width; + scrnInfo[i].height = screen_info[ i ].height; + } - *number = num_screens; - } else + *number = num_screens; + } else ; } return scrnInfo; diff -Nru notion-3+2014010901/TODO.README notion-3+2015061300/TODO.README --- notion-3+2014010901/TODO.README 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/TODO.README 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ - -The TODO.riot file containg an Ion TODO list has been created with the -riot outliner available from . The file is, -however, just an mbox file, so you can read it with your favourite -threading mail user agent. For example: mutt -f TODO.riot diff -Nru notion-3+2014010901/TODO.riot notion-3+2015061300/TODO.riot --- notion-3+2014010901/TODO.riot 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/TODO.riot 1970-01-01 00:00:00.000000000 +0000 @@ -1,527 +0,0 @@ -From background-static Thu Mar 23 17:30:06 EET 2006 -Message-Id: -Date: Thu Mar 23 17:30:06 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:30:06 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Ion TODO list - -Ion TODO list - -From background-static Thu Mar 23 18:08:00 EET 2006 -Message-Id: -Date: Thu Mar 23 18:08:00 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:08:12 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Core/general -In-Reply-To: - -Core/general - -From background-static Thu Mar 23 17:31:43 EET 2006 -Message-Id: -Date: Thu Mar 23 17:31:43 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:31:46 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Startup sequence support -In-Reply-To: - -Startup sequence support - -Support for the FDO startup notification specification should be -added. Ion should arrange things in the right frame by LAUNCHED_BY. - -The specification is at - - - -From background-static Thu Mar 23 17:41:20 EET 2006 -Message-Id: -Date: Thu Mar 23 17:41:20 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:41:20 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Better support for the few applicable EWMH hints -In-Reply-To: - -Better support for the few applicable EWMH hints - -From background-static Thu Mar 23 18:00:25 EET 2006 -Message-Id: -Date: Thu Mar 23 18:00:25 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:00:25 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Some way to load/initialise inherited drawing engines properly. -In-Reply-To: - -Some way to load/initialise inherited drawing engines properly. - -From background-static Thu Mar 23 18:04:35 EET 2006 -Message-Id: -Date: Thu Mar 23 18:04:35 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:04:35 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: New hooks? -In-Reply-To: - -New hooks? - -From background-static Thu Mar 23 18:10:34 EET 2006 -Message-Id: -Date: Thu Mar 23 18:10:34 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:10:34 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Tiled workspaces -In-Reply-To: - -Tiled workspaces - -From background-static Thu Mar 23 17:50:02 EET 2006 -Message-Id: -Date: Thu Mar 23 17:50:02 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:50:22 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Pane handles should allow resizing with the rodent. -In-Reply-To: - -Pane handles should allow resizing with the rodent. -(You know, those things on the sides of floating splits.) - -From background-static Wed Jan 10 03:06:06 EET 2007 -Message-Id: -Date: Wed Jan 10 03:06:06 EET 2007 -Status: RO -X-Riot-Version: 1ds-20060502 -From: Riot -X-Riot-Edited: Wed Jan 10 03:06:06 EET 2007 -Content-Type: text/plain; charset=utf-8 -Subject: Trays? -In-Reply-To: - -Trays? - -From background-static Thu Mar 23 18:09:58 EET 2006 -Message-Id: -Date: Thu Mar 23 18:09:58 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:10:27 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: mod_statusbar and ion-statusd -In-Reply-To: - -mod_statusbar and ion-statusd - -From background-static Thu Mar 23 17:36:11 EET 2006 -Message-Id: -Date: Thu Mar 23 17:36:11 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:36:11 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Multi-line statusbar -In-Reply-To: - -Multi-line statusbar - -From background-static Thu Mar 23 17:36:44 EET 2006 -Message-Id: -Date: Thu Mar 23 17:36:44 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:39:08 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Better control of layout etc. -In-Reply-To: - -Better control of layout etc. - -From background-static Thu Mar 23 17:39:20 EET 2006 -Message-Id: -Date: Thu Mar 23 17:39:20 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:39:20 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: mpress support for meters or other areas. -In-Reply-To: - -mpress support for meters or other areas. - -From background-static Thu Mar 23 17:54:07 EET 2006 -Message-Id: -Date: Thu Mar 23 17:54:07 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:54:07 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Communicating configuration to statusd shouldn't use temp file -In-Reply-To: - -Communicating configuration to statusd shouldn't use temp file - -From background-static Thu Mar 23 18:11:44 EET 2006 -Message-Id: -Date: Thu Mar 23 18:11:44 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:11:44 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: mod_query -In-Reply-To: - -mod_query - -From background-static Thu Mar 23 17:40:27 EET 2006 -Message-Id: -Date: Thu Mar 23 17:40:27 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:40:35 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: mod_query.message should handle tabs properly -In-Reply-To: - -mod_query.message should handle tabs properly - -From background-static Thu Mar 23 18:11:52 EET 2006 -Message-Id: -Date: Thu Mar 23 18:11:52 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:11:52 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: mod_dock -In-Reply-To: - -mod_dock - -From background-static Thu Mar 23 17:58:56 EET 2006 -Message-Id: -Date: Thu Mar 23 17:58:56 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:58:56 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: There are some problems with user geometries of docked apps. -In-Reply-To: - -There are some problems with user geometries of docked apps. - -From background-static Thu Mar 23 18:12:02 EET 2006 -Message-Id: -Date: Thu Mar 23 18:12:02 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:12:02 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: mod_mgmtmode -In-Reply-To: - -mod_mgmtmode - -From background-static Thu Mar 23 18:04:54 EET 2006 -Message-Id: -Date: Thu Mar 23 18:04:54 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:04:54 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: An actual management mode for mod_mgmtmode. -In-Reply-To: - -An actual management mode for mod_mgmtmode. - -From background-static Thu Mar 23 18:11:20 EET 2006 -Message-Id: -Date: Thu Mar 23 18:11:20 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:11:20 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Drawing engine(s) -In-Reply-To: - -Drawing engine(s) - -From background-static Thu Mar 23 18:02:32 EET 2006 -Message-Id: -Date: Thu Mar 23 18:02:32 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:02:32 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: There should be a sticky attribute for the drawing engine -In-Reply-To: - -There should be a sticky attribute for the drawing engine -for sticky floatws frames. - -From background-static Thu Mar 23 18:06:40 EET 2006 -Message-Id: -Date: Thu Mar 23 18:06:40 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:06:40 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: There are some problems with transparent backgrounds of tabs, IIRC. -In-Reply-To: - -There are some problems with transparent backgrounds of tabs, IIRC. - -From background-static Thu Mar 23 18:07:53 EET 2006 -Message-Id: -Date: Thu Mar 23 18:07:53 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:07:53 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Documentation -In-Reply-To: - -Documentation - -From background-static Sat Sep 16 14:14:23 EEST 2006 -Message-Id: -Date: Sat Sep 16 14:14:23 EEST 2006 -Status: RO -X-Riot-Version: 1ds-20060502 -From: Riot -X-Riot-Edited: Sat Sep 16 14:14:23 EEST 2006 -Content-Type: text/plain; charset=utf-8 -Subject: More of it -In-Reply-To: - -More of it - -From background-static Thu Mar 23 17:33:17 EET 2006 -Message-Id: -Date: Thu Mar 23 17:33:17 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:49:42 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Random ideas to try (semi-TODO) - -Random ideas to try (semi-TODO) - -Just some stuff here for interested people to try. No guarantees -that even a good patch will ever be accepted though. - -From background-static Thu Mar 23 18:06:20 EET 2006 -Message-Id: -Date: Thu Mar 23 18:06:20 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:06:20 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Movement threshold would be better for floating splits, raise delay -In-Reply-To: - -Movement threshold would be better for floating splits, raise delay -is just an ugly hack. This is just not implementable in a nice way -without proper translucency support. - -From background-static Thu Mar 23 18:07:15 EET 2006 -Message-Id: -Date: Thu Mar 23 18:07:15 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:07:15 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Composition manager and all the nice stuff possible with it -In-Reply-To: - -Composition manager and all the nice stuff possible with it - -From background-static Thu Mar 23 18:05:04 EET 2006 -Message-Id: -Date: Thu Mar 23 18:05:04 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:05:04 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Key grabs from scripts? -In-Reply-To: - -Key grabs from scripts? - -From background-static Thu Mar 23 18:01:56 EET 2006 -Message-Id: -Date: Thu Mar 23 18:01:56 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:01:56 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Dock resizing improvements? -In-Reply-To: - -Dock resizing improvements? - -From background-static Thu Mar 23 18:01:40 EET 2006 -Message-Id: -Date: Thu Mar 23 18:01:40 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:01:40 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Perhaps dock/statusbar should be able to use a different style -In-Reply-To: - -Perhaps dock/statusbar should be able to use a different style -on floatws. - -From background-static Thu Mar 23 18:01:23 EET 2006 -Message-Id: -Date: Thu Mar 23 18:01:23 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:01:23 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Make lines with other frame splits "sticking" for resize. -In-Reply-To: - -Make lines with other frame splits "sticking" for resize. - -From background-static Thu Mar 23 18:00:54 EET 2006 -Message-Id: -Date: Thu Mar 23 18:00:54 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 18:00:54 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Better support for nesting workspaces etc. -In-Reply-To: - -Better support for nesting workspaces etc. - -From background-static Thu Mar 23 17:59:40 EET 2006 -Message-Id: -Date: Thu Mar 23 17:59:40 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:59:40 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Maybe parent window should shrink out of the way of transients -In-Reply-To: - -Maybe parent window should shrink out of the way of transients -at least to some threshold. - -From background-static Thu Mar 23 17:57:42 EET 2006 -Message-Id: -Date: Thu Mar 23 17:57:42 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:57:42 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Maybe placeholders should be exported to Lua side, -In-Reply-To: - -Maybe placeholders should be exported to Lua side, -for initial placement setup and so on. - -From background-static Thu Mar 23 17:54:38 EET 2006 -Message-Id: -Date: Thu Mar 23 17:54:38 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:54:38 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Some kind of error reporting system for bindings -In-Reply-To: - -Some kind of error reporting system for bindings -as well while Ion is running. - -From background-static Thu Mar 23 17:51:09 EET 2006 -Message-Id: -Date: Thu Mar 23 17:51:09 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:51:09 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Perhaps transients should restore their sizes -In-Reply-To: - -Perhaps transients should restore their sizes -when moving from a small to big frame, if the user has not resized it. - -From background-static Thu Mar 23 17:48:55 EET 2006 -Message-Id: -Date: Thu Mar 23 17:48:55 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:48:55 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Perhaps / should be stripped from completed directory names. -In-Reply-To: - -Perhaps / should be stripped from completed directory names. -It should however remain in the list of completions as a hint. -Then typing the slash would trigger a new completion run in -auto-show-completions mode. - -From background-static Thu Mar 23 17:49:07 EET 2006 -Message-Id: -Date: Thu Mar 23 17:49:07 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:49:07 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: How about pane handles on all splits? -In-Reply-To: - -How about pane handles on all splits? - diff -Nru notion-3+2014010901/.travis.yml notion-3+2015061300/.travis.yml --- notion-3+2014010901/.travis.yml 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/.travis.yml 2015-06-13 14:37:26.000000000 +0000 @@ -2,8 +2,13 @@ compiler: - gcc - clang +env: + - C99_SOURCE="" + - + - USE_XFT=0 +matrix: + exclude: + - compiler: clang + env: C99_SOURCE="" +before_install: sudo apt-get install lua5.2 liblua5.2-dev script: make - -branches: - only: - - travis diff -Nru notion-3+2014010901/utils/ion-completefile/ion-completefile.c notion-3+2015061300/utils/ion-completefile/ion-completefile.c --- notion-3+2014010901/utils/ion-completefile/ion-completefile.c 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/utils/ion-completefile/ion-completefile.c 2015-06-13 14:37:26.000000000 +0000 @@ -73,11 +73,10 @@ #define DISPOSE(X) free(X) #define NEW(T, X) ALLOC_N(T, X) #define STATIC static -#define EL_CONST const #define SIZE_T int #define MEM_INC 64 #define COPYFROMTO(new, p, len) \ - (void)memcpy((char *)(new), (char *)(p), (int)(len)) + (void)memcpy((char *)(new), (char *)(p), (int)(len)) #ifndef NGROUPS /* Hopefully one of these is defined... */ @@ -86,68 +85,46 @@ typedef struct dirent DIRENTRY; -static void el_add_slash(char *path,char *p) -{ - struct stat sb; - - if (stat(path, &sb) >= 0) - (void)strcat(p, S_ISDIR(sb.st_mode) ? "/" : " "); -} - static int el_is_directory(char *path) { - struct stat sb; - - if ((stat(path, &sb) >= 0) && S_ISDIR(sb.st_mode)) - return 1; - else - return 0; + struct stat sb; + + if ((stat(path, &sb) >= 0) && S_ISDIR(sb.st_mode)) + return 1; + else + return 0; } static int el_is_executable(char *path) { - unsigned int t_uid = geteuid(); - gid_t t_gids[NGROUPS]; - int groupcount; - struct stat sb; - int i; - - groupcount = getgroups(NGROUPS, t_gids); - - if((stat(path, &sb) >= 0) && S_ISREG(sb.st_mode)) { - /* Normal file, see if we can execute it. */ - - if (sb.st_mode & S_IXOTH) { /* All can execute */ - return (1); - } - if (sb.st_uid == t_uid && (sb.st_mode & S_IXUSR)) { - return (1); - } - if (sb.st_mode & S_IXGRP) { - for (i = 0; i < groupcount; i++) { - if (sb.st_gid == t_gids[i]) { - return (1); - } - } - } - } - return (0); + unsigned int t_uid = geteuid(); + gid_t t_gids[NGROUPS]; + int groupcount; + struct stat sb; + int i; + + groupcount = getgroups(NGROUPS, t_gids); + + if((stat(path, &sb) >= 0) && S_ISREG(sb.st_mode)) { + /* Normal file, see if we can execute it. */ + + if (sb.st_mode & S_IXOTH) { /* All can execute */ + return (1); + } + if (sb.st_uid == t_uid && (sb.st_mode & S_IXUSR)) { + return (1); + } + if (sb.st_mode & S_IXGRP) { + for (i = 0; i < groupcount; i++) { + if (sb.st_gid == t_gids[i]) { + return (1); + } + } + } + } + return (0); } - -/* - ** strcmp-like sorting predicate for qsort. - */ -/*STATIC int compare(EL_CONST void *p1,EL_CONST void *p2) - { - EL_CONST char **v1; - EL_CONST char **v2; - * - v1 = (EL_CONST char **)p1; - v2 = (EL_CONST char **)p2; - return strcmp(*v1, *v2); - }*/ - /* ** Fill in *avp with an array of names that match file, up to its length. ** Ignore . and .. . @@ -161,45 +138,45 @@ DIRENTRY *ep; SIZE_T ac; SIZE_T len; - - if(*dir=='\0') - dir="."; - + + if(*dir=='\0') + dir="."; + if ((dp = opendir(dir)) == NULL) - return 0; - + return 0; + av = NULL; ac = 0; len = strlen(file); while ((ep = readdir(dp)) != NULL) { - p = ep->d_name; - if (p[0] == '.' && (p[1] == '\0' || (p[1] == '.' && p[2] == '\0'))) - continue; - if (len && strncmp(p, file, len) != 0) - continue; - - if ((ac % MEM_INC) == 0) { - if ((new = NEW(char*, ac + MEM_INC)) == NULL) - break; - if (ac) { - COPYFROMTO(new, av, ac * sizeof (char **)); - DISPOSE(av); - } - *avp = av = new; - } - - if ((av[ac] = STRDUP(p)) == NULL) { - if (ac == 0) - DISPOSE(av); - break; - } - ac++; + p = ep->d_name; + if (p[0] == '.' && (p[1] == '\0' || (p[1] == '.' && p[2] == '\0'))) + continue; + if (len && strncmp(p, file, len) != 0) + continue; + + if ((ac % MEM_INC) == 0) { + if ((new = NEW(char*, ac + MEM_INC)) == NULL) + break; + if (ac) { + COPYFROMTO(new, av, ac * sizeof (char **)); + DISPOSE(av); + } + *avp = av = new; + } + + if ((av[ac] = STRDUP(p)) == NULL) { + if (ac == 0) + DISPOSE(av); + break; + } + ac++; } - + /* Clean up and return. */ (void)closedir(dp); - /* if (ac) - qsort(av, ac, sizeof (char **), compare);*/ + /* if (ac) + qsort(av, ac, sizeof (char **), compare);*/ return ac; } @@ -221,66 +198,66 @@ DIRENTRY*ep; SIZE_T ac; SIZE_T len; - + t_path = strdup(path); t_t_path = t_path; - + av = NULL; ac = 0; - + t_t_path = strtok(t_path, ":\n\0"); while (t_t_path) { - if ((dp = opendir(t_t_path)) == NULL) { - t_t_path = strtok(NULL, ":\n\0"); - continue; - } - - len = strlen(file); - while ((ep = readdir(dp)) != NULL) { - p = ep->d_name; - if (p[0] == '.' && (p[1] == '\0' || (p[0] == '.' && - p[1] == '.' && - p[2] == '\0'))) { - continue; - } - if (len && strncmp(p, file, len) != 0) { - continue; - } - - snprintf(t_tmp, 1024, "%s/%s", t_t_path, p); - if(!el_is_executable(t_tmp)) { - continue; - } - - if ((ac % MEM_INC) == 0) { - if ((new = NEW(char*, ac + MEM_INC)) == NULL) { - break; - } - if (ac) { - COPYFROMTO(new, av, ac * sizeof (char **)); - DISPOSE(av); - } - *avp = av = new; - } - if ((av[ac] = STRDUP(p)) == NULL) { - if (ac == 0) - DISPOSE(av); - break; - } - ac++; - } - (void)closedir(dp); - t_t_path = strtok(NULL, ":\n\0"); - - + if ((dp = opendir(t_t_path)) == NULL) { + t_t_path = strtok(NULL, ":\n\0"); + continue; + } + + len = strlen(file); + while ((ep = readdir(dp)) != NULL) { + p = ep->d_name; + if (p[0] == '.' && (p[1] == '\0' || (p[0] == '.' && + p[1] == '.' && + p[2] == '\0'))) { + continue; + } + if (len && strncmp(p, file, len) != 0) { + continue; + } + + snprintf(t_tmp, 1024, "%s/%s", t_t_path, p); + if(!el_is_executable(t_tmp)) { + continue; + } + + if ((ac % MEM_INC) == 0) { + if ((new = NEW(char*, ac + MEM_INC)) == NULL) { + break; + } + if (ac) { + COPYFROMTO(new, av, ac * sizeof (char **)); + DISPOSE(av); + } + *avp = av = new; + } + if ((av[ac] = STRDUP(p)) == NULL) { + if (ac == 0) + DISPOSE(av); + break; + } + ac++; + } + (void)closedir(dp); + t_t_path = strtok(NULL, ":\n\0"); + + } /* t_path-while */ - + /* Clean up and return. */ - + /*if (ac) - qsort(av, ac, sizeof (char **), compare); */ + qsort(av, ac, sizeof (char **), compare); */ free(t_path); - + return ac; } @@ -293,31 +270,31 @@ static char DOT[] = "./"; char *dpart; char *fpart; - + if ((fpart = strrchr(path, '/')) == NULL) { - /* No slashes in path */ - if ((dpart = STRDUP(DOT)) == NULL) - return -1; - if ((fpart = STRDUP(path)) == NULL) { - DISPOSE(dpart); - return -1; - } + /* No slashes in path */ + if ((dpart = STRDUP(DOT)) == NULL) + return -1; + if ((fpart = STRDUP(path)) == NULL) { + DISPOSE(dpart); + return -1; + } }else{ - if ((dpart = STRDUP(path)) == NULL) - return -1; - /* Include the slash -- Tuomo */ - dpart[fpart - path + 1] = '\0'; - if ((fpart = STRDUP(++fpart)) == NULL) { - DISPOSE(dpart); - return -1; - } - /* Root no longer a special case due above -- Tuomo - if (dpart[0] == '\0') - { - dpart[0] = '/'; - dpart[1] = '\0'; - } - */ + if ((dpart = STRDUP(path)) == NULL) + return -1; + /* Include the slash -- Tuomo */ + dpart[fpart - path + 1] = '\0'; + if ((fpart = STRDUP(++fpart)) == NULL) { + DISPOSE(dpart); + return -1; + } + /* Root no longer a special case due above -- Tuomo + if (dpart[0] == '\0') + { + dpart[0] = '/'; + dpart[1] = '\0'; + } + */ } *dirpart = dpart; *filepart = fpart; @@ -329,167 +306,93 @@ */ STATIC int SplitRelativePath(const char *path,char **dirpart,char **filepart) { - static char DOT[] = "./"; static char EOL[] = "\0"; char *dpart; char *fpart; - + if ((fpart = strrchr(path, '/')) == NULL) { - /* No slashes in path */ - if ((dpart = STRDUP(EOL)) == NULL) - return -1; - if ((fpart = STRDUP(path)) == NULL) { - DISPOSE(dpart); - return -1; - } + /* No slashes in path */ + if ((dpart = STRDUP(EOL)) == NULL) + return -1; + if ((fpart = STRDUP(path)) == NULL) { + DISPOSE(dpart); + return -1; + } } else { - if ((dpart = STRDUP(path)) == NULL) - return -1; - /* Include the slash -- Tuomo */ - dpart[fpart - path + 1] = '\0'; - if ((fpart = STRDUP(++fpart)) == NULL) { - DISPOSE(dpart); - return -1; - } - /* Root no longer a special case due above -- Tuomo - if (dpart[0] == '\0') - { - dpart[0] = '/'; - dpart[1] = '\0'; - } - */ + if ((dpart = STRDUP(path)) == NULL) + return -1; + /* Include the slash -- Tuomo */ + dpart[fpart - path + 1] = '\0'; + if ((fpart = STRDUP(++fpart)) == NULL) { + DISPOSE(dpart); + return -1; + } + /* Root no longer a special case due above -- Tuomo + if (dpart[0] == '\0') + { + dpart[0] = '/'; + dpart[1] = '\0'; + } + */ } *dirpart = dpart; *filepart = fpart; return 0; } -/* - ** Attempt to complete the pathname, returning an allocated copy. - ** Fill in *unique if we completed it, or set it to 0 if ambiguous. - */ -#if 0 -static char *el_complete(char *pathname,int *unique) +static int complete_homedir(const char *username, char ***cp_ret, char **beg) { - char **av; - char *dir; - char *file; - char *new; - char *p; - SIZE_T ac; - SIZE_T end; - SIZE_T i; - SIZE_T j; - SIZE_T len; - - if (SplitPath(pathname, &dir, &file) < 0) - return NULL; - - if ((ac = FindMatches(dir, file, &av)) == 0) { - DISPOSE(dir); - DISPOSE(file); - return NULL; - } - - p = NULL; - len = strlen(file); - if (ac == 1) { - /* Exactly one match -- finish it off. */ - *unique = 1; - j = strlen(av[0]) - len + 2; - if ((p = NEW(char, j + 1)) != NULL) { - COPYFROMTO(p, av[0] + len, j); - if ((new = NEW(char, strlen(dir) + strlen(av[0]) + 2)) != NULL) { - (void)strcpy(new, dir); - (void)strcat(new, "/"); - (void)strcat(new, av[0]); - el_add_slash(new, p); - DISPOSE(new); - } - } - } - else { - *unique = 0; - if (len) { - /* Find largest matching substring. */ - for (i = len, end = strlen(av[0]); i < end; i++) - for (j = 1; j < ac; j++) - if (av[0][i] != av[j][i]) - goto breakout; - breakout: - if (i > len) { - j = i - len + 1; - if ((p = NEW(char, j)) != NULL) { - COPYFROMTO(p, av[0] + len, j); - p[j - 1] = '\0'; - } - } - } + struct passwd *pw; + char *name; + char **cp; + int n=0, l=strlen(username); + + *cp_ret=NULL; + + for(pw=getpwent(); pw!=NULL; pw=getpwent()){ + name=pw->pw_name; + + if(l && strncmp(name, username, l)) + continue; + + name=scat3("~", name, "/"); + + if(name==NULL){ + warn_err(); + continue; + } + + cp=REALLOC_N(*cp_ret, char*, n, n+1); + + if(cp==NULL){ + warn_err(); + free(name); + if(*cp_ret!=NULL) + free(*cp_ret); + }else{ + cp[n]=name; + n++; + *cp_ret=cp; + } + } + + endpwent(); + + if(n==1){ + name=**cp_ret; + name[strlen(name)-1]='\0'; + pw=getpwnam(name+1); + if(pw!=NULL && pw->pw_dir!=NULL){ + name=scat(pw->pw_dir, "/"); + if(name!=NULL){ + free(**cp_ret); + **cp_ret=name; + } + } } - - /* Clean up and return. */ - DISPOSE(dir); - DISPOSE(file); - for (i = 0; i < ac; i++) - DISPOSE(av[i]); - DISPOSE(av); - return p; -} -#endif -static int complete_homedir(const char *username, char ***cp_ret, char **beg) -{ - struct passwd *pw; - char *name; - char **cp; - int n=0, l=strlen(username); - - *cp_ret=NULL; - - for(pw=getpwent(); pw!=NULL; pw=getpwent()){ - name=pw->pw_name; - - if(l && strncmp(name, username, l)) - continue; - - name=scat3("~", name, "/"); - - if(name==NULL){ - warn_err(); - continue; - } - - cp=REALLOC_N(*cp_ret, char*, n, n+1); - - if(cp==NULL){ - warn_err(); - free(name); - if(*cp_ret!=NULL) - free(*cp_ret); - }else{ - cp[n]=name; - n++; - *cp_ret=cp; - } - } - - endpwent(); - - if(n==1){ - name=**cp_ret; - name[strlen(name)-1]='\0'; - pw=getpwnam(name+1); - if(pw!=NULL && pw->pw_dir!=NULL){ - name=scat(pw->pw_dir, "/"); - if(name!=NULL){ - free(**cp_ret); - **cp_ret=name; - } - } - } - - return n; + return n; } /* @@ -499,48 +402,47 @@ */ static int tilde_complete(char *path, char **retpath) { - char *home; - char *p; - struct passwd *pw; - - if(*path!='~') - return 0; - - if(*(path+1)!='/' && *(path+1)!='\0'){ - p=strchr(path, '/'); - - if(p==NULL) - return 2; - - *p='\0'; - pw=getpwnam(path+1); - *p='/'; - - if(pw==NULL) - return 0; - - home=pw->pw_dir; - }else{ - p=path+1; - home=getenv("HOME"); - } - - if(home!=NULL){ - if(*p=='\0') - *retpath=scat3(home, p, "/"); - else - *retpath=scat(home, p); - } - - return (*retpath!=NULL); + char *home; + char *p; + struct passwd *pw; + + if(*path!='~') + return 0; + + if(*(path+1)!='/' && *(path+1)!='\0'){ + p=strchr(path, '/'); + + if(p==NULL) + return 2; + + *p='\0'; + pw=getpwnam(path+1); + *p='/'; + + if(pw==NULL) + return 0; + + home=pw->pw_dir; + }else{ + p=path+1; + home=getenv("HOME"); + } + + if(home!=NULL){ + if(*p=='\0') + *retpath=scat3(home, p, "/"); + else + *retpath=scat(home, p); + } + + return (*retpath!=NULL); } /* ** Return all possible completions. */ -int do_complete_file(char *pathname, char ***avp, char **beg, - void *unused) +int do_complete_file(char *pathname, char ***avp, char **beg) { char *dir; char *file, *path=NULL, *tt; @@ -548,42 +450,42 @@ switch(tilde_complete(pathname, &path)){ case 0: - i=SplitPath(pathname, &dir, &file); - break; + i=SplitPath(pathname, &dir, &file); + break; case 2: - return complete_homedir(pathname+1, avp, beg); + return complete_homedir(pathname+1, avp, beg); default: - i=SplitPath(path, &dir, &file); + i=SplitPath(path, &dir, &file); } if(i<0) - return 0; + return 0; ac=FindMatches(dir, file, avp); DISPOSE(file); if(ac==0 && path!=NULL){ - *avp=ALLOC(char*); - if(*avp==NULL) - return 0; - **avp=path; - return 1; + *avp=ALLOC(char*); + if(*avp==NULL) + return 0; + **avp=path; + return 1; }else if(path!=NULL){ - free(path); + free(path); } /* Identify directories with trailing / */ for(i=0; i/dev/null 2>&1; then exec xscreensaver-command -lock -else - exec xlock +else + if type "i3lock" > /dev/null; then + exec i3lock -n -c 000000 + else + exec xlock + fi fi diff -Nru notion-3+2014010901/version.h notion-3+2015061300/version.h --- notion-3+2014010901/version.h 2014-01-09 19:55:20.000000000 +0000 +++ notion-3+2015061300/version.h 2015-06-13 14:37:26.000000000 +0000 @@ -1,4 +1,4 @@ -#define NOTION_RELEASE "3-2014010901" +#define NOTION_RELEASE "3-2015061300" #define NOTION_VERSION NOTION_RELEASE #define NOTION_API_VERSION NOTION_RELEASE