From 803afbc1cd633f6c025bcd9537e9b7e9aedadd0d Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Sat, 24 Mar 2007 19:04:35 +0000 Subject: [PATCH] [svn-upgrade] Integrating new upstream version, ion3 (20070203) --- ChangeLog | 385 ++++++++ README | 22 +- RELNOTES | 29 + TODO.riot | 39 +- build/ac/configure.ac | 2 +- config.h | 5 +- de/brush.c | 88 +- de/brush.h | 39 +- de/colour.c | 7 +- de/colour.h | 4 +- de/draw.c | 99 +- de/font.c | 7 +- de/font.h | 5 +- de/fontset.h | 2 +- de/init.c | 52 +- de/init.h | 2 +- de/private.h | 9 +- de/style.c | 27 +- de/style.h | 6 +- doc/ChangeLog | 33 + doc/Makefile | 5 +- doc/conf-menus.tex | 5 + doc/conf-winprops.tex | 22 +- doc/de.tex | 36 +- doc/exact-version | 4 +- doc/fullhierarchy.tex | 4 +- doc/hookref.tex | 121 +-- doc/ionconf.dvi.gz | Bin 117932 -> 119470 bytes doc/ionconf.out | 6 +- doc/ionconf.ps.gz | Bin 238432 -> 240580 bytes doc/ionconf.tex | 2 +- doc/ionconf/images.log | 18 +- doc/ionconf/images.tex | 24 +- doc/ionconf/index.html | 2 +- doc/ionconf/internals.pl | 124 +-- doc/ionconf/ionconf.html | 2 +- doc/ionconf/labels.pl | 272 +++--- doc/ionconf/node10.html | 35 +- doc/ionconf/node11.html | 1290 ++++++++++++------------ doc/ionconf/node12.html | 2 +- doc/ionconf/node3.html | 53 +- doc/ionconf/node4.html | 129 ++- doc/ionconf/node5.html | 39 +- doc/ionconf/node6.html | 4 +- doc/ionconf/node7.html | 1615 ++++++++++++++++--------------- doc/ionconf/node9.html | 4 +- doc/ionnotes.dvi.gz | Bin 27907 -> 27903 bytes doc/ionnotes.ps.gz | Bin 109113 -> 109075 bytes doc/ionnotes/node2.html | 53 +- doc/ionnotes/node3.html | 6 +- doc/ionnotes/node4.html | 18 +- doc/ionnotes/node5.html | 6 +- doc/ionnotes/node8.html | 64 +- doc/ionnotes/node9.html | 2 +- doc/objects.tex | 15 +- etc/Makefile | 2 +- etc/cfg_ion.lua | 4 + etc/cfg_ioncore.lua | 39 +- etc/cfg_layouts.lua | 55 ++ etc/cfg_modules.lua | 4 +- etc/cfg_panews.lua | 57 -- etc/cfg_tiling.lua | 67 -- etc/look_brownsteel.lua | 12 - etc/look_clean.lua | 33 +- etc/look_cleanios.lua | 25 +- etc/look_cleanviolet.lua | 31 +- etc/look_dusky.lua | 13 - etc/look_greyviolet.lua | 13 - etc/look_ios.lua | 13 - etc/look_simpleblue.lua | 11 +- etc/lookcommon_clean.lua | 59 +- etc/lookcommon_emboss.lua | 54 +- exact-version | 4 +- ion/Makefile | 2 +- ion/ion.c | 23 +- ioncore/Makefile | 3 +- ioncore/activity.c | 25 +- ioncore/activity.h | 4 +- ioncore/attach.c | 22 +- ioncore/attach.h | 3 +- ioncore/basicpholder.c | 2 +- ioncore/basicpholder.h | 2 +- ioncore/binding.c | 2 +- ioncore/binding.h | 2 +- ioncore/bindmaps.c | 8 +- ioncore/bindmaps.h | 4 +- ioncore/classes.h | 3 +- ioncore/clientwin.c | 102 +- ioncore/clientwin.h | 4 +- ioncore/colormap.c | 2 +- ioncore/colormap.h | 2 +- ioncore/common.h | 2 +- ioncore/conf-bindings.c | 2 +- ioncore/conf-bindings.h | 2 +- ioncore/conf.c | 59 +- ioncore/conf.h | 5 +- ioncore/cursor.c | 2 +- ioncore/cursor.h | 2 +- ioncore/detach.c | 194 ++++ ioncore/detach.h | 20 + ioncore/dummywc.h | 2 +- ioncore/event.c | 2 +- ioncore/event.h | 6 +- ioncore/eventh.c | 23 +- ioncore/eventh.h | 2 +- ioncore/exec.c | 2 +- ioncore/exec.h | 2 +- ioncore/extlconv.c | 36 +- ioncore/extlconv.h | 7 +- ioncore/extlrx.c | 2 +- ioncore/float-placement.c | 2 +- ioncore/float-placement.h | 2 +- ioncore/focus.c | 158 +-- ioncore/focus.h | 26 +- ioncore/frame-draw.c | 120 ++- ioncore/frame-draw.h | 6 +- ioncore/frame-pointer.c | 8 +- ioncore/frame-pointer.h | 2 +- ioncore/frame.c | 220 +++-- ioncore/frame.h | 7 +- ioncore/framedpholder.c | 99 +- ioncore/framedpholder.h | 17 +- ioncore/framep.h | 2 +- ioncore/fullscreen.c | 223 ++--- ioncore/fullscreen.h | 13 +- ioncore/global.h | 21 +- ioncore/gr-util.h | 24 + ioncore/gr.c | 364 +++++-- ioncore/gr.h | 90 +- ioncore/group-cw.c | 17 +- ioncore/group-cw.h | 5 +- ioncore/group-ws.c | 89 +- ioncore/group-ws.h | 3 +- ioncore/group.c | 71 +- ioncore/group.h | 7 +- ioncore/groupedpholder.c | 34 +- ioncore/groupedpholder.h | 4 +- ioncore/grouppholder.c | 4 +- ioncore/grouppholder.h | 2 +- ioncore/infowin.c | 38 +- ioncore/infowin.h | 6 +- ioncore/ioncore.c | 35 +- ioncore/ioncore.h | 3 +- ioncore/ioncore_bindings.lua | 2 +- ioncore/ioncore_efbb.lua | 2 +- ioncore/ioncore_ext.lua | 2 +- ioncore/ioncore_luaext.lua | 2 +- ioncore/ioncore_menudb.lua | 68 +- ioncore/ioncore_misc.lua | 52 +- ioncore/ioncore_wd.lua | 2 +- ioncore/ioncore_winprops.lua | 16 +- ioncore/kbresize.c | 2 +- ioncore/kbresize.h | 2 +- ioncore/key.c | 26 +- ioncore/key.h | 4 +- ioncore/llist.c | 2 +- ioncore/llist.h | 2 +- ioncore/manage.c | 152 ++- ioncore/manage.h | 2 +- ioncore/modules.c | 2 +- ioncore/modules.h | 2 +- ioncore/mplex.c | 166 ++-- ioncore/mplex.h | 12 +- ioncore/mplexpholder.c | 185 +++- ioncore/mplexpholder.h | 7 +- ioncore/mwmhints.c | 2 +- ioncore/mwmhints.h | 2 +- ioncore/names.c | 35 +- ioncore/names.h | 6 +- ioncore/navi.c | 4 +- ioncore/navi.h | 2 +- ioncore/netwm.c | 8 +- ioncore/netwm.h | 2 +- ioncore/pholder.c | 74 +- ioncore/pholder.h | 10 +- ioncore/pointer.c | 2 +- ioncore/pointer.h | 2 +- ioncore/presize.c | 2 +- ioncore/presize.h | 2 +- ioncore/property.c | 2 +- ioncore/property.h | 2 +- ioncore/rectangle.c | 2 +- ioncore/rectangle.h | 2 +- ioncore/regbind.c | 2 +- ioncore/regbind.h | 2 +- ioncore/reginfo.c | 2 +- ioncore/reginfo.h | 2 +- ioncore/region-iter.h | 2 +- ioncore/region.c | 141 ++- ioncore/region.h | 43 +- ioncore/resize.c | 4 +- ioncore/resize.h | 2 +- ioncore/return.c | 160 +++ ioncore/return.h | 34 + ioncore/rootwin.c | 315 +----- ioncore/rootwin.h | 10 +- ioncore/saveload.c | 19 +- ioncore/saveload.h | 2 +- ioncore/screen.c | 147 +-- ioncore/screen.h | 22 +- ioncore/selection.c | 2 +- ioncore/selection.h | 2 +- ioncore/sizehint.c | 2 +- ioncore/sizehint.h | 2 +- ioncore/sizepolicy.c | 2 +- ioncore/sizepolicy.h | 2 +- ioncore/stacking.c | 2 +- ioncore/stacking.h | 2 +- ioncore/strings.c | 2 +- ioncore/strings.h | 2 +- ioncore/tags.c | 39 +- ioncore/tags.h | 6 +- ioncore/window.c | 36 +- ioncore/window.h | 6 +- ioncore/xic.c | 2 +- ioncore/xic.h | 2 +- ioncore/xwindow.c | 2 +- ioncore/xwindow.h | 2 +- libmainloop/defer.c | 2 +- libmainloop/defer.h | 2 +- libmainloop/exec.c | 2 +- libmainloop/exec.h | 2 +- libmainloop/hooks.c | 5 +- libmainloop/hooks.h | 2 +- libmainloop/signal.c | 2 +- libmainloop/signal.h | 2 +- libtu/README | 4 +- libtu/exact-version | 12 + libtu/np-conv.h | 121 --- libtu/numparser2.h | 272 ------ libtu/stringstore.c | 59 +- libtu/stringstore.h | 5 +- man/ion3.cs.in | 8 +- man/ion3.de.in | 8 +- man/ion3.fi.in | 8 +- man/ion3.in | 9 +- man/pwm3.cs.in | 6 +- man/pwm3.de.in | 7 +- man/pwm3.fi.in | 8 +- man/pwm3.in | 7 +- mod_dock/dock.c | 7 +- mod_menu/grabmenu.c | 23 +- mod_menu/main.c | 2 +- mod_menu/main.h | 2 +- mod_menu/menu.c | 142 ++- mod_menu/menu.h | 3 +- mod_menu/mkmenu.c | 2 +- mod_menu/mkmenu.h | 2 +- mod_menu/mod_menu.lua | 12 +- mod_mgmtmode/main.c | 2 +- mod_mgmtmode/main.h | 2 +- mod_mgmtmode/mgmtmode.c | 2 +- mod_mgmtmode/mgmtmode.h | 2 +- mod_panews/Makefile | 27 - mod_panews/main.c | 141 --- mod_panews/main.h | 25 - mod_panews/mod_panews.lua | 562 ----------- mod_panews/panews.c | 466 --------- mod_panews/panews.h | 47 - mod_panews/placement.c | 320 ------ mod_panews/placement.h | 55 -- mod_panews/splitext.c | 617 ------------ mod_panews/splitext.h | 55 -- mod_panews/unusedwin.c | 211 ---- mod_panews/unusedwin.h | 29 - mod_query/complete.c | 2 +- mod_query/complete.h | 2 +- mod_query/edln.c | 6 +- mod_query/edln.h | 2 +- mod_query/fwarn.c | 2 +- mod_query/fwarn.h | 2 +- mod_query/history.c | 22 +- mod_query/history.h | 5 +- mod_query/input.c | 4 +- mod_query/input.h | 2 +- mod_query/inputp.h | 2 +- mod_query/listing.c | 38 +- mod_query/listing.h | 5 +- mod_query/main.c | 10 +- mod_query/main.h | 3 +- mod_query/mod_query.lua | 288 +++--- mod_query/mod_query_chdir.lua | 2 +- mod_query/query.c | 19 +- mod_query/query.h | 2 +- mod_query/wedln-wrappers.c | 2 +- mod_query/wedln.c | 140 +-- mod_query/wedln.h | 2 +- mod_query/wmessage.c | 25 +- mod_query/wmessage.h | 2 +- mod_sm/sm.c | 2 +- mod_sm/sm_matchwin.c | 2 +- mod_sm/sm_matchwin.h | 2 +- mod_sm/sm_session.c | 2 +- mod_sm/sm_session.h | 2 +- mod_sp/main.c | 2 +- mod_sp/main.h | 2 +- mod_statusbar/draw.c | 20 +- mod_statusbar/draw.h | 2 +- mod_statusbar/main.c | 3 +- mod_statusbar/main.h | 2 +- mod_statusbar/mod_statusbar.lua | 2 +- mod_statusbar/statusbar.c | 80 +- mod_statusbar/statusbar.h | 6 +- mod_tiling/main.c | 2 +- mod_tiling/main.h | 2 +- mod_tiling/ops.c | 99 +- mod_tiling/panehandle.c | 6 +- mod_tiling/panehandle.h | 4 +- mod_tiling/placement.c | 2 +- mod_tiling/placement.h | 2 +- mod_tiling/split-stdisp.c | 2 +- mod_tiling/split-stdisp.h | 2 +- mod_tiling/split.c | 2 +- mod_tiling/split.h | 2 +- mod_tiling/splitfloat.c | 4 +- mod_tiling/splitfloat.h | 10 +- mod_tiling/tiling.c | 13 +- mod_tiling/tiling.h | 2 +- pwm/Makefile | 2 +- pwm/cfg_pwm.lua | 1 - pwm/pwm.c | 27 +- system.mk | 7 - version.h | 2 +- 323 files changed, 6382 insertions(+), 7386 deletions(-) create mode 100644 etc/cfg_layouts.lua delete mode 100644 etc/cfg_panews.lua create mode 100644 ioncore/detach.c create mode 100644 ioncore/detach.h create mode 100644 ioncore/gr-util.h create mode 100644 ioncore/return.c create mode 100644 ioncore/return.h delete mode 100644 libtu/np-conv.h delete mode 100644 libtu/numparser2.h delete mode 100644 mod_panews/Makefile delete mode 100644 mod_panews/main.c delete mode 100644 mod_panews/main.h delete mode 100644 mod_panews/mod_panews.lua delete mode 100644 mod_panews/panews.c delete mode 100644 mod_panews/panews.h delete mode 100644 mod_panews/placement.c delete mode 100644 mod_panews/placement.h delete mode 100644 mod_panews/splitext.c delete mode 100644 mod_panews/splitext.h delete mode 100644 mod_panews/unusedwin.c delete mode 100644 mod_panews/unusedwin.h diff --git a/ChangeLog b/ChangeLog index 43a323e..d966641 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,388 @@ +2007-02-03 14:50 UTC Tuomo Valkonen + tagged ion-3ds-20070203 + +2007-02-03 14:50 UTC Tuomo Valkonen + * RELNOTES update + +2007-02-03 11:09 UTC Tuomo Valkonen + * Updates to some styles + +2007-02-03 11:08 UTC Tuomo Valkonen + * Include spacing in border width for the "ridge" and "inlaid" border styles. + +2007-02-03 06:05 UTC Etan Reisner + * Make the docs match the #defines. + +2007-02-01 20:25 UTC Tuomo Valkonen + * Different selected/unselected-activity substyles for tab-frame too. + +2007-02-01 20:14 UTC Tuomo Valkonen + * `WMPlex.attach_new` can now be passed parameters by `ioncore.deflayout` + definitions (unless a particular parameter is masked in certain use cases, + such as `switchto`). + +2007-02-01 18:26 UTC Tuomo Valkonen + * Minor GrStyleSpec init/copy optimisation + +2007-01-31 19:04 UTC Tuomo Valkonen + * Fixes in lookcommon_clean usage + +2007-01-31 17:58 UTC Tuomo Valkonen + * Defined activity attribute for menu entries in the "clean" styles. + (The usual red for unselected, a bit lighter for selected entries.) + +2007-01-31 17:57 UTC Tuomo Valkonen + * Set the "activity" attribute on relevant entries in the "focuslist" menu. + +2007-01-31 17:56 UTC Tuomo Valkonen + * Added support for arbitrary (drawing engine) attributes for menu entries. + +2007-01-30 20:53 UTC Tuomo Valkonen + * Minor improvements to groupws_prepare_manage + +2007-01-30 20:53 UTC Tuomo Valkonen + * Oops, layout loading changes dislocated transient mgmt. code. + +2007-01-30 18:30 UTC Tuomo Valkonen + * Renamed the `subs` element of WMPlex configuration to `managed` + for consistency. The old name is still supported on load. + +2007-01-30 18:24 UTC Tuomo Valkonen + * Added `new_group` winprop. + It should be the name of the layout of a new group/workspace to create, + if the the `target` winprop fails. The latter is tried again after + creating the new group. + +2007-01-30 08:48 UTC Tuomo Valkonen + * More and fixed release notes + +2007-01-30 00:27 UTC Tuomo Valkonen + * Minor optimisation + +2007-01-29 16:49 UTC Tuomo Valkonen + * Improved layout and winprop communication between C/Lua. + ioncore.deflayout and ioncore.getlayout replace mod_query.layouts + and ioncore.set{default_ws_params = ...} + +2007-01-28 10:03 UTC Tuomo Valkonen + * Fixes to new drawing engine attribute scoring: + - Since each item occurs on the attribute list only once, with a score, + the a star ("*") on the source list should be used scored by its score + there, instead of one. (Possibly also other items' scores should be + multiplied by the source list score?) + - The "activity" substyle needs some stars in it to give it a higher + score over other rather specific possibilities without "no_activity" + to block their use. + +2007-01-27 17:33 UTC Tuomo Valkonen + * Oops, wrong address.. + +2007-01-27 17:00 UTC Tuomo Valkonen + * attach_tagged behaviour restoration. + +2007-01-27 16:44 UTC Tuomo Valkonen + * Updates to man page references to binding contexts. + NOTE: Some of the translations apparently are totally + out-dated. Please update. + +2007-01-27 13:09 UTC Tuomo Valkonen + * Added option for case-insensitive completion. + mod_query.set{caseicompl=true} will cause some completions (such as + window and workspace names) to be case-insensitive. + +2007-01-27 13:08 UTC Tuomo Valkonen + * Oops, mod_query.get wasn't marked EXTL_SAFE + +2007-01-27 12:51 UTC Tuomo Valkonen + * mod_query(.lua) clean-up and completion improvements + +2007-01-26 19:51 UTC Tuomo Valkonen + * Statusbar meter name is now passed as attribute to the drawing engine. + It is therefore possible to give different meters different colours, + with de.substyle("metername", { ... }) in the appropriate style + definition ("stdisp", "stdisp-statusbar"). + +2007-01-26 19:01 UTC Tuomo Valkonen + * Completion code fixes + +2007-01-26 11:12 UTC Tuomo Valkonen + * README update + +2007-01-25 22:07 UTC Tuomo Valkonen + * Check for NULL in get_hook + +2007-01-25 04:24 UTC Etan Reisner + * The name given to the workspace query should be used. I'm assuming this was a typo/braino of some sort. + +2007-01-24 19:06 UTC Tuomo Valkonen + * Menu updates + +2007-01-24 19:03 UTC Tuomo Valkonen + * Improvements to query_renameworkspace + +2007-01-24 18:53 UTC Tuomo Valkonen + * Added cfg_layouts.lua with layout definitions + +2007-01-24 18:42 UTC Tuomo Valkonen + * Added layout query for new workspace to mod_query.query_workspace. + The table returned by the function mod_query.layouts can be used to + configure additional layouts. + +2007-01-24 09:16 UTC Tuomo Valkonen + * The "" text apparently wasn't i18nised, residing in config.h. + +2007-01-23 17:00 UTC Tuomo Valkonen + * Added region_dispose for chain-destruction of regions. + It also handles goto to return placeholder target if the to-be destroyed + region could control the focus. This also fixes recent regression wrt. + return from full screen mode. + +2007-01-23 07:09 UTC Tuomo Valkonen + * Marked WFrame.mode "safe" + +2007-01-26 18:08 UTC Tuomo Valkonen + * Added quasiactivity hint to the "clean" styles (+improved activity colour). + Frame padding is drawn in red when frame frame is quasiactive. Stylistically + it's far from ideal, but that seems to be the best place for the hint + without major improvements to the drawing engine. The "emboss" styles still + need to get this added, but they also demand other work, being largely + bitrotted. + +2007-01-26 17:58 UTC Tuomo Valkonen + * Drawing engine API and attribute handling changes. + An attribute string is no longer passed to every drawing function, + but instead the attributes must be allocated from libtu's "stringstore", + and then set on the brush. The attributes are also no longer matched + linearly, but by simple containment, with the linear specification strings + in the style files (and gr_get_brush also still), however still modifying + the score a match gives. These changes should make it easier to add + additional attributes. + +2007-01-26 17:46 UTC Tuomo Valkonen + * Fixed leak in mod_query_history_push_ + +2007-01-22 20:32 UTC Tuomo Valkonen + * Ugly pointer focus hack for messy floats: + If a window that does not have the focus, or if the focus is being + changed elsewhere, is unmapped (or destroyed), contains the pointer, + then try to set the focus again to prevent focus from changing to + a window under this unampped window. (However, if the unampped window + has the focus, and no change elsewhere is known, current focus policy + dictates that the focus should fall to the underlying window.) + +2007-01-21 13:25 UTC Tuomo Valkonen + * RELNOTES conflict resolution + +2007-01-21 13:06 UTC Tuomo Valkonen + * Fixes + +2007-01-21 13:05 UTC Tuomo Valkonen + * Frame quasiactivation tracking + +2007-01-21 12:39 UTC Tuomo Valkonen + * Pseudoactivity state maintenance hack + +2007-01-18 20:14 UTC Tuomo Valkonen + * Navi-code updates + +2007-01-17 20:49 UTC Tuomo Valkonen + * Comment updates + +2007-01-20 20:07 UTC Tuomo Valkonen + * Removed 'detail' from notify_change parameters + (And reordered call in unset_manager.) + +2007-01-18 08:00 UTC Tuomo Valkonen + * Year changed... + (The one nice thing about CVS was that you could automate this + numbering. Perhaps a record check script could make you update + the dates manually as you change the files...) + +2007-01-17 18:18 UTC Tuomo Valkonen + * Further simplifications/dead code removal. + (Made possible by removal of Xinerama #ifdef hacks.) + +2007-01-17 18:11 UTC Tuomo Valkonen + * Removed the bitrotted Xinerama code altogether. + I am unlikely to waste time fixing it. However, the abstract support still + remains (enhanced), and someone who cares about it, will just have to write + a separate module to set up a special layout for the root window (now a + WScreen and WMPlex) with new WScreens for each Xinerama screen, and set + the screen ID of the root window to less than zero for the layout loading + code. + +2007-01-17 18:11 UTC Tuomo Valkonen + * Loading hack + +2007-01-17 17:54 UTC Tuomo Valkonen + * Made WRootWin inherit WScreen. + This removes some ugly hacks, and simplifies things a lot for the usual + case of a single screen, or that of normal X multihead. This completes + the bitrot of Xinerama-specific code, although abstract support for + various (nested) screen configurations remains (and infact there's + now the abstract possibility of both single-screen and multi-screen + workspaces/windows). + +2007-01-17 16:06 UTC Tuomo Valkonen + * Group focus policy changes + +2007-01-16 15:49 UTC Tuomo Valkonen + * Statusbar size hint tuning + +2007-01-14 00:30 UTC Tuomo Valkonen + * Fixes wrt. FRAME_MODE_UNKNOWN (e.g. scratchpad). + +2007-01-14 15:39 UTC Tuomo Valkonen + * Removed fake activication messages for non-windows. + +2007-01-13 23:27 UTC Tuomo Valkonen + * Toplevel bindmap usage tuning + +2007-01-13 20:58 UTC Tuomo Valkonen + * Do not use Watches in return storage. + Instead clean up things in region_deinit. The pointer to the region in the + watch is reset before calling the watch handler, so node in the search tree + is never found, the watch/pointer being the key. + +2007-01-13 20:45 UTC Tuomo Valkonen + * Changes in padding/spacing usage in frames. + (See RELNOTES.) + +2007-01-13 20:27 UTC Tuomo Valkonen + * Do not draw spacing after last textbox + +2007-01-13 18:54 UTC Tuomo Valkonen + * Oops, forgot this... + +2007-01-13 18:32 UTC Tuomo Valkonen + * Use libtu stringstore for the notification mechanism + (Testing against allocated StringIds is more efficient than strcmp.) + +2007-01-13 16:02 UTC Tuomo Valkonen + * Removed region_managed_(in)activated hooks and functions. + - region_notify_change and the corresponding region_notify_hook do the job. + +2007-01-12 14:37 UTC Tuomo Valkonen + * README fixes/improvements + +2007-01-10 18:22 UTC Tuomo Valkonen + * doc + +2007-01-10 18:18 UTC Tuomo Valkonen + * Fixed WMPlex.attach_tagged to switch to the first attached region + +2007-01-10 18:15 UTC Tuomo Valkonen + * Moved mod_tiling.detach as ioncore.detach. + (It has nothing to do with tilings, after all.) + +2007-01-10 18:09 UTC Tuomo Valkonen + * Use previous placeholder on entering FS mode, if there's one + +2007-01-10 18:03 UTC Tuomo Valkonen + * Detach tuning + +2007-01-10 17:30 UTC Tuomo Valkonen + * Use original stacking level and sizepolicy for unframed detachs + +2007-01-10 17:24 UTC Tuomo Valkonen + * Removed unused modal flag + (The information is in the stacking level.) + +2007-01-10 07:48 UTC Tuomo Valkonen + * Updated configuration file doc. comments + +2007-01-10 01:06 UTC Tuomo Valkonen + * Removed traces of WPaneWS. + It won't be found in Ion3: there aren't separate workspace classes + anymore, after all. Instead, so-called "trays" may be added. Or maybe + not. Who knows. + +2007-01-10 00:31 UTC Tuomo Valkonen + * Query history tuning + +2007-01-09 22:23 UTC Tuomo Valkonen + * Added placeholder staleness checks + +2007-01-09 21:44 UTC Tuomo Valkonen + * Placeholder and detach improvements: + - No need for special handling of transients in configs anymore: + framing of non-WWindow regions on detach is automatic now, and + an auto-destroyed frame creates a recreation WFramedPHolder for + its remaining WMPlexPHolders, so that the container frame can + be recreated on attach. + - Consequently, multiple fullscreened windows from a floating frame + are now returned back to the same frame, even if the original + frame was emptied (and thus destroyed) in the meanwhile. + +2007-01-08 20:12 UTC Tuomo Valkonen + * Typo fix (+ minor related policy changes) + +2007-01-06 18:56 UTC Tuomo Valkonen + * Added mode to WFramedParam + +2007-01-04 22:13 UTC Tuomo Valkonen + * Moved set/is_fullscreen from WClientWin to WGroup + - Simplifies the binding (and the config needs to be updated!) + +2007-01-03 17:48 UTC Tuomo Valkonen + * Some renames for consistency + +2007-01-03 17:38 UTC Tuomo Valkonen + * Support obtaining current key in submaps as well + +2007-01-03 17:26 UTC Tuomo Valkonen + * Mod1+K K opens a grabmenu with the "focustlist" menu + - Cyclable with Mod1+K + +2007-01-03 17:25 UTC Tuomo Valkonen + * Added focuslist menu + - First lists ioncore.activity_i results and then ioncore.focushistory_i + +2007-01-03 16:53 UTC Tuomo Valkonen + * Changed *_list exports into *_i iterators + +2007-01-03 16:42 UTC Tuomo Valkonen + * Oops (and been there for a while, stupid GCC) + +2007-01-03 15:51 UTC Tuomo Valkonen + * Remove managers from focus list when child is pushed on it + +2006-12-28 20:29 UTC Tuomo Valkonen + * Detach binding/menu tuning + +2006-12-28 20:26 UTC Tuomo Valkonen + * Added / to characters substituted in query menus + +2006-12-28 20:25 UTC Tuomo Valkonen + * Fixed menu append + +2006-12-28 20:13 UTC Tuomo Valkonen + * Detach is toggleable now (using return placeholder list) + +2006-12-28 19:40 UTC Tuomo Valkonen + * Full screen code rearrangements + +2006-12-27 14:48 UTC Tuomo Valkonen + * Minor tuning + +2006-12-27 14:35 UTC Tuomo Valkonen + * Use return storage for return from full screen mode + +2006-12-26 20:25 UTC Tuomo Valkonen + * Don't snow info window for activity on active screen + +2006-12-26 17:40 UTC Tuomo Valkonen + * More functions for return storage + +2006-12-26 17:37 UTC Tuomo Valkonen + * Use watches in return storage + +2006-12-26 17:12 UTC Tuomo Valkonen + * Added basic "return" placeholder storage + +2006-12-26 16:53 UTC Tuomo Valkonen + * Removed unused variable/string + 2006-12-23 14:59 UTC Tuomo Valkonen tagged ion-3ds-20061223 diff --git a/README b/README index 62684ee..0769ba6 100644 --- a/README +++ b/README @@ -2,7 +2,7 @@ Ion === -Copyright (c) Tuomo Valkonen 1999-2006. +Copyright (c) Tuomo Valkonen 1999-2007. tuomov at iki.fi @@ -18,16 +18,16 @@ Building and installing * Lua 5.1 (see ). 2. a) Edit `system.mk` to suit your system. Most GNU/Linux users should - need very little modifications to `system.mk`. + need very few changes. b) Alternatively, go to the directory `build/ac`, run `autoreconf` - and then `./configure`. Switch back to the top directory afterwards. - See `build/ac/README.autoconf` for details on parameters, especially - if you are using the Debian Lua packages. If you try this method and - it fails for some reason, please make sure `build/ac/system-ac.mk` - does not exist before falling back to alternative a). Also in such - a case, find someone else to complain to; I (tuomov) will have - nothing to do with autoconf. + and then `./configure`. Switch back to the top lvel directory + afterwards. See `build/ac/README.autoconf` for details on parameters, + especially if you are using the Debian Lua packages. If you try + this method and it fails for some reason, please make sure + `build/ac/system-ac.mk` does not exist before falling back to + alternative a). Also in such a case, find someone else to complain + to: I (tuomov) will have nothing to do with autoconf. 3. If you want to build some extra modules now or do not want to build some of the standard modules, edit `modulelist.mk`. @@ -65,7 +65,7 @@ Some optional installation steps a program to view a file based on its guessed MIME type. Unless you are using Debian, most likely you don't have it, but any other similar program (or just plain old text editor) will do as well - just the bindings - in `cfg_bindings.lua`. Of course, if you don't want to use the feature at + in `cfg_ioncore.lua`. Of course, if you don't want to use the feature at this time or never, you may simply skip this step. If you want to use `run-mailcap`, it can be found from the following address, as a source tarball as well: @@ -93,7 +93,7 @@ Some optional installation steps If the `MANPATH` environment variable is not set on your system and it does not have the `manpath` command (or it does not print anything - sensible), you may also want to set the `ION_MC_MANPATH` environment + sensible), you may also want to set the `ION_MANPATH` environment variable to the list of paths where the system stores manual pages. diff --git a/RELNOTES b/RELNOTES index 589ab54..0834cfa 100644 --- a/RELNOTES +++ b/RELNOTES @@ -1,4 +1,33 @@ +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 ---------------- diff --git a/TODO.riot b/TODO.riot index efe689f..009833b 100644 --- a/TODO.riot +++ b/TODO.riot @@ -127,32 +127,6 @@ In-Reply-To: A general solution to transients, queries and menus in tiny frames. -From background-static Thu Mar 23 17:40:08 EET 2006 -Message-Id: -Date: Thu Mar 23 17:40:08 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:40:10 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: PaneWS -In-Reply-To: - -PaneWS - -From background-static Thu Mar 23 17:40:13 EET 2006 -Message-Id: -Date: Thu Mar 23 17:40:13 EET 2006 -Status: RO -X-Riot-Version: 1ds-yyyymmdd -From: Riot -X-Riot-Edited: Thu Mar 23 17:40:13 EET 2006 -Content-Type: text/plain; charset=utf-8 -Subject: Lots of fine-tuning -In-Reply-To: - -Lots of fine-tuning - From background-static Thu Mar 23 17:50:02 EET 2006 Message-Id: Date: Thu Mar 23 17:50:02 EET 2006 @@ -167,6 +141,19 @@ 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 diff --git a/build/ac/configure.ac b/build/ac/configure.ac index c65e7cb..277cc96 100644 --- a/build/ac/configure.ac +++ b/build/ac/configure.ac @@ -3,7 +3,7 @@ dnl Please report bugs in this autoconf script Tom Payne dnl $Header: /home/twp/cvsroot/twp/ion/ion-devel-autoconf/configure.ac,v 1.16 2004/01/14 11:32:19 twp Exp $ AC_INIT([Ion Window Manager], - [3ds-20061223], + [3ds-20070203], [nobody@nowhere.invalid], [ion3]) AC_PREREQ([2.58]) diff --git a/config.h b/config.h index 23935b7..f9d7131 100644 --- a/config.h +++ b/config.h @@ -1,7 +1,7 @@ /* * config.h * - * Copyright (c) Tuomo Valkonen 1999-2002. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -41,9 +41,6 @@ #define CF_CURSOR_DRAG XC_cross #define CF_CURSOR_WAITKEY XC_icon -#define CF_STR_EMPTY "" -#define CF_STR_EMPTY_LEN 13 - #define CF_STDISP_MIN_SZ 8 #endif /* ION_CONFIG_H */ diff --git a/de/brush.c b/de/brush.c index a0576a6..fbaaa61 100644 --- a/de/brush.c +++ b/de/brush.c @@ -1,7 +1,7 @@ /* * ion/de/brush.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -29,15 +29,24 @@ /*{{{ Brush creation and releasing */ +static GrStyleSpec tabframe_spec=GR_STYLESPEC_INIT; +static GrStyleSpec tabinfo_spec=GR_STYLESPEC_INIT; +static GrStyleSpec tabmenuentry_spec=GR_STYLESPEC_INIT; + + bool debrush_init(DEBrush *brush, Window win, - const char *stylename, DEStyle *style) + const GrStyleSpec *spec, DEStyle *style) { + GrStyleSpec tmp; + brush->d=style; brush->extras_fn=NULL; brush->indicator_w=0; brush->win=win; brush->clip_set=FALSE; + gr_stylespec_init(&brush->current_attr); + style->usecount++; if(!grbrush_init(&(brush->grbrush))){ @@ -45,11 +54,15 @@ bool debrush_init(DEBrush *brush, Window win, return FALSE; } - if(MATCHES("tab-frame", stylename) || MATCHES("tab-info", stylename)){ + ENSURE_INITSPEC(tabframe_spec, "tab-frame"); + ENSURE_INITSPEC(tabinfo_spec, "tab-info"); + ENSURE_INITSPEC(tabmenuentry_spec, "tab-menuentry"); + + if(MATCHES(tabframe_spec, spec) || MATCHES(tabinfo_spec, spec)){ brush->extras_fn=debrush_tab_extras; if(!style->tabbrush_data_ok) destyle_create_tab_gcs(style); - }else if(MATCHES("tab-menuentry", stylename)){ + }else if(MATCHES(tabmenuentry_spec, spec)){ brush->extras_fn=debrush_menuentry_extras; brush->indicator_w=grbrush_get_text_width((GrBrush*)brush, DE_SUB_IND, @@ -60,22 +73,32 @@ bool debrush_init(DEBrush *brush, Window win, } -DEBrush *create_debrush(Window win, const char *stylename, DEStyle *style) +DEBrush *create_debrush(Window win, const GrStyleSpec *spec, DEStyle *style) { - CREATEOBJ_IMPL(DEBrush, debrush, (p, win, stylename, style)); + CREATEOBJ_IMPL(DEBrush, debrush, (p, win, spec, style)); } static DEBrush *do_get_brush(Window win, WRootWin *rootwin, const char *stylename, bool slave) { - DEStyle *style=de_get_style(rootwin, stylename); + DEStyle *style; DEBrush *brush; + GrStyleSpec spec; - if(style==NULL) + if(!gr_stylespec_load(&spec, stylename)) return NULL; - brush=create_debrush(win, stylename, style); + style=de_get_style(rootwin, &spec); + + if(style==NULL){ + gr_stylespec_unalloc(&spec); + return NULL; + } + + brush=create_debrush(win, &spec, style); + + gr_stylespec_unalloc(&spec); /* Set background colour */ if(brush!=NULL && !slave){ @@ -104,6 +127,7 @@ void debrush_deinit(DEBrush *brush) { destyle_unref(brush->d); brush->d=NULL; + gr_stylespec_unalloc(&brush->current_attr); grbrush_deinit(&(brush->grbrush)); } @@ -117,6 +141,40 @@ void debrush_release(DEBrush *brush) /*}}}*/ +/*{{{ Attributes */ + + +void debrush_init_attr(DEBrush *brush, const GrStyleSpec *spec) +{ + gr_stylespec_unalloc(&brush->current_attr); + + if(spec!=NULL) + gr_stylespec_append(&brush->current_attr, spec); +} + + +void debrush_set_attr(DEBrush *brush, GrAttr attr) +{ + gr_stylespec_set(&brush->current_attr, attr); +} + + +void debrush_unset_attr(DEBrush *brush, GrAttr attr) +{ + gr_stylespec_unset(&brush->current_attr, attr); +} + + +GrStyleSpec *debrush_get_current_attr(DEBrush *brush) +{ + return &brush->current_attr; +} + + +/*}}}*/ + + + /*{{{ Border widths and extra information */ @@ -124,17 +182,18 @@ void debrush_get_border_widths(DEBrush *brush, GrBorderWidths *bdw) { DEStyle *style=brush->d; DEBorder *bd=&(style->border); - uint tmp; + uint tmp=0, spc=style->spacing; switch(bd->style){ case DEBORDER_RIDGE: + tmp=spc; case DEBORDER_GROOVE: - tmp=bd->sh+bd->hl+bd->pad; + tmp+=bd->sh+bd->hl+bd->pad; bdw->top=tmp; bdw->bottom=tmp; bdw->left=tmp; bdw->right=tmp; break; case DEBORDER_INLAID: - tmp=bd->sh+bd->pad; bdw->top=tmp; bdw->left=tmp; - tmp=bd->hl+bd->pad; bdw->bottom=tmp; bdw->right=tmp; + tmp=bd->sh+bd->pad+spc; bdw->top=tmp; bdw->left=tmp; + tmp=bd->hl+bd->pad+spc; bdw->bottom=tmp; bdw->right=tmp; break; case DEBORDER_ELEVATED: default: @@ -190,6 +249,9 @@ static DynFunTab debrush_dynfuntab[]={ {(DynFun*)grbrush_get_slave, (DynFun*)debrush_get_slave}, {grbrush_begin, debrush_begin}, {grbrush_end, debrush_end}, + {grbrush_init_attr, debrush_init_attr}, + {grbrush_set_attr, debrush_set_attr}, + {grbrush_unset_attr, debrush_unset_attr}, END_DYNFUNTAB }; diff --git a/de/brush.h b/de/brush.h index a1a6b3f..d9a040a 100644 --- a/de/brush.h +++ b/de/brush.h @@ -1,7 +1,7 @@ /* * ion/de/brush.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -25,10 +25,12 @@ INTRCLASS(DEBrush); typedef void DEBrushExtrasFn(DEBrush *brush, - const WRectangle *g, DEColourGroup *cg, + const WRectangle *g, + DEColourGroup *cg, GrBorderWidths *bdw, GrFontExtents *fnte, - const char *a1, const char *a2, + const GrStyleSpec *a1, + const GrStyleSpec *a2, bool pre); DECLCLASS(DEBrush){ @@ -38,15 +40,17 @@ DECLCLASS(DEBrush){ int indicator_w; Window win; bool clip_set; + + GrStyleSpec current_attr; }; extern DEBrush *de_get_brush(Window win, WRootWin *rootwin, const char *style); extern DEBrush *create_debrush(Window win, - const char *stylename, DEStyle *style); + const GrStyleSpec *spec, DEStyle *style); extern bool debrush_init(DEBrush *brush, Window win, - const char *stylename, DEStyle *style); + const GrStyleSpec *spec, DEStyle *style); extern void debrush_deinit(DEBrush *brush); extern DEBrush *debrush_get_slave(DEBrush *brush, WRootWin *rootwin, @@ -56,18 +60,24 @@ extern void debrush_release(DEBrush *brush); extern DEColourGroup *debrush_get_colour_group2(DEBrush *brush, - const char *attr_p1, - const char *attr_p2); + const GrStyleSpec *a1, + const GrStyleSpec *a2); extern DEColourGroup *debrush_get_colour_group(DEBrush *brush, - const char *attr); + const GrStyleSpec *attr); +extern DEColourGroup *debrush_get_current_colour_group(DEBrush *brush); /* Begin/end */ extern void debrush_begin(DEBrush *brush, const WRectangle *geom, int flags); extern void debrush_end(DEBrush *brush); +extern void debrush_init_attr(DEBrush *brush, const GrStyleSpec *spec); +extern void debrush_set_attr(DEBrush *brush, GrAttr attr); +extern void debrush_unset_attr(DEBrush *brush, GrAttr attr); +extern GrStyleSpec *debrush_get_current_attr(DEBrush *brush); + /* Information */ extern void debrush_get_border_widths(DEBrush *brush, GrBorderWidths *bdw); @@ -77,18 +87,16 @@ extern bool debrush_get_extra(DEBrush *brush, const char *key, char type, /* Borders & boxes */ extern void debrush_draw_border(DEBrush *brush, - const WRectangle *geom, - const char *attrib); + const WRectangle *geom); extern void debrush_draw_borderline(DEBrush *brush, const WRectangle *geom, - const char *attrib, GrBorderLine line); + GrBorderLine line); extern void debrush_draw_textbox(DEBrush *brush, const WRectangle *geom, - const char *text, const char *attr, - bool needfill); + const char *text, bool needfill); extern void debrush_draw_textboxes(DEBrush *brush, const WRectangle *geom, int n, const GrTextElem *elem, - bool needfill, const char *common_attrib); + bool needfill); extern DEBrushExtrasFn debrush_tab_extras; extern DEBrushExtrasFn debrush_menuentry_extras; @@ -100,8 +108,7 @@ extern void debrush_set_window_shape(DEBrush *brush, bool rough, extern void debrush_enable_transparency(DEBrush *brush, GrTransparency mode); -extern void debrush_fill_area(DEBrush *brush, const WRectangle *geom, - const char *attr); +extern void debrush_fill_area(DEBrush *brush, const WRectangle *geom); extern void debrush_clear_area(DEBrush *brush, const WRectangle *geom); diff --git a/de/colour.c b/de/colour.c index c3797c3..5693d81 100644 --- a/de/colour.c +++ b/de/colour.c @@ -1,7 +1,7 @@ /* * ion/de/colour.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -56,10 +56,7 @@ void de_free_colour_group(WRootWin *rootwin, DEColourGroup *cg) XFreeColors(ioncore_g.dpy, rootwin->default_cmap, pixels, 5, 0); - if(cg->spec!=NULL){ - free(cg->spec); - cg->spec=NULL; - } + gr_stylespec_unalloc(&cg->spec); } diff --git a/de/colour.h b/de/colour.h index 8886b97..06d8654 100644 --- a/de/colour.h +++ b/de/colour.h @@ -1,7 +1,7 @@ /* * ion/de/colour.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -24,7 +24,7 @@ typedef unsigned long DEColour; DECLSTRUCT(DEColourGroup){ - char *spec; + GrStyleSpec spec; DEColour bg, hl, sh, fg, pad; }; diff --git a/de/draw.c b/de/draw.c index aae2dae..552e48f 100644 --- a/de/draw.c +++ b/de/draw.c @@ -1,7 +1,7 @@ /* * ion/de/draw.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -26,16 +26,16 @@ static DEColourGroup *destyle_get_colour_group2(DEStyle *style, - const char *attr_p1, - const char *attr_p2) + const GrStyleSpec *a1, + const GrStyleSpec *a2) { int i, score, maxscore=0; DEColourGroup *maxg=&(style->cgrp); while(style!=NULL){ for(i=0; in_extra_cgrps; i++){ - score=gr_stylespec_score2(style->extra_cgrps[i].spec, - attr_p1, attr_p2); + score=gr_stylespec_score2(&style->extra_cgrps[i].spec, a1, a2); + if(score>maxscore){ maxg=&(style->extra_cgrps[i]); maxscore=score; @@ -49,19 +49,25 @@ static DEColourGroup *destyle_get_colour_group2(DEStyle *style, DEColourGroup *debrush_get_colour_group2(DEBrush *brush, - const char *attr_p1, - const char *attr_p2) + const GrStyleSpec *a1, + const GrStyleSpec *a2) { - return destyle_get_colour_group2(brush->d, attr_p1, attr_p2); + return destyle_get_colour_group2(brush->d, a1, a2); } -DEColourGroup *debrush_get_colour_group(DEBrush *brush, const char *attr) +DEColourGroup *debrush_get_colour_group(DEBrush *brush, const GrStyleSpec *attr) { return destyle_get_colour_group2(brush->d, attr, NULL); } +DEColourGroup *debrush_get_current_colour_group(DEBrush *brush) +{ + return debrush_get_colour_group(brush, debrush_get_current_attr(brush)); +} + + /*}}}*/ @@ -160,11 +166,12 @@ void debrush_do_draw_border(DEBrush *brush, WRectangle geom, } + + void debrush_draw_border(DEBrush *brush, - const WRectangle *geom, - const char *attrib) + const WRectangle *geom) { - DEColourGroup *cg=debrush_get_colour_group(brush, attrib); + DEColourGroup *cg=debrush_get_current_colour_group(brush); if(cg!=NULL) debrush_do_draw_border(brush, *geom, cg); } @@ -223,9 +230,9 @@ void debrush_do_draw_borderline(DEBrush *brush, WRectangle geom, void debrush_draw_borderline(DEBrush *brush, const WRectangle *geom, - const char *attrib, GrBorderLine line) + GrBorderLine line) { - DEColourGroup *cg=debrush_get_colour_group(brush, attrib); + DEColourGroup *cg=debrush_get_current_colour_group(brush); if(cg!=NULL) debrush_do_draw_borderline(brush, *geom, cg, line); } @@ -251,10 +258,16 @@ static void copy_masked(DEBrush *brush, Drawable src, Drawable dst, } +static GrStyleSpec dragged_spec=GR_STYLESPEC_INIT; +static GrStyleSpec tagged_spec=GR_STYLESPEC_INIT; +static GrStyleSpec submenu_spec=GR_STYLESPEC_INIT; + + void debrush_tab_extras(DEBrush *brush, const WRectangle *g, DEColourGroup *cg, GrBorderWidths *bdw, GrFontExtents *fnte, - const char *a1, const char *a2, + const GrStyleSpec *a1, + const GrStyleSpec *a2, bool pre) { DEStyle *d=brush->d; @@ -263,9 +276,12 @@ void debrush_tab_extras(DEBrush *brush, const WRectangle *g, * with shared GC:s. */ static bool swapped=FALSE; + + ENSURE_INITSPEC(dragged_spec, "dragged"); + ENSURE_INITSPEC(tagged_spec, "tagged"); if(pre){ - if(!MATCHES2("*-*-*-dragged", a1, a2)) + if(!MATCHES2(dragged_spec, a1, a2)) return; tmp=d->normal_gc; @@ -276,7 +292,7 @@ void debrush_tab_extras(DEBrush *brush, const WRectangle *g, return; } - if(MATCHES2("*-*-tagged", a1, a2)){ + if(MATCHES2(tagged_spec, a1, a2)){ XSetForeground(ioncore_g.dpy, d->copy_gc, cg->fg); copy_masked(brush, d->tag_pixmap, brush->win, 0, 0, @@ -298,10 +314,13 @@ void debrush_tab_extras(DEBrush *brush, const WRectangle *g, } -void debrush_menuentry_extras(DEBrush *brush, const WRectangle *g, - DEColourGroup *cg, GrBorderWidths *bdw, +void debrush_menuentry_extras(DEBrush *brush, + const WRectangle *g, + DEColourGroup *cg, + GrBorderWidths *bdw, GrFontExtents *fnte, - const char *a1, const char *a2, + const GrStyleSpec *a1, + const GrStyleSpec *a2, bool pre) { int tx, ty; @@ -309,7 +328,9 @@ void debrush_menuentry_extras(DEBrush *brush, const WRectangle *g, if(pre) return; - if(!MATCHES2("*-*-submenu", a1, a2)) + ENSURE_INITSPEC(submenu_spec, "submenu"); + + if(!MATCHES2(submenu_spec, a1, a2)) return; ty=(g->y+bdw->top+fnte->baseline @@ -336,10 +357,13 @@ void debrush_do_draw_box(DEBrush *brush, const WRectangle *geom, } -static void debrush_do_draw_textbox(DEBrush *brush, const WRectangle *geom, - const char *text, DEColourGroup *cg, +static void debrush_do_draw_textbox(DEBrush *brush, + const WRectangle *geom, + const char *text, + DEColourGroup *cg, bool needfill, - const char *a1, const char *a2) + const GrStyleSpec *a1, + const GrStyleSpec *a2) { uint len; GrBorderWidths bdw; @@ -386,10 +410,11 @@ static void debrush_do_draw_textbox(DEBrush *brush, const WRectangle *geom, void debrush_draw_textbox(DEBrush *brush, const WRectangle *geom, - const char *text, const char *attr, - bool needfill) + const char *text, bool needfill) { + GrStyleSpec *attr=debrush_get_current_attr(brush); DEColourGroup *cg=debrush_get_colour_group(brush, attr); + if(cg!=NULL){ debrush_do_draw_textbox(brush, geom, text, cg, needfill, attr, NULL); @@ -399,24 +424,30 @@ void debrush_draw_textbox(DEBrush *brush, const WRectangle *geom, void debrush_draw_textboxes(DEBrush *brush, const WRectangle *geom, int n, const GrTextElem *elem, - bool needfill, const char *common_attrib) + bool needfill) { + GrStyleSpec *common_attrib; WRectangle g=*geom; DEColourGroup *cg; GrBorderWidths bdw; int i; + common_attrib=debrush_get_current_attr(brush); + grbrush_get_border_widths(&(brush->grbrush), &bdw); - for(i=0; i0 && needfill){ XClearArea(ioncore_g.dpy, brush->win, g.x, g.y, @@ -490,9 +521,9 @@ void debrush_enable_transparency(DEBrush *brush, GrTransparency mode) } -void debrush_fill_area(DEBrush *brush, const WRectangle *geom, const char *attr) +void debrush_fill_area(DEBrush *brush, const WRectangle *geom) { - DEColourGroup *cg=debrush_get_colour_group(brush, attr); + DEColourGroup *cg=debrush_get_current_colour_group(brush); GC gc=brush->d->normal_gc; if(cg==NULL) @@ -555,9 +586,13 @@ static void debrush_clear_clipping_rectangle(DEBrush *brush) void debrush_begin(DEBrush *brush, const WRectangle *geom, int flags) { + if(flags&GRBRUSH_AMEND) flags|=GRBRUSH_NO_CLEAR_OK; + if(!(flags&GRBRUSH_KEEP_ATTR)) + debrush_init_attr(brush, NULL); + if(!(flags&GRBRUSH_NO_CLEAR_OK)) debrush_clear_area(brush, geom); diff --git a/de/font.c b/de/font.c index 9d80c1e..957cc61 100644 --- a/de/font.c +++ b/de/font.c @@ -1,7 +1,7 @@ /* * ion/de/font.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -267,10 +267,9 @@ void debrush_do_draw_string(DEBrush *brush, int x, int y, void debrush_draw_string(DEBrush *brush, int x, int y, - const char *str, int len, bool needfill, - const char *attrib) + const char *str, int len, bool needfill) { - DEColourGroup *cg=debrush_get_colour_group(brush, attrib); + DEColourGroup *cg=debrush_get_current_colour_group(brush); if(cg!=NULL) debrush_do_draw_string(brush, x, y, str, len, needfill, cg); } diff --git a/de/font.h b/de/font.h index d2f5e3b..7e40121 100644 --- a/de/font.h +++ b/de/font.h @@ -1,7 +1,7 @@ /* * ion/de/font.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -38,8 +38,7 @@ extern DEFont *de_load_font(const char *fontname); extern void de_free_font(DEFont *font); extern void debrush_draw_string(DEBrush *brush, int x, int y, - const char *str, int len, bool needfill, - const char *attrib); + const char *str, int len, bool needfill); extern void debrush_do_draw_string(DEBrush *brush, int x, int y, const char *str, int len, bool needfill, DEColourGroup *colours); diff --git a/de/fontset.h b/de/fontset.h index 256d1d9..994c769 100644 --- a/de/fontset.h +++ b/de/fontset.h @@ -1,7 +1,7 @@ /* * ion/de/fontset.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/de/init.c b/de/init.c index 3e779b3..ad40323 100644 --- a/de/init.c +++ b/de/init.c @@ -1,7 +1,7 @@ /* * ion/de/init.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -28,6 +28,32 @@ #include "exports.h" +/*{{{ Style specifications */ + + +static bool get_spec(ExtlTab tab, const char *name, GrStyleSpec *spec, + char **pat_ret) +{ + char *str; + bool res; + + if(!extl_table_gets_s(tab, name, &str)) + return FALSE; + + res=gr_stylespec_load(spec, str); + + if(pat_ret==NULL) + free(str); + else + *pat_ret=str; + + return res; +} + + +/*}}}*/ + + /*{{{ Borders */ @@ -141,15 +167,18 @@ void de_get_extra_cgrps(WRootWin *rootwin, DEStyle *style, ExtlTab tab) return; for(i=0; iextra_cgrps+i-nfailed);*/ - style->extra_cgrps[i-nfailed].spec=name; + style->extra_cgrps[i-nfailed].spec=spec; + de_get_colour_group(rootwin, style->extra_cgrps+i-nfailed, sub, style); @@ -237,6 +266,8 @@ void de_get_nonfont(WRootWin *rootwin, DEStyle *style, ExtlTab tab) } + + /*EXTL_DOC * Define a style for the root window \var{rootwin}. */ @@ -246,8 +277,9 @@ bool de_defstyle_rootwin(WRootWin *rootwin, const char *name, ExtlTab tab) DEStyle *style; char *fnt; uint n; + char *based_on_name; DEStyle *based_on=NULL; - char *based_on_name=NULL; + GrStyleSpec based_on_spec; if(name==NULL) return FALSE; @@ -257,18 +289,22 @@ bool de_defstyle_rootwin(WRootWin *rootwin, const char *name, ExtlTab tab) if(style==NULL) return FALSE; - if(extl_table_gets_s(tab, "based_on", &based_on_name)){ - based_on=de_get_style(rootwin, based_on_name); + if(get_spec(tab, "based_on", &based_on_spec, &based_on_name)){ + based_on=de_get_style(rootwin, &based_on_spec); + + gr_stylespec_unalloc(&based_on_spec); + if(based_on==style){ warn(TR("'based_on' for %s points back to the style itself."), name); }else if(based_on==NULL){ - warn(TR("Unknown base style \"%s\"."), based_on); + warn(TR("Unknown base style. \"%s\""), based_on_name); }else{ style->based_on=based_on; based_on->usecount++; /* Copy simple parameters */ } + free(based_on_name); } diff --git a/de/init.h b/de/init.h index f3b6f10..c751bb0 100644 --- a/de/init.h +++ b/de/init.h @@ -1,7 +1,7 @@ /* * ion/de/init.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/de/private.h b/de/private.h index 39141e6..dde51c4 100644 --- a/de/private.h +++ b/de/private.h @@ -1,7 +1,7 @@ /* * ion/de/private.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -15,7 +15,10 @@ #define DE_SUB_IND " ->" #define DE_SUB_IND_LEN 3 -#define MATCHES(S, A) (gr_stylespec_score(S, A)>0) -#define MATCHES2(S, A1, A2) (gr_stylespec_score2(S, A1, A2)>0) +#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); + #endif /* ION_DE_PRIVATE_H */ diff --git a/de/style.c b/de/style.c index cf44e47..8db97cd 100644 --- a/de/style.c +++ b/de/style.c @@ -1,7 +1,7 @@ /* * ion/de/style.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -119,7 +119,7 @@ void destyle_create_tab_gcs(DEStyle *style) static DEStyle *styles=NULL; -DEStyle *de_get_style(WRootWin *rootwin, const char *stylename) +DEStyle *de_get_style(WRootWin *rootwin, const GrStyleSpec *spec) { DEStyle *style, *maxstyle=NULL; int score, maxscore=0; @@ -127,7 +127,7 @@ DEStyle *de_get_style(WRootWin *rootwin, const char *stylename) for(style=styles; style!=NULL; style=style->next){ if(style->rootwin!=rootwin) continue; - score=gr_stylespec_score(style->style, stylename); + score=gr_stylespec_score(&style->spec, spec); if(score>maxscore){ maxstyle=style; maxscore=score; @@ -160,8 +160,7 @@ void destyle_deinit(DEStyle *style) UNLINK_ITEM(styles, style, next, prev); - if(style->style!=NULL) - free(style->style); + gr_stylespec_unalloc(&style->spec); if(style->font!=NULL){ de_free_font(style->font); @@ -206,8 +205,7 @@ static void dump_style(DEStyle *style) bool destyle_init(DEStyle *style, WRootWin *rootwin, const char *name) { - style->style=scopy(name); - if(style->style==NULL) + if(!gr_stylespec_load(&style->spec, name)) return FALSE; style->based_on=NULL; @@ -228,12 +226,12 @@ bool destyle_init(DEStyle *style, WRootWin *rootwin, const char *name) style->textalign=DEALIGN_CENTER; style->cgrp_alloced=FALSE; - style->cgrp.spec=NULL; style->cgrp.bg=DE_BLACK(rootwin); style->cgrp.pad=DE_BLACK(rootwin); style->cgrp.fg=DE_WHITE(rootwin); style->cgrp.hl=DE_WHITE(rootwin); style->cgrp.sh=DE_WHITE(rootwin); + gr_stylespec_init(&style->cgrp.spec); style->font=NULL; @@ -268,17 +266,18 @@ static DEStyle *do_create_style(WRootWin *rootwin, const char *name) DEStyle *de_create_style(WRootWin *rootwin, const char *name) { DEStyle *oldstyle, *style; - + uint score; + style=do_create_style(rootwin, name); if(style==NULL) return NULL; for(oldstyle=styles; oldstyle!=NULL; oldstyle=oldstyle->next){ - if(oldstyle->rootwin==rootwin && oldstyle->style!=NULL && - strcmp(oldstyle->style, name)==0){ + if(oldstyle->rootwin!=rootwin) + continue; + if(gr_stylespec_equals(&oldstyle->spec, &style->spec)) break; - } } if(oldstyle!=NULL && !oldstyle->is_fallback) @@ -312,8 +311,8 @@ void de_deinit_styles() for(style=styles; style!=NULL; style=next){ next=style->next; if(style->usecount>1){ - warn(TR("Style %s still in use [%d] but the module " - "is being unloaded!"), style->style, style->usecount); + warn(TR("Style is still in use [%d] but the module " + "is being unloaded!"), style->usecount); } dump_style(style); } diff --git a/de/style.h b/de/style.h index f25c44c..90dfc07 100644 --- a/de/style.h +++ b/de/style.h @@ -1,7 +1,7 @@ /* * ion/de/style.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -46,7 +46,7 @@ DECLSTRUCT(DEBorder){ DECLSTRUCT(DEStyle){ - char *style; + GrStyleSpec spec; int usecount; bool is_fallback; @@ -91,7 +91,7 @@ extern void destyle_create_tab_gcs(DEStyle *style); extern void de_reset(); extern void de_deinit_styles(); -extern DEStyle *de_get_style(WRootWin *rootwin, const char *name); +extern DEStyle *de_get_style(WRootWin *rootwin, const GrStyleSpec *spec); #endif /* ION_DE_STYLE_H */ diff --git a/doc/ChangeLog b/doc/ChangeLog index 5e3a3d1..0756556 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,36 @@ +2007-02-03 15:04 UTC Tuomo Valkonen + tagged ion-doc-3ds-20070203 + +2007-02-03 15:00 UTC Tuomo Valkonen + * Style configuration documentation updates + +2007-02-02 21:38 UTC Tuomo Valkonen + * Statusbar stuff was missing + +2007-01-30 18:29 UTC Tuomo Valkonen + * Documented new_group + +2007-01-26 18:16 UTC Tuomo Valkonen + * Hook reference updates + +2007-01-18 07:54 UTC Tuomo Valkonen + * Updates + +2007-01-17 19:28 UTC Tuomo Valkonen + * Updated class hierarchies + +2007-01-13 18:43 UTC Tuomo Valkonen + * Update + +2007-01-13 16:12 UTC Tuomo Valkonen + * Updated hook documentation + +2007-01-03 19:12 UTC Tuomo Valkonen + * Document focuslist and focuslist_ menus + +2007-01-03 15:31 UTC Tuomo Valkonen + * Added missing clientwin_property_change_hook documentation + 2006-12-23 15:00 UTC Tuomo Valkonen tagged ion-doc-3ds-20061223 diff --git a/doc/Makefile b/doc/Makefile index bd580ca..aa203d8 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -17,7 +17,7 @@ DOCS=ionconf ionnotes FNTEXES=ioncore-fns.tex mod_tiling-fns.tex \ mod_query-fns.tex de-fns.tex mod_menu-fns.tex \ - mod_dock-fns.tex mod_sp-fns.tex + mod_dock-fns.tex mod_sp-fns.tex mod_statusbar-fns.tex # Generic rules ###################################### @@ -124,6 +124,9 @@ mod_dock-fns.tex: $(TOPDIR)/mod_dock/*.c mod_sp-fns.tex: $(TOPDIR)/mod_sp/*.c $(MKEXPORTS) -module mod_sp -mkdoc -o $@ $+ +mod_statusbar-fns.tex: $(TOPDIR)/mod_statusbar/*.c + $(MKEXPORTS) -module mod_statusbar -mkdoc -o $@ $+ + de-fns.tex: $(TOPDIR)/de/*.c $(MKEXPORTS) -module de -mkdoc -o $@ $+ diff --git a/doc/conf-menus.tex b/doc/conf-menus.tex index 3f9ee17..f47a5a8 100644 --- a/doc/conf-menus.tex +++ b/doc/conf-menus.tex @@ -48,6 +48,11 @@ just like the menus defined as above. List of all client windows. Activating an entry jumps to that window. \\ \code{workspacelist} & List of all workspaces. Activating an entry jumps to that workspaces. \\ + \code{focuslist} & + List of client windows with recent activity in them, followed by + previously focused client windows. \\ + \code{focuslist_} & + List of previously focused client windows. \\ \code{stylemenu} & List of available \file{look\_*.lua} style files. Activating an entry loads that style and ask to save the selection. \\ diff --git a/doc/conf-winprops.tex b/doc/conf-winprops.tex index 10c1c10..9a416d3 100644 --- a/doc/conf-winprops.tex +++ b/doc/conf-winprops.tex @@ -100,12 +100,32 @@ usual method of identifying windows, and how to obtain this information. \end{winprop} +\begin{winprop}{new_group}{string} + \index{new-group@\var{new_group}} + If the region specified by \code{target} winprop does not exist + (or that winprop is not set), create a new workspace using the + previously stored layout (see \fnref{ioncore.deflayout}) named by + this property. After creating the workspace, \code{target} is + attempted to be found again. (If that still fails, the newly + created workspace is still asked to manage the client window.) +\end{winprop} + + \begin{winprop}{oneshot}{boolean} \index{oneshot@\var{oneshot}} Discard this winprop after first use. \end{winprop} +\begin{winprop}{statusbar}{string} + \index{statusbar@\var{statusbar}} + Put the window on the statusbar, in the named tray component, + (The default tray component is called simply ``\code{systray}'', + and others you give names to in your custom template, always + prefixed by ``\code{systray_}''. +\end{winprop} + + \begin{winprop}{switchto}{boolean} \index{switchto@\var{switchto}} Should a newly mapped client window be switched to within @@ -116,7 +136,7 @@ usual method of identifying windows, and how to obtain this information. \begin{winprop}{target}{string} \index{target@\var{target}} The name of an object (workspace, frame) that should manage - windows of this type. + windows of this type. See also \code{new_group}. \end{winprop} diff --git a/doc/de.tex b/doc/de.tex index 6c8c2b4..ceba206 100644 --- a/doc/de.tex +++ b/doc/de.tex @@ -45,7 +45,6 @@ foo-bar-baz foo-*-baz foo-bar * -foo-baz -- Doesn't match, not selected! \end{verbatim} Some of the drawing primitives allow extra attributes to be @@ -72,9 +71,13 @@ tag and drag states.) \begin{tabularx}{\linewidth}{lX} \tabhead{Style name & Description} \code{frame} & Style for frames. - Substyles: \code{active}, \code{inactive}. \\ + Substyle attributes: \code{active}/\code{inactive} + (mutually exclusive) and + \code{quasiactive}\nobreak/\code{not_quasiactive}. + A frame is ``quasiactive'' when an active region + has a backlink to it, such as a detached window. \\ \code{frame-tiled} & A more specific style for tiled frames. - Substyles as for \code{frame}. \\ + Substyle attributes as for \code{frame}. \\ \code{frame-tiled-alt} & An alternative style for tiled frames. Often used to disable the tab-bar. \\ \code{frame-floating} & A more specific style for floating @@ -88,22 +91,25 @@ tag and drag states.) \begin{tabularx}{\linewidth}{lX} \tabhead{Style name & Description} \code{tab} & Style for frames' tabs and menu entries. - Substyles: combinations of the form \code{a-s} where - \code{a} is one of \code{active}\nobreak/\code{inactive} and - \code{s} is one of \code{selected}\nobreak/\code{unselected} \\ + Substyle attributes: + \code{active}\nobreak/\code{inactive} and + \code{selected}\nobreak/\code{unselected} \\ \code{tab-frame} & A more specific style for frames' tabs. - Substyles: combinations of the form \code{a-s-t-d-u} where - \code{a} and \code{s} are as above and - \code{t} is one of \code{tagged}\nobreak/\code{not_tagged}, - \code{d} is one of \code{dragged}\nobreak/\code{not_dragged} and - \code{u} is one of \code{activity}\nobreak/\code{no_activity}. \\ + Additional substyle attributes include: + \code{tagged}\nobreak/\code{not_tagged}, + \code{dragged}\nobreak/\code{not_dragged}, + \code{activity}\nobreak/\code{no_activity} and + \code{quasiactive}\nobreak/\code{not_quasiactive}. \\ \code{tab-frame-tiled}, & \\ \code{tab-frame-tiled-alt}, & \\ \code{tab-frame-floating}, & \\ \code{tab-frame-transient} & More specific styles for frames in the different modes. \\ -\code{tab-menuentry} & A more specific style for entries in \type{WMenu}s. \\ -\code{tab-menuentry-bigmenu} & An alternate style for entries in \type{WMenu}s. \\ +\code{tab-menuentry} & A more specific style for entries in \type{WMenu}s. + Additional substyle attributes include \code{submenu} and + occasionally also \code{activity} is used.\\ +\code{tab-menuentry-bigmenu} & + An alternate style for entries in \type{WMenu}s. \\ \end{tabularx} \subsubsection{The rest} @@ -112,7 +118,7 @@ tag and drag states.) \tabhead{Style name & Description} \code{input} & A style for \type{WInput}s. \\ \code{input-edln} & A more specific style for \type{WEdln}s. - Substyles: \code{selection} for selected text and + Substyle attributes: \code{selection} for selected text and \code{cursor} for the cursor indicating current editing point. \\ \code{input-message} & A more specific style for \type{WMessage}s. \\ \code{input-menu} & A more specific style for \type{WMenu}s. \\ @@ -135,7 +141,7 @@ and should usually be symlinked to or a copy of of some \subsection{The structure of the configuration files} -The first thing to do in a stylefile is to choose the drawing +The first thing to do in a style file is to choose the drawing engine, possibly loading the module as well. This is done with the following chunk of code. diff --git a/doc/exact-version b/doc/exact-version index 0413a6b..40b3215 100644 --- a/doc/exact-version +++ b/doc/exact-version @@ -1,5 +1,5 @@ Context: -[TAG ion-doc-3ds-20061223 -Tuomo Valkonen **20061223150012] +[TAG ion-doc-3ds-20070203 +Tuomo Valkonen **20070203150437] diff --git a/doc/fullhierarchy.tex b/doc/fullhierarchy.tex index d5d5a39..8e1cfa9 100644 --- a/doc/fullhierarchy.tex +++ b/doc/fullhierarchy.tex @@ -15,10 +15,10 @@ |-->WRegion | |-->WClientWin | |-->WWindow - | | |-->WRootWin | | |-->WMPlex - | | | |-->WScreen | | | |-->WFrame + | | | |-->WScreen + | | | |->WRootWin | | |-->WInfoWin | | | |-->WStatusBar (mod_statusbar) | | |-->WMenu (mod_menu) diff --git a/doc/hookref.tex b/doc/hookref.tex index f4f2a9e..4c26562 100644 --- a/doc/hookref.tex +++ b/doc/hookref.tex @@ -42,6 +42,17 @@ reg:attach(cwin) \end{function} +\begin{function} + \index{clientwin-property-change-hook@\code{clientwin_property_change_hook}} + \hookname{clientwin_property_change_hook} + \hookparams{(WClientWin, integer)} + \begin{funcdesc} + Called when the property identified by the parameter atom id + (integer) has changed on a client window. + \end{funcdesc} +\end{function} + + \begin{function} \index{clientwin-unmapped-hook@\code{clientwin_unmapped_hook}} \hookname{clientwin_unmapped_hook} @@ -142,71 +153,6 @@ reg:attach(cwin) \end{function} -%\begin{function} -% \index{panews-init-layout-alt@\code{panews_init_layout_alt}} -% \hookname{panews_init_layout_alt} -% \hookparams{table} -% \begin{funcdesc} -% Called to initialise panews layout. The table parameter has -% initially a single field \var{ws} pointing to the workspace, -% but the succesfull handler should set the field \var{layout} -% to a proper layout (as those saved in the layout savefiles). -% \end{funcdesc} -%\end{function} - - -\begin{function} - \index{panews-make-placement-alt@\code{panews_make_placement_alt}} - \hookname{panews_make_placement_alt} - \hookparams{table} - \begin{funcdesc} - Called to make a placement on panews. The parameter table has - the following fields: - - \begin{tabularx}{\linewidth}{llX} - \tabhead{Field & Type & Description} - \var{ws} & \type{WPaneWS} & The workspace \\ - \var{frame} & \type{WFrame} & A frame initially allocated for the - region to be placed \\ - \var{reg} & \type{WRegion} & The region to be placed \\ - \var{specifier} & \type{WRegion} & For drag\&drop on handling empty areas\\ - \end{tabularx} - - The handler should set some of these fields on success: - - \begin{tabularx}{\linewidth}{llX} - \tabhead{Field & Type & Description} - \var{res_node} & \type{WSplit} & Target split \\ - \var{res_config} & \type{WFrame} & New configuration for it, unless - \type{WSplitRegion} \\ - \var{res_w} & integer & New width for target split (optional) \\ - \var{res_h} & integer & New height for target split (optional) \\ - \end{tabularx} - \end{funcdesc} -\end{function} - - -\begin{function} - \index{region-activated-hook@\code{region_activated_hook}} - \hookname{region_activated_hook} - \hookparams{WRegion} - \begin{funcdesc} - Signalled when a region or one of its children has received the focus. - \end{funcdesc} -\end{function} - - -\begin{function} - \index{region-activity-hook@\code{region_activity_hook}} - \hookname{region_activity_hook} - \hookparams{WRegion} - \begin{funcdesc} - This hook is triggered when the activity flag of the parameter - region has been changed. - \end{funcdesc} -\end{function} - - \begin{function} \index{region-do-warp-alt@\code{region_do_warp_alt}} \hookname{region_do_warp_alt} @@ -218,17 +164,6 @@ reg:attach(cwin) \end{function} -\begin{function} - \index{region-inactivated-hook@\code{region_inactivated_hook}} - \hookname{region_inactivated_hook} - \hookparams{WRegion} - \begin{funcdesc} - Signalled when the focus has moved from the parameter region or - one of its children to a non-child region of the parameter region. - \end{funcdesc} -\end{function} - - \begin{function} \index{screen-managed-changed-hook@\code{screen_managed_changed_hook}} \hookname{screen_managed_changed_hook} @@ -239,3 +174,37 @@ reg:attach(cwin) \fnref{frame_managed_changed_hook}. \end{funcdesc} \end{function} + + +\begin{function} + \index{region-notify-hook@\code{region_notify_hook}} + \hookname{region_notify_hook} + \hookparams{(WRegion, string)} + \begin{funcdesc} + Signalled when something (minor) has changed in relation to + the first parameter region. The string argument gives the + change: + + \begin{tabularx}{\linewidth}{lX} + \tabhead{String & Description} + \code{deinit} & The region is about to be deinitialised. \\ + \code{activated} & The region has received focus. \\ + \code{inactivated} & The region has lost focus. \\ + \code{activity} & There's been activity in the region itself. \\ + \code{sub_activity} & There's been activity in some sub-region. \\ + \code{name} & The name of the region has changed. \\ + \code{unset_manager} & The region no longer has a manager. \\ + \code{set_manager} & The region now has a manager. \\ + \code{tag} & Tagging state has changed. \\ + \code{pseudoactivated} & The region has become pseudoactive + (see below). \\ + \code{pseudoinactivated} & The region is no longer pseudoactive. \\ + \end{tabularx} + + A region is pseudoactive, when a) it is itself not active (does + not not have the focus, and may not even have a window that could + have it), but b) some region managed by it is active. + \end{funcdesc} +\end{function} + + diff --git a/doc/ionconf.dvi.gz b/doc/ionconf.dvi.gz index 905ef666b25cfeb7fbaac77cf9b89c76d8c7697b..7d7c9340cf2735c1e6c3f03973b6a51223566111 100644 GIT binary patch literal 119470 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 T%|Cix{P+I>I0uFt@bn4*hrKuC literal 117932 zcmV(sK<&RDiwFoMMU6!O18Hw=V{dL|E@XCT0PJ0Vj2zW{U)yKwLLfMWK!PD-APFG* z_V(wU4Mkp`@5~w7clDjU{((d1cHZs|H#@VQA9uH?RB2FzL~~m&BcHA|!luP0ZWW5C z5z-k|k8+}OFJh){$e22avHKR$gnxp-LRtw?2>aFlrIh#c~Jc112 zU^Fg-M|Cs~Ph>=0Q{h9_Ggcw1ph+PtX{ML~YNim*TWU_!t%4!~0AVessc1|H>x7~y zD-sf78-?&;OEZxHH-V!YlR`MBi$FRO?SWb>ML|$h5_36V68n@!6(NiiMJ^h$0pALe zXyoBjrJq?vgDT)t7c-`eo0qd>g;b!RtjS&KaxM?o1zEL#4&Vg1Sca%dtWi+WsAwSP zik7clvEt;C`-Q(vs-ZMYU6fEk)PVz88Mjgh?=Te7;=w+UBgV@8k_?O{9Xr5o0Y?>N z7*I%I1vH>%uwNghpOGY>lCg9QQVFh-7$a>AsiUF}m%vPia7HVZSSvx$vIrO;tHAQ^ zC{&^4aTp?&(K{PU!LYmjpLw-JNiMolU0lw!& zCCjQ}w+$h(5xSA0QWQ?HdQ-fJrl|0RQw~c~R4P+|L~pGveT+ySBhtqc>2nGXu;&KY za|8Ty1I}}OU=PB(SmlGP&>$-`$QK%{KI9ZGSc)kZl@i=!Qm}_n*uyC7;VJBKO73UB zkAT&|+JN)|$oQxNKZ%Tl$Q}`S5+ZAa=#UaAn?$VoH8vqe1Ti9rCxV>9GJ8&D&&m9A zvhy6mY*Ja}8Y`r+LK zd3$+4+&aox$$kynI`9J~xx_ak0JB(t3-V}q3m5?U)B&-W-3lxm6-|Q>KFkxo4=Lk5 z36n=T!uT4Qpt+pYUck2FDtC}7Et4o!7w^u50o5c937bvqsK}4QLU@}tqJa|-?#SfD zA}AU5IY0_ilf9`8=}3{mG=R_`W0L@WO~`2ALWI&Wf`kl2`qLTZTKz3=QoSHIw0#=&?0Jv`QP03fBl=EL_ww|k3(&6;EiFva8s(^R z?Vj+aJNSv#ZW7YF!El4IE{fn57}r7fAx_Xe`r@wG>Ci6kiifQNxHVrLiPh*0dy5SS zwVc6{l9h9oE;f`!hv7sO-$b?g6S3&VH`A89Q9<6 zgK5mgqn+N>Z3E{l`6B0VMz5EMhO1(6^Upd!q02nj_9MyibW zp{n!h?yl9nt&T}Y5K}e~b%*)uOHy8v*9Xbf$raM8j*6q@A|s>kI@Gz(EDg9!J=%V1Ec=txz%ofQaV?>yHQ$UIISP z+X5}j`*lzT%&=%$hO|xqCnKAh$H89R3Yt}~im-|Qwifa|#2bgv?VFNc5xf>%~mBZ!kOFH$FdO7~+E(j4KaFT&ek z^jK_;u*bl6A;P`s=1BV*)=<*v;pRvue32edvs%*-CVg>w=MbLzYl?8UpU^$MQya%~ zhC5-D-W>U!h27;m@@y`rDasrD#0}})nsyQT(&Y@hLm zUuF(l$ZHO|R*gUA^lC878Pc`MQZrqMdBx51sP{=qQ;^1d3i^PGcR4gg*kQ-$#qk_Z zAvIum+!s^uTwgP7=cg4evh8?`)}ZYPUv1wCgqmqPKfwBfi)*`4Y|!%L!v51o4N{{R z+}GS~<6&l!3wm6`LH7Uz&!KGFwMW>7z|ew690pE_fU8UE=Z&p-eaIa+BUo-d?Dg&?*Y-;Fl>stS$~Jm$W@ps6t%Z&b3Or{xog)7dHf z_eAK_{~VZGBmU0zXF^{Hg~&fbE&B4v^vA2ZEUlnbR=hL0*A|trBR{xSQ;}LOpSUIz z!e!4qevOHrfFH)E;VIFyeY%z&!))+8{5RC z=5Ct(Rw73!!@t#LMlVFVHYQ&A_8EH?m=L=j{!7>+$3MPdA7-1qcLsCyY#MX5vwY^d zY>p5ff!<87+!vR$BlmwlV}bQOb~bHRR_;s4hMk2l`)<25qgi%FRFA_=9Z50{3`Z>! z*|KRv-2r z(sAey(hc|xvn>j(!NhD<*Lqvi?K?o0a3^(JE0URd=+;chRzzsOJw8KAca~2(4C~nb z9Z5UJ7zPalSu|{iGmdK z2z*VacI{{FPFFs9?XA@A-Kkw8`|qCa_|HKs6ku;`M0!N&%Mew_P~F6gsO!*Z6PgVj z+}XE#ruRN5iFuRSGO%M{WPhdO=N~{{`v*oguo`yt4G&K*KR4D79T?nweEGSDQufd^ zF0tDl8R*@!Bei>GXwUAU!QsA6c<%HtLZs3R)K4d8Yy?$eqbJ#GFseYzjVh~&F?$V0 zAPbEsXgabbWQww4bb|KY0xJH*vgdC7QH1I2a(^oO^_Ls#Y}BXDezfe}tEtZ3eEm;m z-ws`q%@PZBg@{HcBhlADX^&35Y+}Y6W>UJ3^rgQKvRGVRcs{EAh-%uKLrd3preH zR8&>!Iml+5luCBU)i&qskkv6EyhYPNpM-;5;AJ9*gmABLFalq@4*A+kGc|Y1v%j}; zU(E#3?sT1xlq=UNuMen4&fIM3+L68g&UWZrSdANopkaVWfAmbE3>YqUYirTyRFpK! zy~$^~Bl6_^sAO07`Cy}C*Y^4F4Gx`p>R@*ntmX^9p2Bpflm6`6y}<6Dsad!vSH2QH zw3FCEymQEDT4lwqZ-9I*fB8I!`}FGXtg2nu?Qe_tZK`tpLtpO3A{>l3aDvWcnS2ZFweHZWqx5E5 z6#WVtpm{nVG##@WW3f;QLpcEzswwl*_=lDV?#rBWMk5BN?83189$Uy{ZrJ{yUrz$F;A1>ray7lxGc`bWh{oohOh8RL0Nw8w{1aLs&GbKaMHow zaBVofFrr5$UT*{1JhU4FhBoGc_7kH$@MU^U1}J2bZHB353e%+(|>wqeddW9|9V zaCEhhr!rRfJC$)~vGJ*lSW_pdHobo|5Iu~#4P15iFWZDx%ez!PLsV~9+OoI)>T?A4 zGgm+LL6B^A=@ttK=dFW-zoQz)YtWm8rO(t$0U_BY|I}}TgfQlUkcN>dvh>EHN8Yuk zzt+a>Q{Wq;^LO;uG}95g)>&tXiN zQzLoiu(4f>GtH4OrfPDhrtA~%X0sQ%9jDDv?CRXm@EkNyn7j46+h2W;-`8uJk*+sL zy1a6^BJBAGe!Bb4B<0a%yRVlbA0c`i81h^$K!SYqQzPH-G%Zkg1E;|Nh`&1XD}J?F zy5=&6cmc3a-1zKS8UQcy+<~Lv=M!Y^pqAg!HC-_Lz?WjtpnM5G9Xp#~(*^h8jpEvv z%Xf_3-u4}rUR>$XkU-?Z3I7vpXkAPFNy2~4X4yaaqaQs-+EQ{+s6HLku)visbt+LC zKhylH7+LNBw3CLFj{{cyxb;Bh)h{@pTsp`i11FCy4)Yaisx8+d>WbO-TMr>`)MCLo z(-;RB9hf<}fgyTBY%LA1dfT-O!FDx6Fh4bQ-7A+Pg!2Je{0Q5f^B7>ETQ$=pPZ3F` z42=U+>W9<~r$Q-_HvmoY{knfyvw?hp_?o3@hG4rt|Hy1LS2G`5ee>Yuh_xR{hzA&c zJA2X3CrS9-U-{@aFS1;Cc=fL4?Ofsb*KRx>O9o{@l6*LxWZ^i;o>k4+hb@SN)~Ymr z)$20NpIr$(`5tdQe!((bw7@vdkC-I`^xLkK;#0}mN@4owS(>5T#wnL8WG_9#ly}|n ziPp0P^Wcid1B{1ViP{NVG|WoVOm+}#c|o=E_Le^JR~NoOwJqj?kFIj0A=)BY>b=nG zc<1lh=q-d^B4Fiff(d$in;kW$NmQLnGu?pI+C0tk~+*qZDJ$3DPvW-(|5y= z+&i8)X5VZT94S6M0pqjLh0jKc56vLx8DXruET`Z;J$4%xduxQ}3y0`%x{IMlroQV9 zrdRh2wK9SPt;C{lXYhQ76Ge;7e$dxJc?KRg%(OC6bk zUUezfdF84nlKGZKvW8Wl3Kw%>72~j~Ke4tl{7LWxC^2<2T@(axT@=yt%uO1 zR;PpuE4H{wU#aYc(-q~xR>sL2yLfQHB5ws_euG8w(&~A!VyL{4_M!!2#YCXG7IVdl zF@A#{dj+^XS@N7VdwYB9=^RBV*hRaTD;TUEj3n<-_g)S^-+I_IjbWgg<}#1fAd$SY z-UGxV>%ZK_ur7wlz%mUaT>)g=uXkg~aQS(V+}o|{+b~*Oo}L)X)6?NEPtUJv$10)k zck$!>+y^bI{6QY=O}b9=Cu_-7(_67wrpS0LAKt#GZ%O@pf8&u1MEUrYq@-V`YZQ-+ z{4PIEdGzWQ)Vd{sAHR>cyCHtk{L_1@S8Q)1w{+0txAyk5^P?=$Z&WNGx_;)y@4Z3e za$6@O+ARlZmBhP3wQWgQE-DZIQzQIUa)@j%*}bbgl~__hCHeu+tlnGmbk%?C3gp2 z`1Q$dU^q9pnT@m2%}Rfxn?HZ9@#rSuZ*+spp8W9n$-WB_hd}k{cY|DLCkCMdul3T0 zD=V|vNcqG!;MRb8Wa?#8*N*7Dl10ox`NTa#?@i5)0IBJY=lUcPSXnUM#V-l5WuwyZ zT)(K=Yeb2@VpYw6k+%$_ufeaTpRq*cI6Q%~c@1dldXk`YUnDX!QQclyeS!UYoP(Lh z`y_9KZb0SJD=L2-q9U;jev4F!PRuCWyN$7=LK|M3QJFV@W9!>XXG#D@>WsFnawT2r_E<3KQ z35t!%c5n#bFkncc6t=4*8UF~bG6W1sP=zF@Dk5<~49WSGV> zU7cOZ*%gtJ;QLOlv4o~ZQYSR>-0|`rP`IHS`cp;nS$eXo<|C`)10`6rYNQ9D3Im@s zza9lOTo??!3FDTMJ+}{o$SLa zl2rJzbh^wV%wj@2O=xh@sYY^od(H7g6Y<(6eRXzKJ=-P7nHQ^aGqkg9-CuPpMXz3R zI@bL=z*|w|y65Py8Il1(Z(2-5dM*@e8#@hcoCcAc{tEMo{zKook@87T!3a`8B0}4G zcr8f}Q;um_tk+uB!#72+Llc$2oKCO8I#HB_3@4YWh7RgpNfjWJs^S!#Ftlq;{wz=j zVpG)0-T3LQt*W(Pyk`5uG#*&iwwmjFn@`p8I#%;0Vj_KR45004?zCu=WSE1Zb-KI} z5({Zb+F!BFY0}ycF!?boH|!Kw6G$%L%pcVB2YP~735w7W+uyNT;1il)l9P&) zUCv5j?DX2!#2t;@S@LzPi94%yEh6#pNQm=lZN=eHbut3*3wsW6-W@OB*DLz8Z05{#^E7S*>}Y*5<4MhuLk;rLP+}m0v373b zpn$;g(QA8YUYov~y4V zo*h;p)J5{;n;zQ=ezbB=++7NE5`{=s>3stx$wt8?8FDVR;k;`TG!t4MyJqsf zL-}m1c!>!W7oJ$C`0!VbA1Yq@D{X{P58YL6C61zo+qoMy86VGDl;p{wWkgxlGXy=Y z+zlJ&az$r&qHuJaG30_BN6h984Vp5l-9K@qD|aYo6NIh)iBBbGk-e|XOcKwRrp(N% ztF`!UhgK7eVRmd}GMHFGPm{{9y=vKJzY{?>V6@FidZ4T=HY&`}w?`~4HDYnfiHXJc zzju7GSn+?5K{(Et+B56zmwPe@%Orzv69I8T0u`GOWjNZV7dN~oRG*r;a@`T+7RZhs z{bjXY6O=~Y`{+9?k`%8q&=y$$@DZz}IaVWNDnPQQd!2Nznv4l_#o?G%zmoI9lgxRyz0u6DGCiu3KjSpM%V#3IJW0_#BS)5}^4PP+V@l*%`b(3O zlSeOH^j!Dl1;0+Jf`1m;PGQ&5Wry(lh^f{^+kdep*nR6tX4ursqUg!VE`kc{(C5o` zDA>`dC>q%vCq{OxL$`;4fG?17kR~!nLg*Ch{4*y4_g+)SP!C?pq!9$oPz*B`jXn0Mt!-c!q&6D$)e!OBBYUo#e?>gFYTGi84|Nz(9fD zs!(_NZ=gOeVEKhdhmWlSXHYa4k#=2o@t_|}8$lfe9A?N!AW@m9mn~Gwx^5|+*V(g^ zRp)r3sY=a??Yo?Q<53(y`~&$gX!U>V-md2sYOL=0PX9-@t*x~CKYA-8d>Wl%0s&8E zoN$=DBx02&hdbmnf%WknX?I8goO2t}uMrT2dmF{5?3rk^l<4i;t6wB3?&My*CmC6i zW~nZ!B6S;7Avio~Ar{UhjaNaUi)od#B@a>d^9-h+iY#r4y;<~kx!1EflA zseeN9_a2Z=g&s+ad(u4CSY@;nRPCsoq_roHaf0iz{K#>OWF{vMN{^%%7x<$Yv(b$` zRbH=2X=0%LX0(;*+FVEF5h6$XO>J?=!p*@(k4r`FEB{;%o9ouV+} zuERQa8q}g;MC2-{wQ{fj8%rtUHX>3H0u<|r3d<5~>3GI@8sge|ttJ!pnpil@Y8;S+ z0-@kH{@9gsFGnsZU8;Fl@Y$7#oR~^ zR-{AAX~PA(MuTsB$?vX-nb_`o`^yrT_ZVnfC114q-u?rLtnCW3+Afi!cXuLnK}N#y z#mbgo@C4101991&E}^91)`f?OoD?_69ya>aQoX?}ZTejUpn zA=ZeT|y5rY|n zs1ELHbbKN~LGgmL&9R?Oh(W5`%hRw*GtQ6xyKMeg+ulqhI-%%vOwl6oieOUJE-B$u zN>;X#Q7}FZ2@NVsf)AVg)rgs1qfCx352DgQm5Erk2MN`Mf#(du46s*4GIfL_#ac*` zPAW>W1X$KXZhzb-YDa!RZk!gd?V86}9`~?3cKRx7@CNx_1g7yq_Q*Do9!QJ^IbvgP z!T}BIu5GNt@sFZr(~{@m`ih? zro43gU%DGe=?r>IrUdzAOD4LdjH}M812>8jvg=XcCq9noT2TPMPU-xfJ8VJ3b>j~CJiejV08K|cE-4pMX577Yw{;ZyO!Lr zSP#QQX=yl!*yYSE$5EM>;{PM}f`s|qHcyN9&kyenqoiJ~lRNyUJ?Sq=7Yp`WKBzO` z6MiW~cxh0Q&Uo5*=aYP0DUMQ+I5YyHRd#W2BN7%w(B8WsdHcP3fZY`aZ!li+o}$)H58MHSV}@b3dre>lvMdCd^+=y zclOU8bsR4aKJyd*Mf!UPKi%c{f-iP&=k8h%M_Nx;dm^o`{{WHJ)Xdp?^OIfPJZf9J zpC`}Vv3CC*8+2kHq!|B{ZQ+-;(I~3bNv+>w+eTs*eX;_#>&Aj0qF$U#!R6%4FBd+2 z^yA~X>ho+%@K4TmYAc^Ztd)DFk;;5`INsx8$B;lgExR?Gw)LxZU^r`NyTN;;&%+&S z$Sw1Y!)EgV?|0NW%ZQCCwsaJEBi+XKA(ja}kP<2!V9~8{s1K9`{F-%P?YWi*jo$$tQYHfhpH z4a@N+WXYsfJue-DV$1t&JL=@_-$o1$BNeyPVcqvB0Hxt|nt;?UMJ*-|5s#GSvAChs z%rp_fBK3f(=OhmX;p1#8iJEorPLAo_q8pJ?HCxufJ4myz2Zd@U(!PUta8iRu&j>1z z>InBe(qoEO%XJLHvrYw}iF8eg#Q}+`%r8K5>My%2K_J`)a>iFztC|b8)caQvc1)C( zgQFOk?5?elI&WPPjCFEbFBW4FMnJC;)Y^g#$!t}MZWYN$lI!^$g%(Fa2q7vn#{w@H zZ)(yDw?Z1{awv_R8G=i%T~0bVUiO+D>$TCc)N2{$sl^$i$D3%_Hp6!aPPJ(@B)h)A z{hIAzI7r@{3k*1lTg^lAXYHJ|bX-C&qJp)o=7vo1o>Dzs)}{cATCA3hgrd!Atg%b% zIU{b`rP$4woXk!*8kMKgwV zF{@DxJbjDtiM1qH z-)(KjU7b7H-PK`y_jW-Tt!5YJ7qEG zLVnq9^{@CVM24JKfdg{c2aBm@**ArRs%ppk*%-!jLP7Eaix@L@tOw4v$+L~4VWfpB zDv)wEJAxAObVJcgxEC(yK~C3{Q`#Pi{mcM{352eGw$BXKv3~XtcDdBRPPZ1-ZEt`% zU^IfAp{Pa8F_D+bngp8C0C`zwz>L6mx$@9$>z1FJF)rubF>K$|971&FensBowQhMi z3#+I*MpZJpq;*6ELy$O*%1uyx#-D8Y@`43pV+-if%m*(du{wIu(6-NQTW}gd)YA-1 zz3eAT^SH6l^?k3_)+;~Cm5B#`?XiY$*=$SZ?3v;vbFd#hYzkT zY&W5E{sYh6J~HyDSfd`0C#~N&dOJVn>wRz_@tilD#cITl+jy*`ry$6Fka@%BzR!9t zZ{#T5d0(yKo15o$CO^3Df9mDMeqgZ2P|qY=%OCtHx8$GKpGd^=&7(UZxc7vG@5$h&fmwjb_S3C_YD7k>q_#)+Hshnhe z#j#~Y-9#D;5hnS~qQ2?OS#UsiFl~}ln1%RyJu$m+)Y6|fIy@=z`=iZ-dD0uBNVh(B z>uYSkm;a}2G#^%b&bC1-xBM4Dp%WVm*$oN`T1*EUi#Y}7p^@+v&lYTyekaKJby3W;qu?0#^zjxEL#I&dRpl$;aG0@)E@{ zTj;+p#B0H$Fyw@g%f)dKB09{IhVhZcUEF)KRw(s&Wm_RruqECzq{rEAD42t>_J<@} zD$7}qtYct^z3IMHyq={IuV-mJrMLk;DHYki)3ldv7Jo=!{xf7QO>|$;19-Pd-VNxq z2eXo-pSHFBFWj(Wt$&nL9%&4!fwKYVbQM*#%}}b2B;JNA)je}UfAquDkvX=E;M5?T+=}gQsL1u5m`>LU$`C5W9^7#wCF@mjQH5a)qa@C=hgqRD z-hha6-t!<%-{Id);3i9JR?+6cbgjO_w^qy3vxExas2P?x+*DziGtg${M%dbx|A*-Y zV=o(h4f;TSvZb!*Bu-Fd$_#n4M(@-JBu~He;bd+6BPDieQ>|6MlV{#{|E70&h9XjV z-m<#;xrS>tDh`w6A$lNime%ee-Vr#?b**e#I4fa2JuRI}0R!jO>=Ii;;She>^7Q>& z4CN4I?YKsg_crG4=Emy5t3?144kI%W*@dvj43R+&ic$=q?Uw z!|lFz&olUbde+aShLcb%iOJ+f6T*Yx> z82X0meo7d6;^%q6&@s>rXCY~0WI)pEpE^H_411oL-T&;P1Z;-V4yb*%;u`x^sAKzVfR(Xgewf$fDUZX zzJzsE(11)zQX2S8kg1@QU5gAkr={QrsbH8+_eYC zRh@UEyK<6}6ciq@V-e2?Q%Uw}Z6lls#*mt)1vVJ$7B>W&EA5rE(P~%h-Nl$k%w(p# zTq)k(dV678j016ECYiK!O3RLcl0U+jTAjj7fTX1zN-6n+LV%exQ$p$Y`@Zj-d#~1F zH|>DKA6R=I=bU>U-}xTD?|0S>axqb~CFq(eF+ycmSC|la;+GE@V~pk`JPQfG4%(;U z4k`|r9`!k1)_Q92eufZ@s)Gf6#rtJ4lY`W{W1NS@sXtt*&nhI|*7`I~!GezZWmppP z)YSryFZ2aP(6STB;Graf*)ui!A^zxAVa(H0ZyA5I1~SzRM`hF^r}X`Y&Opp#t#xau zpGtH!Yg+AJblKh0M>p@oHVrG~m`n75o}+Owpsiirs;P$-Ejv8jFpjs>tLvk|tfpSQ zPM{;KoHCm=1R zq;K)l+zWF)evaj6&K1I8gfHY-ADA4|^#(7n4Us}?(Pe6>&AT;Dq{~U$>DN=6?_mG8 z7J#`8dyV>Z1QAM&uEH-qCNu!Fs@1iM=sl9GJ)HDl=s@oNbE$w9L!s{6{b!u}#nQ*9 ztn`HB@mVo{y38Tmvh7glhh!@1zQDmeS2;(JuOJvMEF;;9KC(bld?Pz1w)x<+?a_`8 zK4F9Vi~+88eDF!q=*oEx#?h`@%!fr-^t?6YO1LjQP+|)>bj<|F;MP|3g3RDB^48I; zuXp_5y-BJFMr^g?2mj4kaC2+OAp}nM)a)~@%!HeCMW@4fzF8=t)==aSk1pq4`lN*( z-Y_b85-{KE9fyZFCB$w9niNsC&CNyz>QEu;c@odmPdQzm;VM*ajOV6mPWn$YDT}t( z^gdT%pa_~zJph-$CcA8Y_Oilo^lNwMI z&UB1$M?rk@C0ty19ZN#f$3D&(I2g^q!T1b3Fby|NEwy0-?~7I^si!tvX2T9vKw6Pl z@??*M6p2YY$TOA$`Gj|i^FQGSs5^(B6t`5(IsBAsCTP&-WyUgLlv4xbQ7GG7n1w@; zuNZtAN)Z5lh_+&6O-?CxiGIK!u;lZ3IL9K$j9DM2xjMXIZWPUh#MOw8m-oHMg81&C z<*Qez32|b3CdBKD+b|(ox>k(|Q9kY4WI|kY$_@WF6M~d`qqN6OgE?A0UTJpVH{Y7i z3JChLIhU4|-)~=04>=ss$&kQY3&)hU(^}?D)owNT0lpl0$<^4{g(6(BIMUYMP}`$W zX?`ze3E6tAOF!OieT;A+$ynyEguXCbyvgft(J`a>qFYu}4c=@v!pxI?IX5z~i~gyM zjxuy@9F?f<>6S-;o;8Nk4R`KN7*2y9YB&x4T85LZ!qX!88#9`g(n`QAKDsISR8n4u1*6&Z-3dTPahn*g|T{)W_Sk$ds`>dcJr#RAvJ0V0-V zv~HEl_GS)Y<-9fVk>zB#<+3|6zN6snY&S2XCB4t|^sJPMKarWSga7DTzL;tu-Td4e z9*aaeriV?}U=p1mNqYDU5xM)Qug+9~|Y&qx{$8CoYjKK>y_M2nF#2?3jPLxs0ZszvRbm6&L<2Nu zZdcNE3_~Cmi2$WE)nhDq0k6kBSH^`6D{zZK1`akgQzbdvo%B^qNkH3RpSY6YYVS7= zP2-A`lnhxBv9C#+5HnTBI=uB4@<0>?sxFF`FY$WLYm%@9DRv`yQrKW$f~$g;)J-{W zX9!<4?eFTvZ~g#o6Y1KUUnq{&oy{-u@LIkmPDTk}%jgDBbv8d;93?R+8mNn0ip?*$ zk>8R32_xsHett@?A z7B%GxVei>EW|c}MqfTl|8pcW8ZMEudpKecgd-tnt=x!~2l5M0?w-B36WNd?yN_`9$cY%T5NUEZ5Up5|Rk^ zuB7=AjE3A8!gA%B^Yg__oFv;)U?@}A(MMHQou7X`o{X=x`li7o3&&{dFnk0&_j8gz zQZ6c~kL*N4Z0nRHV@xuiheJV$(-%onP*72)oFbq}qDKiN$mO8%*kW?M-(U7oXHLhC z@)%5@`VdBc|4g`})aM8RjuvS?RZP}2QO@{*9a7kIJfsmdnqjW%c;mk!*fG*G>K$+V zGN)a*H|jz`8W^iN)R-{s-Y7xs@&t%jc=y~8DxRC4U=BURm)= zE0ta;ztSs@tVBlFN@N363dozUIj=k-ssE(9ymAPO`YO^2U%8*`l28&{$8?=TNrIAF zLQV@NK9WZ95(CYdO-Vdfu@}LRCZ!4{SX`hrr}|yP*9lUGDnB97wNeg(%%7ePKg4Pq z%nY<-+MyC=H(ztfr9<0hW@`O=_cV&7mW8(DX+fcvY`y5>p=-#7Z&0TkRjl*mL^XBp zOAX6k5+Z$yHD-M55Hk0NOlB3f(pqZw0}PZ`-UYkIo0J^JyBC9QB@F2{+)k<{iowAp zBzo7)A|&aTX(AL$wa$f46iI_w_@s_&=fdGBiDDgNWbvF)SX>TmS#B@fYTn>^@8;ZB z*>h^C@9)>pBAaT6|9t;}d@&qRC3eV|J57vUg(53Sc%D8`Ur};EEsN?BGoontAe?vq zK<<-OTgV!J%)Eo!G9{Kun9UbKfXDWI`i#=Z=otTb{??Pk=D+CVHyOxIe{Q{OPlo^a zO6qI0+0h~|W^QO0l}U6y+kq_`*Af|w##N@Wh=C1LU2A3^X~Y;(;E%5q#3wW&4r68J zB{lu`d@wP5@6Nc0sHeVn7tg7&A`1#|^>MgzXSzJ8%w9 zK+(7hU>$t-E3A?FUK!n*CJ7m5(RC3@@XO+7U@wbcWpkr~m9fohmZhwt4$vlsw3vyr zIH_^iM~p>jmqh{^wlp%$7zoIM+LS$?oJN?169T9b`NF#M%y(oVR-I=K(oh5#h;S18 z1AK+LehQ()XAY|J7Ry&g&p{2aBU(+p$f;kNjVxbFidi=j)vq1*gc`}D36i`@Jv_#7 zRJ1M)YM4SX0?;v0$HU`bDPh7$He(F|*BBfYg>)dYkGlM5CQk;_#y@RzE87SplqB*Q zPGp@UcoZ5V_Xy3|_4$0wx$)|`nrUDP3JPSZQU$a^cPy7zZ9-(%(dE?zKl@Iji*qr| zzOsvLtF5sDEr+CY`K9PJj;M(#95Ih5bQ=Fdl~w2U^GL0gip@pT-$+YF=F!-b>l(4T zg$goZAD^xE@n_nzkKbR^hJD=9_1u*Bk7S9|d0(~JuJzP;*O5ptuA zcbC-2oM1ZGiA9r4_ocXje8}YdcMJ8(*A73S7?}MJoVFV{LfAL~ZS?(ZtsRL8DylUS%U|!(?QNts8wV{bk*yfrh5*PNF`|g`t z1d#M|in%DxVVTO!>U626az}@hy_`AsKz}51S3LZ>KI6o?@S9MPhJdB!Y^yKdh#?CN--w`S}IspoJIe_1upv6s6Y!@(J}7zo6I(=o5!;G zJx|M3wYT~)aHq{@-(+~WzBoFT7_NzYB|AnUBRO1KWC!qTokLUQV!dze3ic z4M{wU9~+>AO5CCs3d|XTiNzzud9%mc?vnmlGB}v%AMx69 z_Z;M_xF~2)%+lm_os)B}Mj_!jHzKB*=z1elJK?!2GeIUAjl|laE@Kf6S*r|d9Nmud zKgfUk^Z&eurNsJdHfM;#MDgo*`6t}*y)1d^9WVbB>+z^EoXT#X1ii8VgjF?La`z@k zP1s)@ik2{9kzu?-sb29)9d~XL7L;dRbLFwE&{i-o4$-G5ro6Vr|LeyyW)RQ-DOj?!$L*d&MxVfOxraBPykqI_(z z%zR<*sORN-jphd5GID@APrb!J5+hNj365eHRXb0;)$+2(`R1aaOtUg~&`=Vyb#`w} zH6RpB@FbFL>l0h%W# zEj`-;!AX3W%2d^b$G6|?C@v@3h^i>T^Ig5F^D4Q#pCszb%shPR2XC8%WA-YWbY9OC z$|@`$;X$7~v%l-UJ=3$BF4?;N{GLt4?CKRg&<{6ml`B2Ce=n1k`lQD^`dg-#>ZwOh z6ncG5%{O_eLuxxc0;5?`BSA+?3xa##RSITj2) z+zq3bG7M}zIIWwz5Shmcl_itx9Ek^GRMd5xbjTeyMc}~nm1K}`2!N?9v&A^eCqzkN z)vuj-n5U3Y?dYp+g^WM_-P^Lm`4LhFCU#`Kyu0iCv)8Oj>z#>V0n_Q7)oWJqt=r)` z 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 Q&~H-v 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 delta 235931 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 %Eh1Rv;&|(+h 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

#;7?|Kz4$j(>Y$6ArkyEnK} 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 z

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�{gwhl_d|1P>`3zr4(Pg(ze5T#G!1 z^TI3PjHb6Cw&scdHuS4R-saCU8e}ZNqMH#u1F7$t^mu;~Uy<%SahTiPM&5!_94Q&P($CN_Z03` z8TR!DDhEB`A{?>DG+l=L<{au{?-$t)5b;0(_rhLXNi+7%`F1L04-AEiE+x9ABLls9 zje6s)l<|MYsU#T7CQxhXfLdB$+?Dg~YE$pg0T8j9Z(Pg<1Sv_2*fs*hlROAON;0!& z{;r=t8<(7bd~L~_7h-l+t^`iloNaUvSck##6N&(nS&MUM8p$ttnXcN2WHdHzN?tK{ z&^_&4BR+_WcRP%eoG7p-SJX=hC(X(JI5Tc$pNoIE!FsoL$+H~<-=DnD3671OhNE}! zDC>h7kP8R}j&^UnT(TsuKyGBcaY+L$3fxm|R*`w)ahKEg67`SrQQH7aP&>h8t{@ZT zh2>fk^6@D6L{Cq~c1I+PqMoIY#rFdgt!EnwRpNM*64UZH`phKRg>{TQ%7;)5L|_pK z;j@2VE*+Lh2X-mq$2zbn?nKq7D>AYV+n-BDe<+tWJvdQF6U@LqDNJhUVM~^zpbIG^ zWua8wkrM8=o}BAx^!%#<7ftp&T~>POvIS<1ivO18eHf|(p;DS(L!JKgWKcpT9Fx1a$mhE*f&%Fk<|T3yLmII?=sbVg z6LZs@7+8og<;HsT6hMgv-$sWSMJR}%v+Sfj;()m(!&z+t=bvwEF)I)zFwdYcrynk9@9MIdT>7{ zb&xf;GW)+;ScW~(s2k@Y8nXA6n|T6a&+P-c&~;h7Fqb3LWE~CoMr+21T0djY6cL0B zo&EF3N`>t&SHQ?Hpj!xnsJhF+QArA+<%Ytq1suZhS(NRQr&XxWrr$nmj_-f6HjzrD z6{OPxe5$F&8{p{704oR?7;zSXdwfLo&Kqju&>S~wX1JH}Ze8on6M$4r0mQR*gsB1) zX$5E!ssK&RtF$XXQ~L9-Qvo_Xop3idowbefNj*QJUj#NO;S{T7`{_^Sm?sPp@x% z7j{Qq7&j76d=1~Oy!Uj%_MQ~mQnJ_lxP=KX|87=^SzpD(JSbty-Z#d8A~os{e{p;? z>lqWryt}8r0MlCwE^LhEm89-)v9%1_o@A4Z>5hLy9 zlmB}N_PB^+efpj=0TzD(0XfFg91J|y2vGSX00{*{PhICkS$g{@p*n^BV-uByu5(F& z4O3gXs9zduCF^EZ?=mv`PT6x}3Z(Zu%?mT)+YQm03`XPtE~rtC)vW9}Ln|vrH>fU! zC4XyJbw#eYcWk>`NX;>di#`pJnJ3OLRd-C1%>f52p7x1ljnRJ$94K)B;`TJ|uCZaE z3!;xnWK47^z^X{(>7BpNlF%h*X6Qu zq|w#judboftwDdJy0K|V)6oiLQU=))dvnI-C92rp@Rk9oHR!-szpB)0`@n&EHCE2% zawYiNUmfo3JtX(6;6xDD?0?Y*<yLVt z)P&$@am$FK?OAyB2X{KRwGr(zAosCFaJU)Qgf? z7L~NWksQG-EROIQLktvYuD1tjdla`yko#~V(ww)`8-BAdXc>`=*eJcYu_cPLE~kDv z>Z(Ze1NVQ)%%O8)`(P1eK8OfeO%+z0gmu0ZMTU|yBOq4Vd|5FU;$%!j_gAEt(a7Ur zIgGD-*t7aK&-3r4*sQX#ICM)_G)>byyYk+j7!zUEUN%l{`dlMG_?714>66zu!9C}T zGk&k)wYg46-%!>T4~wD)yV^Lg0JCm<*9+g)Fe`tntud9HLvJoXrx7^`!`6JQqOtNt zczIOg$i_Ej{I4jr;sJO9sfX7_&7O)442)vrB3GQU^(Qn+m|xF!k6QnJL!qK%wK>!D zK*=iB2S8bENe96ExE~6gHFAV<6^8HaG&-R};b8@?@-FCA*?tgEcI6FokS!Gq!z2_ELU%3$l)zBzrEsS}|HhWEg%^JX1DUv%(VBJclhxmKR~9`pZ4cQkpbIpqn5L|apO^fzXq)|7uMJjjMNqKhFmDuZ~++!je#$SFXlz7e%bO48+d zd^3)(XrXD174gr1$ygQF(5SzLmi))idP4|vXpY#bIb!kX5(;%5GRFXFrBG@FUlS8& zPOc$oXpLVyO0vr_d)=dn>Op-BsAi6T+-{+k+(<>3^|muV{|Lt0x8^msCr5uVij&Dx zt+;N>f?A4B7f+{qJk3o+cfJekiSQNPx)qR2yV~%*4taAXTp{6f>X6_4bH3j0Lyjro zm+&nb(e)O5%~ne=W|i%(CG_L5LgO*q;sxXgw;YufaY2X172b-sFjs@uPNk0{f-O${ zojPeyOC!Aig29*gow+1tL*;)FGNz)!Wh~4SJL*u+kLwvOPM7)oD0p;u$d>*O` z@#?DpQKy)$eDK)Da8=_ymosSwDG2>LFl(@6**N3S+;Sq&jMr>mDpWo|e;t8se`z0E zTTlFtI_ql}ee$-z1IRqQD19O}vX&&*Q_P4cS zp}3(Um1JeD(5Z^4=Q(aL?~}<}U2`l72x{>PvHJQQIsv#~2dbj~(Xl_6(SuEnwmvfYhi#3v!nMSQnZ zHrroWX42nyk=uEFnk+$&6nD}0XCi=ZEi#SI`>p5scv^q%|36W*>ZDFQVTFMg1f=QH z-l|FhRt{un&WabX0D>loK#4p}Vj}sz0-5i*t}SU+YD@@S^8&#e76_8Q%i350a}FCb zWQ%Y$^~Fc%FBVs-Rmx&`+@ z2c+F29DlxN)TSn^Dt#zpp;{-}y7X&SQpYi$+12K4n4{mdyvZgX_epaG!u)i64L#MV zJn8PA0LO**xuv%-pYgUj(|(3r00e2wHjc}hZY?&z7GRdb@ zz{{^-Xr#yWgc6=Fcf6RMv&Erh^!yzYX+OVLg1$Z}gRcLUPS2B;pYY#aao=vhf0K^h z4QF4@B(XC3&xJ`Wxv2R@dXqf?kT{(iQ07mUamnI7R4k!HX?#ul(W#8fUP$F#mFn#3 zZjgVsWZ4PceAE{>y-Wz!ilcTxwPJuv&Cmk zmL2ycN8(6#5mCfEAWb1KV z5fo3SdDQ1d{%|0R!^Fn>qaOY<;wR#_xE(GifP3GJ=oLRJ>_xZS?8SXiUeLC%*JOWp zPe-QYt5q&Puvnm%JEFCNF7PDJi<>?YLmt%wGu^;D-qdRse9mV_WGWr>&Q}y-@t2YM z)%v2XK5I*>XTrmL6e>N&H+j-7J;wCsU#IkVk(~epzWiiNc%YQlG#K6q8!kzjd9NR8 zN?$9XO8uLJnVxD2wMOH;F1%KnN5Fs5mY=BUg>g@1)8gS=S95}7`BKdZr{S>rsF}=J z795K$MF57&gji z;T~cSgqxv*lj66o2g_LvrI_g`?g23Fbc{yDdB90OcV9Mxhl}t|P00qXTAqKAMW{|s zU{Jn6e8ZkQU75c7UKrV!Y-}87(Io3dG~X)l%_ujwpsu@YgT4r*sveDRp15+@T+pkn zPV>yc75LFI%%Pq{y}zI3y_AZn^vLG!;$)P5(OjFz_=?PYIDvx&boiP4Nni%M;)Wd zboAsUP8f{_V51oIC~xJS>Tx_8=G>!4WDX3!Kx0O$op90(xK6)jF$%X6##cZYT6qaU zh!~?{2?Pgkjh)cEg#6wZ6~T;bTqj``N(4pJ9K^47MRK7jx${ahOTbAk*aeUu zf=SM61jP~$Fd-^wM4Je{+|_d=$LqzglAdXqL^Dh1rt8-#&3ZFdLo~(J@Co&gdz;3Ca`~=wnRFxNAoMx+nZ7z zAwrsEGx4`%hL5Fy3CK(1UzCw6XQ=Gl7`pT%%<>aRpyA!oqsOCy6j>)dRM~B2mfslx zyg2JC-%YQT0uDdf)szq>Mj9TQzMi|SmL$2cGcvwCuVJet$=E(e|C7fx)=!G@lUF%) z_;4L+v#6=6geZSiR|NO|rU~U!Sb#x_5%cW>x5G>BK&tF}-R|D3LroE}e%gg{p0R@d z!Ip>>1T51m?T;ZtX#9yD66e8lElRIr2XW*V0vr{r=vzm;BEK+k+{d~>DK;TW#Xw&8 zFxwrZVuYj%%}kt-?C^MeMJFR}YkTtSj(FG}0iJ+KRX~3Xrk34t4%imvAf1<#DTE@X z+155N#eQa?S-bPl^j%xzjNltowp04sE!u`sOgG;@3?9sRz2CFEn0cH9ezw@nR)E=Q z7mU;fda`!Wnc5ZoxuW28daAYOT!P>5d`DSagsWUU-#GbjC7y0$9<$Ln>2DEnS1T#! zfF+pjrL=zyg{OOEr@IPIcSgFdcDk$IWV*Aom&Q|fy0bL9VrMV5M;8Rklp25aQ@yZ# zw&wAmn{rUH0gNiSGafP!8r2e9Y*zi8Oka`c69$Zqs``v)Z}p}o1Wa{X*-*q(4XHVn=Y#% zlhv>b9>IOe>RFH}Fulejb5?n^WB!lXLXuR*3tZM{1k#;3K2fUsk-h{%Ok;(HLgZZ< zpV5CjNy*R=O0BGpJJlJae;Vrmb0*)pUms@*UBk`N9w~*aOYAouU*Q-!A~+q6rLnb@ zKM0d)a1bIh3jA3s>ZjZa&lwl@Zg<>QC8gobQhq-;K0-wNP!2^fdL`WMe9mmjk7yZQ zZ)XdDGN8ZqnM9P4`t3u@9~d1%c_Ec!kB zyGPd?uw(EF3<(Zhl~R;(d}e|OD*n^wr%?;iXuiSC;|uPo-ogQ=?6Hb4>S4l18Y99ubXNC70R3HHg)F>4$%z zJ~j^!UHh*e>8fGq0+Qm^4XG3;vXRy2{~G|YEZ(hgpFYVT2cu^9)3){bOWHgw;wp!kBHl& zCil18@7WwJw>ureiucv8S`b`OrsjVhCX~p%)PVMdoyJU-d?_NW@XnaroH0A!(8SYg2)^Z+h>*A{*K5YX5B9SqI8o`>US%tZgFN1_JwMFQl`@=~D<`Az zxW9`}_tG|NJj@+EhBgkI?^O#8kPQBq4|vYWz#KHjK1#CgxSh#2hS=z$B)@;ADVraO zq&yxU&F{I?PVLz7?Jxr#Jn?gkX{dd0Irw_9V5iSZ23Z5;F#}>xa;Z9=j?E;ElRn}H zf<-;V9EHL9m|4kio&LyJ^J)tDNsN>DzE6sOy860{YzezEn=KR}Aqemo2Z%t5aNP2ZmiD_V_tkq5 zv5&hQEN2YyH0pp**^KoZ06Wc;R+rHLP&PtDd zrjMm^fNtrPvQC>jRW|lA8$Fh6WY#B`3oQOL>w{bDjLQ2hXA9h@M6FR72gSXYgKtDC ziiXi~XbH4ELc*IPml*&fo|!Av3{8kxsaun};PGQu#U-Oj4JkEWHI2ukD0I~eHeSL; zQd}HzhMjnTMd@Q1a5R5T;vO_U{SQs^0v>OR8HgS!>ChsWoOg20vAL0c+6=~Su)Jlb z;GkK;Q4yx$`@wtxHg5(LU*iY^sB}t+%`R&Cf`MW2Jz>lnkCK}{*Kyl^>7OuJ+DnB6 zr_=}Ih9pCxTzg0H6s5_m|ACOo!F8~&%jkPRF!zInxit|dlZt=$ln5S)Je+tQ2ZtIA z{*1comO9Vu`yiQamd97{IXUpu!xq^Ic`8mIFG|Rhok7!NMUZO0GXFdX3H8*BS~l(i zMSHZV+;V2JzAx`_jC@c-d+@s^SGEvH#C|3YD$S{9u95!hY!kEe~#_!ge<3n7`t2cJob{n5EXB8$={wRDL|_>y~0Iv+0)RZ z2`b}_#ao#F^~sXXw1Fg@P5ez$Ukm9h&_s-{(JS4}YKGb^%JuBC!cYnRU<`M?UYp;V znOf}4vr2#J&T)+>yq__sEL6Q`Gx5SbHjrUfKRUqiJW*W#}=(H0wlad41-eRMnG<8j!_@$06JHLH^E zN1_cd9udV+w=D3qMK z#bqSP#+isgR=W;4TC76;NzRudbSL7vGfBTIdW`x9W| ziAF6-(rW<1{4^dqI3M?6;w{{nn>5Z`wz}PnJ>gn=lox^rZvASR3!Fj&(?{E$^%Ib4 zlnrh^v(f}WHt91Hfeb(%U(sdeDQPz6VY#j!rD_wM-7=Kc3_%a;!S{3tq-|P$1^2Y3 zNqmz%ff{?-jpirl(~S~Z#r?#ala{p!uHwV`g0T~zzTOVXyfa6^`AU>b?fG?e%>1CX~9pBer6&2XN{ zeXfU^Bot49JumegvLNc03X#1b6)*p&God*#)_3z57wx$6#HM7 zoAMLqH{t~O4PZj*gHn<>8y=_TMCAAE8z1rD@p18nRiCX?^YKyDnkj<<=B0#~_hdwS zzBEnB($c0i=#qsDK!mLrZc9$QFR@iIHi`M6oig9OYA5$td0Bs_8#amq2%CPa6F=Ev zsn(qtZi!Y6?Z5FXi_%Vvv#=RyM3+RuX%3Q6xON>`*~sKf zc4q0BgZF9cCxr)j%4XXpxQ>PDY^D4xbUp(oN%d9K6j%=cJWuAddI6$ez4X z_@wmB6xY&0^h9oPku9ygYJLTT-Z#j=$1>HTTW8WR^vo| zQ=fN6lW<~Mj(N*~q${RY=oc}eBu}K&PAFc=5zJ&eLlw8M#VT~! zm9wQ-+{kh4ripRDp1SF2AdsvrO{e#PRA?ka>|BDVB{qd5 zkE1>}=^PHq>UP@wd%;4uZpY>(0D?Qw5b$=AbZF3(i?He>ckLLj@E`#>AZ^_E2!kci)v3XPfV1>sGZ2Ur=~ zFDK=gqUZzD?Q-#?#WmQk*Wc49HtjeqJPQlz8g0MG4837qSykIMN7?8EI832@`Hc_d zLu|oeG4%}+;l&lu`j30gAI(sfQB21R_=|tshVlYwQ>wyPGsP>~7{K((yTbd?Ra<$h zmPxrOzL(`&Op_ZKnCskdNq8gUKpi_tJdHvZ>=(8pE;ca=A)SX>SA-7d*SE{pc_x*^#Fc(^#S7D0=_`Lf zOpLOO66`iiJP4}&ZL{9592vnpKT+V~fhH5e@?V~?_qq`9tY#I!oMGhYQ9qbjD*1S| z`wI-mE-*~8LSN#_1tee^qC$VqCxb2;+G$kVx@Gwq{jqL4{uK(8W3Z$@!{a@g1vX~q zAHCwXgIo)(^f8hW#|cHy6e8Qs`+$Efo5Lnss>FVpQ0h8xu?vz@p}BXv%M1EEUG}+; zh~**_C3E~(5Yl8-gvQJm+R2y8)3jezS{^Fa1!9+sLoMxtKr@|Vy_WuRXs&s7T4Lm6 zG95qpJmKI;tj@$z z>0uP0__r(DlrdSTl$hV-<8~=Ar$7HXJrs?4a%ia#9JRAno^GHxDd9r5RtYwe$g!=HpN;-FVekjJUM8@S}g20Ox*DF6R#m zR0qxfN?+>IBQ}fkX&74mt&D)9)S7P}9=KE39-zBjy-sJW1Cz`b5b{!P3y6ErOy&VW?QwoJIf36wsISJIERANucrpp|p4nzXpQES6c03X4)PsB@Tae8veQmD!u8(ds9xPUUo;<$1&{#at%#bfM%)>M7=#y5zAk61lIAF5(f~E`YVZv{iP=~aCDYP4qxAv1NU!H{t(qvf594(Ah)R-coLC>h z=(0z$u3Ellg8+g1mp%sFQD`ia>RXH50zc z056*Ze9MzC(yALLd)QT2o1<|rAW{=Z_DDeG0qx$rtJ=_~4smkXMT57GN1=nWnjBy* z^5l5K!VQ0;?;+0t`YSsNE05i9&5U7ZmuJy!>^!qP17kBepOy;Gu_G)$H#~#4d$ZN% zmE{+*89gNY^df&urePs6T(02E)<<8~FbtKcY`4j0F2`W#aDdWzX^bqx80o%|9m1s> zaXFFjU3F!bgS%K`*$qpvfj@3f)_S=;ZWby7ho@x(j7uEH#xc4{uL7cgmIJXX09xj^ zP@#bQwd8%NkY91r7`oKW5bGPRWGI2r~+w9((=v zA&7648O((T%A>@UYDn6LV7|LzqcrPw)_&=!ugikn8~&{41*GF~8fgIzW$-y?@e&Qke2q5vgI~<`G}T+e)!wk90k?j;nDnW zBP0LlakGD=(>$y!{H@D0*`_zW1*60`FpS5O^d_BLKC7O(3O!k)`D9x3Kw#$GR?}?M zmArczs@>^yZ#r5MN(LLkDX62(tNY<@!L{A}=jU9K0y3DC;kvkV`h!)JeXU4HX-`MjC&Gs%wdT+NP$?Y`Q6 zB*y#okO0e4A>)FI`G4b>ZOo|Tgh_u%#HjR@JM$fSuRDCNy^=OpXli5Fc@{5lqvON_|J+0N2&owp#g z1ERBxEgcI2SBYxtlq`{Fc~1){LSXz!$5lAm3Dvbe)O2%V1sIQ})DdyTamaRN+ag>c zwZ=S@EHu9^+R4H({rT5P7Pjr!{U?G}5Y}Mj9cXa}@1Y@us)@O(LbDUAx#GZIQ`OM~QR+ zbPy?1LPhouG8A-B?eb2;OPYPqZp6Kv6)jR?-Q@WRRq}BYsBHWm9lft5%LM;Jc-$6=pxU_#HknfK5 zdchU4omu?m!G#4hj{68@=3N%hIPSJ$Uf}As46^}RqERc;vUTC;rvl81j6pHPz-r9(Dc zA@S#b1>JFBl4rp@*r4Tc4gLyQ`gHype{dY}C|+>}@dg^sBbh;TX1Jd-F*+qKbx&|> zzqRgVVF+R#NTQ`YzP{I)oP=EvQByL(Qrt2N#l zJ`v$fOl&eAQ0uapZg>&poqFgvo!~KWLXG_@?ME?D4;Bh6f;o=YHigbCUbcP>5JUGp0(w zAW_#urQ?4fbs`oYo2aar^nsPCMWtuP=E3DFYE4s6#{k5TqVFFDFW%Lg7yC-N(pN0G z#Gbo;T^b~)>9!V-Q3#RFK$|rSk`11J_5987))u5)%Hv}V#&{$hX&KOZEV(Nd>*ODj zK`D0++z9n%ApT%FAs!iNrU%H_tf+^21Fyg2Y~_FKK#fD#CgQX(WhAe)6$zx7!MZay ztv8hCdQgotv-HqajbU4JlAPXxUW4yGMfnboU(;BdugJpJi~tKsmey?3D=j&#(oX!a zmyI%Oy|1*@J)QO{?sZ8Tve8v>#5n`F+8(xYjy`zNvR{EAm$QQuaqASBFbyxUNGtCs ztyF)Ei=s4gXRaiI!EkAWU8}_-10&AxP9mgL(1}`NAV+Y%4Sz-6Q5mV zBv!cXn!v1>gfI)vOGCjZ=%xMn$QDp}mvFp_1tdX#*_YG;K;Hb`uEU?XMm5{jTHkY?g9aPU|J3RG+@@^v`yZY_ zJ6UV>1R?xk&IfaHL-UhTMwIaAAsXN%gJ&CmSJOh;K@Mgv+HBZojZ+h=n)mHrV`0w% z%bop@cmgwiMOBJU8{@8f4$GReOEsKta0b-_h*EkmbT)Y8lFatp;fku3#j&FtOcQGk zNu)f)e#GN6jq+0L zpWkxbkwOi73{CT}R64JDiagZ23DjMscF9H-Zt_w-j>L3LKZrck{&K*BcN86jUVxl# zTNGEDe$m{DF`mY?V*hHbjq zsV5o}Od(jY=i1#Q9baC}C^{=JinD8f;2vi^9v;Mxmc}WDni~(%zIuqs6->xU73^f$`JieFH(M*?JSSC z#3@b%b(DnYxV(Tm?*=Mnv2o{*1_WkP?=*^#3e(cw+4z<0yTirwcnLOpCa@=erxVqo z=bxY7Ds>Y%_s{=t(X~eO{v6$<`{xuu@3$H?S0-$HS z%)o{m%9$nOK1Wc1zBegGS5$e=t+9P|JS?^!H!N7yPVG;Fg1f%Wv?unez0GyQVwW#l zyBw{6)xoQOSARlr_D|-Md-1|4c)qjA8@zW8;Xy(fmx{<^l~~Hj{=YBo z%@e;+IeWBi7E}I`ajgh;Z2spXo@Vc0 zdGeK%e|g`*S)%PK6+y^#Q>$~tbgr^>v=HqIfgBo0hHr$__Fu^cK~fp%?V0$&%eJp3 z_va1miiFg=#@@5LsVI%GD=ejY$7`0wNNU5{)n00TpuS&C8UD!ck{!^o{rOQs91pD4 z9D5KA#g|8Zq2MKd%98Y#XeIX7A)h>4n{@?+k8#3HG-iCvDz(w!wB z7&ETKn7VRH2d`jM4`~D^qk=LZ`4!MTosYStRfc;Ly4ag^Rvmii`W#m?SskDydwv94~091^x+3mSy~s|WZsfNw_;H86#yt_L`KW*4c-Bz0_=u%qoP2<7F&j7ItGqI^75L!aCw zlnOFV+$(N>SP@^_>rbzQ^6Yq!Gs@}+;r^6zjx^<5gt{RnH~F-ka-Pti-%N!eb)uTa zC@L<={PmMrS-$lXfuTN-z&sCeNc5uoZgm_JRilqFw~(oJ-vxEpcpoguj(+-lOL3Qz zvNyk$1S(jkEn7*rS(E?RW(udoSPD(W;d-C4R<{uoP5q@ER+`E$g*O!Y8xAFeq1WXZJw)(#p!q3OF zqr2H$T@iD|qQ_y^r3*15)1^N8k|B^V4&b`U`>LZ!fZ9s0k^arwZX3v=*cH#Ia!wVouf@vpnCa63urk}%n<;vBeST%-! z0z_F09YMmMvU~3m>dy*n3YX@IJ zbq7$MaWfZbvsHM#dCRTRR{Mx0eHWHr-BR&>@Yc8_8b^JI(gIc?9ZkMWea{n8K` zgRgfSrQ=a}^L<0E2C$xu_Fs+rmwvvB>ToQ`g0*=-(6vFYlIHHai?&j#DoJWYX+bm< z&6UipCqt$4tLZ5y5`;UuH`aK5pvDuDgL&bfVGV#FH&Vm#tXUjQ5b^1R@&c#H4NBpu z(5FmDaeyDQx35U^&?LC!{R{?w#W!#04W7}!(2Ko!L+_$lf!kq9`XReg*mLeQD>_1d z4fiWLl+Nge#bn|*p2{0uk@*nWZ(9fB{3E!m-@Fkf7@`)&0n*Vgj5yaw)1lb@Y=wEP?^=D*YKhg5=h`y}IRV0glexdeqVFs=~ zDDIA`JconmGcJ`6zpsiHPbY!Bk>6WlUn#87rjuzt2~9_UV+O)61gmE4J@Ebz6>PsZBSU>-ZU$>MQ-MQ1u*)DtAnl0L=h zyxUlmrRQ03o+giDYqt@9JGeQNo5Nm9+hPf$w$0D-ahS`LN#m3_Z{>L1S}m)J)1CCe zO$8)p$LAxoE8d>ln_KRGwDq!);o6#gb4To?qO-8&v~r?&Y@Q)2x}tkem*-^${8VEX zu-oeZy)M;w>HvNG{8apSBC}`?M=(%-7QJK|uJ_%eZ(*GXGG#Y^lDIP)0^?AotT``pMM=J?1}k09!>=j(K#v>J5`j@z*N-% zFD0^56?;>ax27uSjtF2jYD|?l3^;N;SgQt*qAbp^0ddwjgAv6y@~mCk;uKkb$&z=POuWoObNm+F+(I~B4nEhMU)Z`?xH77Dhobm6@?>9irOpUJ>CzqdxF0;e; zp>n!zwVDf(m8vY*g0Gyran@be{e~{<6RkcmblcrW+T)vlr?QVlxFFHaKGO9r$UJs4 z6a7XYz_EDk2sF4QMK?E;;IIU!E0C6YMZ0*K$0z6~AJ>#eBYBnvMAT(O3 z9;hD=AX=5@T(OJJtf!owcfysED4z7{&{N10-U!IPkvf+q3L*B|czRxDFq}prYCo;; zAoAumO~;~t@+>u^ruqAT5wJyy2kM01!6jOI8sIc*$CGK)Y+ju zP2xVC-2vmBBbdbRTZ~b7HTGPLQDZfK-Xvo>RC=$*@wCS#4z0$bdpuve z8qEbnfTnr4-uhjGKC5<=Ovm9c?d9gtxW3bvc&)EF!{{y)bXc8ZPVwTIX2_m-Hlf7A zRyxb(2;U?DBAH%CP&(>zXY~?K^+%XgT;9@(V=B|=;e5{b6eX=CjrXHqFMB9y9Z3Nv zeYR46Xatfzr}+6p7=^H{Xr7y`6Kzksa%mncFEopQyoo9`*o%dmQ zxcIFPTX-Mm%S)v77&hzvtIwEAvQZUTDebqlwnjceEUILFkOo!V8DOYxSYi^|EI zTj?Vw8CcO--c|3ugj3K{WUy&ZuJAQNud1_%i|ll^m$6{}BE=tgE3B7x zaYP+s8;^=}u5~j9Tt+s+XbGt-2mfx(Q$s(TY1cGB0&m;AJZI~o&dqfzaA;_{T^nAmX#e%%KO!*X6ML*`@H$w#m z)e-SZm!)62`gIc6#0mgmIwG1kp7SCvRO5X8w zd;oUQSeU&UXjQ?lRwhJxPKoz6vFr zoJ%-M&M(;tPSx<0+65 z`9+d|oYb{j7`^9@RPP~axVd@GHrAp8x*eZ@TBvL+T@WiuQmW1OmuvLtVh(J$r09~J z{xU;AYwXD(nC2l?i_=4Yz=xPY`DfQ=g4;uPDYIr3t=v+xJY< z^HskmtrGtuY-ZJz$!FwU>^&E#JM?o*f?ZuEwB%Rbh>@lYg_+0djhOWup^030!~^ocx`b z%yC+Dp|=;%Uf}}F@6VW*PCbrkAvemLne@o;kd$(#`fiYD?q&NG&*T-kwNwwOP~aoydm%Oxksb{po|GOn)iD$^^e9eqhlRd;MLyQawm zSMLu|ZftXZ=2JyN2_pq+cPpMz*326gWGbobuq=G;KVkN$FMR3i1h_hT9CYhE@fThz zi*G(s94ExwoZwp2yK;V5f94({ntB!NR0Ad;`R#@YmWi9P+%L3pgEU-etsl+a>#F26 zgT%A7i%u@BCJG1gzc6@G6r$mMM;UFT|Ez9PJS~!c=m{>X6J_n=JLbe_$%=Tb6^_=4 zj{4VL3-I6i)e+ z=@r46$yFf~_9j}`D+e)AGylL7hn6ESc_{JS!)&2scoF(JnEd};y<*C+JqUYH=X)oB zN7t63l+|hQV|j!&r9vEI8Nra76M{_9w{aokEgB_7MTGm$YT$QducZWWM<-Q zbOkg(m9KB!wa?L&XcMbz7jrOoCOPe-h|T=W_9%hMTu{?aL{9XCIUw=*MR}OjYpA{N z%d!vaeA0t;KIHNWX~u;&^pcn70c9=tMwbyT{=#@R^b!=!@+>Z!+R^dJP?jbvX=z7) z^MtMZ2@@mZG`K2z=1DhO8EMGHr584u?c%y|4AGA$+s}*zi$*6SBCPbarW4A!sMd6j zuB)!rbV98Cf7j1X`fE*d2rKx;*~9j@Iatl+zZ}UEgz?!)a~b(GkM*Z=z1PD~E>I0{ z@(|_mp$0peS4uIip8^``!^ZTQO4T^qksr7yCzc1h&vYC4pM=(0ZJJNYk9T z5fk2`En>Go->5I8Ip0zD1>XVyZA2kf0I&6Ec#)&ZOsx0}^)7yI4yw4w`X5w{p=CAf zI1|CdpJDnfrE_FIl(bJX){$B&p?pfXSFpiqd93NV+FL1Cyrb<-od&HjqBf;xEgO{@_v} znm|T&6hB{DDtXNvXW;|Ib+M%RDqy;GaWUHM$)-i0q2z{@4W^W`KJ-v1$4IhubUArQ6qo|a2VW72 zgx9rj8<-<$V;g+&YZJh!#g@cRItnv~1OQKNF7#CLWeu{lTlnZV0O@%u$twroP}x=v ze+X`o&*W%rIoQ}n?@0)MKvC&%OpSM8T#YO03LBOs`^r2Hb9cEO2V~KjW68W4mj*_m zM)7W@?OG%0#uAtm&seV7i)oUFu{?G$MGf>xv*D_}o+jO9)_!B~rTyOC7#u!7ma~dz zol(aYz8HU1wQSt!=5Naq9Li!RH{-N_oyAV*&u@~&raDpn zWpyG-2K!~A1^sqzT!#Yv9X`t26n zf3&SxQ<%?3{FnxJ{(-VHuYW9s)OA-nu`Cl%PeWl#HTarLnaCIpr{n333Dd9OYoeR^ z$+jdey%#6_q5mkwukd!Em(`mD zMI)=hkNB#8XgqKUdRH#Z1u4Z7=VqA933bJy<=cBn&`B3@&`V@Eo_-;wuDwv~Sdp|c zOxDt)INmHNE9wAc@d-@bH+J=xLozdo@dPgKJ$L=Xjqys8$&;5k#q`S$o=m)|>R z0@ux`f)`W)j->a6Va>C8M|sv8tAfch1by1@^-!+GiSx zSH2Fh{Ym0AnZ(hBiC53>r>s|!#T@91A27`+z4aGVm}73+@sD-NL=qgK?|OOM?#LkkMt{Z?69LTN=VL)q7{5_KA1N?6&sfn z*Ztd44!)Vem?HV6Rl+1SJ2GL~ZD2cuT76jg4vyC~dzWO>J{eg#>{mPE zW!W)5KE9AN;R^yLyx7&N3Ps!ugYZYB20og&jBKLRylc@;gDf3Ot?|Q8K*#D&6<`RD zkD^>l89}pV7YkOc`q~p-jra-xcMi5Y5k%&HV+Sd5w&vcoSDYocVj*{Uh{%NOG1^a7 za!;zps?$mJ#si`&FE7Ghizlc^pzxG-me((RwDI$Z-)xNg+x>x_=wd_y3f{B?#^WAR zf3`%625;hK98QHP2AO{P|Md`M-*?3De?%qNct$)rS2+|hWb>#LY;H#y0dq7A@t|ja zq`xC_Pnu2n*xK#7g#IA?&T$@n9(>I?K-Ts2lg^YZB<=_5jj9jGZPO5=@}8Km)7%e( z@!<$o%kFiw4lE+I189bd>HNy#(G|jg<~<&p&?{FPO|nTAyzJ8(hu(B4XFSuHaMxA@ z`*e75+|Yjy+tr=YK9cP+@2eVip=@ElX4ABr^6t~D6`tqlTteW9d_a_q<8W|)`3?45 zc&baC=~~E~_gh|C^PMoJJR-M5r%Y}_=Pd7Xb6+a5vlPD4S_o(u#6@}n_Y`&fq#9I3 z+5i|C3pp}39(UWgpY{o9fU3YkX|EHvG)NG=kK#|FMyVj96kV9lBBQh@eNIJs$Z--% z)ulJ%tevV$>Ce9o;MA>q^2?}y&b{0p2!iy0#&_YQVRWfgTUj;18K?Syzm=h7Uv=gI zoHQGLF|!WC*jq20cMFD3+r2X{{C2n99zNFGjQRRU^N-gM7?&SID9&zh84?*0H11MG zu{ko}F${DndLwhw9GT(DsAIG-YosKDTOtqOzcdM{wiO9sIo)Pm&%+ zn>3->mQKXM`xE(X+Yg+7{7pvV-mb!)E@9U82hP{gcG4!$?!_+fa@QvAlFj?p>=Scf z13R`ZiTfjYjj{L!w|@<+4AHXld^u1|7Ocj;2cN#i z%ZLd}#u0&#D^f*Ur5KX85%qP*uH(J&nc7(hm2T3cCq=GJkn>G{k|SDoh&ROvS53$p zIc^T>#;KD$o3>IgW3!kP>XuAsbN*y&V8fI`{ZI;ql9iHzA@-C@PfF*)5~F%WkzjGt zjs!E1Fn=o?tURW^NU#p6&&tjUuz>x!VO>T3xZat!yF9|SPx}7&@JLzzX&QRaoAVDU z{19{vRg-Q%WYv6s#^RdDnuH=L(G+KSC$8p){9|c6P%7&RvBv@VBkrQ4Z<|}k)BFlZ zI7Qo}SA6=`-`H2>##nn6mfTn{Ye(J@B5z>-0Eg_`n=*Uc{gYBnC+6#i*&{!Rh&Q7d z01`iufPMr^UhkFWWIvy6IPp=Woks4b4~^As_H%t82x88E&%|xx9>8;oDwy*U=s8z( z6b{T6F->yx-NmHW*8d62^t&{q9AYD~c0%}43eaXH>*V*tWSmo9@HO>%k)ymFn$;Z3 zHTqUTKig|ejH4cUjtf{HxJTob#VzUPzBY0-1o9CNks-I2Z}54{@q!k}Qo_akp$w?Bx!2oR~hZ?W=_+#XL;$*J>U01Nt-KMv@(72u&`Y0QB6Yaf* z-VFG0qoWV+-Hks(zJlX_W!w1X`0$Q0Sja1X1slB^W1n}&9^78*?FPMD(M6-Z6h&2+ zL6cmYHg`#b^*@aDdHLzfPjhm)>> zb4x?Xv+QP^x07cX{rQcOXW{Vkx-8lfX@3aK(IUY5opU`!`bTsrM>bg&uq3^t-vf-+oMRwFOR^I zmA}kaYwnfgeq-sw(L#eJGu$qqmQ>vaPY0l6t{U-YF&WwLGaika;im~sgW=~SE+qOa zCYP@?Yd`3Sj&qUldHub5UuF4nnD&{{MuEo!#SH#u&x~b20C1&~==NHYT2%7Z7rNZy|%(x5BEMShj zUt+%sTxB0a@)^3gl~*%UO&us_4>2%M9qE#*chHVcjIO~lUl*^oi5Y=d^b-x zC+oZi)=IohF-81?%syRH^RYdIw5Pc@M+@)piYI-F zr@=WgaTld7=pXjXN=Ay>3>;eV6Ld`BrT)fY*n&jtjZ@2Wd|zV4!)M|LMUI8xMGO?2 zVV@ok9BY_h@t?<9r3#X+RKaOK!5`$R;US!F$~wU<&=};$?Op){>)GdjE%>J1noArX z?ZC4Da5g#ZE+lEUcJuUXyOGbQPx%WF>}-rYpVJF26LUjVC({L5@<{r+)(`Zmm9bW{ z#b<4$EVXyHwA4aL5hucXE2Ou#4F4=Y&CACF@G&635HEOd7CyNy@3~%nP%xSx&Dctc z21wDPU*OcVo2zvD-JcGBGurlVGkY{qI@d zzFAVOkY8R6UjM{zjt_H3D5)#a*5%8l4xwlUqugy~O5;^ElXNSQDBu*Gdh-sQ%m-u0 zgYS?fq+=7QuA)e7t^*K2XuLesT$+Z60!wxhNj9$)I5_$(1AmI&nl?zOYD(2{^n&9bXyLh$!T z)VMgKPfLky3UQ$EqNJpAEesc{W`5rMc6ngFI9?5n-!iU@#E4-*KJbFYRZszFSTuR3 zMY)_E*N5(ZjU3(ods|O%8tCNMygX>fx#f#s*>}<*7ROww9GvY?$ogs^Q$mbCK<(JN z#T)kf@iY%XL*8}ok*hyok*5#LwVGwwnG_6QE=Zp zKe(~1fuQpXMd~?}x16CGb(KU;8tY&O%ATsVlQE zvQ!#>U|wS;Hs$MAnoO)3eB5Gf?&5Kt_U~a~`03u;`X54U?{D$-!y_XhBILbithf@VQVlP|N9rDIivqva zWX>LYz9DJXvfWe zS}2?Nsb%W#5|YE~jiivL`$!7ER{T=Q9f@tgd#;c50+OwG8tX_^GCTxSXU@#o+Bn>I z$(M{)b?SK{?|Dp&Ee&ouLh?wpJW|NG5ra`PZQNUsL&IvVy~Ib7 z#3vIUQ8Jod5$IdfKzW}u2{oG|?tX=TR7X3zNYS@EHA-1kgw6!1!`2|P*Uaz^@p^?O zJynDnFt4@5z+|b9!sL{sJ>KSY4l12oK~dA52ZE8c3hc>vbTZEvCD}E68;zMLf{Ym1 z*hY|<2STbup>79WRQTwe9f`!Vkhg#(2YXgNTd6F|p~LfN&!md&eUwZP25F#wF(0(M z-;(L*@bTJDn_zML*7Vk34mnscZD z)6o@`MByW)Js5y@_=)^1PDiI{%zi*v&51&h-gkz?UOY5BB`J?5H_!k6bX9dXn{Q%QYc#u(_rND{#v`#< z-CbR8zh4bTjkj3^Mxfd|)_Hq}r}{hAd4I>{KWvRmh z@S2lyi^obQ1I-o>%(^IlPEBvEIstL8Bbe^9!q#<%4pd>(D^e}aY}COw8sYpcT-Dgp zlvaD5#&wBp8iHv~$_K$yx zh51_$1qsrz|9rULh6`BwAHqctrLY}wc%4cwNWu-V)8Ra$KQ#b<(9-`tM3ANK&*%N_ zbTSrRBpl+-cQF(>pEO;=`sVe%^I$CZ7_kljPQdu{#`{FpuRKmo&H587w{ z8mC!|vj~6u77Sv4Pk5{SJ8{IPAl^UU3e}0|PRI>u!|&04Cd6@z~=0oYS!)C$JAySr9 zUifgIV6r$Zt`wOfptT90&X`Yt$&A#K{B>z~s1qCRf|XeRWxSL9!vMziam+EOk4mU8 z+BtXRy2vvOb^lH0uQ*76suGExX1A*F;NezZ*KBpY(`BoH^i`rI-jFEu`XEdj)nx+s zJtZr-XgHOBSqUA;im4&<$`BR$q!av(qQ?GHO3bB)B+z|%Y55q0I0^y3NQH;8JfBI9 z-oaGzvjDs7137c~%ZD}Rd_$9Z^P(@VtU=bjR;Le-C%_F_kLRBhV=%OolwSi83v%R8 zob%-h*B&RdY#_C~hVc==ph9fS{vq4MiJW;Vj#)Q&j2aZ>HyMJH z;YAj$lK8`^cVBq}O3&3T02IHJE0qM4HAi+@Pp%s6w;#fLtQ!P1$~SB*IFOjZ6ZSm| z{N*dC>w#(eml804QW!Cj36IZ3bzl7tkGD=5#vZI=cw!z`IZydiiBKOMkWC>5YMGT7`$vV)cP|m{IWmen=4MvXHnN z51nxGIU&g*H^CY)c~qK#Ws~2wE&?ARu@=$;y>I1ZU@iSB?&w|XCbBhe{qHStCX>UAC>g=UdI+emQHQUXU(l8oj$P?@8D zKM>KOB2S?*sjNZiuYtu-9tR!+wQr+9!%{rGmmoNS9U+M#^y-L3y$_*VLmH+?&N;yI zwhZWp;%1ei6LbUs@=|bgu(cQvK52G&KYcLtpsqQbF$)tC7IL7u{;>45(~7VgnoPQd zP8`(&w+IrPYC%X7^!3DNFbt2<@IKsshFNG_;Cg$8t9(nYy`q~Uk4YhXtC|POBbSe4%3pkN)ox4Q5fnrz`$+lt1xV+~Eq99uvOo^{T0^Rtwr!FF z)!_XDe3-d@bI6Bu0B8v{@P#UKt5lN*CpFxMYO=#d@)Ah?2EEp+(g|M~cIg#=XeGDm zICfq=u;Kye%_yEAnaXdeQI9OUs}R`^sY3Khzx~VG&C-rwk~jAejC9y*V|D^ zvxcgO%$%y=;&@nJ~vQc#HOeS@K)AU9}(51j> z3V%+ixW1RsfGmz3vls*e$8vyw+TiHYWx-yA_fQMyi`zL=j=hd;f{G3G=wv9*|3hbh zAB>40+B|%CcgQ-fuy4xc|CA#kmufSn`F*$QY=gD9Pe19%BgL?6Nh2wB=z*_(tEq?b zb1mfhGoFY1m@3NA(p%8UoebdM0wLZlg_M-_3nXQ3C_S`4rFmxnrF{^8o*00p)7+8R zR51D*;{Yf-rt=2GTb{>VNOg>jEC(=~X(k>baVyd-Pizd@$zeOMSb8>iE?5Yal-U4`AqzM=t=GZIWA|LqIZG~v}*DikR#># zsa)l<{9srhb$O_>r#+&7N75M{&2q9dZdZmsS> z7^)JB@Ng%QLl9+Q!~F8FFw#hC^1M^*8p6N?9tU?99fo&*B2bmwrUU3Zz{Zk%Kyq5ZDAX zP~KPW)LOgq=s(I9>}B{lTpsYf#Ru-?3@a_5_^=AoZ>cai!j3`lTbLjYBxHpAY3aXj zikcFC6TW+p`T2l<4E(Hiys!qWP(Ck=1-|sVu$7dp`nY2U`c-%do1xDm-}jpyqps00f)`J@D%L> z%y0^ozepa1w6#K=w`P)u%8S@pjrPHl24bNa=ym(-t1cve=K6Ew>Uq8Byu(N0G-J9x zzRMrFf|+zXO3!{5@6}WP+kEO;CQOhJ7~njeA7f$R!-Y>PnyK2tfI&^}4M$Vr<@MoK z?Y%PUddPpOLfTNL6V$nor!wEs8(NWA`f0M^2E%=M=LLlZQ=$pq)OkxHjWHy{@i;UF7DvQ=_@I=Ihx^`FcaW}st!mjYK;H#EQ0al#a*nRj_0QT$ z;ls6jLTjNK^NZT?1``}Y>Flm@D{EKo2JejQ{EQ4QgbMO+#Rgh-{ z#Wo^BH`!aNq(&9t)C7!12J-V5GbQo}%dPP zDOI3KC zl)BJMF4z=+6m1}FsRwua)Q*hj=pf4sxDw$1OV9FA$IXVovVsz*iEHDTeW4jHKHWzmDFWCJ%Htm8kSi+P}(M44S9 z{znr?J#~1}wfnvk{^ntKOVPAHuMBM4<7z)d^mCHwI z+&x@z!U;wn0Jn;Y3D<=J7?l~+cc_2#3b(Yp;X@f33GFSmez-%6i}@#V%8eL*?i&SK^xBc$>J^Q@9y7v%)y(Va($Bx49je(ZchtD1xd4}_8!1))5w540uS1zk*~`x>qA z&4{K<|4U*X=PjaX_+)k=YK+utLQbIYn zssxBhfLxm+yq3ipEp@IYke!c(R7yqP$f{}PATU=Qe94pE>tZrcWteAE>rO5(3L~&0 zerNECx^awx%`n&Ex{wIXUqmS*?5H3DD{!7!cKg|M>~tu;GTjq-FzCd8XB!NbNPQC^ zLWlRxTr zcN+JGlza7|DkL1E(ycIm1TIV!xkAn5fPoR+NyTIl;pGg-?LzEjwS~pfX?R9%xB!2v zyjdSOx^&i6>S1AY0xk9W=Fd?@8H{$Qf`FHhHcI-Wyy|*|ewS%o+IDs`nU~YHGx&4n zewWdl$aF9u{m{9Gbr|1N4`O8=QNSm^P&J`q4<{%b{bSh;F8t41e1SPS z5&8(_r5UwtLToCLA5%1Jp>|-Gc&U8yv}Fvc57s5sFt@wdZUF-Hd+0yJ$x=jliQJ!^ zLWGO%Ca#t6qqNfv(We?L;88OlF*HQ+Au=Ie6do!bjiOtBMD1#rFjyKNB zI^Re5_%SrI>kYiD-AA`Z@hrd9H`1j*9AW5H0>)4czu6$0ZkVXv4ty?h6Xvpf!Uuch zC%;0wFa%n2LNQ~teQr$nLAT^k^kz(MJfqlnyz5MovXY z16hMdQRXArJEAMLc?3<}GMI+&YOMXH(eW~PR*_RBjU(}J^a>z66JjMQ|JlQfpMr5S z7MBGPLbgGJZiYogdEo)Cimb2&JF$tVz9@UQ{ZAqy>Ef=dyg)uBqTGS42ymW58i;{(2zqZZH7CQ~JKJ;p&!+baG%% zpnE;=`{{y~Z7pb5@RAG+8d^2Dd{c3rQG($dHm=z6qd_@+ajT=GQsN3LJ#;?grR*8E zje=muk^a1K;mQb=QoFs8_mnRYhW?LI-G#D$FiuTCA4Wx+Dsh*>Q4PL8(<7ZmRhgq* z6ee0owL9_2lRhM{RJegzYg}v<`YRKu3o}a9(C+UiO9cDT`*`s6pm7M;@REHcv$8{i zYvMC*#f6O7dTmD3?J0ApIf^;Y%&X<@%2qi{CKT%Z(z9E{@=MaZb)(R{Kz4+(w9ub_ zulK@I$PG=ukyM$7I+F!Ov%M8^iee{kWa?In-pMOnDyzML6$uhmf5LrYq{C%vu`I!E zNvipH;^|6b&2BTZ@j3zDqaGaiwkNR2^32ygkeuO|4%@%jDzz+YR-my z6LkZx*RbT0tsy49pjcKA^1_eo8Z=UWj-`jmgf>00KaGx8Qk+SkjAvnJ*146;`+lxtFdFS*b3 zrhyLh@vSBpGYzoyl?Gm}Ow5YxfYof|_$YBk76&z{2+|xSHF~8$rACCTU@lg;4#4(FKHT_{Em2{+Qs zNb08AXa}XPU@B3ZpK7x^uqNgjY|3i@a*XV{Z8=V4Uv@fR`5Lj&rJlrOfSkf)*Yj4}g4UH`bJa5S%JC~skNAOo7( zsq5NZxvFNmX@AQ-?Ws+Fjn5oo^;A9+Q_Fe>mnhWC?J6XxOGcJW24*8=uDWTvPOy{; zzyUSw>l{0FdVCDLSIkn*sN=SfQz`D)VPVHg8v;VWf-0s4ZSsl;cuXy6pHXk`uIfiN zE(}~E>anfZB=lS5!fo>IRN&oEL{%klv2w~yOcUNR81d0bihz=Tad!vfD0H9f4!kOV zOD3&wcQ0k`z$~5St<2_YtDr5<8(=EOyshx-3%3ZfTVlc9?75xQC2!|9(_T4wJBL3G$y+LJ%Y-b{#m%KP z3z^c`87`2wl07DWxqcC3qDGAD^6n| zb9rLu=@M$Ao}?0bq)HG~sHIL{Q8w-G`q)x@cuVafRAeMj5}s3xO=TWT zMboRg{Z#Zo5bQxQ1xP@3YS|g1uS~?20H<7VIb`6c?uK1ky_@IMc}i_FbSzd9WgYN-D{VK0Rh2S7@8yR-t-< z>M!aKFrA!#JH?EBDm%Yf(RL_BQP@Lb3MBCxg@9mMFtH)!e|homsufV0PgDomPRcn@ zCO|qCC=At^F(ZeT8_W{H&t#hxwj18c;!IThY7vM0deEWu)*N3}|42=5QrX5R47o8V z%u@X#<*rZ)T!cg3BtSgPm4IIj`74_$*i));7X^tAYucXRGok?G#;DTIgY1D;tyH-F zfusQhQ|cLEe`4vqsQp0p#Vu9nTZrns`~1GA9^B(|Mk@`e{n-GDu%k*Si|0!>GJyCR zwxPXYEDq}8yy{AT52o0+Nolp96zT`c#(75gE9t9ci%#(6P9}$kL^dh*!S+c*)^tp{ zHoZ?omg>NMqbA4;%P67;U^J6?gGZSciVX+ZlfsW`e_x66#CR*_FD6_APo{q=`O`>TTAWB6jT_hTE<;f50e_sQ~TavhIA|XNMM-u4(hAI!@yL$y5;mcQzbIS%u9YD z1?`s7ZF@6=M#rhgn`&psJ0dzm;qNvR_Yz* zBwdFCIDr#+0#y?=b_!)7-tb14T`|d(^)p)Sb;5Ohq^%1UjWWoio=lzx1xOh}(n{t$ zH>((cG|e<8*g3mb2V(1PMJ)vOVW&MEqUYEW*9*Fe)Y z0T^{|^C;zvRZHn1VEiX1x{`~V2BwBrheSI51rT$!{&{u9MOs)}Reukt&PGR;`R zR7MWyosc9CTm6e-V|Fn&)$2~421`Rqn9*4XAbGQ(U7p_@LRvB!OX=>d^|d40e|fQ} z5~~Amc9qIKj~z0MJwJkm7QZunrMh`;iGM;?+X+sU!dO|lM`Rfmq&{G^@Y7+rHVBGw z*KfC~o-SdJ80cvW&n0sZKKHYum$s&6fU>2lY1Wn{bF!?i}!6iKe zDIBPcX^K{!be8oNBA0qJz`Sg1f7GZU&dYJ?%9hhxL(KM8(5OcAHm`kHX8sxV*o}#D1#e~r}wJT}43yli}J6tGEd!rEsGWiWQ zqjs(!w{i>U?#RlnHHNo-UJ8YIGbvu_X^5qVt+-SIYECzE)Uj}E*S>DdfAB_Q3}ncu zL#JNCd=1(gYGo?!g^lzrGHSi_Xy@f$E;SWV%3>q8Yrcz7>C+y>{_;%+g>GQ7GDjQ} z6PLL0j3gBrh9Xx2^;Os4KUInhsEw%~7ojc)IYIoU;;RBP5_gH^0=Or|-|i#O$~bvsB_9^j#j`j7MPQz>U4+TvuuIWryrnCd*7@Gw`o;wz z(+s+|Bg`S`#NCCBET3c>Qs5cw&Ku)nern`s{jO@{T{UolK@LgwHBrJ}8gEnT^p%lr zeUlMamImD`M{a*ef0T<6s9qp^hf=$WI1Pt|uKyuC0@R&}F*9N^8UgRj`LlTf`$K90JHzR4?|OqHUAf1Joungu(VJkgm^$(CU9 z)KV%~5gqIa+q*GX`u5m+xuCg8KWgt0l^*YrDs!V*0%XFE(zBSmM0DjEn6lzSYFz44 zW(lZP&5V!G4J&qcf`}FgBdd^B6*J??rW(0fiJ%}Qbmah3VbaKFlnpc3beLvFpa2kW zjbxX{57>BKN)fQjni&&xQ9k^Be)!eAk>mhi1Ix_}+B(T5Wf zG8pfAl9S1dmMSX9FA@W*C9}SCIzFk_S2bR!PHSwd_EgqJa3Bi@p6sHJk?qXL;Jzz% zpoI-qN)nq-3m}RqxNJpF z-{a(AZ&V)E^E)%`=_{A3P@U1Z-9OVkkru>Sd*ycF92l!MrlN*f%QQHg4jI76WUDOE zpm9>JiD4Zj7AbeR3ytmpB8ts=T6(Kp9v$OW2?m0kU;rE+OrTK06|?rKB=$1hCe;U3 z@k%uxe}TVT5={(-l5pPeM6Cn(iv0#Lce(R?XJ%Z9z!1{w2KGAycV4#t2ij3H^$1?2 zYK>8Md09JXyTPN zDPDq$n63)w4^GW2D{Z>Mi~D#3p+QmIIBOGvf1!r{E}xE_ingq4bw*76ij#4zXevzoqBjf4 zc}Pu3>O1&5+-z?(z6GAOk6JDb(@4VMobunt+I)dh(L>|$%{N{;+1UHdNhf!E0OfxWajgG&1{v+L3T;V zqKBYS00zfIoT`IZ6UsLhJ_7G^fY23Hl0XJo*vC+Dujg@}s(d3pLH2u664V!m&-l*3 z{7yjNC*76dNt!uU!=F*KEXs`}cBf^xe@}!Usw0SaCo)BIA)je*lz?TGah8!VHB$dW zh2#$vTvs}1g@KXkF4By0HMw1B%ymG5k+GqOmCo7@u`gEq+9G#~t8bB?9V17-k+Qy) zWi)#d>Q|D4TD3idMPdPlS=k%kPbEqSb|h2Dg20oe<$m^zl0L}D_4`DBaP#`U^VeYEqgN-{ zon*cv0ezc9d>Wn{sDntYf5i*&!s2(=fyBrtIBBTRq;iHC`MNU0OK*X!Rx5Z=q8;}9 z!MA4oxhB99nBu*5WW_#tQaK*sS>GcHZ0pk#A7AOTE_eoC#MffQc4SQAAj^WP#}17V z9^9;ZH<2wx@D%(Zc9Oxd%J&-5LE!O4x0`|q@&IJ!R=RiCDz4x&e|!1mXk6fCM(L>>D$8ezsLnpgi%CnsB}&0MM)@oE0&5{7$P`T4`H;#t|HkP2d8(h zIiLU!jVY9nxQ#Ua7#8IIkm<~rs%qszD*_m?;pm||Os^OTU^q+D9_4_&LJqipGaZz3zTWYpQePZf1)p0#3~W7mc6qPP>rWT z<9DzppQv1s;?WX+`5Z2A_YCRYQEL_^^b^?%kR-uEuA&Zysf0P6*h6r@&P}E=U)~>( zUjlj)K`LI25m=PqGnkURS<+~r0h6+6GAS~BO1n?kJfN!Y1}eh~+7}kWY@r2f@j%yH zfQN5m7!8$xf4Ef%4)}#UNxdg+lBJL&n^d6@z9XveNex2A%6p!pm39Z4#TxMQdK;{$ zB9x9sPnZkAI}h^~ zv}(7QWrGZ2q-^h&zF6*!sL&Qm=`onRO6>%Nha!<&f0)Y7nnP(O#vxU$sUVuNGcx`> zq^huo??|auLsc8>C^p^)jN!UedX`StHdbI+sT6uI4Bx24KwW&*e}WWP01u$1+c9y4 zM}!{7SqDOJFqn%&qCRTkLgC4nvPlp6CJQ6=S-3E9-4wyS>MAH-OX>?{-WAzi$;n?y zQyy-CfAbvO6C;yf*jng4$6{~!w3ng95Zo9vQek1go3<=feJ}m-6dpc`%AoLCGA0892J*D8tODGz+>g^SkUX?Q&+{!_NqG< zCcQtS!8?o2_kgv=7ESoXJBgyBTg2dlH3w`yf8gM!lm9Zso74(*Y1{c)eD*xx`Pn|Hub{J9me3*EpG zK1Wme%anjIBBDf!t#U^y0d6F?*U0pYs5Rs$gasi3d{C`t)JHj28AHslQBCJoqZsg; ze^W{7;B{1HR`x|g1SXU5c?DUcxD7&cOtnxj;Z=hGBbX}^8AB(lFGp)mdNj_#u)qts z8%$a=1I(6csveoW#A#0kk28)@jwD(`oP&#=G+AXb4i}4HbG`v6e>oO?o}NdOmz81?c}pWh6u|AzOka`_3oi0F@I%aU2x{+cKFj7*h|YOx@rE)nF?PrIX!je|v*^ zG9tu*5^DqS^#Fooajp8Q)Tjzm*v_KJH9c}Lr*#wHfcobbpnV>NAAj~9{CgOGI0O`0xVaQEvcWItjP5RuE zkwBhSTNcu4l<66iQz)})3T0K7e?me2d4)tOq?!jLsHY^=*}^r|^*?kBx;*L<7|y9V z4ihd4fUgVs)fB1>g?rzrLZ@P!a7ae+RutuT@2p zb?lL{@!-erf00~<0~|~6-QUGG(_(!4*Ec`BdG{|Fjl(&8{pQ_2zJL1`)1gu4r(eY9 zzlEJa34w2afxGt2cmMoB{0%?!^FM$2`KPzvzd|AenNu6i=ISnjWLj}RV||fE4&tM1 zBo;uZh~bUKn5r;(UO_wce>SU#ZY>a16_=UJXeo~j5ep3rhv(ia`4G`F21yBDCDMd*Imn@kSjS9(ko4c ztPX`#Js;R@Hy@-Hkmc44(@1k7Ot8Vj3yHc1eM?Xm&m+-8;b-x_ zmTe8#EN#sHsbjt)s~h~K$SFDP*EPNkZl=R>(qjOBPHlYqTNKkIWXd4pPAJ&W$@~^w z>=HY%`W4fB4~mT30Zq^6g*W{`A8?-+liB?aF@<^~yhfsxxI27E?@2XWVF9 zLz5-RVmkj9#x~(}8u6e%naybVn1=iotsCS;SAO1bCOuSitKb#7vW!tm1>km29Sy2S z!$AM)c;y?}U7kz5BB|+oEdC_H(W~5?;j9`QbP74Q0jOr9e?AV88ln|286x=}S2)gj z6F+uGpwvhF3@kmqT>g*9>!<%w+s4A^E7|L$ITAN!r73q{`@P}ZsHhJhZmXO9@Y4!Y zy@!Ms$uVm zfB8o8OVa2de`=v!8+WH_gx$qLzPrU1yu9V3+;}Ttro53`NwdhLrXP zld*vd#B73&Bk&hS!%^Y-qB59TBFXYgRPH~%jh2(nW3zCvVm ztFKC#8I=!)o_YxIgG7#BptiLX`@=De*=Blj3CcK`AjVGEt@JOHjF}a@1gSY{goy%U z#4=oj5QL~&ni3sdJ!<@}&RkJf07ZgEx6MAUk$e3)mN))y(O~|GY}E%dHkKC`#sog* zrLa>Te_4(QF`tSRTpM&dO4|SJQ;G5K7}4RkB;+Oy`gn&D)*Dh#l&XR~^G^DL-{IOv zu=YS%^sO)i;QYY+YWj)+-gochvy5N=S-g2z7>y8i{tw)%7>y6-BW;)Ap_TE(W*3KQ zAy64Yg#D=g{X#LEYD)S3-PaVs%@I#Hcxy23e^GvtGCXqP)0>s?O_gCR0sZ(&;osT9OoY$%YR?x|Ni68+u#d*dQ$vX_;2`)w~GYw)A$9``P6)XfBKcz z33#vgC9~phz`wo`F^m>rF8{s!5NwM0tDl%!qfUu?UuZ3nY8&=&NbA zT>NkKk$(M0-b4_pVEThT^Xnlc#{&kdVD_aof5>!9(G zqvA*5BYzVHaZhhCMhjn1EdJ~Jf4B7MiTw9f>EFM5PoJOW|4zFbd)_fiM6zV~6Q#5n zj?tsF5%w@c_owh{H_Q+BBQ>o=nwqC(*n0jQjRO#FxVR47rnb)W3Z zPYQh&KKXhZ!~Qt($pL**e*#WhH})u&E`0#@_lQV%4dLEZf6-vV!czONe=h1A-Au=2 z(>j7b4yJWR188Gm+Jys@*S1!NXpz@$z!kP0Ix;BR>PGZ!Uzp-A;NznOd$kN!Y4#*6 z?L_Qt@bqPq9dt54TUGwwYm2|*e|v4eVEJWU-48|7cyFhZ&O|JvW#bafe|*Iu~(SbCn1z z`D`VIK%1KcLVvG>{`~v+knPenCUY)dgTpCLg98_Lr=&p|aQg&4<0?!QW{N6YY?dLkkbZ=c%y?dknJ>VOUi1Y;VFazRpYE>6LZEd17P}?l7A`kE!#uZ`YClzlf7mz;8hlK@KFc?RPWn?d zct{e21YLo@%saxv;pxuHGFaV*I2RIa8TuG*l3(iDk0>tkER9czFP-ri)e~_ZW{)&nj-?_~8It z93S&W!f9Jo>i2YajCxEASpVcwe6F)3KxF?#x+`48%?8i7*@Tx8?z78O95e6QpN~%7 ze{nlMTWs*2kZGx1=OZ$Tjm!4VITPj50KwU9yxU>W8=su4-T~#*!`JJf41}#aS%=H} zEva!lwM^n!@4y#MSaY>En4P`@mx;eNL7I7pang&Ia{;bj=H+T+Z9)cv!eG>MU{ENj zF^GV6KY23yWiB+S$K8eF{>gnuyRSS_f5QQWC+aZrKZn3|2HPR?tZ1W&jck}7ViBg~=M2Go0py^Bv4tukc)AR;&hi+c@8p5~X zpm*}_Q*<4KG(WbzDqj|TKyL8B#CdoVibnY2eImnhpWlF@{# zyV?BYWNCVpKnJEGN4?(3>H3sW15L~OR?soLXF+>QE!XW52V z)GN)^APlj59u4Mxi_z3_K^Bllf5bK#j!(|or<+5zj31+GiFTP998FHn+^3PhPd9P) zm1=NYr9EbA@NmEL_t)e@^Wxvp^kA4!hQLS9D23t^I)*2+MnTokON#51aF!aSxeXs)9w!!)5#85p)J3cn_mqSJ8|wt&0rRG9dbbu|$W&0zz# z7r*J>Yir4;s;^QrKCZqNh?kZ6@V`yS!|`3nxgwAK`_W8VlN#-C3^lv(41lka8u$2@ z>#3eFb?AowD(Nt7e>aAgMElECp%eT|st^Yk8$|Ii9OF91qK#hw1y-X(xR{6Y8V#QG z^1mez3^aLmAXtqiH({E^_`g2V*r1E!*x~L$Ck)te&B1oO$bLeu?wqh+$91*K>{19NzJ?cHh>Pyv^#Cuf+zbf&lvZPD;)~Q>)tI8ucL9VsWkfg>hc>0xC(5+ zdNCC!>0`6ZUu=k#s5>YF|F2=&wIIBlv=%JGjIf!x>AQd%mOI1C1>@DGIT&#>Zu3j5 zHTc3!SzHY|e<8eDGze^z^1P0ZxyLM3oEaFx)teKxt3_|ygMZ^_hAx156dcnMwZL)mU%-0+K^pNZVM^xF-{)Ry}t;$ zgJ*Bn{|yz^g6MKo7y*RG<5GmnKB6`|>^D53PGGJ!f8`w_8oqLI`4slVuIDKMnab1P z!pq9xu?KcN|F%mZZ~RqxC{8G@7A@wN#6@-3a#iO9;A&CbQ;T?5d)u=E1 zn(MX&_?8Iqyb644dLwRu5`1e4e_jf{RkviD_z}Cx@8g4FP(e)B6`P9|=$8FXg20 zzmus!CsdczU>0tv(frjifC3cOkT06}eEb5~u8Q(-+W7TY!I!{yRdl#}xQ{bH+6;$G zMgFclcP8S-X}DKKcjIGX*sI&8OUSnfp)JY*`&2?kbF*h47X!IrkxO8|0mRp$i$ zDyl9zEZ4!6Wmyv{zAUDcuZ)g&WMT z*uptsyowt85-tnrf@+HNl90k&1v=rpf8Kuwu#lgV_{)>A=PnX1GGp~~wc)$!3zhHx zTe6xEuE8QVaP(Gmx;W0nN5mvLX+wFn=nvdpivYs)y?-m;gjwQn1A1vC!i1ZD2iKIK z;_A<7te4hbYPSh5EsEtT(P_rl`|p=qC`-P&_k}XAG^bLzQqC~!tDs0~iCbQNe~`vi zof8%;R~^Q-Fj+lLu7=};sX-?!Sgyf%dyS@$t3)SYSgyqMA>4oE+t3LVrZq@hFhYYn zKY92%HRuKi%QZ-G8&!L+BM{~)&n)u#73l;Wf6EnlxXKW3JbwWQnO36Y#lNCF16O}eKr*er;7Xlq zrV^cSWLk-{W^dT&{u4|d6LpMa3)}i8Z+sRVq@^brm?e$i` zk4@{wf6Z>D^D=&H27g`(KUTLu`y}|>oehrp@SPeL+<6htK~Ydyq!t1%e}~CmT6N+x zX_j15MT@CEr?FqT`mh}d_8&&zg}EA6zw=rEVEjHSTfYgAwhSj5!)4hkOMTZIZ7&+daCE`^j9lHhp~X;l@81G7f1^CVZIW!Ib{e zU>hvdERpCsf9_tc2Hk*Q^%~5IA@JoUt++~bLxa^S5qn;~zHR6R1ydT#p7w#i3H+t1 zl_P7wMHbz-igUw&{TP1^k|6yNlFZu<47gEF^hL+KJS4Fr_N%Hpc@KXrx+~znW_9?l z`HeVxCH&VM{=69etGY-#@e_+q{!UGZ=emyPXht8se*^@qsy)dpXKwNOTIdz&&JF+d z*3<+p^zibu=LQ6;(O%}SA+bHK+ltQa;<10X zf`M`r$D7UV1_0BFTLug8#=~eS{#8U- zb?1it%60ceqnHj+b``B~Oa;2Zz-knDND>?-bn!4St_Iy;U{wv`;k_Oh7&A}i2m`CC z5eo$KngYQ|n&i4YO~0$%9;PPkuAW9nShMP@f0~qCn(|6Ez!8^vo_QP55g1lhU)3wT z;5&t>K{te0S%WoU$whXGaJADh(2~n1i{t9e4H;IaH*teperqsOdv4gU8tq|i z`RmzrZfLMy#IMH)Bo-bEeikg=!@a72^e?ceTrGT@0|ZvkoC-REE4X8s+H(Vd6|}bw zf8t$tbG&SHNrdxU6}q9oiYkn=_$yYSBOt7xLdpU9i!6lF`Q>L1m>P5gg*9m~%$~Z# z;YCAP8ziitK}zB$*Wk&FdF}m#KT1?eBBEyQRgKCj#p@i|V%L|S; z?A2EQhs|riVYA-NtX~3$!Owax2M+s11cQ=$MU|;`osZ(KH#-_G3?WfnqDH0N4M)?# z%_CcFZZ+WYf8cqMILCgkw<@y1P81X=O{~!>9IsaJ!*RJ-;G{9r zWL&Vu_S-NcTm%G!S4VU^9=?nU-$ap!1-H4~8xAkHBmJecMssmUUspvk^->Cyj*)^A zudjqAES3U8IDn*@7dxKi-EyJX3p5G;af52XR*R8hU z{#p_^FRi<5`^SlOx-jxFI0owQkDYf+ckjY&7_DVow(^r~698!QDyA5WM=z{Cuz8gJ z^0SM7&9KW;zf%z#`y)u8CUbX^dR&TY9{S1D3 zxnko4;OZJ3 ziYwQLR3GEW{-MFL2D5nI9nUWvq5k6LPpdBpf(yoKj_t?aJd556Ltp(rTxDy;9U{Hu z=$^gg#_02Jy7ytUj2~5F{zt_tdp+DRFHp>_>QG^;uOmhJ!W#S%e=fU|;jxPNDGqNz z3omI0-CB-jy}Fj8{>^MqZaM11ABUEs*=z=@5O>}njf~{l8{ItFcHa#8{FWvEK0ai- zRD?sY%D3HN|JZgkpVt{4RqyTC_V{2kTnu#mmOpI@Duj-9WZ(VYs9k9mYn%le=AlqhIeeME%BwH<-6Kb zYctk$V!y7$4^`z{wOCs{I8jbbls0~C%V}yqZSQV689SI!Eg-P4GxuP14(gG0vED%w z`|~!P%pA^}er4JE&Rr88QRQIb!j*dOFCMxv&w!8ZFN?dO@W0oygL zO4dRV;{px2e_zH6rLrS}74O%hmgPBA2EW~nJcDIw$F!((`|~jCJLLH8AHwYxj>BV| z=-Y8)+i$~L+2P>$+>M5njko7K3xiq3idZZx4P}ma2Z3YHTW;+JRV7MOwk~G1_u{DA zHyqEcC#Qf|9*LDcg!}RyvpuAYwIoV`{)8OUzaGRIe?@l@+Y@F!aDE(wUsB0{R3e9R zas4Z6Qd)+8Rh(AT%Gt~Kqwes*YNLq6V_x!P!f1!<4@M5xL|JIeP1O5N z&yhf>b4+Y@W>H8<6$T{Pas1GbN@+H7NAJ1nfUx;-Vstx^4^b{OfJH%WrkQ$y%@FVQ z;Wm&mE_TZX7ovG5Fh*a^g%#)zj&q+i=vIiie+@G2K%c`Eglx0DjT$JyqAUOu@cE*m zHo=+}RtWYbQwp>82pR4VF6U%6B8Tg{7&d;E#?kH<(p-i_u%hl?cMKXLDmapmr9 zJOXF&X75Hbmn$;~fPjcj^J6N!FxKUBez!=$vd@(Y=j3v%DF-<#Y#&kGO{dnW*%}QJ zf3ThDU2tlclgZp=ft!4ZW|bYC-dQy{gJIu#1X~_*Eraf~XItx~;8lEPm1a*{ed`RZ zzW{G;+ssXkeQ%F`a@jf`6$zfagN~dkXYXR(JDMk{-wa8R22I6{#_e$2S1YCEW=CyM zz2?%xz0}6u}+KSsB0CXTn!_nl%?<^Bv1WJ!! z5LTTa5}yukyP>6R8`$3*^vqG;fpRf$D1O;{({9DD@85m*-*0~5-n4z|aGJZFrS%NH zz;N%gby&GofJvy%$2j8d>8e#af1*IrqEjo)v8Kw>ELEIEcccU;Ll6Z*{y`HE#m<-svv5LLz_J-UUS`Wc$8YQRnVMQ zH(Z{vra%=N>z!2)HB9-9ZRaSw9yio4Q+ORuD$CuTc_0RWTD#Hwvb+M!e`I=e!c4>3 z7MKb4OuwcA&pBH5pUyccC?TMS0>-{g7jV(h;H~JqSJ9lsipI&KpEPyHKEn>C#@*h) zT4~0rCX(RSAW~dx{7C-Qtg6{2ekb-&ER?%HbXE-AZf7jQknhy*9J#OKO$k zA?aAVYgtK{Tbn`Kw`E#}e?F8&*qdk_WZah>a$eTj=36&(a3V!c+qHGY+$87?Z#|PL<1N{;$?vCL1**6-RIFuLBl1KbC{-gbo9Eao|=|P??+CJ8mrCB6C6)Q zSMJmPd~`HCu8$L>fO|jNq+9`qjH;8xi1MQXrvB$(6>e?Xe_c~ke>OwFkIP7-znO(u z<}$Yp+HRDPQFo{uWDd}yW}x*Ei=*$-td!)p^+cF<#%*G>5D#TzhWgyi*D{s4acS+- zwkNG@&FEu`y98#QC7wOtUz7Qq9o>M_}&4qcGXZDQlZ;SHBC3avI5wb4l4UKh8!N)Vk2u6 z_0}$DxbSVfe`we11_i6B0=CCW{DL22v=#MGxK#YYbrdIoGU2Or@+)`y9nZ(t)V!-j zwIjN`=e zgmJWhtx3{Cq3p@_p%{eZ^jy5odPZK4L>syAguEmT7KvF?kZIq~FUW&MQnplM>hD!# z5MiFVp*>vpNWPlV zO#3l$gs*T-c3pYK4xCpHH?ihPW$;&!pe^;8##JuW->iKHdsi6csbkk3%Z(|OySNKz>0xb{0iwh|k5xa(|RS0f>3bJtEm%2leS9d60mzHb8M z9Q9ZXVlUbgLju+mcC7Yg*?%~beH;yj4%AJmE9QJHStJ~z@N}##=4^{wQ*g5Ei-}~0 zf70kZvAzQB!HpzkOTnpOiKUcoxe=zh;S`&^iil_KJ0S_3>P$rmU#2gD#AVc*Y7|=N zIbjx;xuS9^PE}DGJ5J6ZZUOcN_5BL$ZFn;qm0@o~_~QV3gWd&3k;|&RrHa^p7QH|R zhzs^DOtD3}Ka0+Ie6a__zW9|Rjvj>ee^Q&)=wg+_p1TGlt@|!LfQkdazZ-YK|bq!I-{?IxO&4t|g8S&RE|8OVnIzY&Af4h|J zVOJ<@P5G^TckaZdTs)lF{M6y!+CA9a@_tLwF?|EB;#w+u4T@VP{@S8Wc9Pzl&{YsK z2|JTKH862Lo8A~jJVS3Uao@RB@go0oSm=ajW(}(*@aUE2R>(7iG$Ru0vti$qiLRkj zC2t?^DOGsC#vWlVFpYPWxM8YT@NDOX0k!fB5q~`Zr;6&tgywL=6|=VE zOj(_Zd(cF-Zi<7S?esX6_JnAepRm(OT(vRKR$f&$T;e#}Uf4Tv#QhqUo zxwdXKy_Aywc@020*`&}_#N|^SF@{}Y2EwJ%m$svzo42KX3oZ)iROOQb<|c>9&^KZt zc^CygV^3}l*)o2#2~BUx!f`gHQ;{!?{C&EKn?lm&<+UFmqG4M6_9YEP*7E#KUqFw!k`4lMBJQY{Jafw zLpoLMP*%m0Tb1=p*PUD0?u*7)c0T$r22kcpj3n$C7 z-(k3g!tLxjAD2NGe}yWfCAL3au8P6-*ScpLKxMhK`FFflCR{H0q&8v0WbS9 z#pbiXn0Ub(5+E({r^9X!oq)X5G8Zl{i$kANy%n6)N?i*sHSj~{==mUHM1<6LDU=uk6wHc~wK=f{?Q^=?tT#HxV`I$n zpm|_WlT|}@7_N|gPr}`(I;ph1NnT-hnOWK~W6QUMNcCGD%Dv2S3JeOey0K&yjj4X} zz_kq=f4_&}HkyiR=+@>Iq#5HA`@Np^h;&oZFRCXn{C86~dE<#=P^7hupln**FX0XZ z+j)@fOTvG%o5QT9WZc}%`jsoyW&2_Ms9KT)uN;u_YWxJEa#aT&!mf7|(nR_0Xv{PW>WQ8H_DZfpgdEeHdn=EV_9id+jfw*%O4#~3|?;y_* z(97+X?4jrkAK4jq)O@_3w(4VGbMc9EY;pH2guaw&oDl4~KE5;EXNe>D;U zX;5*!&!tHQvtW&!+k<~*MY>T6Y5{k?4LYPKAdmaR4UUuxXv7ldlF$i@q$NxONb}R| zawZ=SS5PN{!IGelaq^Jv{Y7AM6<2b$%}EO;p2Z2YWQa^CXRf(q>eXq+RW9Tqa+&zc z71C+Kl@^kLc|A!=C*r|eN(a}Re<`5TXe%vXetOQUN4LRNTFj>)jbgUb#^gJ7nrUSu zI?mvaOA>7tK7b9uk8lhOvQq=wH`5}fpEbT(t=u+p3>n)2RfOLx1q4OZmSd3h$Rhmn`3f6-Dd6gv5e zWZ@RaCJe=KuyjFmRuO`}=Bjh^L0}>=`-9{3S`7($enR*BeKY4TRLK!n6NmW^4k_?4 z1D!Y;bGowfjT*4)^G8!#UiApguweT->ih@+u@p}0O{B|zs55JeM5%U=Ha_rfG<4|! zi$6DMp}98Bol!R*IFO|jNdV8lPk%^wik^LdX!KBEm(?OZMEw3sW|Qck&tnYsOaZM& zC!HqZV8Y2X4@?m)TUd*0Y(E)>B$KL(hf27=PrApL@x$k_s?GEPF&7$^?x*Jqoz2o5>=sk`Cq8RYn;E07y!Nq0{ z=RJo_vBy3paKo6^h%tAY1Ah$jijvVFXm$;lIc$5>A39VLP{8ytl->E6f6wM$V}Plh z5b}G%Qr}ZIFq3xDzD-5~V8#wb;JqIOj}rdZ+4&EFn%J@R7r_qQ$IeH8o1KyIM2>}@ ziPIy*Nw9dHF@hxfYgs+Xg|OO3U;1n=7YFddz>$on*1Ohx*EF-asDFwJZtq>vGR*o8 zVd36|36jz0cQ>3l;BNMDXcY>cq_Dce0izp560Preo)L$z-o&$v>hLV%o7tp{XBoqv zm%_8ux90HkjP|o}3Ejd8@MMnR=U={m{pNqTd#Z1rXhdks$RRQ|CS4hU3X^-j+O2$~ zpfYiw^J*dQe~uszG=DgqIAo9ujaQtOFze`@g;On;=8H{N%-&x6#3-_q zpcA2`$A8=I!t#;!%ysgK4in0fI7U`bxqP}e=98_5ZqF-nHyK!`OO3Vrb+L`pfXyPo z?H4pHNSR&xcV>EzcqSvHbsKEun>W|@xW;%v*I z70~(a%_f7Jr_LVYprgW1ov)5LW}y9v^{1YEUgA#6K(f zOK>uo`d?>{5?Xu-3-N{h+n?|FI;HD{eDQXRiAH9(Cxh~dI`Kz%fxM17Z}FK%d*H83 zV1j*<^WCKHkaZxX9QJ2q!E)m;r2s?Gr3cX(W(jb+f*5chr#!nUBy|;YPo;hDV;fU{ z6Mw4BlrZnIKLd3a$1BM_@`8ZW^1!Q49hb1=H@OTufN+wTFtGQ-kN3$I9Ykxc*N#0Y zy*)=5$2eFo38NCg0f5d<1Avz2d|Bs+IqdoNZLXEs;DwH$w4tM*SxUy8($W&tE@hM% zB^B!<%?X8^k2KvZIVUIcZegG-YS!B3Zhui)G-*S9wk={{F5Ei6>IEebHK0V;BmkU~ z?lx=C5ILWj$4z813N23UO}UWygjYq2zlyjQ`G|3myOHAO@)pPZSwl7%_!M3OWKb3` zjF!O{uCG>=?`#YN#o#YqtuUp{%LP`kAO!?2lFossEn5wC4=Nj&JX^cQTjDQ6eD5xV4Z9(MOZ(lq$%Imiaw#<}GZ z?)_|&vNs}UT8K*%k>Lzgs(RLihx13;IXg>Xoagh;3u(JtEa_vI){xO&;xxgyBA=qS z;U)waf}R-Tq}eh|_rD)Eq9ULi-hb+GD*~LP&uM!xbAjJ8`u5!}=1oB3BU686lhbo; zWHZrRkc-`fD>l3Kab}p}Zi2yR{M}S!P4gse8WZww-#Ax5j{$F31wA&onN7>+u?hTn zDfAesMDAaMrj0QciP>E5G#07cwS0!F(s?QpO(m1DSd^t_^x7;2BsCbRhktOdn#pjC z?AgMHhFM7#8!__t#Av{TyEAMQVB6*_26?&t_S=vRg=HkI8s;Eb>^%~UQdP`t$H1~% z%tC6|cS^o2Zko&3oI2(8diQIFAzAD?Eg%@bGmn#EOhhsmNV5d8d^W?7s;^kO{<&PW zyrb101LbcA+ZLa;0b}fyJ%6R9d=6*qmGa3C_b?ok+Z4#$gih0uK(uBCfJU|TtvSOu zsY~Vy&%xt^H^`U$NTXk2dkvVV(3%-a7RLu9d&=PvwnRCMCRIe5^u`XT^PK0U0EV#* zvw4H|>Lw~#SnyoLY{O3XFlgftH0DBLl1qpc?ej&jC}PXpriM+3B7bHvx5JA$4{$IU zAT{T%lRl+cuzR(8;10U$^9J3u4LGWYfYAsZnmja~GspY+`@Q(t86jEjgN7FI{^^V? zx=oXX+U-oZ@SB41=fGe!jTLG?yPx9FW}wGO8XNXqhGgb*#I4&zd9Bu*Aws#rWEL#4 zW*I#tR&tvjBt%SA!GE{FnRzB5orVWxezFd1dL>S=$8}SK+8tHNF%I{crYqZ?ovsYT zZ5bX^?;vDb_DDkB9BsFeLGOOy+LfU_7Y&LvfJ9a&OZ+GeHNBgq>sEzj99@~Vkv|P9 zBSp(3-tkCfwi!QS-^oBgA^VX(URBT(H#+9ijf8=kp(`gUeZHES;3u|Ry{{f5E&y~#?5^W zlGJD%uTccd=Zl1XfQB#mL|RYw}Mzh#KAhS6DC zea#WquS~yG(VCaiv8;=}D$fx|FWD`a=snbxh_untK zQQg*T@j&iA(4<)vcK--NRk*d>c*<6B^5`c^_F-gF z;D5Lgm2JW_ixZ@*ER6TF?eb*ASuF^X`peUh&m@#M$6;_nxQJg(vxMEd%U#=9pR=|D zGj|0V#2b`N9B#k1BxDQKTKxhmcXA7yFlSs{Cz>H8T!vJs_g03_vzM^&&;pnPS{Ex| zj_J*8Rt9rS;g18D1G|u1su!pd3FwI7KYxwufD=a9FCBH+I25l8QIDV!o@MQTMUgjj zm^%MWu=N>?2gp?e=x8?`bQhdBuZUqlK+qOgN4@zdj9ohe2N($Egy}fb+ zbHKU0|639t_Fauf;XzW1C1>lY06d#h2S;hQIZ8ChwLNkH)l73U9QGZ;sek)8%dBY8 zi+j)>X^EmSpeg2cXY!~aJcY}?!~=v5Cy?#M9u(Y=_BVrlfG%Mi6Z1LWy+22rOA}zk zqW1%(djFOVB!D=0?q0s@ab_idoVNX7QfzeY4|=9L-@mmVXTh8;(YJ4|%`eRNZ=zKU zU6YtJ0^|h`peSz(lZ(}MEPo4w4M-vwMxaTes!SQkYhIwkK}s06#G7b;$ViI-W#HWs z3qM)}TMLinl>Cevh{52tXJ+h~Ss6F*LYZa$4EY#B0YE-RuCo2sk^~U5%>BLzSMlZYGjO4Z`dV37?LK1Uw|jyTHv)Rdm<_3u;M<*ZW2!;t^J!=U_>bxR5Fblts-HyymI5HOga>VTES(`;=Nxl*>I-`k{gGm30DhD#zoJ@tO!O6f!sm6vu)8H2Ma(}^gm zC?-E;z?QP51b<*5rAy9$LxTv>MjKaDLt^e1@#`@SpCw)=UTzM572fjUUIta%a7F`MG+M_B)qa&88LRvpv8cphxX?hY<1A*oA8ZgtwUlAOpNMWIPAbgf zcw6s-+oj(^`*e&3qdZITZ0lQ7H)&sAl5qzFp8Ob>dw+0SN+-v{3CAd$DZqS~e5 zGDstd}cp(KX`XkopIHrV7n2XBnBQE@sQ2;g&7ZgU?4|A}mO>l=?JSHKLm!in#yRlnry(Eo$~)GM^C}c-PS-BfSY%!e`?#>xC72Ab zrHpiHZ$+3r?@o1`_ivFCR)Yw5i7Rx)xG-XSLS`DJ;Zj&B1}oNX#8C$KY8b^p8F+jL z_J0(uxy{q4kZhkpaWpHjKg9z9d+%K5!L1TPGQEi+;mB*u0MGd8yM*a8@WuzYRVV26 zWV#yP52^>e_e+BHnMWhI6$|Lya(h+>8EAR6`zGe@=Xf(r95@YqScW!oonkNQ3IZ05 zyW5aI{*Y&5+eSpx+gPjN9j^Ln8VF(0NPqc`W}x7ULB^ivq^|rV+XQLGw$Anh#~RhZ zRypkjJ^g^`{n=9oH{ly>bIhjzxwv9FCF`MP%r6)*rm~`FHCcL#L^y(~%PH39AIyq* z%od2m(LB;>8~YiYwDX-54a0EFBLUa85;IcghC7>!L0t}hG=I$cnI{C-5vn_l2YW8SEME&0Q zL}?$%Q0}U`)w+9*BX57?Vp%}YFv}_>XC~L=s!MnhzQ{ar2=?wC+{}V<*;_rO>_??lN#pld>5I4Qvb-wJN0Jem&#LSdI zpWE5n>jMGN7uYq7$+(Q6%w`)GRA%!wu6KzaZiB@04r!1qp^59y;veodar|)e5XFzt c|5N|-{|i^*_rL$?wfFx6@CP}xyv!O50N8fe?*IS* diff --git a/doc/ionconf.tex b/doc/ionconf.tex index 9dd71c8..3f22904 100644 --- a/doc/ionconf.tex +++ b/doc/ionconf.tex @@ -10,7 +10,7 @@ \title{Configuring and extending Ion3 with Lua} \author{Tuomo Valkonen \\ tuomov at iki.fi} -\date{2006-12-23} +\date{2007-02-03} \makeindex diff --git a/doc/ionconf/images.log b/doc/ionconf/images.log index 952589a..3fec32a 100644 --- a/doc/ionconf/images.log +++ b/doc/ionconf/images.log @@ -1,4 +1,4 @@ -This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=latex 2006.11.18) 23 DEC 2006 17:03 +This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=latex 2006.11.18) 3 FEB 2007 17:05 entering extended mode **./images.tex (./images.tex @@ -353,41 +353,41 @@ LaTeX Font Info: External font `cmex10' loaded for size (Font) <8> on input line 235. LaTeX Font Info: External font `cmex10' loaded for size (Font) <6> on input line 235. -l2hSize :tex2html_wrap_inline1028:7.0626pt::0.0pt::7.1201pt. +l2hSize :tex2html_wrap_inline1027:7.0626pt::0.0pt::7.1201pt. [1 ] -l2hSize :tex2html_wrap_inline1032:7.48248pt::0.0pt::48.86426pt. +l2hSize :tex2html_wrap_inline1031:7.48248pt::0.0pt::48.86426pt. [2 ] -l2hSize :tex2html_wrap_inline1981:8.7125pt::8.7125pt::23.6642pt. +l2hSize :tex2html_wrap_inline2020:8.7125pt::8.7125pt::23.6642pt. [3 ] -l2hSize :tex2html_wrap_inline6076:7.5626pt::7.5626pt::14.53923pt. +l2hSize :tex2html_wrap_inline6229:7.5626pt::7.5626pt::14.53923pt. [4 ] -l2hSize :tex2html_wrap_inline6080:7.5626pt::7.5626pt::14.53923pt. +l2hSize :tex2html_wrap_inline6231:7.5626pt::7.5626pt::14.53923pt. [5 ] -l2hSize :tex2html_wrap_inline9064:8.7125pt::8.7125pt::86.9574pt. +l2hSize :tex2html_wrap_inline9215:8.7125pt::8.7125pt::86.9574pt. [6 ] (./images.aux) ) Here is how much of TeX's memory you used: 4428 strings out of 94501 - 62627 string characters out of 1175793 - 121207 words of memory out of 1000000 + 62589 string characters out of 1175793 + 121255 words of memory out of 1000000 7572 multiletter control sequences out of 10000+50000 7874 words of font info for 24 fonts, out of 500000 for 2000 580 hyphenation exceptions out of 8191 diff --git a/doc/ionconf/images.tex b/doc/ionconf/images.tex index d950261..fa6a169 100644 --- a/doc/ionconf/images.tex +++ b/doc/ionconf/images.tex @@ -82,7 +82,7 @@ \title{Configuring and extending Ion3 with Lua} \author{Tuomo Valkonen \\tuomov at iki.fi} -\date{2006-12-23} +\date{2007-02-03} \makeindex @@ -231,7 +231,7 @@ \stepcounter{section} \stepcounter{section} {\newpage\clearpage -\lthtmlinlinemathA{tex2html_wrap_inline1028}% +\lthtmlinlinemathA{tex2html_wrap_inline1027}% $n$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} @@ -242,7 +242,7 @@ $n$% \stepcounter{subsection} \stepcounter{subsection} {\newpage\clearpage -\lthtmlinlinemathA{tex2html_wrap_inline1032}% +\lthtmlinlinemathA{tex2html_wrap_inline1031}% $N=1{\ldots} 5$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} @@ -293,7 +293,7 @@ $N=1{\ldots} 5$% \stepcounter{section} \stepcounter{subsection} {\newpage\clearpage -\lthtmlinlinemathA{tex2html_wrap_inline1981}% +\lthtmlinlinemathA{tex2html_wrap_inline2020}% $(0, 1]$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} @@ -308,12 +308,6 @@ $(0, 1]$% \stepcounter{section} \stepcounter{chapter} \stepcounter{section} -{\newpage\clearpage -\lthtmlinlinemathA{tex2html_wrap_inline6076}% -$-1$% -\lthtmlinlinemathZ -\lthtmlcheckvsize\clearpage} - \stepcounter{subsection} \stepcounter{subsection} \stepcounter{subsection} @@ -322,7 +316,13 @@ $-1$% \stepcounter{subsection} \stepcounter{subsection} {\newpage\clearpage -\lthtmlinlinemathA{tex2html_wrap_inline6080}% +\lthtmlinlinemathA{tex2html_wrap_inline6229}% +$-1$% +\lthtmlinlinemathZ +\lthtmlcheckvsize\clearpage} + +{\newpage\clearpage +\lthtmlinlinemathA{tex2html_wrap_inline6231}% $-2$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} @@ -351,7 +351,7 @@ $-2$% \stepcounter{section} \stepcounter{subsection} {\newpage\clearpage -\lthtmlinlinemathA{tex2html_wrap_inline9064}% +\lthtmlinlinemathA{tex2html_wrap_inline9215}% $\{t,m,b\}\times\{t,c,b\}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} diff --git a/doc/ionconf/index.html b/doc/ionconf/index.html index 7a0a20d..b693be4 100644 --- a/doc/ionconf/index.html +++ b/doc/ionconf/index.html @@ -57,7 +57,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds

Tuomo Valkonen

tuomov at iki.fi

-

2006-12-23

+

2007-02-03

diff --git a/doc/ionconf/internals.pl b/doc/ionconf/internals.pl index d2d476e..28350c3 100644 --- a/doc/ionconf/internals.pl +++ b/doc/ionconf/internals.pl @@ -50,10 +50,6 @@ $key = q/fn:WFrame.is_shaded/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WMPlex.mx_list/; -$ref_files{$key} = "$dir".q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:ioncore.goto_activity/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -70,11 +66,11 @@ $key = q/fn:WEdln.finish/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.bskip_word/; +$key = q/fn:WEdln.mark/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.mark/; +$key = q/fn:WEdln.bskip_word/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -114,10 +110,6 @@ $key = q/fn:WRegion.is_mapped/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WClientWin.is_fullscreen/; -$ref_files{$key} = "$dir".q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:ioncore.goto_prev_screen/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -138,11 +130,11 @@ $key = q/fn:ioncore.get/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WWindow.p_resize/; +$key = q/fn:WComplProxy.set_completions/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WComplProxy.set_completions/; +$key = q/fn:WWindow.p_resize/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -170,10 +162,6 @@ $key = q/fn:ioncore.defmenu/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.set_get_winprop_fn/; -$ref_files{$key} = "$dir".q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fig:borders/; $ref_files{$key} = "$dir".q|node5.html|; $noresave{$key} = "$nosave"; @@ -218,6 +206,10 @@ $key = q/fn:ioncore.warn_traced/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WTiling.managed_i/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WMenu.select_next/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -314,7 +306,7 @@ $key = q/fn:ioncore.write_savefile/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/panews_make_placement_alt/; +$key = q/fn:ioncore.tagged_i/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -330,10 +322,6 @@ $key = q/fn:WWindow.xid/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.activity_list/; -$ref_files{$key} = "$dir".q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:WClientWin.get_ident/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -378,6 +366,10 @@ $key = q/fn:WFrame.p_tabdrag/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.clientwin_i/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WRegion.screen_of/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -486,11 +478,11 @@ $key = q/fn:ioncore.getctxmenu/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/region_inactivated_hook/; +$key = q/fn:WFrame.maximize_horiz/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WFrame.maximize_horiz/; +$key = q/fn:ioncore.region_i/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -498,6 +490,10 @@ $key = q/fn:WWindow.p_move/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WGroup.is_fullscreen/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/sec:objects/; $ref_files{$key} = "$dir".q|node3.html|; $noresave{$key} = "$nosave"; @@ -550,6 +546,10 @@ $key = q/fn:mod_query.query_workspace/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WGroup.managed_i/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WMenu.typeahead_clear/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -562,7 +562,7 @@ $key = q/fn:WSplit.rqgeom/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.tags_first/; +$key = q/fn:WMPlex.managed_i/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -654,10 +654,6 @@ $key = q/fn:ioncore.exec/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.region_list/; -$ref_files{$key} = "$dir".q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:WMPlex.mx_current/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -690,10 +686,6 @@ $key = q/fn:WSplitSplit.br/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WMPlex.managed_list/; -$ref_files{$key} = "$dir".q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:string.shell_safe/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -702,10 +694,6 @@ $key = q/fn:mod_query.query_restart/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WTiling.managed_list/; -$ref_files{$key} = "$dir".q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:mod_tiling.set/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -742,10 +730,18 @@ $key = q/fn:WRegion.rqclose_propagate/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/region_notify_hook/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WEdln.clear_mark/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.focushistory_i/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/tiling_placement_alt/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -758,6 +754,10 @@ $key = q/fn:WRegion.begin_kbresize/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.deflayout/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/sec:classesrolesinstances/; $ref_files{$key} = "$dir".q|node4.html|; $noresave{$key} = "$nosave"; @@ -790,11 +790,11 @@ $key = q/clientwin_mapped_hook/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WClientWin.set_fullscreen/; +$key = q/fn:WEdln.paste/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.paste/; +$key = q/fn:ioncore.detach/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -814,6 +814,10 @@ $key = q/fn:mod_query.query_attachclient/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/clientwin_property_change_hook/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:table.append/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -866,6 +870,10 @@ $key = q/fn:ioncore.get_paths/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.tagged_first/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/sec:walkthrough/; $ref_files{$key} = "$dir".q|node4.html|; $noresave{$key} = "$nosave"; @@ -910,10 +918,6 @@ $key = q/fn:WTiling.split_top/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/region_activity_hook/; -$ref_files{$key} = "$dir".q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:ioncore.progname/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -1010,19 +1014,19 @@ $key = q/fn:ioncore.kpress_wait/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/clientwin_do_manage_alt/; +$key = q/fn:WTiling.transpose_at/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WRegion.rootwin_of/; +$key = q/clientwin_do_manage_alt/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WTiling.transpose_at/; +$key = q/fn:WMPlex.mx_i/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/ioncore_sigchld_hook/; +$key = q/fn:WRegion.rootwin_of/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -1030,6 +1034,10 @@ $key = q/fn:ioncore.match_winprop_name/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/ioncore_sigchld_hook/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WTiling.nextto/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -1086,10 +1094,6 @@ $key = q/fn:ioncore.getwinprop/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.tagged_list/; -$ref_files{$key} = "$dir".q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:ioncore.request_selection/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -1118,10 +1122,6 @@ $key = q/sec:conffiles/; $ref_files{$key} = "$dir".q|node4.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.clientwin_list/; -$ref_files{$key} = "$dir".q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:ioncore.aboutmsg/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -1130,7 +1130,7 @@ $key = q/chap:prelim/; $ref_files{$key} = "$dir".q|node3.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WGroup.managed_list/; +$key = q/fn:ioncore.getlayout/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -1158,10 +1158,6 @@ $key = q/fn:WInput.scrolldown/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/region_activated_hook/; -$ref_files{$key} = "$dir".q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:mod_query.history_table/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -1174,15 +1170,19 @@ $key = q/fn:ioncore.set/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.mpress/; +$key = q/fn:ioncore.activity_i/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/sec:tilingref/; +$key = q/fn:WGroup.set_fullscreen/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:mod_tiling.detach/; +$key = q/fn:ioncore.mpress/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:tilingref/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; diff --git a/doc/ionconf/ionconf.html b/doc/ionconf/ionconf.html index 7a0a20d..b693be4 100644 --- a/doc/ionconf/ionconf.html +++ b/doc/ionconf/ionconf.html @@ -57,7 +57,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds

Tuomo Valkonen

tuomov at iki.fi

-

2006-12-23

+

2007-02-03

diff --git a/doc/ionconf/labels.pl b/doc/ionconf/labels.pl index cbfa297..2d6ca3c 100644 --- a/doc/ionconf/labels.pl +++ b/doc/ionconf/labels.pl @@ -50,10 +50,6 @@ $key = q/fn:WFrame.is_shaded/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WMPlex.mx_list/; -$external_labels{$key} = "$URL/" . q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:ioncore.goto_activity/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -70,11 +66,11 @@ $key = q/fn:WEdln.finish/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.bskip_word/; +$key = q/fn:WEdln.mark/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.mark/; +$key = q/fn:WEdln.bskip_word/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -114,10 +110,6 @@ $key = q/fn:WRegion.is_mapped/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WClientWin.is_fullscreen/; -$external_labels{$key} = "$URL/" . q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:ioncore.goto_prev_screen/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -138,11 +130,11 @@ $key = q/fn:ioncore.get/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WWindow.p_resize/; +$key = q/fn:WComplProxy.set_completions/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WComplProxy.set_completions/; +$key = q/fn:WWindow.p_resize/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -170,10 +162,6 @@ $key = q/fn:ioncore.defmenu/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.set_get_winprop_fn/; -$external_labels{$key} = "$URL/" . q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fig:borders/; $external_labels{$key} = "$URL/" . q|node5.html|; $noresave{$key} = "$nosave"; @@ -218,6 +206,10 @@ $key = q/fn:ioncore.warn_traced/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WTiling.managed_i/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WMenu.select_next/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -314,7 +306,7 @@ $key = q/fn:ioncore.write_savefile/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/panews_make_placement_alt/; +$key = q/fn:ioncore.tagged_i/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -330,10 +322,6 @@ $key = q/fn:WWindow.xid/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.activity_list/; -$external_labels{$key} = "$URL/" . q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:WClientWin.get_ident/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -378,6 +366,10 @@ $key = q/fn:WFrame.p_tabdrag/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.clientwin_i/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WRegion.screen_of/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -486,11 +478,11 @@ $key = q/fn:ioncore.getctxmenu/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/region_inactivated_hook/; +$key = q/fn:WFrame.maximize_horiz/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WFrame.maximize_horiz/; +$key = q/fn:ioncore.region_i/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -498,6 +490,10 @@ $key = q/fn:WWindow.p_move/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WGroup.is_fullscreen/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/sec:objects/; $external_labels{$key} = "$URL/" . q|node3.html|; $noresave{$key} = "$nosave"; @@ -550,6 +546,10 @@ $key = q/fn:mod_query.query_workspace/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WGroup.managed_i/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WMenu.typeahead_clear/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -562,7 +562,7 @@ $key = q/fn:WSplit.rqgeom/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.tags_first/; +$key = q/fn:WMPlex.managed_i/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -654,10 +654,6 @@ $key = q/fn:ioncore.exec/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.region_list/; -$external_labels{$key} = "$URL/" . q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:WMPlex.mx_current/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -690,10 +686,6 @@ $key = q/fn:WSplitSplit.br/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WMPlex.managed_list/; -$external_labels{$key} = "$URL/" . q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:string.shell_safe/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -702,10 +694,6 @@ $key = q/fn:mod_query.query_restart/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WTiling.managed_list/; -$external_labels{$key} = "$URL/" . q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:mod_tiling.set/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -742,10 +730,18 @@ $key = q/fn:WRegion.rqclose_propagate/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/region_notify_hook/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WEdln.clear_mark/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.focushistory_i/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/tiling_placement_alt/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -758,6 +754,10 @@ $key = q/fn:WRegion.begin_kbresize/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.deflayout/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/sec:classesrolesinstances/; $external_labels{$key} = "$URL/" . q|node4.html|; $noresave{$key} = "$nosave"; @@ -790,11 +790,11 @@ $key = q/clientwin_mapped_hook/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WClientWin.set_fullscreen/; +$key = q/fn:WEdln.paste/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.paste/; +$key = q/fn:ioncore.detach/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -814,6 +814,10 @@ $key = q/fn:mod_query.query_attachclient/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/clientwin_property_change_hook/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:table.append/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -866,6 +870,10 @@ $key = q/fn:ioncore.get_paths/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.tagged_first/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/sec:walkthrough/; $external_labels{$key} = "$URL/" . q|node4.html|; $noresave{$key} = "$nosave"; @@ -910,10 +918,6 @@ $key = q/fn:WTiling.split_top/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/region_activity_hook/; -$external_labels{$key} = "$URL/" . q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:ioncore.progname/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -1010,19 +1014,19 @@ $key = q/fn:ioncore.kpress_wait/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/clientwin_do_manage_alt/; +$key = q/fn:WTiling.transpose_at/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WRegion.rootwin_of/; +$key = q/clientwin_do_manage_alt/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WTiling.transpose_at/; +$key = q/fn:WMPlex.mx_i/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/ioncore_sigchld_hook/; +$key = q/fn:WRegion.rootwin_of/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -1030,6 +1034,10 @@ $key = q/fn:ioncore.match_winprop_name/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/ioncore_sigchld_hook/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WTiling.nextto/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -1086,10 +1094,6 @@ $key = q/fn:ioncore.getwinprop/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.tagged_list/; -$external_labels{$key} = "$URL/" . q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:ioncore.request_selection/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -1118,10 +1122,6 @@ $key = q/sec:conffiles/; $external_labels{$key} = "$URL/" . q|node4.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.clientwin_list/; -$external_labels{$key} = "$URL/" . q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:ioncore.aboutmsg/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -1130,7 +1130,7 @@ $key = q/chap:prelim/; $external_labels{$key} = "$URL/" . q|node3.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WGroup.managed_list/; +$key = q/fn:ioncore.getlayout/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -1158,10 +1158,6 @@ $key = q/fn:WInput.scrolldown/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/region_activated_hook/; -$external_labels{$key} = "$URL/" . q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/fn:mod_query.history_table/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -1174,15 +1170,19 @@ $key = q/fn:ioncore.set/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.mpress/; +$key = q/fn:ioncore.activity_i/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/sec:tilingref/; +$key = q/fn:WGroup.set_fullscreen/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.mpress/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:mod_tiling.detach/; +$key = q/sec:tilingref/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -1357,10 +1357,6 @@ $key = q/fn:WFrame.is_shaded/; $external_latex_labels{$key} = q|6.1.2|; $noresave{$key} = "$nosave"; -$key = q/fn:WMPlex.mx_list/; -$external_latex_labels{$key} = q|6.1.7|; -$noresave{$key} = "$nosave"; - $key = q/fn:ioncore.goto_activity/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; @@ -1377,11 +1373,11 @@ $key = q/fn:WEdln.finish/; $external_latex_labels{$key} = q|6.3.2|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.bskip_word/; +$key = q/fn:WEdln.mark/; $external_latex_labels{$key} = q|6.3.2|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.mark/; +$key = q/fn:WEdln.bskip_word/; $external_latex_labels{$key} = q|6.3.2|; $noresave{$key} = "$nosave"; @@ -1421,10 +1417,6 @@ $key = q/fn:WRegion.is_mapped/; $external_latex_labels{$key} = q|6.1.9|; $noresave{$key} = "$nosave"; -$key = q/fn:WClientWin.is_fullscreen/; -$external_latex_labels{$key} = q|6.1.1|; -$noresave{$key} = "$nosave"; - $key = q/fn:ioncore.goto_prev_screen/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; @@ -1445,14 +1437,14 @@ $key = q/fn:ioncore.get/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; -$key = q/fn:WWindow.p_resize/; -$external_latex_labels{$key} = q|6.1.12|; -$noresave{$key} = "$nosave"; - $key = q/fn:WComplProxy.set_completions/; $external_latex_labels{$key} = q|6.3.1|; $noresave{$key} = "$nosave"; +$key = q/fn:WWindow.p_resize/; +$external_latex_labels{$key} = q|6.1.12|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.shutdown/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; @@ -1477,10 +1469,6 @@ $key = q/fn:ioncore.defmenu/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.set_get_winprop_fn/; -$external_latex_labels{$key} = q|6.1|; -$noresave{$key} = "$nosave"; - $key = q/fig:borders/; $external_latex_labels{$key} = q|4.1|; $noresave{$key} = "$nosave"; @@ -1525,6 +1513,10 @@ $key = q/fn:ioncore.warn_traced/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; +$key = q/fn:WTiling.managed_i/; +$external_latex_labels{$key} = q|6.2.5|; +$noresave{$key} = "$nosave"; + $key = q/fn:WMenu.select_next/; $external_latex_labels{$key} = q|6.4.1|; $noresave{$key} = "$nosave"; @@ -1621,8 +1613,8 @@ $key = q/fn:ioncore.write_savefile/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; -$key = q/panews_make_placement_alt/; -$external_latex_labels{$key} = q|6.8|; +$key = q/fn:ioncore.tagged_i/; +$external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/sec:exports/; @@ -1637,10 +1629,6 @@ $key = q/fn:WWindow.xid/; $external_latex_labels{$key} = q|6.1.12|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.activity_list/; -$external_latex_labels{$key} = q|6.1|; -$noresave{$key} = "$nosave"; - $key = q/fn:WClientWin.get_ident/; $external_latex_labels{$key} = q|6.1.1|; $noresave{$key} = "$nosave"; @@ -1685,6 +1673,10 @@ $key = q/fn:WFrame.p_tabdrag/; $external_latex_labels{$key} = q|6.1.2|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.clientwin_i/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + $key = q/fn:WRegion.screen_of/; $external_latex_labels{$key} = q|6.1.9|; $noresave{$key} = "$nosave"; @@ -1793,18 +1785,22 @@ $key = q/fn:ioncore.getctxmenu/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; -$key = q/region_inactivated_hook/; -$external_latex_labels{$key} = q|6.8|; -$noresave{$key} = "$nosave"; - $key = q/fn:WFrame.maximize_horiz/; $external_latex_labels{$key} = q|6.1.2|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.region_i/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + $key = q/fn:WWindow.p_move/; $external_latex_labels{$key} = q|6.1.12|; $noresave{$key} = "$nosave"; +$key = q/fn:WGroup.is_fullscreen/; +$external_latex_labels{$key} = q|6.1.3|; +$noresave{$key} = "$nosave"; + $key = q/sec:objects/; $external_latex_labels{$key} = q|2.2|; $noresave{$key} = "$nosave"; @@ -1857,6 +1853,10 @@ $key = q/fn:mod_query.query_workspace/; $external_latex_labels{$key} = q|6.3|; $noresave{$key} = "$nosave"; +$key = q/fn:WGroup.managed_i/; +$external_latex_labels{$key} = q|6.1.3|; +$noresave{$key} = "$nosave"; + $key = q/fn:WMenu.typeahead_clear/; $external_latex_labels{$key} = q|6.4.1|; $noresave{$key} = "$nosave"; @@ -1869,8 +1869,8 @@ $key = q/fn:WSplit.rqgeom/; $external_latex_labels{$key} = q|6.2.1|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.tags_first/; -$external_latex_labels{$key} = q|6.1|; +$key = q/fn:WMPlex.managed_i/; +$external_latex_labels{$key} = q|6.1.7|; $noresave{$key} = "$nosave"; $key = q/fn:WEdln.set_mark/; @@ -1961,10 +1961,6 @@ $key = q/fn:ioncore.exec/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.region_list/; -$external_latex_labels{$key} = q|6.1|; -$noresave{$key} = "$nosave"; - $key = q/fn:WMPlex.mx_current/; $external_latex_labels{$key} = q|6.1.7|; $noresave{$key} = "$nosave"; @@ -1997,10 +1993,6 @@ $key = q/fn:WSplitSplit.br/; $external_latex_labels{$key} = q|6.2.4|; $noresave{$key} = "$nosave"; -$key = q/fn:WMPlex.managed_list/; -$external_latex_labels{$key} = q|6.1.7|; -$noresave{$key} = "$nosave"; - $key = q/fn:string.shell_safe/; $external_latex_labels{$key} = q|6.1.15|; $noresave{$key} = "$nosave"; @@ -2009,10 +2001,6 @@ $key = q/fn:mod_query.query_restart/; $external_latex_labels{$key} = q|6.3|; $noresave{$key} = "$nosave"; -$key = q/fn:WTiling.managed_list/; -$external_latex_labels{$key} = q|6.2.5|; -$noresave{$key} = "$nosave"; - $key = q/fn:mod_tiling.set/; $external_latex_labels{$key} = q|6.2|; $noresave{$key} = "$nosave"; @@ -2049,10 +2037,18 @@ $key = q/fn:WRegion.rqclose_propagate/; $external_latex_labels{$key} = q|6.1.9|; $noresave{$key} = "$nosave"; +$key = q/region_notify_hook/; +$external_latex_labels{$key} = q|6.8|; +$noresave{$key} = "$nosave"; + $key = q/fn:WEdln.clear_mark/; $external_latex_labels{$key} = q|6.3.2|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.focushistory_i/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + $key = q/tiling_placement_alt/; $external_latex_labels{$key} = q|6.8|; $noresave{$key} = "$nosave"; @@ -2065,6 +2061,10 @@ $key = q/fn:WRegion.begin_kbresize/; $external_latex_labels{$key} = q|6.1.9|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.deflayout/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + $key = q/sec:classesrolesinstances/; $external_latex_labels{$key} = q|3.5.1|; $noresave{$key} = "$nosave"; @@ -2097,14 +2097,14 @@ $key = q/clientwin_mapped_hook/; $external_latex_labels{$key} = q|6.8|; $noresave{$key} = "$nosave"; -$key = q/fn:WClientWin.set_fullscreen/; -$external_latex_labels{$key} = q|6.1.1|; -$noresave{$key} = "$nosave"; - $key = q/fn:WEdln.paste/; $external_latex_labels{$key} = q|6.3.2|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.detach/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + $key = q/fn:WClientWin.xid/; $external_latex_labels{$key} = q|6.1.1|; $noresave{$key} = "$nosave"; @@ -2121,6 +2121,10 @@ $key = q/fn:mod_query.query_attachclient/; $external_latex_labels{$key} = q|6.3|; $noresave{$key} = "$nosave"; +$key = q/clientwin_property_change_hook/; +$external_latex_labels{$key} = q|6.8|; +$noresave{$key} = "$nosave"; + $key = q/fn:table.append/; $external_latex_labels{$key} = q|6.1.16|; $noresave{$key} = "$nosave"; @@ -2173,6 +2177,10 @@ $key = q/fn:ioncore.get_paths/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.tagged_first/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + $key = q/sec:walkthrough/; $external_latex_labels{$key} = q|3.2|; $noresave{$key} = "$nosave"; @@ -2217,10 +2225,6 @@ $key = q/fn:WTiling.split_top/; $external_latex_labels{$key} = q|6.2.5|; $noresave{$key} = "$nosave"; -$key = q/region_activity_hook/; -$external_latex_labels{$key} = q|6.8|; -$noresave{$key} = "$nosave"; - $key = q/fn:ioncore.progname/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; @@ -2317,26 +2321,30 @@ $key = q/fn:ioncore.kpress_wait/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; +$key = q/fn:WTiling.transpose_at/; +$external_latex_labels{$key} = q|6.2.5|; +$noresave{$key} = "$nosave"; + $key = q/clientwin_do_manage_alt/; $external_latex_labels{$key} = q|6.8|; $noresave{$key} = "$nosave"; +$key = q/fn:WMPlex.mx_i/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + $key = q/fn:WRegion.rootwin_of/; $external_latex_labels{$key} = q|6.1.9|; $noresave{$key} = "$nosave"; -$key = q/fn:WTiling.transpose_at/; -$external_latex_labels{$key} = q|6.2.5|; +$key = q/fn:ioncore.match_winprop_name/; +$external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/ioncore_sigchld_hook/; $external_latex_labels{$key} = q|6.8|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.match_winprop_name/; -$external_latex_labels{$key} = q|6.1|; -$noresave{$key} = "$nosave"; - $key = q/fn:WTiling.nextto/; $external_latex_labels{$key} = q|6.2.5|; $noresave{$key} = "$nosave"; @@ -2393,10 +2401,6 @@ $key = q/fn:ioncore.getwinprop/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.tagged_list/; -$external_latex_labels{$key} = q|6.1|; -$noresave{$key} = "$nosave"; - $key = q/fn:ioncore.request_selection/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; @@ -2425,10 +2429,6 @@ $key = q/sec:conffiles/; $external_latex_labels{$key} = q|3.1|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.clientwin_list/; -$external_latex_labels{$key} = q|6.1|; -$noresave{$key} = "$nosave"; - $key = q/fn:ioncore.aboutmsg/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; @@ -2437,8 +2437,8 @@ $key = q/chap:prelim/; $external_latex_labels{$key} = q|2|; $noresave{$key} = "$nosave"; -$key = q/fn:WGroup.managed_list/; -$external_latex_labels{$key} = q|6.1.3|; +$key = q/fn:ioncore.getlayout/; +$external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/fig:parentship/; @@ -2465,10 +2465,6 @@ $key = q/fn:WInput.scrolldown/; $external_latex_labels{$key} = q|6.3.3|; $noresave{$key} = "$nosave"; -$key = q/region_activated_hook/; -$external_latex_labels{$key} = q|6.8|; -$noresave{$key} = "$nosave"; - $key = q/fn:mod_query.history_table/; $external_latex_labels{$key} = q|6.3|; $noresave{$key} = "$nosave"; @@ -2481,15 +2477,19 @@ $key = q/fn:ioncore.set/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.mpress/; +$key = q/fn:ioncore.activity_i/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; -$key = q/sec:tilingref/; -$external_latex_labels{$key} = q|6.2|; +$key = q/fn:WGroup.set_fullscreen/; +$external_latex_labels{$key} = q|6.1.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.mpress/; +$external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; -$key = q/fn:mod_tiling.detach/; +$key = q/sec:tilingref/; $external_latex_labels{$key} = q|6.2|; $noresave{$key} = "$nosave"; diff --git a/doc/ionconf/node10.html b/doc/ionconf/node10.html index f33c3b7..46a988d 100644 --- a/doc/ionconf/node10.html +++ b/doc/ionconf/node10.html @@ -74,27 +74,31 @@ List of functions
gr.select_engine
ioncore.aboutmsg
ioncore.activity_first -
ioncore.activity_list +
ioncore.activity_i
ioncore.bdoc
ioncore.chdir_for
ioncore.clear_tags -
ioncore.clientwin_list +
ioncore.clientwin_i
ioncore.compile_cmd
ioncore.create_ws
ioncore.current
ioncore.defbindings
ioncore.defctxmenu +
ioncore.deflayout
ioncore.defmenu
ioncore.defshortening
ioncore.defwinprop +
ioncore.detach
ioncore.exec
ioncore.exec_on
ioncore.find_manager
ioncore.find_screen_id +
ioncore.focushistory_i
ioncore.get
ioncore.getbindings
ioncore.getctxmenu
ioncore.get_dir_for +
ioncore.getlayout
ioncore.getmenu
ioncore.get_paths
ioncore.get_savefile @@ -125,21 +129,20 @@ List of functions
ioncore.progname
ioncore.read_savefile
ioncore.refresh_stylelist -
ioncore.region_list +
ioncore.region_i
ioncore.request_selection
ioncore.resign
ioncore.restart
ioncore.restart_other
ioncore.set -
ioncore.set_get_winprop_fn
ioncore.set_paths
ioncore.set_selection
ioncore.shutdown
ioncore.snapshot
ioncore.submap
ioncore.submenu -
ioncore.tagged_list -
ioncore.tags_first +
ioncore.tagged_first +
ioncore.tagged_i
ioncore.TR
ioncore.version
ioncore.warn @@ -189,7 +192,7 @@ List of functions
mod_query.warn
mod_sp.set_shown
mod_sp.set_shown_on -
mod_tiling.detach +
mod_statusbar.statusbars
mod_tiling.get
mod_tiling.mkbottom
mod_tiling.set @@ -200,11 +203,9 @@ List of functions
table.join
table.map
WClientWin.get_ident -
WClientWin.is_fullscreen
WClientWin.kill
WClientWin.nudge
WClientWin.quote_next -
WClientWin.set_fullscreen
WClientWin.xid
WComplProxy.set_completions
WDock.attach @@ -256,7 +257,9 @@ List of functions
WGroup.attach
WGroup.attach_new
WGroup.bottom -
WGroup.managed_list +
WGroup.is_fullscreen +
WGroup.managed_i +
WGroup.set_fullscreen
WGroupWS.attach_framed
WInfoWin.set_text
WInput.cancel @@ -280,10 +283,10 @@ List of functions
WMPlex.get_stdisp
WMPlex.inc_index
WMPlex.is_hidden -
WMPlex.managed_list +
WMPlex.managed_i
WMPlex.mx_count
WMPlex.mx_current -
WMPlex.mx_list +
WMPlex.mx_i
WMPlex.mx_nth
WMPlex.set_hidden
WMPlex.set_index @@ -326,9 +329,15 @@ List of functions
WSplitSplit.flip
WSplitSplit.tl
WSplit.transpose +
WStatusBar.get_template_table +
WStatusBar.is_systray_extl +
WStatusBar.set_systray +
WStatusBar.set_template +
WStatusBar.set_template_table +
WStatusBar.update
WTiling.farthest
WTiling.flip_at -
WTiling.managed_list +
WTiling.managed_i
WTiling.nextto
WTiling.node_of
WTiling.set_floating diff --git a/doc/ionconf/node11.html b/doc/ionconf/node11.html index 2c12ab2..76b0481 100644 --- a/doc/ionconf/node11.html +++ b/doc/ionconf/node11.html @@ -58,1029 +58,1035 @@ original version by: Nikos Drakos, CBLU, University of Leeds Index


aboutmsg - : 6.1 + : 6.1
acrobatic - : 3.5 + : 3.5
activity_first - : 6.1 -
activity_list - : 6.1 + : 6.1 +
activity_i + : 6.1
Alt - : 3.3.5 + : 3.3.5
AnyModifier - : 3.3.5 + : 3.3.5
append - : 6.1.16 + : 6.1.16
aspect - : 3.5 + : 3.5
attach - : 6.1.3 - | 6.1.7 - | 6.5.1 + : 6.1.3 + | 6.1.7 + | 6.5.1
attach_framed - : 6.1.5 + : 6.1.5
attach_new - : 6.1.3 - | 6.1.7 + : 6.1.3 + | 6.1.7
attach_tagged - : 6.1.7 + : 6.1.7
back - : 6.3.2 + : 6.3.2
backspace - : 6.3.2 + : 6.3.2
bdoc - : 6.1 + : 6.1
begin_kbresize - : 6.1.9 + : 6.1.9
bkill_word - : 6.3.2 + : 6.3.2
bol - : 6.3.2 + : 6.3.2
bottom - : 6.1.3 + : 6.1.3
br - : 6.2.4 + : 6.2.4
bskip_word - : 6.3.2 + : 6.3.2
Button-n - : 3.3.6 + : 3.3.6
cancel - : 6.1.8 - | 6.3.3 - | 6.4.1 + : 6.1.8 + | 6.3.3 + | 6.4.1
chdir_for - : 6.1 + : 6.1
class
-
winprop : 3.5.1 +
winprop : 3.5.1
clear_mark - : 6.3.2 + : 6.3.2
clear_tags - : 6.1 + : 6.1
clientwin_do_manage_alt - : 6.8 -
clientwin_list - : 6.1 + : 6.8 +
clientwin_i + : 6.1
clientwin_mapped_hook - : 6.8 + : 6.8 +
clientwin_property_change_hook + : 6.8
clientwin_unmapped_hook - : 6.8 + : 6.8
compile_cmd - : 6.1 + : 6.1
complete - : 6.3.2 + : 6.3.2
contents - : 6.3.2 + : 6.3.2
context - : 6.3.2 + : 6.3.2
Control - : 3.3.5 + : 3.3.5
copy - : 6.1.16 - | 6.3.2 + : 6.1.16 + | 6.3.2
create_ws - : 6.1 + : 6.1
current - : 6.1 - | 6.1.9 - | 6.2.2 + : 6.1 + | 6.1.9 + | 6.2.2
current_scr - : 6.1.10 + : 6.1.10
cut - : 6.3.2 + : 6.3.2
de
-
defstyle : 6.7 -
defstyle_rootwin : 6.7 -
reset : 6.7 -
substyle : 6.7 +
defstyle : 6.7 +
defstyle_rootwin : 6.7 +
reset : 6.7 +
substyle : 6.7
dec_index - : 6.1.7 + : 6.1.7
defbindings - : 6.1 + : 6.1
defcmd - : 6.3 + : 6.3
defctxmenu - : 6.1 + : 6.1 +
deflayout + : 6.1
defmenu - : 3.4.1 - | 6.1 + : 3.4.1 + | 6.1
defshortening - : 6.1 + : 6.1
defstyle - : 6.7 + : 6.7
defstyle_rootwin - : 6.7 + : 6.7
defwinprop - : 6.1 + : 6.1
delete - : 6.3.2 + : 6.3.2
detach - : 6.2 + : 6.1
dir - : 6.2.4 + : 6.2.4
drawing engine - : 4.1 + : 4.1
eol - : 6.3.2 + : 6.3.2
ETCDIR - : 3.1 + : 3.1
exec - : 6.1 + : 6.1
exec_on - : 6.1 + : 6.1
export - : 6.1.13 + : 6.1.13
farthest - : 6.2.5 + : 6.2.5
find_manager - : 6.1 + : 6.1
find_screen_id - : 6.1 + : 6.1
finish - : 6.1.8 - | 6.3.2 - | 6.4.1 + : 6.1.8 + | 6.3.2 + | 6.4.1
flip - : 6.2.4 + : 6.2.4
flip_at - : 6.2.5 + : 6.2.5
float - : 3.5 + : 3.5 +
focushistory_i + : 6.1
forward - : 6.3.2 + : 6.3.2
frame_managed_changed_hook - : 6.8 + : 6.8
fullscreen - : 3.5 + : 3.5
geom - : 6.1.9 - | 6.2.1 + : 6.1.9 + | 6.2.1
get - : 6.1 - | 6.2 - | 6.3 - | 6.4 - | 6.5.1 + : 6.1 + | 6.2 + | 6.3 + | 6.4 + | 6.5.1
get_dir_for - : 6.1 + : 6.1
get_ident - : 6.1.1 + : 6.1.1
get_index - : 6.1.7 + : 6.1.7
get_paths - : 6.1 + : 6.1
get_savefile - : 6.1 + : 6.1
get_stdisp - : 6.1.7 + : 6.1.7
getbindings - : 6.1 + : 6.1
getctxmenu - : 6.1 + : 6.1 +
getlayout + : 6.1
getmenu - : 6.1 + : 6.1
getwinprop - : 6.1 + : 6.1
goto - : 6.1.9 + : 6.1.9
goto_activity - : 6.1 + : 6.1
goto_first - : 6.1 + : 6.1
goto_next - : 6.1 + : 6.1
goto_next_screen - : 6.1 + : 6.1
goto_nth_screen - : 6.1 + : 6.1
goto_prev_screen - : 6.1 + : 6.1
goto_previous - : 6.1 + : 6.1
gr
-
read_config : 6.1.14 -
refresh : 6.1.14 -
select_engine : 6.1.14 +
read_config : 6.1.14 +
refresh : 6.1.14 +
select_engine : 6.1.14
grabmenu - : 6.4 + : 6.4
history_clear - : 6.3 + : 6.3
history_get - : 6.3 + : 6.3
history_next - : 6.3.2 + : 6.3.2
history_prev - : 6.3.2 + : 6.3.2
history_push - : 6.3 + : 6.3
history_search - : 6.3 + : 6.3
history_table - : 6.3 + : 6.3
icat - : 6.1.16 + : 6.1.16
id - : 6.1.11 + : 6.1.11
ignore_cfgrq - : 3.5 + : 3.5
ignore_net_active_window - : 3.5 + : 3.5
ignore_resizeinc - : 3.5 + : 3.5
inc_index - : 6.1.7 + : 6.1.7
insstr - : 6.3.2 + : 6.3.2
instance
-
winprop : 3.5.1 +
winprop : 3.5.1
ioncore
-
aboutmsg : 6.1 -
activity_first : 6.1 -
activity_list : 6.1 -
bdoc : 6.1 -
chdir_for : 6.1 -
clear_tags : 6.1 -
clientwin_list : 6.1 -
compile_cmd : 6.1 -
create_ws : 6.1 -
current : 6.1 -
defbindings : 6.1 -
defctxmenu : 6.1 -
defmenu : 6.1 -
defshortening : 6.1 -
defwinprop : 6.1 -
exec : 6.1 -
exec_on : 6.1 -
find_manager : 6.1 -
find_screen_id : 6.1 -
get : 6.1 -
get_dir_for : 6.1 -
get_paths : 6.1 -
get_savefile : 6.1 -
getbindings : 6.1 -
getctxmenu : 6.1 -
getmenu : 6.1 -
getwinprop : 6.1 -
goto_activity : 6.1 -
goto_first : 6.1 -
goto_next : 6.1 -
goto_next_screen : 6.1 -
goto_nth_screen : 6.1 -
goto_prev_screen : 6.1 -
goto_previous : 6.1 -
is_i18n : 6.1 -
kpress : 6.1 -
kpress_wait : 6.1 -
load_module : 6.1 -
lookup_clientwin : 6.1 -
lookup_region : 6.1 -
lookup_script : 6.1 -
match_winprop_name : 6.1 -
mclick : 6.1 -
mdblclick : 6.1 -
mdrag : 6.1 -
menuentry : 6.1 -
mpress : 6.1 -
navi_first : 6.1 -
navi_next : 6.1 -
popen_bgread : 6.1 -
progname : 6.1 -
read_savefile : 6.1 -
refresh_stylelist : 6.1 -
region_list : 6.1 -
request_selection : 6.1 -
resign : 6.1 -
restart : 6.1 -
restart_other : 6.1 -
set : 6.1 -
set_get_winprop_fn : 6.1 -
set_paths : 6.1 -
set_selection : 6.1 -
shutdown : 6.1 -
snapshot : 6.1 -
submap : 6.1 -
submenu : 6.1 -
tagged_list : 6.1 -
tags_first : 6.1 -
TR : 6.1 -
version : 6.1 -
warn : 6.1 -
warn_traced : 6.1 -
write_savefile : 6.1 -
x_change_property : 6.1 -
x_delete_property : 6.1 -
x_get_atom_name : 6.1 -
x_get_text_property : 6.1 -
x_get_window_property : 6.1 -
x_intern_atom : 6.1 -
x_set_text_property : 6.1 +
aboutmsg : 6.1 +
activity_first : 6.1 +
activity_i : 6.1 +
bdoc : 6.1 +
chdir_for : 6.1 +
clear_tags : 6.1 +
clientwin_i : 6.1 +
compile_cmd : 6.1 +
create_ws : 6.1 +
current : 6.1 +
defbindings : 6.1 +
defctxmenu : 6.1 +
deflayout : 6.1 +
defmenu : 6.1 +
defshortening : 6.1 +
defwinprop : 6.1 +
detach : 6.1 +
exec : 6.1 +
exec_on : 6.1 +
find_manager : 6.1 +
find_screen_id : 6.1 +
focushistory_i : 6.1 +
get : 6.1 +
get_dir_for : 6.1 +
get_paths : 6.1 +
get_savefile : 6.1 +
getbindings : 6.1 +
getctxmenu : 6.1 +
getlayout : 6.1 +
getmenu : 6.1 +
getwinprop : 6.1 +
goto_activity : 6.1 +
goto_first : 6.1 +
goto_next : 6.1 +
goto_next_screen : 6.1 +
goto_nth_screen : 6.1 +
goto_prev_screen : 6.1 +
goto_previous : 6.1 +
is_i18n : 6.1 +
kpress : 6.1 +
kpress_wait : 6.1 +
load_module : 6.1 +
lookup_clientwin : 6.1 +
lookup_region : 6.1 +
lookup_script : 6.1 +
match_winprop_name : 6.1 +
mclick : 6.1 +
mdblclick : 6.1 +
mdrag : 6.1 +
menuentry : 6.1 +
mpress : 6.1 +
navi_first : 6.1 +
navi_next : 6.1 +
popen_bgread : 6.1 +
progname : 6.1 +
read_savefile : 6.1 +
refresh_stylelist : 6.1 +
region_i : 6.1 +
request_selection : 6.1 +
resign : 6.1 +
restart : 6.1 +
restart_other : 6.1 +
set : 6.1 +
set_paths : 6.1 +
set_selection : 6.1 +
shutdown : 6.1 +
snapshot : 6.1 +
submap : 6.1 +
submenu : 6.1 +
tagged_first : 6.1 +
tagged_i : 6.1 +
TR : 6.1 +
version : 6.1 +
warn : 6.1 +
warn_traced : 6.1 +
write_savefile : 6.1 +
x_change_property : 6.1 +
x_delete_property : 6.1 +
x_get_atom_name : 6.1 +
x_get_text_property : 6.1 +
x_get_window_property : 6.1 +
x_intern_atom : 6.1 +
x_set_text_property : 6.1
ioncore_deinit_hook - : 6.8 + : 6.8
ioncore_post_layout_setup_hook - : 6.8 + : 6.8
ioncore_sigchld_hook - : 6.8 + : 6.8
ioncore_snapshot_hook - : 6.8 + : 6.8
is_active - : 6.1.9 + : 6.1.9
is_activity - : 6.1.9 + : 6.1.9
is_fullscreen - : 6.1.1 + : 6.1.3
is_hidden - : 6.1.7 + : 6.1.7
is_histcompl - : 6.3.2 + : 6.3.2
is_i18n - : 6.1 + : 6.1
is_mapped - : 6.1.9 + : 6.1.9
is_shaded - : 6.1.2 + : 6.1.2
is_tagged - : 6.1.9 + : 6.1.9
join - : 6.1.16 + : 6.1.16
jumpto - : 3.5 + : 3.5
keysymdef.h - : 3.3.5 + : 3.3.5
kill - : 6.1.1 + : 6.1.1
kill_line - : 6.3.2 + : 6.3.2
kill_to_bol - : 6.3.2 + : 6.3.2
kill_to_eol - : 6.3.2 + : 6.3.2
kill_word - : 6.3.2 + : 6.3.2
kpress - : 6.1 + : 6.1
kpress_wait - : 6.1 + : 6.1
load_module - : 6.1 + : 6.1
Lock - : 3.3.5 + : 3.3.5
lookup_clientwin - : 6.1 + : 6.1
lookup_region - : 6.1 + : 6.1
lookup_script - : 6.1 -
managed_list - : 6.1.3 - | 6.1.7 - | 6.2.5 + : 6.1 +
managed_i + : 6.1.3 + | 6.1.7 + | 6.2.5
manager - : 2.2.2.1 - | 6.1.9 + : 2.2.2.1 + | 6.1.9
map - : 6.1.16 + : 6.1.16
mark - : 6.3.2 + : 6.3.2
match_winprop_name - : 6.1 + : 6.1
max_size - : 3.5 + : 3.5
maximize_horiz - : 6.1.2 + : 6.1.2
maximize_vert - : 6.1.2 + : 6.1.2
mclick - : 6.1 + : 6.1
mdblclick - : 6.1 + : 6.1
mdrag - : 6.1 + : 6.1
menu - : 6.4 + : 6.4
menuentry - : 3.4.1 - | 6.1 + : 3.4.1 + | 6.1
menus - : 3.4.1 + : 3.4.1
message - : 6.3 + : 6.3
min_size - : 3.5 + : 3.5
mkbottom - : 6.2 + : 6.2
mod_dock
-
set_floating_shown_on : 6.5 +
set_floating_shown_on : 6.5
mod_menu
-
get : 6.4 -
grabmenu : 6.4 -
menu : 6.4 -
pmenu : 6.4 -
set : 6.4 +
get : 6.4 +
grabmenu : 6.4 +
menu : 6.4 +
pmenu : 6.4 +
set : 6.4
mod_query
-
defcmd : 6.3 -
get : 6.3 -
history_clear : 6.3 -
history_get : 6.3 -
history_push : 6.3 -
history_search : 6.3 -
history_table : 6.3 -
message : 6.3 -
popen_completions : 6.3 -
query : 6.3 -
query_attachclient : 6.3 -
query_editfile : 6.3 -
query_exec : 6.3 -
query_gotoclient : 6.3 -
query_lua : 6.3 -
query_man : 6.3 -
query_menu : 6.3 -
query_renameframe : 6.3 -
query_renameworkspace : 6.3 -
query_restart : 6.3 -
query_runfile : 6.3 -
query_shutdown : 6.3 -
query_ssh : 6.3 -
query_workspace : 6.3 -
query_yesno : 6.3 -
set : 6.3 -
show_about_ion : 6.3 -
show_tree : 6.3 -
warn : 6.3 +
defcmd : 6.3 +
get : 6.3 +
history_clear : 6.3 +
history_get : 6.3 +
history_push : 6.3 +
history_search : 6.3 +
history_table : 6.3 +
message : 6.3 +
popen_completions : 6.3 +
query : 6.3 +
query_attachclient : 6.3 +
query_editfile : 6.3 +
query_exec : 6.3 +
query_gotoclient : 6.3 +
query_lua : 6.3 +
query_man : 6.3 +
query_menu : 6.3 +
query_renameframe : 6.3 +
query_renameworkspace : 6.3 +
query_restart : 6.3 +
query_runfile : 6.3 +
query_shutdown : 6.3 +
query_ssh : 6.3 +
query_workspace : 6.3 +
query_yesno : 6.3 +
set : 6.3 +
show_about_ion : 6.3 +
show_tree : 6.3 +
warn : 6.3
mod_sp
-
set_shown : 6.6 -
set_shown_on : 6.6 +
set_shown : 6.6 +
set_shown_on : 6.6
mod_tiling
-
detach : 6.2 -
get : 6.2 -
mkbottom : 6.2 -
set : 6.2 +
get : 6.2 +
mkbottom : 6.2 +
set : 6.2
mode - : 6.1.2 + : 6.1.2
ModN - : 3.3.5 + : 3.3.5
move - : 6.1.8 + : 6.1.8
mpress - : 6.1 + : 6.1
mx_count - : 6.1.7 + : 6.1.7
mx_current - : 6.1.7 -
mx_list - : 6.1.7 + : 6.1.7 +
mx_i + : 6.1.7
mx_nth - : 6.1.7 + : 6.1.7
name - : 6.1.9 + : 6.1.9
navi_first - : 6.1 + : 6.1
navi_next - : 6.1 + : 6.1 +
new_group + : 3.5
next_completion - : 6.3.2 + : 6.3.2
nextto - : 6.2.5 + : 6.2.5
node_of - : 6.2.5 + : 6.2.5
nudge - : 6.1.1 + : 6.1.1
NumLock - : 3.3.5 + : 3.3.5
Obj - : 2.2.1 + : 2.2.1
oneshot - : 3.5 + : 3.5
p_move - : 6.1.12 + : 6.1.12
p_resize - : 6.1.12 + : 6.1.12
p_switch_tab - : 6.1.2 + : 6.1.2
p_tabdrag - : 6.1.2 -
panews_make_placement_alt - : 6.8 + : 6.1.2
parent - : 2.2.2.1 - | 6.1.9 - | 6.2.1 + : 2.2.2.1 + | 6.1.9 + | 6.2.1
paste - : 6.3.2 + : 6.3.2
pmenu - : 6.4 + : 6.4
point - : 6.3.2 + : 6.3.2
popen_bgread - : 6.1 + : 6.1
popen_completions - : 6.3 + : 6.3
PREFIX - : 3.1 + : 3.1
prev_completion - : 6.3.2 + : 6.3.2
progname - : 6.1 + : 6.1
query - : 6.3 + : 6.3
query_attachclient - : 6.3 + : 6.3
query_editfile - : 6.3 + : 6.3
query_exec - : 6.3 + : 6.3
query_gotoclient - : 6.3 + : 6.3
query_lua - : 6.3 + : 6.3
query_man - : 6.3 + : 6.3
query_menu - : 6.3 + : 6.3
query_renameframe - : 6.3 + : 6.3
query_renameworkspace - : 6.3 + : 6.3
query_restart - : 6.3 + : 6.3
query_runfile - : 6.3 + : 6.3
query_shutdown - : 6.3 + : 6.3
query_ssh - : 6.3 + : 6.3
query_workspace - : 6.3 + : 6.3
query_yesno - : 6.3 + : 6.3
quote_next - : 6.1.1 + : 6.1.1
read_config - : 6.1.14 + : 6.1.14
read_savefile - : 6.1 + : 6.1
refresh - : 6.1.14 + : 6.1.14
refresh_stylelist - : 6.1 + : 6.1
reg - : 6.2.3 -
region_activated_hook - : 6.8 -
region_activity_hook - : 6.8 + : 6.2.3
region_do_warp_alt - : 6.8 -
region_inactivated_hook - : 6.8 -
region_list - : 6.1 + : 6.8 +
region_i + : 6.1 +
region_notify_hook + : 6.8
request_selection - : 6.1 + : 6.1
reset - : 6.7 + : 6.7
resign - : 6.1 + : 6.1
resize - : 6.1.8 - | 6.5.1 + : 6.1.8 + | 6.5.1
restart - : 6.1 + : 6.1
restart_other - : 6.1 + : 6.1
role
-
winprop : 3.5.1 +
winprop : 3.5.1
root window : 2.2.1
rootwin_of - : 6.1.9 + : 6.1.9
rqclose - : 6.1.9 + : 6.1.9
rqclose_propagate - : 6.1.9 + : 6.1.9
rqgeom - : 6.1.9 - | 6.2.1 + : 6.1.9 + | 6.2.1
rqorder - : 6.1.9 + : 6.1.9
screen
physical : 2.2.1
X : 2.2.1
screen_managed_changed_hook - : 6.8 + : 6.8
screen_of - : 6.1.9 + : 6.1.9
scrolldown - : 6.3.3 + : 6.3.3
ScrollLock - : 3.3.5 + : 3.3.5
scrollup - : 6.3.3 + : 6.3.3
select_engine - : 6.1.14 + : 6.1.14
select_next - : 6.4.1 + : 6.4.1
select_nth - : 6.4.1 + : 6.4.1
select_prev - : 6.4.1 + : 6.4.1
set - : 6.1 - | 6.2 - | 6.3 - | 6.4 - | 6.5.1 + : 6.1 + | 6.2 + | 6.3 + | 6.4 + | 6.5.1
set_activity - : 6.1.9 + : 6.1.9
set_completions - : 6.3.1 + : 6.3.1
set_context - : 6.3.2 + : 6.3.2
set_floating - : 6.2.5 + : 6.2.5
set_floating_at - : 6.2.5 + : 6.2.5
set_floating_shown_on - : 6.5 + : 6.5
set_fullscreen - : 6.1.1 -
set_get_winprop_fn - : 6.1 + : 6.1.3
set_hidden - : 6.1.7 + : 6.1.7
set_index - : 6.1.7 + : 6.1.7
set_managed_offset - : 6.1.11 + : 6.1.11
set_mark - : 6.3.2 + : 6.3.2
set_mode - : 6.1.2 + : 6.1.2
set_name - : 6.1.9 + : 6.1.9
set_name_exact - : 6.1.9 + : 6.1.9
set_numbers - : 6.1.2 + : 6.1.2
set_paths - : 6.1 + : 6.1
set_selection - : 6.1 + : 6.1
set_shaded - : 6.1.2 + : 6.1.2
set_shown - : 6.6 + : 6.6
set_shown_on - : 6.6 + : 6.6
set_stdisp - : 6.1.7 + : 6.1.7
set_tagged - : 6.1.9 + : 6.1.9
set_text - : 6.1.6 + : 6.1.6
shell_safe - : 6.1.15 + : 6.1.15
Shift - : 3.3.5 + : 3.3.5
show_about_ion - : 6.3 + : 6.3
show_tree - : 6.3 + : 6.3
shutdown - : 6.1 + : 6.1
size_hints - : 6.1.9 + : 6.1.9
skip_word - : 6.3.2 + : 6.3.2
snapshot - : 6.1 + : 6.1
split - : 6.2.5 + : 6.2.5
split_at - : 6.2.5 + : 6.2.5
split_top - : 6.2.5 + : 6.2.5
split_tree - : 6.2.5 + : 6.2.5 +
statusbar + : 3.5
string
-
shell_safe : 6.1.15 +
shell_safe : 6.1.15
style - : 4.1 + : 4.1
submap - : 6.1 + : 6.1
submenu - : 3.4.1 - | 6.1 + : 3.4.1 + | 6.1
substyle - : 4.1 - | 6.7 + : 4.1 + | 6.7
switch_next - : 6.1.7 + : 6.1.7
switch_nth - : 6.1.7 + : 6.1.7
switch_prev - : 6.1.7 + : 6.1.7
switchto - : 3.5 + : 3.5
system.mk - : 3.1 + : 3.1
table
-
append : 6.1.16 -
copy : 6.1.16 -
icat : 6.1.16 -
join : 6.1.16 -
map : 6.1.16 +
append : 6.1.16 +
copy : 6.1.16 +
icat : 6.1.16 +
join : 6.1.16 +
map : 6.1.16
-
tagged_list - : 6.1 -
tags_first - : 6.1 +
tagged_first + : 6.1 +
tagged_i + : 6.1
target - : 3.5 + : 3.5
tiling_placement_alt - : 6.8 + : 6.8
tl - : 6.2.4 + : 6.2.4
TR - : 6.1 + : 6.1
transient - : 3.5.2 + : 3.5.2
transient_mode - : 3.5 + : 3.5
transients_at_top - : 3.5 + : 3.5
transparent - : 3.5 + : 3.5
transpose - : 6.2.1 + : 6.2.1
transpose_at - : 6.2.5 + : 6.2.5
transpose_chars - : 6.3.2 + : 6.3.2
transpose_words - : 6.3.2 + : 6.3.2
typeahead_clear - : 6.4.1 + : 6.4.1
unsplit_at - : 6.2.5 + : 6.2.5
version - : 6.1 + : 6.1
warn - : 6.1 - | 6.3 + : 6.1 + | 6.3
warn_traced - : 6.1 + : 6.1
WClientWin - : 2.2.1 + : 2.2.1
-
get_ident : 6.1.1 -
is_fullscreen : 6.1.1 -
kill : 6.1.1 -
nudge : 6.1.1 -
quote_next : 6.1.1 -
set_fullscreen : 6.1.1 -
xid : 6.1.1 +
get_ident : 6.1.1 +
kill : 6.1.1 +
nudge : 6.1.1 +
quote_next : 6.1.1 +
xid : 6.1.1
WComplProxy
-
set_completions : 6.3.1 +
set_completions : 6.3.1
WDock
-
attach : 6.5.1 -
get : 6.5.1 -
resize : 6.5.1 -
set : 6.5.1 +
attach : 6.5.1 +
get : 6.5.1 +
resize : 6.5.1 +
set : 6.5.1
WEdln - : 2.2.1 + : 2.2.1
-
back : 6.3.2 -
backspace : 6.3.2 -
bkill_word : 6.3.2 -
bol : 6.3.2 -
bskip_word : 6.3.2 -
clear_mark : 6.3.2 -
complete : 6.3.2 -
contents : 6.3.2 -
context : 6.3.2 -
copy : 6.3.2 -
cut : 6.3.2 -
delete : 6.3.2 -
eol : 6.3.2 -
finish : 6.3.2 -
forward : 6.3.2 -
history_next : 6.3.2 -
history_prev : 6.3.2 -
insstr : 6.3.2 -
is_histcompl : 6.3.2 -
kill_line : 6.3.2 -
kill_to_bol : 6.3.2 -
kill_to_eol : 6.3.2 -
kill_word : 6.3.2 -
mark : 6.3.2 -
next_completion : 6.3.2 -
paste : 6.3.2 -
point : 6.3.2 -
prev_completion : 6.3.2 -
set_context : 6.3.2 -
set_mark : 6.3.2 -
skip_word : 6.3.2 -
transpose_chars : 6.3.2 -
transpose_words : 6.3.2 +
back : 6.3.2 +
backspace : 6.3.2 +
bkill_word : 6.3.2 +
bol : 6.3.2 +
bskip_word : 6.3.2 +
clear_mark : 6.3.2 +
complete : 6.3.2 +
contents : 6.3.2 +
context : 6.3.2 +
copy : 6.3.2 +
cut : 6.3.2 +
delete : 6.3.2 +
eol : 6.3.2 +
finish : 6.3.2 +
forward : 6.3.2 +
history_next : 6.3.2 +
history_prev : 6.3.2 +
insstr : 6.3.2 +
is_histcompl : 6.3.2 +
kill_line : 6.3.2 +
kill_to_bol : 6.3.2 +
kill_to_eol : 6.3.2 +
kill_word : 6.3.2 +
mark : 6.3.2 +
next_completion : 6.3.2 +
paste : 6.3.2 +
point : 6.3.2 +
prev_completion : 6.3.2 +
set_context : 6.3.2 +
set_mark : 6.3.2 +
skip_word : 6.3.2 +
transpose_chars : 6.3.2 +
transpose_words : 6.3.2
WFrame - : 2.2.1 + : 2.2.1
-
is_shaded : 6.1.2 -
maximize_horiz : 6.1.2 -
maximize_vert : 6.1.2 -
mode : 6.1.2 -
p_switch_tab : 6.1.2 -
p_tabdrag : 6.1.2 -
set_mode : 6.1.2 -
set_numbers : 6.1.2 -
set_shaded : 6.1.2 +
is_shaded : 6.1.2 +
maximize_horiz : 6.1.2 +
maximize_vert : 6.1.2 +
mode : 6.1.2 +
p_switch_tab : 6.1.2 +
p_tabdrag : 6.1.2 +
set_mode : 6.1.2 +
set_numbers : 6.1.2 +
set_shaded : 6.1.2
WGroup - : 2.2.1 + : 2.2.1
-
attach : 6.1.3 -
attach_new : 6.1.3 -
bottom : 6.1.3 -
managed_list : 6.1.3 +
attach : 6.1.3 +
attach_new : 6.1.3 +
bottom : 6.1.3 +
is_fullscreen : 6.1.3 +
managed_i : 6.1.3 +
set_fullscreen : 6.1.3
WGroupCW - : 2.2.1 -
WGroupWS : 2.2.1 +
WGroupWS + : 2.2.1
-
attach_framed : 6.1.5 +
attach_framed : 6.1.5
WInfoWin
-
set_text : 6.1.6 +
set_text : 6.1.6
Winprops - : 3.5 + : 3.5
WInput - : 2.2.1 + : 2.2.1
-
cancel : 6.3.3 -
scrolldown : 6.3.3 -
scrollup : 6.3.3 +
cancel : 6.3.3 +
scrolldown : 6.3.3 +
scrollup : 6.3.3
WMenu
-
cancel : 6.4.1 -
finish : 6.4.1 -
select_next : 6.4.1 -
select_nth : 6.4.1 -
select_prev : 6.4.1 -
typeahead_clear : 6.4.1 +
cancel : 6.4.1 +
finish : 6.4.1 +
select_next : 6.4.1 +
select_nth : 6.4.1 +
select_prev : 6.4.1 +
typeahead_clear : 6.4.1
WMessage - : 2.2.1 + : 2.2.1
WMoveresMode
-
cancel : 6.1.8 -
finish : 6.1.8 -
move : 6.1.8 -
resize : 6.1.8 +
cancel : 6.1.8 +
finish : 6.1.8 +
move : 6.1.8 +
resize : 6.1.8
WMPlex
-
attach : 6.1.7 -
attach_new : 6.1.7 -
attach_tagged : 6.1.7 -
dec_index : 6.1.7 -
get_index : 6.1.7 -
get_stdisp : 6.1.7 -
inc_index : 6.1.7 -
is_hidden : 6.1.7 -
managed_list : 6.1.7 -
mx_count : 6.1.7 -
mx_current : 6.1.7 -
mx_list : 6.1.7 -
mx_nth : 6.1.7 -
set_hidden : 6.1.7 -
set_index : 6.1.7 -
set_stdisp : 6.1.7 -
switch_next : 6.1.7 -
switch_nth : 6.1.7 -
switch_prev : 6.1.7 +
attach : 6.1.7 +
attach_new : 6.1.7 +
attach_tagged : 6.1.7 +
dec_index : 6.1.7 +
get_index : 6.1.7 +
get_stdisp : 6.1.7 +
inc_index : 6.1.7 +
is_hidden : 6.1.7 +
managed_i : 6.1.7 +
mx_count : 6.1.7 +
mx_current : 6.1.7 +
mx_i : 6.1.7 +
mx_nth : 6.1.7 +
set_hidden : 6.1.7 +
set_index : 6.1.7 +
set_stdisp : 6.1.7 +
switch_next : 6.1.7 +
switch_nth : 6.1.7 +
switch_prev : 6.1.7
WRegion - : 2.2.1 + : 2.2.1
-
begin_kbresize : 6.1.9 -
current : 6.1.9 -
geom : 6.1.9 -
goto : 6.1.9 -
is_active : 6.1.9 -
is_activity : 6.1.9 -
is_mapped : 6.1.9 -
is_tagged : 6.1.9 -
manager : 6.1.9 -
name : 6.1.9 -
parent : 6.1.9 -
rootwin_of : 6.1.9 -
rqclose : 6.1.9 -
rqclose_propagate : 6.1.9 -
rqgeom : 6.1.9 -
rqorder : 6.1.9 -
screen_of : 6.1.9 -
set_activity : 6.1.9 -
set_name : 6.1.9 -
set_name_exact : 6.1.9 -
set_tagged : 6.1.9 -
size_hints : 6.1.9 +
begin_kbresize : 6.1.9 +
current : 6.1.9 +
geom : 6.1.9 +
goto : 6.1.9 +
is_active : 6.1.9 +
is_activity : 6.1.9 +
is_mapped : 6.1.9 +
is_tagged : 6.1.9 +
manager : 6.1.9 +
name : 6.1.9 +
parent : 6.1.9 +
rootwin_of : 6.1.9 +
rqclose : 6.1.9 +
rqclose_propagate : 6.1.9 +
rqgeom : 6.1.9 +
rqorder : 6.1.9 +
screen_of : 6.1.9 +
set_activity : 6.1.9 +
set_name : 6.1.9 +
set_name_exact : 6.1.9 +
set_tagged : 6.1.9 +
size_hints : 6.1.9
write_savefile - : 6.1 + : 6.1
WRootWin - : 2.2.1 + : 2.2.1
-
current_scr : 6.1.10 +
current_scr : 6.1.10
WScreen - : 2.2.1 + : 2.2.1
-
id : 6.1.11 -
set_managed_offset : 6.1.11 +
id : 6.1.11 +
set_managed_offset : 6.1.11
WSplit - : 2.2.1 + : 2.2.1
-
geom : 6.2.1 -
parent : 6.2.1 -
rqgeom : 6.2.1 -
transpose : 6.2.1 +
geom : 6.2.1 +
parent : 6.2.1 +
rqgeom : 6.2.1 +
transpose : 6.2.1
WSplitInner
-
current : 6.2.2 +
current : 6.2.2
WSplitRegion
-
reg : 6.2.3 +
reg : 6.2.3
WSplitSplit
-
br : 6.2.4 -
dir : 6.2.4 -
flip : 6.2.4 -
tl : 6.2.4 +
br : 6.2.4 +
dir : 6.2.4 +
flip : 6.2.4 +
tl : 6.2.4
WTiling - : 2.2.1 + : 2.2.1
-
farthest : 6.2.5 -
flip_at : 6.2.5 -
managed_list : 6.2.5 -
nextto : 6.2.5 -
node_of : 6.2.5 -
set_floating : 6.2.5 -
set_floating_at : 6.2.5 -
split : 6.2.5 -
split_at : 6.2.5 -
split_top : 6.2.5 -
split_tree : 6.2.5 -
transpose_at : 6.2.5 -
unsplit_at : 6.2.5 +
farthest : 6.2.5 +
flip_at : 6.2.5 +
managed_i : 6.2.5 +
nextto : 6.2.5 +
node_of : 6.2.5 +
set_floating : 6.2.5 +
set_floating_at : 6.2.5 +
split : 6.2.5 +
split_at : 6.2.5 +
split_top : 6.2.5 +
split_tree : 6.2.5 +
transpose_at : 6.2.5 +
unsplit_at : 6.2.5
WWindow - : 2.2.1 + : 2.2.1
-
p_move : 6.1.12 -
p_resize : 6.1.12 -
xid : 6.1.12 +
p_move : 6.1.12 +
p_resize : 6.1.12 +
xid : 6.1.12
x_change_property - : 6.1 + : 6.1
x_delete_property - : 6.1 + : 6.1
x_get_atom_name - : 6.1 + : 6.1
x_get_text_property - : 6.1 + : 6.1
x_get_window_property - : 6.1 + : 6.1
x_intern_atom - : 6.1 + : 6.1
x_set_text_property - : 6.1 + : 6.1
xid - : 6.1.1 - | 6.1.12 + : 6.1.1 + | 6.1.12
Xinerama : 2.2.1
xmodmap - : 3.3.5 + : 3.3.5
xprop - : 3.5.2 + : 3.5.2
diff --git a/doc/ionconf/node12.html b/doc/ionconf/node12.html index 90201d6..b55a763 100644 --- a/doc/ionconf/node12.html +++ b/doc/ionconf/node12.html @@ -70,7 +70,7 @@ Mathematics Department, Macquarie University, Sydney. The command line arguments were:
latex2html -show_section_numbers -short_index -local_icons -noaddress -up_url http://iki.fi/tuomov/ion/ -up_title 'Ion homepage' -nofootnode -split 3 ionconf

-The translation was initiated by tuomov on 2006-12-23 +The translation was initiated by tuomov on 2007-02-03


diff --git a/doc/ionconf/node3.html b/doc/ionconf/node3.html index f3dbd29..cc7578a 100644 --- a/doc/ionconf/node3.html +++ b/doc/ionconf/node3.html @@ -227,7 +227,7 @@ implement.

-

+
+ Substyle attributes: active/inactive + (mutually exclusive) and + quasiactive/not_quasiactive. + A frame is ``quasiactive'' when an active region + has a backlink to it, such as a detached window. + Substyle attributes as for frame. + Substyle attributes: + active/inactive and + selected/unselected + Additional substyle attributes include: + tagged/not_tagged, + dragged/not_dragged, + activity/no_activity and + quasiactive/not_quasiactive. @@ -268,7 +271,9 @@ tag and drag states.) different modes. - + @@ -291,7 +296,7 @@ tag and drag states.) @@ -335,7 +340,7 @@ and should usually be symlinked to or a copy of of some

-The first thing to do in a stylefile is to choose the drawing +The first thing to do in a style file is to choose the drawing engine, possibly loading the module as well. This is done with the following chunk of code. @@ -407,7 +412,7 @@ border elements and styles referred to there are explained in Figure

-

+
Figure 2.1: Partial Ioncore, mod_tiling and mod_query @@ -237,10 +237,10 @@ Partial Ioncore, mod_tiling and +
Is the base of Ion's object system.

WRegion
-
+
is the base class for everything corresponding to something on the screen. Each object of type WRegion has a size and position relative to the parent WRegion. While a big part of Ion @@ -277,27 +277,27 @@ The core classes:

WClientWin
-
is a class for +
is a class for client window objects, the objects that window managers are supposed to manage.

WWindow
-
is the base class for all +
is the base class for all internal objects having an X window associated to them (WClientWins also have X windows associated to them).

WRootWin
-
is the class for +
is the class for root windows of X screens. Note that an ''X screen'' or root window is not necessarily a single physical screen as a root window - may be split over multiple screens when multi-head extensions - such as Xinerama are used. (Actually there - can be only one WRootWin when Xinerama is used.) + may be split over multiple screens when hacks such as + Xinerama are used. (Actually there can be only + one root window when Xinerama is used.)

@@ -310,15 +310,14 @@ The core classes:

WScreen
-
is the class for objects +
is the class for objects corresponding to physical screens. Screens may share a root - window when Xinerama multihead extensions are used as explained - above. + window when the Xinerama extension is used as explained above.

WFrame
-
is the class for frames. +
is the class for frames. While most Ion's objects have no graphical presentation, frames basically add to WMPlexes the decorations around client windows (borders, tabs). @@ -326,11 +325,11 @@ The core classes:

WGroup
-
is the base class for groups. +
is the base class for groups. Particular types of groups are workspaces - (WGroupWS) + (WGroupWS) and groups of client windows - (WGroupCW). + (WGroupCW).
@@ -340,12 +339,12 @@ Classes implemented by the mod_tiling module:

WTiling
-
is the class for tilings +
is the class for tilings of frames.
WSplit
-
(or, more specifically, classes +
(or, more specifically, classes that inherit it) encode the WTiling tree structure.
@@ -356,19 +355,19 @@ Classes implemented by the mod_query module:

WInput
-
is a virtual base class for the +
is a virtual base class for the two classes below.
WEdln
-
is the class for the ''queries'', +
is the class for the ''queries'', the text inputs that usually appear at bottoms of frames and sometimes screens. Queries are the functional equivalent of ''mini buffers'' in many text editors.
WMessage
-
implements the boxes for +
implements the boxes for warning and other messages that Ion may wish to display to the user. These also usually appear at bottoms of frames.
@@ -392,7 +391,7 @@ binding callbacks in the move and resize mode. 2.2.2.1 Parent-child relations Each object of type WRegion has a parent and possibly a manager -associated to it. The parent for an object is always a +associated to it. The parent for an object is always a WWindow and for WRegion with an X window (WClientWin, WWindow) the parent WWindow is given by the same relation of the X windows. For other WRegions the relation is not as clear. @@ -402,7 +401,7 @@ Figure 2.2.

-

+
@@ -423,7 +422,7 @@ Most common parent-child relations

WRegions have very little control over their children as a parent. -The manager WRegion has much more control over its +The manager WRegion has much more control over its managed WRegions. Managers, for example, handle resize requests, focusing and displaying of the managed regions. Indeed the manager--managed relationship gives a better picture of the logical ordering of objects on @@ -441,7 +440,7 @@ but all have a parent-a screen if not anything else.

-

+
Figure 2.2: Most common parent-child relations
diff --git a/doc/ionconf/node4.html b/doc/ionconf/node4.html index 60acef3..d156abd 100644 --- a/doc/ionconf/node4.html +++ b/doc/ionconf/node4.html @@ -153,9 +153,9 @@ explained. For a reference on exported functions, see section Ion3, to which document applies, stores its stock configuration files in /usr/local/etc/ion3/ unless you, the OS package maintainer or whoever installed the package on the system has modified the variables -PREFIX or -ETCDIR in -system.mk before compiling Ion. +PREFIX or +ETCDIR in +system.mk before compiling Ion. In the first case you probably know where to find the files and in the other case the system administrator or the OS package maintainer should have provided documentation to point to the correct location. @@ -573,8 +573,8 @@ defbindings("WFrame", { As seen above, the functions that create key binding specifications require a keyspec argument. This argument should be a string containing the name of a key as listed in the X header file keysymdef.h3.1 without the XK_ prefix. - + HREF="#foot857">3.1 without the XK_ prefix. + Most of the key names are quite intuitive while some are not. For example, the Enter key on the main part of the keyboard has the less common name Return while the one the numpad is called KP_Enter. @@ -586,23 +586,23 @@ modifiers:
Shift, Control, Mod1 to Mod5, AnyModifier and Lock. + -

X allows binding all of these modifiers to almost any key and while this list of modifiers does not explicitly list keys such as -Alt that are common on modern keyboards, such +Alt that are common on modern keyboards, such keys are bound to one of the ModN. On systems running XFree86 Alt is usually Mod1. On Suns Mod1 is the diamond key and Alt something else. One of the ''flying window'' keys on so called Windows-keyboards is probably mapped to Mod3 if you have -such a key. Use the program xmodmap +such a key. Use the program xmodmap to find out what exactly is bound where.

@@ -614,10 +614,10 @@ default.

Ion ignores the Lock modifier and any ModN () -bound to NumLock or -ScrollLock +bound to NumLock or +ScrollLock by default because such3.2 locking keys may otherwise + HREF="#foot836">3.2 locking keys may otherwise cause confusion.

@@ -630,7 +630,7 @@ cause confusion. Button specifications are similar to key definitions but now instead of specifying modifiers and a key, you specify modifiers and one of the button names Button1 to -Button5. Additionally the +Button5. Additionally the specification may end with an optional area name following an @-sign. Only frames currently support areas, and the supported values in this case are @@ -681,10 +681,10 @@ to it is available virtually everywhere.

- - + + In the stock configuration file setup, menus are defined in the file cfg_menus.lua as previously mentioned. The mod_menu module must be loaded for one to be able to define menus, and this is done with @@ -739,6 +739,13 @@ just like the menus defined as above.

+ + + + + + @@ -814,7 +821,7 @@ handlers (and elsewhere): after which the selected entry is activated. This function is meant to be used for implementing, for example, Win***s-style Alt-Tab handling.3.3 + HREF="#foot1174">3.3
Figure 2.3: Most common manager-managed relations
workspacelist List of all workspaces. Activating an entry jumps to that workspaces.
focuslistList of client windows with recent activity in them, followed by + previously focused client windows.
focuslist_List of previously focused client windows.
stylemenu List of available look_*.lua style files. Activating an entry loads that style and ask to save the selection.
@@ -842,7 +849,7 @@ defbindings("WFrame", {

-The so-called ''winprops'' can be used to change how +The so-called ''winprops'' can be used to change how specific windows are handled and to set up some kludges to deal with badly behaving applications. They are defined by calling the function defwinprop with a table containing the properties to set and the @@ -860,7 +867,7 @@ usual method of identifying windows, and how to obtain this information.

Description:
-
+
Set this to true for Acrobat Reader. It has an annoying habit of trying to manage its dialogs instead of setting them as transients and letting the window manager do its job, causing @@ -878,7 +885,7 @@ usual method of identifying windows, and how to obtain this information.
Description:
-
+
The table should contain the entries w and h that override application-supplied aspect ratio hint. @@ -893,7 +900,7 @@ usual method of identifying windows, and how to obtain this information.
Description:
-
+
Set this to open the window in a floating frame, when in a group. @@ -908,7 +915,7 @@ usual method of identifying windows, and how to obtain this information.
Description:
-
+
Should the window be initially in full screen mode?
@@ -922,7 +929,7 @@ usual method of identifying windows, and how to obtain this information.
Description:
-
+
Should configure requests on the window be ignored? Only has effect on floating windows. @@ -937,7 +944,7 @@ usual method of identifying windows, and how to obtain this information.
Description:
-
+
Ignore extended WM hints _NET_ACTIVE_WINDOW request.
@@ -951,7 +958,7 @@ usual method of identifying windows, and how to obtain this information.
Description:
-
+
Should application supplied size increments be ignored?
@@ -965,7 +972,7 @@ usual method of identifying windows, and how to obtain this information.
Description:
-
+
Should a newly created client window always be made active, even if the allocated frame isn't. @@ -980,7 +987,7 @@ usual method of identifying windows, and how to obtain this information.
Description:
-
+
The table should contain the entries w and h that override application-supplied maximum size hint. @@ -995,12 +1002,31 @@ usual method of identifying windows, and how to obtain this information.
Description:
-
+
Similar to max_size but for the minimum size hint.
+

+ +

+
Winprop:
+
new_group (string) + +
+
Description:
+
+ If the region specified by target winprop does not exist + (or that winprop is not set), create a new workspace using the + previously stored layout (see ioncore.deflayout) named by + this property. After creating the workspace, target is + attempted to be found again. (If that still fails, the newly + created workspace is still asked to manage the client window.) + +
+
+

@@ -1009,12 +1035,29 @@ usual method of identifying windows, and how to obtain this information.
Description:
-
+
Discard this winprop after first use.
+

+ +

+
Winprop:
+
statusbar (string) + +
+
Description:
+
+ Put the window on the statusbar, in the named tray component, + (The default tray component is called simply ``systray'', + and others you give names to in your custom template, always + prefixed by ``systray_''. + +
+
+

@@ -1023,7 +1066,7 @@ usual method of identifying windows, and how to obtain this information.
Description:
-
+
Should a newly mapped client window be switched to within its frame. @@ -1038,9 +1081,9 @@ usual method of identifying windows, and how to obtain this information.
Description:
-
+
The name of an object (workspace, frame) that should manage - windows of this type. + windows of this type. See also new_group.
@@ -1053,7 +1096,7 @@ usual method of identifying windows, and how to obtain this information.
Description:
-
+
"normal": No change in behaviour. "current": The window should be thought of as a transient for the current active client window (if any) even if it is not marked as a @@ -1072,7 +1115,7 @@ usual method of identifying windows, and how to obtain this information.
Description:
-
+
When transients are managed by the client window itself (as it is the case on tiled workspaces), should the transients be placed at the top of the window instead of bottom? @@ -1088,7 +1131,7 @@ usual method of identifying windows, and how to obtain this information.
Description:
-
+
Should frames be made transparent when this window is selected?
@@ -1105,9 +1148,9 @@ usual method of identifying windows, and how to obtain this information.

The identification information in the winprop specification is usually the -class, -role, -instance and +class, +role, +instance and name of the window. The name field is a Lua-style regular expression matched against the window's title and the rest are strings that must @@ -1190,7 +1233,7 @@ can be used to list the identification information required to set winprops for a window and all the transient windows managed within it.

- + Another way to get the identification information is to use xprop. Simply run To get class and instance, simply run xprop WM_CLASS and click on the particular window of interest. The class is the latter of @@ -1199,7 +1242,7 @@ windows have this property - use the command xprop WM_ROLE. This method, however, will not work on transients.

- + So-called ''transient windows'' are usually short-lived dialogs (although some programs abuse this property) that have a parent window that they are ''transient for''. On tiled workspaces Ion displays these windows @@ -1208,7 +1251,7 @@ Unfortunately xprop is stupid and can't cope with this situation, returning the parent window's properties when the transient is clicked on. For this reason you'll have to do a little extra work to get the properties for that window.3.4 + HREF="#foot1451">3.4

Finally, it should be mentioned that too many authors these days ''forget'' to set this vital identification to anything meaningful: @@ -1308,26 +1351,26 @@ default name formed from the frame's class name and an instance number.



Footnotes

-
...keysymdef.h...keysymdef.h3.1
This file can usually be found in the directory /usr/X11R6/include/X11/.
-
... such... such3.2
Completely useless keys that should be gotten rid of in the author's opinion.
-
... handling.... handling.3.3
See the wcirculate.lua script in the Ion scripts repository http://iki.fi/tuomov/repos/ion-scripts-3/.
-
... window.... window.3.4
There's a patch to xprop to fix this, but nothing seems to be happening with respect to including it in diff --git a/doc/ionconf/node5.html b/doc/ionconf/node5.html index b6951d4..da15f29 100644 --- a/doc/ionconf/node5.html +++ b/doc/ionconf/node5.html @@ -125,7 +125,7 @@ for the default drawing engine.

- +
4.1 Drawing engines, style specifications and sub-styles

@@ -169,7 +169,6 @@ foo-bar-baz foo-*-baz foo-bar * -foo-baz -- Doesn't match, not selected!

@@ -178,7 +177,7 @@ specified, also in the form

 attr1-attr2-...-attrn
 
-These extra attributes are called substyles +These extra attributes are called substyles and allow, for example, the state of the object to be indicated by different colour sets while keeping the interface at an abstract level and the drawing engine completely ignorant @@ -209,11 +208,15 @@ tag and drag states.)
frame Style for frames. - Substyles: active, inactive.
frame-tiled A more specific style for tiled frames. - Substyles as for frame.
frame-tiled-alt An alternative style for tiled frames. @@ -242,17 +245,17 @@ tag and drag states.)
tab Style for frames' tabs and menu entries. - Substyles: combinations of the form a-s where - a is one of active/inactive and - s is one of selected/unselected
tab-frame A more specific style for frames' tabs. - Substyles: combinations of the form a-s-t-d-u where - a and s are as above and - t is one of tagged/not_tagged, - d is one of dragged/not_dragged and - u is one of activity/no_activity.
tab-frame-tiled,  
tab-menuentryA more specific style for entries in WMenus.A more specific style for entries in WMenus. + Additional substyle attributes include submenu and + occasionally also activity is used.
tab-menuentry-bigmenu An alternate style for entries in WMenus.
input-edln A more specific style for WEdlns. - Substyles: selection for selected text and + Substyle attributes: selection for selected text and cursor for the cursor indicating current editing point.
input-message
diff --git a/doc/ionconf/node6.html b/doc/ionconf/node6.html index b1bbe8b..8c985d1 100644 --- a/doc/ionconf/node6.html +++ b/doc/ionconf/node6.html @@ -180,11 +180,11 @@ end

If you want to a single non-WClientWin region with an exact known name, use ioncore.lookup_region. If you want a list of all regions, -use ioncore.region_list. Both functions accept an optional argument +use ioncore.region_list. Both functions accept an optional argument that can be used to specify that the returned region(s) must be of a more specific type. Client windows live in a different namespace and for them you should use the equivalent functions ioncore.lookup_clientwin -and ioncore.clientwin_list. +and ioncore.clientwin_list.

To get the name of an object, use WRegion.name. Please be diff --git a/doc/ionconf/node7.html b/doc/ionconf/node7.html index 5a3e390..628a670 100644 --- a/doc/ionconf/node7.html +++ b/doc/ionconf/node7.html @@ -163,8 +163,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds

-
- +
+
Synopsis:
@@ -180,8 +180,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds

-
- +
+
Synopsis:
@@ -198,8 +198,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds

-
- +
+
Synopsis:
@@ -215,8 +215,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds

-
- +
+
Synopsis:
@@ -242,18 +242,18 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
-
ioncore.create_ws(scr, tmpl, no_default) +
ioncore.create_ws(scr, tmpl, layout)
Description:
Create new workspace on screen scr. The table tmpl - may be used to override parts of default_ws_params, - and no_default may be set to true to complete ignore it. + may be used to override parts of the layout named with layout. + If no layout is given, "default" is used.
@@ -261,8 +261,8 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
@@ -280,8 +280,8 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
@@ -298,8 +298,27 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+ + +
+
Synopsis:
+
ioncore.deflayout(name, tab) + +
+
Description:
+
Define a new workspace layout with name name, and + attach/creation parameters given in tab. The layout + "empty" may not be defined. + +
+
+ +

+ +

+
+
Synopsis:
@@ -317,8 +336,8 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
@@ -334,8 +353,8 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
@@ -357,8 +376,8 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
@@ -374,8 +393,8 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
@@ -392,8 +411,8 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
@@ -410,8 +429,8 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
@@ -428,8 +447,8 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
@@ -446,8 +465,8 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
@@ -463,8 +482,8 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
@@ -480,8 +499,8 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
@@ -497,8 +516,26 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+ + +
+
Synopsis:
+
ioncore.getlayout(name, all) + +
+
Description:
+
Get named layout (or all of the latter parameter is set, + but this is for internal use only). + +
+
+ +

+ +

+
+
Synopsis:
@@ -514,8 +551,8 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
@@ -531,8 +568,8 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
@@ -548,8 +585,8 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
@@ -565,16 +602,18 @@ The string guard maybe set to pose limits on _sub. Currently

-
- - +
+ +
Synopsis:
-
table ioncore.activity_list() +
bool ioncore.activity_i(function iterfn)
Description:
-
Return list of regions with activity/urgency bit set. +
Iterate over activity list until iterfn returns false. + The function itself returns true if it reaches the end of list + without this happening.
@@ -582,8 +621,8 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
@@ -599,16 +638,18 @@ The string guard maybe set to pose limits on _sub. Currently

-
- - +
+ +
Synopsis:
-
table ioncore.clientwin_list() +
bool ioncore.clientwin_i(function fn)
Description:
-
Return a list of all client windows. +
Iterate over client windows until iterfn returns false. + The function itself returns true if it reaches the end of list + without this happening.
@@ -616,8 +657,8 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
@@ -633,8 +674,8 @@ The string guard maybe set to pose limits on _sub. Currently

-
- +
+
Synopsis:
@@ -687,8 +728,32 @@ Similarly to sed's 's' command, rule may contain characters that are

-
- +
+ + +
+
Synopsis:
+
bool ioncore.detach(WRegion reg, string how) + +
+
Description:
+
Detach or reattach reg, depending on whether how + is 'set'/'unset'/'toggle'. (Detaching means making reg + managed by its nearest ancestor WGroup, framed if reg is + not itself WFrame. Reattaching means making it managed where + it used to be managed, if a return-placeholder exists.) + If reg is the 'bottom' of some group, the whole group is + detached. If reg is a WWindow, it is put into a + frame. + +
+
+ +

+ +

+
+
Synopsis:
@@ -707,8 +772,8 @@ Similarly to sed's 's' command, rule may contain characters that are

-
- +
+
Synopsis:
@@ -716,10 +781,26 @@ Similarly to sed's 's' command, rule may contain characters that are
Description:
-
Find the screen with numerical id id. If Xinerama is - not present, id corresponds to X screen numbers. Otherwise - the ids are some arbitrary ordering of Xinerama rootwins. - If id is , the screen with the highest id is returned. +
Find the screen with numerical id id. + +
+
+ +

+ +

+
+ + +
+
Synopsis:
+
bool ioncore.focushistory_i(function iterfn) + +
+
Description:
+
Iterate over focus history until iterfn returns false. + The function itself returns true if it reaches the end of list + without this happening.
@@ -727,8 +808,8 @@ Similarly to sed's 's' command, rule may contain characters that are

-
- +
+
Synopsis:
@@ -744,8 +825,8 @@ Similarly to sed's 's' command, rule may contain characters that are

-
- +
+
Synopsis:
@@ -761,8 +842,8 @@ Similarly to sed's 's' command, rule may contain characters that are

-
- +
+
Synopsis:
@@ -778,8 +859,8 @@ Similarly to sed's 's' command, rule may contain characters that are

-
- +
+
Synopsis:
@@ -799,8 +880,8 @@ Similarly to sed's 's' command, rule may contain characters that are

-
- +
+
Synopsis:
@@ -820,8 +901,8 @@ Similarly to sed's 's' command, rule may contain characters that are

-
- +
+
Synopsis:
@@ -841,8 +922,8 @@ Note that this function is asynchronous; the screen will not

-
- +
+
Synopsis:
@@ -862,8 +943,8 @@ Note that this function is asynchronous; the screen will not

-
- +
+
Synopsis:
@@ -883,8 +964,8 @@ Note that this function is asynchronous; the screen will not

-
- +
+
Synopsis:
@@ -904,8 +985,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -921,8 +1002,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -938,8 +1019,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -955,8 +1036,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -973,8 +1054,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -992,8 +1073,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -1015,8 +1096,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -1034,8 +1115,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -1051,16 +1132,19 @@ Note that this function is asynchronous; the region will not

-
- - +
+ +
Synopsis:
-
table ioncore.region_list(string typenam) +
bool ioncore.region_i(function fn, string typenam)
Description:
-
Find all non-client window regions inheriting typenam. +
Iterate over all non-client window regions with (inherited) class + typenam until iterfn returns false. + The function itself returns true if it reaches the end of list + without this happening.
@@ -1068,8 +1152,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -1086,8 +1170,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -1104,8 +1188,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -1121,8 +1205,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -1138,8 +1222,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -1208,10 +1292,6 @@ Note that this function is asynchronous; the region will not One of ''udlr'' (up-down, then left-right), ''lrud'' (left-right, then up-down) or ''random''. -
- -
Figure 4.1: Sketch of different border styles and elements
default_ws_params(table) Default workspace layout; the - attach/creation parameters for a WGroup.

@@ -1229,25 +1309,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- - -
-
Synopsis:
-
void ioncore.set_get_winprop_fn(function fn) - -
-
Description:
-
Set function used to look up winprops. - -
-
- -

- -

-
- +
+
Synopsis:
@@ -1263,8 +1326,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1280,8 +1343,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1297,8 +1360,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1314,16 +1377,16 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- - +
+ +
Synopsis:
-
table ioncore.tagged_list() +
WRegion ioncore.tagged_first()
Description:
-
Returns a list of tagged regions. +
Returns first tagged object.
@@ -1331,16 +1394,18 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- - +
+ +
Synopsis:
-
WRegion ioncore.tags_first() +
bool ioncore.tagged_i(function iterfn)
Description:
-
Returns first tagged object. +
Iterate over tagged regions until iterfn returns false. + The function itself returns true if it reaches the end of list + without this happening.
@@ -1348,8 +1413,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1365,8 +1430,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1383,8 +1448,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1400,8 +1465,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1420,8 +1485,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1437,8 +1502,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1455,8 +1520,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1475,8 +1540,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1497,8 +1562,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1514,8 +1579,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1533,8 +1598,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1552,8 +1617,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1572,8 +1637,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1589,8 +1654,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1609,8 +1674,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1627,8 +1692,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1648,8 +1713,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1668,8 +1733,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1686,8 +1751,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1703,8 +1768,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1723,8 +1788,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1752,8 +1817,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1772,25 +1837,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- - -
-
Synopsis:
-
bool WClientWin.is_fullscreen(WClientWin cwin) - -
-
Description:
-
Is cwin in full screen mode? - -
-
- -

- -

-
- +
+
Synopsis:
@@ -1807,8 +1855,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1825,8 +1873,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1842,27 +1890,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- - -
-
Synopsis:
-
bool WClientWin.set_fullscreen(WClientWin cwin, string how) - -
-
Description:
-
Set client window cwin full screen state according to the - parameter how (set/unset/toggle). Resulting state is returned, - which may not be what was requested. - -
-
- -

- -

-
- +
+
Synopsis:
@@ -1884,8 +1913,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1901,8 +1930,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1918,8 +1947,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1935,8 +1964,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1952,8 +1981,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1970,8 +1999,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -1989,8 +2018,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -2006,8 +2035,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -2025,8 +2054,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -2050,8 +2079,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -2069,8 +2098,8 @@ When a keyboard resize function is called, and at most kbresize_t_max

-
- +
+
Synopsis:
@@ -2116,8 +2145,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2133,16 +2162,55 @@ In addition parameters to the region to be created are passed in this

-
- - +
+ +
Synopsis:
-
table WGroup.managed_list(WGroup ws) +
bool WGroup.is_fullscreen(WGroup grp)
Description:
-
Returns a list of regions managed by the workspace (frames, mostly). +
Is reg in full screen mode? + +
+
+ +

+ +

+
+ + +
+
Synopsis:
+
bool WGroup.managed_i(WGroup ws, function iterfn) + +
+
Description:
+
Iterate over managed regions of ws until iterfn returns + false. + The function itself returns true if it reaches the end of list + without this happening. + +
+
+ +

+ +

+
+ + +
+
Synopsis:
+
bool WGroup.set_fullscreen(WGroup grp, string how) + +
+
Description:
+
Set client window reg full screen state according to the + parameter how (set/unset/toggle). Resulting state is returned, + which may not be what was requested.
@@ -2162,8 +2230,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2201,8 +2269,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2224,8 +2292,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2243,8 +2311,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2307,8 +2375,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2324,8 +2392,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2341,8 +2409,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2360,8 +2428,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2378,8 +2446,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2395,8 +2463,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2412,16 +2480,19 @@ In addition parameters to the region to be created are passed in this

-
- - +
+ +
Synopsis:
-
table WMPlex.managed_list(WMPlex mplex) +
bool WMPlex.managed_i(WMPlex mplex, function iterfn)
Description:
-
Returns a list of all regions managed by mplex. +
Iterate over managed regions of mplex until iterfn returns + false. + The function itself returns true if it reaches the end of list + without this happening.
@@ -2429,8 +2500,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2446,8 +2517,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2464,17 +2535,19 @@ In addition parameters to the region to be created are passed in this

-
- - +
+ +
Synopsis:
-
table WMPlex.mx_list(WMPlex mplex) +
bool WMPlex.mx_i(WMPlex mplex, function iterfn)
Description:
-
Returns a list of regions on the numbered/mutually exclusive list of - mplex. +
Iterate over numbered/mutually exclusive region list of mplex + until iterfn returns false. + The function itself returns true if it reaches the end of list + without this happening.
@@ -2482,8 +2555,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2500,8 +2573,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2519,8 +2592,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2532,10 +2605,10 @@ In addition parameters to the region to be created are passed in this the mutually exclusive list. Special values for index are: - + - +
After WMPlex.mx_current.Last.
Last.After WMPlex.mx_current.
@@ -2545,8 +2618,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2585,8 +2658,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2603,8 +2676,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2620,8 +2693,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2644,8 +2717,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2662,8 +2735,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2680,8 +2753,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2713,8 +2786,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2739,8 +2812,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2761,8 +2834,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2779,8 +2852,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2797,8 +2870,8 @@ In addition parameters to the region to be created are passed in this

-
- +
+
Synopsis:
@@ -2819,8 +2892,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -2836,8 +2909,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -2853,8 +2926,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -2870,8 +2943,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -2887,8 +2960,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -2904,8 +2977,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -2921,8 +2994,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -2938,8 +3011,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -2955,8 +3028,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -2981,8 +3054,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3002,8 +3075,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3022,8 +3095,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3040,8 +3113,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3057,8 +3130,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3075,8 +3148,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3095,8 +3168,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3114,8 +3187,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3132,8 +3205,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3157,8 +3230,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3180,8 +3253,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3197,8 +3270,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3223,8 +3296,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3242,8 +3315,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3261,8 +3334,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3284,7 +3357,7 @@ Note that this function is asynchronous; the region will not

-
+
Synopsis:
@@ -3306,8 +3379,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3323,8 +3396,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3340,8 +3413,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3367,8 +3440,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3390,8 +3463,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3407,8 +3480,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3425,8 +3498,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3442,8 +3515,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3460,8 +3533,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3483,26 +3556,8 @@ Note that this function is asynchronous; the region will not
-
- - -
-
Synopsis:
-
bool mod_tiling.detach(WRegion reg) - -
-
Description:
-
Detach reg, i.e. make it managed by its nearest ancestor - WGroup, framed if reg is not itself WFrame. - -
-
- -

- -

-
- +
+
Synopsis:
@@ -3518,8 +3573,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3536,8 +3591,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3560,8 +3615,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3577,8 +3632,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3594,8 +3649,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3613,8 +3668,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3636,8 +3691,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3659,8 +3714,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3682,8 +3737,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3700,8 +3755,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3718,8 +3773,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3735,8 +3790,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3759,8 +3814,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3776,8 +3831,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3793,8 +3848,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3813,16 +3868,19 @@ Note that this function is asynchronous; the region will not

-
- - +
+ +
Synopsis:
-
table WTiling.managed_list(WTiling ws) +
bool WTiling.managed_i(WTiling ws, function iterfn)
Description:
-
Returns a list of regions managed by the workspace (frames, mostly). +
Iterate over managed regions of ws until iterfn returns + false. + The function itself returns true if it reaches the end of list + without this happening.
@@ -3830,8 +3888,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3850,8 +3908,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3868,8 +3926,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3888,8 +3946,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3907,8 +3965,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3926,8 +3984,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3948,8 +4006,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3965,8 +4023,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -3982,8 +4040,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4006,8 +4064,8 @@ Note that this function is asynchronous; the region will not
-
- +
+
Synopsis:
@@ -4023,8 +4081,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4041,8 +4099,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4058,8 +4116,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4075,8 +4133,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4092,19 +4150,20 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
-
integer mod_query.history_search(string s, integer from, bool bwd) +
integer mod_query.history_search(string s, integer from, bool bwd, bool exact)
Description:
Try to find matching history entry. Returns -1 if none was found. The parameter from specifies where to start searching from, and bwd causes backward search from - that point. + that point. If exact is not set, s only required + to be a prefix of the match.
@@ -4112,8 +4171,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4129,8 +4188,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4146,8 +4205,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4170,6 +4229,10 @@ Note that this function is asynchronous; the region will not (integer) auto-show-completions delay in milliseconds (default: 250). +caseicompl +(boolean) Turn some completions case-insensitive + (default: false). + @@ -4178,8 +4241,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4195,8 +4258,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4219,8 +4282,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4246,8 +4309,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4265,8 +4328,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4284,8 +4347,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4305,8 +4368,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4324,8 +4387,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4344,8 +4407,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4363,8 +4426,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4380,8 +4443,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4398,17 +4461,18 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
-
mod_query.query_renameworkspace(mplex) +
mod_query.query_renameworkspace(mplex, ws)
Description:
-
This function asks for a name new for the workspace on which the - query resides. +
This function asks for a name new for the workspace ws, + or the one on which mplex resides, if it is not set. + If mplex is not set, one is looked for.
@@ -4416,8 +4480,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4434,8 +4498,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4453,8 +4517,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4472,8 +4536,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4490,8 +4554,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4511,8 +4575,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4530,8 +4594,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4547,8 +4611,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4570,8 +4634,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4597,8 +4661,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4614,8 +4678,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4631,8 +4695,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4649,8 +4713,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4666,8 +4730,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4684,8 +4748,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4701,8 +4765,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4724,8 +4788,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4741,8 +4805,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4758,8 +4822,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4775,8 +4839,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4793,8 +4857,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4810,8 +4874,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4827,8 +4891,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4844,8 +4908,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4861,8 +4925,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4880,8 +4944,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4899,8 +4963,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4916,8 +4980,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4933,8 +4997,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4950,8 +5014,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4967,8 +5031,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -4984,8 +5048,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -5002,8 +5066,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -5021,8 +5085,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -5038,8 +5102,8 @@ Note that this function is asynchronous; the region will not

-
- +
+
Synopsis:
@@ -5060,8 +5124,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5078,8 +5142,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5095,8 +5159,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5112,8 +5176,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5129,8 +5193,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5147,8 +5211,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5164,8 +5228,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5187,8 +5251,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5204,8 +5268,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5221,8 +5285,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5244,8 +5308,8 @@ Note that this function is asynchronous; the selection will not
-
- +
+
Synopsis:
@@ -5263,8 +5327,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5290,8 +5354,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5307,8 +5371,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5342,8 +5406,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5367,8 +5431,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5384,8 +5448,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5402,8 +5466,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5419,8 +5483,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5436,8 +5500,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5453,8 +5517,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5476,8 +5540,8 @@ Note that this function is asynchronous; the selection will not
-
- +
+
Synopsis:
@@ -5499,8 +5563,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5516,8 +5580,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5534,8 +5598,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5551,8 +5615,8 @@ Note that this function is asynchronous; the selection will not

-
- +
+
Synopsis:
@@ -5607,8 +5671,8 @@ Any parameters not explicitly set in conftab will be left unchanged.
-
- +
+
Synopsis:
@@ -5625,8 +5689,8 @@ Any parameters not explicitly set in conftab will be left unchanged.

-
- +
+
Synopsis:
@@ -5649,8 +5713,8 @@ Any parameters not explicitly set in conftab will be left unchanged.
-
- +
+
Synopsis:
@@ -5666,8 +5730,8 @@ Any parameters not explicitly set in conftab will be left unchanged.

-
- +
+
Synopsis:
@@ -5683,8 +5747,8 @@ Any parameters not explicitly set in conftab will be left unchanged.

-
- +
+
Synopsis:
@@ -5700,8 +5764,8 @@ Any parameters not explicitly set in conftab will be left unchanged.

-
- +
+
Synopsis:
@@ -5725,7 +5789,7 @@ Any parameters not explicitly set in conftab will be left unchanged.

-
+
Hook name:
@@ -5797,7 +5861,7 @@ reg:attach(cwin)

-
+
Hook name:
@@ -5817,7 +5881,28 @@ reg:attach(cwin)

-
+
+ +
+
Hook name:
+
clientwin_property_change_hook + +
+
Parameters:
+
(WClientWin, integer) + +
+
Description:
+
Called when the property identified by the parameter atom id + (integer) has changed on a client window. + +
+
+ +

+ +

+
Hook name:
@@ -5838,7 +5923,7 @@ reg:attach(cwin)

-
+
Hook name:
@@ -5884,7 +5969,7 @@ reg:attach(cwin)

-
+
Hook name:
@@ -5905,7 +5990,7 @@ reg:attach(cwin)

-
+
Hook name:
@@ -5925,7 +6010,7 @@ reg:attach(cwin)

-
+
Hook name:
@@ -5946,7 +6031,7 @@ reg:attach(cwin)

-
+
Hook name:
@@ -5966,7 +6051,7 @@ reg:attach(cwin)

-
+
Hook name:
@@ -6018,85 +6103,11 @@ reg:attach(cwin)

-
+
Hook name:
-
panews_make_placement_alt - -
-
Parameters:
-
table - -
-
Description:
-
Called to make a placement on panews. The parameter table has - the following fields: - -

- - - - - - - - - - - - - - - - - - - - - -
FieldTypeDescription
wsWPaneWSThe workspace
frameWFrameA frame initially allocated for the - region to be placed
regWRegionThe region to be placed
specifierWRegionFor drag&drop on handling empty areas
- -

-The handler should set some of these fields on success: - -

- - - - - - - - - - - - - - - - - - - - - -
FieldTypeDescription
res_nodeWSplitTarget split
res_configWFrameNew configuration for it, unless - WSplitRegion
res_wintegerNew width for target split (optional)
res_hintegerNew height for target split (optional)
- -

-
- -

- -

-
- -
-
Hook name:
-
region_activated_hook +
region_do_warp_alt
Parameters:
@@ -6104,7 +6115,8 @@ The handler should set some of these fields on success:
Description:
-
Signalled when a region or one of its children has received the focus. +
This alt-hook exist to allow for alternative pointer warping + implementations.
@@ -6112,20 +6124,21 @@ The handler should set some of these fields on success:

-
+
Hook name:
-
region_activity_hook +
screen_managed_changed_hook
Parameters:
-
WRegion +
table
Description:
-
This hook is triggered when the activity flag of the parameter - region has been changed. +
Called when there are changes in the objects managed by a screen + or their order. The table parameter is similar to that of + frame_managed_changed_hook.
@@ -6133,67 +6146,73 @@ The handler should set some of these fields on success:

-
+
Hook name:
-
region_do_warp_alt +
region_notify_hook
Parameters:
-
WRegion +
(WRegion, string)
Description:
-
This alt-hook exist to allow for alternative pointer warping - implementations. - -
-
+
Signalled when something (minor) has changed in relation to + the first parameter region. The string argument gives the + change:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StringDescription
deinitThe region is about to be deinitialised.
activatedThe region has received focus.
inactivatedThe region has lost focus.
activityThere's been activity in the region itself.
sub_activityThere's been activity in some sub-region.
nameThe name of the region has changed.
unset_managerThe region no longer has a manager.
set_managerThe region now has a manager.
tagTagging state has changed.
pseudoactivatedThe region has become pseudoactive + (see below).
pseudoinactivatedThe region is no longer pseudoactive.
-

-
- -
-
Hook name:
-
region_inactivated_hook - -
-
Parameters:
-
WRegion - -
-
Description:
-
Signalled when the focus has moved from the parameter region or - one of its children to a non-child region of the parameter region. +

+A region is pseudoactive, when a) it is itself not active (does + not not have the focus, and may not even have a window that could + have it), but b) some region managed by it is active.

-

-
- -
-
Hook name:
-
screen_managed_changed_hook - -
-
Parameters:
-
table - -
-
Description:
-
Called when there are changes in the objects managed by a screen - or their order. The table parameter is similar to that of - frame_managed_changed_hook. - -
-
-

diff --git a/doc/ionconf/node9.html b/doc/ionconf/node9.html index 69a5aff..9d55faa 100644 --- a/doc/ionconf/node9.html +++ b/doc/ionconf/node9.html @@ -74,10 +74,10 @@ B. Full class hierarchy visible to Lua-side |-->WRegion | |-->WClientWin | |-->WWindow - | | |-->WRootWin | | |-->WMPlex - | | | |-->WScreen | | | |-->WFrame + | | | |-->WScreen + | | | |->WRootWin | | |-->WInfoWin | | | |-->WStatusBar (mod_statusbar) | | |-->WMenu (mod_menu) diff --git a/doc/ionnotes.dvi.gz b/doc/ionnotes.dvi.gz index 2922df55eb288a8d98eb4857cc31a5e9a4e4baa2..599aad6a386aaefd0a3ad94c8b01f430b62f687d 100644 GIT binary patch literal 27903 zcmV(?K-a$?iwFqEq{Kx418Hw=Zf|sDb1r0dX#ngzZE#%Gb+UJj9S9+cYajuV2Lx;r zNvqXL{sdxS%SK>Zjy^1ZV8Y$EcXzM-_PzD{ki1N2XfmBnK6cUbEjte_Q<*d*m}yCd zVbWGGrZY)_#DRRYO_K=|5}H6K{UHWT!_Z>rIrrY(_hc+tX=B3#YewFE_uYHWx##=b zd*s&^F8KW6f4qEs6a2*f<1%fK?$RvJEqboj(cZqgt-YhIJ+&^my1na5Fk?Z}JbvDS zpQ$^Gne4iZr86^YY1dz`B?g&mP;JFZEivGw_fy>!-#6NnxR$N0*h&!dD0A~#zEq^P zO|x2&=m$uS!nAJB&EqWiy2G|Io=)K*Gr|B#0mg2nrBTbyI5^?P8;>mf;=_MeK60XT zsHa@^oA(}=Y7@jz2XGbvU|Vvfws(V@XAVATiCw$*Xd4a{El1l>f`9i_Dn}OP|Kf46 z_Q;8E9_o3uscDgbVWszL8~Sd#1-`@HsHs~SX6EGnfNCw#Qy)rfV%aRUVG4D$y&aue zB5l(Vn4uHfGU0>Sx>v{=^pKXwST4~4nyV%9o|z-IS1+ zS}k$Vvs~)HAaHc;DlL(-34l&^tN|>ZVNh6_A-NndNquJ0hL)g)!HN!Z;9DU>oIHG* z@-u5#fC4^kqPq;q%X!QY2n?EaBab%A<>9%&Ob_6IoIoy~L(GgK3J|4(a0X-XtA+9Y6v)LP{)BqhFV|& zJV(8~Q+_5_fmC$QMj@5pX%))IIzY`dvEdPz83NX=Vo6a6ik79o0A>QqS9bskE5~$V zm=?TjgMTxix(S=+m;*bbz?lNkB~>(MQ=p@0c#h(rJ8C%|u#tgwC)_-|4j+l`xiGun zX~{Jy!E9z_P)#IMoo1L}5Fp5mECT8Z#L+!Nkhf-yczw_#wu{;T-}A)CDpYFN(UNOn z8{JZi65R@KcT`2YrSc`ZLzZ+)t?UL#Y;4fdqk!}%AU#naJ>lYBHLq9A>y6Iq4d?ZM zKS*p>$otfyKDDSXx~Q){DO_Ce43`y+5)3LW7*Y_16ojEDgrRWdZuNc;ybf9ewF{u* zX#-vn1%jw4BnpBkB1i~|NH!5P{RW$;0zwrK8U;eb#Z1j(Y95QuW8plCY%&#cOD(e0 zA}hMcs!s|RXV?f6LyAeBTJNd#UUa<|t}Chcu4GcF{$?NeU~OtR>M!?@P3ef2+-#w* zgE-)dM;uIom`MR1#MH!1-~i;TJ*1f31T0Jw*AajZMgiYUjgff*7E>dD@tL|{xe>2@ z3g3<>ZxbjzR~l6`oM{_@XO4yr(2`Lt4_qL&4j&E%E-`sPOKhGlkW{2AMHcHoN!~Ni}z)2MexInh6t}iY(tm#};YPO3&c6Y#08wck z(nvL+&7na`8cqqqML}bQqCpG5Cqed{8Whs{so9|q=Bc*TBO1f7ktI5v6J%;WN;%*a zixvcqjD}WrTJ1IDpncb!lr&t!j|8eGW&hDTnU3C1Y+Y=xV_0n|+JJc?KdV&T3I1&$=Q!yLEPe zH$n1!dZp=#==?3S1H+Iv4_KjU_s>(cPY*LxyxZq?OIx-NXVfR!DD{>{wQ_9b?}!!`?ZoFRwyNrEt$m`a9) z;U-IO9dIEbp1U@jxMA_W@^tgEA5Ol|)V$@9ruRd^dmf?bL&=UOdM$HZ^}IWOwH=L< zXDyq%dCCix-}Hr#W;}y(&~08MuI|4z@~b=_wLydI%EZUZ-znqIJqxCn3b+U}0{7Tp z_01RiJPQED?{3=3iE&`;$kUL@o0ZDM2b!92rHij&bfgMXh|Adl)^>RXel9Kj8qH9>K7 zW$dxx##X+1;eF%fjaKpA$A(3<#9f3ieZ}PMT{#IKewVnqT}ZaC?Rw_!qkIy`NG*eZ zI{9GjtxI;{Hu%l}xA@pFZn3R0v2@Ze4}w6di*|Kp5I-cN)Es|o*!36f>S90~)H3UN zDX=`Q6SD?`P#}SKuvr=sRL)!^7Am7aQqQs_9P`W!6`Klx^n$~!Y~_J6JXT}V9|G0% zW3Qf2+R3GM)?(AmNs=qDTs0J3)yJhcHc=TvM)!p1y?0jkk}*f!AX0>!Ym zZ9VypzN2~< zESvHSbqO;Z;O52WeWg78v9I5-XqT{x^BeZq{=M!ru#)I*W#U8HYvt*WO7l^Zr1^YT z2qLzj2NbsFQmL?$FAG5s6I9Q#bHrqK0)uqRFcjTZ){kx2WJV0m0#zH$TgXM&6L&3X zX=sK$m!cUul?m_^Wy`L{1`i2yoP0SC%VB1(P>N5y{{Hf@jh1=uk*8f0jZ^untG++g z5&AvFwChfHC^m8F{srZ!94<@~(~J~d-KIGDXjENWnRx&TEz1V`()PA%?OJl5me{E6 zO~Tjqee)`c%F~);y>d#5^~aMH|AWT&MOjphC+|lmWTpM4Z~B-+b5+rd9lZjJnyDp7 zECpiAhnrq`<1afZAaz_mWt^d1oU#%tPr^gR|8QcTAlnCZQ*_>ouCo-9>Bqm(UM~9! zpZIQDrBYq;xy6kKe(u}<;ak~Xw*TU@EA>WlR)+6F=zXA`b;oW)hpS>G+_l{b@J0P%hd7AY!X}W@4x)xmY9%9*ID&U zsfajI!ZWF3tf-}2__aT7zQ3Ek)pg*jmwx%#GoDz5#(2C#q)>g0tO@fddHBfdhmVjz z$@9kqe7#)GQf---A+TWB0bl|DH4s=ZF_$H-V^dWAgIoW zpgM)1W}Ho<4T{r~P&8xqZSOtF`~l^=rc$X)e6*Pxo7S5*)41TUV zeJfVS{93V&oOm2S2nc65`v`UHc&A7|W~dk@BJv83pQLG!Aieh66Km>8$d%8mJ_{z% z8BIbuRT3gE_3#W{#ie1c4k6Y>Bhx}>_?&6{|4ie7Gb-m(-*J{ZRrY~t@xrH$$P^PI z5_OQirzR#|&1R>%LNkkkIc?*k1TlT}pWpKI@1lpVuA6Ls4li!Sln+l{c3q|7UvC31!;N%>Zlp_|S)=QK)M4j~cni%P7b=;OF|&%f{*fowo@uQ* z^~H2~vP*f7@LoIOD;5=AI_E3Sf=@ZS(hn<|F6C2X4?;xnvHhPoC-`?(EiQWHu4MaJ z)r(X_FJwI=+DW3h!|QLJQ;YYST69L#;uO_a)N6d{@pI~NM#cWMvy#Mghe=F#^eA@A z_8~sApQ7HdGNT?kzT~kal#EE}#3f(3D%x!ox$vK}>EKT;ZY!6|#}LY8|8q>;``_JE zzxO{@oN@1e3AouxS?iXMop$ zuYQk!Jz7q6;q!Zlzwr6pHo=}JUbI<(xojkW^5yy6eSPq1xw?M<5H*+$(;Uhrp+N+b zNb()4K)HpG0=et9%F(6Yc)Hx{R^tyXXAVbVh2R)yCqj%rbnVR6HQB9(Ju(Kc37G`T zLOfhj(-NdT;HKeNTrkus8lo8o_9p;T(t;R2kN3Cw=K`bzDHCLAYv3{)}j!_o_KB)btgRN)Cp{8 z9JY<^U_$nJm}o$$<;R}*0W$>}(fg+mIc>aG^f%!qik@8zuz5+evoYL{viRzvCEo^8 zi3=Pqy0t}1z5`F7V+LVDTVYMzn&mzLY&IxiH=xHemayDW<_KOv!ACLzU)D2>5JyWj zejg!jEq>n}AYjMk^?89KuRH;LfXgVlk!--+77kKI>#1WB&4G@K3WpO%#;{AT1SrzP zVfu`F>o#!4vcu1=#h(3BM|8gF4BP)oe(c%1z_Wg(Rwn@MJGDm-)EQoZx_QAt%dm2#0JN8xU>6J<5doe~*H>dN ztq04=<&9D;_R>0-jqXx0ldp()rvO|kEO*2@Y$pxWtd*eOu241bX6U$_Gx z>TYIapJUZxBe#QY@XZXgobsvcnF*>{0X~eV$uM9BcrXPL^5llV#w3G-8C*hYG0#vt z!7vHlmEy4SSAq1IN|dliD~ndrYnh=Z2Tf?)s)OpGv%n+@rlDQe=d7zte6Tl-mZ0wC z!5ThtusYf6;7kOTmI6j%m!Be7p&r3%)lLSh*BrZG5?g@}{u)--;s<{t0LX2krBmh7 zL<|N0WWx@G9myExS|ZSjx2U(Gy;cNd#DtdGLqsI1#>Nka)cCP+A6T(sH!LQ_*V+XUDqF1-3jZcW`zyA;{9Ippzqc^+c5jf(Yfa0v@H;8il?ARj1LdY_GaVo+aL{!l%Ro6W(W<0f;*6> zxNn;!>Mh}!+S1xmL!rvaMO6XzdRu;Zv3_CSNKHkV@>IsTOD>4*x zwlEyLEo+$>y+r7%fC+pIOu%m)Ua6F<8tdPW?e)BQgxRh~jOJRb|3K*WYcyRaibL;ABJQ{7zP(=S@CcC^h?5rr+!Bi2=v@KPQl6w@?fx)VAPMNUbE7* zI@T5ue5`aJX%JY&Op&?Ndy7#KU_V64*YS$dAbBWW^pu z|5b}U`iql73uXaKP)KbPWFF;6o&+P}R`StbK!LFfK7U@{1r9lm`1>A4TtSE;63`TC zK;?>I(14Ib5Ko{u3-W|x6~8MGfcPj3N5Mcu!RS?38Qo4l-osdm%{vco7W+xMVn0bQ zPMtP|TweI{05p@OsgXA#?^!<5H%O5CSNXsX%ZuSRJ1wk2s((`BtL9<$s4j{n)qK z6!n!!kXis*=*Cp`xV( zs0gH_-|zd*x%bSjy|Yvb{>MA_ah~7#9>4E#VQtebm?QCXRG{aQN0%U7iPm5FIot#lL}9VahX-8^if$oloH_q~ zk@Om#F8$7y>N%raNq|uv0xhuVRSPm&o6}z7wK;e#)9S(N5?Zy7*-U*7YSnCdf-$J+ zpzN^%AB@sw8`gj^*TAJ`?;}dSpT7~S%{(K$4w0yPF!pAtzd;P+;dSEYg_<`$%5#K4<5!j&9^wfy;QaWoG~051 z{4yKdOwV2pj6!dU&macbh_sBJj{B-1e^1Tgy@rqWjj#<0&>+o$pWaB&#&L*uifpIp zzP1F@?W$~!75ik)1w2G^zGAP)%xt~n)nbL3MT$Ja!e)Y4%osas$rc?}T1!Zo9TY4; zKTmJY9)A4R;4lsM{+U&8wbogf_>T(+QXbbWk! zF(eb5^bXol9=jeETe(pX*6LXpaC~Av(cBX?C7!yam=9>Z+?}6Ze(?*P_42dltCw$F z|5MV-$6n8fUT##~V1{0G%_QR~8 z^XrAujkeO-b}ebrzAEpc6DF4$adJFnKjYyp&0nx7R>_ezYgBHd(FTY9$kJ&0=g??7 zhO0!I!Hcrha@nMA5f3_I8j{gd4L!4ELG*md#6EokhnK#Ycwi3Hzesr!Y6J7I!w&n z!mwHnED5Ss$&qE5#b`khzhc?)r_xcwRjWM#l45+BX6xTjFX~7gZRtb(MqMqVQq)f& zZp!JoL|4P-?HV1^e@ZXu!ViIbHPOe2_as^y~M&EE3 z{!$c&vNWT42#_2oSBy9tLBhKsVqZqYhy?^+jXfdA4u{jgTFAY;kP#MA$uhPvJi~R_ zjnZ^3IGdKM+JfHusH7EUe9pyG55r zNdfaL42^3wuzd#}IY~x@o=-H>REmnB<|^#!y~&LmX}LFbvvpUo(Z?c;un9~dnhfx~ z7in9Oiyx56gm=u6!pWuB?sLEOQmj%Efy}V%(xllQEA2!RsfKg#xEK?RLi{xMR58HM zLUB8i{zm}X%Ci9-t;npRlA;RgYPjxVOD@xNueeD&Zu9}u<0QN6ikrncD8Fxdv3DypI{x5QJM4XIj&_<6h~2jz^{C+_4XhGx)Ag5I<2#kWYw{ z#X=6a6^{cRNjy}x>MM(UM;CA40)DP#TxF*0^k(F@HP9N!L6-W1fgM-fQ&@+@2Q1Xg>i>)9ckwM05Fd@j^y?913T9jfGfU;K-DDvR|q+=b=`%7}wC1+vl7QuhR+r+yWqY@wVpUkfEX>95E_8T^Cm|9=(=*$&1guq}@nMg(4&?Q@uY>u5$s)R!xI zbfkh*{EEi&0h_mbF=iT2rnQOKLZ8*`R^zqj%L%5hZJ9|l;fX<$j?Ecu+EnVZ-?I#@ zxS!YoVJ}-BN1G5=40)E&7DlSu{ZxmA$(O2Ls3TnP=4>0!JQ;+=?ARpzSI_6u@M4Xk z6Rn7PVRm%f%Ne^Y_u{uLyKG<%yR4&Is?9Ddx7QkoY@3W#%0&wn%&p0F&@1NMFztIsRKruY=s8V29Oa2lE59u|NM*;RU%DgF59BR z!1u?t#ek52E~_r>|JI=;LlzWq|G`{IHvr`T33d#pA9)3+gK8s%g= zYCHonM#L%gV~l&uY-<~mXIg_{xJ5?_JTPmRnxD72_SI=tP;*HEX>{!i`(pRRj+7F_ zQuPf-%(YT@0Mb{&{;WBrRUnEU-4E2TlwT98TE@GDL_WJE@;Vd%!o5t(U)PQde@C`N zx*Kdyny{QI)Du)dt`jhS_DpzWWb&-2As%VP4ZP1fu3$-4jgg%Z!K%^npy95#tePjT zDat6#8n1dP#v=JYm0+TJ0s;~=+4~hwFD0s&26oHdUJ1Sls-$_=Xk9qQ5P^lHW_&^O z?0mc~GiQ>lTGQF~IaUC-oghBM#5c+k!$!nSC@A>4HxeilDkC6xMkTFcEO*IH>q+(T z4w&t3I?hWTaqL2*V~6@;#JaKIr>~|2wpL{LIWHUBI*r}(Jw!)9N0N}oHu?>8UtZJs z^-db0R=FC^uP1padIM`Zndoxkx0;2KM}5^A-V%14tVt^I0-3`xDv_Y9k{Q}TzcNtn zmQBZ*-dtq?@;EXP zb;Vi`rkl=tZdh$O?>PlOH1Wl3{H7)B$*Uz{jef4(B?H?S2W_z7y!&S5?kmQem4`y;_tIf)%>Q%xE-CXCL&sga)qsIMxaq zhwIc4?lj%zbIHw?+k9TvT1^w+MmF{7wW;C82iCjHmKvc z(WX1~JWIt05?JC8BEW9&QcgYB!-!2toYN0_GI$t7Ieb?w4?EI{Vs~2>(BF_D!N#PPF(sVD{SD`aT8bQmw=w3SXB{rdQlXSJ1O`@BXtc_l3 z4hh9#6O|e23j}X5Z-A7vWkS96V5nG{YON;)q+>|ZF@_L?((Jbr4RTc?8fMRo&f;?* zwBdCWsH_yy4W~I!@Mo~ut9@I<%xtQ&EaEBlCc5w6;_+>Pk!Uo!zxMiVz%Y} zJIK zy2>S7!D$)Ui2Z`mxQaIytpLOG{T$*LhT+5Z?A!uD(a>=&&Yq`Uhz-8Ef|jl2yqPg4 z$yy2p7tWh2#yKP-%ki_Mk@%rD*!^}23zW9{?H1^WQwx`Ub<-x@zjoTTJ;#*;b@)9? z4PO9ZsIZ|#2>SYXYqFI3Cy&!ShT zBZjJFWEaUo#qtsC<>vq`rgKjaAsTGCV>y`khJZ2=H7{ z;J3~pEVyAsqf~Mhy?i>eO~A>F1y4rtRI!($3`*IdsJ-S;(Tb*lwR*#CN3m81I;LBk znED4;s{_XQ#P!Oq`WLBJ=C0hwMF~)^jFbsBDV=+U@>OkGGgDKBps}nLQ5P#rq8!_I z&jzb7!-(?5i%oVPn!~I~FT7_RG)En^t%;JRP1f!DW2-dA{m*~i;ZW>jzWmUk`xoA} zgj9uN7aTK`6X!^AiC+V}Ld?-aDQ3U6YpPLt_p^gZ)iqYkr*oZ zoo~b~-$%_}`yb7sye-^CzceJQra(`F-_x)ksyjlv^RpxlhP+~^j{Q6|ADsQf-NRE?LVdkt|__u$< znHNZ!!_axT;wf715vPTrg%;f-3ZP?vy$n=u& z&yE$LW~hZ&guc1)t&Wj7Q&Wdab&oNvo^$UNaBK0qH;&hXQM3P?z7;!DTke|8Wp6CP z1N7>$vZVh_>uuo@@_x0qBUy==}crzv``I0j*gCmG2pWb zF>7c#>(63j+*!Yj=&HlySADX{pZ|bN^NSzcrl(0iE_mp5xq6BJT){`Q*H!;|`*fe^ zb{d9cT)IU=vMG{Ghf;ny%lZnwiaB|DDp3RAyfoFV8U{))%D0a?P0b~t~9H( z5mt#$fKWR>ZO0!hFEb;qR`AV)N7mY%BHp*@ys)uSZ83AS#p&=HML-b$2I58kvPW_@8 zHUvWh?Y2B(*>YY;2P#IRL=<8v$_;8Gs75mo;shQ+ZmGNGkmQ!SYaWNu&sJf{ho&7E6rF)d*{^dC^2o2SV0#-lWIM zobK7sJ{`+S+#OGWj!{+ml(S9eOAZaYrixiw5j?`?UjgZgx*)*J0Czm3(V1v1wN{D5 z-3$l_1>pW?C#U|#;ffdq?Hi&7LVh?JT((SdfQjcYtKqDE1SnSUjZ{6)5%_iy29L$I zkdx)QGh`%^v~Rj+l-qD6(jNSVdq#zU9_U!LNy!^daxQI1GsvW(p%5=vAW;%KY7$}0 z&a!*c&qiZSXY&_mE<(33UHyi$`BcfeNeaH90>WKfivj8dwtMrbBm}W8){%fg1+N-0 zP$cmtR=T)XMQ$n+CrK7`l_4|ITAEI2(w3k{V?*<(cNZP5j(md|&Y}a0g$td$?fqgP z)$jiCi9Y^gS#vi%mgc|LulvuXut$M#F2$AI3vPMv0I{mw3vSQdI-Q|MoYIat$2AWx zEZVS!c9I#|d!}nWmbYYpmpMN&4{uvN3cfj-eO~j;z)qv9=p0QP8k|!Etyp`aVXMzQ z-gi{nwv)f3=jZ<>wypMfpgJ>~ww#}^a$h3U9$xgtZ%s|d)thNw-CNIzZ@1iA&+d~? z?;x;8h^tugr0{`MZZH`yiX?TRj&D@6JuF@doeWP>JS*WH9fa0=Y=^a1Z{1{UhHXZ8 zt-bn+%dgyu?26%y(|nXrgQeNM>S;uNcdvRXhOcJY0E(@ylTGkh7E{1Yc zX5D@VPCt$Ytx}K~FEyQy{!UyYl^EHLA!vsFByKFE)A`ZgzN(>{Ad_vl2i~7%2#Osp z+#i=liHiA7hiP8A_vSSl*9xV+y=EJ$)>BimJX=g0!G-+C@?U;Xt^)WHT5f#f(Th0{ zKi`OvV+3yGcWbP6v&SnzW6eZs$ZTZRD7lS-s^eLMihyktiWLqk$35t5O}Fq^?{II! zE!+qa(Y9F2Ej$VywFhe7c$8qoc)Tt7UOST@qwMn%4OJAlHE$-p0OKCJHG-N)cS9qj z)!(b>dj@hwX9`x9i4$lzcVB9o#BurozCYHsi5G02=C6cV4&D2vbdEy9{c7D(1?guv z=eEwnv_Tt(Ww-d}nSb-B(0=-+Df4}8{{6N5ZF1xKGjcwEM>G%ydB^5&_A!T4OAhH$ zrJcq#5A$cPaY5I%M&`dhD7VJ$UD`IX=*9D8WCxm+Y3=tArCre^G?4CxZV}Old^95(k2~TvB%4=>-M^ z*9ZxH{AA}&q_f}9QZ;Yk99pYY7UJ9Wi__^~4K})7f18?Wb^T)Lh$k_ZqW8+k*|RHo z4%#AXI{`}9G2$?Cozsj1WdsKG71Mgtd9p63GQxRV&Xe0qSQZ}`Y5QA|_EU4KgAM1& z8xsE_=DBHQ+b9r@H&PFq?lmhVwCkFF4W@B;LVer{HBr`| zk8HVbZ72TalaM0Op-l9!q&o}9WkUFY81B{hZ~RA^!#Pyrb!14vUx-f`LbhWxw140E-+Cp^L)OXANmLUu z)=86`j8kb8X{XUdB_U^}%S)+E{mNcc#W8;3&7%|igydp;<)1e7x7@G%+$Is#XN4@N zBa33Ak8t3&h;>bo5b0Xrr<7#sXvbo+yYQYxxQ*_@`!T7~s{2_r7PRQ1wcqSzvJFp; z0MTLT9ED$#{jtz_iKH*qpn;uwV?4~3d+Imi?lg&3nC#^I%%EbOAk4Sy5DPs}(ZRCJ zTHTeW30KYG>}wHEByFgf*iki2%HrvKy}z9)NXZB>;z-bEy*hv#Fje+=3;x`4@4S}w z8Jw@--gymwyODXAS1b4-E`i8tvCFb%fubdkMiaurBZfkB?E+j9dQb@#e;=rV^*#5M zJ$e+XPF$_zO91&`!+m8vY!_M^YW0<-AqYWvwc)L6(7|vE#YyN%jDWA5GRCB8IzN2L zufT9`IY0bSJlq&3k3Ct6g9GGbq;x$Wy=7|FYj8!H7c)&~`{H4pUfy!HpJd#5h7^oh z(O$dg|0uimC@IP-4_%F}#wZYVj{)Kk%KDjp*u$uN;k@UCr^}#?|QF-@W&% zs-79>)_)wjtLuB+@B8lKcYhbPO?5Rr{f71$2kV5xA@m8>BA?*xrM8HvKxxARHX$8} z)rMzwD3#HM8YLM3fgHAC#y(A#W?}b9OWzUGMFa1q{D@XP8dZMef;Y3aiO?l4?`=@K zE?>W2^`-?EE8Y?L;ijy5TQrzszxo6Q4Q{FNOY5m-YWtV-q)u7&mTBd2X@<KYodP zxcHH2P}j56_9calP22AJa-PO`+gUf~u($fGJsG1g?tezRTH(~+=Zt1u6aA^IKL5Bn zOI4cBMdProCXaMO&imw%18oTPEibgE*rbk5gcNBScBV}CXLx5a$|)ezCFLtF5)vu5 zyP?sEJeQ}a=kl*w^IVqKH1}LK6}C~HOAZ>opF{SXiATk*WTT1kby~6B?~UyYL8+0Q zu8PV`9q>#O5;BF5(~+lA=Ba93I~}EWul?q}vp8wI>5?3HoavdKclahfG3!p11G$oT>^dVes<<|)ECwjz817dz*qe8I z(qz3~dZS?CXhv$*r8l&(BAQmx4kU;Vcy2GfjZ-KfJ)DslHPFr?B}q3?gn+$dq=CNv z>EO+9fmV{Qf7Z{{zXQ@CZf2=t=K{V6Ulw4TK8+IE4yl8$f2PY9WTR+36s=LgUPIJ? z%vl%X#6(&Lyh3v>N4)0<5{9*thLB$occWXe4tQD8J7Whwq^ofu#3fAHpLxPG%tHFp zqvhu{>!;s{9FPcB8UYO==`7jMU7RRPBOG`mZ$qHjGpt~kByCS?8g&fsLOvyXyN$P$ zj{d(mq;OpRxfAo8;>PV^5E5HG+#1_iXqD5)B%ROZY=l5*^TMu*57f9{(}n7U^WPRv z{)F@2iu*!+afAl@JsVqaga*;UICc3I8jrD-6m2O4GIzm$$!GIFu5%#4L4}Y??zLam zc~iwEk(DJUst^+JW|xs5PBRssT*7*I-ODm38dPi((rVZ(x@ycc4)J*(Dr{>u`(bUktbN4+j-r4+B zcQdk(Jr38|C$Pg|_?(05p53pJKT_jojfa^M4hJ(pjgLb{4cN3)?{@XGpwSGDM?s3> z#ofM7J*bJNbB8EF^E8>Np|lsNLR@f365{Kp$G8Zp*7p9Xapc=A5VOro+wjh!#Av{%$lRuE&4)qed*xdzy6WoYN~&;71ek@wYd<0V8X;a{21_>-NTs zJy0^qsS3w15L42*g;Lrb2q9o(J8JM%h>Zf~61|WPD9;^WHX&iO;~=wwDl}rEz(7_W z(}gHCB<=M$B@cYaQAn8?m-+t0XY|XNunPHB^aiWR3j>qRP)T06HJ+%z`y&E>)aYw? zhmqKTH%TW*EpImGUk++9h38z zs=ogtTe3)F`J11;QjhJv?VH=WS(qG&+}d7FvVrn;FB#0p=%S0JSzo^-03`TO`?~hI zSYHpAr5K1O4hmP`;$MG{S77~r-d}G3fj8?>3r5SA>QS$rpsPRGfyz?UuX;!O@V03m zjvEU!-Q*P5HhCh_@g5oL*aCbyUM_BUTVlh5`#2uwHAinw-iQ-&oM5&NkaWoDe$ zBI1Gz6I7Z;ySiGi3wH|!f6zp3t}u}s4mDOzKcyoS`fBp1t*qvWniE6Tr{pVAI*+mb~~!lAeLcJNt>7$nV^i z?9nWCgq&pu=|wW*$*04qsH{HQ4Tn7f-=m>8d4oXam1c)-lV+W3!G84{R^)`|HcR(9 zf0&mQS-yU#UKYzKq<9UzHB2glEJfTLKrjR)1<4QK28)$iZDA%`imW&9Y&ef$zNEw6 zdM$>LRnjTe6^vEDiSKD4>mDlux0{6VJe0W5XiP16UXSrB3USWJ48jh7t#U*eCX$h; z|Au6gVPV0>=wTHoP*m*r?PDecCnv9rrMM_GL}8DWGgLa{IW%8`o77y750Bv#8cM;`r7G6oHF0K@=md$}%hEm49CC)&8H1)X z?BRr_#v?ddvmPElaz5F-;ap^T0QYkdDO_nMFWbYjBfgKuo+{OBY;q-6bBt+4QulZ7 zP0L>M5byc!eQD{rS!@`YEuci^wqOLrPlaRV9x9SN{e%CO7J*W`d?wjJ3dIdfr&Mk@ zc{?S!WI8_c1OqT)t`l{&@^Y9Bygmd}%KWh-AG`yC4UZ@5xu6 zm86<~I`vOcy3U$dCJuda-n8oZ+yIW)u#I7iee+G@KD+x2VTzZwIFTgG)uGqow84LP z@%~m|UMn7XdPi&#+WHrTi?DRv{gTCEx-3rVTX)Jd)vR0Z0Dush0)xHi3Z^eZ{B>5h zCjBr}QV)3bEp;nZ4tVu#g=ym@g*+o2>DjBwG;RR_(dm5PH!q;2@=ENoQddT1wmu3+ zpQh)OBz+yjj?E(aoA}A%5#h5+;wMW~(dEz=`z^Sy{39rh2Yh#px|UTlfZ`@$1&ulK zqw1BeTIC(NvR4wqZIfaFfaU<_lW;iF{6=zksn`8!08_BGC+B)wUC~ww2=j`XMV$K4 z&{&Ij)NHeeN2N5!Ushvg(GRI3iq7n44SSrt!|5?qYs&`=^CHy8?++?)ob6tEOUWMuPak-Y3i!au1tjHVwuPKRU)6eh94X}1TVJR$ zYB==OU2ku2@*O@y;7N&cQGtcEYw9O{%3`7hvjB@}2o=1o0Drh=uLl|wffbPW3`-rL z+)G848`OWZa(f^;-So%PaZos@cxv>eDc|RU5DuB%{?v`iWFMBEBMB`sbRy4*RR%i~ z^pizvJkX}as`c6<4RH^*C)mI$NKY_WvtE0+SSn{jO+(?`Jnh=fXa&@{^jmG;TYb&wyu6GA@m%`t+E(cQyuLEh?|iJn`$k0FD>%GcKN2 zj}arsf4_pMdj;>VoKWm5j^(G)8<7x)>>JXYv$ljv=-#tSnGQd6+TzM^*F19sy?9>d z-ny{EQW-Yg*P)YhDHNDjM>3WQgxX{?>83pe)b}LsB4VUAR2E^L$WZb-lAZdBYGE2O- zykByn-aFGBa0-l#MaBqnK8kTR28NU&80L}eAfA?imMvROYoRew2t$DfR$M zj2CHWLXk3-Wwb1xuO=RN9=uS+TH=8hNOJR1e=RRqGwRN4l!*(Ctsq3=Dfn%@(~JJm z$G7mu8s-c7Ix6%+6DwBRdZBi9_XgL=R+yL1ZEM#LH|hV=;Q!<&yFOT0q`_v^x222O zT>B>d3^xaU+{q7hzxnHqjt>2+hZKmuMGd8>7N`w&aBDW$kDncFgPl0S25X)*)?kF4 zarW)7Lek}YX`x=?mo7P0J57ISr?>NyL&HMpJtQW{SMUGrKF_gcCdt=QPs%x_CW#bM zCzbq&{!x;!lCk0i2KXGG?!lAnev%tqYEnwhG9B%yO7i%1a_;y}jF6@$aDyxp$7#Ba zU>l52MqPj`Uj~sLduyXtOMF&S3y#t9Mjf0Yab7jKu4_Ow56MK&4px%u=7J4=T~}Hn zOP-qt;a$mQ;IJ~zGUgSJa_eCrE_zP;&19*#R(3nNHj>!(O`w$QNqcSW{!qQ$6rT$< zP#ov#O5#pMf$zBZS5^F-0_}M4g_QiBhOI!7PVJ=^FYdvkGiLai6S9jJ+p-NJsi((= z^k?S(_4Pu%%-myO($Omz3{iPI-lum#lLKQX#aiE za8`&N7}GllSW;o{eoyt5F#3hPyTL3=FFyK(T)huK+rg_rKwL`}K31)b6uZLSnA;(S zu*l?HHbQwHK#8TZm35V7S58Y|Dkq1_?%jLqwCXu?=rJJ^`%M`L$X-eSR^a^v2A5ro zezz~0V20~@=7cj6((i;qT|hAcNOV}os6kz+SkuQxG`-W06F*{V@x5s zYf6bW_r}j_DK5uLaQMPKbp^%*u{Mj6&A6HSz2Bx<2pjR^7izuEb zxhWq{!=0u}Arr3A1Or>;8SWU~cIf|ny3hNjDPnZ*Ho0#UF}i|@fA_)d7$&K{X1k9UoXkVNryJivj2XegdQo!mXu`{yxho=VhA_PCu)qIg zpA+9K*gNT>?K1IWg?qU#)|6DYCiZnmmLUlPqR~DGpF3-hOoqkC; zCOcL%7s*kR8((tI;Eo*g&@=%A%lkf#Mj-bZ)vZXoeO;iqATc)n8F?jR}x(vv!-Q4z@|P zVAUg758f_+@JI6JiL-`=hUjIxOp%&;x0r`cp^pKUH1#M4fDkI3imTyRh$nfnV~qA9 z=!{D0`=7QtF_y<^Su^;3K>J>tnV?2&Gta=%VXHaXA4MZA| zID^AFD5TT{ph!jl|E6)jT3&o)6&Y6jTW)=-Cm&@dyu3(T5#%;kjVQ*aj-Jpcx6^Ba zjA`Z>@YD2uFa+R^^%$*@MfR{OB?>h+#q^FQW$yzJztfcX*rTH}RkQZ~3nY<5q+;#; z=dq;(c~hFuYfSH6cEtxJT4-(^0S{@vYW@Dxco+Pz1KdL%9Qy6qN3x5qFOaaOZV2-w zrjegFcy@>DnSpf!RcR_egGO3QR({^t<-l|q;Twm!BV|rC$x0ZPZ99mIXN6uT){>FX znP{tF8LVrUB3075_EaGD3X$|w`u#U;Ccbwz&0J9kAl9cp zFoGI=?U|4+8d0%Hae1x*&jDxUN@`TQPJNZmSFMAN(f$`})Gj$HQ#2G-vG0tea)SdG zMNXs8OySj@lB~x;WEsxTca$U=H(9g{CVfczmiS5`Nx@vCxOX#X`auw^w z&$Xd38_>e{HF`{!kR4roD1k1=;aTB&z<$oASBhvNoe;&JiX>(yFX6Ia73<`sI6X*0 zodGT|Mk76WDUj@D?$|g9M(?W*{8kT;px@`1-^ojvl#jP!m0z7^G?5}H;V;eg^)oF%6^KFDJ8Dsg&HVkj$>IY5^Sql@4NiDDQ-vkup`_zB|P>=owagLOLTpZL8KlJ~)EPU8Gn5(?-c+ zU%zTufv$8+Y^kjiS-&xo-`F3nML}&Y%NN~Lb;7LoNo;EqX1%9WQhKeD9<4KB67y*$ zaJcXdq+SO4Rd~SYX6DZzxJgE9f5Wgcj@Kv{H8Vz>`0CRgD*TGK>lR}t!vzmDKWke8h*1^Rhl?XXQt&(_m z50qXUo@&woZD6*kq73DTM%VHD)tYWTsB~Vcj}AwCSjnkNToMY0OvO|!Idv(EW*S(2 z;pFjLQc(Mi%I68?bVh6YO8E)=j9E^krsgz8U`Z8C^J7!sq-^X*0`iu@8wP* ztW8|CCR@^nnl(AW3WU+EI3&%WN8I-6F9C-@eh}aidfvi(`!d@Dc#h66T8_yHjacJ8 z<_s^^oXFOTO^D^al*I+=k)`}QmJ?E}jObG5m0mO6As#%cb#8F70#9{&m??|f<}^y9 z*Qc~4xXPBC$R^0YwMeMJ_j}7QIhmTTQ}6xbM{P@9Z2#@JLvuNf znjM(7GsR5joc~yZ=Bg9=AHrKsk6K*5<>q6kQLk+2YkJB`;pjH)s{ zp4X?fS}OFTu<(VS#y@E(pk{(LEA%DmA#&ZF;x&&>{Pk`g+E0;8L^Vxgd~(szob}70 zmLv;k?B7TQ=OV14h9@ukUmX9VM&>7Gj`YDq6H_)Nz9E7rQN@QDb5Wj81)f;<(Z@eSfOePM+neSM zo6UN{rJpYP6QLzcGQC=cw0cpZ6OUdWEA^Uq^g3FDEv+68f)@tqbz}q63+WaJjP63M zsfaGBCWh`T8R~n5QP&bfySU6pM)KAqmoJ^+v_h{ef#BGh8jp^#8SHE-jFM%m)(>XD zb8Y=#I=vpDuaLrR)&DnlEkJUVbv{h@Dj;aWD_$MQ8XnmtlT9`c$V0J0NJuCMx$Kfn z0w?L6ncWP`%jp@CJ&=c%o?0YkY-yT|9^e(BczB{Y4v3y`Tq!3YaDsOzYLt^xt2m;S z6M-t_{?D(!o|$!5tH>U8)@6IT`+M~F{lEX?_y7Il!^`R{K7gSF%yhgp+aM5Er-)k`$r#0nIPFe;Zz+bHBa@?`4T8xx^nq`j+aJMwg`uss8|^6y#y2g?O^ zDu!$*=NALA^Hg?4 z+{+%8v-;8HYRvJ=#FQfm&HOVU>x}P=E8EqG0NE$RDr!I_rIUp=5=!y%X4m^}pp5AE zT~GETPaN%Wyk?n|EnfwH73OyM1^==;qPq;Cq7*GtNQ6AC%T?Ej^YVSNPMnv&tZo`F z0^1iA9K484SGEOQt`C{MuvNT{5>oRFq(dU|(dqN@m+4a%JzRMT!w^G^@o*fl`b#{+ z;}2pPD^%fZhepoHr-?Q>=uvGuWumaAwNnG>wKfe2f1* zk{sjKlTVrfd&}MZ1J#T=s44?8!~G3+_X{!kNE&B9qTMPEEwovw0AMkfBmaD0PUaeu zr65E_wa8>ZYk~MDj-8x;;*rrw_$MaBHL`yKAHMzf_wQKMwo)dF!*cD_osI5CcJA-- zdUr8W&_oYUeUM5FVl`Nz>B1w$IrX8~N@ey@H0fbU(`rT_ZOKR^A8*HaKc6Eq$Ku?8 zmW=1$pe0Y%9D9OOp~nq_yy)4JtufB&F%i&O_eA#@xt`(Hfx2HQCI^ZQHr%fiNFTHo zhvlw7ydsP2G~UUlARc*TESE-^V$cGbbRWI7;#F%+_oGqF_(_g8kYl8P#;krV8_k#j z@H}S^mq*f(vf@Y+YIue2@y{TtQ@Y^cHwdI=$|yN589I`$X6c1!X^f-S%bQh;-_^e71?D$g!Wl&e|L zmcizBzJ8XKFbXYveGaJEa3;fh@DF$~SFI-n1h06dQn?Q2Bb5e-SgWS;KKPTZ2uM?z zWcc*gw^~O#2+?0h^0#sZR>ghO;)Lo!C)BTRMQ>3W?7KK6&a1Ud+jnkMou%P?=LQc0 z3Hp{^p;q*2_!9-z_=K~ZA4C|4Kdaw^mXx%?UihwK{a9$Gn_b5eeg?^WlrkP)EtRNn zbz|k&z%z#dDFiS`vmE*5J*yNIu`G12Jf3NRn(mb+7^S?1l^}wA+d9JA5vDHyKPpFW zmLPsis$aydz&g2^$TiPA3O=ZN=8=gHnkEgeir3lbV+9=kOrCBL8wimSHA<>1ydRrG zWt<}`f%W#NW^AcJj%M6+hCE+n1>TofoMx4pjn!~&I-NyVED#85h16V8Eq^kBT?8>; zj?t0O8Joii%5s*9CBYujGfhba9dSUIAItX7&8@@jU%GX1PR>_zaRA{_rtS% z%qvED&&8(Uo8eV-l*3m>LuLjl|&`cr;rgm4h9J*&MA|}bR7V9iU%tx-{ zj!2S7G|rOj*d`X_)gDD!JiISBudccs7xY;DzwO}{#p#-Mh!g@OP{Ub$h!9IGprza{ z5x(%pQoYDVA0PUe&U4c_^b#G4mieoMuKdR0Za%}zO!badvu;vbE950OT`nY_%Mht zRE8YV^1>e_~jv7t|CoAH7!Li)I?{O5IwddS4F2M zohB^M@iLP&2Z&Ei!pswX4J^27JEzEM9+M%w(e#MZJ&2YLWR^&>Om&p2))o+w`QB zgl_WxtCC?#{7`6kwd!_JYzXk)jXU( zN)MTc`!$6k1tdj4=FM{0)9DVAIRSFJvwfqJxtlU?zjX^{Z+E0nYIn#nhNpBIi{J-h;&Aj4dk>TQloF=b&}#BLYV!kBl99SEw5(I*Yvg`cs7LmHb{_-V5?itIK^ECz9E zjNpyDkdo^s*?{wXNAgrb!T)|ra#gMM(S)miWOqeU10cCX;H|uwp&^3GibVVKm&m-< z7}Nx4Z?i@chFN06Irrx64TlBMt3~#zzMo%+AEx3JvG}8##5vE5Ha#=BN`UA;L%EO@yt-sVO0^O0g(4m9ULGlCnN~jJ+tD z&a=l-@E@N-$W;3_|X<_stEe&~o zn7VJb*G%2_*|@-boFb5p+Hpws;l?>kXpBmTPrSKI124fGX-bXa(AjifLjG;~au2$z zDNGqjTcFPjlb3{+LT_9mvFOpxBIUKnLYDy$+Dwn~>!-uii{B=YX0?Hi^B3o`9u$i7{qV2&IjF@_l)4BM14(5SvRmvLdAhm`oB?;X0CV;RSa%dzQZ zj-lv2+rxppqeE%M_P53>!=!Im4Us}WcLv$6)I!slJ3UjbYub??v{)z|R$5x}v(Rdw z@`MS0qmGF2{%B<2Ok=>XP%r@emYxO_+=YC!&J16#7N2fs$1D z#}X(>m4C!t1tlUx#ij{Y;?PMNZ}kcKK&CYw8%cM7@#yjc0cUy)@)0uNDtWx}n<$RWn zdcra#>!KJI=%^KLXdHk-1lM#v@`jF};e6!vgiMQMWuON`@S=E+hFK{hg!$QsGGY_j zPvZ@^Y&p8x+8nH`IU1%^09p{|kKQ?l0F?%N)o|`SD`vDtQA5iO-9Hj^QeSyBSM*G> zQ=T$lM(PEY>4m&k%8*Ujwg&%%u=e8CHRvolR$XxFIczwKjzL#`hH}}Ho-jX;fmqRX z1o{QHplZe*s20YU*K3I5aQ>-E<$0$Zv`X8xP+~ZqCRe)I%oyZTVrMSszB@n$R~5xK*fW z@TqK>9Jo9q9S|OUp|j5$L{B-=SEmE6W^T3!<@8%aAm{wPVS5lgq>@Bqwwq3!rmzk& zSCM}sQ&9g#+MvHd>CK=|lWd(P+`_%|IAEUmd=c^1zyf5CW}MJM3!89k&engY43n+T zCc$%2XLJmbb5s)pO*kOR#$BSVu=5(D)g|)6wJ+ug0+I&icDAl$MFF{Q_E8yf@+8>d zgNFO&+==EI?@7A1dedgdgF*O2pW+87(b0WkZcrDTS@x4WD<{4xXiaC?ftV=FN=^_* zug(FT*0TfkKB`V0yFy1fFH4v3Ho}6z23&Wvb|)4(aehOAK?ylD2{XhPweF}`^qB%b zc63otBQ4vp!?K#d05Z$!99>pxN7A9|Jx|dMj52_56c7qsfLUs|-uJJpXGe>Qbt2_o zyq;7}*CY2a+PJ7cDbI!;C4}O>;bS`WH+;M-6Hj!gJ&bte0uV$9UNfap{CdvsMPtQm zQA$?RubD+<)#ODBl5s|3K8# zlovr-jw3r=XFQiUE1F$re2-9XAaa&fhEDaBsP{ro_SID2a1LB@11?7~Vw$l6%N58vAB%Lz# z0;c6#j-5r~*m=+796LXIbrO!93HiKQ6Vmr*^3_be=#z#3y8G9fgdF|ao?)*bN&_2R zIa8ZOm=7fFHsV;PlteW5d2zueXobRck^!B3T$4LXvbXH+_{RE$mlFM;WodhQM_IUUrPBsHoq z#vXoBX;UFs1Ad?2Vov6W4BercRB$`G9U>~eS2jK?Wy+Bb`JwxptHhVoQnmxT0h`X7L$t5WJC;kH ze7$07A5xmoyllBdpIchUg3^QTy%+c9N1D!ycTsv#;BO;O3z~nV^_G)IlJz~L`|#*q z3y}&h633Dx9grKwMzYIE7wc$z5~IOb#sp<~h?6|N`z1?QS!wbO=eu{9L^K>7b_H=0 zl%um4?XMx6VCx1j5R{9V3fRCHyAw7;AP(v{g{Po!46@UoPMoZEqm8P@D* z4j-y)BmPQzPUPKj8b#=CS_^6yAA87HiCC;i9;L|KAr4NH`|>N|Z?rct9%YNg*`jSMn=) zn8DC_?Ha_8ymqa`SbVW!^gTo~i@%c^OZBV+td;!Qwb>kOB`Q53nKsydq#2v>5&_Wx z+m6c}iJ{Jcap!1s%=vUaIq%B*5#jYgg}^_vOn+2|$wR@acSfb4USz3M1w+z#*V+Vz zKhQYE$;fpj4Kf*vPZ*Q~r&uot-2*4L7#oo~_aiGsF3+{4rVAJyGoPwK{MH$1B`+o; z*Ej$V-a{(Y!Fv^wKa!wvw4(kkS&9c-48*5vlH7w}d$utk2pG#(;2ykQCm5_NIPmvq&w^4^FLEYlRZoJ3d+<8rF^o+i z5CCQ4Zh*f{zsXaW%u!({5u2*^K!Wi{(P^_!7H)IoC$HAtUe)DQD=U&}=af*Q$ZULD%AoyOa#V^aD$S{*Qv2R1p7 zX!5cLlV56i!@2CC?MTg_1v2phvo)9)Bj_}jJ%o-&{CY&j5}_hS>jec|Wbo1ntUSX3Qzvu<+P(<~GVVWeODMHbhbdLQ z5?0xZW!2b;e25}%R0%@#6#Gd`_25#~g@UOL^toyGUGR_3tt&UWir*M&{9!OpQ0dxO z2bb0a;HNuuW$*7d$!v#uDT(>$Lkkm0%+H^f%Xl|Gwvl++xprV6I|7;fv;-1cYUBjFM+KF=Rw20>w}dlOcEp6Y0c{lh49;S&xZ+^ zp~_{7m_d)_^z!Bc!m5^#*w& zbYFkbYL*#V8t&^qEas~41>k#?Y7HC_G0AWW)XB9Hp5P;xGYofnK|E%5V5nHG!kWs# z$@@Zjkbt@9YiYVK%thWq3#apux~K1s;A@WT#xGxtqY*I%5PzY`bB?+eE&Zdep#bby zx!xBHaMd(kEqmlfS~$_wIjY8k_*4W>9d*qZdXs&>Ud-9fmi_&U#oID{a^99hk59te zG9k}ytGDHOiXL=7o?-eg5;0l#_3q_5%=kq#%V!a+exFbcjp zA0>3t{pviVJZ#-;Y0f$l-)dym+gJl11Vah)Kk(nhG8NY_`0jZqLT<7hnYo~4g&+*x zh!AfWR}1VNq|&Bw7!dXtI+ORl%5o{lMjj|Aqi777Ee8u2I*z9_AV-~~(yc#SvKkRyR2+jjv`0N!`Psc(PcDn3IuJuFG#cUKE zUD);QN>AKDRL{GV19zCr zf_QD=UFdil#td{X3vXkaOuT3ns;9|P(dgOu)&}fd>nrx{x_kOB{$^(*v*-BdR+X|y z`vG%3Xaa9B{|AVom5=Rwaz%yeT*1{H%R;yR3v0@|?>=QaeyA1X2Bmm(FxdRVZy%tS zzz>^A+gJxCohX%9jP$%c2N$#vah^3{Li=%j$8lYkhv#cumxt$N5f@P?!`F($aHG>0 ze?qBEkO$#P|L*)C*DvjeECm~nn0dKnF% zR)eK|yKXz-;-4ycob$yGX>=SpeD?^_tKod{+!%$fS*Lp5$?Sm*Woo)1``8!H#nItw zB6>+t?%##AU%+sHGog%NE^Y=^SxKNs!fs1+kwnvj;TKR3;SLPK!5?FyFo7KK*}B9Z z?G$`kikch)FKoKuBV1*s;f9Z@of;_uo6_sxhv}9*Fe5^?bY>F3--H1frwx|_l`_!h z5TYVEgAs*nMo`r!b{>K+ece8yWMdtj&V7QvkQ5KoUIXfQlxQj`u zu7oxQ*q)WW!5I9BmA?-R`Kd-Wc_5^k1X4rd=0kI+rg>|oe%w>#i~*o8p}3c zpysKu#<9|kWLs3FXnC)J*`vb^JqlFx&G;VTR4JIl)I)1^4pR?ZnD=c*y^ywmAZFt6 zntZ$1TtguNt0f(wIyaLpx`4$9kCtlQj375@Mx&%eE}V#9_N>jpP3$6D#i4a0>k zxB*dj6D$WX(2G}Xh*qwFCvjd@oVWHO{Vr<{mJUJgX>le3VtnD7|5}%PhYV2k&bjkFkkv9nLn3k zLD5U*x6(tn(`M>coOY7giZK|?!|TdL5jXtSTS*pGyh}Y-gkIF_GMKK=y_NmQ@}-ue z*A(_=>`7pkN@s88t()3NlGDNBrMd_VKQa#bPohW$VLSa7V>^*tk3@4en*je~T~-7r zZfC3^GEQYAEeO3?IZR2bmP`4JP}2!xd=VyD#5jg?%QI>Bl~1a~k${%e+;l{)2D}%! z!-+2k6eB9*r>V~cuG7klB+QJB6+_VDgR7j*nwHm6$vj4=E)&srL8)A%+zfJCV3LLL zW}dw?9j&xN1t7m7lwZWwk6&KpSNx*g`l2xPNgY|8RT2KhqZXWR?{8o#Z!>{BC}FJFFX=Dmb&?(Pvu4IVWK$*{TU%$Idun zqos5s&hXpH+?tu$w9m~JH=OGjC`gU{)i#}7R6_|OW(Wrwsj>A>!&|mDyS{N?d$1oD zGyNT9g8fnoPCf+(wZ_(48T^6mbi^+QZEDaU^|HsZp_zJltAWs5GD1)vpPe)@?}0FF zqSj^?RhRn0?3&v~z(tLb5lcdwJk9|2FAoUt!^jSm*!9W&mTj4j z&{w2R*wR0}gCwNWe06<43WSV39bf(ZwH?CG|s> zkvU8VYGN^D$|q45e_!aXc?r#}H9u>iEtgMPAFh@WHj5_=k)v}KqmUUF$uL^;l9Cz_ zTO#NZ5vxt&zQFc0G#fhmW`SmX6;(>z_kOEqHuk|csST0Utb~2o;@WPpZ3~4hypQn0 zy433oz!GgX5O()*YB~hM?cNR!un(4VQ(tOC!jK!8a1yn*^~jsCs}Rzml@^9a=0ecAl(`Q810-92w*_htR? z&-w7r74+~x_q+?rgXQjd=gXYIS$yuf_gHY34epJ)9Ak8tjPzg`}`5=Qr-Q*NHB(cO09(907Ia1!-SpU&;56=+Z= z9lG`k{gAi?VR#Gw{yz`H@H+0m2|wN>s{Z}4vBAG#bbN8?)_+31A`2tlIAg~D+YwKq zlwju(XUij?m>jm{`sa;q5>@)f8y!~>KWxJ0&l}$)N&|KtpP#F#(78g_EqYq<)i7r7 zGtW$&fL#S0UR`?on?GBdKfA4Ya>{taQ`CpOJHeuaU#o9_`-`;wMfNd{r@$qg5B2tU zVS#pGL1GHPE*H4Y)J(!ed++SYlxajVllHTsTpG!b(qAAu`7$VNV9Fl0vtoShjp{;_ zYs|}A$_nNC+uE6h+L?uk1>k3@IgU!6Fl}0e96&@g^Y+h9#}08nHce6Mq?iqXQMEmcju-&`ml@M6m@|9v)tlK zcI~?9^=U`E_k|-q{<%j_UXH$R=a=aDK4RY&E}wSHwByEsagS4?>d={Item;W-2DzO z=NI7W8NFLC-#YCmxPt$4yj*%708d68=6?t}Quq+9xi2{5AXOS`D7=zUzZs zo9wH@JK*Z6d=;+PSKoI|_RfpU)h>7|Ts&p}hZm3X3*di8)-u&%|NNzk4;_Evv-=NF u3C3g0D;6A@L04y7@DGWr@8K6qC-}v0Ogm!U!PEiz@BaW7K-j+@iwFotMU6!O18Hw=Zf|sDb1r0dX#ngzZEzgLm22-BI}kz?pMivr3?^Wk zNLsB{GX4N!VarBfTaG@EY-6Bzws*Jf*_rixNM2XCP)Vgy`PfD4KDGugbuvjvFqI=I zimJO4l({N6AaNiccjS@^6%sCitK1J!s4f(D81B99-klLhvT_$2Dp*z4?(}rO_xgRm z?kB&#aKRT3{nN$kBk&XbkBhVcI;>fqTku@1y{&C^YofiiJ-IG%bzAalFk?Yv9zSox z&*Z^EICDVn+BMf`@d4%c16n+7xkLwOt`^UEW|r7q-XI`=xRtd`x=)MS0;0=|G}V%8 zwfKI|a;XD@z|pm%%7Z}~KFa`0)& z&x~OK3iz~%?lL4V>oG$hFlfdNJ=!drgXcUmJ%9sp0=ak&G1H1DK$Id54W8us`jc8N z9z$=!!vc+j;o2lk^TY-YWEfJZ#kV?!pt!di^hmLCXPN<{#m082A>gP%9S0T}YJmmt z9QF2~{7kF{spy`KLMp=3YLt<+kD4iB!y_;=0IXYuqM{NMEkl6;%mkKS-3}iqzC9kd2&=RwC) z2D~B)1W{8+7z9y7kN^~sY$9m-4K`5)geo9341@-YnVQGcJQkkEf_W6#WGdvAT4bq3 zR(O$BpA;-kvk@kS6q7u)-c#$n@Om#;S5)s^$)sZa%^vW<+T>8!U+yBCQXwz7*+O3j zaljRiIG6x2lRP|#sqyQ<0mxaqNFlQcSePQNBLMFY1HOS8Bl83-riK9HGj+joLtc9Z z-;OA65hy)Z8dW%)X&ZrOj)o4UWjkIP{gW&4fp-)2)+F5#b6x$@lEiIDtKOIZ3k*%}yuiwi`v3w(i_3VXKDW#okOLOza~KhU#0TIa8yc{Mf`f_A!jCYL zM+XyD!s$@vc@MaT?MIsXVaS^YtU$H<=Be5zhZ!i|t#iAjE!zjRE!2b{WN16Ql)-duD}%u6 z%q^X+2K)`G#vEaE6sE^}3)JiqlXh>w$__&RX69;p;yd7Bn}s>fphJ5lL6}TTCW69n zlcl%xyO0piT^o*HyLeA&s%hCzCSHs*ZFwm2VJLXdA~ba%(f(MEWv;89b?~>_(Kva= zvbme1Ja1JZU%52x8I*%=^8#`8%G)Eq&GAtiG{`QGf2#Ck34iWdFtt>`MVKMD#|Elz zz0~Vj04R26H{Z3mw2A68 z53f^Wx2>Tz&S_6Jb1d)y{fb*lQ|DcszJF`v?5SkrY(Tt-P&?5!A@&o!-+kwP#%_9G z+IGes8EWk2Tj$<$xU|tK-2KRqD44j55T-7fxV1AY;lsZru5RZOZEHK9x$`KW05X!x z;8zD9sJ(r`Fz$rk?BgyU8Nyw*mdBS)R7wLNlj@@3jx^$je3Y7p9~p8hi-tQH5C`SV zdS3J`kL$#&!64K~;2><4f*h4I7m0=9$d}Z!OcBRCGfl;&d>}pVa4S>3uLO_P=+wtR zJ1f!GPACQCQbB9csV1ePoH%{~2b~;E^Aylp6p%JoU=KhI@3%58aAA}~+9O9Tz$e1` z`U)VR45r(Fa0K=No)5;6Rqa59;IqQh%z^JKL8Q1jn_C5u7r=J>B8S`t=pXUrYQd*N zl25T4zmT>LD?R~jpb-ua7?S496i9Mb!Kd&IRmSC`P@V7;40sOBct$gaxs}+BUmWTg zxS@A&0KN`&ZQltb4^`fJ<`-RkeO=oJcCN3+Uhc(%8?bav#bzXIOl26L8uf{71HCR# z413$w-REz-0ahYQx~}ip+B2}T68rs|u+7aq11$i3dv||-b>V-1XEVU+?c-g1M-`{` z@qwO=gIl}$D)4T{VBe13{_a+o_p^RVVd!5Fr*aaU0y=axX?)RyvV=9$WeJEBi<^+| zsNQ+YraVnu!VCwvdHz}7C{2CxJJ&867FKa~!z9~&*p&iS65TD2e@uJ5G}qu2fH232S8}i%X7&iB`1BheE*;xwnRg#~+C|Yg<-cA2 zqsjKb^(m%Zb+U7@@eB7ZC{1Q@VTzb$sP5`A#py?*@Y>4EeNbyzHrSW8yG?7;5_`1x zMs0TjzP9a|S6x(^(j@DZQ&Oxyo+wv7YWzr4M%7s2UUWiMsuKBr1=DD*ikh*bmtb8p zxde%&Ky2wyH6%^X>oetyEdI_x#f<^+tYHg6~4;y`Y|lSD<=U1IdGL6O}ht zl{Xiax9>V4tkz5KkY+6S$UnayG(&K-LvVD}y;sT8m{Y^iS?d3icq&&eKYQH{FdyU^ zcbDlLPZiLz8YO>-cW1?Z`F`Ntduj#mfy}0v0vZFzOdZiIQztaDNo>Kt|K=}SVnQaJ zr`0nhL*hsZ&!kSW!j^LGxBs&F{(kya*MV_2W*+8|TYmX+ON|jI{q`$zFY0B^z=$Dm1EF1I*ab?KA`{(sNy$BGGW&w(D0PJR!da zg6aqfszV5B+VM2npg27VL^EdJ^1+kLpHaSR%H{I-rI84P*oT%sktmnHj-6l&=hF!W zKUbZ+8>@YO-B?FXJPIHLgj1Y-1Uh!SL!=+mR16alc?-wip=ppHz5a(2YwAhJWzSrF z8cd=ioP>0!Bt+ip;TgP&OG8{8LaYl%riISX8PoXxnZ|vmRL(PBbCx<(_JL{f!l#bN z6cZv6b&$TN#>ZdFWF|WUGYf+`Y44*1F?IQuZhZQW;lo$gO|(6Scei57$0shjs$8xt zzxMD11jLi0J*kmP5YLG#V)1lE@|O*4*Q^*sY?~hZ*9qb@VsQ-?1UJVRn01lSd@SHjITHiKIQaEKd5Lrl~0jv2qD2o_kQ|};NM%dIPcXv z5^bkdFOng>koA!0C<*5dZ@hIzEk0;!(GgOM8LF?a*ZA6_XVl}Aiv8QCC5h<@l9;aW zQS6rOgM4~FMZIBVT0L}p$s-9U8IjWQ3%;>D+;A1T@Sn5k;IGbaEtN{g5XwdWb4=a) z-x;aj`yVSzyZ1lxG~TL~$Cv($mnI;QF=#b9_VXS{7NcX&i`F6PVBIGEWwckC7L#$43KBPc(DjpqX`KD-S7%YJk|jC0cR7Md(((;6a*Pjjr13=r*M$_9Zpf zqN`ZW5^YKp7-2W#`~4m^n3x1oX<`6N=z)Sw9S67o$+zQ)elNc%V3gC;%0Vq`n!)}V z;5Fc@-y>j;mQ!8$!Y)!-_`*(`V9ygT*euUnHsVA1^1{yEUU;=a-9G?`8q9`i4&{{i1b83Wja zOoC+r9xkbA_ER2k({L;<7-|&^(ToH869B5Q#c6=cY;M6mM@^n$rbz9fin%xo+!H-L z7aP>6#1@0GKw{+(n*mF8+yXOwAOPn2F43|3%FT(!DIIkjaKK)xvBB?#$eP|ez?W5G zgMTNQ-b@P80bu(~%O3?2neON6)Zios>Y@U-EziZ)M^q3XViaZ8tPn*Xdu|kUCphTT z32f*vY#ZCbgzR%L(STB`5`FB)%oJ!u@1H{CwDKO&--Meecy__Z<|Wb2#&AE%;;W06 zJOQK<7dTvSYm1gV2~VJ724O;5VNKnd`m}rNR&d6$!_TfopZ#k`biU~f+y9D{=(Bf#ars!-vNRgtvv*jgQIyz2irNB- z+9F`Lgw@9fd(y$Kn)%d~S8TlCaJVFQj6~Z{rBdJKGCZyZ@+O2d?|0$FVSKUQ1F|bI z{tpvEuaKSnl=7}Z!H3PW10{a^GoL9}md2M))LT4}mr@I*BvhLcLLFfaOMw-D$naPk zx71o5Kljz&Os)>O_IGqa&FSBp?s^0K`*G}$3OsxTLQK6y>gXkaTY2mbWlO_Bw)pF?9yU>iD32GkbJjo#ExFn-d(g3@cmoL3^1AcEPX_5#Z@` zeKq>>da#^q&M4NRFRz2y=q?pA`O1)Y^1-FTa!0Jgc2Zx>S_S&;3RMGdhK|cw!7~&c zEQkXT^$3(=Sv3|-WSMBA1TI9|ZRQAWhs0rnar;Hox7HfW=#lM~IuXX^%fAb4VF5_# z-KKS%VMHKiHCiJnbZoU~Efx0iKH;F<)E6E?n2kiQjK)TWS#H2Aax3Tt-^@VEDWA-onxL8y;Dd;o2m+>$2U8#+Pi_coOfuM?#wDZ{ z^9;2U43pqpDGn=tWdiYR4O(lA`f-c{eCz3UI ztarHOgkm}DplBWU1uln)7%5$;AP8e3YMkhY6Xp!-TNFx!(^`$v{}ibmC$%X3LyBdw zdCpb5@hyQEyeFDqJ))phVh8{O5naAwr&I^O%TVQ&5Sq*5=WTYs5{YCo5x_Qn?&Uu% zm8Py(b^9&1M?M5T_d_ZLTlmdVY1a6!R?z<*+?=F;c4%Q73#SGtsUtWuo)Dlex0vB!rk*nFr|S-Jg{=Xz6n)%8c~IZu7ArRBQ1KHeusD(6pqP7H4}z!keg?A>o* zENzX}hpRZuB_!Z%XhG=BwjBmN@Q!i$reA36jITE1$?*)pdQ8ZaD~ld`ab@08;d9kA zA}h&n{+pQDoi@yQP27fwUzW}_7pHB3FjJU;A~8PHKiiv)L+^q#AhLl5KA9Xe5DLaX zisHU&!uSOsx>DuZXMZ>$oijS0#JW<6i^Ki4KuZGWI=7zi9b?#}DN^x9DpSu*BwCT2 zpr3_d|6K{o^uQ&eUKzCilc4>TmZ4QjzpBx`z1UgLn?{)Jdc&z9#8(k1NdrJ zgftA)rp3dt8@xvoB(1cG2lpw`^+ub6iT)rz!5ORr3wHPm5RhK z|HeW_OQ+uSD}6Q^;PD~IbA(NBq2uMsEw{Za+;{SiM1er3t>Y9dsvrdhGx0|&vE=Jk zs#eF^EaHxp@+A!dtC%U0mU>$;Dgx|>NclQmLHc4@L&!;C(u75h9lc}}$olNg%aN?; z!|1wd(T9Kij;MkO0235a+XR`1Ig%s(h`5k^_}5Td48!NI>bt-p#}R+p!-y*gQA7fo zd=02vIRqLIa0o&P)Mb8-a4g`5eF2D%!f+T21QQHg`BmZV^x+kZrPzG)q0NHL&mU|A zY{6)i;{?nT0v)c!o^O^>5b|jJ!zfj8o4je*moJ*QWh>ehkZNrCmjoQF60txM2N0oh z5ThbyZM*=9orC|I1g{tAsMFJE@llL^Q6?n{kAucsi>`jck_Q@gCA#{_JeU9f0abK4 zn9iBOo0c2|L|-JP_~%0ozJX}NbHGA>nBmz@p5P$<0TY&htqR-9E*&k*D5}f^lbA-W zh_wy;LesJSm$z$=k*mD!X763VN)%#h+!h?dLt=OEcpR^J*}P)5HeNq~V#3k{V(!k| znVsy++-2?^uh$~sQ4y%nS_~IYK0GE4HQ`kRCOjloD3GcRtpX-U5owiFC8bS6MN0`# z5lBhT@0{qYk9Y3ld!Fa-obO!4iwr-Lc3U@y>2qTlYez(W?`m$?_+Lz1 z`|l&ozJI^PzO*F@TxXaKtG=j8`=aN#W09Dh<^doQIFW@GqAdbpa-z?Lh*c7rzhWY(6 z*)u#{`kk*d3dX3C#G)c}QfL#aR$#O?C%wvR^YAsycn^OyrB$29X4-Kur^ZJi(QLYc z6R3%z>apP-j?y+8xzKW&=X4Mq6K>}|$`XNw;*^G12pYIR+sOEV6${jM)ge~aH$Qss zDOSR}n(HslF&qB*>z!<<7bF&Y58mD^`!`H*JiJa)y;S$cM|raFX#Co8BS}1g2Am%s zlxEw`k6&Vsn_(`m0CAyr$7d9SoJ3krPbYrWaez78_ADiwE>e*J$M<;0;eh=I5OL_lb8DtZW%T~9| zo{vs0N92Q(^+7wzW7orCH#ZKWdLs`Hj#>9(%{?_%lBrvk`6_LgyYn;5FZ}!NhWQ!u zHOx0{_$e9YW3T1JFgMn7IKw>GVgM80`0UBHx!G||maF4ZV!?+kG9yXOGi;>w78#Yk z{V*Hb{CcT!y=}U7TuYm@ugbgVgvq5&A{~#}&v>{?^A~W64Rf5EHHNpbYr_M7WZAU? zbJ(?A^Ht(4kVW~RS~X|4NCqA99FnnC4L!4eLG*ml#9qx0WW$KjI#UvW(&P|vz<7Zs zZVOq-$#$ByF>$cUo!??B(vA`z1~ z0x=Uywe<~d{UA4v&Bq;%yX}11#jj~SF(XKv>aMae) zU5qqNAZg0ybBVsH4DU_ycw@g%j)HoJsx+HTM(P7J|BeWRyYSyx(y|`fp-^Rq z5O_xFavY`QoOcE-SKB#n6*rRxJjg|az$PH=Hm_lpwN=x{_jz#EKDi#gae zj)2`yAu0eT)BM)sz9-+}GDyV4M5;MHbj* z#@(jNqwpLo5RHp9u$KoJIjKA|pLnLj6qh3{RXEmrgPSzcc5moqAFpP^k7c-G6PQ9g z8RB^_)*d5QKOmC{@0cY;luNPq=YHeG#JM5@nc?4M$;3TU+KDGJP3PgG5>POX@YCE= z>;@gV(F~@?8MfWaZWK46l2AL` zHd@v^Vum{82@Jd>ad6^uji|;&A2X^W3%4xMw3c(*J<=1Y@)eelG3-uXCGjURfY6ahy0HdDD68#K!p(Vg*dA#Lh?R@e&e6*|-K7r~P7-7{jkWa~) z$XQhovJbO|BEOkIlYtR1g$%Z)5*k#$XBtd$)>c_G$QTVz4oYd~DT$5Jc6Xl2acU#n zlqKVpF;*Z$to#F(W-J8|=CamQoMqKJum8%@_L9zimE2L2}vE(FF?9SMRK!T1EW=P|>Hz$>$Z4zq6^&dG@T z3uTX3D$FFWXjC8Id1n}7rUPYKn@BwLS>0Y?!uEVQMfSBXGl?cVacHuMJEL8jT4VNm zmZO#QlY}AcW$Wj36OxJ%&l1+cNU+_{bXk~UCGaAh;(|A4`*`NbFe>NACh5OMv6w{| zYZRSmL)44%qvKw|_+^C`zG?YotLE^_y2hnC{IY6iv4Pn3$=IY^ykNoHmRuLRa^I)e zv6J!!Y|G76-(c5$u;d_-TJEwOL{i&bw%m&+ka40(1OTJf6U4V-GT8Suu$jV;lATdT z`c^?>!kB<4b1Qyd|N?KxHU}z{rxV(I7eiGNM3Ixa0VrpOLCcWU0*M zTXY%tzQng!B_yD$Dj*kUsAljk&Lr~cb-8+)cv zPIkh_Gq7W%oKio=xyQ_|=s@yJYj6y=>QsUIXAM)!^LEeP2F(g)E*T)rp1o0j60z8k zQG!^i{^6LVRt671`%2!QHK(i!#n7Ysp&FL@YvNVQc(;Tz-`A!Br%PUvc|9xagz%Qx$cdG%H+xj2%b}Es~F22veSA} z{k#KayIYR)qDK)w|o!j5wMXY=dpu+L*19x za(=y&MyO4$rt|AbUW&fZnocgh)P$~PVdQatP{&&$j?*>Cq~RdL9HWv7$|jki9rP;$ z`vogo?c#$dF;rt{8Q3BYa>f)KdZ z>W#iRUe`%GmC1H*bPL@>z5o};OI}q4e`$?@C4ZMXHjF1DEVk|ecC9;?D@vDKgeok*<4lYnI4>L_5Gt><;J9`$CW z-(_+wci&UAUF3RCy5asY4$?&9~bc~$UIvGpi9G2Ab zBF@xa#F6v!BCc|~dl6@S+*9F_Ez)u?*jpnWBa5KzUT_aFeT7}9!X#ZS=hO6NC2OOX znsY+2*hFQ9`a;25%o`vj?U_(-i!f9yO;BHy0n#xf=P`zmiqaaePZ|^gA{rLYjLzbd zAhh8PRH&?#vQ4M8s^ry2VDFhikPw3gk17%gO&aE7OOmkx^c4jy_b0#c8c{$Ry_|2m zKlvc^iar-ZJ%r!S$QzPRBtIGUxtg6tsD^Z=T$&-LyR!(U{(lWA<#0BGVm256r0fy)M1;3C}!w6=3_Td6S(a>=rIX+LlkQjVp1ua|Kc_U{y z$yy495Y8Jb#yMP`=LA}^Nc>1U?0zSOg-UzMf)WRiS+Pqo!uYKJaPi3~kFY1bpKHU3m!=M7i?Pu7?&^>QmEF zYxZXk=(gML&mLS_W1Gr?Aw@9TDX@ab>O!lGspzEY4+{h2St%|IC7C8onhY-u zOL|NPFq{|=EoaI1I?lb+0ab;Xm9QPU1`R8uQP?QB$nuVQlEpI)qL3xYg`mpuEP91H zk{moNcCOWP@Zq6k1>;Y)m=gVIpDR81SB!=tEngKhsqf%*V-vQc4v&zHerM8R0iG)= z{5Cwc#OQ{VjZ!OE^zzBfHU%eh7CadzQ^j72F(`G1;?AN&Whx4Oy%pSWPzmH#3I%iNWFxheq)mXR^RE~Rt#P%+T1H48Om2pY?35p}u7B+40n zcW<;RGmI!-qS)m3p*hT&?83X(!*bMV+nOk8+T`7CI5MCy?tA{T4(DPYan6GW?pt`v zQZf~eTyVrtL4qUYrO0#pE`+0pTFicZ*Hp9e&Zh^{vTJOZPu;oTiA&#ObEeGIv&nLC zcfOvqd@nV7&40AY^0r79{nC(#ni4e))lY7I^Xk9c6UvipCVKVL^|M=}I_J5dxiA0o z#;y7x)U)7Gc0N5A@G%iIkGo;#%LRG45HyILldB_gbp++*;-DheuYO`YlI!bsL=`To z?TzS8E;m}1wMmdl2zm9Iy?R*NA4rq>Dn8lim3U>Fu7b_XdA68zqpz%_icIVk zIj|zs46_i6&_6f6)ipC`YU*I6;W4JQ=&XAL+*-%5h1ZFlXKsy7y6 zakpg@8ht6K#Sjgpsy*Hzdwvypsd)zksW0jyb5`}S zC*Ox~@q`r3H((1*BB=XXUGeEVL8DZqT=aDeM5Q#yk+HmA-p;86!%v0{F@(IZ=?p*R z;b3bC)z%f61s>UZ6K%Sjn%*6{QEXDdO%3RLnC$!H%BkOg9+2UMjR%s`! zmT-VjJ3npbA1tr3AP#EyXu>1w>`syR+j4%msTQ=IA8xD!HN-THBXxz9(-oSfJ?qd* zyYdSkZ*8A>K@-;Y`?2TEW&d4B=;v@<%%i~7!E~dR9{9>O6K<%{-1+a-*FN2!LCW=a zzCW!iN@2AQm99ps1IMi+rh1k}Lynps8dBKU9S!Nqkh9Pb3&|n+Z(Nu<5N)S%!3-aQ zp@B|c9=U7GZWnLkVa?Xb<|odmT)s5 zAXI?+pPhX6H%V8-C}`i1H4yQ`@!+y$atN4Y4vQK-s(}Q>8oraN=Q)DdF4Ew!*cNiK zTz7^eiKOjY?y1!dT#2j)zv-S@W1t5%R((1aYEhmx^#JX540f!1vH4>mW z#hZHR5?&R(sZ5?EdC&nvW@NRroXVuFK@TT}=27r2J{XLAjRnr){Yyj&9l!0pawz5R z{_%-^{$p9|PI@fMe{Wd-pQped1;Tj>uH3ocrU&+usJe5(t%aMXbM%N)*)iw1<`IQO z8`jW{GedjVbgjqorVQ{B=SSw@ZEHp$H%If&Yq=TPhv{niyd{_he2SzMYfm(6^_j=} z59`}@i+3#g`M-&8t0NvL&&;kZpHEo1H&tp6E&lvBrlynf&9txX&1WXJ+wRS0^vkz* zkk}){Rjzna`9MlHm@_YmGVd_4<*)6pNfXomhIZ!9A2{P1sH(a=qp%QxNq?@coV#Q_)Y zk87jEQo}L@>1Q)hY||?fJ#Y#8`vPp4Z-@rrJHfIAz3>oJ+BLW#k;$m2(c- zBkSM*r3)Ex8o55%42CiagZfHnz2!XF5L6lIylv;n?G-GG4~(?)tyssYxz)j@^W=4D zd=c~9ys~2yNXHv#L@oE~m6F3k|1J7n)P{_7(|VgC;wWdH2nUs{Vdt z+kJC8$uFOj6sZnnvWKM>jeuMxg&&CF9*zITd1b)gut`nm907|+adil8n!kN_TJEIn zs3SCm(V$fi3c&qOiHy||dp&D=CgcRb1_?97bJ4QqM_pSeJ)RF_q$jU=yog}LX z=hn%RoJ@|=D6&rDiCRj|O4pZCn+KG=sETv^B$`JY{Dhpv_~Jip9%#E?{JBjcs^3ak zP={8<#vb9sZBgr*BB9c?!p|rE3=df4q@pm{%|P5iWtqX|b!aW}%`bk4IC&!y|@5bOi%k5_(W67Jo0Og6%!` z<=uJ|szFk%;!6VgVAFkh1AG@+8*26CmLUj1d9~xMi_pPwizGotTT&5OB~vwg|`QFiT7Zj{&E*2qu@ z0owt3i0$x-y}L$U*tHFQ#5U$(vIJ~{ZQc}XrO|p=t!5cX#(T`3asp|gjW>uX>KG-* zxCI*%5=bC{if7;yXgM*Drom7+;gth{(?Sl%G!z28zkBaDGumBSf`3>`qxoL<`@Z}5 z-QVTVJY>Myc!UY(8Bs81MI(6;iks?cdio9RH4fGZnM3FktVKS-J4)>#S%KjV57>ls zBvu=q*`ZWM8)}SX00eT_%31p~U7Cg6r!0F%OcxEjoBAVK_GnD~kqh3;+9pDmyu7bL z?Yex!e$|^6T&#FUMT`hJ{OI{wwgTB4N32lM-H|l)VHG0kz$iNIuTN&Y1o-E-Jju|$tb6QOqZ0exJXE( z-0p@~vLB+H}BeCM0AkA*UlxrOZ>+x^^aN?_T@OeQ6gQB*X)eZqYGHwW`s#v7UzEEx8yq zF<2cS(R0=o_G2tJu&M}mjk(yc>FpeGpe{Ysw@U5;u!K*G}xDS zd(&jSUwWfp;%G){)}=SJvm%-nP8LoOAN1TldK;%uKzcYMGisoNMM{!xq6h(d$w&iz z{nMda-~z2AU;k`?%YO%?L)^kr$Ibj3hU;j*(FUUsGdMH|Bg1v^Q z0hzNd#)*lv4tRy;T#k6p5hM(2Ck-LLBJM`FVjb|Zq<6*+en?m2LWoP4v_JENX_$rd z$4AT0Yu1my5jh|ctTX}|MABKZp}ROym_|tOM&E`&vu9YrFiF~;7B%V|*@b*c_I4X@ zDINWPc1Yp4{BtMfImM0J%OE7Sdbl;Vv(PH1k4ZY8&DjWn^5%tI6(6W^zorY-N$0;U zp8QGYzZLg|`r-%;_IozA;0O((gK_$bD>NQsEiKwo31sfV|B}xZd|c;1f`bwvmE3DT zuk)sgO(H8xPE;Z!;LR>0L7Zj|%w4B|8@xIx`3BX)dr1S+Gx zo6iQOJMpY~%r|hhmms*u6y=?M*c{RpFI&~N;n+M05v`V88zV4QoY;N&w@rXI35Kl ziWhhLKJ}m`p3WVj1kKZAs)pKLqzZAxB}s^{pC02Ps9M_xrpJ+Qw@UCRon=_S_5vyE z%uXGWESnBD(<55&%=)|0khmWI;SU(3-mlx6 zGWKA}B&RAI!$3?)=N3+BcQAy2k?p9#S0OeEm`wCSI-opvklBQU*N%hC3aZeEi2?&z zc}y3g)R45->y$hYB1a)*rd;Ox6Q9v9+h7&)t>_I^lNSaiouQJvaBDnKf%iuQ{;1K{ z@D3xf0dJB{kXqhs&c7VgV%m2O*L`u|M^RvR$%88ueo&qh26ivmu!{q`S1$ab?!YOa z87$T0N?Re@wdBeyf`#@b-3N^mW9YKvW@iE8;Asq2u&+_I;O&f$YWW)~NuNI+8`VA2 zbX5KSN48{<#`0G`d8HoPecQLR_pmTI61la#oMZ##?LIP?kf6EJK6JN4{Cr}gQ!gEuhxDMu?-qgm_-Im-^xi)7YQ&xBJ^S#!1<4to^7M?-P)27$~g%?{lr%{teD{pvTY$O+GF zk?wVUKQAk?V#9E~ES6J9^cs3=m{bN?inuv|UXa#l!B>CRji?F;>;@12@<)NrF*0~xYABuwufg&d>@THRl?cWY(W0ZnHzG6A&mhG!hp0a`D(L4%$!YS|jxR}0jAbx>>WtG}Dt z+d95Do!9YgS+jOtuT0ZL+jB@6;DQ-}J&kuayV_+nVE9K1W;SF@I$cj^ zrws(F1x#e*!=fcadwgQCe~WYM_%<-F9Q{6LV8G6T@yifr(go5?SX(lMV#2!aIlaQB z{xrJ6R(|X0x*~lhANbBb^`NFmpFe$F^q}rop4zIfOY+K17rbdVQ*r0EWMqUDNT;1v zg_<~XM3OL9hhB@* z2LIv3`&)r|t$5_=9kE4dA6OhN!m{-bNEVCfvN)x0+bPpjvu?W+077UA4ECZcn7$10 z*IC_~^utg|J>b>1)U8xG;MKPkrj3^r@{Dw(XRj*LxCI16r}Kf|ynvRfikpNL zH0H>Us#m&dm3QRIUP+j@O^O8onuDBA!r@5s8_D6NUJs-JOu^cooa<|KMO&#L%qwaZ zar#HY<1OM*bIc+hmC_u4S&g=$A5upYojK7O_Bwfo(_^aEO&>7KqvXH9Bdb`?{(Bu} z1U}-6v*79qiKB*Hw*r(OwK$Vb-7bq$n{?`J;Wn4W2_z5J$qkKKoaFI;)Xpc5|4^CO z{3#NgwY@2dkTCOYLL2N0fbKOXYx71dWYb!TM*iEj>hy8xC7K+O+a@1gg4H`;BbKmq z>FT~>fhli%+tWjN4pR2yYRRF^CNwZ~4QL_#5*&*34?6b;oDv-{CbxX(8oK6t5YCcc z1m~_>vzDGblMgiiYW!%xA5!2r+r9Lbl0O8VKJXwF@PU&HNXpA>3ps`Us`d5+aOA)B zg({0g2Cu z6avb@Whg@cNxMqirxeJ%*$km>DD-=viGVeL7R&>}-8@|;*@ zurt8`S+vFjZCb2auRYoj_i%fIjjV$7217OLwMUAjayHa71db_`GSFPwiV<&w)Z2^t zR}wg+U>$fryE!@+_HmWZZ|2gt{ct`5o}F)88d3S_adq!(48mGeUY~j5*L?vTFW_ff zGOr#ZMvnh}B~$kb-d#DN*jF6OPo*~^Ar9F$q&a7836;>jXO}Xae(1EtmEo>^_6U0M zyso`BEc@06*@{(ni zcyGmk5#)Rn<7^BJDMK*KBiTVbEdwoEwwxA2W1<&QPY7xZ^l=!GU$thV(c?diLY_K1`FxCb;ag+_#JZr4M z2s`8KJ79&R%lXnGy~HnFdaQPu{?blw=O>3pgwlIhOp>oY@SA;}W6eyGuce-nb4*PV zsiaOS`4IzSBw-a}#S0AZIX>NsC)xcZH@Xz1l$>Qc+EbO}@$2Q>@tqhUO>f`^StgFt zbQ{4o7@v%~09n2aB0cujMz5Cmtfm(nqvee`I7Q;TYI1$|plTkHiJl#*B-hUc8~pn2 zv_zIXHxI(QlFh(jWt?TqD<0+6!$4g0oc5c^QgN;9c5>|`u^pR1DcPI$+B^K=dWWe# z7iyq5&efH~or(hAaq+LJ_&WvK@!$(7`MnKWfh3*UOD|c{i$`b8@-ru7mn^Ym8$?o1 zj}7b3%>U~fgnF5|$H1hcS1=f&@^-va!G5|VJ@TWzFiU6JU$VsS_0b*w1V4*^+4|7_ z`=sHl5IZogcM!0o!ruL!>MddP3ww8iS(aXW^b5IqKY+GFSA&4KmMna%S{o^Lg}pJi zLkwY&$-8WX@;-nPOJ^(VD$TB(mcmp{4wv1#_tk0DbLP-vLMHZ`G7ylxlmM*2`w0v# zyBPf*Uo^oC7xv5vXC$QG35B|VVg!)ru%JB)bPK;=JXC5bhdbwETQ%SnTcM`;K zCD7WqgLJ1kz%9-^&O~n+>1|3!@zbVGqGFwBOK!=!wdDHmOT{T*89gDwlwvlcHVln1 zh3KxSCEDB@Kd+^@952D)i}utN7!$s=UxN*XFCRoVyG~Li z_baU_xp%E=LCI~pBn?U~sjRzCoV|H7>qh6M3qxjTF{JqH6IuNg1=pAW88>UUo9bYj zRSQ-ld(V$1Cz>dq=4|<)2+9iS1gruuBS6RL=g_gHLw{5oz@px{Al1xptRd?^?KE zVTzyhSJXghYuo-BHzz&=Euy(1z=bLm=KP*QrgP->WAM_`?tOm#LZ(XQ_8DifIuCt+ zj=!etlx%=uNX*7TM<+;oKle)XQy5@AvJ?WH`zi!QPEX>47GtSiXC8R4fzU7oe6D7~-MbHg-9lg{sKzauqsUOFCGcS|mXQg_DQ05qq;|;4{M&cRNT4V!} zMkLPQunr0-bpa@n5x~EB!Y@`7A6-p`)xb@+J>8p+G80~2tgQ%go2y0?<5NdZXq4OO zGeO2Q^9=ZDdOsKfaL0O#*2p4z*p*s^nww&JN0YMmL5SaJN__0m(V41Qd;bNJNFq|P z_WtwuQi8lGP3SeIcOSdrgAy$?w~l~^v|qJ;_i4Nfe%Jx-ArB7y_Ut3sMb{rl*i$!z z`4ZE}&l^0u!}ZL-x`C=Rm7hQ(ttBfzZR~Pjx{UCR!`zWFrs*3@DyWY*JjFYtVDRS-FZD)vi-trSnzmpkuWE#hP`{v7A8FaJ9r5BqP_VD&xd3^AF0WK><`^7iPu|~O0Cgs7 z@n|aRYDR^)yK%NDd@lLox9CMBF1q#NV)?b_du%cmW%*%W;mdH}$ANPE1sbM#?RBzT zlO=#bfgs3>i?ek2%1I~SE$Gj~cYCV-6yZn4#w_-SwGE1l*2$^~tsODd=Nce-T+AfT zS%0pfJmLJJFxbTrE=Q~s97sAj#^N0#Nyd*9-vIP8^L!Y-;!Q(PO%V?C9b{33NFQ&k7d?_H#D9QbZH!ged-0L_y@GTo$ZioxBXE z2T7H!iA_#E>)c^Q-P@m8$ztJ91oQY3{OBB=(2 zu}c-kLt0Z9f3c_qg|TTsbPO~lO2e*Nzq*LYMhi9TR~Pqbx@hCB?ev!yvSuGjUTKku zX6exZvrWJrP@z`{8Pt&MrwEx+;yPZafnw%3mc=5$wyIUW)9fs(ymQpfQhtr{PRJPv zeaRjyF7n&EI`A3EN-!i3juyuneT}`|-reE5(`>YW?Fwqo~|PiUlxj zlq~l3tCkh$O2@>O+B%W-8zcFR{oz^^)aLSh(M?q+&3>Q6wl-<@drBpx*DC4JIuj-_ zpJoDw3*SKMWuRY$2aIlJ{tTik0n1TIu{@G zZ~)V|`P9dQs-Fb$JE9X`^@yg?aCZPOx915R{PZv>gsC^HiFaQ{1QBN)Tr5(FkTcXO ziFfxv>BZrxCLPcQW}7O?P>yJH9nW8_>E=U9=cW4SNW_PgoW9g0p>W7lOx2Rpm$7K3 zf#nxY9?vBOb-<{6o={F_w6?F5pTN(U(l0MX|sR>pfjBdptX$C#wwpV`%I0W)T0GH777UtWR*&f7mbcWG#OigIS z8uu}0c(LY0wq9&PEbpZ(E>Mpw<=?WLkYZ&-mpZTXn(+?t;8Cq}qmvbQs@uyYP_(Yr{o@Z$YGz&T@az+a%I?yh10ZIl2i22l33|O?woFk5UZqbvFlYHJR z-&zTw3_>E!X{QO;8Wz;)Y|PdnG;Rx4i| zQfH_r8{Sr~FAj3-0jpdK!%2gjLk=gJNB(mb~oa$*W}`Q&RED%P9do>44er7L6quc7=Y- zET1V|7WFjUd+B5?>BR+~>6oW$_})vW7o$@y(S*Jj@IC&R*wh43xo7JvVrM^bPEJV zccIo)L>E^R!*`Vo^}WKVYl-1qT;?Mqd25o(m(Flnp;wkbaBNMDN5|LI*W;-PuXuGJYanEoOg7m(AP>a~At9k4!?lmlJ_1<^IpFzn+BYC^{YFz0{FeDGoEe{q2tyG9DPcqXs-%U zF)JD!9bH9_Xw*A8x{2nSSb<^@M&)v88`b%aJej)o#zbfsY47UVjyzo}Y|ntL{5#hF z!E%9}iXj`y`Ne>2wU`F$8qKT_4ty#|izYa%C?a1U$!DtNYEa;QfuN^@oT9kW#s~_} z0QSp+@bPQTgR`_c2?^|w9WVM6{%#9$k^17cq~HM}Cm)=Jl~#yw2@Z*9beXh8;pN;& z!+q%r+{+%8vwG=DHRkwbV#<+(X8swFb;ftbmF+4-fE*BF6*Zue(#b*_38i>hqvL%y zQAYIpZX|n>Cyw?wUbD=~rmup(3UfRBf`8c^(Org6QHqu+Bto9n<*Mt%d1arh6X%sL zshh@&!1hH22QOmNBU?i**N04B*eYH}38{Go(jgJ~==6EzOZ2IW9KyT_fk@(?pvb^r)7dGG18I+9~s!c1qpddm&f4tGRnu#!S zHde^;n9I9&rQoL4nL}ByU=eS<41lbg3m5J(`z_O&uTugBkN1i`5uXw zZ}PuKl4IO_@<}sbZ@IgEpqfz|Ri#g6xVPr+dLbqsN#pECv|GiYg*Gb{04(Nm2ez+lSt;YiVY&9|j#}rV zI}UVt-8&g6XrhN_JVYf1u^KGVbm5WWobhmMr84^{n)I-wX*DB|wqztyfVX43pU)AQ zV{vXkOUCnW(2}QVjy=Jt(BptT@ty8eVnxq-PM-DP8dJ8-!9bWtbe73?0e)S$ZK_8e{17@@CcI zcec#-IFKebciw;Htz8+N>NP`k_j5N;@>{%mRL|#19Fk2DC~pobp``dAe-IuTg;9J5 z#X>1I$d;vwrxEks$m{WbdXxkcm1mbG z%6=BKWw5!OubpEhj6w@vn+<9gUzPN9ioKRipg!(LEq9X)QVmOf1?Phwi2hI{qNMk%jgC5SNJvX1a}gy{>w zkIK=TC5RuB>KAb0 z_hWOYjB{iqwB8<7j4jpA(TrPX%JW55-~)-pX;!J(ST*O?vsiS+0)enrNX->h@~08l zMGyn#7#*rRqq8|dSqMuArpWq5&a`iSq^cC zGtOc_ghohA;yMaZDk<~JgHrpU=KS&}1Tgh;>`A5_zpM_IeWWSy(^B+8O>}k%(PP_l zJ~}<=G+}{`mzk_NM0{!zW}fhCV8K<}IYsVV8Uz=I!ET0XT*oyv6}Pj_tc4im%Q-W zs9dNPS-&HyB_t&%n-qI%GU};AbJ@lYt*Wq%)S-EUhIt{`f1}q#>cTNDOLK~}+EwFV zp>4ZrL9++K`Rz8fEPuP*cp&QVNAjpNCqfrRU8Td3nQXM8sP~arEixbTyX)@8C-U&Y zHa=-3p_}}FUouRI9|{exX5B7|4WWQp%A@(AUA;*C5I&M$kyT{8JF#JuEn9rw>WGJL zu(Zu|j)QBCRq{u7#J0zBBFAI*Y&~_;K)w>^IS_4Ljw0MviE^UNMPUP$#~f53`EW}F zVpUf}najudRj-q_Sa+}b4U0?5-OV~oWKUfbPaP>m^Am-iYVZ~eH%cqKRtfk8O_YnC zpNI2D=^+zwzlKnxfTRe?yjcc&I^AY6$3bqlw{LVZcTwi;H*d%6&2QFumquFL27MA~ zW$4Ru7rjbUfOEV;F*RnD$ay}&dyrV1v1KJ*H>~=vdjCr@%fuO1webTzS;M2BnNMjQVK4sQMk=@8gTUw?5;>^03??Pyp=aIG(=EYk!XMV z5}Df^gBl0zZPrM_FiUJW=l;CC;jkdOUu3U3ey*Bx|J907A_u-`p5)fTyjwFz#+spt z-mMc|cOLkd*_l{dq2@erGpCMt1sGw;9CgAZMEFR&iLmuJH6`R#DHf%s61I^?Qr2gW zw--gjdG-Vf{^L^!xk}=z*t;MW3*HO!+bUEe7OHa+Zk`3==6UzT+&s@7Hvu=#xCy5T z7|O~WTMmez7qAf@%b}^_D0>>+5y&;_Gr?ZiXAt_~pv~{!E&iA}1Kkv@U3`90c;d7- zoW&nBrPbUB&mRG8!1!+b~SlHK!D!7MANjmbe!Ku zeky)MT0(Uw^@}H&beGA18>wGB!OZZxBp->1Oyxlg()Lx3-p;m@{-U}=#EPy7CqWoq`Vec=rRC8o9R-1{d7I`;6dbabR+fR zw<$>(m5%O6sj>KMV4orvb&Dw0BqbcMNo)1^)l#5S$Ftp0G^Gx+sPPI%L2d|XiQnBB3Olq!Tdsuu{2e^kyodiw}o2+M%n89}Y1w;v}Nf1zz^qd4&# z#U++l?)Zf5FTf~AMLmoOhX#hA8}1_!`Asolba%^6vQddQ@|H9tr+>w{=q6Z)nG zw+b~4K9wz#1D9u{4Z@?R?(Fya(Nm7})#;F{nVT&_IsMiU$T`1%&>ln=sU*>;?WR+w zDXfFcHRRvO6x6?wHt26qdNb(LBwMEew{R~#4wxrCUqrk$umIVk87H*R!X_M>v*q6? z!(_{|N$_0M9vy?^9DZV;2?s>kxJ$GZc3xw&x

M*2O$dK+?e6&efHyC?NN(9x6jl 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 diff --git a/doc/ionnotes.ps.gz b/doc/ionnotes.ps.gz index d432ffb83576a7cfdbc9e77265d89c84b6d008ad..2bbff07cc488b76cae151234be7bf9eb1ed86921 100644 GIT binary patch literal 109075 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

c81vxi&RKbW<&KiY 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

ZhHG@YI&FE*|pXi@?I}zAytI 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 literal 109113 zcmWhxXFMBT7q&-jYL6&2S}UlcMihVA($Zzrh^?)WShXUtcWJ9u72OLpYfBJ&rL8?9 zg47;C5{Y=dpYHkHdw%DBIOjR%c@7|hgX7MB&;Mg!egX*$goJvBs6#^-Hc$L275c-z zaKcI8Ac;}d8-PBjZb*w>9HZCjsu7AjiuDsr!^?YK{=hS|l9 z3K~zt@_o`r6#134HRW{rO3AuF_gbMi$WZ4oSFMouV+?9gyMUcqE4#Ws%B;aJ(icVi^z_`X7(NIy^HsN&WSzOA#-|0aVg%1y)AMJps z7z}(xn!b#ygi~j+bn-ab!X~kxn8Sk& zUr0&Yk_Q+@rJcT+Je&s`M^om@FqD62jgpgn+)6kEc@oI`l)fhdms+x^ud!fXnXW8F z5J{D;aQbwuE+{gBxJd;dsOz6U*3wc=pG0+Ixawh;8akPS_g6RX<#*}F% zI4PQbdJ{n{BVb`TC-`ZtQfXVv(Fp;(ht|Nt>uH;$lbg}h?r`k>js~25G+g!-+X~-1 z7}loKXone-d|>04z2j*#ri8Yt^YN%EfKR~?b~4WeCyvu@p9C%058^9bfy!7UdHb*$ zSzKB)NteuArRYLV>KjfQjbZyGTR6+v9W4EE^c4J*Ht6f>>k`q5IHs-WmV#o?JFQcg z(l$6{sYN$aBby?LAo3x0%OE8u$GBfP2f)f|Sa6aJc0ehHginY-ZJ?!68cJIUmOBeq zN&}3?j_DKdy%5O191{F^J{x>YADu;yY9I^p$=#UKAjU4jl?5l>WAu?#s2OHA^I9)re4F~r; zIC+j45`$4UxA1jsk%!W?J#Xne$;b1fqGyRa>YiOWEcyyTMpyhYq>wjyNgnY?Dls2x zj5s>p$~hgx^YNjU^GP7;q4p_-Cm$ZMx4$N8$V3`wZ$*?KynwC< z%69+4F}^1|JA6adh~^(j>T2D~&;X;l#bA>f04y<^Si8Y|`nV=!S;iQ?7)9M0gtU1$ zIb3ZN+1WxH9VrnY*pj(pbcQdMc06p)_vFz?W$Ex4C=x(hJEwKzh8=7mBZ}OQ#Zyt# zN(g11&sfHo7Rlv}^u`&1VW$bY0i~{V3chp!m~SKF+Yg8wXvmU+ypiua)yTHO`${x4 zoVb@PAmPW7TW;viYBEM<25%TGietncZc-^kUw|(R`4&9Vji9tIwv{T$97WTOPzXH) z2@2QQ852bni-Hghz;9>$h*stcHlz*{F{Kptg%vIG<5ke{-m34aC4#hzr!<}(9Kq;R z0$51;?6c$2e0z+mkW%TMEPg8o10u-Km-%TqaC{NO*q9G;Xc2adg%MLQ__K;B_|ok= z3*e2Q0wqd~?kwhy;&)v#@*^ST^i%5lZ5#TLT0RV>A3-V0$0AR*4{Pm5`F58q!EG=K zhVPU%Jcxx8pGBU&fkf|5V~vN-Y6<<3uhf%xIEXcjChqrx3~858JtqM~nJ7r8F8~fjZf=lAQlMFcA_}QJ$fgtrr*Hz6g zwEYwmjJp{{JHg~BVUdT9kt3z2FA?SV8fGn@aZ__tg(tB z+Gyig_r*#&v5X*FlA;D;+@>9Z+D_b1JE+z9K~W5yY?HmZFZQphkbvF2jbijLrfLvt zwC@;E=}mo$B>HOcS}Ru$3X!5OgJ@bLoaN`R4hyEi)P3pMrC06$nsXUyWz#vJQs@TW z8Kn*Ct`KK0*WU_8?v#Un*c%7foNk8817T$n9*^mvO5Y7Vc%{H82ta}y$An#-M@so5hLUx2IoR>(*r$-fm zJb--Jpthy2y&%-;*IvFh+}B>nafubI9@g5o)0ng?7LSaHxE7<}_OBMRK)GI;0^U7F z1JjlAEamoif1F-grf+T7R8#rx9+zog1-DQIe`KWSf3OC9fXNF9I!3)YR0z8^m0w1> zKj-vdn0UHBU)zgiWKvp2P#03@ZgDhx3uN(X4fBephZDvak&+m9eg{rv_NTHxcG9KG zAYly94b!Tq{ZU`NvnB_E7yhK-=RvKO?hwFfU&x5RsGETbQicPWcCbX;9V}~QWGQAr;8VknWz+(0e_8V8TT+T- z6d^{Y^mkFz-acCS6i@A=v4f8Li4i?71#ll%I*$V-8*2A%MeCW-Ear9Tfn~z%Z8_dpAH>3AG;ROx*^yn`_h_?k; zjUAtrgaF!TN>B`ylHuF6nh!qfw3r>jE=37UTAvFnu0NKcV5qA*G0;&1u~o%HjUbN|z1Kt@rA2Q>=gC$(Q8t}<`?#*c_g<^$Ri zsvdQbkUO|=BC6*UL~gfZysOc1Akj(13~zM*H+%Tia^PyiAC6}F1_X_!qAC#wq~77G z$hDQdzhaA}&9qi*b_1}Ix~o*#Vi=!(Msa8(I|%YHh}^}u;|E_SLGno-kG2Qs2xWu^ z1AVMLhBg#To7SX`lIVmUe~Px}(Joq(x*V7dGI}rw0B?gOet=HMa183o_l>t&?EBJI zg_x5vtTbhdZz}}6@KG#g3|~S>sVK@uoy#uCD5C7W{2CH1)n|z>ICYV!B%QHm1XZRM z?zYQ^g`Y6`U;*m0nx%)X&2l~DswJ*?1N z2pDnm+vz4dt;m*G+Z&L0Mla}a`bGnC13~8w-tG3y+S?CAEt@fr|E+@D#}HD%#*rUZ zq+zrpg{*{*B7302Fg232PPK6rUonn3+=dLoC~Kt)Cpg?F*ANJ{&DKuCQNuy4B|9gj zD6nzU9Bn;qKsu$jVYm{}+DDCkOCsU|__DF}tx|D|M8~ zpaxQ@+2D1hHURc;Bo}oeio^+lN!vMt zN~N@aU@UIchOM`OIuXu%5HX30hG@4suYQ&RAFtZD(*N+EOefXQAQi7kcK;MF+mYZ} zfUmS-&fW5ypQrTkT1ctUiM$ng3EvVrzq4=vr>^0IieRX0V;4hFuOvFB%8>@xm$?x~RzxCiX#QDu7N~YbZ6O zZRkS4sK~?p(k3irt(Onx@CIy**n779BW8bc1>YHS;XLD9NM#PO>Z#Aah%@C-nfet4 z+dsjBe)d`V)0J$vn{N8YAj9F?e_AJ+#%cWx@WzQz`%(=6Y9E(_?gXJcSJc~Wj7#1i zZgB6CKr`^x81gLoNb`QIvVlVYC~_*xGx{<1M52{cm0P+=QKDAUQf&UR(bs8y*atE* zlbADcPg~RF19=y;p$l)ENqS5vD4N&;09~;-Ai$S?McZHsx-{Ue{%0WC&fgN`bLR_tx&g9kfpsoy=Hje7QeS*u!V%sA2YQKW1 zhuP=@OGw1=AyE_+P0Gs$qZJmpKrxi=T6-)F=X838wHE4Htwsrgbhf5AgkTM0_GrYb zN>MSiapEM2xKkRlN5WuX^zq(di3SV$uA*2|B$v&C%_{A1`BHXtBmk=mh5*2**$}EF z<_CaJ%9wUwgMb$D8R!6bZ{&r4mE!{(O|B}AP}M#}^6xX~IK3Tg1Q}8^u-BiW$m1Ek zY5S>zsLc)L2f0amOVjzKv}e(zSx|&FnAp@W0YK!)l)w&KAZLq{;a;$}@!&FwwuG-7 zK<7+qlpyKrXowbM9RS`V5%FcmyIwF@n4w{laVrxX)C5AN^PMRMyb5yV>zRidh`Re@ ze*|NUT+)Z{?FpAsF#uO-9NzZC%^J9_1OU($HxP$=!nzbniv6~X5oIYSKXbL##x*!e z0~Fa`adMoKKR0V%+UgZsir9ZuL?)a)iE0=}_6NXD_7r-^%SC4wlK=M&fKmIc0`X@x z^=dZa@c-tal13p?x3qQnCz86X5PtZ7S9{b6Sqo~9Jqy-yJP)Jvat-!8V!M^b)%e&;OHW+SC4#!d{W z5AS2M<&U5)G0s+-PGZrVZEwS8LS}v%>}ICjeN1^=?2eh7ik8HUM2~2?Y&<(?g{&A_ zty!hxem)rsFc`d6ZzL69@F?A{sj;%`YmQA~tqiFUQ?*d&^t1P2Pxbty>%`}fy$u<) zE`#SS%kYZt^VCS`pp4H+Ta6Y08w*)?Es(v^gSpX7n4k*012uT8H6`M+e5KlR{B{f| z`}O?+dudX2$w}a3Q$DPrkI>Xq8>moh*)l4!lW~16OFL83bQ`~Hl^rn#pQAe9Z?sB~ znq-2!mHkF0pJ~+uwMF&QF89<(ZA2A^W93BgvyUoM47cTXCtqTI+0$=lo`^RH+-qUN%8c6OdnSfR;cgZ7JEBD< zqe9s}W#tuoIsbQ>QnN6#z%@yzRnv<3ZdZP>egzqAbZ_%}Z`;06++A>X%9eN zhZ|)<=f3w44Mi+~o5f8Ysl1tDq*sl&uJf7gz2fvk2ck>8w$%66xfgJn=eU%#y*Fwq z?TrnvL62Pm%B>w+#I~ve!%>rd*eFli`ex}cKX3fr_SR*;rtGa-p86`I*=+%lV>QXu znwFQc!)C=FSyNjlN|?ZZ__nt_q&%eGlMGy&whDsRHr{LpbSHX#chb|$^#eN0g}D;- z#NUOWdW9QTrOlLe-o6xQ2^SeEEJ)I6czwsBxciy(*37lCee0&KS4&O33su4*_ar3I zO~tLhettX}0rWPFZT-;QsBr%w`UQhty0;C@{1#L7ZC~uW$lLCTi9hut_FZsSHDH9d z>YCie#aCGsb&u+!H^^D?4b;Y`>Iz@NR3e5&HlCG+cbO#$Xjty0s*Z%|TY_!M+X4@l zMGY^DE{RiC9P10v=_z8GQ0DJT^4lf%JM^IU7zh0Z(?cBh{`2k)2Cm_+9RaHZ^MDu6_Y1z20Lcm9W#d8b|8! z5f;d!+F$U=7^8ZH#2%rY6R*!>9m9!|ke69K@$)1&&N)1}4bOFd>L}P{Z|MDkrIVQh zvDu$_*2CJP>vVgsCz4$%U_-iggnmWqOC;FurfNkU>%uTk$;yle8n9dp+1jw1gcE|@ zemd7{c5JvXp+Ek@g&fc+ZqEa}vG=8#+*zabN4#gXA8&b8pD$PY6|#}s-il?>KzGW+bgE0|gC=KN`tgSpR{G?5V&9 zNv*fPX0AoyvPK>N@#)o`k(#|!q=Q)F>b1+pFB=46*M%Xg3J33UJU7iAJ(IeDOHes= zDlE;BbP8XZm8mv%4%Kg5D6z2qECk}>%6t5uEj}k2C2IQD)iJA=a~%}OcI4{RE-j;U z8XlG$>ITbgdJc2(_|P+7fBm;Uw9!Y!M})De8Wdfgf&@aO?h;Db%`D_ z^wL|udF4i8=L<};Oj>()Ge_b~F0{W{Oev5jMa8)Nps?E*=v0ze=vHE|S`(0%wB?Xi zllT<b>xSHrb|R9tH$;+rqvBfcheB<)Ez zn$&i6m-T&!zMy--9{Y2b$*lWX)bY!@Fa5mR=D3H7A+72oT5l=&& zJ4apg5YJ8wBh{5QCmb3|mJqw}2P5FUCw@r=@#Q%waYlY!NPo1mN)y%DiJ+dmbA5-qL^aLq% z2Y%b!PRe^O5(5`d%l5lucpCXx%+lAn*;NOsq6YbhUDJzZlo4^0V^)6b=5i%Z!YXSg zLqUB=$RXv%+iP}RADG1w{k)B?N?T9Aops`CTVmoelR4J^!q=}`2I&ZFlH*9xXmf-Y zz%uo2%n8Q5Op0FY_xP4_x3n*_%tNsAMw^zByJ~`LGsGZ7b17zh)-gB%*vM#LqVJS3 zqm-|<(x{Dh<~XHvsTMSSRC9=Z`N~Gp~dbo|ov>XP*k*30dkw^aDKsO7vVYUQ?RK2L1DzQ~Y!UPM(CIuzm+ z7`g~k*90R+Hkj%cWuhExz6|%(3uW$Zn>G0m}nN@%Uf5vUkPtOZg|Q9axrw8vYMy zhNR~)dlBU>bILt@mtqU0UKV8E^*~$#v`18pxmAN#q?m6MEFl@Z!&|q#`3I{#a~S$I z;)!k#bbpFFMC3xn8{&o~7oe%7HU%o0IqghO-P<*-S5Z12rs1Wr>pWSVL&O}+TwGE6 zWktTzj*6X|9O*5oT%q?;5G9_V5Z$Y>8Mj#W%_`c(yYx-2h{~QHlMwqdB@=fQuvnHq zbRH-sTsIiy+K};1Aa=wrpwO>J@Q$45D(|;IJ%2bd^@gPTmDr&pR^OCpmc4S{bDz6; zF77-4J9MlZ6WqIQ&5hks_zEgY|)o$&lqUNAanf0ImA z0Y~MU(%5+ynKh8hVlh%&Y}GZ3@;QYTXf8H4*XBsJ33e4Wb0d!+-U82e5?|`V^CiU? z^+JGLgfya0m+o&mXKIHV6aVt!&E29#P(c zYb5(kQ{iSKO^pYVJ;Mjg2kn*ob8Oj=-<)wLY>cr?^Utq)1blhkkuh0q@*{2|B2W%8 z)js>qp&&SrJ7nwvFqHpRo*p^yABSLBqUEJnX4s}Fv^Um-krtDjp_+bimyf1+_tGax zh7|Wi*(5nPD9;z~Q3D@){8a~8!rZ+Vn&l?9^4wTfcAr#%cm>{ch*lOq^tj<(jq7Fj zQxN9R80wX@?zOjAu>L6SjX6J1wueLGyUL6AeZzM|5?Y^6ag??f#Vh2uD>HZe3{x_7 zX6J>^s{b}J7n>^Oeao&Icj0A6`I?(_@9W)XK6KJByKH7h1!g z^BWhu=*4t(f-@Oigqt+E!!D|p;S-$Lc0TW#8z1Hzud!38%hH40Dh7xwv!Q(~fMjAW zUnhLSquWJ|&3g6drwU)|phQP;9B!^^YZJ|M_r6=T$sLs!E&hdi*ZKc^KMZ+t()p)Y z@-EdwU&+me<=z~nYmkxOPJQ}1C33^^>6C;O^VN8iyQYh7f*#uosiH)sJr4FRa^R3Y z`TCWf>@_BnT$MmcmJeZeM=|LJ)zWrbT2%#&+BQ{oG-YsSdq{q!B#Wew@J2;VVUD}p z!5UX!#3kj-ssA1``z-nJi7Lng_;ib#-@S`XcqcmKWyr$OsAVT8G9jkhIyB9<)D=%m zV0Hm2u$7j&S;Xn2Y*qY58ws;7MH)rz6O~_H`Q@GJJ*MG6E zbQi@Prl-BduTMBk^Lv(SvV7P(M`FltQEKF|Wm5bl*cjCQMqP!cu9{Coh<0h{<3(S`M1EC*s9}bu*O)-8QWSF~>FA;Q}d3K_E>)jjZvbnFEU^wH*R7VXE)XLbX z%8cEc%ms2&1?~zjbiJ)3jB^gY4yM@VDhWrZDv&MlrZ|1osl)vZ2Ct(c6|4U!HO$w3$Wlnmmy zYMVy8`KD_~kaAp)pO)Oc(!AAgdoiykc+sW(&v2MbqLKjFbUO# zEeX$QwAy@=FK0Qr)-JKFtM!td@u_$09jX5?CdUPp;*@K@Z#7Pm~V8|al zncgs88C$yXwUur&#;J?Gp(f3-Q`2x$yM8Ix; zktNtkpj`l2O~`R#uwV9;6awKdJ8q?%pOwykIKsRg5ZwXfT^LM%Iage*EoVZx?Hnyw ztU26fT3&$ItX=}SUn0wwGfMTN*xlo81YJ4gx34Y=g}*rFwM&*&GdIcGva6CvPR23S z6%%kHw>$Ob{e*2-ww)jJ*|V>wT+U-#nrL?0ZvUWe4Snc77QxQoDQDf1FKyo#0#3{C z5*_-)&>Nimp|lFF_gAhi8)}0#m6uT~duwFmRJA_PfDPN1r0ZPR4?*mA-%Sg_?bkN&K<|>cj_RJUp$>1(GuK6>l7)E;Z}ep+&oQ zr0A^{n3i-Ud`NbFH%Yk6h_l@!FcmAouA9id;mH~nYRk@nJXarQIId%0GF&b^H7ruO z(xbyP&E^`PyS*SdGJdjI7UkNxE)7e!?HS{r*rOJ3yl764ms1H`<2JsL<@A)fhuy5Z z>0#PHWObiG&!(}wb&3X445^d5Hvr@qIJD7LwcIE=RF;03G2{8;8r>3^Yl!t*cm|ta ze~;45$|@EZkc<%lG_Ey|b(6^%{Jg|#2s6dr(1y>=N|hUA6H$Ke{zQ#|-R^p5^|wcf zHYHrEt_OTYBgGDE%}^VyzMCed&lhbC%VWLWf&wcQ=XDTDHNd5UeSsni%u~0X4sBEG z@FhD_riIisXo?S-0-(o^x;NH4&t3kel-cd_>)$H|WcBK!J2(%)tkA09jsi<-VE~6` z22Qq`|&?RybhA)}tgG~>rNbNlKBK1u9?nY9zp4F+zRC}|7(c2P~) zDzA=ErP{?OecOfXV>-Iw%8U6CkKTG_4=p6wSjXy=Myh#SXRB`d%=H)-eIVO4+vg>S z;3NxHWiXbu45^s6YHVM}L3J(kU8}VFM44~BEx)dQNm<-nrA?EW<$Egh($BC}<+?k@ zrt-23;bI4dc^uI z{hX8Xw0l0OSNuMuyLOwB2oQoX+-!Z>Xv_2<6fo?vd_9#Z%}qf!Kf%MqZNAn!J+`5T z_?AKRH)!q)d#hemk{i5{P=^=M77E1$+q}Q*keF%%n{j)g%Ia*4Bc#s!z1@{6BOY(- z@HNCGTk_%~6Yj>3GqO*um&7y3$+pFfgu9hz^!|gC7&(4rktx52$@@~ELm!WairZb& z7E7J^$Gz9QtE-l5ZstN4&W@3`|!Iuj5lannPN-<1S}< zHs&V_?*bbwKbZaOF)5f3u}sL4jGvE_t*Vb+EPkKIP%~TACCBuj#6j+cW$mDeU~*yX zR8LlplhPMy6?s(W{^h#~xw-YD+HXgNbV*H)T;t3-vQ~e5cYm1=#5a6PV937T)s$HD z(Dd>5=xb0x!&vl%5U&w8RowDy)1^$d_00=7P63vu55Fr!SP@u$dX2wjMqy-?Oa%9q z8e^%$#muehGK$`Bfmit0^X9P|Vn9z3=66(}f?G_3Oys+BdvjHizmJ>t+rA41F^?(W z#!ci~dOtxW8Fl8^PHO=)PBPl#N&MEch0kjfoT?@QB+m=8AI*Xb05r=-low(Wrg0al z{)wA9oD&;}xg+=8z)|>bcfMfLUgnhINb#CaA>S~^+c--J_}2J*;Wfi^?np^>Ml*nP zejT|kDK(z2Q@U0W63413ozRvhrx)U^=1@OaMKJ4(H5oCecPi{TIg;YckMua__oP4< zF>SG?da+#kBEzLQOJ7@!p&_&?ZdCb^X<$YKez%ULM4Z_@HSXC*<@UXXrzWf-9dBa; zI}w^3u2ba?bID zgp&u$3*g4lvkyx3Yl@1RJnM{$84Q0qKggiBlJXd%^{CF)Iu0}AssE9`6t_c_#1|D> z6=aIy z7@LyA?aMsbZYvi0;wf)8cWQyd+B=S9UJaMHuBr1rC8@1Aw!oz|1_$%afRt>r+;o}8 zL00}cwHNIKG6;!_df9Q;eYO6eE4VVf_`jys`!dG(10}h||J~1rMs8w$*Dh%cOZYI1 z&$Z7thKulU1#tN~+F)AA10kq6g}+uS%?1;dlz)RC=PudLsLVq9@jPne z@?DQVS@%Y)P|3OpeO1oThq!f7P3Iqx;O`m{AJ$#v5=_cHU3eC?+E-3q z%Av-I8~O~hjJy5Nq!!zs$iAq6l;3_IW)t&w#J=VhXHVN!Je%%<=#n!lH(KcW6~f)7 ztK6JUd} zVylHjOJ^iQ(hCUV+>Fqv-b?O>n=b^=xu3JFeh7x}3k)HPc)Duh1R1;Pwuz~3 zhNc=0Y@Vz?y5$?ZjQhiWQir7i$@kIevX^UR(NNyV30>i}b>9>n-Rdc#^&4 z@2MO7=1pXMWo2=o?Y`9&o_+lhn~6{n=iRwt!giOG+otA_O8Yk)w}}f(HSw1j&!T&x zB;P&gocVd=ejrrVIkrTay0mJqD}?!$J;Q~I?5Mxz-4%P-l>V!rzRlOh={>aDxjOkz z?H!v5?+%OIwf5hM753i_wB{&MRADAF7Q=m*tSh-_)h=|-(ESabkI)#~S46N>{1>|_ z{;`I^r{H^*j;@IcKZhP)1y6}vJn@|&e<0KB6W#%}sLns=r?N`L(6y&h2LJp@>Y|KG z#hYQ3 zAEPVI>q*-@S?t^Wd4Hm3XWtFSz|S`oFz{3Sx8BeB;RI;1*P9ENPKmL>-DUkPb*pFL#~Oh3Cvo5Z>4<3;)sQkASl@?d8vKc1T(LyJojcz-arOm%d2w3$&KG( zZeGp4k$Hjm%`>GWF{*c!@xRu@0PP&oRryL8VbPrMkY(<+#Glrg!70~zg>MBnuKhOT z>9Zi{EEZQ)NbeMhg=x!?+G}ROqkByyob$XpBLYw!@d-)pdY^m zrY_4^3+MQiz=S%O(1R2BLU;WJ=2G$=4V)~fp@s$?yn@sHvVI4 za(_kG1z#8c($FD;?^w~c6+K5V(z>(A!5N< z0vY)i2s`-1R({tjPA0ke_1<6ACw8v!w`*d3Cg3dQe8ArxonmqE*GF*%RdI2WjX^eZ z*SN1TYRz9sNvv@a2#yvV5Whla7Kx)QpnaO|Bf7@`$k^RM|@%h@jx)(F}Wwp1- zesjv%h@!4!GhF^%m6`guNGbCR^!&SShx~54sptoNOWyGp8=sP(oZ&uZa_ao8^#ad6 z8e*CgILr?GPwud5zqX4AaXUI!7Gc1IyueGWbw4e+9p<+1giV%1G+VJ^<}Ygj)=hTm zZ-%vu@OnC`r-~pW5{CNMAFL$m#rRJ?s_b6D@kjUtCOTHMyESXR5>uR+HM06!yZX zwwvwacW`w4(foE_-BU%$f|X#Cy>9qs$qcH#CdpODmnzAbJI()(x{!$<;y*yOjcD zpXTSi%K}urA-jt;{f%O%dL3yMzp$0HAfBrGKYe9rZ$xjZX+%nXYj?im@8c_?GAOs~ zti2&|8qF9})&f=%==$_{m3LG*^Lj3?bl{o{;b}2fM%qo>hcD6zu<{VSgh(yHEB?oF zS$T^iosA=`jVTDm?YAR;=2VyOC3=>`SMhDn-_99Y4Ko?(82w=FpibAU2y-+v zvR&Kc7f(m%tM|kQ`TPpolYxvjT3-_-yQ3$j-rf8Ceo!jG{}wmnzp>7BnGk1=3x6BV zwGwzc%KVBJFKfGdGmo2%kRR&29IVx8(7GC)el_6+fJ=Gv;9W`4ZBx&J9k@$-j8W&5 zxf=A6kMh8Sp%9JZ3EoWfOY6f9FuloTqnspQ-!0NN)U}7h_;XdhUmhs5x z{o;$FR~>04w(pkR;}XA-nNka8P~F5pMH$8gSxvneDZ7Q&kzz1y#tLmtCFS7@3lDO)+vY9j?*_CEVqV`qC zVfavc_xW+dTZy9QeS2*E&pQ_kjnv%G6U@2G&;k?JWVTvGsJITk;Wx&J6|cED^OZ|U z%&_-y42)KN60RlO3L3>F~tIxb%`>-65%e>O2Ya+o*6QtxwhBFck17|iu z-)rA}@9lq~u&;Bx_mTOrCz`iIQ%h$Psq?2Vv)HQlQc>Kcb6GKbt3uNH7$Yw2u6LJj zr&Qy%(^LZ=hFd*UedguwrrN06L7BVpB+yW3$U$1v=AWbORuTK0VgSFp#oE^(*`f+y>k8-Sa)8BP3*5zC4&AD7CKW5x=tT04rewiHM3?UhOF47u2w7VR}ylx*S3o`7kL# zn)6f3ahHr`8tuautm@hvpDz&{y{E5xkQn<_d(QE5bBOC|kTN>7yIgvi9P6HUC1V#7Z(mu$N$?L8C zjglVu)caM={MVf(PJ2!%Bn>jCR}?0NbIU1_NuQA&{l#MAtX8jFuwIyqJxNL+vKNNu7oUo%~1ld8$;zRfS@ zEjig0$zwWh*p<-PY1q)hU)tcx@x;wL1hQx~>C#Zc$jMpXZ%TL-_rwBf+!lsp)2rfZ zzz;}de%up0cT{+hN2TsK29+-$+h+G{D~%Lw936d;`zLVaDR%Vdw{`|f*m&X-(#+pocf@BMsx$ln;KhAr5@YEH8(#2R* zbl}(Ihkl=f-6+o$cu_K3OW>)0Yx1kZd<`mWWmwd^>HN4jI+OIIWW9|!t>aP^GX^8w z^=IM@6MB=8G4|6BM&LQ;*_jz{e;JSXD;o!1@4b*tgQ^+_e`sW z@#|ooM(Qg^>*#+gajMsvLSH7p?;A4-X+7cj@j~vkr=!tctI;CEOkl}^lY&42rj__j zvA5#ZW3L-I{XM@I&p8Iyy4U&y>F2!mV~wx41^I+-mGlp5v))hQu*gx+_){GcQjlrO zu&Yh+AikFR$OTXPJ}8-wUt=G7zSlhRaxV4<+P|I0Aj7+D_=6qmYI%HfRXZKW^2H69 z&3~>S=ex;Jz2%IoEyHSLCG+Lcka&qBzlc>{AnT1CPXPq8u8l~x2Nz>!<4)k@_0EB( zf^(5$TYV)3DXRi)-D2M#DJ29Qu@+T)N!6LKS1pM%dE(~mxoBnmay|NcOKV@NgkFJx zo#Lg&D^6J1b=9h>Uk{T6CdN8yH2rYtl70o3z8mTG$NhWj*DpVRoK(MDocpVwv3`8` z3d>NtbNPeq-2diA293t&jXwUU;aJ^R!`%2X>{6AcmNy`}$y0Lebq>_30N1CTHnFcp z>Q{4Kii!}Z6@Q9ye`ok7Kp(eIA5xg|H9w4BGJ}ElW)(zHyu>HWya8*^Vej?E)HuZW zALldn+ z;#%++c`q5@t^;YzTHKp@Se37Rz|7Rk6RORgLx}ILo3CGdq8>Ob)DbvP>$?(A@OQ`Y zLljWOrduBW;!){EACX)C^-R{H6=Y4=lYiEmeGb#hU-ilu6_cFd;E~9rnXHeG8!UYpvHQ@z3jD{?* z;>B+r`BcyAt$mO$3w&1d)PwX}`osJX3FPqB%uzw+cx0N{HnrkdAlaBzW8HRmZT}(@ zJsDT>^vWlX8C+C-G+buBz2Y?4{wZ7^XpE0tQ*kse!y&_HOC)+&x}%W zc%{12nav+D-_WgAR~C5kq9AY;&r&k#`LxH=&$~S2?|wkVGETHErw^D>z?Vn!h-sbW z*5=X-qBd$SVV~oFt@f}W=89H&H)8fj+e3qViUgt?MQ#~qpWI9MG{JMv`RZDXW`q7x zd-J6j)^nxh)14YwgE^y*tki=~Jl($?6{Unco*(nrQ!(tm96z9as+v~88VL8936^Yy z6g->EW&Hi3o#p0*@~vj;YhHS)ztuC(w$@39T?JaE;=!eH)&UWH65AQwQRPo?Y;!t~ zJZFV(7amRdCNfF$!;90ue|y=XU~$khS(IXM$ENw5Od2RQ(L{b?g+T|(J0O?&%(k_+Y(!*IsiOJ^R+g=<&$jCsD`QTpHgiCe>iyOq6UEuG%@x zYcz0$`=GTi;h$X5t=9~AKU_=s6y9WCF89leL2I7PKV&J4GcYJIc`V-Uz zeJhoD=RdC>6Y4S_cYJn~@4kjUHt&rAdJ^mhVWarWWXEo!`TF|yvJ(uk{Oh9ta>(sNA+!6VPiN6)d!=Q6*(l{%0 z{>$sS(ch7Qnp;8O%F$rQ%_oeGn|YVHW92SvZw}}!;&p}e)ew^+`vE}ALPhWc1UI@}wNB)n`lY5c~Vqrp1%xt)2c?x)^oPr#R8f65KtR?#xirs01q z?6tVq8x#?q6a@qa!{jZNzW$#oyIY{hv zL6++c-%5>j3fuSzr7Kc>6@Ab9*na*x`~x=F*;vME^Y1&Pgw?I2ws+P)+4+s{&jy`# zx86^7wri{1MXxK-J!ZHB%x7{-fE`R%NKtsUGp(P=_b+(&li2<6N17v&uB?LB&f7d@ zsbuPVYG-i!KCA8{aDC zA90&^Sm!P^|3jb!G~tty`RUOr02UQjzH8VwOS3I!Hfsj+8J^Vx0(d{JdF5$MrYt7L47gd?J$z}W znf=XSgSke949@KKZ-m8|Vv%wBpjdMzh>#gmXYRr^t9SEZPA!yn$kuCI;3b!y-qQ?x zFC0XX5IC;sOj`^$HjBGXP^ug2#dRs|6ZorjsQFr)6Ki-+^{rR{IJB#FOhw!RL12J) z)7vYIsvKtYUlA0)v)U>?q%FYD%UW!{6R$LOmI(el=i&MxbaSV;3zPZ@!h1{jPF4w{ z4iAQbtqUI~0^U>8%lZbq^T{X_V5BUD5E`t5W#!<<)s?JWPJTJI5V>P%!fLz)9D>P# z$BD?c>+mSp0!Zn_5bQ*YUh6uPW&_#+y$DSKl*YJ>W*QHW7mC0l!N7{qeT`t%8z6y) z^t1>R9`H`rj_0fH>s#@*;Oson&mDuF5{`dRu66SM~Ynn$?p z9E+7!0CiT>-c7URZa{apwAGr;(}Z1o8W1&Sma4fn;Aka1RT?Sy1E4Gzj0FcTss4x! z6Y2>EmG#gq3*x^eSYK#~eX&>#t2r$Jutwg}0Ju2u99v6J&_h6~>ey-i*_Ks+h(z6H z&i%S>xJumA3bs?Bb2&D%4}^TJ09r2Ppd!2{43i!~V&aXi4w5@RM*Exauv+zUmToe}dCL6(u1`QrKE|qOp04#=u3Hr#2G zI+-O!n*nV#NnK*46r-oCcx5=!#c!j>{JTm}EYl-r07)_V#Z%k6f#KbcvKrn!3ClR3 zMoHb#O}(g^h%6Cg(N*VAqq1^8mlyAhoczZMB<3w!bcnO^%cE($%gu-c(=R;u;~P~< z6b78`M=^sztqS!}mCm*1XJdSX(kEfWB74_rO8YFCBsvj07_lP&EAa^-oC(sy;PFk^ zU`P$}uUbr)@{+BT#bUwjR?9S~!MW#EFn199)!<|f6|4lcK@CjqO|n%}hy#m~#h#Xe zPd2-ZtHT*E-qrdTqZW4684l^QA`@NxVN)#=;7T1Mb%vmQW`0=2%#0DpFqcb61)qbJ zZtC?Nmx?&sqlCvz1T&18u+l;S7cDWE3+K+SumErfA%TOOha0EcIL=IPFi`I-Zr0*) zyWKk)(ZQ-upe~ONP6W)lcPGgWkTnbJM!)cPifCS|g%Xye7>C6bS>S!CeThRMdO-eJ zkl1!v4{nQKr5M?M-}|lF<$kz7$Feu~1eBtbO~b)s*I^lEHsiQ0jvBgtBH0M_s+W}y z;dCFH*|->6T=vXtw3Kkgh8oXPaqDpC>^XVk(X3}sB&7r;TnOeV>3glTEeY>lI*9x+!dQMZ=iuoZ~ z!eLQQbog|HT;$v=a|t_6PJm+JVePCBIJqg?09Lad&GN#p0`qPKg}`y=%qs!+ni;go z#TjJK2+V;|%JZ0K5D77jJwf&Eo4Yb!!%ZjH3r?w7dO~co0_Os`1pwUDqhdMSyS0@n z5{y}nc>|X25UwRub=ZIhy;w0(T36HN#E~~RH6SA4BHZxI)qoGQsqRN75I7zyVMzQ3 zymFm=W_F*^bo3jtwwltqE80S!<@qBl5_kuhNW@Rfo4~{ZT_VtTBNDGSzSsi-Q~$71 z*F??k8CgbV2_qyB8~{W;6HX0~55#JHaUcMNSnw2SQcH-L1Fu>)Sd690bGviAyP<;r zyP%v^^@vvSFpCFp`)Xx#RdHmWGGREuLBJv~61k^l(dbh-74Q_wXv%{re8iO*L|3pB z4ZNG(p{XZsDYYq0z2(aSUbtTk*P$Xd&}7?^q6MeP)8_)*pOpsB?G5T#_ zaChV^G+68F-HqBKo)QmZ~}<7`T4*I zV392AEWRx}#Mdl2*g;uT@4hW32L%roGLvtib60FOt|t$FC=enN9##epGn@cOfP^shid(-3VQk7$6T3g#?F8F?&*s^m+$l6&}Zj=SN0Eg|G)mF zH`e*Ht#ckFXk2H@Gh@t3-RAu>HPmwD;);`@~<$$a`4nJ^c{$6w~7SJ<3@({ zVsYPZC83HUBAH*neM?lq1q7X%67YLiAUsVSdPQS4Yng7KU@UzAf@x#ZhLmj+ScQ= zDl;6G6s(qDY?k7|C8On@VY0*9h8F;5cYC1o-0xvc!rqpC3a)3{94P;~PGuBUd~{3f zw1Wjy=(@KEY*gSx3Bj%+z@gq%sY~)m>ampJcCVhXfPS*{viSmlcoQoj7aCXOEZR1{}BCwjekyrm`3Kv)Lc#zCz*E#j<`s z*@mNnx>?UT+K+=P57V0Lx5G7V3(pHYhNa39@!WNH_mZcW3&Kho82(a^7G`zyqiBER z*2`vvkojKbP7F^R_c0R)hiCdqT4z}dORcsgtwk|KSa6>k>a5m?IjFY9*Sd+zsJ2<} zv)=1WO0;JWEDyqn)i3AHk{L>G$h#WvXyzdFdn@vY4Vq}J4eo_yJs1a!yO}CDR20A6 zRLfk-q{vMf+au?$G+L-u<*&OHUS*1N;_)Knx!f_qPnn?5&#S~GTq<9xrL^PInBm(B zKzl88%P<=pB~MW(^|l5#GnxlALn-}uUO-INl=pkibM0O{TC--U?)&VPpmgrAH|A)LajxgPQxL)%p%k ztg5?@*Esna$l-`>FIE&4yDjnPH}3JiLie196>?^?J-aIqmy(y;Bt7#aV!M^vi|!v^ z+>WwBdxmi;`gG4eRQk#=%3=2j7;E2CN{g)zT87dpPiXP7ZFH~;>=m-T6;(yC_LvTf zl6FO-x!-slm@t88U-ZyNNtl}g0r<-9w!}Hlw0Gv(0Kq--Rh`h1X0e{>m&1J;=5pDB z$}yLHE)KW9>$)lYzi+s-qO(biR#NApnY5(t71qRW)iNO#FWs|xToWH)lyQ2od5YL@ zKA4LMtI6FoR+|DlS%D3P#8g!LWxvY8q6BO}_j?0L$R zGnk^5ZXa;VOURaawb-oUYWqA0Kb8D5hq?W~f^z8Xs1 zD{EjuU{7lv#Gx1zuUHE{AWfxG#duhzIVTKD2cxto-(tKtoAQ|#e>oQJH=nHH6m?cg zxLcANYZ0ETfDBwm@zmL425aB@&Eoa!ji6KeSP02$o1O?#Jpm7qN*Tci$!Q{HB;G zNxKjcE*`wv>8dM93B19=t{W_7M&fD@u%L3aHQ zyzp&q)`M8uO_=0qma0Zdow9>7$+cjvLzxBhkJOqi7DsYnY-+G3U2XybwM{%zTQ++c zDFLi#CZ;+!@NZyQ_1L#}yKsPI6@nt1ZfZ!mx#y5GD{EX#r~%h0AhRZ+f}NI*0B$_O zrBFK#nIJI*I6R2lO>-w$al^sRI|>Gb)*b0P2h~sVfxoZTDn}E})VwSySckvwRq>(( zl)!Znv5$1D*a3j-7~`A=EOx-LsGjNb*hhs%YrusCu@w^(+yzwI%Z?!8_CUDVt@pBq={YQMY*X-QSli#6fqG;$qL0&) zSe(;-IF-8xx$2&pC%Bog3RE?Nv`RB9>9rk$4LdSmQK`G*wx>a>(vsoOxXbM}xq&+^ z=B1_s53GQM(tH-jmf5kzMiIO!HU_X{;38%OlXhp@B~~|%*M5a~HsYum5*}4u3h!ns ztP4xfjPVYW=uG_1bh6s{a z#e0^pCwq^yDSrTCiBpg3P+k`USnWYqq5-_lasQ7W6qlgAj)FnGB=RHV%|wC zt8wG%rO!@YcvD53SxNR+IcMg(9vg6SE5Y7u%QxZ1x-TGZ6L5!7%u>)*mH#^&=B(^f z=J(1TpW>yCe&bIb3xv(W9*RgT02r(9lhRS}i_z4TVOip-;^c}a_%< zJK4z5&DCqB5ygU$+nfj6zouYYv)#!xWye`bSo#?)#Ds$?h9je^AlP;ZTq-X){cV?qMncPNsk?BS!?{Z1%>%`$l^b*?3I> z6*cXWl4U(a6X-76Ah_)DRD6@2gU*J>#!fwW#BPciD={8+u+VDuWSX{H?K|EJwl;gg zg*BR@RdBG;6Ym|{T@IUh3M_yF zi|%T1swTsmx>D$;r3ZR$j1$;m*~nt&z&qO%@PeqTdw(*kjJwf@$Rk~DN@u9@QE*Rq zPnfD*UIP)m+30ST{c?W^6F8V7tB?*T8f)KG4<76cZuQKdS9zS(&SCDIY{zngZA_2> zp@1i@eP%h|tKB<`daR}hGGA6v5HG-q7EO3aeW@YdgU7!t&Dqz0S`HAhxAqel3>Dgl877BAV$kq2e-baAC%IX@{xkcE4Z@ z!5a4HBSem2A(f4Xfaz16TAHGiZ7~ZsI^Avwo6@(eGJ1+6sE(4dU={(16cR1UNRWo*okjm~^b61Wj zpLXjLVWM3Tx&X<-Ks*MjAP2r7fbZ3NKCx3b7P<{Kc3TTXlNLOa9dSuktW-cQ{sPjJ z?$8SSU{>}&CXK~ro&0TMzMyncw!{mn-xM!qHHKsZHgiZ1NT;AZ1{huONRM2f3Z2C~A*ei7zbm#=_1rC) zEEHzX$jt_jE^1p=oyw%h6X0Q%nE@P@O_f}?uC^&k+LfKZ%;ez7LQ()QPr<8V3m7$U z+(Ph7+cVriaK(`ja9Kitvvw&NZu7;eu6bMRi;c7K21;4Kxs9j7CH?&|L+!OdfvV-XtGvM4|v$cX%hme)S zoagNzk>svmRiEh?fb@jNz>H&lQ63uvRh|VECLV< zCnXl{tuATBE#OChwamZcrMf>pF99Un5VFd%ugzABz%8ECg-DcFD3U<5=wp+o-Gl{` zQMqw@{;;foWl=p9tVPA)6Z?dI?z4>#q$1d2FP+P+rim&?EOod7=FNoIR{X>iO$QeZ zF;O_fIF$ErYv?k~i08)3xrYKL96*w6X$78>@6DSsQUH`2cNSx|c<;jDMK@zQ-jusJ z1avH>%J2nv*Q)3eH*qNUYBr0)cVeBSIHS2((FTLc!&RGm4;u!ay{@=R$9k&eRmYESd4x)-L>kgiJ=$LPdJc^kpJM@_y{AE< zWr6k_w|bf2p>U~tRNyst-xY#8xgVR@s1oyQ~RdF5v z)n=CWu!Urq+Gd+Fto^bJF=)p^Q2S!qzk69{x``FP_NS_W$lxAVgMYz3rJ8Q!ZFcxu zkM7oNm^(l=S>__pzAPt}gn?L;3o5gpw6$%sHvrS1^iRJr3?K+&a@iWnz5HFpvn63< zV^@P&B1!O8#)ivn);xo}-2%8(47JhNV_SfM>r3`O&ewV1(xhP<5O+4vIacV28{&s5 z?;CKW+B=a|v0m!^b-To@n`PJbg(bKu3~N5rAY4RKJnl=#Jlk2@*Gi2yBa+=dZ(~?j z@7_$s4DBix0Anj|eOU#aJdn6lxHhZB!4_CL$bIHU7&vPz2 z1=)4uA`+R8vfI0RFLpM&%Va)3E=Q$bMmjg%zZoi`f{HxmA5`B4C(>w5m{BFt{mvJrrhkofN?1 zu`Y61U|8o1aZ3^Rf2-GgOrLIK#@DUWciIGjaIi7+DM z_P}b*vYW6cJEeg07V|2Tt+XM7cQ0f?>p z+Gamnz(rV1j@-1SY%AzyL)JJu?cUM0I}7;nwAKUkUhGRZ%iy_lC5<%5Vd;%*cZ(ig z?yCOT+i|TX;#(={#sxHGwUdS|!XZ(|Z0M@2m9e;)$3@_cO|?Ax-DM9qOUrh`Ud&Ny zQj>npQxw~kY8xj+3>dv$;7?P=%-9ZiH*?jtuGn)^DK0I?X|n~QMYhim_)#6N*+AzW z`GzYD%sNzpL|2rR*|T6hw_<-x^Nz6=ydIw1R=4)eg^k$;*iO?xnlXDr;%r%5MQG!G zp$hm>1m8zh?cWaC3e=C#>@KoO`7!C@fssmicKyZK`Z4RpyFGdoVuJ*)$KnPbal9}m zS-k*rq^)|jvseyo67_aH9_6^BU}2iQ$}gy;yDW=G%^rlSWk@K+V({^}t1D1pVL@Ox#IA@(+vgXDFv|uj@ z)qF#e@47F1#0{)+;uU*SkL-5)h}$M4d7yJCLhdPr`OCK@WO$^tFK$m(mb$TBc~(5N zz6XL(Ac5Uod&nEXJE)OwA1}VTc+6yv*1i*5i*@@`Ki|fn#((?cr5fFXtbk41R}X#o z1~`jwEKtO*^q)9rfol=1@D!E|Trwd8MOB^x=+G=sF@GL>6bbS;BG18abp)2V-LOpb zdtkN-tY^zvSVLMw+}G{wYP4Tg7n)lDBffE@j5Z4cS5LrA3y8?>rxwzh*q7Z4Fc?Ss z%cp$?@p!kMXJX-La|PRd5-)fgkbBv{V=R8v$3P&>PRO<@t}Yc=4*YCb=~${Qm6Kw3 zFq$faWSM~t7TA99=ovSax4eR3@F&1R(_cl%a}~$g!_GVfyWCo@t041g-RKh4b>CN; zjW>9)omppt(AzRGHOM2Q4lP{|%L)0T?YCKtY7$=8JSI}M1q-#*LiK0Q@Qvn8YC6>J zb4MfERL2gIrml!%|*!y{bvbZ^#!Y1X@ite|f9bKLaW zs+CW*Etb(GwUY@Ab{)gq@d8f%ZhGpl-Zm;Qda7`k)f&O6<%Rx-|E#-{nP=_>I4286~b8*{C;`ETdZuUuR zlC1kQUm8qF^^rzFV#3VhW9+f zu-md-YI5@gja%$yfe;7ArHmyMp+nP4?}B`r>ah^A zZM%X$&sT*=ifCH#sLBK#HGaJL#?&31l z!;!_ z{a~V_vNyUtYX$7;Y0iv#xbnd060sv4c6K_Kpt5V}=WhS-&3lY6JJ*^OKYYl;#@ll# z#YC?u@_ZCqCgAoxv9pJo4G%HW zHWO%o1ca6bno^JF+Git>Yql~G#9~Kj_WDwq#R6}rm%BH1RLjm?06dFh2=09f zRvg%uu391b6-vG31w5g*C-PzXxDEp5b|h2Qs$IT-UG@ZOCcqHy@euHt-lhnSeIB>P z&M&LSQKwaosdd(}?To@aod@FF1Zx0qA>v=F;;=n>v~btk!LJK4zhHw9jmw z-9ojgnGnB&d~FHR zR)#%)37+7JYV9`h>D&ldtO;!MzEZ<$gR|^q!(wo+-oyH9CcONjKiYjW zU0@V-sMI??FB}iy*lumb=9tL_5Zf7-sVHDoktaHbXPp>{)vdNP2YVPI>tV||KqweD zDbL07-z}iXtu6{TgEt7gJ){94BoOd{V(GC(|GRzoz_>Q7<}NNXt=2AgyEnB1mX7x) zKCtlIJZu)r%mSm^K5K5=F?yF}0-h{P(eu*;%V3isEM{LIY1gXQ_g<8~9%EJ+<9k!K zHLXgm+dM8;85feQ$n;H&+)dosRNUgqt9PL=KHM!b`)*^Im6UA?x?z;SP>j4lBCT^% zuEB^y@C^*2TsU=n+F)jfoud_LwYhy#@W|vaXsYqetU?cS@WCCYa#rh!7oe6IeW!aP z#V+8`Oq+JVZBj91iObxI+~bp)IuhK`Fv(+X6D1qr0w3UTn*^ZDj^ubgBa^G_Ru7(V z3;~6jZz}g-Wri*#t1P@+SiLqQ0BO%S&u*OpaT8GTvJkTD(2l)uYEf73)(drc_Abz%?h zL+o~{#`sJyu$K)+dY=RAvQ$Mn3y8=~0kDhNur{6EJ6wIhNt&{%2OMHc*f*0|oAMQ# z3@Wboavg*;geBRS_nH}sIjkcs&AbEk5{LWknyyWt zSOT`&?kn?E?CHK?CGl{%BzG@vt{v|JA%XPWH_Iz4F4vi34~^Ga7!?V6S?{KLz!d8| zR@*K$r714+72^%@S*p3JMSZRF3`YjkUK{k;%z@Ru5@$E785XFN5hxPI0+?ku3f^u% zO#Qb*-Fg5lcjY0#@FUpb5st#QYcP$mOunxZ|BZ0cotRJ(558+XXCd$!i4 z*moSZp#-5d&${YmwO;7nJmAkzVUYK^->Ks<&9RN9P4BBBv;hVWeX}7GD;FZFDpA0p zRCv5e%nEey!1G+g%BW&@;?YcXf&eBf;kQ~7PZGL96p%ex6Jr3s>%phBV=ZI1}Qhh>zK?Z=}kX0`l*v9vR~`hDD*5>jT1nrLQ0KjTl>xNf%;h)RbC zs{O_S&0Otg9E&@^_u(#MF|RK&XC^*oeEI=xyA)aRXsa*<2V|-0m>5gQ_N{32qG`w8 zF1NSKJmNcx%1yQ~~0+6}$U%L#SeIgZLA^msHUb{3u{*qg5A761x=f_uE?E3Hu+WO@F z_=-#Z-#)(LtN-@nE57sp@$nT;{&yc=afP3Le8mI)?Bgr0_a8sJs$B2yKfdCDe*WOUva%(epEx?o!?<{uU>!t^3|VhnDXBsprBa8zmcB8 zzt~*mFGOBp<8;|3*64Ho_=yeA-#Lw$Cdi$c3k#{ z9|e2^@EcqD_x+Z?u>F>MT@^w!bJ4^;^Ylhl*8&O!CbqDBJAlRZ!Um`p)1oTCcx!4O z_GnHBlYtq%T$aSMQek6vjJMhE@b0yGifxI>wlB;}hKH{$oV!I9cMP>{8l%y6?uaaN}k3Z{^#`kJd9>uVS=;CtB7)?9#NY8_rGDrOuzDAHVEB7vEu>I`ty9{qit1rei(4*Mx2i%C6jJqce^cg;Pu)=GVTM?~A({75 zd33p&eQAg37R@r5oZzU{V$wKU{3OZd)w=aL3b?j2aN%kqVj8<=!N+!6KrlzTttRRW zt4(V=xzk{}D{CUg!wpAMHV$k$?rpS1Rr3vg4o}1s`BjQni)nV=#0t~R)9)&}&-!ii zZ0dEN&|H%Amfx&X~b+T!YTMlW#e7W3IsM> zTE6Sq@4SY@1D=5;w5x1g4}~<~;R=2*a5G&5A{*4Sf&U-Nr9z-8jQ5soT5zw&W%f>C zG2sr93F>EMmDp3#g1*ac7gpcwZY+l7a-Fkyw`STDciJ07Ih?a?wv7_v0mU{Q5pSf5 zVNdDEGljRucopITW6a=5*ki=kGo$9{;pSF%si502+Mi*MO67#BTsQ*jk5w0T_;ReucIZRZVyIbefOFGmcP!!N^ zq?fAU>GZv6IpQ`N!Gurq?02^|kk#gi?dn2xci9}BRZ(1<)!1!-5LfiNe0Who(6K7} zI$K~|2hUTl)7Bf-@hFd@E`PLBhiPKh-YS+?EPLFn&7P8_gu7W+(a&(!I*Z9#!|v=5 zW8aTv7nG__&S8aNSnYJPk9)gj=29E0ExTDt%F2X1yZWf56QU`qb_>Ra58U&SbclzUa06T0S0-a&iEJhtDzVAy zd&&_J&{wN|tqW*b;S?S@nOuain$vQb|Ix7c%UQS-w;c!3!vdkr?yz`Mcdl%=K9~1- z$E=UwcBj5YR|9i3QFq~HJ3+x(-NcP4z8iWr%f@!FHlsafiaR(*eUofwVrvEL)Z-@i zGF4@j^SFk+r$%5MR6=-VIJ5Gg-KOK$6o|KJnpIh|DGX8kB(^Q5EkR9pfjF~c2=BVN? zc!`(W!)|kDcl{N^Ul;w~y-inF%uG{6`xvutwDreUPle75vlfDB=fh^qctsa1NTDuM z=!NlDCoAoqDu91f$iN5>^WK6M(+SfjO9+eHRENeznMrY6`(gu(dGK`StUSMRN6BLU zuJF4VMOVd9Y&$E(3Xi1Z$97w{P4LhAa`SB~0SEtqZ(>fi%`N7=*}qvd8nQ{qMd^&) z8azgyX)m{ZH9$-Yz)o1efa8Uy?uv5fd}L?&jSci?dGwe<2I_PVRv9q^H+VA^^&b|5~YrInm4loo{7#llnWGr&sl+dxRr9M zYHzX3dH_DJVtw0n-*zjo6AKWx0PEVWT=i0mGjE@fY*7Lxfpz2~WnwK>Zj-*_!W%2V zZ&6CTJ-2HDZk)!^6vkfdqz7YQf|#+(G-sw`x5$_k4Z=|#EeHFKTaT*#G-w#i)9pup z+BU;N-!%hnl^P1JD*tb_^24rmO;4VtU`sSdw9FhB)-waP1js~XeXaMt4>hA^#SyTA zd%(IFp!G7@GzImEJRVepDfELCeI4DFPPdBVx0=2Tn(%%AbCmh93mkyaLV7iV0W#To zB0Ds#!IKgKb_Hl!J$KukEN5dY&damJkyl%_SZvN1bSr5=H$p4h4@SO1k8{~h9%RYy zPW;cfr#=u)5Yyw;dEPugci1X8vk4veb7bPOX|;r!eOYaom~1%R536*2jvLqK&99{& z*&ai&sW4&jnBCNqjYG`SJTR(-mF}qpgy=}Yu-$+iD$)#3IBgeWxe-p5)n6|>HbL-Q zO(TSs@%$_%fi`O_#Yfc`#~zDOC*vX-M{rW_BP(fEl&6bX;fRgk8SthjNL7t6Eqp+D zGIP!(D%0$tvh|v)xv(dIF4{7nfsYjgB5GTflCA{+GnZqvEqGxScH7ynpi+C3;HdD< ziM!qmJJE6mfKcrUt`zI?mX*i`07zleafH)2sso7@GbDHQcZ(pL|nMTmc908YBoRaq7|ri+q-j;AYc~=iDpq z3|nGWEq$`GFX9S$7RVrT)U#>$&7x^M*Kz?U`8r#NF&2_sm5O-tFkQ|@npX<|C`%6r z*xt#&od|3~oAqa`4u#_L(`TGxO8++ckSlGRA1FnK8tP!)bPfLJmkvRj(?}sXuvQc zFSO=f_p~h*dV3ZQHjvww=xzdh{qh{O7Y761gK?<|5G)@tlObJ~)nowBC3??l#=%XM zW(d$ZWe9Qf7`4iY_Ek1mPKnFuR7RwNE2DiV-n5xYsR|w=j8;hCFn2Y-g0RVyP!f^s|h*T%j zcH>)@#E-q2(Mxo#FpdtO8{O8PCT$P*W5D77ubl`{Ro}+c)TqahQ`#3R?_#z?rX2vx zd+t`Dn-p*SJ`C)x^N6|N^sbh(5+XQnPduZ=-5rmhVh!NQs?cPcqK=QTy{QG*$%@-y zClKxr(!N7XOs=$9eYJ!xyEB6^*oW~n2?Q^C%md-H&JII-9pvLGb|-bq>ICow;EJ84 zqO@;!*phuTF7@e8r|3`+Fsr+_%?5Y32iyF}ioh*)YmDq%6N*r`S|yK9(spOLC8HUS z&giF^+^)c6#m!i!sTFR?oZsNy*VdO^Nqz+*P9Y5tUiCl1!EKM$DOEMB0-sa~PoR4I z*i+0 zqN&WHL)tyCw@NpuGsR2&RvKTLlPnAIZYwg9%EV9lE3 z0U)kwT3RnsW*f4QXN~r{nOz-JkxS5{YI_M)aCkrL9n;HpRx^`W!LxHHh0!*f@LD}! zC&|v@wP~l&RgL`2C{|l&+{(`sz`cC}v)v)M>7<^;+3X<1{}KaqpmjGHDmFvV*as9e zpRVKu1aI=YovyIm(}o}2ydNBNRh2b6_ubYqt3|x!Hanv2g2AiU^6@(5H@nrK=Ci}9 zS@Yn$W)e`jCvS#GMle4vijc6oSA*Xb<9N_-X=$8|NNr@ojI>LIFm>Oo!I>q2*d?Z8 zT{=iY7(xZO;aI-*H=U!w$U@Rq^n2@WkB;h^z7sM!Q)E=x!l2BLg58 zSc%;~hrCM3J>YZ(T|v{cRO5q#Oa?G-&*;w_w6|xP>xd!q#M4$US|ZVu&fXp+aqE*&E1rE6niefyt|5>`>`vx9wpz zEMQRp69P*NICra8xW_|HE8+^_gaNjTV?9sHq`SR3+HMkJwz)w}rU-#FTUj93u~>11 zLu^VRG=X(g^U{ud5Z~Pr(8aBfJKC^U`Oq5eu%;Dui?g$$fS|Twewa0mIQ=V~vzwmM zM%XGS&H8tdL$`oYr4#I3Wn(*Ns>ZAyhB;jp1K*L+!l&B1o6!eYFEDVMc;6s>7WOf- z#+V*pB z(3ftNL{U`>U^(Ubay7#*nEM8p-IB>(fX(EFKW>iLKL3;Mndr1c0-Jc^lB5unBpEGb zaoXBp$aq1319TcEjAb&8Vgtech9}SWvNynot%3-ecEW}ln&WyYT)lhT;?{+HzS!>C zN=5}8F^@YIm5{AB$?lxkA$E%c1`q2QK%(x>Pz|%mEetMs>f;{f?9t4PF=J<{d4cI= zXpuk+n-yBv>~S^zvRsBMJX=HqF~@w9i$)>7D_~Bd&n5PoMd>mkiowSAnZ&y*QVQAv z?_?mAy}nMzs#gQgJq4n^&Z+L_U35V}om z1OXoQESUA|eN<0dk0lnsPLN`h&dK_FXDoJt&01-e~ zO$#Q{b}Qfn*|tCw2s>|fz^O{aHXD)R7FD1+XV+ks?j^ieLv>m0(}?%R6cy1>L;N~- z+areqo?ERSWCcPSz}L#Y+S>23<$FCbn6#*vy5AB?{Jgzy%aAPI?tXwlv73~PA>hCw znrAshYo=DNZ;JGCE0S8RG~K{@TeU~rD5?tAaS+{^u0t^jyHQyNWka!HtM-0-1ad67 zuUduazV?vknWz5B$V5ilb(+^q9D!tdR-3cQm-8mK-S)X*!9DRnr?u(!6y0pA2Itsp zj^_?&wMzb+%A`umHVgEQ5mZgZ%o8YWy$FY8*l8!odJm6tht>TS0MBN-tSwsyZnjKy z*HEITTZ0S4rOjrdK)ZRwgF~8W)GG4Kb5PL>SjznnW%`G*pDJtuwR+#V-6e0zQ`qy{ zineySanInmnGD#l*&i+(m!<%xTIHZ5d$wnf?pW$m7|lM6knKx(2*P=_&tFp3ds9Jl z+_uB6s(mT(=kW@>o!c|TcO@`!Q+I*SSmz`MfOJkZ{EGy8W|)KWshpW2&%N9sCl4>@f}wNJKv+W^x} zsMRt_T>cdVx4m!50K~Y|s8Cr1ix=RSJLESD-6Cx}4Y(@}RV@;ITZO{cLR34l*vb~~ z7?*4F5XpVVDW)dL^+^53te6oX;cf3y7&o_mfHPnpYB*I!x>#YpK*(mdPMeQy1up^! zsw^Ax9WGVq;z5)F?GUBxORo|iXkfR^H4CRNQaO85sD`oT<8p5hgl_k;CdGm-ZZmC>sVwosonOdB@mVU=59biS=d%@_1ba& zs|_etRj*23(rgl{kP%@_Z#6-_`UFs5dz>Y;jjQd}SUtgW)?vW+82ZQ~Ej%DJaxdy2 zHxmg4-WaNG!A!YroLCrE&_!bz0ep8)(5n63jpQC*$!f&7@~!&PUWj|Em^B|a_}Ol%!~F?R+=%|thww3^E@ z>;ZV$H(BkG;Btkt?V|U^TkFsn0>gHj6@&#{7qJMp2oJx_#K5ybsZ=BZb#$QEH4kKg z7FNb3 z2|(B|iEK}haZG{sX4B9^yrJsSwaq$wbzv5WLsOu6C8D0gT^9(Gf|i>S|Ac|rL6n6X zm^{y>jA~Oxn5dicYBJBNQqykhV7R)<6lx;!|4@d_ObjMA12LhAIA#4%zwy(vEw`;6 z__DZ5ZW`>8f6mpGF}AUbwmSrC%e)G|Ran<{w&2hf^OT6fAAqVXPzdUy+OH8CKLnOa zJ^GVj0Q`&4~5GDz!C(b zx@WPhL`=5WQ9y% z)CL@mafHrE0qh0?HoLaD5CZ>}d3Jn)o9DJ=>8wV4^D!&Hh~Fo$bZ+2};{M`lQ+hYR zrsfV-Qgn9qY&`HoN;Bns5er&RXI~k2ezKW?s=C=W$qvG&+lR*?+EqT%BNfv+l0}yl zh{GL$w0DyTRbe>5iiE#Y5CCc&Q$vFQfg@0gCc78s8BS0uv?-8>`B>v71~AB zgp%1FYo^CUtg@wbDzj$1Q+La8)efwk!yf=sK&-!1eiIbG16M4zYf^}ekvi2g+E10M zfb9j`nFWfGWe`1mOeQL=v8WZUt{P9am8Dv1>H%m{X(vGMZ#B41yO6UQLHdyFV0UH! z&gEWI+g5n`d07wH$6`NVKHGP7;Xw*8aaD%auFk!xpUgGZ3LW2$Zo3J)OS#qL0zOAw z;3&L%wHNns+vdoOm&^(qsv{}L+T3>n3&j0a+>glanb_F6xp)9gD{Ohv+p4ZrFip%! zXYRn%-G)8U^FrXYMR(QiE`jNj31J;cl|gRGw7ti^CmxRsgKY|{{l^ItrS4OhKjgGu zL2Z?`+37@ff)fPp2cOgw-F5QBXP8oq5~xCy_8p7Rh7U_I3DQCKj{12|>P z`Y`|mKrU5ZFg9*NnMGAJM{2Nl-dpk3i3#QwAcN+4+OGts+wI!5MTk99X%(w|3GxO& zbFWG@=Cmy)y$uyrcJrgH`&GKx-RPjp0}0t(9v;)pzTVBD#u#lGlHBElu{kT3>;UJ+ z%rYe?A$|aI+iDPv)P=Nxvn7#Y&(*}EtDBhG-E~)MSL_@#J769l65Q1<7!u&RR(CZ4 zYd9!nP%ASPth;2f@LE{DNn^u7z6yp0h|T&AyT=s7RI6^fC9!hRQ&9yMP3- zcu)EbLOf8j5>=OB74dZ5LcgG|0I|9wFX@JgsaDJ|RUW*lBZ(z3{R9&h)_N+S+b+C7 z*_*hl*f(0;O>?g7m!}AoNdz!Wf>g8(;wGRXNCueKzH+jMa=F0T zU<<{+VZ1gJ??+aAouz5XIv|BHAgtnvqb(Krrdg^UB;IFcy``DLbOhF0b&nQL3mNYO zoMQu#a2^6ym-TZ{GFaVpqf35=Mfk#!zHt<_dO^ z8167*2fP!k$M4KGVHoV9V#}y><6q}C5ODi(A5g_>!mr!1X;lX6+}xp2NowF>hYQiI zx74*<7Dnfx7oumqY!QNy=$h@2?jeme8A^YJSz;c{KR%rXGh$9Va^#q$`inAS_8*B* zDD~qq3k6`5j;q?njCGYJ>SNj0sHCS^pM>!+n{-wN(T1A4>iHC1QC^h7-_PL;J%zP0gOx; zP>B16ZJ1gfV-+UaZ&Oy1CYHMrLwFE{O>Mj;y^A~0odvS1E8CS4EwkhMr96oOnV53C z?W2QZR`e4WKw!L0Xunid6JMD1eb^WXKw1ck7~83$u32q&zz&G#X;lCq20J6JAe9b2 zP>q$x?o%nilN|N<6*MsBGq@HU`-8`jzk-;t@@E+1+>J_lz{G087NWK+2;M#(?zzrffJNeCGja zway~Vln23iZR#}%vW0wKC_uq zw9jN18^+cO(gFH=P-x?ep?mkBAFNQELTqqbO4(UpnTY6iTEfQ%B}Hzt%A=jSHq8qb zPlOg7OfX_%JM(IF%VHAeb{m1Z-8Rj{2}o-ZsW)R zrGa7yfEQuGJi%;`ixMS5xPpytiFmf){$V`aG_uajO&qhUw`JI2WlEvLe%A-hjy9I2j@p8Am+^mS(g=fQMX3R{;@ve49x@dRs29Nr{7fW~QQF5Yn1 z8Rx>^n#;Gg%NDA(3johp8OHPXYAM;_E-TIrxE0;4WDtiv%{(i_lT}=~tpT`K`@Go{ zDbJ>j?zrqqaf|Fhz<6ii>kSCCM}SXoZXKjG26&pWOi)eM8V0x^)~QXQOO=$@@$-SBmzS z%9KM16zPPe1BTS9bSYki_@CA1)MyzXH`Bnt&^`#TS#J%3s@}V@uUK}oJM>|ClHKTT zxHb;QynD$U{`~}OscE^`P3^uqR5_}0U!px@>`O!dZ@35bKHMz?FM$L=XW3)30`N&J zarlBKu*@+`7!)369|+)m11A*IR3lL;mzg|sZs%-;t?DGhdJkCsYMTQPSL1Y-cn|tAiSmBop$$^>j^ZE_N}sg8xI}r({S%l8v+%p0f0Xb%&viJ zSU_kewjE}&$m~nzc8vL7_II|;E8Ys2g%ymbmSwY;qD31XM2`pdv_X$uY|y4^tFb61 zG(qCtYrl=>mh+j3b$G1{Gr^)g!vtRSWoGuKTTBX1H*HzI+$>T9_PGPXFoT9SyB^q- zG$>_sj|oE*)V3q9B#prZ=T?-|F5rV1aK8fUMQS_O;_oZ9{m?97tA8Ch%i6 z{F0{`n$v2v1zv#wLwxiM1tPk1Q|+)2ykb9K6j-?3B5fQCa5nQgsEy05UG@|YW53KU z9m%G>gn%Vm-eofw;(*p(?NFzKBs^8cT5$=CZpg}7+avn2-_<@3+qYSQ;c1KgECCI< zmSK!?`ftnPf|@_UEi+s56;q>e#*^2<7HqQ%$eP`MclFI;AMPf{)nmie&T$>YdIXkZ z#$Sb1nP8T%`(jba?i=sFKw3>Q;tPQ)_KCE&kCqkh?qNYQrEAO#U>MFsuaFxn&_Z== zmtszUNfpEs$3|VGRdesAot(A{8+fs3=0{b$C@8w^{^Jm)uRt6NsDtg7!EW3oc9Gi=M~&OEStd=4xo#qPGeyy)IS`bR)`2zCcZ^}hW7%v7 zBe9vqAaZ8Yws?fuL93WYX5;16)()1K%vvBD&480^Xz$LC+iT;(iAVr|!O@Vs^eM-e z-MLZZ7ay3mxywuB#aOwmszg4#EtyMZnpNRbzKWv9wyWKXqJNrnSwdtu$a8j}^ zt@cnU_Rldhu&&8ET%4^<8Qgib8IlPz(JV7tJ>k1ku^6aZE{$tR9v=@7n(=PVH-Ol7+p**{+e)+ew^;>1 zTyZn{JPM=;+Leot82=xFS>wIgr`HlT2HFONcC#GPe5Y`doE;9OZL$iFpSi;N+YO1b@44Fko`r%GR2FotZ*Hq69d=N!F2b4YPmJN4`gGc@5d1#O z%(-ttuZI%W^A*#gf}K(}<c)yM@tmwUE@`SLV1{@N(?d`kM6Dxza}5#D@-BloMJ`=m36<$hRCf z7^QBevau-LRcIy@3MR@rr_L?(Y>PM(Rwv7BFf-8Ntjt=9O?f@n_TV|#hs+$k3qW$> ztda#Y&9b3;zfzD+B~uZ%Dgu@v+jDd`B)~*?m+pHf;&glVy3@Z|d8eShB-n;4=V}w6 zZCGmo9th^{TQ?5y#k}nev28OU%V?2UF_!RhyH<}L07M3E=b7>jwrbUCBHI8ivKZdz^mJ)(;nF+fKxtTQ14C{8oINI2Lujc;SN5~F0MD21I z?$2Q*jUDiqk#71QRFvhH>?LSgkZ^Om>>7RG*@L3xA+YudXlpn@x4Uf)7(MWpT_USn zBUy39w#~MKI4@AvNcN>V9bR?l2#DCYr{4i!Va2t|6?@30V=D4!GLw6Amz9aEV!~WB z70Dh3SN0eKP_WK(+ys@lmf1UwTfN1Ex$gZDrr?UYyJ*-sIJB71fuEZN1;n!I834o% z@VMAkFcg?d0#;WBSo%HpUb{P+En;P>1wUgd9K#|3i zT}aQCFHc{r{6Eg4nsjJ>k9EmwGO=ze=3m&**Ou$tstM>U7~Hy@9c_HZV=zjqx+XDr z)M)QdjJafHu+L^EmRefmkj><&n9+7DQVsJ8Xa8p6^QvJo?uRY5HVZ$QPcT8jyyY$i zSZoR6&kYBaIEw1I7ItBV2r8&j4qSveOhMaTAAc1*RKvMg0f?#PNN_FtY{3w1 z294#K(C(>B%$V=&%9d*C+ThW+mX$-SejvJ43b*A*gz_{Yo~0=k6xCaxe}OLSCjiI- z9GdIG%-Yrr7HPkGE>zE~c!05nNa}`1J}nv=xQ@K;pd$kd6ydP9(5z{@?G1gdZbW2} z6vWefXY6lE)t)I>Az@A$Q36BbLhhGTEUKF#i1kA2cF)QOQ)vg!#gxTB|D#E{FGuqHjKGed0KAeuzG>so9ffp011x&hD3vIf?Q zvh9%T)@!qv+qNEnC}j-h>1p?9tKl<<&K?NZ6h6(wBoHhc-4s6(h|(uHEcbEdR9N+PuCyTUL8A81M?263~Xpjhf1aRbTf#;4pTxx|Q{H z_syMy)s{xXgK|%NY#nl&G3PG3oz*QOzs=JKAVroVR*64=hkzqY%wvti2)hXk?XpYa z^l6aQGP|L`8|~()dMN&S^PID;tVUu}25s8Wr+N9dUIin=thwg0^$?F?B>4ahQR!GTF0t=(sJ0&4{fUnpq*X&n04k22D0N zyW6Z$8_Y1sh`Z(@sTrYD-xc5Bcy#U}1M(m;sQT zO{oU|HQNH>w-a(Lcf_c~KRf|IyxL<4U%r?`c1pUcocv^+Sb=5o5tD8|7aqJ?S`GFD zXAsf}BX%oFyde57stJkvZ1=6KZ8kZ<+M%@oF<9Cl=-bXI{o-%#v2B*2@7Wz9vxPks z&YPtZtNjO^PwOs@a6^2niUL!1N)?5wyT9#88p7;~#z1U~0_IlLSbR_5Gi?qtho+U(WZG&P)57Qm=ip&KZd88rPT8y(in= z1GR}4;&SQt4OuhKHqGW{Cnlt~8_|88*#)Ms-kUd<|Re5<{Wz^Yhj zWZe`Kxfai_@jf=c0#NOzV%)M^V$U_p0aZJj+n@pL7j@RdLn%UZw1@3N=q*MARqB(e zj5~`A&VHzgl5dMoPg^u)V8*p2DWEyLaTv$5Fz;S7V;{C)!MLF6+NMeu4xT`WEqfln zDNEsCW#Ek37$<~);DJZ7S2r9o>UU?>qABL~f$j_oOutwJWeRhNvrrhDtnGHj6hBGF zaw~1Zq*%BUEO*|NBf3?vv9)L!wq0|pC!YG+#2~34QD#S5d=+2dmP-P?n(26?>@9khg-nzy}lB5|q)cIu+B!xZJ{>?X}2X0YnyG;MCkrX91Xf z#qzLb$1d~DUQ(;)Jj}yX(*TMyjsIR#N5Il)0!G~K=E216v4i3uOLc$26psYL11MmKw$r-GR2lFj z!8&ZSyi{`oGgb>?3+@BRa^(xs#i}qiS_^`?*bLcfD{Kxb%{=6IE6bIPnGsl&Cg9}v zfDSihaduG$vC6CMJ(e;)^YEG7;W9@h<#Bn^q4by4t)W&ZE_1n^_=DZ#ykbLcLA5xR zcsLGKA^_ve-wLcZ>;5oRE}5cvWpWN+%tWK1*otAh%Pk*u*L(AsQ%Y%-^N;GV{{z)~W<0_0c_-8O6KVt%&D2n4u<4T{w!6d&3| zgRsJ4jVUbzDvP<`W$u^aP8{B9Db?)VseC`t%naY$ac5BHU?OdpnHgnGizhrb6?3l} zLU0D%AJHmeO=gxuN8wP}EEBsHSKBK@w_4kw&g3v-+NAYMMbg`2C1&!v@iNTUUEE7M ztV&8Y7*tPF%?X=t)O`+8Sc*w##*_lW*7f5%Y;4_B_qBQ-BJ*XYpVmD_2zA=$HiQO2!x!SVJes&ut#tJFc6R5JwtH=fe+Ah?e3) zLN6xPb_s69Fe&B3 z!Xvl|Sk`XSunE3@0lM)2{sn&tU+}L}=kLG#v+Df*>0eUkzn}ezANaqYr2Qvr{vTMK z-;w$^Q0MP2U;NQ!{;hhT&B^>r6zBg_68C>7Xum!@dGp(kV&rM#^;fT+eew=9(_en~ zQSm!Pe)0S_pS)v#c=G!BM}=;}Gu!#uWC}fYgv>R&RPdGHYXn73}sKgag1p z6t9XZDl<_wNxp3HXU3nWFR)va%uPHwtvA?XxA1U>fRzH$H!1T7Fqbg**sl)tCtmf| za+M2u#AKRUF!uxW%pEF#(@eRnx0Rn=Isj4k0CZC?Vz-)hHE(S>W^SI!>BTmT1v+@C zI$I%Y%o8JR?p;lFwedHc9&@fX`?F)fR`PP*)>Z{~>y=w!SWbHkmSOEP1dWk0A2`G7 zEGoEE;hsn2to~BsSaK~E-mW#-rOV7g6)a`x-0jir)O;yQ6h{kjtC%><)O4OJ@InnV zt9rXKfw1vaiG*>R__!(xeoa|Is|Dhz%tz0*20ys+8f-jy)oU?dM5SP>^I&}T6EyAi zVrfZeEf>ylKVVWPe7IX}zVB9TnIf)2sg0sp_?C!bHmr#&aQkLE$D^KM+!8X_?5PHS zo5zO7%2KULscdWc~x6^#fmgy|( zwL|XJ-DS|+SFN29v!aq~vjk1UDqA@$cq=Tl&f>y_Lzz zeKQ-@1UtM-;68?Dc6XcdsCL`7b}8QX;(3 zs_VTcR-rlgka-V)&X^kxL$$(FF&rzNw##_Yc6`30-g`dt<_ zo_#OJtYV2Nl%oxvqA~=#6Frh;msXD~*Xm)lVik3kHq5eK53l$>pU8vd+d`e0VN*(W z=PN}#*B&nT_hMUm#&fNqUlwt5p8@BytG-|r#B73j-Kz1FctQVFGzz!p$?g~TWmsfx zPXOCgoX475a$97kKd;LtP*b%mcXb>$rtA(<;P$7NGdHC`t8-In01FK1#4HgRP0 zKADDwlilqnd8j$mx`H2g#AB@P(3yDA!X3wEj}A+CVe%}^5?J#rZ544gh8qWjpLSD? z(PF+VoQSP08&;67V2;^Y^--!pVL2Xh?wMtb$4%*);tXomo5-Eam}^{<$z8bEFi%eL z@vS6x$OvWTw#0~6s#w<^ja)2SJBzAlg+=6ob+)P2yW7a3Uy2f4EYeNcuy~yKO-1i& zI%oDJ0b=k?$8}BxbT@>PseN_1)kN7$2Fupa?j}?YCgMn}3y(ogV@}waezQ7D#VDfL>HPn8o_Ho)gxe+s3`gLqtJ*Ma%$miGk)K@- zY~GRX$W({OH(zQTT`EFfQ%c$G)}SDo`n8JsGAGvWp7A^sXIGXgyN|o8s{tBN#yh&$ zZ|_q5ICCj2S;eBw{fgXy9cG9_`;nsRA6L+&#AM=v5@p;OXwZ^n#*c-5ncfh)f_N&T z+h-;yNE(l1{ybhC!@Jx#+tn9PiG;AF>W6~GWyj(U4`5Z!V_f+51sks{7|(f93!4(O zcLF4A%_ARWR#kCk_*Em{nP=jPDQHfeHLOcB=T%*}vQKqM-x8@4TpwyGKu=e8JtDC*ag989$uT8~l#>gV&I5kTT9PyEs zVa7Fv)aW2qU{CGtc;h|! zU;KW=ay|E9d2Q#TD!p(97inD*Gp|nMQamN!3<=#t^xXzH8+WG?X;b?X1iRN;VFY3- z_P3Tk_qjb-%~lX!Ea+<6UjjrHM(nF<8%1d-rN07D*d5Vs!k1NM*W3jpnw}V|E zr$O8zz74z~D<*+))VQ&Obo+3d8j}h_Z60c^~a1UyahgHRWzz8my z!97PC<64gc#H+f!-X1VIuDaN)dJM$~SA|zryHTuz@`UOUExe&)U+$JmArZ5Y`{x7)K{a!E&rdB)GzV*2zeE1wt&`5KDWa#nNW7 z9{|miU|eTQr+T^`&4AazD6)lQ;qP$*R^S0=T--K46sg;6ma8CjNLHlJQe7Klt+ui* zHYZRVYFLP=Sb*6snA@?~@%tjuuw>VvAj2@*gjLOh_QR9ZO%+y8600?5Q$W*ztzGtcm;&d)14`SHdH}0YObJhJH_~6I|YZe9)t;l>p9MLU|7Q-&vcpW z0gMBqDH8}(E*1lak?q0-5d~#b8?meUurI1NscxoTQ&(ebzf9Rnsx1vw+syU9EbKa` zYz~iI;6=1fM#PcD+Np=iFOm~gK@?25ntBB6Jw?{DNzHdzCE z-7Ls>OoiKm3z+B3DLjT^&ns6`0<7lqoDmZSNiiUd=52pw{6Mxw0OLA=Ph3!$%=@%= z7$88&YzzLG#(nndI`o69HJv!pVpj`I$C6#OjfVY~F!mdUiHGEq+?!cg&^}Fg_c{{fktM;oe4T-CZrzJq%63zsv$NYNgnsXUoIX9 zpKLES3z07?06mOS3m~g^ro_;g4oNNSg{8c*3?ifnS2U}Xfdv;&7HpQoLaide^9(qb zKsfOnl-L$*8xPG}+Hlh%sykyP3-4ErjF7KNhb1CjzbU6$ZjmIeG1@}M<1U7t*qB!J zzFbaU#Y%If4;XpdD5!P-(b}=3 zBbj(~+;s#qe%F%0R0#tz0l|)ZLFI{ski{1(rD)Q%!aW{*7o5LB>N_wSSgC^6+)%;e zP;_R{Nb?H-j^;+43aS8`l?H=P*`Y?^DAWGUr--H( zL0SL=uoFvGHybU2jkr0lXTqJiLL$Wo0|r^$I27LIc8j{BC+3OgicHN;Fm3Lo<=uCh zK%?}dc|$Cr>fyEhhLSq5tmF7T$O zN7%Y))AQXk$V&~7asu$wiop{CCI;-nZ5PWFI*`CZ?rtsLa4WS>%};AE0z{2Fs2F{_ zZl$u1jQ`tQq`?wh(d8=PP?x}-Z!m^)N}J9?jt;j_g-zYw&8gfI06ceg0HYV%M~H(r-J({yD;a``6_tkJMJgO0!2-ecc+B{SU_G7# zNEAw2R>fgv)yS9$Y^M4!-q9NQtUPN;nXoZ6dt#YdU?$p^4yR+?97}YY$8u}A0={&& zqDCdobt94kjBk}8?8g+1uXrQkSMN5#1kvs1;tqLVw`v4Z=2BH((C-Fmx3F&z^3uxi zCfiTm?z)@DHTGu80Q6unnH1+W;Jt@6Y?iX)&_G^hrC5rG7Y=IruI`;l47+kh=Xw@7 z@q&#ta4Nq9DOflJe`N$ytI%LrDJUsM%iV5Z^V-d(QJhdl3KK46Q3`#V*_&yqJ~hYHi@a#&fG z6wuH!!X+RE*_7hd&UmY`ARSl5s)q`>6}$)d&U)D;gIQnn?#rL=0e%?+2FMuxQ6ZHNIniDm?T)~88A!QK%n%ejYq z@9NmB87hq-SuIhCyN*=Eko$&jHxek1tS|)lH6F z&QQ+)AU>*9sJBW`$!2SfHD(sEvUsY;9H!Qto4_VRzD-Lytrbuoy_m(WO))6elE$zX z^$S3z;LGa%;;NoRgc?J5dAaNWj2*U>EZR8KZ{Uw=IqCJ&VUp`^zLKT3$^`%$YqGI{ z*@HO_z_wj)L{F?aMgxG!BeS+}awm+G39t}b!R%87)o@()nAt&@EebRhQ8R142)7B7 zde33$7=b1cq-r<_5L1e=sKAB8Oj@Jc;tG~7rUdUcRx|xvO&!)ST!dM%%Wsqlu_$by z8*?u&=AgGo&J?w);IX6@el zl2sW}joAY%OF&jjGgMNV6G=VPlG@By#PzbY!{1yIU&@7gaEtbyHnMz`jOeBM26xV9oFmcTo)n)~%&o8;tC3vwqc5_GB~9dt29{ zI+m4U@QeixlK`OGVe<8DADF|gPnK(nMHt`h=9zg0g~T>X>#IGf;J9O$HW@7k!D*|} zzO(S%7a2-XG3w{NNs^k)Y0Wn@AJ|h}OMAl9ly_TLh(*ku`Ndne1urnq^*aFWdsOH{ ztL5S=t;o-ta;g{J@*TCzTDYyj4=XbhUXoXRp>9`{Fa`^O#OH~?q6?ZGdMIb%K;Z3(JC)N2d;q#?<2 zLGWF8zRl)vD$Cv`o@>;5Om1s*7g}+%*X}nV>WiW83zH3a#A5A4ZKG$xuNCp|Pho+I zC_C^&RXIR}aGLlMK+X1kVgW2^_W0xZ;Q`jS%@c|Hwu&Lyn0L%ZY`c}NMcog#C6CLJ zCGq2_9^hqdi>lqTwHB`6O668dtBbOMe_JfwzJ6HvKJ0pHyELY(VO!UNJq5!*_KF|h z++8SjI8DH`1E`$MwB_2C=~UB+xl^L0e1aI$7fWb^`*dJGa{}t22Ip!w;mg{H!^Xk( zw6zhyMj*$ch6e%|p3iIH=V{$AGZ9NW5c#jPBD_Cf@0*|=pklGR{9Q|5{+tGiJ(vw&bx`w2*F^#3}~(P(K&`n zIM+}*EdtYQ*obEdONWA*YYgxhVV)GPfDgYEw6Yu6%5E9NX-8I!qMLM|;V7OV1J)ML z$W$#zA>WExkJX5?1semwbZo?Amm`*sYNb%*!!tJ3YVMr{q%LINp$pI#`vf+d!{T+W z*;Hz}dWeN>Uxu}}7|LeJUbAHfwgG@$qUr9ZO?eyZ-7IeGhKPOy+ZU;0<>BBMMCRKR zZV8e-60G&!8QR5Sxa^kaZIAiFg?VyipiDY3xt*_8Eb!3<18qH=WVTOW9<#XN zp2F;@reMMahjX8d0BME|&!Da*E8F}aH_Yq>vcWf4ILG2odBVX&S{o) zR$qf<;yxd1s6iwHE0QbOvQPWC7sIBF@jLW@i*bL{ zPN4RlY3n}3%1IFeYcCYDJLH&Zn-@nqL`C_b8FISU?2idn5Lx2Gz8(Y~iR@)mR=4-)8wLjf)jX1Dj3KE3nO$b!FQ<*0wop7*b>| zl)`ck3^EmP!L87Avklg+j*Ug+n>)qXZ8*1StyH#A>!Iqs$w3WPXVv5mOa@{!8@RfD zPW%~xcRv&610f&ECtmiUeV8DbdErK@^cyF1w)C|uyRb=yf3r{4AP zttigblDQEoz-6n)-O(J<3;B!_(QO5s?6)c}IqWKV;*8x`AZ~bWscaNx2L7-!U4S=Q zHmdBVn##6GBMPQ*sdi(_J+5jKc)~v6+436J_Abuy;NHG{ZLx5gRZCb>Pr)|yyUATv z!JO)e;#6UxD|qQRrdYMTVZe!?{o8uNWmOU{m?E$XJLZ*SW3!!KU#PRiz zZxoC3PMpuoidwDPH(+agXYsI)HJ2?8GLcEyq1pb)dj4VEje-g5!0$z6;L>HJ*{&0> zmS#iKq^6ObSGOrpt>o1F4!$Xe4N5RR(xIx{2!nI zTdcyJn}TFhir@a^*ES2wJ$mj$2s;y3t7c3Pyj91YXskaR0K4Sa(C&PM9#aAwtcv0cj^<{r|ao}Qg+PZk(n)RC)Ge5gO- z@Yy?|5vvc|JJ^dasI_jVZWhXIi9VP9GmRzK<%qZ1`O?0cd9%IL z0a9c&DTOZcKqA`T624 zX44Y8wunoco!d9yv*IuJxS8lw-G=oP{#MzYk&N!L6A+Hw&a=DOy7*Q+@xmIgTfimK zbR`|YOm&5sef#rp$A_IiDxid+sk;(7R{s(xRy%}<)(KeZWAFA90Wjk8OjBLM3CWjfVH}KOg9~Gk{5~)5j)Z*^UA!EkZLw%sPdFiu(YAn^Tt}f#0 z&Yl{c8K6_z>ORaZ^vTwuisptQA-0)Sqr+Sr>@?XNa%@d^=me`FyqYGf2*BkYf6s(c z=F~m_W(?TKqFR3I>CD}Gw%!@M3hE$|avj1sJhAQeB0X7@xAOG_AsqY8dQuuAOKcY< zbUT&}xf=p?>rt7eP4On%o`BG7LxG(`afz6$Q5B5iEXRxZ#MO?~Hl9hA^%ndkpRun= z1b^HYj?!a3Q0`-QQC48uX4iNj!A)$m=jXPmGJ6eO4)$qhANx?lx~69oG0&Z5w|=Ki z;9=hMX;R>B`|*`=u($P4@_&FgSDPhA8xfoac>@0zA zc4CP)pmny!==S0SR@#LgxG}drK_J#9gC1u?*pz46*n6{9e_wa&$3Y9BFYd{9i|;`g zJ7aJt=_?;#M}f^XswBT+|!FZ-cj1J*$a>-1#Nq5bTT4%#LWmGl!T6e_Qz(UcN@Q6 zHqo@>tacwWq7kF#=A$xTmWA4r)s&rTowOU3U`9g!39(Vs&qJ!qB;0C3ld>Q7 zf&mvAzKIWt1*>vgk9qJ|3RFihH&u);8w~@z3qgzEE9?run!++p3x}{z`!i(*f~R`!?4%9y!=po69pX@ice$wD`4W@P+AXm|wSS zf40Meh`M9n2>G@$Q!OZ)JiFWe6?bF5%X`aZNgmm(o9a<%yOf7g{=D>SYw!I0$)lXg z=DYO`PcdC%EhZqDq!)XAbf+KUDCqr4` zsKbW2Yu=7+v~h>cJw#7o88;n~-5$=qO4hrO1}2a$+hk`Ya6B$F8_^UI0P@_48X>tK z=w{Nf&4X1v3np!E(_N^VK;lg_iZSK|Jc5N4g5%~ER-MNcpxmt6w^^vA^$-u!6u}qc z=&JJCOtIzYV#3g`VlUMVnr!OQX(D4$xLJXCJGtpcln{Y;A2_loy3mI*lrb$5t{`?k z&fAC&1W`=m0;$M9)nVHeB_h0MzL>>IQ4lu@e|S#`+xVMRz(REjlr z*j2?=uj=hTDzY_uDwM=>?N;NjheWgTVc9P%e-D1UEp$C^8`Ux`IIsD~?J^B?sAUD%vJ!yQNTgt)yZHYZ*H+XPU(XueZ%& zuO5&jk4spefe-;Z1h!nOI%t6(5{(sne^XAB|E4%mq^C|H9#d`$gV(HEU z<+l5dZTe}lNVVi3BRaBxOdyLG%1A(DS>50Lt=~T94hf*BDoJ)L!ri7zRX`5+o_o&T zYfo#@!@#f#9GY@86+>>Q7!Y*oY{osr6SAhz@KKGRS*_4h(6wr9WF=%31t*Fe2BKVn zB4rWT&>FJG5rUHukr$mr9<9RC5=k@%HE~JjHw{k=D$pd1Zjx3qWh5|D^e()RntWLz zv)&1xK%0@l&Mt#uy$uS?qPRwy2rW+?enB!_hpa~5*OB}x?J$g~3*BYap!Em)N|6u%h>6K2;}zy?*vqjT2f=6Cn7Jnq|C<1hsfNA*csu_MqgaCsr;8hQTWDnxlx}(bIfQ=#^y$v14W;%E(KVlXzaC> zZQPIK6dhM`gONaJp(SLRQ}#_}NawwVHci;B&B-5QZDqxx97@9!xeyRcDwq!`T@EW( zfp(?hk5StrrUKf*-)FN`G8sf|axwr0N5KhNRy{x=4sAqgK4mes2>c*F-3=t3EM%8o zC~1+GAEHCI?PUL4hYU?VD%xQpM@CSgH)}=EE-Y8+)R3P?qmu$GX@%M(aB3o$SdOJ5 zE=JL}!>!ZIl*=d(CBV&M3Uw_!j9Fz|rhf$RT_C~lSlOG3dtojN<+>iTo_x2Y^JEcL9<4Wxm36zUm{CT zXGY47!PXP4YNHDslq;^0feWn8%Yx~I!p(qJ0THUtvj?wl~(LF=b zoW`04MIF6POX^q^q=4ija@~n`MNS2|MB0a9Tu*01PFEgktwkv}tP4wRU|M#obVJTK zStMA96dMz1rHpBd851mRq;f0y>%|bBZLQl4?-Kpe>~9DKiTSwX_^GR*+z2QZUom z)H(=XqC=^8$P9GqP@)h3Y8jT(tw#y;Jk~qaqJgGUR_Ntaa7m#m^hxQZp={jgId_WM zga*l{l>!h*fza`$6H(Cz(%H8}^1Yds3M#p}ED^pfX#%7|PUE}v)(Br`=r7jPbaOO~ zx?aGjfK6Gpw3VSRYP}9UK)s@60D_*Xd~~T?3=I9n>=354#24F8zEYk?p#t3OFtaBDYeI4Q zjUtu?u_l?SjK;kZ0YpwEju!KU98``bq6G$R- ziSRmf^NNsQ)|Z{ucWUps7V1($h8pjap_AT2tFKRMTgYp%$wL*%^=AypWfAEy1r4(4 zwL&Kc|Fs;F4pW}dkfoEuJlB9W1Ma0kk{9%eN_5r>amX0aHqtXN#|IdxzaHq=M`Kna zdr@HgT9~>O$Ww@j5gUL`H$mytH*VIlh|rKZVj_i>vK$Q!9=+_OHm%}t#qSl6&p7f$nDWaP)K=h!| z&|!Ue30kL4;gwK2cPlGVk^_StyUDY<)ETDmNq0$K7wB5S-$hH$m?DNoAAgQKNW$!N zQKA?~1(%^!#gs{Diu66El`enQT^mPtR5eJ&(Ss)&>f#3ZSy`Y;u}eWl1?8j^1>TIh zawl(<)>@T82$Bt)LA^Rc{cTMl&^pp#1&w_%Fqpk1=rOlSuIkk>K>S7kk}O;!>)DBaot| znkICQWWClW(uvj`Bl(ATZwtR-iV#gAzl8i}p|wp~CrsLA^5+Rebpl&4oMIW6WzU zc|O!EhfpN6;2kY}P2JUUP`VGw`RLt5G$WBKtzB(OK*EV3yDeuYl zX|uo#QOMUZ0Ft9*#dvm8X0F#MFSTH?HjGx4rm)VW<7h}FHIu|8^ByKyl3L5UOuL*1 z1B;y^SLzLr36dyi1fPl~u~cJabjkEQ4^)h`gt9EchaK$18APE(bktm9h&mKV7nEH3 z(xd?+o62aZn+f-p1HJJOE7Uas2)&~u@A6D9Q^W$LC}qnYfzgzzM%mW#B?u2h6|K7& z>hQ9)qujU+^Ok8UKtglE=!`BvyR)O?myXvGJw)o0ePcHUaVg0XnU+|Q7~Pds16N1f zGeS)Cu5D;QUt5QSmm=+$)Z$2HA(lJV*+f#ZO5_(4+P5;{)+AysQxS^*U@V|el5EHm zvY!y2=rskS17(WbtzHUXATiI_8g+|ECT^4qDP5&=PlQ8go+s8vBIA=%V}bakp_*Zv zFqb_NT%mGK_oHwOj%suRBLa}nC>EvMDQwEjPBWy8pHlkKjkTy_=?gn%rjev2K+(H& z(jZi+Xz`(>B2mZx0&^IqDVOCgnnTLdr z1vW~!{$rpdlPzgQAvI>!RG!Y372aRjz-V-G`w0@a3Mz%S==<&kk_cLBQyNmFg~UC* zYuZl8;3-_v3h5PcWQyA4caddkEHI@*08L3n^AN35<5wW0Fij_m?mQR};CLT7iPrnt zx`?*Qn2}h}vLYeATk&Z}_ixI$Y0ubhTA&mg5ylC)BBHFbsr4LOuWO>fP6J$CSJn*`Gw3agl?v`htJXC}Yr&Nd!7m@b*o`l+l=* zq64DgC}n3%?DmS0Tc_>cpiroXBuEaKg>b0OQ;jqqI!I(GD{OOu1_$gX6$Rynunv_M zdG<~VOXg6KOINie?I8?oChU$TqUTT%D9TnvN{&I%j)0sl#PoSwM{pyDPRgeQ9G8MP z$llQB)ly7OOuLY7=31a4h3r`9xF+J)Z8?T_8UI7dm4+Ld&=udcdT!dVEG$Gaj0@7W zm7+J8kzLfIkQTVWxZBOq^zN7R1C zlBAU^D5+>+RK>>(x5MX=p&whbbr3ch(otJT-&i1xCx{g*^c@)dD^ej@p|HUOdMgS~ z6=KJg5iS%8(oq|LT)$3*u7p5wGU-U^yie0oRv3**Jqn$*R>46GXRJKWKq%HC_@S7q zEM%_8YcVCB!>S*{e_$CxB!&eSTlBRDm<&jV>1LpN(8EyZL-WWmCNkfG`*GAW3MSy$ z=R&I5a*)yrMWIS5<7sRg4J^+|S_`BI8`h}P(6x*@V2=oifRc%}g^lp`8A%<5GmSuV)`DSX=t)!Hn~Zo#-Uy)a37`CY@}swwL~?n z#gM61^e^b6JG4=U8ksYSI2nQ^Ahs;Fu#e()%)|f%$C`d~n%`uc6pd!W6;YBBNTXeY zYIcl5f;mTgd8iVGz0a+?fHOvssuftoBMG_sA zQ^n0W=Uq#IAh`T`0U?wgd(7}Hc~@<*AsP8pqcUU0-@&5a(c>g{Ucrl2$jF!SHBgsD zDN+l46n!%&KrGZe+6|4@%!A_wEH&Q61p|qp+qc|*s`kp8zr!_iexT7u5 zGO?;bxgOiaf+9DUsPfeChC{DoyV|ZuuBUw!)g9w=732dDX>2HJv;jvlys$+h z!l>9;zEEg7w#SyDqJj1~Gc0iX(L>81dMr!D`-OPn++iF*&tHMV=oksg^q@J%Nzd~i zv@H-R?ofhA24aLBeu1>1c@$rjF)=N$DwiaTga`&wMqN}FmC&P}j^aC{2uq`Ss*oqi zgmebV1xW+DpKb?@v_|(q14Dr~GgK0{WPB*+>+TCdG^h=sGVEdLfE%LANOyhDu-&*Dx?g%sia|9QM5u~k;PZWzGB%8u-9+7S@Dlqk^)7U^tlL?zNP|e2( zyyUdzq5v)bAVf)_IAZ8sIEmQ;;l4(YK<15R9xfP$M}hMWik^y*emRV&ALv;xjNDzp zV3YzF1#UX+B%w{+0cl3gLPw&oX4;1i)ts@Oi0*H+ZA&dB9jQr&Fb_iHjCQBUZ3_L6 zWu@_bfZPx1oLoPrU1vnKq-M~hs-Vx-qBLpRp<7YtftKhlM;+ch)mhLPMH;2F8H1WB z)^seP{6f>QX{)pqt{)J0D6xqnA|Z_&6GU4I3!E@WL9V{Skjrh!)uApe%uI{skWe)x z%{!H>;X-3@5VaOPzRJml2(O^#Eej)yuazJT#M!%HFnO{* zPvJ{z+kx7=7FzJIm(^@YFN{nt$BI?z5&xuXQ1qf8sFbY|mIYFd3Zb0bhK>c>QifXB zJt88UB8?mk4D@G$Bpqb~kc`#<&ona- z_{Ujv^3!*l`|a)ZcDMRz9De%b#k!o$fsZ(RxBO67@$UL@A+F9cIL~ix7UJ$KKl$m^ z`*&B{g&F%L%J%Z)r-$o_l-hn$o&5BFZtoWY?f)&T?yzug|FF8&Ka1x*ulbmp{S)^0 ze_Nt=-Rgh+Ytz2#+yC2NP6DrM`KJ$2!s}Xo{~?0-WZCaWJGd^wFOGlux5y{2Yx-{W z&%YwQJW>OH18noUs{i>x@_GL=UE22MPZH86`9w$`XOAsIa1Dt(AbT z)q2WYW^@~IsU;g@M*bE54BEOVS0T|2;~Mn(3jZjRF;S{mJyQf6C8ffAN0pK`;sQ4L zw1=E1X{cDEb7~S(mA;5-TUo&cOo0u?9{Nz4xE@>tQ&Itg2i32tD0KvwENPfcsURB6 zbk%Vgkz_@`vW2-wtDC_SnnF#`HCl|ucuir->+tiIECOyCMz>dB>bO z9|M|>KJpy?fXccVx>ON!l|`+|vnGjx@wA|$K1)g?b*FhsuaE)AiY|^@$IKlZ$4LeO z9$g2SiH%jg&O%HQ9bK)Vr?aG?aKUI+Mm1G7UYo}CB}`9rWg&Xjpf<-?uF+)-Ie9VC zWLZtYNM{kL&4fzc*z2xy?E_f-+FZ}9q^GHai==3n@TB@(#g%rwK3E5i$?=E^a}5DW z%_F4e-$9^OAvMd)Nh1>z!8TgtC3IPc3D-2dF^f%Sse=1T&m(1<45V68SN5^hJF83< zPq(3m)(r@@L)oTKpEk#?FVd=_rku6|Jm$s+~#J^Be{S|YWVw@qFl6<809XTs*J(^@pW9!3UP8k`Pwn^ouq_GmYbx>zPQ zvMy@|W>hJT^sZsNtL}AWdV7-Qb-_46k14-Ug@All(jlH}M@LcV zD1au|>PFTgg9oRS&7hrxJ~=4*(;OM%GA=OCG8($RypW-X?gb+9VN9W4qD#MOp$IY} zCRp~;4*uW*{;ha`O{kGSkah2wzl}#7hGEEELbcU+uF-59P|(EelvPn6b5YQ2rpJ>Z zIU1EH%XTsa47x*AIxy%{7P5({c1Q;uITGh73^)ZuMcuFy})DvvS zmdZX;83=$xDA&cfh-{=+prQKQIqDl1Hbd81|p8iBdgKNWf)Vb;v4NqzFQIyAsJ0eJyFx+NmM+d2Auo~^)mOw>qe?$WQzq^zYJspw zclk&emKm_5fVWvIO@&H+OTJOtVUS&itDEV1ni}CCt|FUi$znt&wUiN36+PUR*j{wf zNd>1ahAu2hW4t1aJ5D@ zw9U$d65WWY8%qYGI-2uc1PcnZ32}k?Ey-^>R(qX>p^`(=3Q!W`LBZtH1MIEb5u6Rkd$w?PM7>et$JD;_ggG=> zSB6;P1P(%dU&Og8Mkg?rQeLFd6E>GYZgGt25q9r779bjhkYEZ%5F5s5YbQ@&uGDTG z6Nlsjq;p0p%?utg0H}?(NaGYE{Bhu$jL{a%JUy87@uU!(XeUDZ-l8lkq{z^5j37du zwbafbMIH6SI31b&6Jpc~!>vV?x7FKoT>%}h_l3yMQLgs4H5Ic zkU+*Ths&E;_i0yWl_0AuMJ1HatSp>H-~$wB^1K&($_8P;r0%f56@(u}6BmLjeXN_1 z#YGuju&Jwi`8Jb17!oJH0qwecAF2*0S{Kj_afab2qN0^^P8pW~bqWy4Dd{v@L+}v0 zxEZJnFs7$l=TXc2(YcnoQvoSv zOi=+Yl0>ju=Kvv*&cV(vPnp5?Qqvq;K>Jvf!(cDAbCLsfbo?`cUuG+c0k)J3n!?2J-#b!>cyw6i8DqtSvPS|NcI3Up9m>wbm`MJE@_ zTl5X>UG!&n%-?6aMWRHiNo@wZgD^s>E0jU+X@XBt(vlmF5Hs%3DQO2;i6XOxH^F&@ z4plCrF*5tunQ(WOu$WK;%8%m~i-Cz5=-eP}7jjob(-1?JMzIUkJ96646d0XFS9Bx2 zvaQZ&o53a`MBVEEyNYI2eUE%s(NdL7sizNBkqDd+UM9@>m&llP!dAkbirTe8I({-I zN$UzC+e+w}{)9v(Sq`z*Hr9{zU$4C>#6-AIC5!=&Wx*_!%yq%6W74^X_HY^sWS3%0 zM6d5_8KtSp8qyDZA51EoIvR6hh2@NXwH;~#t<&+TjCih7tW?u>EKmrazL9mKKooJ~ zjExG<>jhR=jkP7|1j=%!P((*h$Ad|MvO$7dPrenLiD96UM?srOXA;R1geU5%px|9I z-6JdIkaj2_n;`bfRRTdt}r(*gGU9ARQTNpxFunq(JsTHtYy9n48GX*3z9 zbe9hhjdwaXb>6jFY5~&-DV&OBuB`DZq5D8_15-z>OLGPC%s$4cj%AM+g-$Ac0P@7f z8J-K{F#4;QSKAP&7Hvp+qEVnu+?WvF2m~h3agI>$*B$fTRJ~K9Y?b9uSeeHuYzYaJ zFn(H)-em2AhB~fna1`|nAJn!JQZ8wTx|F_vMkk!vT-w@cR@U>YmFsHNEk`@ohYw|*ssnba!xJHJTX+- z@{W4w3ZFWLP5MSx51B@zL*3~?=!Splu?ET?GE3ie~n_(zVbxjs=skLM~w} znDQXM2RlcZ7cNT~D5~4Ygb<lp}4S z1y|^-KjD+q1A#1Aa7p$`LBdE!iLL-v)3P2BM}wn6-T`*ZIu?#$ju>X=K7n{tsG0$L znE?e`G?}rbb5}t(HzJPMw|z%bypBm?4Sz9{{5s4E;)aBt`^W^$le9vB0~&p~EhqP- zB>)YOJkTeU9S)A*KpQAcWsWj7omOn@RONy5mJQk@yNaOsO1Po^Wf4Bh#AA~2pO_YZ3<|gn#9H=GAOi0hP@QK4=K_!d1^9Z^5bv-%EHTM%YydI9qFWHFkIC1=je$y z2na<`50nrhCye0h$T=N3%fe`dGa=}Xm1<>3bxV*vCu3gMg>@Gz5*}%o>1-re_$NYS z#pxNvH17>`I%&0SI3MuM+!$%_)RlHg0_kxMwDQ*7g&>P zOceFB3BeKCkQI6p74(3}$;siwnYQ47=2UG=%Pr(Qm8I3N?-dyoCLc07`{gStI@a!q{!XBi(G!P(UC>DAN!o9Jo@e}O%loLGw1^c6K%M4mPh$G z@+jL39!oTAgb~@~nRb~_Sw3j{Y8zxISSY$5wMR;r33GU8G9w0+2h<4@GVgSfVN~w3 z0@B4!=psfdq(Qi?VZ>vU`>-k6LFad{0j;#Dh4RSf_3&2F9NW>9PZ$wpHVQW;da~NP zG~QK=`qr*w#3h#LWpz`vSQ98Z z00txY?_CW$oMLNv-dqRKxJ05PrnNbOe@an$E_B6sD@8cPumWy!mkqh3JdVw=K*KH6 z6O&}san!NlnIUz?0C`SQvu9err**Z@(2^BGQ_zv+wNspy#ub$<8%`W>Y%<|O!tEgQ zFGt-n@L7{|gYg0X@IE@L1<8iW;f`W3(-icGSj8nH5FX8n{0|=|FR4NB%d0I=|L(BNjwOQvq0^2(mL}Nj(m< zWNPE(l8Nn_Qd?Q}m27e`>YUZ|i^_w@$m9@yrR-Xn*rb5@uQZK04m)bwZ7b)}kH+E+ z=T(bbh$1@LOtti=-^R60F=YD@#!bP!-V&2=*4;%3>nJZKzaZNSm!zp>=~!oj;v>1B z0p8V?K?LEyirMHC#oicrq}V^HX||1Fb7%TAhgMLS+@v`mSrbxaoX*rV(~gm1BEOoc zbDNkl9!kBlCY#q9`9)vK0kv}E(B{iu#pQ@;) zO)#xR;*%sJ6wio*$j)dN%aKE2IF>Hf7HG+a%ksy@-%om*=|1Lzky&YFPGF9%6?ye? zLyEp(3a-eA#I4}ItQLLK1!2{Y%O(og8e8Y6g{|P=k3qvSbu>D_;M(ziXnxbAbx}(- zL0%W`QzoC1UG9m)wX38L7&!!srSVvQs8rB#(j2a;7*yh#86= zB+HOXM{ikQExVNP`2%$FmBPV67te%9#58v)<0~JLXj^xP1?ip@kC3LI#y@K7E2=^v zIWaM`9@@w_A?VUo_X>7~T()uOS^*|wzRz<3iPC1nh#-);7498slgbksm#^t%BIKDm z@PsjAK>t3(Ch6ChZV$r}2vHPF{R=)86!ZxEVZ!L-3bZF(jHcKypr=i74eC6BRTv=C zj1fdsV}vbgrim0s$(?G~!4xR#2;V;13Q=0XsKcNbMameOc)F=0=+gA08p4jDl}{*A zMfuvnC~*eLSaMwuynMc*9gg@h@s_0z^JKgMpFA-pg)FrUQUN`7Z_#a_28Qv%Mlu#NXL03 zxrREUz7Q5JL$ied3Y|TaKPx8bdgNnC@WzM^!A>rxqs=FqDA!go-Y5`Qp=6c~R@8)c zyVC_Ticv#TG-$&Q1M??3!15sp+?w0)Tb&e{s;R$5GY2ixR zcm@I^U0P#Y{|Zv%wqTsKpWWVC6&hQehI@ zIT2(pjg1X6c4!HCZ93U_ibN@(0f8?U*EK?sLsvr*9mCJa>>P}G@<_r{ilUe_M0+(S zDXafwEjc(UN z$2^V&J5hltIwu2@tR)kvT2FI~z?uj``IN+GQ%0!Y3|)*4Su4|B5z(N2#eHY-t!i9RefiH4hG}$2=DYRO`s@Bz%MW(cRktZG1CW-4c8fyxfh1(+En3K zBh*R5j}Rn69r7r=xZUMmf28bARpM|6!CP`8@V*P+S(2WF0xSQ=AZ#%i8t(6lBcWllwZI-)K021xM9HfEW?s$MAP#_%eQdvfL}8BN_|#}n>) zxZWE5ydqzw3QWf zF$C!X92w-LDSp{9M6kqnS&}D?9yA)k+ZwH#*ceXG_+s8v5kSnV;9yTJV~^}Ja=Muj zw+r*f4s@u4JW#Q;9TwB8il0QH2%%`*A1d3~FrYA`Sfaqy$X*JeMy1OtC}vB`6zkjM z6=^|ev@$J9P$}KS@+Y)t(KL<79*rW}c@$5($Yr#mHL1z+DQ*(>R;Vv?h-kewc?n-x z-atZM!h1Nt$P^=%mDHd&#VSjttX`U))2pOZn;t1H$b7}0A_YMj1DIw0U&$dXE+Ag(c|83%@9 z9T`^bKAPogMU)ItN07h>VOBBb;s3MoCGp0`($cvMPmeR_9kwqG0c$D?=Jj z-n5k`gf3Rdq7>*SIZ)8)o5`>9HH`lXBUP@JF^u2_>)}yt;D|>T9x_41AjrQ{xba#e zIZ?ep0TINebi2V_tIgMIzcv+OzViH36J%!f88E{LE|3P$evBOQ+CA+KBVxEZ%(^;j zj-_!6(Gy`i9i_3Q@KwbL6ehY*1fx?TPngUjg$R+ri{LCZsveS&7~+*0DkIrsSoLTR zN@3oSLrvj(AGrBgA3#Z+&_)4#4_}uyZ%)uqGV}qu#veAt@M_*jL!6Mbh0vp zvsxWMXo`jZm{tIz3kAz1X3?kvE3BNBpk7C}3gWb!+k&tystcIH=&GqlN=x+Gwb1Iy z!_p>Mbx1#VXuS$7JLr*N6>8~#)`1i{g8i)_MkwQoE*PG>Y?*8qS>6t&8fIJuGOa>s zXwe|QrKnuNwy?FV&QP)ubvP8b36sNnA|N=TKPI18p*chnm|Js(lw|pJ2#19Fb!9Rh zh;>%5#%6k^!gjLyH7r@M7{ZU6j1&mlxN;Trrc5A^X_7C2A~1(z03@ydKcbk0nougZ zpBI$Tb+Lpm4W=-5lo&GvP6Pt2=Fmc_B~zVJbs1=%qks*CW|hOV6w^S`M#huX38|vt zMd7E&k(bpQGvsmxG7v#IWGf3INp+4URgE0`)Zd)Os2NWM7H)ihzBsPg0oKB3_mYzN9d% zS5#nxg&+;EI-cBnoD*AhasV(N%izGdM8hHs`F)D43z_76&{J*&0u?f&yjdC@wool4 zQ`8GM#&T$xOuDv!_CO3xQ(PvQpm!I?!W~)%9c+bVS}D{zGH51Z*jif(B*JHUoJ;^k zZK5c+W=GQDO3#UIv273%h-0mOMLPlfb*%ucgO~*RmW*7w#Uu*nq0rMF?qz>QnBt>> zx{h2t46JjPf)-&ti?Noq4qp;8~G(ve-k*)zJmA!+!FM%^cmI|F2 zGF2_9GvRz)E5e;Ma)BsVcWp`dnj~6xbdR7WhkzQ1*#i7glYBr+(FDV3UzHn9V+M{g zNc1v6VYpTmel)#&tRlR|DGWw`Jz^7)lC1<~$`MDVeN~&34g`bHoo6*IAOcwkp5w^t zH0oTD<+6Zu-63lR>Ew#yJ6T3K?-xCh`V~1&s6(S`oUeyAi81AIW z^$UfBvK_PzDBc;+GfGUJJQB`J_4wf2#JM3C7&}txIr)}?E@*vGC$E+ye1JkJp?rcX zM2@sAP^1%B=%86aTD;M-aB}ArFbZYJDEKhR<3SAe~ z(3_Ehgg6mIE?709SjfqRMKT$kwR*}7Rwz`ph+Y#cBqV{Bo)MO~G%@N%-x*U`QozEj3^O(b(OChjING!=Xr255O@y+( z1H3)R6QV$5^rZ5#uxX;imceRHE2FkUg38eVJEoKO>IZZPN~WP|)WDitu{}NWNe+8X z38flT^@1xH=$fe^x!Q`6ozy{*Mo)syhAvFLN=He+Kzpwwr5Mprp+`= zhp`mq8k`_JjAbRGEOLlNp}k+^#wAD>KCF67g+?;-ImM2Wfl^e*8j|o);uuZU#pIA0 zb-EJ7gtRZTuUa_6v#g=7Mu^Dt;#)yY^ph$fEzra`I($?GQ>|=GHVzbfDr(bB4eZFN zMQMx3y2X$g3wSWx!;mSnp0GEM%x}==DX`BFbJkg|MethyR}qU0q`Wu*03(|veIh!c zy(|>-pE1e?v@;BO0#|yA)ur`X(S!~p$5rtTq);Q`7CG9<+HZ`E!UxSxb6RFxvgrmA z0MM&I@-`LlhpY$=Eabs+tuq-uXw*p5$YNV@%n@X@=mRoEHnceaLs4pmu&cst-EPBv zYH2nZ_44YEF@XVOy7P}ULp>Cv1H-Ti1j zQj>ByHb_gY!%WjoPQ4fer{gWm$nmdn1E?$xO$`Sau<3co$1!c`abf8{ucJoxo!YN4hW8yA$kaUCGg^PqSJ2cZ88I6Je5t!}yzcgXeO|A$n5Gok56@{t) zHiMH-*A@{J@qDL{7ZZ~>_DH{#izDVA>oQ~awuC*u@zLMRA&pd0iPy)$02wmP= zK#~ooTT@h|Euy%nH=6j`Ap?VXY?v@=gl-f|^(6qO;m`mK&x{W%UxI7hR=?6IpX*kKt|UsHJEsbke~$Smrc^ z*y;-o=!wW`#-y(c&9-TC9jA^;G;IJm7^AZG ze}Q7BC^R1}NHdMA%!Z|7R1skVubAHu9?%wNX1Srwkfz?++UvE^a~BD&cTBZ$hzD(K z#FBfG+BJRDh;Pa&G1<{Ff!$}IR#`U1K$Rl;+UaXi)NBx#>Nv_-lnP5ES`$dE`xe~{ z?P>iJ_Er)BWM+o0Vr({%W9gIJ_`w-mCu`Cpnu9`tY(2z`I%&ee9S|v_u~H~WfRap9 zq)l2oZTnQvOG_h1r30=9*P@OAKSR^iqbxdYJUW)bh%g#ZZ<6IxG()qEpl(h@Pcfs` zVWf%&0*NAKO%VG@7^ne8lU+=ZR4Ab>)I(%aFYTZc=qX0DeF>n;#l?=k^f(=;bdw@SZGuK=!7$kC6-$tuY`|{hrW8*>H<*zZ z(yDfJ3o9HO>BiT8;w_|V~j&eEVmddk!LX6VoT}lT;B#hN^v~`~f$|8uy2N@OZ zvcb}qNU@K2nu;z{j8Y3V3?@aFGd6lTy@8exkpCa)Y9L+J<9`&>v$>o;mev~-!Tr-7 zgic9d+oXkjx;9h6=|^6m9b^wv2BC|oKTxMp$d$gvi2S!H?Z^};Kq@Pm>rk8$$W$mN z^R53GOh1TO3B}VoZ=IteEnM2?6uX7nWlLoKyG$oY0I_F=9_=YgI2EI(CEYv%ZD9XQ z4%D@#c}XD_VOjJ?^%U?G+JQ15bjinMG=f%y*oO?sQy`ut{q(7BAPsCvsPy8Xkttt` zM{N<5R}7|;PXQ2wl#&pxVKiy!g45!11!)G)LZxRQFE}tM10_Y%BS)ZTS0Yi@N61kM zEwm(JyNZ6^6pHv1S%4J2*dpr&YZ4uVb97Hk*Opp#AxK3s+AAo7!1baZK=)o!5JtAk zH7s*0&uoG;vWhZZ5d*dzEz6abV?b#{p{{~_%6OGPGV(^kVzhc7OpwH5)0coH=zpkg z2sof}p@Y+F9Z`%VaBfi1MoCX`iLQz^dZyNyeJ-30nF}@x22(C%)50-<#t^h60t?zkQDf7T zIv)|D@U*5=veX*(PLQ)l5Q!jw#`-2Fi5@{X-{aHU64HOJgwEx%7RZqI(Aky&?i8sy z+OF{X7}gA?=(ZAmkl%woyA*sJzyrd*1BxaTVP$6Zz!9|W1khZP4Df|(`!_?4Ft!lk zC}7ES8aFUf_Eyk}#F(CS49T{2XUNEq-*9;FeyHRb<;`Ub2R$e1MT4F!>>rf6Q<+CJ zNsGR=E=}n2X%}PuPhi^y*(-K1W$IKB%P?Z4S}J<9>gI(mP-lvI8FctVVOnhli(G{KuH${qonYQlBQr2CYQiqIT>9}OB%_g82r((u@w92=9 zIAS=dY+DT3t-|0~k+)8t5KvBr56Y`TV5saX_z!x-ALBelM8|4)CBpIrtnQcy?R5*K zpb19VvJ_s`3enG?V94oU3LB)*7R3<&xuD)(l8qTrOoD%Keg3 zQj7`v< zpi6%PlFD;a|7ReMrDz$XN-ABstb&4@Trn#&@ev$Cf=?7K(eO)L3HCrf73K+04!VI6 z@U)aeFKS~oQZy`2Mw>e1X+uMTcx>>~y@M$kh+}OiI+!t+H97ql;Vs`B#M&4H8aNgtQs7K)UXlM19%O)jiTu%vmUf z3@QbVOy0mrRcq@ByAPo_ChXS@xB|X!PvDRM_@|0ryWc8BulRw(8CwRqdPQ` zU#^*7WROMf4ypwi+sf52Y&TRpw8g3%)l_Y~nnJlyF0&q0L^qALMN&s-3L#L71g7jl z&n%C^8(L!Jcv@p!hy6!SUp7*EQAWbVF!byQx0y?;;6gxwT0mA#+A*ZSe1k%SQG1Lz zqG1GE6@(N5tHK3(T@BNmwo~7vjHl$pm^B(vu2bmN=#H7rr1+26l1@eew@ab0NFctA z3Bv1?DxWrRE~sD9#8k-RR4z+Od-z(WLQ$AW*2$FVQ|pK}Kb|*YyRl#?wo&$4&yW60 z1(Y&sj%U-O^i!0&WQ8ORvjK7?X-qqpOs`_88lBD*wHq3d@*X0A1ksjJYhZ=4Qtn|) z2c5D835^k8h94e$8A^`#-V;+qlr=u4Rs_s^knfiA-#9zutGE|_Y#Y#XL^d#s4OJ$9G=SI0D<_KKiTQZkrNJ_Rn37Wt

>*a)QS~+crC1H9RHpv0iGLtk8nc{@(PN~>7fv& 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 jZZ@CKKCd@l*Z-q`{l6-AzyJFEo8 -

+
Figure 1: Partial Ioncore, mod_tiling and mod_query @@ -138,10 +138,10 @@ Partial Ioncore, mod_tiling and +
Is the base of Ion's object system.

WRegion
-
+
is the base class for everything corresponding to something on the screen. Each object of type WRegion has a size and position relative to the parent WRegion. While a big part of Ion @@ -178,27 +178,27 @@ The core classes:

WClientWin
-
is a class for +
is a class for client window objects, the objects that window managers are supposed to manage.

WWindow
-
is the base class for all +
is the base class for all internal objects having an X window associated to them (WClientWins also have X windows associated to them).

WRootWin
-
is the class for +
is the class for root windows of X screens. Note that an ''X screen'' or root window is not necessarily a single physical screen as a root window - may be split over multiple screens when multi-head extensions - such as Xinerama are used. (Actually there - can be only one WRootWin when Xinerama is used.) + may be split over multiple screens when hacks such as + Xinerama are used. (Actually there can be only + one root window when Xinerama is used.)

@@ -211,15 +211,14 @@ The core classes:

WScreen
-
is the class for objects +
is the class for objects corresponding to physical screens. Screens may share a root - window when Xinerama multihead extensions are used as explained - above. + window when the Xinerama extension is used as explained above.

WFrame
-
is the class for frames. +
is the class for frames. While most Ion's objects have no graphical presentation, frames basically add to WMPlexes the decorations around client windows (borders, tabs). @@ -227,11 +226,11 @@ The core classes:

WGroup
-
is the base class for groups. +
is the base class for groups. Particular types of groups are workspaces - (WGroupWS) + (WGroupWS) and groups of client windows - (WGroupCW). + (WGroupCW).
@@ -241,12 +240,12 @@ Classes implemented by the mod_tiling module:

WTiling
-
is the class for tilings +
is the class for tilings of frames.
WSplit
-
(or, more specifically, classes +
(or, more specifically, classes that inherit it) encode the WTiling tree structure.
@@ -257,19 +256,19 @@ Classes implemented by the mod_query module:

WInput
-
is a virtual base class for the +
is a virtual base class for the two classes below.
WEdln
-
is the class for the ''queries'', +
is the class for the ''queries'', the text inputs that usually appear at bottoms of frames and sometimes screens. Queries are the functional equivalent of ''mini buffers'' in many text editors.
WMessage
-
implements the boxes for +
implements the boxes for warning and other messages that Ion may wish to display to the user. These also usually appear at bottoms of frames.
@@ -293,7 +292,7 @@ binding callbacks in the move and resize mode. 1.2.1 Parent-child relations Each object of type WRegion has a parent and possibly a manager -associated to it. The parent for an object is always a +associated to it. The parent for an object is always a WWindow and for WRegion with an X window (WClientWin, WWindow) the parent WWindow is given by the same relation of the X windows. For other WRegions the relation is not as clear. @@ -303,7 +302,7 @@ Figure 2.

-

+
@@ -324,7 +323,7 @@ Most common parent-child relations

WRegions have very little control over their children as a parent. -The manager WRegion has much more control over its +The manager WRegion has much more control over its managed WRegions. Managers, for example, handle resize requests, focusing and displaying of the managed regions. Indeed the manager--managed relationship gives a better picture of the logical ordering of objects on @@ -342,7 +341,7 @@ but all have a parent-a screen if not anything else.

-

+
Figure 2: Most common parent-child relations
diff --git a/doc/ionnotes/node3.html b/doc/ionnotes/node3.html index 4f17c4e..0309e19 100644 --- a/doc/ionnotes/node3.html +++ b/doc/ionnotes/node3.html @@ -64,11 +64,11 @@ original version by: Nikos Drakos, CBLU, University of Leeds

First, to get things clear, what are considered objects here are C -structures containing a properly initialized +structures containing a properly initialized structure defined in ioncore/obj.h as the first element (or the first element of the structure which is the first element and so on which gives rise to inheritance). The WObj structure contains a pointer -to a WObjDescr class type info structure and +to a WObjDescr class type info structure and a list of so called ''watches''. The WObjDescr structure simply lists the class name, a table of dynamic functions and a pointer to deinitialisation function (or ''destructor''). @@ -77,7 +77,7 @@ deinitialisation function (or ''destructor''). Ion does not do any reference counting, garbage collecting or other fancy things related to automatic safe freeing of objects with its simplistic object system. Instead special watches (the WWatch - structure) may be used to create safe references to + structure) may be used to create safe references to objects that might be destroyed during the time the specific pointer is needed. When an object is destroyed, its list of watches is processed, setting the pointers in the watches to NULL and the watch handlers for diff --git a/doc/ionnotes/node4.html b/doc/ionnotes/node4.html index 037e8bc..1ae2bf7 100644 --- a/doc/ionnotes/node4.html +++ b/doc/ionnotes/node4.html @@ -126,11 +126,11 @@ C side of Ion and Lua:

- + - + @@ -195,7 +195,7 @@ initialisation and deinitialisation code.

You've seen the terms level 1 and 2 call handler mentioned above. - + The Lua support code uses two so called call handlers to convert and check the types of parameters passed from Lua to C and back to Lua. The first one of these call handlers is the same for all exported functions and @@ -230,10 +230,10 @@ supported by the generated L2 call handlers).

The functions -extl_call, -extl_call_named, -extl_dofile and -extl_dostring +extl_call, +extl_call_named, +extl_dofile and +extl_dostring call a referenced function (ExtlFn), named function, execute a string and a file, respectively. The rest of the parameters for all these functions are similar. The 'spec' argument is a string of identifier @@ -249,7 +249,7 @@ passing succeeded or not.

Sometimes it is necessary to block calls to all but a limited set of Ion functions. This can be accomplished with -extl_set_safelist. +extl_set_safelist. The parameter to this function is a NULL-terminated array of strings and the return value is a similar old safelist. The call extl_set_safelist(NULL) removes any safelist and allows @@ -263,7 +263,7 @@ calls to all exported functions.

Configuration files should be read as before with the function -read_config_for +read_config_for except that the list of known options is no longer present.

diff --git a/doc/ionnotes/node5.html b/doc/ionnotes/node5.html index 51c46f8..d3aba2e 100644 --- a/doc/ionnotes/node5.html +++ b/doc/ionnotes/node5.html @@ -83,10 +83,10 @@ original version by: Nikos Drakos, CBLU, University of Leeds

To keep Ion's code as simple as possible yet safe, there are restrictions when the WObj -destroy_obj +destroy_obj function that calls watches, the deinit routine and frees memory may be called directly. In all other cases the -defer_destroy +defer_destroy function should be used to defer the call of destroy_obj until Ioncore returns to its main event loop. @@ -104,7 +104,7 @@ following cases: some reason failed to reparent the object to this frame.

  • In a deferred action handler set with - defer_action. + defer_action. Like deferred destroys, other deferred actions are called when Ioncore has returned to the main loop.
  • diff --git a/doc/ionnotes/node8.html b/doc/ionnotes/node8.html index 0ec574a..6e12241 100644 --- a/doc/ionnotes/node8.html +++ b/doc/ionnotes/node8.html @@ -58,35 +58,35 @@ original version by: Nikos Drakos, CBLU, University of Leeds Index
    call handler - : 3.2 + : 3.2
    defer_action - : 4.1 -
    defer_destroy : 4.1 -
    destroy_obj +
    defer_destroy : 4.1 +
    destroy_obj + : 4.1
    extl_call - : 3.3 + : 3.3
    extl_call_named - : 3.3 + : 3.3
    extl_dofile - : 3.3 + : 3.3
    extl_dostring - : 3.3 + : 3.3
    extl_set_safelist - : 3.3 + : 3.3
    ExtlFn - : 3.1 -
    ExtlTab : 3.1 +
    ExtlTab + : 3.1
    manager - : 1.2.1 + : 1.2.1
    Obj - : 1.1 + : 1.1
    parent - : 1.2.1 + : 1.2.1
    read_config_for - : 3.4 + : 3.4
    root window : 1.1
    screen
    @@ -94,39 +94,39 @@ Index
    X : 1.1
    WClientWin - : 1.1 + : 1.1
    WEdln - : 1.1 + : 1.1
    WFrame - : 1.1 + : 1.1
    WGroup - : 1.1 + : 1.1
    WGroupCW - : 1.1 -
    WGroupWS : 1.1 +
    WGroupWS + : 1.1
    WInput - : 1.1 + : 1.1
    WMessage - : 1.1 + : 1.1
    WObj - : 2 + : 2
    WObjDescr - : 2 + : 2
    WRegion - : 1.1 + : 1.1
    WRootWin - : 1.1 + : 1.1
    WScreen - : 1.1 + : 1.1
    WSplit - : 1.1 -
    WTiling : 1.1 +
    WTiling + : 1.1
    WWatch - : 2 + : 2
    WWindow - : 1.1 + : 1.1
    Xinerama : 1.1 diff --git a/doc/ionnotes/node9.html b/doc/ionnotes/node9.html index a4ce07f..7823010 100644 --- a/doc/ionnotes/node9.html +++ b/doc/ionnotes/node9.html @@ -70,7 +70,7 @@ Mathematics Department, Macquarie University, Sydney. The command line arguments were:
    latex2html -show_section_numbers -short_index -local_icons -noaddress -up_url http://iki.fi/tuomov/ion/ -up_title 'Ion homepage' -nofootnode -split 4 ionnotes

    -The translation was initiated by tuomov on 2006-12-23 +The translation was initiated by tuomov on 2007-02-03


    diff --git a/doc/objects.tex b/doc/objects.tex index e751eab..80321fa 100644 --- a/doc/objects.tex +++ b/doc/objects.tex @@ -44,10 +44,10 @@ implement. |-->WRegion | |-->WClientWin | |-->WWindow - | | |-->WRootWin | | |-->WMPlex - | | | |-->WScreen | | | |-->WFrame + | | | |-->WScreen + | | | |-->WRootWin | | |-->WInput (mod_query) | | |-->WEdln (mod_query) | | |-->WMessage (mod_query) @@ -89,10 +89,10 @@ The core classes: root windows\index{root window} of X screens\index{screen!X}. Note that an ''X screen'' or root window is not necessarily a single physical screen\index{screen!physical} as a root window - may be split over multiple screens when multi-head extensions - such as Xinerama\index{Xinerama} are used. (Actually there - can be only one \type{WRootWin} when Xinerama is used.) - + may be split over multiple screens when hacks such as + Xinerama\index{Xinerama} are used. (Actually there can be only + one root window when Xinerama is used.) + \item[\type{WMPlex}] is a base class for all regions that''multiplex'' other regions. This means that of the regions managed by the multiplexer, only one can be displayed at a time. Classes that inhereit \type{WMPlex} @@ -100,8 +100,7 @@ The core classes: \item[\type{WScreen}]\indextype{WScreen} is the class for objects corresponding to physical screens. Screens may share a root - window when Xinerama multihead extensions are used as explained - above. + window when the Xinerama extension is used as explained above. \item[\type{WFrame}]\indextype{WFrame} is the class for frames. While most Ion's objects have no graphical presentation, frames basically diff --git a/etc/Makefile b/etc/Makefile index 81ba5c1..2c5b191 100644 --- a/etc/Makefile +++ b/etc/Makefile @@ -10,7 +10,7 @@ include $(TOPDIR)/build/system-inc.mk ETC = cfg_ion.lua cfg_ioncore.lua cfg_kludges.lua cfg_modules.lua \ cfg_tiling.lua cfg_query.lua cfg_menu.lua \ - cfg_statusbar.lua cfg_dock.lua \ + cfg_statusbar.lua cfg_dock.lua cfg_layouts.lua \ look_brownsteel.lua look_clean.lua look_dusky.lua \ look_greyviolet.lua look_ios.lua look_cleanviolet.lua \ look_simpleblue.lua look_cleanios.lua \ diff --git a/etc/cfg_ion.lua b/etc/cfg_ion.lua index 8e8d02e..339a026 100644 --- a/etc/cfg_ion.lua +++ b/etc/cfg_ion.lua @@ -52,5 +52,9 @@ dopath("cfg_modules") --dopath("mod_dock") --dopath("mod_sp") +-- Define some default layouts. This is also done by cfg_modules +-- if loaded. +--dopath("cfg_layouts", true) + -- Deprecated. dopath("cfg_user", true) diff --git a/etc/cfg_ioncore.lua b/etc/cfg_ioncore.lua index acf7e94..b10b46c 100644 --- a/etc/cfg_ioncore.lua +++ b/etc/cfg_ioncore.lua @@ -36,10 +36,12 @@ defbindings("WScreen", { bdoc("Switch to next/previous object within current screen."), kpress(META.."comma", "WScreen.switch_prev(_)"), kpress(META.."period", "WScreen.switch_next(_)"), - + submap(META.."K", { bdoc("Go to first region demanding attention or previously active one."), - kpress("K", "ioncore.goto_activity() or ioncore.goto_previous()"), + kpress("K", "mod_menu.grabmenu(_, _sub, 'focuslist')"), + -- Alternative without (cyclable) menu + --kpress("K", "ioncore.goto_activity() or ioncore.goto_previous()"), --bdoc("Go to previous active object."), --kpress("K", "ioncore.goto_previous()"), @@ -115,21 +117,27 @@ defbindings("WClientWin", { defbindings("WGroupCW", { bdoc("Toggle client window group full-screen mode"), - kpress_wait(META.."Return", - "WClientWin.set_fullscreen(_:bottom(), 'toggle')"), + kpress_wait(META.."Return", "WGroup.set_fullscreen(_, 'toggle')"), }) -- WMPlex context bindings -- -- These bindings work in frames and on screens. The innermost of such --- contexts/objects always gets to handle the key press. Most of these --- bindings define actions on client windows. (Remember that client windows --- can be put in fullscreen mode and therefore may not have a frame.) +-- contexts/objects always gets to handle the key press. defbindings("WMPlex", { bdoc("Close current object."), kpress_wait(META.."C", "WRegion.rqclose_propagate(_, _sub)"), + + 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 + -- (_chld) is a group 'bottom' and detaches the whole group in that + -- case. + kpress("D", "ioncore.detach(_chld, 'toggle')", "_chld:non-nil"), + }), }) -- Frames for transient windows ignore this bindmap @@ -182,9 +190,8 @@ defbindings("WMPlex.toplevel", { -- WFrame context bindings -- --- These bindings are common to all types of frames. The rest of frame --- bindings that differ between frame types are defined in the modules' --- configuration files. +-- These bindings are common to all types of frames. Some additional +-- frame bindings are found in some modules' configuration files. defbindings("WFrame", { submap(META.."K", { @@ -359,6 +366,8 @@ defctxmenu("WFrame", "Frame", { menuentry("Close", "WRegion.rqclose_propagate(_, _sub)"), menuentry("Kill", "WClientWin.kill(_sub)", "_sub:WClientWin"), + menuentry("De/reattach", "ioncore.detach(_sub, 'toggle')", + "_sub:non-nil"), menuentry("Toggle tag", "WRegion.set_tagged(_sub, 'toggle')", "_sub:non-nil"), menuentry("Attach tagged", "WFrame.attach_tagged(_)"), @@ -367,11 +376,9 @@ defctxmenu("WFrame", "Frame", { }) --- Context menu for screens -defctxmenu("WScreen", "Screen", { - menuentry("New workspace", "ioncore.create_ws(_)"), - menuentry("New empty workspace", - "ioncore.create_ws(_, nil, true)"), - menuentry("Close workspace","WRegion.rqclose(_sub)"), +-- Context menu for workspaces +defctxmenu("WGroupWS", "Workspace", { + menuentry("Close", "WRegion.rqclose(_)"), + menuentry("Rename", "mod_query.query_renameworkspace(nil, _)"), }) diff --git a/etc/cfg_layouts.lua b/etc/cfg_layouts.lua new file mode 100644 index 0000000..4299c76 --- /dev/null +++ b/etc/cfg_layouts.lua @@ -0,0 +1,55 @@ +-- +-- Layouts for Ion +-- + +local a_frame = { + type="WSplitRegion", + regparams = { + type = "WFrame", + frame_style = "frame-tiled" + } +} + + +local horizontally_split = { + -- Destroy workspace if the 'bottom' tiling is destroyed last + bottom_last_close = true, + -- Layout + managed = { + { + type = "WTiling", + bottom = true, + -- The default is a single 1:1 horizontal split + split_tree = { + type = "WSplitSplit", + dir = "horizontal", + tls = 1, + brs = 1, + tl = a_frame, + br = a_frame + } + -- For a single frame + --split_tree = nil + } + } +} + + +local full_tiled = { + -- Destroy workspace if the 'bottom' tiling is destroyed last + bottom_last_close = true, + -- Layout + managed = { + { + type = "WTiling", + bottom = true, + } + } +} + + +-- Let the world know about them + +ioncore.deflayout("default", horizontally_split) +ioncore.deflayout("hsplit", horizontally_split) +ioncore.deflayout("full", full_tiled) diff --git a/etc/cfg_modules.lua b/etc/cfg_modules.lua index ccbfb70..7128f15 100644 --- a/etc/cfg_modules.lua +++ b/etc/cfg_modules.lua @@ -5,7 +5,9 @@ dopath("mod_query") dopath("mod_menu") dopath("mod_tiling") ---dopath("mod_panews") dopath("mod_statusbar") --dopath("mod_dock") dopath("mod_sp") + +-- Load some layouts +dopath("cfg_layouts") diff --git a/etc/cfg_panews.lua b/etc/cfg_panews.lua deleted file mode 100644 index 65761a0..0000000 --- a/etc/cfg_panews.lua +++ /dev/null @@ -1,57 +0,0 @@ --- --- Ion panews module configuration file --- - --- Bindings for unused area. - -defbindings("WUnusedWin", { - bdoc("Begin move/resize mode."), - kpress(META.."R", "WUnusedWin.begin_kbresize(_)"), - - bdoc("Resize the area."), - mdrag(META.."Button3", "WUnusedWin.p_resize(_)"), - mdrag(META.."Button1", "WUnusedWin.p_move(_)"), -}) - - -mod_panews.set{ - -- Layout template may be one of default|alternative1|alternative2 - -- or a template table. (The one for 'default' is reproduced below - -- as an example.) - --template="default", - -- The scale factor parameter controls the size-based classification - -- heuristic. The default of 1.0 is designed for 1280x1024 at 75dpi. - --scalef=1.0, -} - - --- The layout template for the 'default' layout looks as follows. ---[[ -{ - type="WSplitFloat", - dir="horizontal", - tls=settings.b_ratio, - brs=settings.s_ratio, - tl={ - type="WSplitPane", - contents={ - type="WSplitFloat", - dir="vertical", - tls=settings.b_ratio2, - brs=settings.s_ratio2, - tl={ - type="WSplitPane", - marker="V:single", - }, - br={ - type="WSplitPane", - marker="M:right", - }, - }, - }, - br={ - type="WSplitPane", - marker="T:up", - }, -} ---]] diff --git a/etc/cfg_tiling.lua b/etc/cfg_tiling.lua index 0225d3a..b07178e 100644 --- a/etc/cfg_tiling.lua +++ b/etc/cfg_tiling.lua @@ -26,22 +26,6 @@ defbindings("WTiling", { -- Frame bindings -defbindings("WFrame.tiled", { - submap(META.."K", { - bdoc("Detach window from tiled frame"), - kpress("D", "mod_tiling.detach(_sub)", "_sub:non-nil"), - }), -}) - - -defbindings("WFrame.transient", { - submap(META.."K", { - bdoc("Detach transient frame"), - kpress("D", "mod_tiling.detach(_)", "_sub:non-nil"), - }), -}) - - defbindings("WFrame.floating", { submap(META.."K", { bdoc("Tile frame, if no tiling exists on the workspace"), @@ -86,21 +70,6 @@ defctxmenu("WTiling", "Tiling", { }) --- Context menu entries for tiled frames. - -defctxmenu("WFrame.tiled", "Tiled frame", { - menuentry("Detach window", "mod_tiling.detach(_sub)", "_sub:non-nil"), -}) - - --- Context menu entries for transient frames. - -defctxmenu("WFrame.transient", "Transient frame", { - append=true, - menuentry("Detach", "mod_tiling.detach(_)", "_sub:non-nil"), -}) - - -- Extra context menu extra entries for floatframes. defctxmenu("WFrame.floating", "Floating frame", { @@ -108,39 +77,3 @@ defctxmenu("WFrame.floating", "Floating frame", { menuentry("New tiling", "mod_tiling.mkbottom(_)"), }) - --- Adjust default workspace layout - -local a_frame = { - type="WSplitRegion", - regparams = { - type = "WFrame", - frame_style = "frame-tiled" - } -} - -ioncore.set{ - default_ws_params = { - -- Destroy workspace if the 'bottom' tiling is destroyed last - bottom_last_close = true, - -- Layout - managed = { - { - type = "WTiling", - bottom = true, - -- The default is a single 1:1 horizontal split - split_tree = { - type = "WSplitSplit", - dir = "horizontal", - tls = 1, - brs = 1, - tl = a_frame, - br = a_frame - } - -- For a single frame - --split_tree = nil - } - } - } -} - diff --git a/etc/look_brownsteel.lua b/etc/look_brownsteel.lua index 221c5f5..5aa488e 100644 --- a/etc/look_brownsteel.lua +++ b/etc/look_brownsteel.lua @@ -59,18 +59,6 @@ de.defstyle("tab", { text_align = "center", }) -de.defstyle("tab-menuentry", { - based_on = "tab", - text_align = "left", - highlight_pixels = 0, - shadow_pixels = 0, -}) - -de.defstyle("tab-menuentry-big", { - based_on = "tab-menuentry", - font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*", - padding_pixels = 7, -}) de.defstyle("input", { based_on = "*", diff --git a/etc/look_clean.lua b/etc/look_clean.lua index 7da34a9..a95cbf3 100644 --- a/etc/look_clean.lua +++ b/etc/look_clean.lua @@ -17,18 +17,6 @@ de.defstyle("*", { text_align = "center", }) -de.defstyle("frame", { - based_on = "*", - padding_colour = "#545d75", - background_colour = "black", - de.substyle("active", { - shadow_colour = "grey", - highlight_colour = "grey", - padding_colour = "#545d75", - background_colour = "black", - }), -}) - de.defstyle("tab", { based_on = "*", font = "-misc-fixed-medium-r-*-*-13-*-*-*-*-60-*-*", @@ -59,22 +47,6 @@ de.defstyle("tab", { text_align = "center", }) -de.defstyle("tab-menuentry", { - based_on = "tab", - text_align = "left", - de.substyle("inactive-selected", { - shadow_colour = "grey", - highlight_colour = "grey", - background_colour = "#8a999e", - foreground_colour = "grey", - }), -}) - -de.defstyle("tab-menuentry-big", { - based_on = "tab-menuentry", - padding_pixels = 7, -}) - de.defstyle("input", { based_on = "*", shadow_colour = "grey", @@ -98,5 +70,10 @@ de.defstyle("input", { dopath("lookcommon_clean") +de.defstyle("tab-menuentry-big", { + based_on = "tab-menuentry", + padding_pixels = 7, +}) + gr.refresh() diff --git a/etc/look_cleanios.lua b/etc/look_cleanios.lua index 6a70546..3c11bc8 100644 --- a/etc/look_cleanios.lua +++ b/etc/look_cleanios.lua @@ -18,13 +18,6 @@ de.defstyle("*", { text_align = "center", }) -de.defstyle("frame", { - based_on = "*", - padding_colour = "#d8d8d8", - background_colour = "#000000", - transparent_background = false, -}) - de.defstyle("tab", { based_on = "*", font = "-*-helvetica-bold-r-normal-*-10-*-*-*-*-*-*-*", @@ -55,18 +48,6 @@ de.defstyle("tab", { text_align = "center", }) -de.defstyle("tab-menuentry", { - based_on = "tab", - text_align = "left", - spacing = 1, -}) - -de.defstyle("tab-menuentry-big", { - based_on = "tab-menuentry", - font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*", - padding_pixels = 7, -}) - de.defstyle("input-edln", { based_on = "*", de.substyle("*-cursor", { @@ -81,5 +62,11 @@ de.defstyle("input-edln", { dopath("lookcommon_clean") +de.defstyle("tab-menuentry-big", { + based_on = "tab-menuentry", + font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*", + padding_pixels = 7, +}) + gr.refresh() diff --git a/etc/look_cleanviolet.lua b/etc/look_cleanviolet.lua index 32dce50..70e8acc 100644 --- a/etc/look_cleanviolet.lua +++ b/etc/look_cleanviolet.lua @@ -29,14 +29,6 @@ de.defstyle("*", { }) -de.defstyle("frame", { - based_on = "*", - padding_colour = "#aaaaaa", - background_colour = "#000000", - transparent_background = false, -}) - - de.defstyle("tab", { based_on = "*", font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*", @@ -59,20 +51,6 @@ de.defstyle("tab", { }) -de.defstyle("tab-menuentry", { - based_on = "tab", - text_align = "left", - spacing = 1, -}) - - -de.defstyle("tab-menuentry-big", { - based_on = "tab-menuentry", - font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*", - padding_pixels = 7, -}) - - de.defstyle("input", { based_on = "*", text_align = "left", @@ -94,7 +72,16 @@ de.defstyle("input", { }), }) + dopath("lookcommon_clean") + + +de.defstyle("tab-menuentry-big", { + based_on = "tab-menuentry", + font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*", + padding_pixels = 7, +}) + -- Refresh objects' brushes. gr.refresh() diff --git a/etc/look_dusky.lua b/etc/look_dusky.lua index 5effeee..4387e9d 100644 --- a/etc/look_dusky.lua +++ b/etc/look_dusky.lua @@ -59,19 +59,6 @@ de.defstyle("tab", { text_align = "center", }) -de.defstyle("tab-menuentry", { - based_on = "tab", - text_align = "left", - highlight_pixels = 0, - shadow_pixels = 0, -}) - -de.defstyle("tab-menuentry-big", { - based_on = "tab-menuentry", - font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*", - padding_pixels = 7, -}) - de.defstyle("input", { based_on = "*", shadow_colour = "#404040", diff --git a/etc/look_greyviolet.lua b/etc/look_greyviolet.lua index ec15a78..43dafee 100644 --- a/etc/look_greyviolet.lua +++ b/etc/look_greyviolet.lua @@ -59,19 +59,6 @@ de.defstyle("tab", { text_align = "center", }) -de.defstyle("tab-menuentry", { - based_on = "tab", - text_align = "left", - highlight_pixels = 0, - shadow_pixels = 0, -}) - -de.defstyle("tab-menuentry-big", { - based_on = "tab-menuentry", - font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*", - padding_pixels = 7, -}) - de.defstyle("input", { based_on = "*", shadow_colour = "#777777", diff --git a/etc/look_ios.lua b/etc/look_ios.lua index 4b8f4da..85afceb 100644 --- a/etc/look_ios.lua +++ b/etc/look_ios.lua @@ -65,19 +65,6 @@ de.defstyle("tab", { text_align = "center", }) -de.defstyle("tab-menuentry", { - based_on = "tab", - text_align = "left", - highlight_pixels = 0, - shadow_pixels = 0, -}) - -de.defstyle("tab-menuentry-big", { - based_on = "tab-menuentry", - font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*", - padding_pixels = 7, -}) - de.defstyle("input", { based_on = "*", shadow_colour = "#606060", diff --git a/etc/look_simpleblue.lua b/etc/look_simpleblue.lua index 0773f7a..2c37852 100644 --- a/etc/look_simpleblue.lua +++ b/etc/look_simpleblue.lua @@ -42,7 +42,7 @@ de.defstyle("tab", { shadow_colour = "black", highlight_colour = "black", background_colour = "#3f3f3f", - foreground_colour = "#9f9f9f", + foreground_colour = "#bfbfbf", }), de.substyle("active-unselected", { shadow_colour = "black", @@ -53,8 +53,8 @@ de.defstyle("tab", { de.substyle("inactive-selected", { shadow_colour = "black", highlight_colour = "black", - background_colour = "#0f1f4f", - foreground_colour = "#9f9f9f", + background_colour = "#1f2f4f", + foreground_colour = "#bfbfbf", }), de.substyle("inactive-unselected", { shadow_colour = "black", @@ -106,6 +106,11 @@ de.defstyle("input", { }), }) +de.defstyle("input-menu", { + based_on = "input", + padding_pixels=0, +}) + dopath("lookcommon_clean") gr.refresh() diff --git a/etc/lookcommon_clean.lua b/etc/lookcommon_clean.lua index cfb059a..de0efa2 100644 --- a/etc/lookcommon_clean.lua +++ b/etc/lookcommon_clean.lua @@ -20,20 +20,31 @@ de.defstyle("stdisp", { de.defstyle("actnotify", { based_on = "*", - shadow_colour = "#e0c0c0", - highlight_colour = "#e0c0c0", - background_colour = "#990000", + shadow_colour = "#c04040", + highlight_colour = "#c04040", + background_colour = "#901010", foreground_colour = "#eeeeee", }) de.defstyle("tab-frame", { based_on = "tab", - de.substyle("*-*-*-*-activity", { - shadow_colour = "#e0c0c0", - highlight_colour = "#e0c0c0", - background_colour = "#990000", + -- TODO: some kind of amend option. It should not be necessary to + -- duplicate this definition for both tab-frame and tab-menuentry, + -- or for each style, nor use more complex hacks to communicate + -- this stuff otherwise. + de.substyle("*-*-*-unselected-activity", { + shadow_colour = "#c04040", + highlight_colour = "#c04040", + background_colour = "#901010", foreground_colour = "#eeeeee", }), + + de.substyle("*-*-*-selected-activity", { + shadow_colour = "#c04040", + highlight_colour = "#c04040", + background_colour = "#b03030", + foreground_colour = "#ffffff", + }), }) de.defstyle("tab-frame-tiled", { @@ -41,11 +52,40 @@ de.defstyle("tab-frame-tiled", { spacing = 1, }) +de.defstyle("tab-menuentry", { + based_on = "tab", + text_align = "left", + + de.substyle("*-*-*-unselected-activity", { + shadow_colour = "#c04040", + highlight_colour = "#c04040", + background_colour = "#901010", + foreground_colour = "#eeeeee", + }), + + de.substyle("*-*-*-selected-activity", { + shadow_colour = "#c04040", + highlight_colour = "#c04040", + background_colour = "#b03030", + foreground_colour = "#ffffff", + }), +}) + +de.defstyle("frame", { + based_on = "*", + background_colour = "#000000", + transparent_background = false, + de.substyle("quasiactive", { + -- Something detached from the frame is active + padding_colour = "#901010", + }), +}) + de.defstyle("frame-tiled", { based_on = "frame", shadow_pixels = 0, highlight_pixels = 0, - padding_pixels = 0, + padding_pixels = 1, spacing = 1, }) @@ -56,5 +96,6 @@ de.defstyle("frame-tiled-alt", { de.defstyle("frame-floating", { based_on = "frame", - bar = "shaped" + bar = "shaped", + padding_pixels = 0, }) diff --git a/etc/lookcommon_emboss.lua b/etc/lookcommon_emboss.lua index 4c558e1..1d771c1 100644 --- a/etc/lookcommon_emboss.lua +++ b/etc/lookcommon_emboss.lua @@ -17,20 +17,31 @@ de.defstyle("stdisp", { de.defstyle("actnotify", { based_on = "*", - shadow_colour = "#401010", - highlight_colour = "#eec0c0", - background_colour = "#990000", - foreground_colour = "#eeeeee", + shadow_colour = "#600808", + highlight_colour = "#c04040", + background_colour = "#b03030", + foreground_colour = "#ffffff", }) de.defstyle("tab-frame", { based_on = "tab", - de.substyle("*-*-*-*-activity", { - shadow_colour = "#401010", - highlight_colour = "#eec0c0", - background_colour = "#990000", + -- TODO: some kind of amend option. It should not be necessary to + -- duplicate this definition for both tab-frame and tab-menuentry, + -- or for each style, nor use more complex hacks to communicate + -- this stuff otherwise. + de.substyle("*-*-*-unselected-activity", { + shadow_colour = "#600808", + highlight_colour = "#c04040", + background_colour = "#901010", foreground_colour = "#eeeeee", }), + + de.substyle("*-*-*-selected-activity", { + shadow_colour = "#600808", + highlight_colour = "#c04040", + background_colour = "#b03030", + foreground_colour = "#ffffff", + }), }) de.defstyle("tab-frame-tiled", { @@ -55,3 +66,30 @@ de.defstyle("frame-tiled-alt", { based_on = "frame-tiled", bar = "none", }) + +de.defstyle("tab-menuentry", { + based_on = "tab", + text_align = "left", + highlight_pixels = 0, + shadow_pixels = 0, + + de.substyle("*-*-*-unselected-activity", { + shadow_colour = "#600808", + highlight_colour = "#c04040", + background_colour = "#901010", + foreground_colour = "#eeeeee", + }), + + de.substyle("*-*-*-selected-activity", { + shadow_colour = "#600808", + highlight_colour = "#c04040", + background_colour = "#b03030", + foreground_colour = "#ffffff", + }), +}) + +de.defstyle("tab-menuentry-big", { + based_on = "tab-menuentry", + font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*", + padding_pixels = 7, +}) diff --git a/exact-version b/exact-version index d04e47f..43c9187 100644 --- a/exact-version +++ b/exact-version @@ -1,5 +1,5 @@ Context: -[TAG ion-3ds-20061223 -Tuomo Valkonen **20061223145904] +[TAG ion-3ds-20070203 +Tuomo Valkonen **20070203145039] diff --git a/ion/Makefile b/ion/Makefile index a79fa9f..823ab7f 100644 --- a/ion/Makefile +++ b/ion/Makefile @@ -19,7 +19,7 @@ INCLUDES += $(X11_INCLUDES) INCLUDES += $(LIBMAINLOOP_INCLUDES) $(LIBTU_INCLUDES) $(LIBEXTL_INCLUDES) INCLUDES += -I.. -LIBS += $(X11_LIBS) $(XINERAMA_LIBS) +LIBS += $(X11_LIBS) LIBS += $(WHOLEA) $(LIBMAINLOOP_LIBS) $(LIBEXTL_LIBS) $(LIBTU_LIBS) $(NO_WHOLEA) LIBS += $(LUA_LIBS) $(DL_LIBS) LIBS += -lm diff --git a/ion/ion.c b/ion/ion.c index 93a5977..1c7fcf9 100644 --- a/ion/ion.c +++ b/ion/ion.c @@ -1,7 +1,7 @@ /* * ion/ion/ion.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -48,16 +48,8 @@ static OptParserOpt ion_opts[]={ DUMMY_TR("Add directory to search path")}, {OPT_ID('o'), "oneroot", 0, NULL, - DUMMY_TR("Manage default root window/non-Xinerama screen only")}, + DUMMY_TR("Manage default screen only")}, -#if defined(CF_XINERAMA) || defined(CF_SUN_XINERAMA) - {OPT_ID('x'), "xinerama", OPT_ARG, "1|0", - DUMMY_TR("Use Xinerama screen information (default: 1/yes)")}, -#else - {OPT_ID('x'), "xinerama", OPT_ARG, "?", - DUMMY_TR("Ignored: not compiled with Xinerama support")}, -#endif - {OPT_ID('s'), "session", OPT_ARG, "session_name", DUMMY_TR("Name of session (affects savefiles)")}, @@ -189,17 +181,6 @@ int main(int argc, char*argv[]) case OPT_ID('o'): stflags|=IONCORE_STARTUP_ONEROOT; break; - case OPT_ID('x'): - { - const char *p=optparser_get_arg(); - if(strcmp(p, "1")==0) - stflags&=~IONCORE_STARTUP_NOXINERAMA; - else if(strcmp(p, "0")==0) - stflags|=IONCORE_STARTUP_NOXINERAMA; - else - warn(TR("Invalid parameter to -xinerama.")); - } - break; case OPT_ID('s'): extl_set_sessiondir(optparser_get_arg()); break; diff --git a/ioncore/Makefile b/ioncore/Makefile index c0bd8d9..c98fc61 100644 --- a/ioncore/Makefile +++ b/ioncore/Makefile @@ -23,7 +23,8 @@ SOURCES=binding.c conf-bindings.c cursor.c event.c exec.c focus.c \ kbresize.c rectangle.c xwindow.c presize.c extlrx.c \ pholder.c mplexpholder.c llist.c basicpholder.c sizepolicy.c \ stacking.c group.c grouppholder.c group-cw.c navi.c \ - group-ws.c float-placement.c groupedpholder.c framedpholder.c + group-ws.c float-placement.c groupedpholder.c framedpholder.c \ + return.c detach.c LUA_SOURCES=\ ioncore_ext.lua ioncore_luaext.lua ioncore_bindings.lua \ diff --git a/ioncore/activity.c b/ioncore/activity.c index 0f7b7a6..668d10a 100644 --- a/ioncore/activity.c +++ b/ioncore/activity.c @@ -1,7 +1,7 @@ /* * ion/ioncore/activity.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -32,7 +32,7 @@ void region_mark_mgd_activity(WRegion *mgr) mgr->mgd_activity++; if(!mgr_marked){ - region_notify_change(mgr, "sub-activity"); + region_notify_change(mgr, ioncore_g.notifies.sub_activity); region_mark_mgd_activity(REGION_MANAGER(mgr)); } } @@ -46,7 +46,7 @@ void region_clear_mgd_activity(WRegion *mgr) mgr->mgd_activity=maxof(0, mgr->mgd_activity-1); if(!region_is_activity_r(mgr)){ - region_notify_change(mgr, "sub-activity"); + region_notify_change(mgr, ioncore_g.notifies.sub_activity); region_clear_mgd_activity(REGION_MANAGER(mgr)); } } @@ -89,7 +89,7 @@ bool region_set_activity(WRegion *reg, int sp) propagate_clear(reg); } - region_notify_change(reg, "activity"); + region_notify_change(reg, ioncore_g.notifies.activity); return nset; } @@ -124,22 +124,15 @@ bool region_is_activity_r(WRegion *reg) /*EXTL_DOC - * Return list of regions with activity/urgency bit set. + * Iterate over activity list until \var{iterfn} returns \code{false}. + * The function itself returns \code{true} if it reaches the end of list + * without this happening. */ EXTL_SAFE EXTL_EXPORT -ExtlTab ioncore_activity_list() +bool ioncore_activity_i(ExtlFn iterfn) { - ExtlTab t=extl_create_table(); - ObjListIterTmp tmp; - Obj *obj; - int i=1; - - FOR_ALL_ON_OBJLIST(Obj*, obj, actlist, tmp){ - extl_table_seti_o(t, i, obj); - } - - return t; + return extl_iter_objlist(iterfn, actlist); } diff --git a/ioncore/activity.h b/ioncore/activity.h index 912e883..5971a6c 100644 --- a/ioncore/activity.h +++ b/ioncore/activity.h @@ -1,7 +1,7 @@ /* * ion/ioncore/activity.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -24,7 +24,7 @@ extern bool region_is_activity_r(WRegion *reg); extern void region_mark_mgd_activity(WRegion *mgr); extern void region_clear_mgd_activity(WRegion *mgr); -extern ExtlTab ioncore_activity_list(); +extern bool ioncore_activity_i(ExtlFn fn); extern WRegion *ioncore_activity_first(); extern bool ioncore_goto_activity(); diff --git a/ioncore/attach.c b/ioncore/attach.c index 23004cb..4eeb64e 100644 --- a/ioncore/attach.c +++ b/ioncore/attach.c @@ -1,7 +1,7 @@ /* * ion/ioncore/attach.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -35,7 +35,7 @@ static WRegion *doit_new(WRegion *mgr, if(reg==NULL) return NULL; - + if(!cont(mgr, reg, cont_param)){ destroy_obj((Obj*)reg); return NULL; @@ -90,21 +90,31 @@ static WRegion *wrap_load(WWindow *par, const WFitParams *fp, } +WRegion *ioncore_newly_created=NULL; + + static WRegion *doit_load(WRegion *mgr, WWindow *par, const WFitParams *fp, WRegionDoAttachFn *cont, void *cont_param, ExtlTab tab) { - WRegion *reg; + WRegion *reg=NULL; if(extl_table_gets_o(tab, "reg", (Obj**)®)){ if(!OBJ_IS(reg, WRegion)) return FALSE; + }/*else if(extl_table_is_bool_set(tab, "reg_use_new")){ + reg=ioncore_newly_created; + if(reg==NULL) + return NULL; + }*/ + + if(reg!=NULL){ return doit_reparent(mgr, par, fp, cont, cont_param, reg); + }else{ + return doit_new(mgr, par, fp, cont, cont_param, + (WRegionCreateFn*)wrap_load, &tab); } - - return doit_new(mgr, par, fp, cont, cont_param, - (WRegionCreateFn*)wrap_load, &tab); } WRegion *region_attach_helper(WRegion *mgr, diff --git a/ioncore/attach.h b/ioncore/attach.h index 9183ee2..8fb94d8 100644 --- a/ioncore/attach.h +++ b/ioncore/attach.h @@ -1,7 +1,7 @@ /* * ion/ioncore/attach.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -56,4 +56,5 @@ extern WRegion *region_attach_helper(WRegion *mgr, extern bool region_attach_reparent_check(WRegion *mgr, WRegion *reg); + #endif /* ION_IONCORE_ATTACH_H */ diff --git a/ioncore/basicpholder.c b/ioncore/basicpholder.c index b8b2e96..d5c85a4 100644 --- a/ioncore/basicpholder.c +++ b/ioncore/basicpholder.c @@ -1,7 +1,7 @@ /* * ion/ioncore/basicpholder.c * - * Copyright (c) Tuomo Valkonen 2005-2006. + * Copyright (c) Tuomo Valkonen 2005-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/basicpholder.h b/ioncore/basicpholder.h index 5008537..6b0df42 100644 --- a/ioncore/basicpholder.h +++ b/ioncore/basicpholder.h @@ -1,7 +1,7 @@ /* * ion/ioncore/basicpholder.h * - * Copyright (c) Tuomo Valkonen 2005-2006. + * Copyright (c) Tuomo Valkonen 2005-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/binding.c b/ioncore/binding.c index 4d03abd..7b80d11 100644 --- a/ioncore/binding.c +++ b/ioncore/binding.c @@ -1,7 +1,7 @@ /* * ion/ioncore/binding.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/binding.h b/ioncore/binding.h index 8e13d34..a776a64 100644 --- a/ioncore/binding.h +++ b/ioncore/binding.h @@ -1,7 +1,7 @@ /* * ion/ioncore/binding.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/bindmaps.c b/ioncore/bindmaps.c index dd4a1d0..9c6bd46 100644 --- a/ioncore/bindmaps.c +++ b/ioncore/bindmaps.c @@ -1,7 +1,7 @@ /* * ion/ioncore/bindmaps.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -23,7 +23,7 @@ */ -WBindmap *ioncore_rootwin_bindmap=NULL; +WBindmap *ioncore_screen_bindmap=NULL; WBindmap *ioncore_mplex_bindmap=NULL; WBindmap *ioncore_mplex_toplevel_bindmap=NULL; WBindmap *ioncore_frame_bindmap=NULL; @@ -56,7 +56,7 @@ static StringIntMap frame_areas[]={ void ioncore_deinit_bindmaps() { - DO_FREE(rootwin, "WScreen"); + DO_FREE(screen, "WScreen"); DO_FREE(mplex, "WMPlex"); DO_FREE(mplex_toplevel, "WMPlex.toplevel"); DO_FREE(frame, "WFrame"); @@ -86,7 +86,7 @@ bool ioncore_init_bindmaps() if(known_bindmaps==NULL) return FALSE; - DO_ALLOC(rootwin, "WScreen", NULL); + DO_ALLOC(screen, "WScreen", NULL); DO_ALLOC(mplex, "WMPlex", NULL); DO_ALLOC(mplex_toplevel, "WMPlex.toplevel", NULL); DO_ALLOC(frame, "WFrame", frame_areas); diff --git a/ioncore/bindmaps.h b/ioncore/bindmaps.h index bef0ae0..441aabb 100644 --- a/ioncore/bindmaps.h +++ b/ioncore/bindmaps.h @@ -1,7 +1,7 @@ /* * ion/ioncore/bindmaps.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -15,7 +15,7 @@ #ifndef ION_IONCORE_BINDMAP_H #define ION_IONCORE_BINDMAP_H -extern WBindmap *ioncore_rootwin_bindmap; +extern WBindmap *ioncore_screen_bindmap; extern WBindmap *ioncore_mplex_bindmap; extern WBindmap *ioncore_mplex_toplevel_bindmap; extern WBindmap *ioncore_frame_bindmap; diff --git a/ioncore/classes.h b/ioncore/classes.h index c990b14..3836bc7 100644 --- a/ioncore/classes.h +++ b/ioncore/classes.h @@ -1,7 +1,7 @@ /* * ion/ioncore/classes.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -33,6 +33,7 @@ INTRCLASS(WGroupWS); INTRCLASS(WPHolder); INTRCLASS(WMPlexPHolder); +INTRCLASS(WFramedPHolder); INTRSTRUCT(WStacking); INTRSTRUCT(WLListNode); diff --git a/ioncore/clientwin.c b/ioncore/clientwin.c index 4b4dbe4..d80c37b 100644 --- a/ioncore/clientwin.c +++ b/ioncore/clientwin.c @@ -1,7 +1,7 @@ /* * ion/ioncore/clientwin.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -41,6 +41,8 @@ #include "netwm.h" #include "xwindow.h" #include "bindmaps.h" +#include "return.h" +#include "conf.h" static void set_clientwin_state(WClientWin *cwin, int state); @@ -78,22 +80,6 @@ void clientwin_get_protocols(WClientWin *cwin) } -static bool get_winprop_fn_set=FALSE; -static ExtlFn get_winprop_fn; - -/*EXTL_DOC - * Set function used to look up winprops. - */ -EXTL_EXPORT -void ioncore_set_get_winprop_fn(ExtlFn fn) -{ - if(get_winprop_fn_set) - extl_unref_fn(get_winprop_fn); - get_winprop_fn=extl_ref_fn(fn); - get_winprop_fn_set=TRUE; -} - - static WSizePolicy get_sizepolicy_winprop(WClientWin *cwin, const char *propname, WSizePolicy value) @@ -118,17 +104,8 @@ static void clientwin_get_winprops(WClientWin *cwin) { ExtlTab tab, tab2; int i1, i2; - bool ret; - if(!get_winprop_fn_set) - return; - - extl_protect(NULL); - ret=extl_call(get_winprop_fn, "o", "t", cwin, &tab); - extl_unprotect(NULL); - - if(!ret) - return; + tab=ioncore_get_winprop(cwin); cwin->proptab=tab; @@ -346,8 +323,6 @@ static bool clientwin_init(WClientWin *cwin, WWindow *par, Window win, cwin->n_cmapwins=0; cwin->event_mask=IONCORE_EVENTMASK_CLIENTWIN; - cwin->fs_pholder=NULL; - region_init(&(cwin->region), par, &fp); cwin->region.flags|=REGION_GRAB_ON_PARENT; @@ -376,26 +351,6 @@ static WClientWin *create_clientwin(WWindow *par, Window win, } -static bool handle_target_prop(WClientWin *cwin, const WManageParams *param) -{ - WRegion *r=NULL; - char *target_name=NULL; - - if(extl_table_gets_s(cwin->proptab, "target", &target_name)){ - r=ioncore_lookup_region(target_name, NULL); - - free(target_name); - - if(r!=NULL){ - if(region_manage_clientwin(r, cwin, param, - MANAGE_REDIR_PREFER_NO)) - return TRUE; - } - } - - return FALSE; -} - WClientWin *clientwin_get_transient_for(const WClientWin *cwin) { @@ -484,6 +439,7 @@ WClientWin* ioncore_manage_clientwin(Window win, bool maprq) XWMHints *hints; int init_state=NormalState; WManageParams param=MANAGEPARAMS_INIT; + void *mrshpm[2]; param.dockapp=FALSE; @@ -581,21 +537,14 @@ again: FALSE); } - if(!handle_target_prop(cwin, ¶m)){ - bool managed; - void *mrshpm[2]; - - mrshpm[0]=cwin; - mrshpm[1]=¶m; + mrshpm[0]=cwin; + mrshpm[1]=¶m; - managed=hook_call_alt(clientwin_do_manage_alt, &mrshpm, - (WHookMarshall*)do_manage_mrsh, - (WHookMarshallExtl*)do_manage_mrsh_extl); - - if(!managed){ - warn(TR("Unable to manage client window %#x."), win); - goto failure; - } + if(!hook_call_alt(clientwin_do_manage_alt, &mrshpm, + (WHookMarshall*)do_manage_mrsh, + (WHookMarshallExtl*)do_manage_mrsh_extl)){ + warn(TR("Unable to manage client window %#x."), win); + goto failure; } if(ioncore_g.opmode==IONCORE_OPMODE_NORMAL && @@ -604,7 +553,6 @@ again: region_set_activity((WRegion*)cwin, SETPARAM_SET); } - if(postmanage_check(cwin, &attr)){ if(param.jumpto && ioncore_g.focus_next==NULL) region_goto((WRegion*)cwin); @@ -696,6 +644,8 @@ void clientwin_deinit(WClientWin *cwin) WRegion *reg; if(cwin->win!=None){ + region_pointer_focus_hack(&cwin->region); + xwindow_unmanaged_selectinput(cwin->win, 0); XUnmapWindow(ioncore_g.dpy, cwin->win); @@ -721,12 +671,6 @@ void clientwin_deinit(WClientWin *cwin) clientwin_clear_colormaps(cwin); - if(cwin->fs_pholder!=NULL){ - WPHolder *ph=cwin->fs_pholder; - cwin->fs_pholder=NULL; - destroy_obj((Obj*)ph); - } - region_deinit((WRegion*)cwin); } @@ -747,12 +691,7 @@ static bool mrsh_u_extl(ExtlFn fn, void *param) static void clientwin_do_unmapped(WClientWin *cwin, Window win) { - bool mcf=region_may_control_focus((WRegion*)cwin); - - if(mcf && cwin->fs_pholder!=NULL) - pholder_goto(cwin->fs_pholder); - - destroy_obj((Obj*)cwin); + region_dispose_((WRegion*)cwin); hook_call(clientwin_unmapped_hook, &win, mrsh_u_c, mrsh_u_extl); } @@ -843,6 +782,8 @@ static void set_clientwin_state(WClientWin *cwin, int state) static void hide_clientwin(WClientWin *cwin) { + region_pointer_focus_hack(&cwin->region); + if(cwin->flags&CLIENTWIN_PROP_ACROBATIC){ XMoveWindow(ioncore_g.dpy, cwin->win, -2*REGION_GEOM(cwin).w, -2*REGION_GEOM(cwin).h); @@ -981,15 +922,8 @@ static bool clientwin_fitrep(WClientWin *cwin, WWindow *np, region_set_parent((WRegion*)cwin, np); sendconfig_clientwin(cwin); - if(!REGION_IS_FULLSCREEN(cwin) && cwin->fs_pholder!=NULL){ - WPHolder *ph=cwin->fs_pholder; - cwin->fs_pholder=NULL; + if(!REGION_IS_FULLSCREEN(cwin)) cwin->flags&=~CLIENTWIN_FS_RQ; - /* Can't destroy it yet - messes up mplex placeholder - * reorganisation. - */ - mainloop_defer_destroy((Obj*)ph); - } netwm_update_state(cwin); } diff --git a/ioncore/clientwin.h b/ioncore/clientwin.h index 2080d3d..f78e826 100644 --- a/ioncore/clientwin.h +++ b/ioncore/clientwin.h @@ -1,7 +1,7 @@ /* * ion/ioncore/clientwin.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -58,8 +58,6 @@ DECLCLASS(WClientWin){ XSizeHints size_hints; - WPHolder *fs_pholder; - ExtlTab proptab; }; diff --git a/ioncore/colormap.c b/ioncore/colormap.c index 83c3b75..564336d 100644 --- a/ioncore/colormap.c +++ b/ioncore/colormap.c @@ -1,7 +1,7 @@ /* * ion/ioncore/colormap.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/colormap.h b/ioncore/colormap.h index b44f7fd..143f1ec 100644 --- a/ioncore/colormap.h +++ b/ioncore/colormap.h @@ -1,7 +1,7 @@ /* * ion/ioncore/colormap.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/common.h b/ioncore/common.h index 4959a5b..61bd5df 100644 --- a/ioncore/common.h +++ b/ioncore/common.h @@ -1,7 +1,7 @@ /* * ion/ioncore/common.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/conf-bindings.c b/ioncore/conf-bindings.c index e39b811..56d679e 100644 --- a/ioncore/conf-bindings.c +++ b/ioncore/conf-bindings.c @@ -1,7 +1,7 @@ /* * ion/ioncore/conf-bindings.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/conf-bindings.h b/ioncore/conf-bindings.h index c888a6f..e86c871 100644 --- a/ioncore/conf-bindings.h +++ b/ioncore/conf-bindings.h @@ -1,7 +1,7 @@ /* * ion/ioncore/conf-bindings.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/conf.c b/ioncore/conf.c index 207c1c1..62c91f1 100644 --- a/ioncore/conf.c +++ b/ioncore/conf.c @@ -1,7 +1,7 @@ /* * ion/ioncore/conf.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -36,6 +36,12 @@ StringIntMap frame_idxs[]={ END_STRINGINTMAP }; +static bool get_winprop_fn_set=FALSE; +static ExtlFn get_winprop_fn; + +static bool get_layout_fn_set=FALSE; +static ExtlFn get_layout_fn; + /*EXTL_DOC * Set ioncore basic settings. The table \var{tab} may contain the @@ -70,8 +76,6 @@ StringIntMap frame_idxs[]={ * \var{float_placement_method} & (string) How to place floating frames. * One of ''udlr'' (up-down, then left-right), * ''lrud'' (left-right, then up-down) or ''random''. \\ - * \var{default_ws_params} & (table) Default workspace layout; the - * attach/creation parameters for a \type{WGroup}. \\ * \end{tabularx} * * When a keyboard resize function is called, and at most \var{kbresize_t_max} @@ -88,6 +92,7 @@ void ioncore_set(ExtlTab tab) int dd, rd; char *wst, *tmp; ExtlTab t; + ExtlFn fn; extl_table_gets_b(tab, "opaque_resize", &(ioncore_g.opaque_resize)); extl_table_gets_b(tab, "warp", &(ioncore_g.warp_enabled)); @@ -108,6 +113,22 @@ void ioncore_set(ExtlTab tab) ioncore_set_moveres_accel(tab); ioncore_groupws_set(tab); + + /* Internal -- therefore undocumented above */ + if(extl_table_gets_f(tab, "_get_winprop", &fn)){ + if(get_winprop_fn_set) + extl_unref_fn(get_winprop_fn); + get_winprop_fn=fn; + get_winprop_fn_set=TRUE; + } + + if(extl_table_gets_f(tab, "_get_layout", &fn)){ + if(get_layout_fn_set) + extl_unref_fn(get_layout_fn); + get_layout_fn=fn; + get_layout_fn_set=TRUE; + } + } @@ -137,7 +158,35 @@ ExtlTab ioncore_get() return tab; } - + + +ExtlTab ioncore_get_winprop(WClientWin *cwin) +{ + ExtlTab tab=extl_table_none(); + + if(get_winprop_fn_set){ + extl_protect(NULL); + extl_call(get_winprop_fn, "o", "t", cwin, &tab); + extl_unprotect(NULL); + } + + return tab; +} + + +ExtlTab ioncore_get_layout(const char *layout) +{ + ExtlTab tab=extl_table_none(); + + if(get_layout_fn_set){ + extl_protect(NULL); + extl_call(get_layout_fn, "s", "t", layout, &tab); + extl_unprotect(NULL); + } + + return tab; +} + /*EXTL_DOC * Get important directories (userdir, sessiondir, searchpath). @@ -232,7 +281,7 @@ bool ioncore_read_main_config(const char *cfgfile) ret=extl_read_config(cfgfile, ".", TRUE); - unset+=(ioncore_rootwin_bindmap->nbindings==0); + unset+=(ioncore_screen_bindmap->nbindings==0); unset+=(ioncore_mplex_bindmap->nbindings==0); unset+=(ioncore_frame_bindmap->nbindings==0); diff --git a/ioncore/conf.h b/ioncore/conf.h index da3679b..696852d 100644 --- a/ioncore/conf.h +++ b/ioncore/conf.h @@ -1,7 +1,7 @@ /* * ion/ioncore/conf.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -14,4 +14,7 @@ extern bool ioncore_read_main_config(const char *cfgfile); +extern ExtlTab ioncore_get_winprop(WClientWin *cwin); +extern ExtlTab ioncore_get_layout(const char *str); + #endif /* ION_IONCORE_CONF_H */ diff --git a/ioncore/cursor.c b/ioncore/cursor.c index 31ea25b..6973a16 100644 --- a/ioncore/cursor.c +++ b/ioncore/cursor.c @@ -1,7 +1,7 @@ /* * ion/ioncore/cursor.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/cursor.h b/ioncore/cursor.h index 0137e8c..8d03f79 100644 --- a/ioncore/cursor.h +++ b/ioncore/cursor.h @@ -1,7 +1,7 @@ /* * ion/ioncore/cursor.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/detach.c b/ioncore/detach.c new file mode 100644 index 0000000..c93ca0c --- /dev/null +++ b/ioncore/detach.c @@ -0,0 +1,194 @@ +/* + * ion/ioncore/detach.c + * + * Copyright (c) Tuomo Valkonen 1999-2007. + * + * Ion is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + */ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + + +static void get_relative_geom(WRectangle *g, WRegion *reg, WRegion *mgr) +{ + WWindow *rel=REGION_PARENT(mgr), *w; + + *g=REGION_GEOM(reg); + + for(w=REGION_PARENT(reg); + w!=rel && (WRegion*)w!=mgr; + w=REGION_PARENT(w)){ + + g->x+=REGION_GEOM(w).x; + g->y+=REGION_GEOM(w).y; + } +} + + +bool ioncore_do_detach(WRegion *reg, WGroup *grp, WFrameMode framemode) +{ + WGroupAttachParams ap=GROUPATTACHPARAMS_INIT; + WRegionAttachData data; + WPHolder *ph; + bool newph=FALSE; + bool ret; + + ap.switchto_set=TRUE; + ap.switchto=region_may_control_focus(reg); + + data.type=REGION_ATTACH_REPARENT; + data.u.reg=reg; + + ph=region_unset_get_return(reg); + + if(ph==NULL){ + ph=region_make_return_pholder(reg); + newph=TRUE; + } + + if(framemode!=FRAME_MODE_UNKNOWN){ + WFramedParam fpa=FRAMEDPARAM_INIT; + + fpa.mode=framemode; + fpa.inner_geom_gravity_set=TRUE; + fpa.gravity=ForgetGravity; + + ap.geom_weak_set=TRUE; + ap.geom_weak=0; + + get_relative_geom(&fpa.inner_geom, reg, (WRegion*)grp); + + ret=(region_attach_framed((WRegion*)grp, &fpa, + (WRegionAttachFn*)group_do_attach, + &ap, &data)!=NULL); + }else{ + WStacking *st=ioncore_find_stacking(reg); + + if(st!=NULL){ + ap.szplcy=st->szplcy; + ap.szplcy_set=TRUE; + + ap.level=maxof(st->level, STACKING_LEVEL_NORMAL); + ap.level_set=TRUE; + } + + ap.geom_set=TRUE; + get_relative_geom(&ap.geom, reg, (WRegion*)grp); + + ret=(group_do_attach(grp, &ap, &data)!=NULL); + } + + if(!ret && newph) + destroy_obj((Obj*)ph); + else if(!region_do_set_return(reg, ph)) + destroy_obj((Obj*)ph); + + return ret; +} + + +static WRegion *check_mplex(WRegion *reg, WFrameMode *mode) +{ + WMPlex *mplex=REGION_MANAGER_CHK(reg, WMPlex); + + if(OBJ_IS(reg, WWindow) || mplex==NULL){ + *mode=FRAME_MODE_UNKNOWN; + return reg; + } + + *mode=FRAME_MODE_FLOATING; + + if(OBJ_IS(mplex, WFrame) + && frame_mode((WFrame*)mplex)==FRAME_MODE_TRANSIENT){ + *mode=FRAME_MODE_TRANSIENT; + } + + return (WRegion*)mplex; +} + + +static WGroup *find_group(WRegion *reg) +{ + WRegion *mgr=REGION_MANAGER(reg); + + while(mgr!=NULL){ + mgr=REGION_MANAGER(mgr); + if(OBJ_IS(mgr, WGroup)) + break; + } + + return (WGroup*)mgr; +} + + +bool ioncore_detach(WRegion *reg, int sp) +{ + WPHolder *ph=region_get_return(reg); + WFrameMode mode; + WGroup *grp; + bool set, nset; + + reg=region_group_if_bottom(reg); + + grp=find_group(check_mplex(reg, &mode)); + + /* reg is only considered detached if there's no higher-level group + * to attach to, thus causing 'toggle' to cycle. + */ + set=(grp==NULL); + nset=libtu_do_setparam(sp, set); + + if(!XOR(nset, set)) + return set; + + if(!set){ + return ioncore_do_detach(reg, grp, mode); + }else{ + WPHolder *ph=region_get_return(reg); + + if(ph!=NULL){ + if(!pholder_attach_mcfgoto(ph, PHOLDER_ATTACH_SWITCHTO, reg)){ + warn(TR("Failed to reattach.")); + return TRUE; + } + region_unset_return(reg); + } + + return FALSE; + } +} + + +/*EXTL_DOC + * Detach or reattach \var{reg}, depending on whether \var{how} + * is 'set'/'unset'/'toggle'. (Detaching means making \var{reg} + * managed by its nearest ancestor \type{WGroup}, framed if \var{reg} is + * not itself \type{WFrame}. Reattaching means making it managed where + * it used to be managed, if a return-placeholder exists.) + * If \var{reg} is the 'bottom' of some group, the whole group is + * detached. If \var{reg} is a \type{WWindow}, it is put into a + * frame. + */ +EXTL_EXPORT_AS(ioncore, detach) +bool ioncore_detach_extl(WRegion *reg, const char *how) +{ + if(how==NULL) + how="set"; + + return ioncore_detach(reg, libtu_string_to_setparam(how)); +} + + diff --git a/ioncore/detach.h b/ioncore/detach.h new file mode 100644 index 0000000..30b4a4a --- /dev/null +++ b/ioncore/detach.h @@ -0,0 +1,20 @@ +/* + * ion/ioncore/detach.h + * + * Copyright (c) Tuomo Valkonen 1999-2007. + * + * Ion is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + */ + +#ifndef ION_IONCORE_DETACH_H +#define ION_IONCORE_DETACH_H + +#include "region.h" + +extern bool ioncore_detach(WRegion *reg, int sp); + +#endif /* ION_IONCORE_DETACH_H */ + diff --git a/ioncore/dummywc.h b/ioncore/dummywc.h index f3343be..6d1a491 100644 --- a/ioncore/dummywc.h +++ b/ioncore/dummywc.h @@ -1,7 +1,7 @@ /* * ion/ioncore/dummywc.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/event.c b/ioncore/event.c index 84943d5..9a3b957 100644 --- a/ioncore/event.c +++ b/ioncore/event.c @@ -1,7 +1,7 @@ /* * ion/ioncore/event.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/event.h b/ioncore/event.h index 1bf227d..b81edf1 100644 --- a/ioncore/event.h +++ b/ioncore/event.h @@ -1,7 +1,7 @@ /* * ion/ioncore/event.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -37,6 +37,10 @@ PropertyChangeMask|FocusChangeMask| \ StructureNotifyMask|EnterWindowMask) +#define IONCORE_EVENTMASK_SCREEN (FocusChangeMask|EnterWindowMask| \ + KeyPressMask|KeyReleaseMask| \ + ButtonPressMask|ButtonReleaseMask) + extern void ioncore_x_connection_handler(int conn, void *unused); extern void ioncore_flush(); extern void ioncore_get_event(XEvent *ev, long mask); diff --git a/ioncore/eventh.c b/ioncore/eventh.c index 91ab550..5e1e1fe 100644 --- a/ioncore/eventh.c +++ b/ioncore/eventh.c @@ -1,7 +1,7 @@ /* * ion/ioncore/eventh.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -305,9 +305,6 @@ void ioncore_handle_expose(const XExposeEvent *ev) /*{{{ Enter window, focus */ -/*extern Time ioncore_focus_time;*/ - - static void do_handle_enter_window(XEvent *ev) { XEnterWindowEvent *eev=&(ev->xcrossing); @@ -316,15 +313,6 @@ static void do_handle_enter_window(XEvent *ev) if(ioncore_g.input_mode!=IONCORE_INPUTMODE_NORMAL) return; - /*if(ioncore_g.focus_next!=NULL && ioncore_focus_time==CurrentTime) - return;*/ - - /*if(ioncore_await_warp()) - return; - - if(eev->mode!=NotifyNormal && !ioncore_g.warp_enabled) - return;*/ - reg=XWINDOW_REGION_OF_T(eev->window, WRegion); if(reg==NULL) @@ -335,9 +323,10 @@ static void do_handle_enter_window(XEvent *ev) if(region_skip_focus(reg)) return; - + /* If a child of 'reg' is to be focused, do not process this - * event. + * event. (ioncore_g.focus_next should only be set here by + * another call to use from ioncore_handle_enter_window below.) */ if(ioncore_g.focus_next!=NULL){ WRegion *r2=ioncore_g.focus_next; @@ -397,8 +386,7 @@ void ioncore_handle_focus_in(const XFocusChangeEvent *ev, bool skip) if(ev->detail==NotifyPointer) return; - /* Root windows appear either as WRootWins or WScreens */ - if(ev->window==region_root_of(reg)){ + if(ev->window==region_root_of(reg)){ /* OBJ_IS(reg, WRootWin) */ D(fprintf(stderr, "scr-in %d %d %d\n", ROOTWIN_OF(reg)->xscr, ev->mode, ev->detail)); if((ev->detail==NotifyPointerRoot || ev->detail==NotifyDetailNone) && @@ -408,7 +396,6 @@ void ioncore_handle_focus_in(const XFocusChangeEvent *ev, bool skip) region_set_focus(reg); return; } - /*return;*/ } /* Input contexts */ diff --git a/ioncore/eventh.h b/ioncore/eventh.h index f80257b..84257a4 100644 --- a/ioncore/eventh.h +++ b/ioncore/eventh.h @@ -1,7 +1,7 @@ /* * ion/ioncore/eventh.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/exec.c b/ioncore/exec.c index 10c8267..4147172 100644 --- a/ioncore/exec.c +++ b/ioncore/exec.c @@ -1,7 +1,7 @@ /* * ion/ioncore/exec.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/exec.h b/ioncore/exec.h index 63c8917..b7f9bce 100644 --- a/ioncore/exec.h +++ b/ioncore/exec.h @@ -1,7 +1,7 @@ /* * ion/ioncore/exec.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/extlconv.c b/ioncore/extlconv.c index 5f23b74..9fc7af9 100644 --- a/ioncore/extlconv.c +++ b/ioncore/extlconv.c @@ -1,7 +1,7 @@ /* * ion/ioncore/extlconv.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -19,21 +19,43 @@ /*{{{ Object list */ -ExtlTab extl_obj_iterable_to_table(ObjIterator *iter, void *st) +bool extl_iter_objlist_(ExtlFn fn, ObjIterator *iter, void *st) { - ExtlTab tab=extl_create_table(); - int i=1; Obj *obj; while(1){ obj=iter(st); if(obj==NULL) break; - if(extl_table_seti_o(tab, i, obj)) - i++; + if(!extl_iter_obj(fn, obj)) + return FALSE; } - return tab; + return TRUE; +} + + +bool extl_iter_objlist(ExtlFn fn, ObjList *list) +{ + ObjListIterTmp tmp; + + objlist_iter_init(&tmp, list); + + return extl_iter_objlist_(fn, (ObjIterator*)objlist_iter, &tmp); +} + + +bool extl_iter_obj(ExtlFn fn, Obj *obj) +{ + bool ret1, ret2=FALSE; + + extl_protect(NULL); + + ret1=extl_call(fn, "o", "b", obj, &ret2); + + extl_unprotect(NULL); + + return (ret1 && ret2); } diff --git a/ioncore/extlconv.h b/ioncore/extlconv.h index b4e3b80..28fbb95 100644 --- a/ioncore/extlconv.h +++ b/ioncore/extlconv.h @@ -1,7 +1,7 @@ /* * ion/ioncore/extlconv.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -15,10 +15,13 @@ #include #include #include +#include #include "common.h" #include "region.h" -extern ExtlTab extl_obj_iterable_to_table(ObjIterator *iter, void *st); +extern bool extl_iter_obj(ExtlFn fn, Obj *obj); +extern bool extl_iter_objlist_(ExtlFn fn, ObjIterator *iter, void *st); +extern bool extl_iter_objlist(ExtlFn fn, ObjList *list); extern bool extl_table_is_bool_set(ExtlTab tab, const char *entry); diff --git a/ioncore/extlrx.c b/ioncore/extlrx.c index b9a380e..a13038a 100644 --- a/ioncore/extlrx.c +++ b/ioncore/extlrx.c @@ -1,7 +1,7 @@ /* * ion/ioncore/extlrx.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/float-placement.c b/ioncore/float-placement.c index 399f5ec..8d5fb21 100644 --- a/ioncore/float-placement.c +++ b/ioncore/float-placement.c @@ -1,7 +1,7 @@ /* * ion/ioncore/float-placement.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/float-placement.h b/ioncore/float-placement.h index 0f52daf..2dc062d 100644 --- a/ioncore/float-placement.h +++ b/ioncore/float-placement.h @@ -1,7 +1,7 @@ /* * ion/ioncore/float-placement.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/focus.c b/ioncore/focus.c index fb2159b..c25ec71 100644 --- a/ioncore/focus.c +++ b/ioncore/focus.c @@ -1,7 +1,7 @@ /* * ion/ioncore/focus.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -25,8 +25,6 @@ WHook *region_do_warp_alt=NULL; -WHook *region_activated_hook=NULL; -WHook *region_inactivated_hook=NULL; /*}}}*/ @@ -35,22 +33,27 @@ WHook *region_inactivated_hook=NULL; /*{{{ Focus list */ -void region_focuslist_remove(WRegion *reg) +void region_focuslist_remove_with_mgrs(WRegion *reg) { + WRegion *mgrp=region_manager_or_parent(reg); + UNLINK_ITEM(ioncore_g.focus_current, reg, active_next, active_prev); + + if(mgrp!=NULL) + region_focuslist_remove_with_mgrs(mgrp); } void region_focuslist_push(WRegion *reg) { - region_focuslist_remove(reg); + region_focuslist_remove_with_mgrs(reg); LINK_ITEM_FIRST(ioncore_g.focus_current, reg, active_next, active_prev); } void region_focuslist_move_after(WRegion *reg, WRegion *after) { - region_focuslist_remove(reg); + region_focuslist_remove_with_mgrs(reg); LINK_ITEM_AFTER(ioncore_g.focus_current, after, reg, active_next, active_prev); } @@ -62,8 +65,8 @@ void region_focuslist_deinit(WRegion *reg) if(replace!=NULL) region_focuslist_move_after(replace, reg); - - region_focuslist_remove(reg); + + UNLINK_ITEM(ioncore_g.focus_current, reg, active_next, active_prev); } @@ -99,6 +102,34 @@ WRegion *ioncore_goto_previous() } +/*EXTL_DOC + * Iterate over focus history until \var{iterfn} returns \code{false}. + * The function itself returns \code{true} if it reaches the end of list + * without this happening. + */ +EXTL_EXPORT +bool ioncore_focushistory_i(ExtlFn iterfn) +{ + WRegion *next; + + if(ioncore_g.focus_current==NULL) + return FALSE; + + /* Find the first region on focus history list that isn't currently + * active. + */ + for(next=ioncore_g.focus_current->active_next; + next!=NULL; + next=next->active_next){ + + if(!extl_iter_obj(iterfn, (Obj*)next)) + return FALSE; + } + + return TRUE; +} + + /*}}}*/ @@ -161,9 +192,9 @@ static void check_clear_await(WRegion *reg) } -bool ioncore_await_focus() +WRegion *ioncore_await_focus() { - return (await_watch.obj!=NULL); + return (WRegion*)(await_watch.obj); } @@ -175,7 +206,7 @@ bool ioncore_await_focus() void region_got_focus(WRegion *reg) { - WRegion *par, *mgr, *tmp; + WRegion *par; check_clear_await(reg); @@ -188,30 +219,18 @@ void region_got_focus(WRegion *reg) if(!REGION_IS_ACTIVE(reg)){ D(fprintf(stderr, "got focus (inact) %s [%p]\n", OBJ_TYPESTR(reg), reg);) + reg->flags|=REGION_ACTIVE; + region_set_manager_pseudoactivity(reg); par=REGION_PARENT_REG(reg); if(par!=NULL){ par->active_sub=reg; region_update_owned_grabs(par); } - - region_activated(reg); - mgr=REGION_MANAGER(reg); - tmp=reg; - while(mgr!=NULL){ - /* We need to loop over managing non-windows (workspaces) here to - * signal their managers. - */ - region_managed_activated(mgr, tmp); - - if(REGION_PARENT_REG(reg)==mgr) - break; - - tmp=mgr; - mgr=REGION_MANAGER(mgr); - } + region_activated(reg); + region_notify_change(reg, ioncore_g.notifies.activated); }else{ D(fprintf(stderr, "got focus (act) %s [%p]\n", OBJ_TYPESTR(reg), reg);) } @@ -223,16 +242,12 @@ void region_got_focus(WRegion *reg) */ if(reg->active_sub==NULL && !OBJ_IS(reg, WClientWin)) rootwin_install_colormap(region_rootwin_of(reg), None); - - extl_protect(NULL); - hook_call_o(region_activated_hook, (Obj*)reg); - extl_unprotect(NULL); } void region_lost_focus(WRegion *reg) { - WRegion *r, *par; + WRegion *par; if(!REGION_IS_ACTIVE(reg)){ D(fprintf(stderr, "lost focus (inact) %s [%p:]\n", OBJ_TYPESTR(reg), reg);) @@ -260,14 +275,10 @@ void region_lost_focus(WRegion *reg) D(fprintf(stderr, "lost focus (act) %s [%p:]\n", OBJ_TYPESTR(reg), reg);) reg->flags&=~REGION_ACTIVE; - region_inactivated(reg); - r=REGION_MANAGER(reg); - if(r!=NULL) - region_managed_inactivated(r, reg); + region_unset_manager_pseudoactivity(reg); - extl_protect(NULL); - hook_call_o(region_inactivated_hook, (Obj*)reg); - extl_unprotect(NULL); + region_inactivated(reg); + region_notify_change(reg, ioncore_g.notifies.inactivated); } @@ -290,28 +301,14 @@ bool region_is_active(WRegion *reg) bool region_may_control_focus(WRegion *reg) { - WRegion *par, *r2; - if(OBJ_IS_BEING_DESTROYED(reg)) return FALSE; - if(REGION_IS_ACTIVE(reg)) + if(REGION_IS_ACTIVE(reg) || REGION_IS_PSEUDOACTIVE(reg)) return TRUE; if(region_is_await(reg)) return TRUE; - - par=REGION_PARENT_REG(reg); - - if(par==NULL || !REGION_IS_ACTIVE(par)) - return FALSE; - - r2=par->active_sub; - while(r2!=NULL && r2!=par){ - if(r2==reg) - return TRUE; - r2=REGION_MANAGER(r2); - } return FALSE; } @@ -395,6 +392,14 @@ void region_maybewarp(WRegion *reg, bool warp) } +void region_maybewarp_now(WRegion *reg, bool warp) +{ + ioncore_g.focus_next=NULL; + /* TODO: what if focus isn't set? Should focus_next be reset then? */ + region_do_set_focus(reg, warp); +} + + void region_set_focus(WRegion *reg) { region_maybewarp(reg, FALSE); @@ -432,4 +437,49 @@ WRegion *ioncore_current() return ioncore_g.focus_current; } + +/*}}}*/ + + +/*{{{ Pointer focus hack */ + + +/* This ugly hack tries to prevent focus change, when the pointer is + * in a window to be unmapped (or destroyed), and that does not have + * the focus, or should not soon have it. + */ +void region_pointer_focus_hack(WRegion *reg) +{ + WRegion *act=ioncore_await_focus(); + const WRectangle *g=®ION_GEOM(reg); + int x, y; + + if(ioncore_g.opmode!=IONCORE_OPMODE_NORMAL) + return; + + if(!REGION_IS_ACTIVE(reg) && act==NULL) + act=ioncore_g.focus_current; + + if(act==NULL || OBJ_IS_BEING_DESTROYED(act)) + return; + + /* Ok, anything under us should not get focus as we're unmapped: + * Either we don't have the focus, or focus change somewhere else + * is pending. + * + * It might be possible to do the pointer check more efficiently + * by trying to maintain our internal pointer containment state + * by tracking Enter/Leave events... + */ + + xwindow_pointer_pos(region_xwindow(reg), &x, &y); + + if(x>=0 && y>=0 && xw && yh){ + D(fprintf(stderr, "Pointer here and shouldn't alter focus!\n")); + region_set_focus(act); + } +} + + /*}}}*/ + diff --git a/ioncore/focus.h b/ioncore/focus.h index e995d6d..683d8ae 100644 --- a/ioncore/focus.h +++ b/ioncore/focus.h @@ -1,7 +1,7 @@ /* * ion/ioncore/focus.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -17,22 +17,24 @@ #include "window.h" #include "region.h" -DYNFUN void region_do_set_focus(WRegion *reg, bool warp); /* Delayed (until return to main loop) warp/focus */ -extern void region_warp(WRegion *reg); -extern void region_set_focus(WRegion *reg); extern void region_maybewarp(WRegion *reg, bool warp); +/* warp/focus now; do not skip enter window events etc. in mainloop */ +extern void region_maybewarp_now(WRegion *reg, bool warp); -/* Immediate warp/focus */ -extern void region_do_warp(WRegion *reg); -extern bool region_do_warp_default(WRegion *reg); +extern void region_warp(WRegion *reg); /* maybewarp TRUE */ +extern void region_set_focus(WRegion *reg); /* maybewarp FALSE */ extern void region_finalise_focusing(WRegion* reg, Window win, bool warp); +DYNFUN void region_do_set_focus(WRegion *reg, bool warp); +extern void region_do_warp(WRegion *reg); +extern bool region_do_warp_default(WRegion *reg); + /* Awaiting focus state */ extern void region_set_await_focus(WRegion *reg); -extern bool ioncore_await_focus(); +extern WRegion *ioncore_await_focus(); /* Event handling */ extern void region_got_focus(WRegion *reg); @@ -45,20 +47,20 @@ extern bool region_may_control_focus(WRegion *reg); extern bool region_is_active(WRegion *reg); /* Focus history */ -extern void region_focuslist_remove(WRegion *reg); +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); extern WRegion *ioncore_goto_previous(); -/* Handlers to these shook should take WRegion* as parameter. */ +/* Handlers to this hook should take WRegion* as parameter. */ extern WHook *region_do_warp_alt; -extern WHook *region_activated_hook; -extern WHook *region_inactivated_hook; /* Misc. */ extern bool region_skip_focus(WRegion *reg); WRegion *ioncore_current(); +extern void region_pointer_focus_hack(WRegion *reg); + #endif /* ION_IONCORE_FOCUS_H */ diff --git a/ioncore/frame-draw.c b/ioncore/frame-draw.c index 116f10c..6c43fc6 100644 --- a/ioncore/frame-draw.c +++ b/ioncore/frame-draw.c @@ -1,7 +1,7 @@ /* * ion/ioncore/frame-draw.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -20,8 +20,10 @@ #include "framep.h" #include "frame-draw.h" #include "strings.h" +#include "activity.h" #include "names.h" #include "gr.h" +#include "gr-util.h" #define BAR_INSIDE_BORDER(FRAME) \ @@ -30,6 +32,72 @@ #define BAR_H(FRAME) (FRAME)->bar_h +/*{{{ Attributes */ + + +GR_DEFATTR(active); +GR_DEFATTR(inactive); +GR_DEFATTR(selected); +GR_DEFATTR(unselected); +GR_DEFATTR(tagged); +GR_DEFATTR(not_tagged); +GR_DEFATTR(dragged); +GR_DEFATTR(not_dragged); +GR_DEFATTR(activity); +GR_DEFATTR(no_activity); +GR_DEFATTR(quasiactive); +GR_DEFATTR(not_quasiactive); + + +static void ensure_create_attrs() +{ + GR_ALLOCATTR_BEGIN; + GR_ALLOCATTR(active); + GR_ALLOCATTR(inactive); + GR_ALLOCATTR(selected); + GR_ALLOCATTR(unselected); + GR_ALLOCATTR(tagged); + GR_ALLOCATTR(not_tagged); + GR_ALLOCATTR(dragged); + GR_ALLOCATTR(not_dragged); + GR_ALLOCATTR(no_activity); + GR_ALLOCATTR(activity); + GR_ALLOCATTR(quasiactive); + GR_ALLOCATTR(not_quasiactive); + GR_ALLOCATTR_END; +} + + +void frame_update_attr(WFrame *frame, int i, WRegion *reg) +{ + GrStyleSpec *spec; + bool selected, tagged, dragged, activity; + + if(i>=frame->titles_n){ + /* Might happen when deinitialising */ + return; + } + + ensure_create_attrs(); + + spec=&frame->titles[i].attr; + + selected=(reg==FRAME_CURRENT(frame)); + tagged=(reg!=NULL && reg->flags®ION_TAGGED); + dragged=(i==frame->tab_dragged_idx); + activity=(reg!=NULL && region_is_activity_r(reg)); + + gr_stylespec_unalloc(spec); + gr_stylespec_set(spec, selected ? GR_ATTR(selected) : GR_ATTR(unselected)); + gr_stylespec_set(spec, tagged ? GR_ATTR(tagged) : GR_ATTR(not_tagged)); + gr_stylespec_set(spec, dragged ? GR_ATTR(dragged) : GR_ATTR(not_dragged)); + gr_stylespec_set(spec, activity ? GR_ATTR(activity) : GR_ATTR(no_activity)); +} + + +/*}}}*/ + + /*{{{ (WFrame) dynfun default implementations */ @@ -82,7 +150,7 @@ void frame_bar_geom(const WFrame *frame, WRectangle *geom) uint off; if(BAR_INSIDE_BORDER(frame)){ - off=get_spacing(frame); + off=0; /*get_spacing(frame);*/ frame_border_inner_geom(frame, geom); }else{ off=0; @@ -105,10 +173,12 @@ void frame_managed_geom(const WFrame *frame, WRectangle *geom) frame_border_inner_geom(frame, geom); + /* geom->x+=spacing; geom->y+=spacing; geom->w-=2*spacing; geom->h-=2*spacing; + */ if(BAR_INSIDE_BORDER(frame) && BAR_EXISTS(frame)){ geom->y+=frame->bar_h+spacing; @@ -241,7 +311,8 @@ void frame_recalc_bar(WFrame *frame) if(FRAME_MCOUNT(frame)==0){ textw=init_title(frame, i); if(textw>0){ - title=grbrush_make_label(frame->bar_brush, CF_STR_EMPTY, textw); + title=grbrush_make_label(frame->bar_brush, TR(""), + textw); frame->titles[i].text=title; } return; @@ -269,11 +340,22 @@ void frame_recalc_bar(WFrame *frame) } +static void set_common_attrs(const WFrame *frame, GrBrush *brush) +{ + ensure_create_attrs(); + + grbrush_set_attr(brush, REGION_IS_ACTIVE(frame) + ? GR_ATTR(active) + : GR_ATTR(inactive)); + grbrush_set_attr(brush, frame->quasiactive_count>0 + ? GR_ATTR(quasiactive) + : GR_ATTR(not_quasiactive)); +} + + void frame_draw_bar(const WFrame *frame, bool complete) { WRectangle geom; - const char *cattr=(REGION_IS_ACTIVE(frame) - ? "active" : "inactive"); if(frame->bar_brush==NULL || !BAR_EXISTS(frame) @@ -285,27 +367,29 @@ void frame_draw_bar(const WFrame *frame, bool complete) grbrush_begin(frame->bar_brush, &geom, GRBRUSH_AMEND); + set_common_attrs(frame, frame->bar_brush); + grbrush_draw_textboxes(frame->bar_brush, &geom, frame->titles_n, - frame->titles, complete, cattr); + frame->titles, complete); grbrush_end(frame->bar_brush); } - void frame_draw(const WFrame *frame, bool complete) { WRectangle geom; - const char *attr=(REGION_IS_ACTIVE(frame) - ? "active" : "inactive"); if(frame->brush==NULL) return; - + frame_border_geom(frame, &geom); grbrush_begin(frame->brush, &geom, (complete ? 0 : GRBRUSH_NO_CLEAR_OK)); - grbrush_draw_border(frame->brush, &geom, attr); + set_common_attrs(frame, frame->brush); + + grbrush_draw_border(frame->brush, &geom); + frame_draw_bar(frame, TRUE); grbrush_end(frame->brush); @@ -478,4 +562,18 @@ bool frame_set_background(WFrame *frame, bool set_always) } +void frame_setup_dragwin_style(WFrame *frame, GrStyleSpec *spec, int tab) +{ + gr_stylespec_append(spec, &frame->titles[tab].attr); + + gr_stylespec_set(spec, REGION_IS_ACTIVE(frame) + ? GR_ATTR(active) + : GR_ATTR(inactive)); + gr_stylespec_set(spec, frame->quasiactive_count>0 + ? GR_ATTR(quasiactive) + : GR_ATTR(not_quasiactive)); +} + + /*}}}*/ + diff --git a/ioncore/frame-draw.h b/ioncore/frame-draw.h index 4086dec..b0134f5 100644 --- a/ioncore/frame-draw.h +++ b/ioncore/frame-draw.h @@ -1,7 +1,7 @@ /* * ion/ioncore/frame-draw.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -35,4 +35,8 @@ extern void frame_clear_shape(WFrame *frame); extern const char *framemode_get_style(WFrameMode mode); extern const char *framemode_get_tab_style(WFrameMode mode); +extern void frame_update_attr(WFrame *frame, int i, WRegion *reg); + +extern void frame_setup_dragwin_style(WFrame *frame, GrStyleSpec *spec, int tab); + #endif /* ION_IONCORE_FRAME_DRAW_H */ diff --git a/ioncore/frame-pointer.c b/ioncore/frame-pointer.c index 1d9a196..09f1c0a 100644 --- a/ioncore/frame-pointer.c +++ b/ioncore/frame-pointer.c @@ -1,7 +1,7 @@ /* * ion/ioncore/frame-pointer.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -138,7 +138,7 @@ static bool tabdrag_kbd_handler(WRegion *reg, XEvent *xev) assert(reg!=NULL); - binding=bindmap_lookup_binding(ioncore_rootwin_bindmap, BINDING_KEYPRESS, + binding=bindmap_lookup_binding(ioncore_screen_bindmap, BINDING_KEYPRESS, ev->state&~BUTTONS_MASK, ev->keycode); if(binding!=NULL && binding->func!=extl_fn_none()){ @@ -173,9 +173,7 @@ static void setup_dragwin(WFrame *frame, uint tab) if(tabdrag_infowin==NULL) return; - infowin_set_attr2(tabdrag_infowin, (REGION_IS_ACTIVE(frame) - ? "active" : "inactive"), - frame->titles[tab].attr); + frame_setup_dragwin_style(frame, infowin_stylespec(tabdrag_infowin), tab); if(frame->titles[tab].text!=NULL){ char *buf=INFOWIN_BUFFER(tabdrag_infowin); diff --git a/ioncore/frame-pointer.h b/ioncore/frame-pointer.h index 092b90a..c7163a1 100644 --- a/ioncore/frame-pointer.h +++ b/ioncore/frame-pointer.h @@ -1,7 +1,7 @@ /* * ion/ioncore/frame-pointer.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/frame.c b/ioncore/frame.c index 0f3e8f2..d733c3f 100644 --- a/ioncore/frame.c +++ b/ioncore/frame.c @@ -1,7 +1,7 @@ /* * ion/ioncore/frame.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -37,8 +37,9 @@ #include "bindmaps.h" #include "regbind.h" #include "gr.h" -#include "activity.h" #include "llist.h" +#include "framedpholder.h" +#include "return.h" extern bool frame_set_background(WFrame *frame, bool set_always); @@ -91,7 +92,7 @@ bool frame_init(WFrame *frame, WWindow *parent, const WFitParams *fp, frame_initialise_titles(frame); region_add_bindmap((WRegion*)frame, ioncore_frame_bindmap); - region_add_bindmap((WRegion*)frame, ioncore_frame_toplevel_bindmap); + region_add_bindmap((WRegion*)frame, ioncore_mplex_bindmap); frame_add_mode_bindmaps(frame); @@ -130,15 +131,18 @@ static void frame_add_mode_bindmaps(WFrame *frame) { WFrameMode mode=frame->mode; - if(mode==FRAME_MODE_TILED || mode==FRAME_MODE_TILED_ALT){ - region_add_bindmap((WRegion*)frame, ioncore_frame_toplevel_bindmap); - region_add_bindmap((WRegion*)frame, ioncore_frame_tiled_bindmap); - }else if(mode==FRAME_MODE_FLOATING){ + if(mode==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_frame_floating_bindmap); }else if(mode==FRAME_MODE_TRANSIENT){ region_add_bindmap((WRegion*)frame, ioncore_frame_transient_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_frame_tiled_bindmap); + } } @@ -151,6 +155,7 @@ void frame_set_mode(WFrame *frame, WFrameMode mode) frame_release_brushes(frame); + region_remove_bindmap((WRegion*)frame, ioncore_mplex_toplevel_bindmap); region_remove_bindmap((WRegion*)frame, ioncore_frame_toplevel_bindmap); region_remove_bindmap((WRegion*)frame, ioncore_frame_tiled_bindmap); region_remove_bindmap((WRegion*)frame, ioncore_frame_floating_bindmap); @@ -175,6 +180,7 @@ WFrameMode frame_mode(WFrame *frame) StringIntMap frame_modes[]={ + {"unknown", FRAME_MODE_UNKNOWN}, {"tiled", FRAME_MODE_TILED}, {"tiled-alt", FRAME_MODE_TILED_ALT}, {"floating", FRAME_MODE_FLOATING}, @@ -186,6 +192,7 @@ StringIntMap frame_modes[]={ /*EXTL_DOC * Get frame mode. */ +EXTL_SAFE EXTL_EXPORT_AS(WFrame, mode) const char *frame_mode_extl(WFrame *frame) { @@ -299,46 +306,6 @@ int frame_nth_tab_iw(WFrame *frame, int n) -static void update_attr(WFrame *frame, int i, WRegion *reg) -{ - int flags=0; - static char *attrs[]={ - "unselected-not_tagged-not_dragged-no_activity", - "selected-not_tagged-not_dragged-no_activity", - "unselected-tagged-not_dragged-no_activity", - "selected-tagged-not_dragged-no_activity", - "unselected-not_tagged-dragged-no_activity", - "selected-not_tagged-dragged-no_activity", - "unselected-tagged-dragged-no_activity", - "selected-tagged-dragged-no_activity", - "unselected-not_tagged-not_dragged-activity", - "selected-not_tagged-not_dragged-activity", - "unselected-tagged-not_dragged-activity", - "selected-tagged-not_dragged-activity", - "unselected-not_tagged-dragged-activity", - "selected-not_tagged-dragged-activity", - "unselected-tagged-dragged-activity", - "selected-tagged-dragged-activity" - }; - - if(i>=frame->titles_n){ - /* Might happen when deinitialising */ - return; - } - - if(reg==FRAME_CURRENT(frame)) - flags|=0x01; - if(reg!=NULL && reg->flags®ION_TAGGED) - flags|=0x02; - if(i==frame->tab_dragged_idx) - flags|=0x04; - if(reg!=NULL && region_is_activity_r(reg)) - flags|=0x08; - - frame->titles[i].attr=attrs[flags]; -} - - void frame_update_attr_nth(WFrame *frame, int i) { WRegion *reg; @@ -346,18 +313,18 @@ void frame_update_attr_nth(WFrame *frame, int i) if(i<0 || i>=frame->titles_n) return; - update_attr(frame, i, mplex_mx_nth((WMPlex*)frame, i)); + frame_update_attr(frame, i, mplex_mx_nth((WMPlex*)frame, i)); } -static void update_attrs(WFrame *frame) +static void frame_update_attrs(WFrame *frame) { int i=0; WRegion *sub; WLListIterTmp tmp; FRAME_MX_FOR_ALL(sub, frame, tmp){ - update_attr(frame, i, sub); + frame_update_attr(frame, i, sub); i++; } } @@ -371,6 +338,7 @@ static void frame_free_titles(WFrame *frame) for(i=0; ititles_n; i++){ if(frame->titles[i].text) free(frame->titles[i].text); + gr_stylespec_unalloc(&frame->titles[i].attr); } free(frame->titles); frame->titles=NULL; @@ -383,7 +351,10 @@ static void do_init_title(WFrame *frame, int i, WRegion *sub) { frame->titles[i].text=NULL; frame->titles[i].iw=frame_nth_tab_iw(frame, i); - update_attr(frame, i, sub); + + gr_stylespec_init(&frame->titles[i].attr); + + frame_update_attr(frame, i, sub); } @@ -551,6 +522,74 @@ void frame_activated(WFrame *frame) } +void frame_quasiactivation(WFrame *frame, WRegion *reg, bool act) +{ + bool was, is; + + was=(frame->quasiactive_count>0); + + frame->quasiactive_count=maxof(0, frame->quasiactive_count + + (act ? 1 : -1)); + + is=(frame->quasiactive_count>0); + + if(was!=is && !REGION_IS_ACTIVE(frame)) + window_draw((WWindow*)frame, FALSE); +} + + +static bool actinact(WRegion *reg, bool act) +{ + WPHolder *returnph=region_get_return(reg); + WFrame *frame; + + if(returnph==NULL || pholder_stale(returnph)) + return FALSE; + + frame=OBJ_CAST(pholder_target(returnph), WFrame); + + if(frame!=NULL){ + /* Ok, reg has return placeholder set to a frame: + * do quasiactivation/inactivation + */ + frame_quasiactivation(frame, reg, act); + } + + return TRUE; +} + + +static bool activated(WRegion *reg) +{ + return actinact(reg, TRUE); +} + + +static bool inactivated(WRegion *reg) +{ + return actinact(reg, FALSE); +} + + +void ioncore_frame_quasiactivation_notify(WRegion *reg, + WRegionNotify how) +{ + if(how==ioncore_g.notifies.activated || + how==ioncore_g.notifies.pseudoactivated){ + activated(reg); + }else if(how==ioncore_g.notifies.inactivated || + how==ioncore_g.notifies.pseudoinactivated){ + inactivated(reg); + }else if(how==ioncore_g.notifies.set_return){ + if(REGION_IS_ACTIVE(reg) || REGION_IS_PSEUDOACTIVE(reg)) + activated(reg); + }else if(how==ioncore_g.notifies.unset_return){ + if(REGION_IS_ACTIVE(reg) || REGION_IS_PSEUDOACTIVE(reg)) + inactivated(reg); + } +} + + /*}}}*/ @@ -620,6 +659,73 @@ static void frame_managed_rqgeom_absolute(WFrame *frame, WRegion *sub, /*}}}*/ +/*{{{ Frame recreate pholder stuff */ + + +static WFramedPHolder *frame_make_recreate_pholder(WFrame *frame) +{ + WPHolder *ph; + WFramedPHolder *fph; + WFramedParam fparam=FRAMEDPARAM_INIT; + + ph=region_make_return_pholder((WRegion*)frame); + + if(ph==NULL) + return NULL; + + fparam.mode=frame->mode; + + fph=create_framedpholder(ph, &fparam); + + if(fph==NULL){ + destroy_obj((Obj*)ph); + return NULL; + } + + return fph; +} + + +static void mplex_flatten_phs(WMPlex *mplex) +{ + WLListNode *node; + WLListIterTmp tmp; + + FOR_ALL_NODES_ON_LLIST(node, mplex->mx_list, tmp){ + WMPlexPHolder *last=(mplex->mx_phs==NULL ? NULL : mplex->mx_phs->prev); + mplex_move_phs(mplex, node, last, NULL); + } +} + + +static void frame_modify_pholders(WFrame *frame) +{ + WFramedPHolder *fph; + WMPlexPHolder *phs, *ph; + + mplex_flatten_phs(&frame->mplex); + + if(frame->mplex.mx_phs==NULL) + return; + + fph=frame_make_recreate_pholder(frame); + + if(fph==NULL) + return; + + phs=frame->mplex.mx_phs; + frame->mplex.mx_phs=NULL; + + phs->recreate_pholder=fph; + + for(ph=phs; ph!=NULL; ph=ph->next) + watch_reset(&ph->mplex_watch); +} + + +/*}}}*/ + + /*{{{ Misc. */ @@ -724,9 +830,9 @@ bool frame_is_numbers(WFrame *frame) } -void frame_managed_notify(WFrame *frame, WRegion *sub, const char *how) +void frame_managed_notify(WFrame *frame, WRegion *sub, WRegionNotify how) { - update_attrs(frame); + frame_update_attrs(frame); frame_recalc_bar(frame); frame_draw_bar(frame, FALSE); } @@ -755,7 +861,7 @@ static void frame_managed_changed(WFrame *frame, int mode, bool sw, if(mode!=MPLEX_CHANGE_SWITCHONLY) frame_initialise_titles(frame); else - update_attrs(frame); + frame_update_attrs(frame); if(sw) need_draw=!frame_set_background(frame, FALSE); @@ -776,8 +882,10 @@ static void frame_managed_changed(WFrame *frame, int mode, bool sw, static void frame_destroy_empty(WFrame *frame) { - if(EMPTY_AND_SHOULD_BE_DESTROYED(frame)) + if(EMPTY_AND_SHOULD_BE_DESTROYED(frame)){ + frame_modify_pholders(frame); destroy_obj((Obj*)frame); + } } diff --git a/ioncore/frame.h b/ioncore/frame.h index ce37814..aa4e7a6 100644 --- a/ioncore/frame.h +++ b/ioncore/frame.h @@ -1,7 +1,7 @@ /* * ion/ioncore/frame.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -64,6 +64,7 @@ DECLCLASS(WFrame){ int saved_x, saved_y; int tab_dragged_idx; + uint quasiactive_count; GrBrush *brush; GrBrush *bar_brush; @@ -115,9 +116,11 @@ extern bool frame_is_numbers(WFrame *frame); extern int frame_default_index(WFrame *frame); /* Misc */ -extern void frame_managed_notify(WFrame *frame, WRegion *sub, const char *how); +extern void frame_managed_notify(WFrame *frame, WRegion *sub, WRegionNotify how); extern void frame_managed_remove(WFrame *frame, WRegion *reg); +extern void ioncore_frame_quasiactivation_notify(WRegion *reg, WRegionNotify how); + /* Save/load */ extern ExtlTab frame_get_configuration(WFrame *frame); extern WRegion *frame_load(WWindow *par, const WFitParams *fp, ExtlTab tab); diff --git a/ioncore/framedpholder.c b/ioncore/framedpholder.c index 43375f2..6ef378b 100644 --- a/ioncore/framedpholder.c +++ b/ioncore/framedpholder.c @@ -1,7 +1,7 @@ /* * ion/ioncore/framedpholder.c * - * Copyright (c) Tuomo Valkonen 2005-2006. + * Copyright (c) Tuomo Valkonen 2005-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -65,37 +65,13 @@ typedef struct{ } AP; -WRegion *framed_handler(WWindow *par, - const WFitParams *fp, - void *ap_) +void frame_adjust_to_initial(WFrame *frame, const WFitParams *fp, + const WFramedParam *param, WRegion *reg) { - AP *ap=(AP*)ap_; - WMPlexAttachParams mp=MPLEXATTACHPARAMS_INIT; - WFramedParam *param=ap->param; WRectangle rqg, mg; - WFrame *frame; - WRegion *reg; - - if(param->mkframe!=NULL) - frame=(WFrame*)(param->mkframe)(par, fp); - else - frame=create_frame(par, fp, FRAME_MODE_FLOATING); - - if(frame==NULL) - return NULL; - - if(fp->mode&(REGION_FIT_BOUNDS|REGION_FIT_WHATEVER)) - mp.flags|=MPLEX_ATTACH_WHATEVER; - - reg=mplex_do_attach(&frame->mplex, &mp, ap->data); - - if(reg==NULL){ - destroy_obj((Obj*)frame); - return NULL; - } - + if(!(fp->mode&(REGION_FIT_BOUNDS|REGION_FIT_WHATEVER))) - return (WRegion*)frame; + return; mplex_managed_geom((WMPlex*)frame, &mg); @@ -111,9 +87,9 @@ WRegion *framed_handler(WWindow *par, int bt=mg.y; int bb=REGION_GEOM(frame).h-(mg.y+mg.h); - rqg.x=(fp->g.x+param->inner_geom.x+ + rqg.x=(/*fp->g.x+*/param->inner_geom.x+ xgravity_deltax(param->gravity, bl, br)); - rqg.y=(fp->g.y+param->inner_geom.y+ + rqg.y=(/*fp->g.y+*/param->inner_geom.y+ xgravity_deltay(param->gravity, bt, bb)); rqg.w=maxof(1, param->inner_geom.w+(REGION_GEOM(frame).w-mg.w)); rqg.h=maxof(1, param->inner_geom.h+(REGION_GEOM(frame).h-mg.h)); @@ -123,6 +99,35 @@ WRegion *framed_handler(WWindow *par, rectangle_constrain(&rqg, &fp->g); region_fit((WRegion*)frame, &rqg, REGION_FIT_EXACT); +} + + +WRegion *framed_handler(WWindow *par, + const WFitParams *fp, + void *ap_) +{ + AP *ap=(AP*)ap_; + WMPlexAttachParams mp=MPLEXATTACHPARAMS_INIT; + WFramedParam *param=ap->param; + WFrame *frame; + WRegion *reg; + + frame=create_frame(par, fp, param->mode); + + if(frame==NULL) + return NULL; + + if(fp->mode&(REGION_FIT_BOUNDS|REGION_FIT_WHATEVER)) + mp.flags|=MPLEX_ATTACH_WHATEVER; + + reg=mplex_do_attach(&frame->mplex, &mp, ap->data); + + if(reg==NULL){ + destroy_obj((Obj*)frame); + return NULL; + } + + frame_adjust_to_initial(frame, fp, param, reg); return (WRegion*)frame; } @@ -162,7 +167,7 @@ WRegion *framedpholder_do_attach(WFramedPHolder *ph, int flags, ap.data=data; ap.param=&ph->param; - return pholder_attach_(ph->cont, flags, &data2); + return pholder_do_attach(ph->cont, flags, &data2); } @@ -174,19 +179,32 @@ WRegion *framedpholder_do_attach(WFramedPHolder *ph, int flags, bool framedpholder_do_goto(WFramedPHolder *ph) { - if(ph->cont!=NULL) - return pholder_goto(ph->cont); - - return FALSE; + return (ph->cont!=NULL + ? pholder_goto(ph->cont) + : FALSE); } WRegion *framedpholder_do_target(WFramedPHolder *ph) { - if(ph->cont!=NULL) - return pholder_target(ph->cont); + return (ph->cont!=NULL + ? pholder_target(ph->cont) + : NULL); +} + + +WPHolder *framedpholder_do_root(WFramedPHolder *ph) +{ + WPHolder *root; + + if(ph->cont==NULL) + return NULL; + + root=pholder_root(ph->cont); - return NULL; + return (root!=ph->cont + ? root + : &ph->ph); } @@ -205,6 +223,9 @@ static DynFunTab framedpholder_dynfuntab[]={ {(DynFun*)pholder_do_target, (DynFun*)framedpholder_do_target}, + + {(DynFun*)pholder_do_root, + (DynFun*)framedpholder_do_root}, END_DYNFUNTAB }; diff --git a/ioncore/framedpholder.h b/ioncore/framedpholder.h index 2bd7f1b..dfbbe50 100644 --- a/ioncore/framedpholder.h +++ b/ioncore/framedpholder.h @@ -1,7 +1,7 @@ /* * ion/ioncore/framedpholder.h * - * Copyright (c) Tuomo Valkonen 2005-2006. + * Copyright (c) Tuomo Valkonen 2005-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -15,19 +15,19 @@ #include "common.h" #include "pholder.h" #include "attach.h" - -INTRCLASS(WFramedPHolder); -INTRSTRUCT(WFramedParam); +#include "frame.h" -#define FRAMEDPARAM_INIT {0, 0, {0, 0, 0, 0}, NULL} +#define FRAMEDPARAM_INIT {0, 0, {0, 0, 0, 0}, FRAME_MODE_FLOATING /*, NULL*/} +INTRSTRUCT(WFramedParam); DECLSTRUCT(WFramedParam){ uint inner_geom_gravity_set:1; int gravity; WRectangle inner_geom; - WRegionSimpleCreateFn *mkframe; + WFrameMode mode; + /*WRegionSimpleCreateFn *mkframe;*/ }; @@ -48,6 +48,8 @@ extern void framedpholder_deinit(WFramedPHolder *ph); extern bool framedpholder_do_goto(WFramedPHolder *ph); +extern WPHolder *framedpholder_do_root(WFramedPHolder *ph); + extern WRegion *framedpholder_do_target(WFramedPHolder *ph); extern WRegion *framedpholder_do_attach(WFramedPHolder *ph, int flags, @@ -57,4 +59,7 @@ extern WRegion *region_attach_framed(WRegion *reg, WFramedParam *param, WRegionAttachFn *fn, void *fn_param, WRegionAttachData *data); +extern void frame_adjust_to_initial(WFrame *frame, const WFitParams *fp, + const WFramedParam *param, WRegion *reg); + #endif /* ION_IONCORE_FRAMEDPHOLDER_H */ diff --git a/ioncore/framep.h b/ioncore/framep.h index a3b1283..9dabf48 100644 --- a/ioncore/framep.h +++ b/ioncore/framep.h @@ -1,7 +1,7 @@ /* * ion/ioncore/framep.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/fullscreen.c b/ioncore/fullscreen.c index e11a2d9..56ea527 100644 --- a/ioncore/fullscreen.c +++ b/ioncore/fullscreen.c @@ -1,7 +1,7 @@ /* * ion/ioncore/fullscreen.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -21,192 +21,171 @@ #include "mwmhints.h" #include "focus.h" #include "group-cw.h" +#include "return.h" -bool clientwin_fullscreen_may_switchto(WClientWin *cwin) -{ - return (region_may_control_focus((WRegion*)cwin) - || !REGION_IS_ACTIVE(region_screen_of((WRegion*)cwin))); -} +/*{{{ Generic full screen mode code */ -bool clientwin_check_fullscreen_request(WClientWin *cwin, int w, int h, - bool sw) + +bool region_fullscreen_scr(WRegion *reg, WScreen *scr, bool switchto) { - WScreen *scr; - WMwmHints *mwm; - WRectangle *rwgeom; - - mwm=xwindow_get_mwmhints(cwin->win); - if(mwm==NULL || !(mwm->flags&MWM_HINTS_DECORATIONS) || - mwm->decorations!=0) - return FALSE; + int rootx, rooty; + bool wasfs=TRUE; + int swf=(switchto ? MPLEX_ATTACH_SWITCHTO : 0); + WPHolder *ph=NULL; + bool newph=FALSE, ret; + + ph=region_unset_get_return(reg); - FOR_ALL_SCREENS(scr){ - if(!region_same_rootwin((WRegion*)scr, (WRegion*)cwin)) - continue; - /* TODO: if there are multiple possible rootwins, use the one with - * requested position, if any. - */ - if(REGION_GEOM(scr).w==w && REGION_GEOM(scr).h==h){ - cwin->flags|=CLIENTWIN_FS_RQ; - if(!clientwin_fullscreen_scr(cwin, (WScreen*)scr, sw)){ - cwin->flags&=~CLIENTWIN_FS_RQ; - return FALSE; - } - return TRUE; - } + if(ph==NULL){ + ph=region_make_return_pholder(reg); + newph=TRUE; } - rwgeom=®ION_GEOM(region_rootwin_of((WRegion*)cwin)); - - /* Catch Xinerama-unaware apps here */ - if(rwgeom->w==w && rwgeom->h==h){ - cwin->flags|=CLIENTWIN_FS_RQ; - if(clientwin_enter_fullscreen(cwin, sw)) - return TRUE; - cwin->flags&=~CLIENTWIN_FS_RQ; - } - - return FALSE; -} - - -static void destroy_pholder(WPHolder **fs_pholder) -{ - WPHolder *ph=*fs_pholder; - *fs_pholder=NULL; - destroy_obj((Obj*)ph); + ret=(mplex_attach_simple((WMPlex*)scr, reg, swf)!=NULL); + + if(!ret) + warn(TR("Failed to enter full screen mode.")); + + if(!ret && newph) + destroy_obj((Obj*)ph); + else if(!region_do_set_return(reg, ph)) + destroy_obj((Obj*)ph); + + return TRUE; } -static bool do_fullscreen_scr(WRegion *reg, WPHolder **fs_pholder, - WScreen *scr, bool switchto) +bool region_enter_fullscreen(WRegion *reg, bool switchto) { - int rootx, rooty; - bool wasfs=TRUE; - int swf=(switchto ? MPLEX_ATTACH_SWITCHTO : 0); - WRegion *mgr=REGION_MANAGER(reg); - - if(*fs_pholder!=NULL) - destroy_pholder(fs_pholder); - - if(*fs_pholder==NULL && mgr!=NULL) - *fs_pholder=region_managed_get_pholder(mgr, reg); + WScreen *scr=region_screen_of(reg); - if(!mplex_attach_simple((WMPlex*)scr, reg, swf)){ - warn(TR("Failed to enter full screen mode.")); - if(*fs_pholder!=NULL) - destroy_pholder(fs_pholder); - return FALSE; + if(scr==NULL){ + scr=rootwin_current_scr(region_rootwin_of(reg)); + if(scr==NULL) + return FALSE; } - - return TRUE; + + return region_fullscreen_scr(reg, scr, switchto); } -static bool do_leave_fullscreen(WRegion *reg, WPHolder **fs_pholder, - bool switchto) -{ - bool cf; +bool region_leave_fullscreen(WRegion *reg, bool switchto) +{ int swf=(switchto ? PHOLDER_ATTACH_SWITCHTO : 0); + WPHolder *ph=region_unset_get_return(reg); - if(*fs_pholder==NULL) + if(ph==NULL) return FALSE; - cf=region_may_control_focus(reg); - - if(!pholder_attach(*fs_pholder, swf, reg)){ + if(!pholder_attach_mcfgoto(ph, swf, reg)){ warn(TR("Failed to return from full screen mode; remaining manager " "or parent from previous location refused to manage us.")); return FALSE; } - if(*fs_pholder!=NULL) - destroy_pholder(fs_pholder); - - if(cf) - region_goto(reg); + destroy_obj((Obj*)ph); return TRUE; } -static WRegion *get_group(WClientWin *cwin) +/*#undef REGION_IS_FULLSCREEN +#define REGION_IS_FULLSCREEN(REG) (region_get_return((WRegion*)REG)!=NULL)*/ + + +static bool region_set_fullscreen(WRegion *reg, int sp) { - WGroupCW *cwg=OBJ_CAST(REGION_MANAGER(cwin), WGroupCW); + bool set=REGION_IS_FULLSCREEN(reg); + bool nset=libtu_do_setparam(sp, set); - return ((cwg!=NULL && group_bottom(&cwg->grp)==(WRegion*)cwin) - ? (WRegion*)cwg - : (WRegion*)cwin); + if(!XOR(nset, set)) + return set; + + if(nset) + region_enter_fullscreen(reg, TRUE); + else + region_leave_fullscreen(reg, TRUE); + + return REGION_IS_FULLSCREEN(reg); } -bool clientwin_fullscreen_scr(WClientWin *cwin, WScreen *scr, bool switchto) +/*}}}*/ + + +/*{{{ Client window requests */ + + +bool clientwin_fullscreen_may_switchto(WClientWin *cwin) { - WRegion *reg=get_group(cwin); - return do_fullscreen_scr(reg, &cwin->fs_pholder, scr, switchto); + return (region_may_control_focus((WRegion*)cwin) + || !REGION_IS_ACTIVE(region_screen_of((WRegion*)cwin))); } -bool clientwin_enter_fullscreen(WClientWin *cwin, bool switchto) +bool clientwin_check_fullscreen_request(WClientWin *cwin, int w, int h, + bool sw) { - WScreen *scr=region_screen_of((WRegion*)cwin); + WScreen *scr; + WMwmHints *mwm; + WRectangle *rwgeom; - if(scr==NULL){ - scr=rootwin_current_scr(region_rootwin_of((WRegion*)cwin)); - if(scr==NULL) - return FALSE; + mwm=xwindow_get_mwmhints(cwin->win); + if(mwm==NULL || !(mwm->flags&MWM_HINTS_DECORATIONS) || + mwm->decorations!=0) + return FALSE; + + FOR_ALL_SCREENS(scr){ + if(!region_same_rootwin((WRegion*)scr, (WRegion*)cwin)) + continue; + /* Only Mplayer supports single Xinerama region FS to my knowledge, + * and doesn't set position, so we also don't check position here, + * and instead take the first screen with matching size. + */ + if(REGION_GEOM(scr).w==w && REGION_GEOM(scr).h==h){ + cwin->flags|=CLIENTWIN_FS_RQ; + if(!region_fullscreen_scr((WRegion*)cwin, (WScreen*)scr, sw)){ + cwin->flags&=~CLIENTWIN_FS_RQ; + return FALSE; + } + return TRUE; + } } - return clientwin_fullscreen_scr(cwin, scr, switchto); + return FALSE; } -bool clientwin_leave_fullscreen(WClientWin *cwin, bool switchto) -{ - WRegion *reg=get_group(cwin); - return do_leave_fullscreen(reg, &cwin->fs_pholder, switchto); -} +/*}}}*/ -bool clientwin_set_fullscreen(WClientWin *cwin, int sp) -{ - bool set=REGION_IS_FULLSCREEN(cwin); - bool nset=libtu_do_setparam(sp, set); - - if(!XOR(nset, set)) - return set; - if(nset) - clientwin_enter_fullscreen(cwin, TRUE); - else - clientwin_leave_fullscreen(cwin, TRUE); - - return REGION_IS_FULLSCREEN(cwin); -} +/*{{{ Group exports */ /*EXTL_DOC - * Set client window \var{cwin} full screen state according to the + * Set client window \var{reg} full screen state according to the * parameter \var{how} (set/unset/toggle). Resulting state is returned, * which may not be what was requested. */ -EXTL_EXPORT_AS(WClientWin, set_fullscreen) -bool clientwin_set_fullscreen_extl(WClientWin *cwin, const char *how) +EXTL_EXPORT_AS(WGroup, set_fullscreen) +bool group_set_fullscreen_extl(WGroup *grp, const char *how) { - return clientwin_set_fullscreen(cwin, libtu_string_to_setparam(how)); + return region_set_fullscreen((WRegion*)grp, libtu_string_to_setparam(how)); } /*EXTL_DOC - * Is \var{cwin} in full screen mode? + * Is \var{reg} in full screen mode? */ EXTL_SAFE EXTL_EXPORT_MEMBER -bool clientwin_is_fullscreen(WClientWin *cwin) +bool group_is_fullscreen(WGroup *grp) { - return REGION_IS_FULLSCREEN(cwin); + return REGION_IS_FULLSCREEN(grp); } +/*}}}*/ diff --git a/ioncore/fullscreen.h b/ioncore/fullscreen.h index 8c820a4..2822703 100644 --- a/ioncore/fullscreen.h +++ b/ioncore/fullscreen.h @@ -1,7 +1,7 @@ /* * ion/ioncore/fullscreen.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -21,12 +21,11 @@ extern bool clientwin_check_fullscreen_request(WClientWin *cwin, int w, int h, bool switchto); -extern bool clientwin_fullscreen_scr(WClientWin *cwin, WScreen *vp, - bool switchto); -extern bool clientwin_enter_fullscreen(WClientWin *cwin, bool switchto); -extern bool clientwin_leave_fullscreen(WClientWin *cwin, bool switchto); -extern bool clientwin_set_fullscreen(WClientWin *cwin, int sp); -extern bool clientwin_is_fullscreen(WClientWin *cwin); extern bool clientwin_fullscreen_may_switchto(WClientWin *cwin); +extern bool region_fullscreen_scr(WRegion *reg, WScreen *vp, bool switchto); +extern bool region_enter_fullscreen(WRegion *reg, bool switchto); +extern bool region_leave_fullscreen(WRegion *reg, bool switchto); + + #endif /* ION_IONCORE_FULLSCREEN_H */ diff --git a/ioncore/global.h b/ioncore/global.h index 3756910..b23dce2 100644 --- a/ioncore/global.h +++ b/ioncore/global.h @@ -1,7 +1,7 @@ /* * ion/ioncore/global.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -17,6 +17,8 @@ #include #include +#include + #include "rootwin.h" #include "screen.h" #include "window.h" @@ -37,6 +39,7 @@ enum{ INTRSTRUCT(WGlobal); + DECLSTRUCT(WGlobal){ int argc; char **argv; @@ -85,6 +88,22 @@ DECLSTRUCT(WGlobal){ bool enc_utf8; /* mb encoding is utf8? */ const char *sm_client_id; + + struct{ + StringId activated, + inactivated, + activity, + sub_activity, + name, + unset_manager, + set_manager, + tag, + set_return, + unset_return, + pseudoactivated, + pseudoinactivated, + deinit; + } notifies; }; diff --git a/ioncore/gr-util.h b/ioncore/gr-util.h new file mode 100644 index 0000000..52cf384 --- /dev/null +++ b/ioncore/gr-util.h @@ -0,0 +1,24 @@ +/* + * ion/ioncore/gr-util.h + * + * Copyright (c) Tuomo Valkonen 2007. + * + * Ion is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + */ + +#ifndef ION_IONCORE_GR_UTIL_H +#define ION_IONCORE_GR_UTIL_H + +#include "gr.h" + +#define GR_ATTR(X) grattr_##X +#define GR_DEFATTR(X) static GrAttr GR_ATTR(X) = STRINGID_NONE +#define GR_ALLOCATTR_BEGIN static bool alloced=FALSE; if(alloced) return +#define GR_ALLOCATTR_END alloced=TRUE +#define GR_ALLOCATTR(X) GR_ATTR(X) = stringstore_alloc(#X) + +#endif /* ION_IONCORE_GR_UTIL_H */ + diff --git a/ioncore/gr.c b/ioncore/gr.c index d4f5a15..f864792 100644 --- a/ioncore/gr.c +++ b/ioncore/gr.c @@ -1,7 +1,7 @@ /* * ion/ioncore/gr.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -12,6 +12,7 @@ #include #include +#include #include #include #include "common.h" @@ -147,68 +148,294 @@ GrBrush *gr_get_brush(Window win, WRootWin *rootwin, const char *style) /*{{{ Scoring */ -uint gr_stylespec_score2(const char *spec, const char *attrib, - const char *attrib_p2) +static GrAttr star_id=STRINGID_NONE; + + +static int cmp(const void *a_, const void *b_) { - uint score=0; - uint a=0; - uint mult=1; + StringId a=*(const StringId*)a_; + StringId b=((const GrAttrScore*)b_)->attr; + + return (a < b ? -1 : ((a == b) ? 0 : 1)); +} - if(attrib==NULL){ - if(spec==NULL || strcmp(spec, "*")==0) - return 1; + +static uint scorefind(const GrStyleSpec *attr, const GrAttrScore *spec) +{ + GrAttrScore *res; + + if(attr->attrs==NULL) return 0; + + if(star_id==STRINGID_NONE) + star_id=stringstore_alloc("*"); + + if(spec->attr==star_id){ + /* Since every item occurs only once on the list, with a score, + * return the score of the star in the spec, instead of one. + */ + return spec->score; + } + + res=bsearch(&spec->attr, attr->attrs, attr->n, sizeof(GrAttrScore), cmp); + + return (res==NULL ? 0 : 2*res->score); +} + + +uint gr_stylespec_score2(const GrStyleSpec *spec, const GrStyleSpec *attr1, + const GrStyleSpec *attr2) +{ + uint score=0; + uint i; + + for(i=0; in; i++){ + int sc=scorefind(attr1, &spec->attrs[i]); + + if(attr2!=NULL) + sc=maxof(sc, scorefind(attr2, &spec->attrs[i])); + + if(sc==0){ + score=0; + break; + } + + score+=sc; + } + + return score; +} + + +uint gr_stylespec_score(const GrStyleSpec *spec, const GrStyleSpec *attr) +{ + return gr_stylespec_score2(spec, attr, NULL); +} + + +static uint count_dashes(const char *str) +{ + uint n=0; + + if(str!=NULL){ + while(1){ + const char *p=strchr(str, '-'); + if(p==NULL) + break; + n++; + str=p+1; + } } - while(1){ - if(*spec=='*'){ - score=score+mult; - spec++; - attrib=strchr(attrib, '-'); + return n; +} + + +bool gr_stylespec_load_(GrStyleSpec *spec, const char *str, bool no_order_score) +{ + uint score=(no_order_score ? 1 : count_dashes(str)+1); + + gr_stylespec_init(spec); + + while(str!=NULL){ + GrAttr a; + const char *p=strchr(str, '-'); + + if(p==NULL){ + a=stringstore_alloc(str); + str=p; }else{ - while(1){ - if(*attrib=='\0'){ - attrib=NULL; - break; - } - if(*attrib=='-') - break; - if(*spec!=*attrib) - return 0; - attrib++; - spec++; - } - score=score+2*mult; + a=stringstore_alloc_n(str, p-str); + str=p+1; } - if(*spec=='\0') - return score; - else if(*spec!='-') - return 0; + if(a==STRINGID_NONE) + goto fail; + + if(!gr_stylespec_add(spec, a, score)) + goto fail; + + stringstore_free(a); - if(attrib==NULL){ - if(a==0 && attrib_p2!=NULL){ - attrib=attrib_p2; - a++; - }else{ - return 0; - } - }else{ - attrib++; + if(!no_order_score) + score--; + } + + return TRUE; + +fail: + gr_stylespec_unalloc(spec); + + return FALSE; +} + + +bool gr_stylespec_load(GrStyleSpec *spec, const char *str) +{ + return gr_stylespec_load_(spec, str, FALSE); +} + + +void gr_stylespec_unalloc(GrStyleSpec *spec) +{ + uint i; + + for(i=0; in; i++) + stringstore_free(spec->attrs[i].attr); + + if(spec->attrs!=NULL){ + free(spec->attrs); + spec->attrs=NULL; + } + + spec->n=0; +} + + +void gr_stylespec_init(GrStyleSpec *spec) +{ + spec->attrs=NULL; + spec->n=0; +} + + +static bool gr_stylespec_find_(GrStyleSpec *spec, GrAttr a, int *idx_ge) +{ + bool found=FALSE; + uint i; + + for(i=0; in; i++){ + if(spec->attrs[i].attr>=a){ + found=(spec->attrs[i].attr==a); + break; } + } + + *idx_ge=i; + return found; +} + +bool gr_stylespec_add(GrStyleSpec *spec, GrAttr a, uint score) +{ + static const uint sz=sizeof(GrAttrScore); + GrAttrScore *idsn; + int idx_ge; + + if(a==GRATTR_NONE || score==0) + return TRUE; + + if(gr_stylespec_find_(spec, a, &idx_ge)){ + spec->attrs[idx_ge].score+=score; + return TRUE; + } + + idsn=(GrAttrScore*)realloc(spec->attrs, (spec->n+1)*sz); + + if(idsn==NULL) + return FALSE; + + stringstore_ref(a); + + memmove(idsn+idx_ge+1, idsn+idx_ge, (spec->n-idx_ge)*sz); + + idsn[idx_ge].attr=a; + idsn[idx_ge].score=score; + spec->attrs=idsn; + spec->n++; + + return TRUE; +} + + +bool gr_stylespec_set(GrStyleSpec *spec, GrAttr a) +{ + return gr_stylespec_add(spec, a, 1); +} + + +void gr_stylespec_unset(GrStyleSpec *spec, GrAttr a) +{ + static const uint sz=sizeof(GrAttrScore); + GrAttrScore *idsn; + int idx_ge; + + if(a==GRATTR_NONE) + return; + + if(!gr_stylespec_find_(spec, a, &idx_ge)) + return; + + stringstore_free(spec->attrs[idx_ge].attr); + + memmove(spec->attrs+idx_ge, spec->attrs+idx_ge+1, + (spec->n-idx_ge-1)*sz); + + spec->n--; + + idsn=(GrAttrScore*)realloc(spec->attrs, (spec->n)*sz); + + if(idsn!=NULL || spec->n==0) + spec->attrs=idsn; +} + - spec++; - mult=mult*3; +static bool gr_stylespec_do_init_from(GrStyleSpec *dst, const GrStyleSpec *src) +{ + uint i; + + if(src->n==0) + return TRUE; + + dst->attrs=ALLOC_N(GrAttrScore, src->n); + + if(dst->attrs==NULL) + return FALSE; + + for(i=0; in; i++){ + dst->attrs[i]=src->attrs[i]; + stringstore_ref(dst->attrs[i].attr); } + + dst->n=src->n; + + return TRUE; } -uint gr_stylespec_score(const char *spec, const char *attrib) +bool gr_stylespec_append(GrStyleSpec *dst, const GrStyleSpec *src) { - return gr_stylespec_score2(spec, attrib, NULL); + uint i; + bool ok=TRUE; + + if(dst->attrs==NULL){ + ok=gr_stylespec_do_init_from(dst, src); + }else{ + for(i=0; in; i++){ + if(!gr_stylespec_add(dst, src->attrs[i].attr, src->attrs[i].score)) + ok=FALSE; + } + } + + return ok; } +bool gr_stylespec_equals(const GrStyleSpec *s1, const GrStyleSpec *s2) +{ + uint i; + + if(s1->n!=s2->n) + return FALSE; + + for(i=0; in; i++){ + if(s1->attrs[i].attr!=s2->attrs[i].attr) + return FALSE; + } + + return TRUE; +} + + /*}}}*/ @@ -294,17 +521,16 @@ DYNFUN bool grbrush_get_extra(GrBrush *brush, const char *key, /*{{{ Dynfuns/Borders */ -void grbrush_draw_border(GrBrush *brush, const WRectangle *geom, - const char *attrib) +void grbrush_draw_border(GrBrush *brush, const WRectangle *geom) { - CALL_DYN(grbrush_draw_border, brush, (brush, geom, attrib)); + CALL_DYN(grbrush_draw_border, brush, (brush, geom)); } void grbrush_draw_borderline(GrBrush *brush, const WRectangle *geom, - const char *attrib, GrBorderLine line) + GrBorderLine line) { - CALL_DYN(grbrush_draw_borderline, brush, (brush, geom, attrib, line)); + CALL_DYN(grbrush_draw_borderline, brush, (brush, geom, line)); } @@ -315,11 +541,9 @@ void grbrush_draw_borderline(GrBrush *brush, const WRectangle *geom, void grbrush_draw_string(GrBrush *brush, int x, int y, - const char *str, int len, bool needfill, - const char *attrib) + const char *str, int len, bool needfill) { - CALL_DYN(grbrush_draw_string, brush, - (brush, x, y, str, len, needfill, attrib)); + CALL_DYN(grbrush_draw_string, brush, (brush, x, y, str, len, needfill)); } @@ -339,19 +563,16 @@ uint grbrush_get_text_width(GrBrush *brush, const char *text, uint len) void grbrush_draw_textbox(GrBrush *brush, const WRectangle *geom, - const char *text, const char *attr, - bool needfill) + const char *text, bool needfill) { - CALL_DYN(grbrush_draw_textbox, brush, - (brush, geom, text, attr, needfill)); + CALL_DYN(grbrush_draw_textbox, brush, (brush, geom, text, needfill)); } void grbrush_draw_textboxes(GrBrush *brush, const WRectangle *geom, int n, const GrTextElem *elem, - bool needfill, const char *common_attrib) + bool needfill) { - CALL_DYN(grbrush_draw_textboxes, brush, - (brush, geom, n, elem, needfill, common_attrib)); + CALL_DYN(grbrush_draw_textboxes, brush, (brush, geom, n, elem, needfill)); } @@ -374,10 +595,9 @@ void grbrush_enable_transparency(GrBrush *brush, GrTransparency tr) } -void grbrush_fill_area(GrBrush *brush, const WRectangle *geom, - const char *attr) +void grbrush_fill_area(GrBrush *brush, const WRectangle *geom) { - CALL_DYN(grbrush_fill_area, brush, (brush, geom, attr)); + CALL_DYN(grbrush_fill_area, brush, (brush, geom)); } @@ -387,6 +607,24 @@ void grbrush_clear_area(GrBrush *brush, const WRectangle *geom) } +void grbrush_init_attr(GrBrush *brush, const GrStyleSpec *spec) +{ + CALL_DYN(grbrush_init_attr, brush, (brush, spec)); +} + + +void grbrush_set_attr(GrBrush *brush, GrAttr attr) +{ + CALL_DYN(grbrush_set_attr, brush, (brush, attr)); +} + + +void grbrush_unset_attr(GrBrush *brush, GrAttr attr) +{ + CALL_DYN(grbrush_unset_attr, brush, (brush, attr)); +} + + /*}}}*/ diff --git a/ioncore/gr.h b/ioncore/gr.h index 911edc6..2d55298 100644 --- a/ioncore/gr.h +++ b/ioncore/gr.h @@ -1,7 +1,7 @@ /* * ion/ioncore/gr.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -12,6 +12,8 @@ #ifndef ION_IONCORE_GR_H #define ION_IONCORE_GR_H +#include + #include "common.h" #include "rectangle.h" @@ -42,10 +44,28 @@ typedef struct{ uint spacing; } GrBorderWidths; +typedef StringId GrAttr; + +#define GRATTR_NONE STRINGID_NONE + +#define GR_STYLESPEC_INIT {0, NULL} + +typedef struct{ + GrAttr attr; + uint score; +} GrAttrScore; + +typedef struct{ + uint n; + GrAttrScore *attrs; +} GrStyleSpec; + +#define GR_TEXTELEM_INIT {NULL, 0, GR_STYLESPEC_INIT} + typedef struct{ char *text; int iw; - char *attr; + GrStyleSpec attr; } GrTextElem; typedef enum{ @@ -66,6 +86,7 @@ typedef enum{ #define GRBRUSH_AMEND 0x0001 #define GRBRUSH_NEED_CLIP 0x0004 #define GRBRUSH_NO_CLEAR_OK 0x0008 /* implied by GRBRUSH_AMEND */ +#define GRBRUSH_KEEP_ATTR 0x0010 /* Engines etc. */ @@ -78,31 +99,32 @@ extern bool gr_select_engine(const char *engine); extern void gr_refresh(); extern void gr_read_config(); -/* Stylespecs are of the from attr1-attr2-etc. We require that each attr in - * 'spec' matches the one at same index in 'attrib' when '*' matches anything. - * The score increment for exact match is 2*3^index and 1*3^index for '*' - * match. If all elements of 'spec' match those of 'attrib' exactly, the - * accumulated score is returned. Otherwise the matching fails and zero is - * returned. For example: - * - * spec attrib score - * foo-*-baz foo-bar-baz 2+1*3+2*3^2 = 23 - * foo-bar foo-bar-baz 2+2*3 = 8 - * foo-baz foo-bar-baz 0 - * - * gr_stylespec_score2 continues matching from attrib_p2 (if not NULL) when - * it has reached end of attrib. - */ -extern uint gr_stylespec_score(const char *spec, const char *attrib); -extern uint gr_stylespec_score2(const char *spec, const char *attrib, - const char *attrib_p2); + /* Every star ('*') element of 'spec' increases score by one. + * Every other element of 'spec' found in 'attr' increases the score by the + * number set in attr times two. Any element of 'spec' (other than star), + * not found in 'attr', forces score to zero. + */ +extern uint gr_stylespec_score(const GrStyleSpec *spec, const GrStyleSpec *attr); +extern uint gr_stylespec_score2(const GrStyleSpec *spec, const GrStyleSpec *attr, + const GrStyleSpec *attr2); + +extern void gr_stylespec_init(GrStyleSpec *spec); +extern bool gr_stylespec_set(GrStyleSpec *spec, GrAttr a); +extern void gr_stylespec_unset(GrStyleSpec *spec, GrAttr a); +extern bool gr_stylespec_add(GrStyleSpec *spec, GrAttr a, uint score); +extern bool gr_stylespec_append(GrStyleSpec *dst, const GrStyleSpec *src); +extern void gr_stylespec_unalloc(GrStyleSpec *spec); +extern bool gr_stylespec_equals(const GrStyleSpec *s1, const GrStyleSpec *s2); +extern bool gr_stylespec_load(GrStyleSpec *spec, const char *str); +extern bool gr_stylespec_load_(GrStyleSpec *spec, const char *str, + bool no_order_score); /* GrBrush */ extern GrBrush *gr_get_brush(Window win, WRootWin *rootwin, const char *style); -extern GrBrush *grbrush_get_slave(GrBrush *brush, WRootWin *rootwin, +DYNFUN GrBrush *grbrush_get_slave(GrBrush *brush, WRootWin *rootwin, const char *style); extern void grbrush_release(GrBrush *brush); @@ -110,18 +132,23 @@ extern void grbrush_release(GrBrush *brush); extern bool grbrush_init(GrBrush *brush); extern void grbrush_deinit(GrBrush *brush); -extern void grbrush_begin(GrBrush *brush, const WRectangle *geom, +DYNFUN void grbrush_begin(GrBrush *brush, const WRectangle *geom, int flags); -extern void grbrush_end(GrBrush *brush); +DYNFUN void grbrush_end(GrBrush *brush); + +/* Attributes */ + +DYNFUN void grbrush_init_attr(GrBrush *brush, const GrStyleSpec *spec); +DYNFUN void grbrush_set_attr(GrBrush *brush, GrAttr attr); +DYNFUN void grbrush_unset_attr(GrBrush *brush, GrAttr attr); /* Border drawing */ DYNFUN void grbrush_get_border_widths(GrBrush *brush, GrBorderWidths *bdi); -DYNFUN void grbrush_draw_border(GrBrush *brush, const WRectangle *geom, - const char *attrib); +DYNFUN void grbrush_draw_border(GrBrush *brush, const WRectangle *geom); DYNFUN void grbrush_draw_borderline(GrBrush *brush, const WRectangle *geom, - const char *attrib, GrBorderLine line); + GrBorderLine line); /* String drawing */ @@ -130,18 +157,16 @@ DYNFUN void grbrush_get_font_extents(GrBrush *brush, GrFontExtents *fnti); DYNFUN uint grbrush_get_text_width(GrBrush *brush, const char *text, uint len); DYNFUN void grbrush_draw_string(GrBrush *brush, int x, int y, - const char *str, int len, bool needfill, - const char *attrib); + const char *str, int len, bool needfill); /* Textbox drawing */ DYNFUN void grbrush_draw_textbox(GrBrush *brush, const WRectangle *geom, - const char *text, const char *attr, - bool needfill); + const char *text, bool needfill); DYNFUN void grbrush_draw_textboxes(GrBrush *brush, const WRectangle *geom, int n, const GrTextElem *elem, - bool needfill, const char *common_attrib); + bool needfill); /* Misc */ @@ -155,8 +180,7 @@ DYNFUN void grbrush_set_window_shape(GrBrush *brush, bool rough, DYNFUN void grbrush_enable_transparency(GrBrush *brush, GrTransparency mode); -DYNFUN void grbrush_fill_area(GrBrush *brush, const WRectangle *geom, - const char *attr); +DYNFUN void grbrush_fill_area(GrBrush *brush, const WRectangle *geom); DYNFUN void grbrush_clear_area(GrBrush *brush, const WRectangle *geom); DYNFUN bool grbrush_get_extra(GrBrush *brush, const char *key, diff --git a/ioncore/group-cw.c b/ioncore/group-cw.c index dc5cc69..0084ee2 100644 --- a/ioncore/group-cw.c +++ b/ioncore/group-cw.c @@ -1,7 +1,7 @@ /* * ion/ioncore/group-cw.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -33,13 +33,6 @@ /*{{{ Add/remove managed */ -WRegion *create_transient_frame(WWindow *par, - const WFitParams *fp) -{ - return (WRegion*)create_frame(par, fp, FRAME_MODE_TRANSIENT); -} - - static WPHolder *groupcw_transient_pholder(WGroupCW *cwg, const WClientWin *cwin, const WManageParams *mp) @@ -69,7 +62,7 @@ static WPHolder *groupcw_transient_pholder(WGroupCW *cwg, fp.inner_geom_gravity_set=1; fp.inner_geom=mp->geom; fp.gravity=ForgetGravity; - fp.mkframe=create_transient_frame; + fp.mode=FRAME_MODE_TRANSIENT; ph=(WPHolder*)create_grouppholder(&cwg->grp, NULL, ¶m); @@ -181,10 +174,9 @@ const char *groupcw_displayname(WGroupCW *cwg) } -void groupcw_managed_notify(WGroupCW *cwg, WRegion *reg, const char *how) +void groupcw_managed_notify(WGroupCW *cwg, WRegion *reg, WRegionNotify how) { - if(group_bottom(&cwg->grp)==reg - && strcmp(how, "name")==0){ + if(group_bottom(&cwg->grp)==reg && how==ioncore_g.notifies.name){ /* Title has changed */ region_notify_change((WRegion*)cwg, how); } @@ -200,7 +192,6 @@ void groupcw_managed_notify(WGroupCW *cwg, WRegion *reg, const char *how) bool groupcw_init(WGroupCW *cwg, WWindow *parent, const WFitParams *fp) { cwg->transient_szplcy=DFLT_SZPLCY; - /*cwg->fs_pholder=NULL;*/ if(!group_init(&(cwg->grp), parent, fp)) return FALSE; diff --git a/ioncore/group-cw.h b/ioncore/group-cw.h index b389d46..b8616a7 100644 --- a/ioncore/group-cw.h +++ b/ioncore/group-cw.h @@ -1,7 +1,7 @@ /* * ion/ioncore/group-cw.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -39,7 +39,4 @@ extern WPHolder *groupcw_prepare_manage_transient(WGroupCW *cwg, extern WRegion *groupcw_load(WWindow *par, const WFitParams *fp, ExtlTab tab); -extern WRegion *create_transient_frame(WWindow *par, - const WFitParams *fp); - #endif /* ION_IONCORE_GROUPCW_H */ diff --git a/ioncore/group-ws.c b/ioncore/group-ws.c index b50402c..48ee838 100644 --- a/ioncore/group-ws.c +++ b/ioncore/group-ws.c @@ -1,7 +1,7 @@ /* * ion/ioncore/group-ws.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -29,28 +29,12 @@ #include "framedpholder.h" #include "float-placement.h" #include "resize.h" +#include "conf.h" /*{{{ Settings */ -static bool default_ws_params_set=FALSE; -static ExtlTab default_ws_params; - - -/*EXTL_DOC - * Set module basic settings. Currently only the \code{placement_method} - * parameter is supported. - * - * The method can be one of ''udlr'', ''lrud'' (default) and ''random''. - * The ''udlr'' method looks for free space starting from top the top left - * corner of the workspace moving first down keeping the x coordinate fixed. - * If it find no free space, it start looking similarly at next x coordinate - * unoccupied by other objects and so on. ''lrud' is the same but with the - * role of coordinates changed and both fall back to ''random'' placement - * if no free area was found. - */ - void ioncore_groupws_set(ExtlTab tab) { char *method=NULL; @@ -67,13 +51,6 @@ void ioncore_groupws_set(ExtlTab tab) warn(TR("Unknown placement method \"%s\"."), method); free(method); } - - if(extl_table_gets_t(tab, "default_ws_params", &t)){ - if(default_ws_params_set) - extl_unref_table(default_ws_params); - default_ws_params=t; - default_ws_params_set=TRUE; - } } @@ -85,9 +62,6 @@ void ioncore_groupws_get(ExtlTab t) : (ioncore_placement_method==PLACEMENT_LRUD ? "lrud" : "random"))); - - if(default_ws_params_set) - extl_table_sets_t(t, "default_ws_params", default_ws_params); } @@ -196,28 +170,6 @@ bool groupws_attach_framed_extl(WGroupWS *ws, WRegion *reg, ExtlTab t) /*{{{ groupws_prepare_manage */ -#define REG_OK(R) OBJ_IS(R, WMPlex) - - -static WMPlex *find_existing(WGroupWS *ws) -{ - WGroupIterTmp tmp; - WRegion *r=(ws->grp.current_managed!=NULL - ? ws->grp.current_managed->reg - : NULL); - - if(r!=NULL && REG_OK(r)) - return (WMPlex*)r; - - FOR_ALL_MANAGED_BY_GROUP(&ws->grp, r, tmp){ - if(REG_OK(r)) - return (WMPlex*)r; - } - - return NULL; -} - - static WPHolder *groupws_do_prepare_manage(WGroupWS *ws, const WClientWin *cwin, const WManageParams *param, @@ -228,13 +180,22 @@ static WPHolder *groupws_do_prepare_manage(WGroupWS *ws, WPHolder *ph; if(redir==MANAGE_REDIR_PREFER_YES){ - WMPlex *m=find_existing(ws); - if(m!=NULL){ - WPHolder *ph; - ph=region_prepare_manage((WRegion*)m, cwin, param, - MANAGE_REDIR_STRICT_YES); - if(ph!=NULL) - return ph; + WRegion *r=(ws->grp.current_managed!=NULL + ? ws->grp.current_managed->reg + : NULL); + WGroupIterTmp tmp; + WPHolder *ph=NULL; + + if(r!=NULL) + ph=region_prepare_manage(r, cwin, param, MANAGE_REDIR_PREFER_YES); + + if(ph==NULL){ + FOR_ALL_MANAGED_BY_GROUP(&ws->grp, r, tmp){ + ph=region_prepare_manage(r, cwin, param, + MANAGE_REDIR_PREFER_YES); + if(ph!=NULL) + break; + } } } @@ -267,7 +228,7 @@ WPHolder *groupws_prepare_manage(WGroupWS *ws, const WClientWin *cwin, WRegion *b=(ws->grp.bottom!=NULL ? ws->grp.bottom->reg : NULL); WPHolder *ph=NULL; bool act_b=(ws->grp.bottom==ws->grp.current_managed); - bool always_float, use_bottom; + bool use_bottom; int weak=0; if(param->maprq && ioncore_g.opmode!=IONCORE_OPMODE_INIT @@ -315,7 +276,7 @@ WPHolder *groupws_prepare_manage_transient(WGroupWS *ws, const WClientWin *cwin, fp.inner_geom_gravity_set=TRUE; fp.inner_geom=param->geom; fp.gravity=param->gravity; - fp.mkframe=create_transient_frame; + fp.mode=FRAME_MODE_TRANSIENT; ap.geom_weak_set=1; ap.geom_weak=0; @@ -379,7 +340,7 @@ void groupws_deinit(WGroupWS *ws) WRegion *groupws_load(WWindow *par, const WFitParams *fp, - ExtlTab tab) + ExtlTab tab) { WGroupWS *ws; @@ -394,14 +355,6 @@ WRegion *groupws_load(WWindow *par, const WFitParams *fp, } -WRegion *groupws_load_default(WWindow *par, const WFitParams *fp) -{ - return groupws_load(par, fp, (default_ws_params_set - ? default_ws_params - : extl_table_none())); -} - - static DynFunTab groupws_dynfuntab[]={ {(DynFun*)region_prepare_manage, (DynFun*)groupws_prepare_manage}, diff --git a/ioncore/group-ws.h b/ioncore/group-ws.h index cfc43a9..1fee223 100644 --- a/ioncore/group-ws.h +++ b/ioncore/group-ws.h @@ -1,7 +1,7 @@ /* * ion/ioncore/groupws.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -40,7 +40,6 @@ extern WGroupWS *create_groupws(WWindow *parent, const WFitParams *fp); extern bool groupws_init(WGroupWS *ws, WWindow *parent, const WFitParams *fp); extern void groupws_deinit(WGroupWS *ws); -extern WRegion *groupws_load_default(WWindow *par, const WFitParams *fp); extern WRegion *groupws_load(WWindow *par, const WFitParams *fp, ExtlTab tab); extern void ioncore_groupws_set(ExtlTab tab); diff --git a/ioncore/group.c b/ioncore/group.c index 591fcd7..538db14 100644 --- a/ioncore/group.c +++ b/ioncore/group.c @@ -1,7 +1,7 @@ /* * ion/ioncore/group.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -40,6 +40,7 @@ #include "grouppholder.h" #include "frame.h" #include "float-placement.h" +#include "return.h" static void group_place_stdisp(WGroup *ws, WWindow *parent, @@ -352,7 +353,7 @@ void group_managed_remove(WGroup *ws, WRegion *reg) } region_unset_manager(reg, (WRegion*)ws); - + if(!dest && !ds){ if(was_bottom && !was_stdisp && ws->managed_stdisp==NULL){ /* We should probably be managing any stdisp, that 'bottom' @@ -368,19 +369,30 @@ void group_managed_remove(WGroup *ws, WRegion *reg) } if(cur){ + /* This may still potentially cause problems when focus + * change is pending. Perhaps we should use region_await_focus, + * if it is pointing to our child (and region_may_control_focus + * fail if it is pointing somewhere else). + */ WStacking *stf=find_to_focus(ws, next_st, TRUE); - if(stf!=NULL) - region_warp(stf->reg); + if(stf!=NULL && mcf){ + region_maybewarp_now(stf->reg, FALSE); + }else{ + ws->current_managed=stf; + } } }else if(dest && !ds){ - mainloop_defer_destroy((Obj*)ws); + region_dispose((WRegion*)ws, mcf); } } -static void group_managed_activated(WGroup *ws, WRegion *reg) +static void group_managed_notify(WGroup *ws, WRegion *reg, WRegionNotify how) { - ws->current_managed=group_find_stacking(ws, reg); + if(how==ioncore_g.notifies.activated || + how==ioncore_g.notifies.pseudoactivated){ + ws->current_managed=group_find_stacking(ws, reg); + } } @@ -584,17 +596,20 @@ bool group_do_attach_final(WGroup *ws, * position request is never honoured. */ if((g.x+g.w<=REGION_GEOM(ws).x) || - (g.y+g.h<=REGION_GEOM(ws).y) || - (g.x>=REGION_GEOM(ws).x+REGION_GEOM(ws).w) || + (g.x>=REGION_GEOM(ws).x+REGION_GEOM(ws).w)){ + weak|=REGION_RQGEOM_WEAK_X; + } + + if((g.y+g.h<=REGION_GEOM(ws).y) || (g.y>=REGION_GEOM(ws).y+REGION_GEOM(ws).h)){ - weak|=REGION_RQGEOM_WEAK_X|REGION_RQGEOM_WEAK_X; + weak|=REGION_RQGEOM_WEAK_Y; } - if((weak&(REGION_RQGEOM_WEAK_X|REGION_RQGEOM_WEAK_Y)) - ==(REGION_RQGEOM_WEAK_X|REGION_RQGEOM_WEAK_Y) && + if(weak&(REGION_RQGEOM_WEAK_X|REGION_RQGEOM_WEAK_Y) && (szplcy==SIZEPOLICY_UNCONSTRAINED || szplcy==SIZEPOLICY_FREE || szplcy==SIZEPOLICY_FREE_GLUE /* without flags */)){ + /* TODO: use 'weak'? */ group_calc_placement(ws, &g); } @@ -665,7 +680,7 @@ WRegion *group_do_attach(WGroup *ws, WFitParams fp; WWindow *par; WRegion *reg; - + if(ws->bottom!=NULL && param->bottom){ warn(TR("'bottom' already set.")); return NULL; @@ -681,7 +696,7 @@ WRegion *group_do_attach(WGroup *ws, fp.g=REGION_GEOM(ws); fp.mode=REGION_FIT_BOUNDS|REGION_FIT_WHATEVER; } - + return region_attach_helper((WRegion*) ws, par, &fp, (WRegionDoAttachFn*)group_do_attach_final, /*(const WRegionAttachParams*)*/param, data); @@ -985,7 +1000,7 @@ static WStacking *do_get_next(WGroup *ws, WStacking *sti, } if(sti_ok && focusable(ws, sti, min_level)) - return st; + return sti; return NULL; } @@ -1082,8 +1097,6 @@ void group_restack(WGroup *ws, Window other, int mode) WStacking *group_find_stacking(WGroup *ws, WRegion *r) { - WStacking *st; - if(r==NULL || REGION_MANAGER(r)!=(WRegion*)ws) return NULL; @@ -1146,16 +1159,19 @@ WRegion *group_bottom(WGroup *ws) /*EXTL_DOC - * Returns a list of regions managed by the workspace (frames, mostly). + * Iterate over managed regions of \var{ws} until \var{iterfn} returns + * \code{false}. + * The function itself returns \code{true} if it reaches the end of list + * without this happening. */ EXTL_SAFE EXTL_EXPORT_MEMBER -ExtlTab group_managed_list(WGroup *ws) +bool group_managed_i(WGroup *ws, ExtlFn iterfn) { WGroupIterTmp tmp; group_iter_init(&tmp, ws); - return extl_obj_iterable_to_table((ObjIterator*)group_iter, &tmp); + return extl_iter_objlist_(iterfn, (ObjIterator*)group_iter, &tmp); } @@ -1182,6 +1198,17 @@ Window group_xwindow(const WGroup *ws) } +WRegion *region_group_if_bottom(WRegion *reg) +{ + WGroup *grp=REGION_MANAGER_CHK(reg, WGroup); + + if(grp!=NULL && group_bottom(grp)==reg) + return (WRegion*)grp; + else + return reg; +} + + /*}}}*/ @@ -1295,8 +1322,8 @@ static DynFunTab group_dynfuntab[]={ {region_do_set_focus, group_do_set_focus}, - {region_managed_activated, - group_managed_activated}, + {region_managed_notify, + group_managed_notify}, {region_managed_remove, group_managed_remove}, diff --git a/ioncore/group.h b/ioncore/group.h index 0de372a..cfc1b60 100644 --- a/ioncore/group.h +++ b/ioncore/group.h @@ -1,7 +1,7 @@ /* * ion/ioncore/group.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -36,7 +36,6 @@ DECLSTRUCT(WGroupAttachParams){ uint switchto_set:1; uint switchto:1; - uint modal:1; uint bottom:1; int geom_weak; @@ -48,7 +47,7 @@ DECLSTRUCT(WGroupAttachParams){ }; #define GROUPATTACHPARAMS_INIT \ - {0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}, 0, 0, NULL} + {0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}, 0, 0, NULL} DECLCLASS(WGroup){ @@ -105,6 +104,8 @@ extern bool group_managed_rqorder(WGroup *grp, WRegion *sub, extern WStacking *group_find_stacking(WGroup *ws, WRegion *r); extern WStacking *group_find_to_focus(WGroup *ws, WStacking *to_try); +extern WRegion *region_group_if_bottom(WRegion *reg); + typedef WStackingFilter WGroupIterFilter; typedef WStackingIterTmp WGroupIterTmp; diff --git a/ioncore/groupedpholder.c b/ioncore/groupedpholder.c index ac3b692..4112372 100644 --- a/ioncore/groupedpholder.c +++ b/ioncore/groupedpholder.c @@ -1,7 +1,7 @@ /* * ion/ioncore/groupedpholder.c * - * Copyright (c) Tuomo Valkonen 2005-2006. + * Copyright (c) Tuomo Valkonen 2005-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -127,7 +127,7 @@ WRegion *groupedpholder_do_attach(WGroupedPHolder *ph, int flags, data2.u.n.fn=grouped_handler; data2.u.n.param=data; - return pholder_attach_(ph->cont, flags, &data2); + return pholder_do_attach(ph->cont, flags, &data2); } @@ -139,19 +139,32 @@ WRegion *groupedpholder_do_attach(WGroupedPHolder *ph, int flags, bool groupedpholder_do_goto(WGroupedPHolder *ph) { - if(ph->cont!=NULL) - return pholder_goto(ph->cont); - - return FALSE; + return (ph->cont!=NULL + ? pholder_goto(ph->cont) + : FALSE); } WRegion *groupedpholder_do_target(WGroupedPHolder *ph) { - if(ph->cont!=NULL) - return pholder_target(ph->cont); + return (ph->cont!=NULL + ? pholder_target(ph->cont) + : NULL); +} + + +WPHolder *groupedpholder_do_root(WGroupedPHolder *ph) +{ + WPHolder *root; + + if(ph->cont==NULL) + return NULL; + + root=pholder_root(ph->cont); - return NULL; + return (root!=ph->cont + ? root + : &ph->ph); } @@ -170,6 +183,9 @@ static DynFunTab groupedpholder_dynfuntab[]={ {(DynFun*)pholder_do_target, (DynFun*)groupedpholder_do_target}, + + {(DynFun*)pholder_do_root, + (DynFun*)groupedpholder_do_root}, END_DYNFUNTAB }; diff --git a/ioncore/groupedpholder.h b/ioncore/groupedpholder.h index 4feb699..3fb9edd 100644 --- a/ioncore/groupedpholder.h +++ b/ioncore/groupedpholder.h @@ -1,7 +1,7 @@ /* * ion/ioncore/groupedpholder.h * - * Copyright (c) Tuomo Valkonen 2005-2006. + * Copyright (c) Tuomo Valkonen 2005-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -33,6 +33,8 @@ extern bool groupedpholder_do_goto(WGroupedPHolder *ph); extern WRegion *groupedpholder_do_target(WGroupedPHolder *ph); +extern WPHolder *groupedpholder_do_root(WGroupedPHolder *ph); + extern WRegion *groupedpholder_do_attach(WGroupedPHolder *ph, int flags, WRegionAttachData *data); diff --git a/ioncore/grouppholder.c b/ioncore/grouppholder.c index d92c5b4..aa6f5cf 100644 --- a/ioncore/grouppholder.c +++ b/ioncore/grouppholder.c @@ -1,7 +1,7 @@ /* * ion/ioncore/grouppholder.c * - * Copyright (c) Tuomo Valkonen 2005-2006. + * Copyright (c) Tuomo Valkonen 2005-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -73,9 +73,7 @@ bool grouppholder_init(WGroupPHolder *ph, WGroup *ws, if(st->above!=NULL && st->above->reg!=NULL) ph->param.stack_above=st->above->reg; - ph->param.modal=FALSE; ph->param.bottom=(st==ws->bottom); - /*ph->passive=FALSE;*/ }else{ ph->param=*param; } diff --git a/ioncore/grouppholder.h b/ioncore/grouppholder.h index 4b0208a..cb0ab19 100644 --- a/ioncore/grouppholder.h +++ b/ioncore/grouppholder.h @@ -1,7 +1,7 @@ /* * ion/ioncore/grouppholder.h * - * Copyright (c) Tuomo Valkonen 2005-2006. + * Copyright (c) Tuomo Valkonen 2005-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/infowin.c b/ioncore/infowin.c index 95622b4..463b16e 100644 --- a/ioncore/infowin.c +++ b/ioncore/infowin.c @@ -1,7 +1,7 @@ /* * ion/ioncore/infowin.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -45,7 +45,8 @@ bool infowin_init(WInfoWin *p, WWindow *parent, const WFitParams *fp, goto fail2; p->brush=NULL; - p->attr=NULL; + + gr_stylespec_init(&p->attr); infowin_updategr(p); @@ -62,7 +63,8 @@ bool infowin_init(WInfoWin *p, WWindow *parent, const WFitParams *fp, return TRUE; -fail3: +fail3: + gr_stylespec_unalloc(&p->attr); free(p->style); fail2: free(p->buffer); @@ -86,11 +88,6 @@ void infowin_deinit(WInfoWin *p) p->buffer=NULL; } - if(p->attr!=NULL){ - free(p->attr); - p->attr=NULL; - } - if(p->style!=NULL){ free(p->style); p->style=NULL; @@ -101,6 +98,8 @@ void infowin_deinit(WInfoWin *p) p->brush=NULL; } + gr_stylespec_unalloc(&p->attr); + window_deinit(&(p->wwin)); } @@ -124,7 +123,8 @@ void infowin_draw(WInfoWin *p, bool complete) g.h=REGION_GEOM(p).h; grbrush_begin(p->brush, &g, GRBRUSH_NO_CLEAR_OK); - grbrush_draw_textbox(p->brush, &g, p->buffer, p->attr, TRUE); + grbrush_init_attr(p->brush, &p->attr); + grbrush_draw_textbox(p->brush, &g, p->buffer, TRUE); grbrush_end(p->brush); } @@ -157,25 +157,9 @@ void infowin_updategr(WInfoWin *p) /*{{{ Content-setting */ -bool infowin_set_attr2(WInfoWin *p, const char *attr1, const char *attr2) +GrStyleSpec *infowin_stylespec(WInfoWin *p) { - char *p2=NULL; - - if(attr1!=NULL){ - if(attr2==NULL) - p2=scopy(attr1); - else - libtu_asprintf(&p2, "%s-%s", attr1, attr2); - if(p2==NULL) - return FALSE; - } - - if(p->attr) - free(p->attr); - - p->attr=p2; - - return TRUE; + return &p->attr; } diff --git a/ioncore/infowin.h b/ioncore/infowin.h index c57dd01..e51396b 100644 --- a/ioncore/infowin.h +++ b/ioncore/infowin.h @@ -1,7 +1,7 @@ /* * ion/ioncore/infowin.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -23,8 +23,8 @@ DECLCLASS(WInfoWin){ WWindow wwin; GrBrush *brush; char *buffer; - char *attr; char *style; + GrStyleSpec attr; }; #define INFOWIN_BRUSH(INFOWIN) ((INFOWIN)->brush) @@ -38,7 +38,7 @@ extern WInfoWin *create_infowin(WWindow *parent, const WFitParams *fp, extern void infowin_deinit(WInfoWin *p); extern void infowin_set_text(WInfoWin *p, const char *s); -extern bool infowin_set_attr2(WInfoWin *p, const char *a1, const char *a2); +extern GrStyleSpec *infowin_stylespec(WInfoWin *p); extern WRegion *infowin_load(WWindow *par, const WFitParams *fp, ExtlTab tab); diff --git a/ioncore/ioncore.c b/ioncore/ioncore.c index 5c88803..62f616b 100644 --- a/ioncore/ioncore.c +++ b/ioncore/ioncore.c @@ -1,7 +1,7 @@ /* * ion/ioncore/ioncore.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -69,7 +69,7 @@ WGlobal ioncore_g; static const char *progname="ion"; static const char ioncore_copy[]= - "Ion " ION_VERSION ", copyright (c) Tuomo Valkonen 1999-2006."; + "Ion " ION_VERSION ", copyright (c) Tuomo Valkonen 1999-2007."; static const char ioncore_license[]=DUMMY_TR( "This program is free software; you can redistribute it and/or\n" @@ -267,13 +267,11 @@ static bool init_hooks() INIT_HOOK_(ioncore_deinit_hook); INIT_HOOK_(screen_managed_changed_hook); INIT_HOOK_(frame_managed_changed_hook); - INIT_HOOK_(region_activated_hook); - INIT_HOOK_(region_inactivated_hook); INIT_HOOK_(clientwin_mapped_hook); INIT_HOOK_(clientwin_unmapped_hook); INIT_HOOK_(clientwin_property_change_hook); - INIT_HOOK_(region_notify_hook); + INIT_HOOK(region_notify_hook, ioncore_frame_quasiactivation_notify); INIT_HOOK(clientwin_do_manage_alt, clientwin_do_manage_default); INIT_HOOK(ioncore_handle_event_alt, ioncore_handle_event); INIT_HOOK(region_do_warp_alt, region_do_warp_default); @@ -308,7 +306,11 @@ static bool register_classes() } -static void init_global() +#define INITSTR(NM) \ + ioncore_g.notifies.NM=stringstore_alloc(#NM); \ + if(ioncore_g.notifies.NM==STRINGID_NONE) return FALSE; + +static bool init_global() { /* argc, argv must be set be the program */ ioncore_g.dpy=NULL; @@ -338,13 +340,30 @@ static void init_global() ioncore_g.frame_default_index=LLIST_INDEX_AFTER_CURRENT_ACT; ioncore_g.framed_transients=TRUE; + + INITSTR(activated); + INITSTR(inactivated); + INITSTR(activity); + INITSTR(sub_activity); + INITSTR(name); + INITSTR(unset_manager); + INITSTR(set_manager); + INITSTR(unset_return); + INITSTR(set_return); + INITSTR(pseudoactivated); + INITSTR(pseudoinactivated); + INITSTR(tag); + INITSTR(deinit); + + return TRUE; } bool ioncore_init(const char *prog, int argc, char *argv[], const char *localedir) { - init_global(); + if(!init_global()) + return FALSE; progname=prog; ioncore_g.argc=argc; @@ -483,7 +502,7 @@ static bool ioncore_init_x(const char *display, int stflags) ioncore_init_session(XDisplayName(display)); for(i=drw; i1) diff --git a/ioncore/ioncore.h b/ioncore/ioncore.h index 658e966..ace4908 100644 --- a/ioncore/ioncore.h +++ b/ioncore/ioncore.h @@ -1,7 +1,7 @@ /* * ion/ioncore/focus.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -16,7 +16,6 @@ #include "common.h" #define IONCORE_STARTUP_ONEROOT 0x0001 -#define IONCORE_STARTUP_NOXINERAMA 0x0002 extern bool ioncore_init(const char *prog, int argc, char *argv[], const char *localedir); diff --git a/ioncore/ioncore_bindings.lua b/ioncore/ioncore_bindings.lua index bf5c9fe..ec03ddd 100644 --- a/ioncore/ioncore_bindings.lua +++ b/ioncore/ioncore_bindings.lua @@ -1,7 +1,7 @@ -- -- ion/share/ioncore-bindings.lua -- --- Copyright (c) Tuomo Valkonen 2004-2006. +-- Copyright (c) Tuomo Valkonen 2004-2007. -- -- Ion is free software; you can redistribute it and/or modify it under -- the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/ioncore_efbb.lua b/ioncore/ioncore_efbb.lua index 156a95d..af1134c 100644 --- a/ioncore/ioncore_efbb.lua +++ b/ioncore/ioncore_efbb.lua @@ -1,7 +1,7 @@ -- -- ion/share/ioncore_efbb.lua -- Minimal emergency fallback bindings. -- --- Copyright (c) Tuomo Valkonen 2004-2006. +-- Copyright (c) Tuomo Valkonen 2004-2007. -- -- Ion is free software; you can redistribute it and/or modify it under -- the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/ioncore_ext.lua b/ioncore/ioncore_ext.lua index cc56732..2255bdd 100644 --- a/ioncore/ioncore_ext.lua +++ b/ioncore/ioncore_ext.lua @@ -1,7 +1,7 @@ -- -- ion/share/ioncore_ext.lua -- Ioncore Lua library -- --- Copyright (c) Tuomo Valkonen 2004-2006. +-- Copyright (c) Tuomo Valkonen 2004-2007. -- -- Ion is free software; you can redistribute it and/or modify it under -- the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/ioncore_luaext.lua b/ioncore/ioncore_luaext.lua index cb52b97..b361593 100644 --- a/ioncore/ioncore_luaext.lua +++ b/ioncore/ioncore_luaext.lua @@ -1,7 +1,7 @@ -- -- ion/share/ioncore_luaext.lua -- --- Copyright (c) Tuomo Valkonen 2004-2006. +-- Copyright (c) Tuomo Valkonen 2004-2007. -- -- Ion is free software; you can redistribute it and/or modify it under -- the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/ioncore_menudb.lua b/ioncore/ioncore_menudb.lua index 6032b94..98d86a2 100644 --- a/ioncore/ioncore_menudb.lua +++ b/ioncore/ioncore_menudb.lua @@ -1,7 +1,7 @@ -- -- ion/ioncore/ioncore_menudb.lua -- Routines for defining menus. -- --- Copyright (c) Tuomo Valkonen 2004-2006. +-- Copyright (c) Tuomo Valkonen 2004-2007. -- -- Ion is free software; you can redistribute it and/or modify it under -- the terms of the GNU Lesser General Public License as published by @@ -28,7 +28,9 @@ function ioncore.defmenu(name, tab) ioncore.warn(TR("Unable to append to non-table menu")) return else - table.append(menus[name], tab) + for k, v in ipairs(tab) do + table.insert(menus[name], v) + end end else menus[name]=tab @@ -117,23 +119,73 @@ end -- Workspace and window lists {{{ -local function makelist(list) - local function mkentry(tgt) - return menuentry(tgt:name(), function() tgt:goto() end) +local function addto(list) + return function(tgt, attr) + local e=menuentry(tgt:name(), function() tgt:goto() end) + e.attr=attr; + table.insert(list, e) + return true end - local entries=table.map(mkentry, list) +end + +local function sort(entries) table.sort(entries, function(a, b) return a.name < b.name end) return entries end function menus.windowlist() - return makelist(ioncore.clientwin_list()) + local entries={} + ioncore.clientwin_i(addto(entries)) + return sort(entries) end function menus.workspacelist() - return makelist(ioncore.region_list("WGenWS")) + local entries={} + local iter_=addto(entries) + + local function iter(obj) + return (not obj_is(obj, "WGroupWS") + or iter_(obj)) + end + + ioncore.region_i(iter) + + return sort(entries) +end + +local function focuslist(do_act) + local entries={} + local seen={} + local iter_=addto(entries) + + local function iter(obj, attr) + if obj_is(obj, "WClientWin") then + iter_(obj, attr) + seen[obj]=true + end + return true + end + + local function iter_act(obj) + return iter(obj, "activity") + end + + local function iter_foc(obj) + return (seen[obj] or iter(obj)) + end + + if do_act then + ioncore.activity_i(iter_act) + end + + ioncore.focushistory_i(iter_foc) + + return entries end +menus.focuslist=function() return focuslist(true) end +menus.focuslist_=function() return focuslist(false) end + -- }}} diff --git a/ioncore/ioncore_misc.lua b/ioncore/ioncore_misc.lua index fd72b4d..3b24b66 100644 --- a/ioncore/ioncore_misc.lua +++ b/ioncore/ioncore_misc.lua @@ -1,7 +1,7 @@ -- -- ion/share/ioncore_misc.lua -- --- Copyright (c) Tuomo Valkonen 2004-2006. +-- Copyright (c) Tuomo Valkonen 2004-2007. -- -- Ion is free software; you can redistribute it and/or modify it under -- the terms of the GNU Lesser General Public License as published by @@ -9,18 +9,54 @@ -- (at your option) any later version. -- +local group_tmpl = { type="WGroupWS" } -local group_tmpl={type="WGroupWS", switchto=true} +local default_tmpl = { switchto=true } + +local empty = { type="WGroupWS", managed={} } + +local layouts={ + empty = empty, + default = empty, +} + +--DOC +-- Define a new workspace layout with name \var{name}, and +-- attach/creation parameters given in \var{tab}. The layout +-- "empty" may not be defined. +function ioncore.deflayout(name, tab) + assert(layout ~= "empty") + + if name=="default" and not tab then + layouts[name] = empty + else + layouts[name] = table.join(tab, group_tmpl) + end +end + +--DOC +-- Get named layout (or all of the latter parameter is set, +-- but this is for internal use only). +function ioncore.getlayout(name, all) + if all then + return layouts + else + return layouts[name] + end +end + +ioncore.set{_get_layout=ioncore.getlayout} --DOC -- Create new workspace on screen \var{scr}. The table \var{tmpl} --- may be used to override parts of \code{default_ws_params}, --- and \var{no_default} may be set to \code{true} to complete ignore it. -function ioncore.create_ws(scr, tmpl, no_default) - local dflt=(not no_default and ioncore.get().default_ws_params) or {} - local t=table.join(table.join(tmpl or {}, dflt), group_tmpl) +-- may be used to override parts of the layout named with \code{layout}. +-- If no \var{layout} is given, "default" is used. +function ioncore.create_ws(scr, tmpl, layout) + local lo=ioncore.getlayout(layout or "default") + + assert(lo, TR("Unknown layout")) - return scr:attach_new(t) + return scr:attach_new(table.join(tmpl or default_tmpl, lo)) end diff --git a/ioncore/ioncore_wd.lua b/ioncore/ioncore_wd.lua index 84107b8..a908d3e 100644 --- a/ioncore/ioncore_wd.lua +++ b/ioncore/ioncore_wd.lua @@ -1,7 +1,7 @@ -- -- ion/share/ioncore_wd.lua -- --- Copyright (c) Tuomo Valkonen 2004-2006. +-- Copyright (c) Tuomo Valkonen 2004-2007. -- -- Ion is free software; you can redistribute it and/or modify it under -- the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/ioncore_winprops.lua b/ioncore/ioncore_winprops.lua index 333ff69..c241d63 100644 --- a/ioncore/ioncore_winprops.lua +++ b/ioncore/ioncore_winprops.lua @@ -1,7 +1,7 @@ -- -- ion/share/ioncore_winprops.lua -- --- Copyright (c) Tuomo Valkonen 2004-2006. +-- Copyright (c) Tuomo Valkonen 2004-2007. -- -- Ion is free software; you can redistribute it and/or modify it under -- the terms of the GNU Lesser General Public License as published by @@ -68,7 +68,7 @@ function ioncore.getwinprop(cwin) end end -ioncore.set_get_winprop_fn(ioncore.getwinprop) +ioncore.set{_get_winprop=ioncore.getwinprop} local function ensure_winproptab(class, role, instance) if not winprops[class] then @@ -91,14 +91,16 @@ end --DOC -- The basic name-based winprop matching criteria. function ioncore.match_winprop_name(prop, cwin) - local nm=cwin:name() if not prop.name then return true - elseif nm then - local st, en=string.find(nm, prop.name) - return (st and en) else - return false + local nm=cwin:name() + if nm then + local st, en=string.find(nm, prop.name) + return (st and en) + else + return false + end end end diff --git a/ioncore/kbresize.c b/ioncore/kbresize.c index b427228..012a931 100644 --- a/ioncore/kbresize.c +++ b/ioncore/kbresize.c @@ -1,7 +1,7 @@ /* * ion/ioncore/kbresize.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/kbresize.h b/ioncore/kbresize.h index 3af0781..a3841c0 100644 --- a/ioncore/kbresize.h +++ b/ioncore/kbresize.h @@ -1,7 +1,7 @@ /* * ion/ioncore/kbresize.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/key.c b/ioncore/key.c index 00848a4..57ada80 100644 --- a/ioncore/key.c +++ b/ioncore/key.c @@ -1,7 +1,7 @@ /* * ion/ioncore/key.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -172,11 +172,20 @@ static bool add_sub(WRegion *reg, uint key, uint state) static XKeyEvent *current_key_event=NULL; +static uint current_kcb, current_state; +static bool current_submap; - -XKeyEvent *ioncore_current_key_event() +/* Note: state set to AnyModifier for submaps */ +bool ioncore_current_key(uint *kcb, uint *state, bool *sub) { - return current_key_event; + if(current_kcb==0) + return FALSE; + + *kcb=current_kcb; + *state=current_state; + *sub=current_submap; + + return TRUE; } @@ -227,15 +236,16 @@ static bool do_key(WRegion *reg, XKeyEvent *ev) if(grabbed) XUngrabKeyboard(ioncore_g.dpy, CurrentTime); - if(!subs) - current_key_event=ev; - + current_kcb=ev->keycode; + current_state=ev->state; + current_submap=subs; + /* TODO: having to pass both mgd and subreg for some handlers * to work is ugly and complex. */ extl_call(binding->func, "ooo", NULL, binding_owner, mgd, subreg); - current_key_event=NULL; + current_kcb=0; if(ev->state!=0 && !subs && binding->wait) waitrelease(oreg); diff --git a/ioncore/key.h b/ioncore/key.h index e5ba29c..35d8d55 100644 --- a/ioncore/key.h +++ b/ioncore/key.h @@ -1,7 +1,7 @@ /* * ion/ioncore/key.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -19,6 +19,6 @@ extern void ioncore_do_handle_keypress(XKeyEvent *ev); extern void clientwin_quote_next(WClientWin *cwin); -extern XKeyEvent *ioncore_current_key_event(); +extern bool ioncore_current_key(uint *kcb, uint *state, bool *sub); #endif /* ION_IONCORE_KEY_H */ diff --git a/ioncore/llist.c b/ioncore/llist.c index 3baca81..657a9e3 100644 --- a/ioncore/llist.c +++ b/ioncore/llist.c @@ -1,7 +1,7 @@ /* * ion/ioncore/llist.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/llist.h b/ioncore/llist.h index 83d148d..32ac441 100644 --- a/ioncore/llist.h +++ b/ioncore/llist.h @@ -1,7 +1,7 @@ /* * ion/ioncore/llist.h * - * Copyright (c) Tuomo Valkonen 2005-2006. + * Copyright (c) Tuomo Valkonen 2005-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/manage.c b/ioncore/manage.c index f1d78a0..fda8d7b 100644 --- a/ioncore/manage.c +++ b/ioncore/manage.c @@ -1,7 +1,7 @@ /* * ion/ioncore/manage.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -20,6 +20,9 @@ #include "pointer.h" #include "netwm.h" #include "extlconv.h" +#include "return.h" +#include "conf.h" +#include "group-ws.h" /*{{{ Add */ @@ -34,16 +37,22 @@ WScreen *clientwin_find_suitable_screen(WClientWin *cwin, FOR_ALL_SCREENS(scr){ if(!region_same_rootwin((WRegion*)scr, (WRegion*)cwin)) continue; - if(REGION_IS_ACTIVE(scr)){ - found=scr; - if(!respectpos) - break; - } - - if(rectangle_contains(®ION_GEOM(scr), param->geom.x, param->geom.y)){ - found=scr; - if(respectpos) - break; + + if(!OBJ_IS(scr, WRootWin)){ + /* The root window itself is only a fallback */ + + if(REGION_IS_ACTIVE(scr)){ + found=scr; + if(!respectpos) + break; + } + + if(rectangle_contains(®ION_GEOM(scr), + param->geom.x, param->geom.y)){ + found=scr; + if(respectpos) + break; + } } if(found==NULL) @@ -54,6 +63,78 @@ WScreen *clientwin_find_suitable_screen(WClientWin *cwin, } +/*extern WRegion *ioncore_newly_created;*/ + + +static WPHolder *try_target(WClientWin *cwin, const WManageParams *param, + const char *target) +{ + WRegion *r=ioncore_lookup_region(target, NULL); + + if(r==NULL) + return NULL; + + return region_prepare_manage(r, cwin, param, MANAGE_REDIR_PREFER_NO); +} + + +static bool handle_target_winprops(WClientWin *cwin, const WManageParams *param, + WScreen *scr, WPHolder **ph_ret) +{ + char *layout=NULL, *target=NULL; + WPHolder *ph=NULL; + bool mgd=FALSE; + + if(extl_table_gets_s(cwin->proptab, "target", &target)) + ph=try_target(cwin, param, target); + + if(ph==NULL && extl_table_gets_s(cwin->proptab, "new_group", &layout)){ + ExtlTab lo=ioncore_get_layout(layout); + + free(layout); + + if(lo!=extl_table_none()){ + WMPlexAttachParams par=MPLEXATTACHPARAMS_INIT; + int mask=MPLEX_ATTACH_SWITCHTO; + WRegion *reg; + + if(param->switchto) + par.flags|=MPLEX_ATTACH_SWITCHTO; + + /*ioncore_newly_created=(WRegion*)cwin;*/ + + reg=mplex_attach_new_(&scr->mplex, &par, mask, lo); + + extl_unref_table(lo); + + /*ioncore_newly_created=NULL;*/ + + mgd=(region_manager((WRegion*)cwin)!=NULL); + + if(reg!=NULL && !mgd){ + if(target!=NULL) + ph=try_target(cwin, param, target); + + if(ph==NULL){ + ph=region_prepare_manage(reg, cwin, param, + MANAGE_REDIR_PREFER_YES); + + if(ph==NULL) + destroy_obj((Obj*)reg); + } + } + } + } + + if(target!=NULL) + free(target); + + *ph_ret=ph; + + return mgd; +} + + bool clientwin_do_manage_default(WClientWin *cwin, const WManageParams *param) { @@ -64,13 +145,6 @@ bool clientwin_do_manage_default(WClientWin *cwin, int swf; bool ok, tmp; - /* Check if param->tfor or any of its managers want to manage cwin. */ - if(param->tfor!=NULL){ - assert(param->tfor!=cwin); - ph=region_prepare_manage_transient((WRegion*)param->tfor, cwin, - param, 0); - } - /* Find a suitable screen */ scr=clientwin_find_suitable_screen(cwin, param); if(scr==NULL){ @@ -78,24 +152,36 @@ bool clientwin_do_manage_default(WClientWin *cwin, return FALSE; } + if(handle_target_winprops(cwin, param, scr, &ph)) + return TRUE; + + /* Check if param->tfor or any of its managers want to manage cwin. */ + if(ph==NULL && param->tfor!=NULL){ + assert(param->tfor!=cwin); + ph=region_prepare_manage_transient((WRegion*)param->tfor, cwin, + param, 0); + } + if(ph==NULL){ /* Find a placeholder for non-fullscreen state */ ph=region_prepare_manage((WRegion*)scr, cwin, param, MANAGE_REDIR_PREFER_YES); - } - - /* Check fullscreen mode */ - if(extl_table_gets_b(cwin->proptab, "fullscreen", &tmp)) - fs=tmp; - if(fs<0) - fs=netwm_check_initial_fullscreen(cwin, param->switchto); + /* Check fullscreen mode. (This is intentionally not done + * for transients and windows with target winprops.) + */ + if(extl_table_gets_b(cwin->proptab, "fullscreen", &tmp)) + fs=tmp; + + if(fs<0) + fs=netwm_check_initial_fullscreen(cwin, param->switchto); - if(fs<0){ - fs=clientwin_check_fullscreen_request(cwin, - param->geom.w, - param->geom.h, - param->switchto); + if(fs<0){ + fs=clientwin_check_fullscreen_request(cwin, + param->geom.w, + param->geom.h, + param->switchto); + } } if(fs>0){ @@ -105,8 +191,10 @@ bool clientwin_do_manage_default(WClientWin *cwin, destroy_obj((Obj*)ph); return TRUE; } - assert(cwin->fs_pholder==NULL); - cwin->fs_pholder=ph; + + if(!region_do_set_return((WRegion*)cwin, ph)) + destroy_obj((Obj*)ph); + return TRUE; } diff --git a/ioncore/manage.h b/ioncore/manage.h index 5354bea..5b81f3d 100644 --- a/ioncore/manage.h +++ b/ioncore/manage.h @@ -1,7 +1,7 @@ /* * ion/ioncore/manage.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/modules.c b/ioncore/modules.c index f7f6242..34d64c8 100644 --- a/ioncore/modules.c +++ b/ioncore/modules.c @@ -1,7 +1,7 @@ /* * ion/ioncore/modules.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/modules.h b/ioncore/modules.h index 6cc565e..0d00e52 100644 --- a/ioncore/modules.h +++ b/ioncore/modules.h @@ -1,7 +1,7 @@ /* * ion/ioncore/modules.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/mplex.c b/ioncore/mplex.c index 158b9ff..a202e7c 100644 --- a/ioncore/mplex.c +++ b/ioncore/mplex.c @@ -1,7 +1,7 @@ /* * ion/ioncore/mplex.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -94,8 +94,8 @@ WStacking *mplex_iter_nodes(WMPlexIterTmp *tmp) /*{{{ Destroy/create mplex */ -bool mplex_do_init(WMPlex *mplex, WWindow *parent, Window win, - const WFitParams *fp, bool create) +bool mplex_do_init(WMPlex *mplex, WWindow *parent, + const WFitParams *fp, Window win) { mplex->flags=0; @@ -110,21 +110,13 @@ bool mplex_do_init(WMPlex *mplex, WWindow *parent, Window win, mplex->stdispinfo.pos=MPLEX_STDISP_BL; mplex->stdispinfo.fullsize=FALSE; - if(create){ - if(!window_init((WWindow*)mplex, parent, fp)) - return FALSE; - }else{ - if(!window_do_init((WWindow*)mplex, parent, win, fp)) - return FALSE; - } + if(!window_do_init((WWindow*)mplex, parent, fp, win)) + return FALSE; mplex->win.region.flags|=REGION_BINDINGS_ARE_GRABBED; window_select_input(&(mplex->win), IONCORE_EVENTMASK_CWINMGR); - region_add_bindmap((WRegion*)mplex, ioncore_mplex_bindmap); - region_add_bindmap((WRegion*)mplex, ioncore_mplex_toplevel_bindmap); - region_register((WRegion*)mplex); /* Call this to set MPLEX_MANAGED_UNVIEWABLE if necessary. */ @@ -136,7 +128,7 @@ bool mplex_do_init(WMPlex *mplex, WWindow *parent, Window win, bool mplex_init(WMPlex *mplex, WWindow *parent, const WFitParams *fp) { - return mplex_do_init(mplex, parent, None, fp, TRUE); + return mplex_do_init(mplex, parent, fp, None); } @@ -266,31 +258,36 @@ WRegion *mplex_mx_nth(WMPlex *mplex, uint n) /*EXTL_DOC - * Returns a list of regions on the numbered/mutually exclusive list of - * \var{mplex}. + * Iterate over numbered/mutually exclusive region list of \var{mplex} + * until \var{iterfn} returns \code{false}. + * The function itself returns \code{true} if it reaches the end of list + * without this happening. */ EXTL_SAFE EXTL_EXPORT_MEMBER -ExtlTab mplex_mx_list(WMPlex *mplex) +bool mplex_mx_i(WMPlex *mplex, ExtlFn iterfn) { WLListIterTmp tmp; llist_iter_init(&tmp, mplex->mx_list); - return extl_obj_iterable_to_table((ObjIterator*)llist_iter_regions, &tmp); + return extl_iter_objlist_(iterfn, (ObjIterator*)llist_iter_regions, &tmp); } /*EXTL_DOC - * Returns a list of all regions managed by \var{mplex}. + * Iterate over managed regions of \var{mplex} until \var{iterfn} returns + * \code{false}. + * The function itself returns \code{true} if it reaches the end of list + * without this happening. */ EXTL_SAFE EXTL_EXPORT_MEMBER -ExtlTab mplex_managed_list(WMPlex *mplex) +bool mplex_managed_i(WMPlex *mplex, ExtlFn iterfn) { WMPlexIterTmp tmp; mplex_iter_init(&tmp, mplex); - return extl_obj_iterable_to_table((ObjIterator*)mplex_iter, &tmp); + return extl_iter_objlist_(iterfn, (ObjIterator*)mplex_iter, &tmp); } @@ -298,8 +295,8 @@ ExtlTab mplex_managed_list(WMPlex *mplex) * Set index of \var{reg} within the multiplexer to \var{index} within * the mutually exclusive list. Special values for \var{index} are: * \begin{tabularx}{\linewidth}{lX} - * $-1$ & After \fnref{WMPlex.mx_current}. \\ - * $-2$ & Last. \\ + * $-1$ & Last. \\ + * $-2$ & After \fnref{WMPlex.mx_current}. \\ * \end{tabularx} */ EXTL_EXPORT_MEMBER @@ -514,7 +511,7 @@ static void mplex_managed_rqgeom(WMPlex *mplex, WRegion *sub, mplex_managed_geom(mplex, &fp.g); - sizepolicy(&node->szplcy, sub, &rq->geom, &rq->flags, &fp); + sizepolicy(&node->szplcy, sub, &rq->geom, rq->flags, &fp); if(geomret!=NULL) *geomret=fp.g; @@ -921,11 +918,11 @@ typedef WStacking *NxtFn(WMPlex *mplex, WStacking *st, bool wrap); static WRegion *do_navi(WMPlex *mplex, WStacking *sti, - NxtFn *fn, WRegionNaviData *data, bool sti_ok) + NxtFn *fn, WRegionNaviData *data, + bool sti_ok, bool wrap) { WStacking *st, *stacking; uint min_level=0; - bool wrap=FALSE; stacking=mplex_get_stacking(mplex); @@ -968,20 +965,22 @@ WRegion *mplex_navi_first(WMPlex *mplex, WRegionNavi nh, WRegionNaviData *data) { WStacking *lst=mplex->mgd; - - if(lst==NULL) - return region_navi_cont((WRegion*)mplex, NULL, data); + WRegion *res=NULL; - if(nh==REGION_NAVI_ANY){ - /* ? */ - } + if(lst!=NULL){ + if(nh==REGION_NAVI_ANY){ + /* ? */ + } - if(nh==REGION_NAVI_ANY || nh==REGION_NAVI_END || - nh==REGION_NAVI_BOTTOM || nh==REGION_NAVI_RIGHT){ - return do_navi(mplex, lst, mplex_prv, data, TRUE); - }else{ - return do_navi(mplex, lst->mgr_prev, mplex_nxt, data, TRUE); + if(nh==REGION_NAVI_ANY || nh==REGION_NAVI_END || + nh==REGION_NAVI_BOTTOM || nh==REGION_NAVI_RIGHT){ + res=do_navi(mplex, lst, mplex_prv, data, TRUE, TRUE); + }else{ + res=do_navi(mplex, lst->mgr_prev, mplex_nxt, data, TRUE, TRUE); + } } + + return region_navi_cont((WRegion*)mplex, res, data); } @@ -989,6 +988,7 @@ WRegion *mplex_navi_next(WMPlex *mplex, WRegion *rel, WRegionNavi nh, WRegionNaviData *data) { WStacking *st; + WRegion *res; if(rel!=NULL){ st=mplex_find_stacking(mplex, rel); @@ -999,17 +999,19 @@ WRegion *mplex_navi_next(WMPlex *mplex, WRegion *rel, WRegionNavi nh, }else{ return mplex_navi_first(mplex, nh, data); } - + if(nh==REGION_NAVI_ANY){ /* ? */ } if(nh==REGION_NAVI_ANY || nh==REGION_NAVI_END || nh==REGION_NAVI_BOTTOM || nh==REGION_NAVI_RIGHT){ - return do_navi(mplex, st, mplex_nxt, data, FALSE); + res=do_navi(mplex, st, mplex_nxt, data, FALSE, FALSE); }else{ - return do_navi(mplex, st, mplex_prv, data, FALSE); + res=do_navi(mplex, st, mplex_prv, data, FALSE, FALSE); } + + return region_navi_cont((WRegion*)mplex, res, data); } @@ -1265,15 +1267,15 @@ WRegion *mplex_attach_simple(WMPlex *mplex, WRegion *reg, int flags) } -static void get_params(WMPlex *mplex, ExtlTab tab, WMPlexAttachParams *par) +static void get_params(WMPlex *mplex, ExtlTab tab, int mask, + WMPlexAttachParams *par) { int layer=1; int tmp; + int ok=~mask; - par->flags=0; - - if(extl_table_gets_i(tab, "layer", &tmp)){ - /* backwards compatibility */ + if(mask==0 && extl_table_gets_i(tab, "layer", &tmp)){ + /* backwards compatibility. No need to consider masked cases */ if(tmp==2){ par->flags|=MPLEX_ATTACH_UNNUMBERED; if(!extl_table_is_bool_set(tab, "passive")) @@ -1282,34 +1284,36 @@ static void get_params(WMPlex *mplex, ExtlTab tab, WMPlexAttachParams *par) } if(extl_table_gets_i(tab, "level", &tmp)){ - if(tmp>=0){ + if(tmp>=0 && ok&MPLEX_ATTACH_LEVEL){ par->flags|=MPLEX_ATTACH_LEVEL; par->level=tmp; } } if(extl_table_is_bool_set(tab, "modal")) - par->flags|=MPLEX_ATTACH_MODAL; + par->flags|=MPLEX_ATTACH_MODAL&ok; if(extl_table_is_bool_set(tab, "unnumbered")) - par->flags|=MPLEX_ATTACH_UNNUMBERED; + par->flags|=MPLEX_ATTACH_UNNUMBERED&ok; if(extl_table_is_bool_set(tab, "switchto")) - par->flags|=MPLEX_ATTACH_SWITCHTO; + par->flags|=MPLEX_ATTACH_SWITCHTO&ok; if(extl_table_is_bool_set(tab, "hidden")) - par->flags|=MPLEX_ATTACH_HIDDEN; + par->flags|=MPLEX_ATTACH_HIDDEN&ok; if(extl_table_gets_i(tab, "index", &(par->index))) - par->flags|=MPLEX_ATTACH_INDEX; + par->flags|=MPLEX_ATTACH_INDEX&ok; if(extl_table_gets_i(tab, "sizepolicy", &tmp)){ - par->flags|=MPLEX_ATTACH_SIZEPOLICY; - par->szplcy=tmp; + if(ok&MPLEX_ATTACH_SIZEPOLICY){ + par->flags|=MPLEX_ATTACH_SIZEPOLICY; + par->szplcy=tmp; + } } if(extl_table_gets_rectangle(tab, "geom", &par->geom)) - par->flags|=MPLEX_ATTACH_GEOM; + par->flags|=MPLEX_ATTACH_GEOM&ok; } @@ -1321,13 +1325,13 @@ static void get_params(WMPlex *mplex, ExtlTab tab, WMPlexAttachParams *par) EXTL_EXPORT_MEMBER WRegion *mplex_attach(WMPlex *mplex, WRegion *reg, ExtlTab param) { - WMPlexAttachParams par; + WMPlexAttachParams par=MPLEXATTACHPARAMS_INIT; WRegionAttachData data; if(reg==NULL) return NULL; - get_params(mplex, param, &par); + get_params(mplex, param, 0, &par); data.type=REGION_ATTACH_REPARENT; data.u.reg=reg; @@ -1336,6 +1340,20 @@ WRegion *mplex_attach(WMPlex *mplex, WRegion *reg, ExtlTab param) } +WRegion *mplex_attach_new_(WMPlex *mplex, WMPlexAttachParams *par, + int mask, ExtlTab param) +{ + WRegionAttachData data; + + get_params(mplex, param, mask, par); + + data.type=REGION_ATTACH_LOAD; + data.u.tab=param; + + return mplex_do_attach(mplex, par, &data); +} + + /*EXTL_DOC * Create a new region to be managed by \var{mplex}. At least the following * fields in \var{param} are understood (all but \var{type} are optional). @@ -1365,15 +1383,9 @@ WRegion *mplex_attach(WMPlex *mplex, WRegion *reg, ExtlTab param) EXTL_EXPORT_MEMBER WRegion *mplex_attach_new(WMPlex *mplex, ExtlTab param) { - WMPlexAttachParams par; - WRegionAttachData data; + WMPlexAttachParams par=MPLEXATTACHPARAMS_INIT; - get_params(mplex, param, &par); - - data.type=REGION_ATTACH_LOAD; - data.u.tab=param; - - return mplex_do_attach(mplex, &par, &data); + return mplex_attach_new_(mplex, &par, 0, param); } @@ -1384,9 +1396,12 @@ EXTL_EXPORT_MEMBER void mplex_attach_tagged(WMPlex *mplex) { WRegion *reg; + int flags=MPLEX_ATTACH_SWITCHTO; - while((reg=ioncore_tags_take_first())!=NULL) - mplex_attach_simple(mplex, reg, 0); + while((reg=ioncore_tagged_take_first())!=NULL){ + mplex_attach_simple(mplex, reg, flags); + /*flags=0;*/ + } } @@ -1597,17 +1612,14 @@ bool mplex_set_stdisp(WMPlex *mplex, WRegion *reg, if(!CAN_MANAGE_STDISP(mgr)) mgr=NULL; - - if(oldstdisp!=reg){ - mainloop_defer_destroy((Obj*)oldstdisp); - watch_reset(&(mplex->stdispwatch)); - } } if(din!=NULL) mplex->stdispinfo=*din; if(reg==NULL){ + watch_reset(&(mplex->stdispwatch)); + if(mgr!=NULL){ region_unmanage_stdisp(mgr, TRUE, FALSE); if(oldstdisp!=NULL) @@ -1619,6 +1631,9 @@ bool mplex_set_stdisp(WMPlex *mplex, WRegion *reg, mplex_remanage_stdisp(mplex); } + if(oldstdisp!=NULL && oldstdisp!=reg) + region_dispose((WRegion*)oldstdisp, FALSE); + return TRUE; } @@ -1920,7 +1935,7 @@ ExtlTab mplex_get_configuration(WMPlex *mplex) tab=region_get_base_configuration((WRegion*)mplex); subs=extl_create_table(); - extl_table_sets_t(tab, "subs", subs); + extl_table_sets_t(tab, "managed", subs); /* First the numbered/mutually exclusive nodes */ FOR_ALL_NODES_ON_LLIST(lnode, mplex->mx_list, ltmp){ @@ -1964,16 +1979,17 @@ void mplex_load_contents(WMPlex *mplex, ExtlTab tab) extl_unref_table(subtab); }*/ - if(extl_table_gets_t(tab, "subs", &substab)){ + if(extl_table_gets_t(tab, "managed", &substab) || + extl_table_gets_t(tab, "subs", &substab)){ n=extl_table_get_n(substab); for(i=1; i<=n; i++){ if(extl_table_geti_t(substab, i, &subtab)){ /*mplex_attach_new(mplex, subtab);*/ - WMPlexAttachParams par; + WMPlexAttachParams par=MPLEXATTACHPARAMS_INIT; WRegionAttachData data; char *tmp=NULL; - get_params(mplex, subtab, &par); + get_params(mplex, subtab, 0, &par); par.flags|=MPLEX_ATTACH_INDEX; par.index=LLIST_INDEX_LAST; diff --git a/ioncore/mplex.h b/ioncore/mplex.h index 889f387..829c841 100644 --- a/ioncore/mplex.h +++ b/ioncore/mplex.h @@ -1,7 +1,7 @@ /* * ion/ioncore/mplex.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -108,8 +108,8 @@ DECLCLASS(WMPlex){ extern WMPlex *create_mplex(WWindow *parent, const WFitParams *fp); extern bool mplex_init(WMPlex *mplex, WWindow *parent, const WFitParams *fp); -extern bool mplex_do_init(WMPlex *mplex, WWindow *parent, Window win, - const WFitParams *fp, bool create); +extern bool mplex_do_init(WMPlex *mplex, WWindow *parent, + const WFitParams *fp, Window win); extern void mplex_deinit(WMPlex *mplex); /* Resize and reparent */ @@ -129,6 +129,8 @@ extern WRegion *mplex_attach_simple(WMPlex *mplex, WRegion *reg, int flags); extern WRegion *mplex_attach(WMPlex *mplex, WRegion *reg, ExtlTab param); +extern WRegion *mplex_attach_new_(WMPlex *mplex, WMPlexAttachParams *partmpl, + int mask, ExtlTab param); extern WRegion *mplex_attach_new(WMPlex *mplex, ExtlTab param); extern WRegion *mplex_do_attach_pholder(WMPlex *mplex, WMPlexPHolder *ph, @@ -176,9 +178,11 @@ extern bool mplex_managed_rqorder(WMPlex *mplex, WRegion *sub, extern WRegion *mplex_current(WMPlex *mplex); extern bool mplex_may_destroy(WMPlex *mplex); +extern bool mplex_managed_i(WMPlex *mplex, ExtlFn iterfn); + extern int mplex_mx_count(WMPlex *mplex); extern WRegion *mplex_mx_nth(WMPlex *mplex, uint n); -extern ExtlTab mplex_mx_list(WMPlex *mplex); +extern bool mplex_mx_i(WMPlex *mplex, ExtlFn iterfn); extern WRegion *mplex_mx_current(WMPlex *mplex); extern void mplex_call_changed_hook(WMPlex *mplex, WHook *hook, diff --git a/ioncore/mplexpholder.c b/ioncore/mplexpholder.c index 51166f7..f6d089a 100644 --- a/ioncore/mplexpholder.c +++ b/ioncore/mplexpholder.c @@ -1,7 +1,7 @@ /* * ion/ioncore/mplexpholder.c * - * Copyright (c) Tuomo Valkonen 2005-2006. + * Copyright (c) Tuomo Valkonen 2005-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -17,6 +17,7 @@ #include "mplex.h" #include "mplexpholder.h" #include "llist.h" +#include "framedpholder.h" static void mplex_watch_handler(Watch *watch, Obj *mplex); @@ -60,12 +61,28 @@ static void mplexpholder_do_link(WMPlexPHolder *ph, void mplexpholder_do_unlink(WMPlexPHolder *ph, WMPlex *mplex) { + if(ph->recreate_pholder!=NULL){ + if(ph->prev!=NULL) + ph->prev->recreate_pholder=ph->recreate_pholder; + else + destroy_obj((Obj*)ph->recreate_pholder); + ph->recreate_pholder=NULL; + } + if(ph->after!=NULL){ UNLINK_ITEM(ph->after->phs, ph, next, prev); }else if(mplex!=NULL && on_ph_list(mplex->mx_phs, ph)){ UNLINK_ITEM(mplex->mx_phs, ph, next, prev); }else{ - assert(ph->next==NULL && ph->prev==NULL); + WMPlexPHolder *next=ph->next; + + assert((ph->next==NULL && ph->prev==NULL) + || ph->mplex_watch.obj==NULL); + + if(ph->next!=NULL) + ph->next->prev=ph->prev; + if(ph->prev!=NULL) + ph->prev->next=next; } ph->after=NULL; @@ -101,6 +118,7 @@ bool mplexpholder_init(WMPlexPHolder *ph, WMPlex *mplex, WStacking *st, ph->next=NULL; ph->prev=NULL; ph->param.flags=0; + ph->recreate_pholder=NULL; if(!watch_setup(&(ph->mplex_watch), (Obj*)mplex, mplex_watch_handler)){ pholder_deinit(&(ph->ph)); @@ -171,14 +189,121 @@ void mplexpholder_deinit(WMPlexPHolder *ph) /*{{{ Move, attach, layer */ +typedef struct{ + WMPlexPHolder *ph, *ph_head; + WRegionAttachData *data; + WFramedParam *param; +} RP; + + +WRegion *recreate_handler(WWindow *par, + const WFitParams *fp, + void *rp_) +{ + RP *rp=(RP*)rp_; + WMPlexPHolder *ph=rp->ph, *ph_head=rp->ph_head, *phtmp; + WFramedParam *param=rp->param; + WFrame *frame; + WRegion *reg; + + frame=create_frame(par, fp, param->mode); + + if(frame==NULL) + return NULL; + + /* Move pholders to frame */ + frame->mplex.mx_phs=ph_head; + + for(phtmp=frame->mplex.mx_phs; phtmp!=NULL; phtmp=phtmp->next) + watch_setup(&(phtmp->mplex_watch), (Obj*)frame, mplex_watch_handler); + + /* Attach */ + if(fp->mode&(REGION_FIT_BOUNDS|REGION_FIT_WHATEVER)) + ph->param.flags|=MPLEX_ATTACH_WHATEVER; + + reg=mplex_do_attach_pholder(&frame->mplex, ph, rp->data); + + ph->param.flags&=~MPLEX_ATTACH_WHATEVER; + + if(reg==NULL){ + /* Try to recover */ + for(phtmp=frame->mplex.mx_phs; phtmp!=NULL; phtmp=phtmp->next) + watch_reset(&(phtmp->mplex_watch)); + frame->mplex.mx_phs=NULL; + + destroy_obj((Obj*)frame); + + return NULL; + }else{ + frame_adjust_to_initial(frame, fp, param, reg); + + return (WRegion*)frame; + } +} + + +static WMPlexPHolder *get_head(WMPlexPHolder *ph) +{ + while(1){ + if(ph->prev->next==NULL) + break; + ph=ph->prev; + } + + return ph; +} + + +static WFramedPHolder *get_recreate_ph(WMPlexPHolder *ph) +{ + return get_head(ph)->recreate_pholder; +} + + +static WRegion *mplexpholder_attach_recreate(WMPlexPHolder *ph, int flags, + WRegionAttachData *data) +{ + WRegionAttachData data2; + WFramedPHolder *fph; + WPHolder *root; + WRegion *reg; + RP rp; + + rp.ph_head=get_head(ph); + + assert(rp.ph_head!=NULL); + + fph=rp.ph_head->recreate_pholder; + + if(fph==NULL) + return NULL; + + rp.ph=ph; + rp.data=data; + rp.param=&fph->param; + + data2.type=REGION_ATTACH_NEW; + data2.u.n.fn=recreate_handler; + data2.u.n.param=&rp; + + reg=pholder_do_attach(fph->cont, flags, &data2); /* == frame */ + + if(reg!=NULL){ + destroy_obj((Obj*)fph); + rp.ph_head->recreate_pholder=NULL; + } + + return reg; +} + + WRegion *mplexpholder_do_attach(WMPlexPHolder *ph, int flags, WRegionAttachData *data) { WMPlex *mplex=(WMPlex*)ph->mplex_watch.obj; - WRegion *reg=NULL; if(mplex==NULL) - return FALSE; + return mplexpholder_attach_recreate(ph, flags, data); if(flags&PHOLDER_ATTACH_SWITCHTO) ph->param.flags|=MPLEX_ATTACH_SWITCHTO; @@ -212,18 +337,55 @@ bool mplexpholder_move(WMPlexPHolder *ph, WMPlex *mplex, bool mplexpholder_do_goto(WMPlexPHolder *ph) { - WMPlex *mplex=(WMPlex*)ph->mplex_watch.obj; - - if(mplex!=NULL) - return region_goto((WRegion*)mplex); + WRegion *reg=(WRegion*)ph->mplex_watch.obj; - return FALSE; + if(reg!=NULL){ + return region_goto(reg); + }else{ + WFramedPHolder *fph=get_recreate_ph(ph); + + return (fph!=NULL + ? pholder_do_goto((WPHolder*)fph) + : FALSE); + } } WRegion *mplexpholder_do_target(WMPlexPHolder *ph) { - return (WRegion*)ph->mplex_watch.obj; + WRegion *reg=(WRegion*)ph->mplex_watch.obj; + + if(reg!=NULL){ + return reg; + }else{ + WFramedPHolder *fph=get_recreate_ph(ph); + + return (fph!=NULL + ? pholder_do_target((WPHolder*)fph) + : NULL); + } +} + + +WPHolder *mplexpholder_do_root(WMPlexPHolder *ph) +{ + WRegion *reg=(WRegion*)ph->mplex_watch.obj; + + if(reg!=NULL){ + return &ph->ph; + }else{ + WFramedPHolder *fph=get_recreate_ph(ph); + WPHolder *root; + + if(fph==NULL) + return NULL; + + root=pholder_root((WPHolder*)fph); + + return (root!=(WPHolder*)fph + ? root + : &ph->ph); + } } @@ -300,6 +462,9 @@ static DynFunTab mplexpholder_dynfuntab[]={ {(DynFun*)pholder_do_target, (DynFun*)mplexpholder_do_target}, + + {(DynFun*)pholder_do_root, + (DynFun*)mplexpholder_do_root}, END_DYNFUNTAB }; diff --git a/ioncore/mplexpholder.h b/ioncore/mplexpholder.h index 4dce782..5a98922 100644 --- a/ioncore/mplexpholder.h +++ b/ioncore/mplexpholder.h @@ -1,7 +1,7 @@ /* * ion/ioncore/mplexpholder.h * - * Copyright (c) Tuomo Valkonen 2005-2006. + * Copyright (c) Tuomo Valkonen 2005-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -16,10 +16,13 @@ #include "pholder.h" #include "mplex.h" #include "attach.h" +#include "framedpholder.h" + DECLCLASS(WMPlexPHolder){ WPHolder ph; Watch mplex_watch; + WFramedPHolder *recreate_pholder; /* only on first of list */ WLListNode *after; WMPlexPHolder *next, *prev; WMPlexAttachParams param; @@ -46,6 +49,8 @@ extern WRegion *mplexpholder_do_attach(WMPlexPHolder *ph, int flags, extern bool mplexpholder_do_goto(WMPlexPHolder *ph); +extern WPHolder *mplexpholder_do_root(WMPlexPHolder *ph); + extern WRegion *mplexpholder_do_target(WMPlexPHolder *ph); extern bool mplexpholder_move(WMPlexPHolder *ph, WMPlex *mplex, diff --git a/ioncore/mwmhints.c b/ioncore/mwmhints.c index 2ebc683..2c2269c 100644 --- a/ioncore/mwmhints.c +++ b/ioncore/mwmhints.c @@ -1,7 +1,7 @@ /* * ion/ioncore/mwmhints.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/mwmhints.h b/ioncore/mwmhints.h index 99ac8ad..09571f3 100644 --- a/ioncore/mwmhints.h +++ b/ioncore/mwmhints.h @@ -1,7 +1,7 @@ /* * ion/ioncore/mwmhints.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/names.c b/ioncore/names.c index 7085504..5f3c386 100644 --- a/ioncore/names.c +++ b/ioncore/names.c @@ -1,7 +1,7 @@ /* * ion/ioncore/names.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -19,6 +19,7 @@ #include #include "common.h" +#include "global.h" #include "region.h" #include "clientwin.h" #include "names.h" @@ -416,7 +417,7 @@ static bool do_set_name(bool (*fn)(WRegion *reg, WNamespace *ns, const char *p), if(nm!=NULL) free(nm); - region_notify_change(reg, "name"); + region_notify_change(reg, ioncore_g.notifies.name); return ret; } @@ -537,16 +538,13 @@ WClientWin *ioncore_lookup_clientwin(const char *name) } -static ExtlTab do_list(WNamespace *ns, const char *typenam) +static bool do_list(ExtlFn fn, WNamespace *ns, const char *typenam) { - ExtlTab tab; Rb_node node; int n=0; if(!ns->initialised) - return extl_table_none(); - - tab=extl_create_table(); + return FALSE; rb_traverse(node, ns->rb){ WRegion *reg=(WRegion*)node->v.val; @@ -556,33 +554,38 @@ static ExtlTab do_list(WNamespace *ns, const char *typenam) if(typenam!=NULL && !obj_is_str((Obj*)reg, typenam)) continue; - if(extl_table_seti_o(tab, n+1, (Obj*)reg)) - n++; + if(!extl_iter_obj(fn, (Obj*)reg)) + return FALSE; } - return tab; + return TRUE; } /*EXTL_DOC - * Find all non-client window regions inheriting \var{typenam}. + * Iterate over all non-client window regions with (inherited) class + * \var{typenam} until \var{iterfn} returns \code{false}. + * The function itself returns \code{true} if it reaches the end of list + * without this happening. */ EXTL_SAFE EXTL_EXPORT -ExtlTab ioncore_region_list(const char *typenam) +bool ioncore_region_i(ExtlFn fn, const char *typenam) { - return do_list(&ioncore_internal_ns, typenam); + return do_list(fn, &ioncore_internal_ns, typenam); } /*EXTL_DOC - * Return a list of all client windows. + * Iterate over client windows until \var{iterfn} returns \code{false}. + * The function itself returns \code{true} if it reaches the end of list + * without this happening. */ EXTL_SAFE EXTL_EXPORT -ExtlTab ioncore_clientwin_list() +bool ioncore_clientwin_i(ExtlFn fn) { - return do_list(&ioncore_clientwin_ns, NULL); + return do_list(fn, &ioncore_clientwin_ns, NULL); } diff --git a/ioncore/names.h b/ioncore/names.h index 5a2cc36..57dd5aa 100644 --- a/ioncore/names.h +++ b/ioncore/names.h @@ -1,7 +1,7 @@ /* * ion/ioncore/names.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -43,8 +43,8 @@ DYNFUN const char *region_displayname(WRegion *reg); extern char *region_make_label(WRegion *reg, int maxw, GrBrush *brush); -extern ExtlTab ioncore_region_list(const char *typenam); -extern ExtlTab ioncore_clientwin_list(); +extern bool ioncore_region_i(ExtlFn fn, const char *typenam); +extern bool ioncore_clientwin_i(ExtlFn fn); extern WRegion *ioncore_lookup_region(const char *cname, const char *typenam); extern WClientWin *ioncore_lookup_clientwin(const char *cname); diff --git a/ioncore/navi.c b/ioncore/navi.c index f52a44b..7a10e6b 100644 --- a/ioncore/navi.c +++ b/ioncore/navi.c @@ -1,7 +1,7 @@ /* * ion/ioncore/navi.c * - * Copyright (c) Tuomo Valkonen 2006. + * Copyright (c) Tuomo Valkonen 2006-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -120,6 +120,7 @@ static bool may_ascend(WRegion *to, WRegion *from, WRegionNaviData *data) }else if(data->no_ascend!=NULL){ return (data->no_ascend!=(Obj*)from); }else{ + /* Set to TRUE for cycling out of nested workspaces etc. */ return !OBJ_IS(from, WMPlex); } } @@ -136,6 +137,7 @@ static bool may_descend(WRegion *to, WRegion *from, WRegionNaviData *data) }else if(data->no_descend!=NULL){ return (data->no_descend!=(Obj*)from); }else{ + /* Set to TRUE for cycling into nested workspaces etc. */ return !OBJ_IS(to, WMPlex); } } diff --git a/ioncore/navi.h b/ioncore/navi.h index 3c38973..b1ed6a0 100644 --- a/ioncore/navi.h +++ b/ioncore/navi.h @@ -1,7 +1,7 @@ /* * ion/ioncore/navi.h * - * Copyright (c) Tuomo Valkonen 2006. + * Copyright (c) Tuomo Valkonen 2006-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/netwm.c b/ioncore/netwm.c index cd0cb85..d7c466e 100644 --- a/ioncore/netwm.c +++ b/ioncore/netwm.c @@ -1,7 +1,7 @@ /* * ion/ioncore/netwm.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -100,7 +100,7 @@ int netwm_check_initial_fullscreen(WClientWin *cwin, bool sw) for(i=0; idata.l[0]==_NET_WM_STATE_TOGGLE){ bool sw=clientwin_fullscreen_may_switchto(cwin); cwin->flags|=CLIENTWIN_FS_RQ; - if(!clientwin_enter_fullscreen(cwin, sw)) + if(!region_enter_fullscreen((WRegion*)cwin, sw)) cwin->flags&=~CLIENTWIN_FS_RQ; }else{ /* Should not be set.. */ @@ -158,7 +158,7 @@ static void netwm_state_change_rq(WClientWin *cwin, ev->data.l[0]==_NET_WM_STATE_TOGGLE){ bool sw=clientwin_fullscreen_may_switchto(cwin); cwin->flags&=~CLIENTWIN_FS_RQ; - clientwin_leave_fullscreen(cwin, sw); + region_leave_fullscreen((WRegion*)cwin, sw); }else{ /* Set the flag */ cwin->flags|=CLIENTWIN_FS_RQ; diff --git a/ioncore/netwm.h b/ioncore/netwm.h index bbfa9b9..e566ca6 100644 --- a/ioncore/netwm.h +++ b/ioncore/netwm.h @@ -1,7 +1,7 @@ /* * ion/ioncore/netwm.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/pholder.c b/ioncore/pholder.c index 4aed2cc..5fdb7b8 100644 --- a/ioncore/pholder.c +++ b/ioncore/pholder.c @@ -1,7 +1,7 @@ /* * ion/ioncore/pholder.c * - * Copyright (c) Tuomo Valkonen 2005-2006. + * Copyright (c) Tuomo Valkonen 2005-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -13,6 +13,7 @@ #include "common.h" #include "attach.h" #include "pholder.h" +#include "focus.h" bool pholder_init(WPHolder *ph) @@ -53,10 +54,15 @@ static WRegion *add_fn_reparent(WWindow *par, const WFitParams *fp, WRegion *pholder_attach_(WPHolder *ph, int flags, WRegionAttachData *data) { - if(ph->redirect!=NULL) - return pholder_attach_(ph->redirect, flags, data); - else - return pholder_do_attach(ph, flags, data); + WPHolder *root=pholder_root(ph); + + /* Use the root, so that extra containers are not added from + * stale chains. + */ + + return (root==NULL + ? NULL + : pholder_do_attach(root, flags, data)); } @@ -71,6 +77,20 @@ bool pholder_attach(WPHolder *ph, int flags, WRegion *reg) } +bool pholder_attach_mcfgoto(WPHolder *ph, int flags, WRegion *reg) +{ + bool cf=region_may_control_focus(reg); + + if(!pholder_attach(ph, flags, reg)) + return FALSE; + + if(cf) + region_goto(reg); + + return TRUE; +} + + WRegion *pholder_do_target(WPHolder *ph) { WRegion *ret=NULL; @@ -81,10 +101,9 @@ WRegion *pholder_do_target(WPHolder *ph) WRegion *pholder_target(WPHolder *ph) { - if(ph->redirect!=NULL) - return pholder_target(ph->redirect); - else - return pholder_do_target(ph); + return (ph->redirect!=NULL + ? pholder_target(ph->redirect) + : pholder_do_target(ph)); } @@ -126,13 +145,39 @@ bool pholder_do_goto(WPHolder *ph) bool pholder_goto(WPHolder *ph) { - if(ph->redirect!=NULL) - return pholder_goto(ph->redirect); - else - return pholder_do_goto(ph); + return (ph->redirect!=NULL + ? pholder_goto(ph->redirect) + : pholder_do_goto(ph)); } +WPHolder *pholder_do_root_default(WPHolder *ph) +{ + return ph; +} + + +WPHolder *pholder_do_root(WPHolder *ph) +{ + WPHolder *ret=NULL; + CALL_DYN_RET(ret, WPHolder*, pholder_do_root, ph, (ph)); + return ret; +} + + +WPHolder *pholder_root(WPHolder *ph) +{ + return (ph->redirect!=NULL + ? pholder_root(ph->redirect) + : pholder_do_root(ph)); +} + + +bool pholder_stale(WPHolder *ph) +{ + return (pholder_root(ph)!=ph); +} + bool pholder_redirect(WPHolder *ph, WRegion *old_target) { @@ -201,6 +246,9 @@ WPHolder *pholder_either(WPHolder *a, WPHolder *b) static DynFunTab pholder_dynfuntab[]={ {(DynFun*)pholder_do_check_reparent, (DynFun*)pholder_do_check_reparent_default}, + + {(DynFun*)pholder_do_root, + (DynFun*)pholder_do_root_default}, END_DYNFUNTAB }; diff --git a/ioncore/pholder.h b/ioncore/pholder.h index 7fe2710..4ccc654 100644 --- a/ioncore/pholder.h +++ b/ioncore/pholder.h @@ -1,7 +1,7 @@ /* * ion/ioncore/pholder.h * - * Copyright (c) Tuomo Valkonen 2005-2006. + * Copyright (c) Tuomo Valkonen 2005-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -39,10 +39,18 @@ extern WRegion *pholder_attach_(WPHolder *ph, int flags, extern bool pholder_attach(WPHolder *ph, int flags, WRegion *reg); +extern bool pholder_attach_mcfgoto(WPHolder *ph, int flags, WRegion *reg); + DYNFUN WRegion *pholder_do_target(WPHolder *ph); extern WRegion *pholder_target(WPHolder *ph); +extern WPHolder *pholder_do_root(WPHolder *ph); + +extern WPHolder *pholder_root(WPHolder *ph); + +extern bool pholder_stale(WPHolder *ph); + DYNFUN bool pholder_do_check_reparent(WPHolder *ph, WRegion *reg); extern bool pholder_check_reparent(WPHolder *ph, WRegion *reg); diff --git a/ioncore/pointer.c b/ioncore/pointer.c index 977940d..671af84 100644 --- a/ioncore/pointer.c +++ b/ioncore/pointer.c @@ -1,7 +1,7 @@ /* * ion/ioncore/pointer.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/pointer.h b/ioncore/pointer.h index bf2e00a..7b73cdb 100644 --- a/ioncore/pointer.h +++ b/ioncore/pointer.h @@ -1,7 +1,7 @@ /* * ion/ioncore/pointer.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/presize.c b/ioncore/presize.c index 80b7203..5b16ba4 100644 --- a/ioncore/presize.c +++ b/ioncore/presize.c @@ -1,7 +1,7 @@ /* * ion/ioncore/presize.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/presize.h b/ioncore/presize.h index 85fd889..a480033 100644 --- a/ioncore/presize.h +++ b/ioncore/presize.h @@ -1,7 +1,7 @@ /* * ion/ioncore/presize.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/property.c b/ioncore/property.c index 3bacca1..798dbf5 100644 --- a/ioncore/property.c +++ b/ioncore/property.c @@ -1,7 +1,7 @@ /* * ion/ioncore/property.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/property.h b/ioncore/property.h index c340380..cb9252e 100644 --- a/ioncore/property.h +++ b/ioncore/property.h @@ -1,7 +1,7 @@ /* * ion/ioncore/property.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/rectangle.c b/ioncore/rectangle.c index 00cae86..50dcc09 100644 --- a/ioncore/rectangle.c +++ b/ioncore/rectangle.c @@ -1,7 +1,7 @@ /* * ion/ioncore/rectangle.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/rectangle.h b/ioncore/rectangle.h index da7b305..701d2b2 100644 --- a/ioncore/rectangle.h +++ b/ioncore/rectangle.h @@ -1,7 +1,7 @@ /* * ion/ioncore/rectangle.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/regbind.c b/ioncore/regbind.c index 43bc3a6..0b2f371 100644 --- a/ioncore/regbind.c +++ b/ioncore/regbind.c @@ -1,7 +1,7 @@ /* * ion/regbind.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/regbind.h b/ioncore/regbind.h index b7c0412..ad1fe6d 100644 --- a/ioncore/regbind.h +++ b/ioncore/regbind.h @@ -1,7 +1,7 @@ /* * ion/ioncore/regbind.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/reginfo.c b/ioncore/reginfo.c index 5606b09..9815880 100644 --- a/ioncore/reginfo.c +++ b/ioncore/reginfo.c @@ -1,7 +1,7 @@ /* * ion/ioncore/reginfo.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/reginfo.h b/ioncore/reginfo.h index a83c2e2..0a75a98 100644 --- a/ioncore/reginfo.h +++ b/ioncore/reginfo.h @@ -1,7 +1,7 @@ /* * ion/ioncore/reginfo.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/region-iter.h b/ioncore/region-iter.h index bf9f135..157ab7d 100644 --- a/ioncore/region-iter.h +++ b/ioncore/region-iter.h @@ -1,7 +1,7 @@ /* * ion/ioncore/region-iter.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/region.c b/ioncore/region.c index dede094..68be25d 100644 --- a/ioncore/region.c +++ b/ioncore/region.c @@ -1,7 +1,7 @@ /* * ion/ioncore/region.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -26,6 +26,7 @@ #include "extlconv.h" #include "activity.h" #include "region-iter.h" +#include "return.h" #define D2(X) @@ -33,8 +34,8 @@ WHook *region_notify_hook=NULL; -static void region_notify_change_(WRegion *reg, const char *how, - Obj *detail); + +static void region_notify_change_(WRegion *reg, WRegionNotify how); /*{{{ Init & deinit */ @@ -73,7 +74,7 @@ void region_init(WRegion *reg, WWindow *par, const WFitParams *fp) reg->rootwin=((WRegion*)par)->rootwin; region_set_parent(reg, par); }else{ - assert(OBJ_IS(reg, WRootWin));/* || OBJ_IS(reg, WScreen));*/ + assert(OBJ_IS(reg, WRootWin)); } } @@ -103,6 +104,8 @@ static void destroy_children(WRegion *reg) void region_deinit(WRegion *reg) { + region_notify_change(reg, ioncore_g.notifies.deinit); + destroy_children(reg); if(ioncore_g.focus_next==reg){ @@ -111,6 +114,7 @@ void region_deinit(WRegion *reg) } region_detach_manager(reg); + region_unset_return(reg); region_unset_parent(reg); region_remove_bindings(reg); @@ -192,18 +196,6 @@ void region_do_set_focus(WRegion *reg, bool warp) /*{{{ Manager region dynfuns */ -void region_managed_activated(WRegion *mgr, WRegion *reg) -{ - CALL_DYN(region_managed_activated, mgr, (mgr, reg)); -} - - -void region_managed_inactivated(WRegion *mgr, WRegion *reg) -{ - CALL_DYN(region_managed_inactivated, mgr, (mgr, reg)); -} - - static bool region_managed_prepare_focus_default(WRegion *mgr, WRegion *reg, int flags, WPrepareFocusResult *res) @@ -228,7 +220,7 @@ bool region_managed_prepare_focus(WRegion *mgr, WRegion *reg, } -void region_managed_notify(WRegion *mgr, WRegion *reg, const char *how) +void region_managed_notify(WRegion *mgr, WRegion *reg, WRegionNotify how) { CALL_DYN(region_managed_notify, mgr, (mgr, reg, how)); } @@ -377,7 +369,7 @@ bool region_reparent(WRegion *reg, WWindow *par, static bool region_rqclose_default(WRegion *reg, bool relocate) { WPHolder *ph; - bool refuse=TRUE; + bool refuse=TRUE, mcf; if((!relocate && !region_may_destroy(reg)) || !region_manager_allows_destroying(reg)){ @@ -385,6 +377,7 @@ static bool region_rqclose_default(WRegion *reg, bool relocate) } ph=region_get_rescue_pholder(reg); + mcf=region_may_control_focus(reg); if(ph!=NULL){ refuse=!region_rescue_clientwins(reg, ph); @@ -396,7 +389,7 @@ static bool region_rqclose_default(WRegion *reg, bool relocate) return FALSE; } - mainloop_defer_destroy((Obj*)reg); + region_dispose(reg, mcf); return TRUE; } @@ -478,6 +471,24 @@ bool region_manager_allows_destroying(WRegion *reg) } +void region_dispose(WRegion *reg, bool was_mcf) +{ + if(was_mcf){ + WPHolder *ph=region_get_return(reg); + if(ph!=NULL) + pholder_goto(ph); + } + + mainloop_defer_destroy((Obj*)reg); +} + + +void region_dispose_(WRegion *reg) +{ + region_dispose(reg, region_may_control_focus(reg)); +} + + /*}}}*/ @@ -494,6 +505,7 @@ void region_detach_manager(WRegion *reg) if(mgr==NULL) return; +#if 0 /* Restore activity state to non-parent manager */ if(region_may_control_focus(reg)){ WRegion *par=REGION_PARENT_REG(reg); @@ -504,11 +516,10 @@ void region_detach_manager(WRegion *reg) * be made to work. */ par->active_sub=mgr; - /*if(region_xwindow(mgr)!=None){*/ - region_do_set_focus(mgr, FALSE); - /*}*/ + region_maybewarp_now(mgr, FALSE); } } +#endif region_set_activity(reg, SETPARAM_UNSET); @@ -518,6 +529,39 @@ void region_detach_manager(WRegion *reg) } +void region_unset_manager_pseudoactivity(WRegion *reg) +{ + WRegion *mgr=reg->manager, *par=REGION_PARENT_REG(reg); + + if(mgr==NULL || mgr==par || !REGION_IS_PSEUDOACTIVE(mgr)) + return; + + mgr->flags&=~REGION_PSEUDOACTIVE; + + region_notify_change(mgr, ioncore_g.notifies.pseudoinactivated); + + region_unset_manager_pseudoactivity(mgr); +} + + +void region_set_manager_pseudoactivity(WRegion *reg) +{ + WRegion *mgr=reg->manager, *par=REGION_PARENT_REG(reg); + + if(!REGION_IS_ACTIVE(reg) && !REGION_IS_PSEUDOACTIVE(reg)) + return; + + if(mgr==NULL || mgr==par || REGION_IS_PSEUDOACTIVE(mgr)) + return; + + mgr->flags|=REGION_PSEUDOACTIVE; + + region_notify_change(mgr, ioncore_g.notifies.pseudoactivated); + + region_set_manager_pseudoactivity(mgr); +} + + /* This should only be called within region_managed_remove, * _after_ any managed lists and other essential structures * of mgr have been broken. @@ -526,13 +570,17 @@ void region_unset_manager(WRegion *reg, WRegion *mgr) { if(reg->manager!=mgr) return; + + region_notify_change_(reg, ioncore_g.notifies.unset_manager); + + region_unset_manager_pseudoactivity(reg); reg->manager=NULL; if(region_is_activity_r(reg)) region_clear_mgd_activity(mgr); - - region_notify_change_(reg, "unset_manager", (Obj*)mgr); + + region_unset_return(reg); } @@ -546,10 +594,12 @@ void region_set_manager(WRegion *reg, WRegion *mgr) reg->manager=mgr; + region_set_manager_pseudoactivity(reg); + if(region_is_activity_r(reg)) region_mark_mgd_activity(mgr); - region_notify_change_(reg, "set_manager", (Obj*)mgr); + region_notify_change_(reg, ioncore_g.notifies.set_manager); } @@ -776,54 +826,53 @@ void region_rootpos(WRegion *reg, int *xret, int *yret) } -static bool mrsh_not(WHookDummy *fn, void *p) +typedef struct{ + WRegion *reg; + WRegionNotify how; +} MRSHP; + + +static bool mrsh_notify_change(WHookDummy *fn, void *p_) { - WRegion *reg=(WRegion*)((void**)p)[0]; - const char *how=(const char*)((void**)p)[1]; - Obj *detail=(Obj*)((void**)p)[2]; + MRSHP *p=(MRSHP*)p_; - fn(reg, how, detail); + fn(p->reg, p->how); return TRUE; } -static bool mrshe_not(ExtlFn fn, void *p) +static bool mrshe_notify_change(ExtlFn fn, void *p_) { - WRegion *reg=(WRegion*)((void**)p)[0]; - const char *how=(const char*)((void**)p)[1]; - Obj *detail=(Obj*)((void**)p)[2]; + MRSHP *p=(MRSHP*)p_; - extl_call(fn, "oso", NULL, reg, how, detail); + extl_call(fn, "os", NULL, p->reg, stringstore_get(p->how)); return TRUE; } -static void region_notify_change_(WRegion *reg, const char *how, - Obj *detail) +static void region_notify_change_(WRegion *reg, WRegionNotify how) { - const void *p[3]; + MRSHP p; + + p.reg=reg; + p.how=how; - p[0]=reg; - p[1]=how; - p[2]=detail; - extl_protect(NULL); - hook_call(region_notify_hook, p, mrsh_not, mrshe_not), + hook_call(region_notify_hook, &p, mrsh_notify_change, mrshe_notify_change), extl_unprotect(NULL); - } -void region_notify_change(WRegion *reg, const char *how) +void region_notify_change(WRegion *reg, WRegionNotify how) { WRegion *mgr=REGION_MANAGER(reg); if(mgr!=NULL) region_managed_notify(mgr, reg, how); - region_notify_change_(reg, how, NULL); + region_notify_change_(reg, how); } diff --git a/ioncore/region.h b/ioncore/region.h index b2feff7..d30b435 100644 --- a/ioncore/region.h +++ b/ioncore/region.h @@ -1,7 +1,7 @@ /* * ion/ioncore/region.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -13,31 +13,34 @@ #define ION_IONCORE_REGION_H #include +#include #include #include "common.h" #include "rectangle.h" -#define REGION_MAPPED 0x0001 -#define REGION_ACTIVE 0x0002 -#define REGION_HAS_GRABS 0x0004 -#define REGION_TAGGED 0x0008 +#define REGION_MAPPED 0x0001 +#define REGION_ACTIVE 0x0002 +#define REGION_HAS_GRABS 0x0004 +#define REGION_TAGGED 0x0008 +#define REGION_PSEUDOACTIVE 0x0010 #define REGION_BINDINGS_ARE_GRABBED 0x0020 -#define REGION_GRAB_ON_PARENT 0x0040 -#define REGION_ACTIVITY 0x0100 -#define REGION_SKIP_FOCUS 0x0200 -#define REGION_CWINS_BEING_RESCUED 0x0400 -#define REGION_PLEASE_WARP 0x0800 +#define REGION_GRAB_ON_PARENT 0x0040 +#define REGION_ACTIVITY 0x0100 +#define REGION_SKIP_FOCUS 0x0200 +#define REGION_CWINS_BEING_RESCUED 0x0400 +#define REGION_PLEASE_WARP 0x0800 #define REGION_BINDING_UPDATE_SCHEDULED 0x1000 -#define REGION_GOTO_FOCUS 0x0001 -#define REGION_GOTO_NOWARP 0x0002 -#define REGION_GOTO_ENTERWINDOW 0x0004 +#define REGION_GOTO_FOCUS 0x0001 +#define REGION_GOTO_NOWARP 0x0002 +#define REGION_GOTO_ENTERWINDOW 0x0004 /* Use region_is_fully_mapped instead for most cases. */ #define REGION_IS_MAPPED(R) (((WRegion*)(R))->flags®ION_MAPPED) #define REGION_MARK_MAPPED(R) (((WRegion*)(R))->flags|=REGION_MAPPED) #define REGION_MARK_UNMAPPED(R) (((WRegion*)(R))->flags&=~REGION_MAPPED) #define REGION_IS_ACTIVE(R) (((WRegion*)(R))->flags®ION_ACTIVE) +#define REGION_IS_PSEUDOACTIVE(R) (((WRegion*)(R))->flags®ION_PSEUDOACTIVE) #define REGION_IS_TAGGED(R) (((WRegion*)(R))->flags®ION_TAGGED) #define REGION_IS_URGENT(R) (((WRegion*)(R))->flags®ION_URGENT) #define REGION_GEOM(R) (((WRegion*)(R))->geom) @@ -58,6 +61,8 @@ typedef int WRegionFitMode; +typedef StringId WRegionNotify; + typedef enum{ REGION_ORDER_FRONT, @@ -135,9 +140,7 @@ DYNFUN WRegion *region_managed_control_focus(WRegion *mgr, WRegion *reg); DYNFUN void region_managed_remove(WRegion *reg, WRegion *sub); DYNFUN bool region_managed_prepare_focus(WRegion *reg, WRegion *sub, int flags, WPrepareFocusResult *res); -DYNFUN void region_managed_activated(WRegion *reg, WRegion *sub); -DYNFUN void region_managed_inactivated(WRegion *reg, WRegion *sub); -DYNFUN void region_managed_notify(WRegion *reg, WRegion *sub, const char *how); +DYNFUN void region_managed_notify(WRegion *reg, WRegion *sub, WRegionNotify how); DYNFUN bool region_managed_may_destroy(WRegion *mgr, WRegion *reg); DYNFUN bool region_managed_rqorder(WRegion *reg, WRegion *sub, WRegionOrder order); @@ -162,7 +165,7 @@ extern bool region_reparent(WRegion *reg, WWindow *target, extern void region_updategr_default(WRegion *reg); extern void region_rootpos(WRegion *reg, int *xret, int *yret); -extern void region_notify_change(WRegion *reg, const char *how); +extern void region_notify_change(WRegion *reg, WRegionNotify how); extern bool region_goto(WRegion *reg); extern bool region_goto_flags(WRegion *reg, int flags); @@ -171,6 +174,9 @@ extern bool region_is_fully_mapped(WRegion *reg); extern void region_detach_manager(WRegion *reg); +extern void region_dispose(WRegion *reg, bool was_mcf); +extern void region_dispose_(WRegion *reg); + extern WWindow *region_parent(WRegion *reg); extern WRegion *region_manager(WRegion *reg); extern WRegion *region_manager_or_parent(WRegion *reg); @@ -188,6 +194,9 @@ extern bool region_manager_allows_destroying(WRegion *reg); extern WRegion *region_managed_within(WRegion *reg, WRegion *mgd); +extern void region_set_manager_pseudoactivity(WRegion *reg); +extern void region_unset_manager_pseudoactivity(WRegion *reg); + extern WHook *region_notify_hook; #endif /* ION_IONCORE_REGION_H */ diff --git a/ioncore/resize.c b/ioncore/resize.c index a8cff5a..33bfde0 100644 --- a/ioncore/resize.c +++ b/ioncore/resize.c @@ -1,7 +1,7 @@ /* * ion/ioncore/resize.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -478,7 +478,7 @@ bool moveresmode_do_end(WMoveresMode *mode, bool apply) set_saved(mode, reg); if(mode->infowin!=NULL){ - mainloop_defer_destroy((Obj*)mode->infowin); + region_dispose((WRegion*)mode->infowin, FALSE); mode->infowin=NULL; } destroy_obj((Obj*)mode); diff --git a/ioncore/resize.h b/ioncore/resize.h index 3a4f062..700c56e 100644 --- a/ioncore/resize.h +++ b/ioncore/resize.h @@ -1,7 +1,7 @@ /* * ion/ioncore/resize.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/return.c b/ioncore/return.c new file mode 100644 index 0000000..444f548 --- /dev/null +++ b/ioncore/return.c @@ -0,0 +1,160 @@ +/* + * ion/ioncore/return.h + * + * Copyright (c) Tuomo Valkonen 1999-2007. + * + * Ion is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + */ + +#include +#include + +#include "common.h" +#include "global.h" +#include "region.h" +#include "pholder.h" +#include "return.h" + + +/*{{{ Storage tree */ + + +static Rb_node retrb=NULL; + + +/*}}}*/ + + + +/*{{{ Set */ + + +bool region_do_set_return(WRegion *reg, WPHolder *ph) +{ + Rb_node node; + int found=0; + + assert(!OBJ_IS_BEING_DESTROYED(reg)); + + region_unset_return(reg); + + if(retrb==NULL){ + retrb=make_rb(); + if(retrb==NULL) + return FALSE; + } + + node=rb_insertp(retrb, reg, ph); + + region_notify_change(reg, ioncore_g.notifies.set_return); + + return (node!=NULL); +} + + +WPHolder *region_make_return_pholder(WRegion *reg) +{ + WRegion *mgr=region_manager(reg); + + if(mgr==NULL) + return NULL; + + return region_managed_get_pholder(mgr, reg); +} + + +/* +extern WPHolder *region_set_return(WRegion *reg) +{ + WPHolder *ph=region_make_return_pholder(reg); + + if(ph!=NULL){ + if(region_do_set_return(reg, ph)) + return ph; + destroy_obj((Obj*)ph); + } + + return NULL; +} +*/ + + +/*}}}*/ + + +/*{{{ Get */ + +Rb_node do_find(WRegion *reg) +{ + int found=0; + Rb_node node; + + if(retrb==NULL) + return NULL; + + node=rb_find_pkey_n(retrb, reg, &found); + + return (found ? node : NULL); +} + + +WPHolder *region_do_get_return(WRegion *reg) +{ + Rb_node node=do_find(reg); + + return (node!=NULL ? (WPHolder*)node->v.val : NULL); +} + + +WPHolder *region_get_return(WRegion *reg) +{ + /* Should managers be scanned? */ + return region_do_get_return(reg); +} + + +/*}}}*/ + + +/*{{{ Unset */ + + +static WPHolder *do_remove_node(Rb_node node) +{ + WPHolder *ph=(WPHolder*)node->v.val; + + rb_delete_node(node); + + return ph; +} + + +WPHolder *region_unset_get_return(WRegion *reg) +{ + Rb_node node; + + node=do_find(reg); + + if(node!=NULL){ + region_notify_change(reg, ioncore_g.notifies.unset_return); + return do_remove_node(node); + }else{ + return NULL; + } +} + + +void region_unset_return(WRegion *reg) +{ + WPHolder *ph=region_unset_get_return(reg); + + if(ph!=NULL) + mainloop_defer_destroy((Obj*)ph); +} + + +/*}}}*/ + diff --git a/ioncore/return.h b/ioncore/return.h new file mode 100644 index 0000000..6870f18 --- /dev/null +++ b/ioncore/return.h @@ -0,0 +1,34 @@ +/* + * ion/ioncore/return.h + * + * Copyright (c) Tuomo Valkonen 1999-2007. + * + * Ion is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + */ + +#ifndef ION_IONCORE_RETURN_H +#define ION_IONCORE_RETURN_H + +#include "region.h" +#include "pholder.h" + +/* Note: 'ph' is under the control of this 'return' module after succesfully + * (true return value) having been passed to this function and must no + * longer be destroyed by other code unless removed with unset_get. + */ +extern bool region_do_set_return(WRegion *reg, WPHolder *ph); + +/*extern WPHolder *region_set_return(WRegion *reg);*/ + +extern WPHolder *region_get_return(WRegion *reg); + +extern void region_unset_return(WRegion *reg); + +extern WPHolder *region_unset_get_return(WRegion *reg); + +extern WPHolder *region_make_return_pholder(WRegion *reg); + +#endif /* ION_IONCORE_RETURN_H */ diff --git a/ioncore/rootwin.c b/ioncore/rootwin.c index 5fc4891..6e75ee3 100644 --- a/ioncore/rootwin.c +++ b/ioncore/rootwin.c @@ -1,7 +1,7 @@ /* * ion/ioncore/rootwin.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -20,12 +20,6 @@ #include #include #include -/*#include */ -#ifdef CF_XINERAMA -#include -#elif defined(CF_SUN_XINERAMA) -#include -#endif #include #include "common.h" @@ -201,13 +195,14 @@ static void preinit_gr(WRootWin *rootwin) } -static WRootWin *preinit_rootwin(int xscr) +static Atom net_virtual_roots=None; + + +static bool rootwin_init(WRootWin *rootwin, int xscr) { Display *dpy=ioncore_g.dpy; - WRootWin *rootwin; WFitParams fp; Window root; - int i; /* Try to select input on the root window */ root=RootWindow(dpy, xscr); @@ -215,24 +210,16 @@ static WRootWin *preinit_rootwin(int xscr) redirect_error=FALSE; XSetErrorHandler(my_redirect_error_handler); - XSelectInput(dpy, root, IONCORE_EVENTMASK_ROOT); + XSelectInput(dpy, root, IONCORE_EVENTMASK_ROOT|IONCORE_EVENTMASK_SCREEN); XSync(dpy, 0); XSetErrorHandler(my_error_handler); if(redirect_error){ warn(TR("Unable to redirect root window events for screen %d."), xscr); - return NULL; + return FALSE; } - rootwin=ALLOC(WRootWin); - - if(rootwin==NULL) - return NULL; - - /* Init the struct */ - OBJ_INIT(rootwin, WRootWin); - rootwin->xscr=xscr; rootwin->default_cmap=DefaultColormap(dpy, xscr); rootwin->tmpwins=NULL; @@ -245,14 +232,12 @@ static WRootWin *preinit_rootwin(int xscr) fp.g.w=DisplayWidth(dpy, xscr); fp.g.h=DisplayHeight(dpy, xscr); - if(!window_do_init((WWindow*)rootwin, NULL, root, &fp)){ + if(!screen_init((WScreen*)rootwin, NULL, &fp, xscr, root)){ free(rootwin); - return NULL; + return FALSE; } - /* Note: this mask isn't right if some WScreen auses the same window. */ - ((WWindow*)rootwin)->event_mask=IONCORE_EVENTMASK_ROOT; - + ((WWindow*)rootwin)->event_mask=IONCORE_EVENTMASK_ROOT|IONCORE_EVENTMASK_SCREEN; ((WRegion*)rootwin)->flags|=REGION_BINDINGS_ARE_GRABBED|REGION_PLEASE_WARP; ((WRegion*)rootwin)->rootwin=rootwin; @@ -264,208 +249,9 @@ static WRootWin *preinit_rootwin(int xscr) preinit_gr(rootwin); netwm_init_rootwin(rootwin); - region_add_bindmap((WRegion*)rootwin, ioncore_rootwin_bindmap); - - return rootwin; -} - - -static Atom net_virtual_roots=None; - - -static WScreen *add_screen(WRootWin *rw, int id, const WRectangle *geom, - bool useroot) -{ - WScreen *scr; - CARD32 p[1]; - WFitParams fp; - - fp.g=*geom; - fp.mode=REGION_FIT_EXACT; - -#ifdef CF_ALWAYS_VIRTUAL_ROOT - useroot=FALSE; -#endif - - scr=create_screen(rw, id, &fp, useroot); - - if(scr==NULL) - return NULL; - - region_set_manager((WRegion*)scr, (WRegion*)rw); - - region_map((WRegion*)scr); - - if(!useroot){ - p[0]=region_xwindow((WRegion*)scr); - XChangeProperty(ioncore_g.dpy, WROOTWIN_ROOT(rw), net_virtual_roots, - XA_WINDOW, 32, PropModeAppend, (uchar*)&(p[0]), 1); - } - - return scr; -} - - -#ifdef CF_XINERAMA -static bool xinerama_sanity_check(XineramaScreenInfo *xi, int nxi) -{ - int i, j; - - for(i=0; i=xi[i].x_org && xi[j].x_org=xi[i].y_org && xi[j].y_org=monitors[i].x && - monitors[j].x=monitors[i].y && - monitors[j].yxor_gc); - window_deinit((WWindow*)rw); + rw->scr.mplex.win.win=None; + + screen_deinit(&rw->scr); } @@ -508,29 +302,6 @@ void rootwin_deinit(WRootWin *rw) /*{{{ region dynfun implementations */ -static void rootwin_do_set_focus(WRootWin *rootwin, bool warp) -{ - WRegion *sub; - - sub=REGION_ACTIVE_SUB(rootwin); - - if(sub==NULL || !REGION_IS_MAPPED(sub)){ - WScreen *scr; - FOR_ALL_SCREENS(scr){ - if(REGION_IS_MAPPED(scr)){ - sub=(WRegion*)scr; - break; - } - } - } - - if(sub!=NULL) - region_do_set_focus(sub, warp); - else - window_do_set_focus((WWindow*)rootwin, warp); -} - - static bool rootwin_fitrep(WRootWin *rootwin, WWindow *par, const WFitParams *fp) { @@ -551,30 +322,12 @@ static void rootwin_unmap(WRootWin *rootwin) } -static void rootwin_managed_remove(WRootWin *rootwin, WRegion *reg) -{ - region_unset_manager(reg, (WRegion*)rootwin); -} - - -static Window rootwin_x_window(WRootWin *rootwin) -{ - return WROOTWIN_ROOT(rootwin); -} - - /*}}}*/ /*{{{ Misc */ -static bool scr_ok(WRegion *r) -{ - return (OBJ_IS(r, WScreen) && REGION_IS_MAPPED(r)); -} - - /*EXTL_DOC * Returns previously active screen on root window \var{rootwin}. */ @@ -582,22 +335,17 @@ EXTL_SAFE EXTL_EXPORT_MEMBER WScreen *rootwin_current_scr(WRootWin *rootwin) { - WRegion *r=REGION_ACTIVE_SUB(rootwin); - WScreen *scr; - - /* There should be no non-WScreen as children or managed by us, but... */ - - if(r!=NULL && scr_ok(r)) - return (WScreen*)r; + WScreen *scr, *fb=NULL; FOR_ALL_SCREENS(scr){ - if(REGION_MANAGER(scr)==(WRegion*)rootwin - && REGION_IS_MAPPED(scr)){ - break; + if(REGION_MANAGER(scr)==(WRegion*)rootwin && REGION_IS_MAPPED(scr)){ + fb=scr; + if(REGION_IS_ACTIVE(scr)) + return scr; } } - return scr; + return (fb ? fb : &rootwin->scr); } @@ -610,16 +358,13 @@ WScreen *rootwin_current_scr(WRootWin *rootwin) static DynFunTab rootwin_dynfuntab[]={ {region_map, rootwin_map}, {region_unmap, rootwin_unmap}, - {region_do_set_focus, rootwin_do_set_focus}, - {(DynFun*)region_xwindow, (DynFun*)rootwin_x_window}, {(DynFun*)region_fitrep, (DynFun*)rootwin_fitrep}, - {region_managed_remove, rootwin_managed_remove}, END_DYNFUNTAB }; EXTL_EXPORT -IMPLCLASS(WRootWin, WWindow, rootwin_deinit, rootwin_dynfuntab); +IMPLCLASS(WRootWin, WScreen, rootwin_deinit, rootwin_dynfuntab); /*}}}*/ diff --git a/ioncore/rootwin.h b/ioncore/rootwin.h index 41dd89c..74e50bd 100644 --- a/ioncore/rootwin.h +++ b/ioncore/rootwin.h @@ -1,7 +1,7 @@ /* * ion/ioncore/rootwin.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -17,8 +17,10 @@ #include "screen.h" #include "gr.h" #include "rectangle.h" +#include "screen.h" + -#define WROOTWIN_ROOT(X) ((X)->wwin.win) +#define WROOTWIN_ROOT(X) (((WWindow*)(X))->win) #define FOR_ALL_ROOTWINS(RW) \ for(RW=ioncore_g.rootwins; \ RW!=NULL; \ @@ -26,7 +28,7 @@ DECLCLASS(WRootWin){ - WWindow wwin; + WScreen scr; int xscr; Colormap default_cmap; @@ -44,7 +46,7 @@ extern void rootwin_deinit(WRootWin *rootwin); extern WScreen *rootwin_current_scr(WRootWin *rootwin); extern void rootwin_manage_initial_windows(WRootWin *rootwin); -extern WRootWin *ioncore_manage_rootwin(int xscr, bool noxinerama); +extern WRootWin *create_rootwin(int xscr); #endif /* ION_IONCORE_ROOTWIN_H */ diff --git a/ioncore/saveload.c b/ioncore/saveload.c index e5902b3..bb67ac1 100644 --- a/ioncore/saveload.c +++ b/ioncore/saveload.c @@ -1,7 +1,7 @@ /* * ion/ioncore/saveload.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -226,6 +226,14 @@ bool ioncore_init_layout() FOR_ALL_SCREENS(scr){ ExtlTab scrtab=extl_table_none(); bool scrok=FALSE; + + /* Potential Xinerama or such support should set the screen ID + * of the root window to less than zero, and number its own + * fake screens up from 0. + */ + if(screen_id(scr)<0) + continue; + if(ok) scrok=extl_table_geti_t(tab, screen_id(scr), &scrtab); @@ -278,7 +286,14 @@ bool ioncore_save_layout() return FALSE; FOR_ALL_SCREENS(scr){ - ExtlTab scrtab=region_get_configuration((WRegion*)scr); + ExtlTab scrtab; + + /* See note above */ + if(screen_id(scr)<0) + continue; + + scrtab=region_get_configuration((WRegion*)scr); + if(scrtab==extl_table_none()){ warn(TR("Unable to get configuration for screen %d."), screen_id(scr)); diff --git a/ioncore/saveload.h b/ioncore/saveload.h index 27e3b3e..bc2ad6c 100644 --- a/ioncore/saveload.h +++ b/ioncore/saveload.h @@ -1,7 +1,7 @@ /* * ion/ioncore/saveload.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/screen.c b/ioncore/screen.c index 3b896bf..cac75a0 100644 --- a/ioncore/screen.c +++ b/ioncore/screen.c @@ -1,7 +1,7 @@ /* * ion/ioncore/screen.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -39,6 +39,9 @@ #include "group-ws.h" #include "mplex.h" #include "tags.h" +#include "gr.h" +#include "gr-util.h" +#include "conf.h" WHook *screen_managed_changed_hook=NULL; @@ -51,16 +54,16 @@ static void screen_update_infowin(WScreen *scr); /*{{{ Init/deinit */ -static bool screen_init(WScreen *scr, WRootWin *rootwin, - int id, const WFitParams *fp, bool useroot) +bool screen_init(WScreen *scr, WRootWin *parent, + const WFitParams *fp, int id, Window rootwin) { Window win; XSetWindowAttributes attr; ulong attrflags=0; + bool is_root=FALSE; scr->id=id; scr->atom_workspace=None; - scr->uses_root=useroot; scr->managed_off.x=0; scr->managed_off.y=0; scr->managed_off.w=0; @@ -72,38 +75,40 @@ static bool screen_init(WScreen *scr, WRootWin *rootwin, watch_init(&(scr->notifywin_watch)); watch_init(&(scr->infowin_watch)); - if(useroot){ - win=WROOTWIN_ROOT(rootwin); + if(parent==NULL){ + win=rootwin; + is_root=TRUE; }else{ attr.background_pixmap=ParentRelative; attrflags=CWBackPixmap; - win=XCreateWindow(ioncore_g.dpy, WROOTWIN_ROOT(rootwin), + win=XCreateWindow(ioncore_g.dpy, WROOTWIN_ROOT(parent), fp->g.x, fp->g.y, fp->g.w, fp->g.h, 0, - DefaultDepth(ioncore_g.dpy, rootwin->xscr), + DefaultDepth(ioncore_g.dpy, parent->xscr), InputOutput, - DefaultVisual(ioncore_g.dpy, rootwin->xscr), + DefaultVisual(ioncore_g.dpy, parent->xscr), attrflags, &attr); if(win==None) return FALSE; + } - if(!mplex_do_init((WMPlex*)scr, (WWindow*)rootwin, win, fp, FALSE)) + if(!mplex_do_init((WMPlex*)scr, (WWindow*)parent, fp, win)){ + if(!is_root) + XDestroyWindow(ioncore_g.dpy, win); return FALSE; + } /*scr->mplex.win.region.rootwin=rootwin; region_set_parent((WRegion*)scr, (WRegion*)rootwin);*/ scr->mplex.flags|=MPLEX_ADD_TO_END; scr->mplex.win.region.flags|=REGION_BINDINGS_ARE_GRABBED; - if(useroot) + + if(!is_root){ scr->mplex.win.region.flags|=REGION_MAPPED; + window_select_input((WWindow*)scr, IONCORE_EVENTMASK_SCREEN); + } - window_select_input(&(scr->mplex.win), - FocusChangeMask|EnterWindowMask| - KeyPressMask|KeyReleaseMask| - ButtonPressMask|ButtonReleaseMask| - (useroot ? IONCORE_EVENTMASK_ROOT : 0)); - if(id==0){ scr->atom_workspace=XInternAtom(ioncore_g.dpy, "_ION_WORKSPACE", False); @@ -116,10 +121,12 @@ static bool screen_init(WScreen *scr, WRootWin *rootwin, } } - /* Add rootwin's bindings to screens (ungrabbed) so that bindings - * are called with the proper region. + /* Add all the needed bindings here; mplex does nothing so that + * frames don't have to remove extra bindings. */ - region_add_bindmap((WRegion*)scr, ioncore_rootwin_bindmap); + region_add_bindmap((WRegion*)scr, ioncore_screen_bindmap); + region_add_bindmap((WRegion*)scr, ioncore_mplex_bindmap); + region_add_bindmap((WRegion*)scr, ioncore_mplex_toplevel_bindmap); LINK_ITEM(ioncore_g.screens, scr, next_scr, prev_scr); @@ -127,10 +134,9 @@ static bool screen_init(WScreen *scr, WRootWin *rootwin, } -WScreen *create_screen(WRootWin *rootwin, int id, const WFitParams *fp, - bool useroot) +WScreen *create_screen(WRootWin *parent, const WFitParams *fp, int id) { - CREATEOBJ_IMPL(WScreen, screen, (p, rootwin, id, fp, useroot)); + CREATEOBJ_IMPL(WScreen, screen, (p, parent, fp, id, None)); } @@ -138,9 +144,6 @@ void screen_deinit(WScreen *scr) { UNLINK_ITEM(ioncore_g.screens, scr, next_scr, prev_scr); - if(scr->uses_root) - scr->mplex.win.win=None; - mplex_deinit((WMPlex*)scr); } @@ -266,8 +269,7 @@ void screen_activated(WScreen *scr) static void do_notify(WScreen *scr, Watch *watch, bool right, - const char *str, - char *style, const char *attr) + const char *str, char *style) { WInfoWin *iw=(WInfoWin*)(watch->obj); @@ -304,20 +306,19 @@ static void do_notify(WScreen *scr, Watch *watch, bool right, watch_setup(watch, (Obj*)iw, NULL); } - infowin_set_attr2(iw, attr, NULL); infowin_set_text(iw, str); } void screen_notify(WScreen *scr, const char *str) { - do_notify(scr, &scr->notifywin_watch, FALSE, str, "actnotify", NULL); + do_notify(scr, &scr->notifywin_watch, FALSE, str, "actnotify"); } -void screen_windowinfo(WScreen *scr, const char *str, const char *attr) +void screen_windowinfo(WScreen *scr, const char *str) { - do_notify(scr, &scr->infowin_watch, TRUE, str, "tab-info", attr); + do_notify(scr, &scr->infowin_watch, TRUE, str, "tab-info"); } @@ -326,7 +327,7 @@ void screen_unnotify(WScreen *scr) Obj *iw=scr->notifywin_watch.obj; if(iw!=NULL){ watch_reset(&(scr->notifywin_watch)); - mainloop_defer_destroy(iw); + region_dispose((WRegion*)iw, FALSE); } } @@ -336,7 +337,7 @@ void screen_nowindowinfo(WScreen *scr) Obj *iw=scr->infowin_watch.obj; if(iw!=NULL){ watch_reset(&(scr->infowin_watch)); - mainloop_defer_destroy(iw); + region_dispose((WRegion*)iw, FALSE); } } @@ -397,35 +398,73 @@ static void screen_notify_tag(WScreen *scr) } +GR_DEFATTR(active); +GR_DEFATTR(inactive); +GR_DEFATTR(selected); +GR_DEFATTR(tagged); +GR_DEFATTR(not_tagged); +GR_DEFATTR(not_dragged); +GR_DEFATTR(activity); +GR_DEFATTR(no_activity); + + +static void init_attr() +{ + GR_ALLOCATTR_BEGIN; + GR_ALLOCATTR(active); + GR_ALLOCATTR(inactive); + GR_ALLOCATTR(selected); + GR_ALLOCATTR(tagged); + GR_ALLOCATTR(not_tagged); + GR_ALLOCATTR(not_dragged); + GR_ALLOCATTR(no_activity); + GR_ALLOCATTR(activity); + GR_ALLOCATTR_END; +} + + static void screen_update_infowin(WScreen *scr) { WRegion *reg=mplex_mx_current(&(scr->mplex)); bool tag=(reg!=NULL && region_is_tagged(reg)); - bool act=(reg!=NULL && region_is_activity_r(reg)); + bool act=(reg!=NULL && region_is_activity_r(reg) && !REGION_IS_ACTIVE(scr)); + bool sac=REGION_IS_ACTIVE(scr); if(tag || act){ const char *n=region_displayname(reg); - char *attr=NULL; + WInfoWin *iw; + + screen_windowinfo(scr, n); - libtu_asprintf(&attr, "%s-selected-%s-not_dragged-%s", - (REGION_IS_ACTIVE(scr) ? "active" : "inactive"), - (tag ? "tagged" : "not_tagged"), - (act ? "activity" : "no_activity")); + iw=(WInfoWin*)scr->infowin_watch.obj; - screen_windowinfo(scr, n, attr); /* NULL attr ok */ + if(iw!=NULL){ + 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, sac ? GR_ATTR(active) : GR_ATTR(inactive)); + gr_stylespec_set(spec, tag ? GR_ATTR(tagged) : GR_ATTR(not_tagged)); + gr_stylespec_set(spec, act ? GR_ATTR(activity) : GR_ATTR(no_activity)); + } + }else{ screen_nowindowinfo(scr); } } -static void screen_managed_notify(WScreen *scr, WRegion *reg, const char *how) +static void screen_managed_notify(WScreen *scr, WRegion *reg, WRegionNotify how) { - if(strcmp(how, "sub-activity")==0){ + if(how==ioncore_g.notifies.sub_activity){ /* TODO: multiple calls */ mainloop_defer_action((Obj*)scr, (WDeferredAction*)screen_notify_activity); - }else if(strcmp(how, "tag")==0){ + }else if(how==ioncore_g.notifies.tag){ mainloop_defer_action((Obj*)scr, (WDeferredAction*)screen_notify_tag); } @@ -439,10 +478,7 @@ static void screen_managed_notify(WScreen *scr, WRegion *reg, const char *how) /*EXTL_DOC - * Find the screen with numerical id \var{id}. If Xinerama is - * not present, \var{id} corresponds to X screen numbers. Otherwise - * the ids are some arbitrary ordering of Xinerama rootwins. - * If \var{id} is $-1$, the screen with the highest id is returned. + * Find the screen with numerical id \var{id}. */ EXTL_SAFE EXTL_EXPORT @@ -644,13 +680,16 @@ static WRegion *do_create_initial(WWindow *parent, const WFitParams *fp, static bool create_initial_ws(WScreen *scr) { WRegion *reg=NULL; - WMPlexAttachParams par; - - par.flags=0; + WMPlexAttachParams par=MPLEXATTACHPARAMS_INIT; + ExtlTab lo=ioncore_get_layout("default"); - reg=mplex_do_attach_new(&scr->mplex, &par, - (WRegionCreateFn*)groupws_load_default, - NULL); + if(lo==extl_table_none()){ + reg=mplex_do_attach_new(&scr->mplex, &par, + (WRegionCreateFn*)create_groupws, NULL); + }else{ + reg=mplex_attach_new_(&scr->mplex, &par, 0, lo); + extl_unref_table(lo); + } if(reg==NULL){ warn(TR("Unable to create a workspace on screen %d."), scr->id); diff --git a/ioncore/screen.h b/ioncore/screen.h index 11c83fa..6555c17 100644 --- a/ioncore/screen.h +++ b/ioncore/screen.h @@ -1,7 +1,7 @@ /* * ion/ioncore/screen.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -17,7 +17,6 @@ #include "common.h" #include "mplex.h" #include "rectangle.h" -#include "rootwin.h" #include "pholder.h" #define FOR_ALL_SCREENS(SCR) \ @@ -50,9 +49,15 @@ DECLCLASS(WScreen){ Watch infowin_watch; }; -extern WScreen *create_screen(WRootWin *rootwin, int id, - const WFitParams *fp, - bool useroot); +/* rootwin should only be set if parent is NULL, and this WScreen is + * actually a root window. + */ +extern bool screen_init(WScreen *scr, WRootWin *parent, + const WFitParams *fp, int id, Window rootwin); + +extern WScreen *create_screen(WRootWin *parent, const WFitParams *fp, int id); + +extern void screen_deinit(WScreen *scr); extern int screen_id(WScreen *scr); @@ -62,16 +67,11 @@ extern bool screen_init_layout(WScreen *scr, ExtlTab tab); extern void screen_notify(WScreen *scr, const char *notstr); extern void screen_unnotify(WScreen *scr); -extern void screen_windowinfo(WScreen *scr, const char *name, const char *attr); +extern void screen_windowinfo(WScreen *scr, const char *name); extern void screen_nowindowinfo(WScreen *scr); extern WPHolder *screen_get_rescue_pholder_for(WScreen *scr, WRegion *mgd); -/* For viewports corresponding to Xinerama rootwins is initially set - * to the Xinerama screen number. When Xinerama is not enabled, is - * the X screen number (which is the same for all Xinerama rootwins). - * For all other viewports is undefined. - */ extern WScreen *ioncore_find_screen_id(int id); extern WScreen *ioncore_goto_screen_id(int id); extern WScreen *ioncore_goto_next_screen(); diff --git a/ioncore/selection.c b/ioncore/selection.c index 4bb8cd7..3941436 100644 --- a/ioncore/selection.c +++ b/ioncore/selection.c @@ -1,7 +1,7 @@ /* * ion/ioncore/selection.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/selection.h b/ioncore/selection.h index 6a49786..7710e08 100644 --- a/ioncore/selection.h +++ b/ioncore/selection.h @@ -1,7 +1,7 @@ /* * ion/ioncore/selection.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/sizehint.c b/ioncore/sizehint.c index 50c1c99..b574753 100644 --- a/ioncore/sizehint.c +++ b/ioncore/sizehint.c @@ -1,7 +1,7 @@ /* * ion/ioncore/sizehint.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/sizehint.h b/ioncore/sizehint.h index 6065e74..4ddfb41 100644 --- a/ioncore/sizehint.h +++ b/ioncore/sizehint.h @@ -1,7 +1,7 @@ /* * ion/ioncore/sizehint.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/sizepolicy.c b/ioncore/sizepolicy.c index 6e23875..7101da8 100644 --- a/ioncore/sizepolicy.c +++ b/ioncore/sizepolicy.c @@ -1,7 +1,7 @@ /* * ion/ioncore/sizepolicy.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/sizepolicy.h b/ioncore/sizepolicy.h index 0984737..602652d 100644 --- a/ioncore/sizepolicy.h +++ b/ioncore/sizepolicy.h @@ -1,7 +1,7 @@ /* * ion/ioncore/sizepolicy.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/stacking.c b/ioncore/stacking.c index 8d696cb..9d77ac9 100644 --- a/ioncore/stacking.c +++ b/ioncore/stacking.c @@ -1,7 +1,7 @@ /* * ion/ioncore/stacking.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/stacking.h b/ioncore/stacking.h index a5e3464..2810bda 100644 --- a/ioncore/stacking.h +++ b/ioncore/stacking.h @@ -1,7 +1,7 @@ /* * ion/ioncore/stacking.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/strings.c b/ioncore/strings.c index 9f2bbd3..37487fd 100644 --- a/ioncore/strings.c +++ b/ioncore/strings.c @@ -1,7 +1,7 @@ /* * ion/ioncore/strings.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/strings.h b/ioncore/strings.h index 0f2a1f4..df30189 100644 --- a/ioncore/strings.h +++ b/ioncore/strings.h @@ -1,7 +1,7 @@ /* * ion/ioncore/strings.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/tags.c b/ioncore/tags.c index 6b7d5c2..383af0c 100644 --- a/ioncore/tags.c +++ b/ioncore/tags.c @@ -1,7 +1,7 @@ /* * ion/ioncore/tags.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -11,8 +11,11 @@ #include #include + +#include "global.h" #include "region.h" #include "tags.h" +#include "extlconv.h" static ObjList *taglist=NULL; @@ -34,7 +37,7 @@ bool region_set_tagged(WRegion *reg, int sp) reg->flags|=REGION_TAGGED; objlist_insert_last(&taglist, (Obj*)reg); } - region_notify_change(reg, "tag"); + region_notify_change(reg, ioncore_g.notifies.tag); } return nset; @@ -69,7 +72,7 @@ bool region_is_tagged(WRegion *reg) EXTL_EXPORT void ioncore_clear_tags() { - while(ioncore_tags_take_first()!=NULL) + while(ioncore_tagged_take_first()!=NULL) /* nothing */; } @@ -85,48 +88,34 @@ void ioncore_clear_tags() */ EXTL_SAFE EXTL_EXPORT -WRegion *ioncore_tags_first() +WRegion *ioncore_tagged_first() { return (WRegion*)OBJLIST_FIRST(WRegion*, taglist); } -WRegion *ioncore_tags_take_first() +WRegion *ioncore_tagged_take_first() { WRegion *reg=(WRegion*)objlist_take_first(&taglist); if(reg!=NULL){ reg->flags&=~REGION_TAGGED; - region_notify_change(reg, "tag"); + region_notify_change(reg, ioncore_g.notifies.tag); } return reg; } /*EXTL_DOC - * Returns a list of tagged regions. + * Iterate over tagged regions until \var{iterfn} returns \code{false}. + * The function itself returns \code{true} if it reaches the end of list + * without this happening. */ EXTL_SAFE EXTL_EXPORT -ExtlTab ioncore_tagged_list() +bool ioncore_tagged_i(ExtlFn iterfn) { - int n=0; - ExtlTab tab; - WRegion *region; - ObjListIterTmp tmp; - - region=ioncore_tags_first(); - if(!region) - return extl_table_none(); - - tab=extl_create_table(); - - FOR_ALL_ON_OBJLIST(WRegion*, region, taglist, tmp){ - if(extl_table_seti_o(tab, n+1, (Obj*)region)) - n++; - } - - return tab; + return extl_iter_objlist(iterfn, taglist); } diff --git a/ioncore/tags.h b/ioncore/tags.h index 478d47b..a8fe8f5 100644 --- a/ioncore/tags.h +++ b/ioncore/tags.h @@ -1,7 +1,7 @@ /* * ion/ioncore/tags.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -19,7 +19,7 @@ extern bool region_set_tagged(WRegion *reg, int sp); extern bool region_is_tagged(WRegion *reg); extern void ioncore_clear_tags(); -extern WRegion *ioncore_tags_first(); -extern WRegion *ioncore_tags_take_first(); +extern WRegion *ioncore_tagged_first(); +extern WRegion *ioncore_tagged_take_first(); #endif /* ION_IONCORE_TAGS_H */ diff --git a/ioncore/window.c b/ioncore/window.c index 8d2986f..0b12200 100644 --- a/ioncore/window.c +++ b/ioncore/window.c @@ -1,7 +1,7 @@ /* * ion/ioncore/window.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -57,9 +57,17 @@ void window_release(WWindow *wwin) /*{{{ Init, create */ -bool window_do_init(WWindow *wwin, WWindow *par, Window win, - const WFitParams *fp) +bool window_do_init(WWindow *wwin, WWindow *par, + const WFitParams *fp, Window win) { + if(win==None){ + assert(par!=NULL); + win=create_xwindow(region_rootwin_of((WRegion*)par), + par->win, &(fp->g)); + if(win==None) + return FALSE; + } + wwin->win=win; wwin->xic=NULL; wwin->event_mask=0; @@ -67,10 +75,8 @@ bool window_do_init(WWindow *wwin, WWindow *par, Window win, region_init(&(wwin->region), par, fp); - if(win!=None){ - XSaveContext(ioncore_g.dpy, win, ioncore_g.win_context, - (XPointer)wwin); - } + XSaveContext(ioncore_g.dpy, win, ioncore_g.win_context, + (XPointer)wwin); return TRUE; } @@ -78,14 +84,7 @@ bool window_do_init(WWindow *wwin, WWindow *par, Window win, bool window_init(WWindow *wwin, WWindow *par, const WFitParams *fp) { - Window win; - - win=create_xwindow(region_rootwin_of((WRegion*)par), - par->win, &(fp->g)); - if(win==None) - return FALSE; - /* window_init does not fail */ - return window_do_init(wwin, par, win, fp); + return window_do_init(wwin, par, fp, None); } @@ -93,11 +92,14 @@ void window_deinit(WWindow *wwin) { region_deinit((WRegion*)wwin); + region_pointer_focus_hack(&wwin->region); + if(wwin->xic!=NULL) XDestroyIC(wwin->xic); - + if(wwin->win!=None){ XDeleteContext(ioncore_g.dpy, wwin->win, ioncore_g.win_context); + /* Probably should not try destroy if root window... */ XDestroyWindow(ioncore_g.dpy, wwin->win); } @@ -174,6 +176,8 @@ void window_map(WWindow *wwin) void window_unmap(WWindow *wwin) { + region_pointer_focus_hack(&wwin->region); + XUnmapWindow(ioncore_g.dpy, wwin->win); REGION_MARK_UNMAPPED(wwin); } diff --git a/ioncore/window.h b/ioncore/window.h index b9f4ffa..e4de5bb 100644 --- a/ioncore/window.h +++ b/ioncore/window.h @@ -1,7 +1,7 @@ /* * ion/ioncore/window.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -29,8 +29,8 @@ DECLCLASS(WWindow){ extern bool window_init(WWindow *p, WWindow *parent, const WFitParams *fp); -extern bool window_do_init(WWindow *p, WWindow *parent, Window win, - const WFitParams *fp); +extern bool window_do_init(WWindow *p, WWindow *parent, + const WFitParams *fp, Window win); extern void window_deinit(WWindow *win); DYNFUN void window_draw(WWindow *wwin, bool complete); diff --git a/ioncore/xic.c b/ioncore/xic.c index 304adf4..21339d6 100644 --- a/ioncore/xic.c +++ b/ioncore/xic.c @@ -1,7 +1,7 @@ /* * ion/ioncore/xic.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/xic.h b/ioncore/xic.h index dcc3de6..f745442 100644 --- a/ioncore/xic.h +++ b/ioncore/xic.h @@ -1,7 +1,7 @@ /* * ion/ioncore/xic.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/xwindow.c b/ioncore/xwindow.c index 16491c7..9ce3df2 100644 --- a/ioncore/xwindow.c +++ b/ioncore/xwindow.c @@ -1,7 +1,7 @@ /* * ion/ioncore/xwindow.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/ioncore/xwindow.h b/ioncore/xwindow.h index 50e7db5..6379ddf 100644 --- a/ioncore/xwindow.h +++ b/ioncore/xwindow.h @@ -1,7 +1,7 @@ /* * ion/ioncore/xwindow.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/libmainloop/defer.c b/libmainloop/defer.c index c79e2ce..dfc0e89 100644 --- a/libmainloop/defer.c +++ b/libmainloop/defer.c @@ -1,7 +1,7 @@ /* * ion/libmainloop/defer.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/libmainloop/defer.h b/libmainloop/defer.h index 3c6807e..ee7d400 100644 --- a/libmainloop/defer.h +++ b/libmainloop/defer.h @@ -1,7 +1,7 @@ /* * ion/libmainloop/defer.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/libmainloop/exec.c b/libmainloop/exec.c index 3f0f264..6038e36 100644 --- a/libmainloop/exec.c +++ b/libmainloop/exec.c @@ -1,7 +1,7 @@ /* * ion/mainloop/exec.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/libmainloop/exec.h b/libmainloop/exec.h index c9278b3..796e453 100644 --- a/libmainloop/exec.h +++ b/libmainloop/exec.h @@ -1,7 +1,7 @@ /* * ion/libmainloop/exec.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/libmainloop/hooks.c b/libmainloop/hooks.c index 1a15bc9..9b873a5 100644 --- a/libmainloop/hooks.c +++ b/libmainloop/hooks.c @@ -1,7 +1,7 @@ /* * ion/mainloop/hooks.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -95,6 +95,9 @@ EXTL_SAFE EXTL_EXPORT WHook *mainloop_get_hook(const char *name) { + if(name==NULL) + return NULL; + if(named_hooks!=NULL){ bool found=FALSE; Rb_node node=rb_find_key_n(named_hooks, name, &found); diff --git a/libmainloop/hooks.h b/libmainloop/hooks.h index 63d3554..11487de 100644 --- a/libmainloop/hooks.h +++ b/libmainloop/hooks.h @@ -1,7 +1,7 @@ /* * ion/mainloop/hooks.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/libmainloop/signal.c b/libmainloop/signal.c index ddf6aba..fea01ba 100644 --- a/libmainloop/signal.c +++ b/libmainloop/signal.c @@ -1,7 +1,7 @@ /* * ion/libmainloop/signal.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/libmainloop/signal.h b/libmainloop/signal.h index 7867c18..7e8682e 100644 --- a/libmainloop/signal.h +++ b/libmainloop/signal.h @@ -1,7 +1,7 @@ /* * ion/mainloop/signal.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/libtu/README b/libtu/README index cce76e5..4143c2a 100644 --- a/libtu/README +++ b/libtu/README @@ -1,7 +1,7 @@ libtu -Copyright (c) Tuomo Valkonen 1999-2004. +Copyright (c) Tuomo Valkonen 1999-2007. @@ -29,3 +29,5 @@ is included in snprintf_2.2/ and is used by default. To use the system's versions of these functions, if available, modify system.mk. +The implementation of red-black trees is based on that by +James S. Plank; see README.rb for details. diff --git a/libtu/exact-version b/libtu/exact-version index 20aff08..420d613 100644 --- a/libtu/exact-version +++ b/libtu/exact-version @@ -1,6 +1,18 @@ Context: +[Clean-up and pending updates +Tuomo Valkonen **20070129141139] + +[stringstore_get should work on STRINGID_NONE too. +Tuomo Valkonen **20070126232827] + +[Added stringstore_find/alloc_n +Tuomo Valkonen **20070125191555] + +[Added stringstore_ref +Tuomo Valkonen **20070121200255] + [Path fix Tuomo Valkonen **20061016223205] diff --git a/libtu/np-conv.h b/libtu/np-conv.h deleted file mode 100644 index c6c13c7..0000000 --- a/libtu/np-conv.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - * libtu/np-conv.h - * - * Copyright (c) Tuomo Valkonen 1999-2002. - * - * You may distribute and modify this library under the terms of either - * the Clarified Artistic License or the GNU LGPL, version 2.1 or later. - */ - -#include - -#ifdef NP_SIMPLE_IMPL - -#define FN_NUM_TO_SIGNED(T, UMAX, MAX, MIN) \ - static int num_to_##T(T *ret, const NPNum *num, bool allow_uns_big) \ - { \ - if(num->type!=NPNUM_INT) \ - return E_TOKZ_NOTINT; \ - \ - if(!num->negative){ \ - *ret=num->ival; \ - if(allow_uns_big?num->ival>UMAX:num->ival>MAX) \ - return E_TOKZ_RANGE; \ - }else{ \ - *ret=-num->ival; \ - if(num->ival>-(ulong)MIN) \ - return E_TOKZ_RANGE; \ - } \ - return 0; \ - } - -#define FN_NUM_TO_UNSIGNED(T, UMAX, MIN) \ - static int num_to_##T(T *ret, const NPNum *num, bool allow_neg) \ - { \ - if(num->type!=NPNUM_INT) \ - return E_TOKZ_NOTINT; \ - \ - if(!num->negative){ \ - *ret=num->ival; \ - if(num->ival>UMAX) \ - return E_TOKZ_RANGE; \ - }else{ \ - *ret=-num->ival; \ - if(!allow_neg || num->ival>(ulong)-MIN) \ - return E_TOKZ_RANGE; \ - } \ - return 0; \ - } - -#define FN_NUM_TO_FLOAT(T, POW) \ - static int num_to_##T(T *ret, const NPNum *num) \ - { \ - *ret=(num->negative?-num->fval:num->fval); \ - return 0; \ - } - -#else /* NP_SIMPLE_IMPL */ - -#define FN_NUM_TO_SIGNED(T, UMAX, MAX, MIN) \ - static int num_to_##T(T *ret, const NPNum *num, bool allow_uns_big) \ - { \ - if(num->exponent) \ - return E_TOKZ_NOTINT; \ - if(num->nmantissa>0) \ - return E_TOKZ_RANGE; \ - \ - if(!num->negative){ \ - *ret=num->mantissa[0]; \ - if(allow_uns_big?num->mantissa[0]>UMAX:num->mantissa[0]>MAX) \ - return E_TOKZ_RANGE; \ - }else{ \ - *ret=-num->mantissa[0]; \ - if(num->mantissa[0]>-(ulong)MIN) \ - return E_TOKZ_RANGE; \ - } \ - return 0; \ -} - -#define FN_NUM_TO_UNSIGNED(T, UMAX, MIN) \ - static int num_to_##T(T *ret, const NPNum *num, bool allow_neg) \ - { \ - if(num->exponent) \ - return E_TOKZ_NOTINT; \ - if(num->nmantissa>0) \ - return E_TOKZ_RANGE; \ - \ - if(!num->negative){ \ - *ret=num->mantissa[0]; \ - if(num->mantissa[0]>UMAX) \ - return E_TOKZ_RANGE; \ - }else{ \ - *ret=-num->mantissa[0]; \ - if(!allow_neg || num->mantissa[0]>(ulong)-MIN) \ - return E_TOKZ_RANGE; \ - } \ - return 0; \ -} - - -#define FN_NUM_TO_FLOAT(T, POW) \ - static int num_to_##T(T *ret, const NPNum *num) \ - { \ - T d=0; \ - int i; \ - \ - for(i=num->nmantissa;i>=0;i--) \ - d=d*(T)(ULONG_MAX+1.0)+num->mantissa[i]; \ - \ - d*=POW(num->base, num->exponent); \ - *ret=d; \ - \ - return 0; \ - } - -#endif /* NP_SIMPLE_IMPL */ - -FN_NUM_TO_SIGNED(long, ULONG_MAX, LONG_MAX, LONG_MIN) -FN_NUM_TO_SIGNED(char, UCHAR_MAX, CHAR_MAX, CHAR_MIN) -FN_NUM_TO_FLOAT(double, pow) - -#undef NEG diff --git a/libtu/numparser2.h b/libtu/numparser2.h deleted file mode 100644 index b43e2ec..0000000 --- a/libtu/numparser2.h +++ /dev/null @@ -1,272 +0,0 @@ -/* - * libtu/numparser2.h - * - * Copyright (c) Tuomo Valkonen 1999-2002. - * - * You may distribute and modify this library under the terms of either - * the Clarified Artistic License or the GNU LGPL, version 2.1 or later. - */ - -#define MAX_MANTISSA 10 /* should be enough for our needs */ -#define ULONG_SIZE (sizeof(ulong)*8) - -enum{ - NPNUM_INT, - NPNUM_FLOAT -}; - -#ifdef NP_SIMPLE_IMPL - -typedef struct _NPNum{ - int type; - int base; - bool negative; - double fval; - ulong ival; -} NPNum; - -#define NUM_INIT {0, 0, 0, 0.0, 0} - -static int npnum_mulbase_add(NPNum *num, long base, long v) -{ - double iold=num->ival; - - num->fval=num->fval*base+(double)v; - - num->ival*=base; - - if(num->ivaltype=NPNUM_FLOAT; - - num->ival+=v; - - return 0; -} - -#else /* NP_SIMPLE_IMPL */ - -typedef struct _NPNum{ - unsigned char nmantissa; - int type; - int base; - bool negative; - ulong mantissa[MAX_MANTISSA]; - long exponent; -} NPNum; - -#define NUM_INIT {0, 0, 0, 0, {0,}, 0} - -#define ADD_EXP(NUM, X) (NUM)->exponent+=(X); - -#if defined(__GNUG__) && defined(i386) && !defined(NP_NO_I386_ASM) - #define NP_I386_ASM -#endif - -static int npnum_mulbase_add(NPNum *num, long base, long v) -{ - long i, j; - ulong overflow; -#ifndef NP_I386_ASM - ulong val; -#endif - - for(i=num->nmantissa;i>=0;i--){ -#ifdef NP_I386_ASM - __asm__("mul %4\n" - : "=a" (num->mantissa[i]), "=d" (overflow) - : "0" (num->mantissa[i]), "1" (0), "q" (base) - : "eax", "edx"); -#else - overflow=0; - val=num->mantissa[i]; - - if(valmantissa[i]=val; -#endif - if(overflow){ - if(i==num->nmantissa){ - if(num->nmantissa==MAX_MANTISSA) - return E_TOKZ_TOOBIG; - num->nmantissa++; - } - num->mantissa[i+1]+=overflow; - } - } - num->mantissa[0]+=v; - - return 0; -} - -#undef NP_I386_ASM - -#endif /* NP_SIMPLE_IMPL */ - - -/* */ - - -static bool is_end(int c) -{ - /* oops... EOF was missing */ - return (c==EOF || (c!='.' && ispunct(c)) || isspace(c) || iscntrl(c)); -} - - -/* */ - - -static int parse_exponent(NPNum *num, Tokenizer *tokz, int c) -{ - long exp=0; - bool neg=FALSE; - int err=0; - - c=GETCH(); - - if(c=='-' || c=='+'){ - if(c=='-') - neg=TRUE; - c=GETCH(); - } - - for(; 1; c=GETCH()){ - if(isdigit(c)){ - exp*=10; - exp+=c-'0'; - }else if(is_end(c)){ - UNGETCH(c); - break; - }else{ - err=E_TOKZ_NUMFMT; - } - } - - if(neg) - exp*=-1; - -#ifndef NP_SIMPLE_IMPL - ADD_EXP(num, exp); -#else - num->fval*=pow(num->base, exp); -#endif - return err; -} - - -static int parse_number(NPNum *num, Tokenizer *tokz, int c) -{ - int base=10; - int dm=1; - int err=0; - int tmp; -#ifdef NP_SIMPLE_IMPL - double divisor=base; -#endif - - if(c=='-' || c=='+'){ - if(c=='-') - num->negative=TRUE; - c=GETCH(); - if(!isdigit(c)) - err=E_TOKZ_NUMFMT; - } - - if(c=='0'){ - dm=0; - c=GETCH(); - if(c=='x' || c=='X'){ - base=16; - c=GETCH(); - }else if(c=='b' || c=='B'){ - base=2; - c=GETCH(); - }else if('0'<=c && c<='7'){ - base=8; - }else{ - dm=2; - } - } - - num->base=base; - - for(; 1; c=GETCH()){ - if((c=='e' || c=='E') && dm!=0){ - if(dm<2){ - err=E_TOKZ_NUMFMT; - continue; - } - tmp=parse_exponent(num, tokz, c); - if(err==0) - err=tmp; - break; - } - - if(isxdigit(c)){ - if('0'<=c && c<='9') - c-='0'; - else if(isupper(c)) - c-='A'-10; - else - c-='a'-10; - - if(c>=base) - err=E_TOKZ_NUMFMT; - -#ifdef NP_SIMPLE_IMPL - if(dm==3){ - num->fval+=(double)c/divisor; - divisor*=base; - }else -#endif - { - tmp=npnum_mulbase_add(num, base, c); - if(err==0) - err=tmp; - } - - if(dm==1) - dm=2; -#ifndef NP_SIMPLE_IMPL - else if(dm==3) - ADD_EXP(num, -1); -#endif - continue; - } - - if(c=='.'){ - if(dm!=2){ - err=E_TOKZ_NUMFMT; - } - dm=3; -#ifdef NP_SIMPLE_IMPL - num->type=NPNUM_FLOAT; - divisor=base; -#endif - continue; - } - - if(is_end(c)){ - UNGETCH(c); - break; - } - - err=E_TOKZ_NUMFMT; - } - -#ifndef NP_SIMPLE_IMPL - num->type=(num->exponent==0 ? NPNUM_INT : NPNUM_FLOAT); -#endif - - return err; -} diff --git a/libtu/stringstore.c b/libtu/stringstore.c index 6f54387..5529820 100644 --- a/libtu/stringstore.c +++ b/libtu/stringstore.c @@ -1,13 +1,14 @@ /* * libtu/stringstore.c * - * Copyright (c) Tuomo Valkonen 2004. + * Copyright (c) Tuomo Valkonen 2004-2007. * * You may distribute and modify this library under the terms of either * the Clarified Artistic License or the GNU LGPL, version 2.1 or later. */ #include +#include #include "misc.h" #include "output.h" @@ -20,19 +21,42 @@ static Rb_node stringstore=NULL; const char *stringstore_get(StringId id) { - return (const char*)(((Rb_node)id)->k.key); + return (id==STRINGID_NONE + ? NULL + : (const char*)(((Rb_node)id)->k.key)); } + +typedef struct{ + const char *key; + uint len; +} D; + +static int cmp(const void *d_, const char *nodekey) +{ + D *d=(D*)d_; -StringId stringstore_find(const char *str) + int res=strncmp(d->key, nodekey, d->len); + + return (res!=0 + ? res + : (nodekey[d->len]=='\0' ? 0 : 1)); +} + + +StringId stringstore_find_n(const char *str, uint l) { Rb_node node; int found=0; + D d; if(stringstore==NULL) return STRINGID_NONE; - node=rb_find_key_n(stringstore, str, &found); + d.key=str; + d.len=l; + + node=rb_find_gkey_n(stringstore, &d, (Rb_compfn*)cmp, &found); if(!found) return STRINGID_NONE; @@ -41,9 +65,15 @@ StringId stringstore_find(const char *str) } -StringId stringstore_alloc(const char *str) +StringId stringstore_find(const char *str) { - Rb_node node=(Rb_node)stringstore_find(str); + return stringstore_find_n(str, strlen(str)); +} + + +StringId stringstore_alloc_n(const char *str, uint l) +{ + Rb_node node=(Rb_node)stringstore_find_n(str, l); char *s; if(node!=NULL){ @@ -57,7 +87,7 @@ StringId stringstore_alloc(const char *str) return STRINGID_NONE; } - s=scopy(str); + s=scopyn(str, l); if(s==NULL) return STRINGID_NONE; @@ -73,6 +103,12 @@ StringId stringstore_alloc(const char *str) } +StringId stringstore_alloc(const char *str) +{ + return stringstore_alloc_n(str, strlen(str)); +} + + void stringstore_free(StringId id) { Rb_node node=(Rb_node)id; @@ -96,3 +132,12 @@ void stringstore_free(StringId id) } } + +void stringstore_ref(StringId id) +{ + Rb_node node=(Rb_node)id; + + if(node!=NULL) + node->v.ival++; +} + diff --git a/libtu/stringstore.h b/libtu/stringstore.h index 752e573..5510ef4 100644 --- a/libtu/stringstore.h +++ b/libtu/stringstore.h @@ -1,7 +1,7 @@ /* * libtu/stringstore.h * - * Copyright (c) Tuomo Valkonen 2004. + * Copyright (c) Tuomo Valkonen 2004-2007. * * You may distribute and modify this library under the terms of either * the Clarified Artistic License or the GNU LGPL, version 2.1 or later. @@ -17,6 +17,9 @@ typedef void* StringId; extern const char *stringstore_get(StringId id); extern StringId stringstore_find(const char *str); extern StringId stringstore_alloc(const char *str); +extern StringId stringstore_find_n(const char *str, uint l); +extern StringId stringstore_alloc_n(const char *str, uint l); extern void stringstore_free(StringId id); +extern void stringstore_ref(StringId id); #endif /* LIBTU_STRINGSTORE_H */ diff --git a/man/ion3.cs.in b/man/ion3.cs.in index b3a8c91..81efb95 100644 --- a/man/ion3.cs.in +++ b/man/ion3.cs.in @@ -28,10 +28,6 @@ obrazovku (ko Nastaví název sezení. Tato volba ovlivní, kam se ulo¾í pracovní plochy a ostatní soubory. Pokud není nastavená, pou¾ije se ~/.ion3/session_name. .TP -.B \-xinerama 0|1 -Jestli¾e byl Ion sestaven s podporou Xineramy, mù¾ete touto volbou -povolit/zakázat (1/0) její pou¾ití. Implicitnì je Xinerama povolena. -.TP .B \-help Zobrazí nápovìdu k pøíkazovým parametrùm .TP @@ -101,12 +97,12 @@ BINDINGS:WFrame.toplevel .SS Pøiøazení pro práci s plovoucími/odpojenými rámy -BINDINGS:WFloatFrame +BINDINGS:WFrame.floating .SS Pøiøazení pro dla¾dicové plochy a rámy [mod_tiling] BINDINGS:WTiling -BINDINGS:WFrame-on-WTiling +.\" BINDINGS:WFrame.tiled .SS Pøiøazení pro kientská okna diff --git a/man/ion3.de.in b/man/ion3.de.in index 3a2106f..fa60e7b 100644 --- a/man/ion3.de.in +++ b/man/ion3.de.in @@ -30,11 +30,6 @@ Setzt einen Sitzungsnamen. Diese Option beeinflusst wo der Arbeitsbereich und andere Sicherungsdateien abgelegt werden (~/.ion3/sitzungs_name wenn die Option gesetzt wurde). .TP -.B \-xinerama 0|1 -Wenn Ion mit Xinerama Unterstützung kompiliert wurde, kann diese Option benutzt -werden um sie 'an = 1' oder 'aus = 0' zu stellen. Die Voreinstelllung ist -Xineramas Screeninformation zu benutzen. -.TP .B \-help Zeigt die Hilfe für die Kommandozeilenoptionen .TP @@ -107,12 +102,13 @@ BINDINGS:WMoveresMode .SS Bindungen zum teilen der Arbeitsfläche [mod_ionws] BINDINGS:WTiling +.\" BINDINGS:WFrame.tiled .SS Bindungen für den fliessenden Arbeitsbereich und Frames [mod_floatws] BINDINGS:WGroupWS -BINDINGS:WFloatFrame +BINDINGS:WFrame.floating .SS Bindungen für Message- und Anfrageboxen [mod_query] diff --git a/man/ion3.fi.in b/man/ion3.fi.in index ae82a00..82fca51 100644 --- a/man/ion3.fi.in +++ b/man/ion3.fi.in @@ -28,10 +28,6 @@ parametrill .B \-session session_name Istunnon nimi. Tämä vaikuttaa talletustiedostojen sijaintiin. .TP -.B \-xinerama 0|1 -Jos Ion käännettiin Xinerama-tuella, voidaan Xinerama tieto silti jättää -hyödyntämättä asettamalla tämä valinta arvoon 0. -.TP .B \-help Näytä komentorivin ohje. .TP @@ -104,12 +100,12 @@ BINDINGS:WFrame.toplevel .SS Kelluvissa/irroitetuissa kehyksissä toimivat sidonnat -BINDINGS:WFloatFrame +BINDINGS:WFrame.floating .SS Laatoituksien ja laatoitettujen kehysten sidonnat [mod_tiling] BINDINGS:WTiling -BINDINGS:WFrame-on-WTiling +.\" BINDINGS:WFrame.tiled .SS Asiakasikkunoiden sidonnat diff --git a/man/ion3.in b/man/ion3.in index 5ddbb33..b9ab3f1 100644 --- a/man/ion3.in +++ b/man/ion3.in @@ -28,11 +28,6 @@ in the DISPLAY environment variable. Set session name. This option affects where workspace and other save files are put (~/.ion3/session_name if option set). .TP -.B \-xinerama 0|1 -If Ion was compiled with Xinerama support, this option can be used to -enable/disable (1/0) the use of it. The default is to use Xinerama -screen information. -.TP .B \-help Show help on command line options .TP @@ -102,12 +97,12 @@ BINDINGS:WFrame.toplevel .SS Bindings for floating/detached frames -BINDINGS:WFloatFrame +BINDINGS:WFrame.floating .SS Bindings for tilings and tiled frames [mod_tiling] BINDINGS:WTiling -BINDINGS:WFrame-on-WTiling +.\" BINDINGS:WFrame.tiled .SS Bindings for client windows diff --git a/man/pwm3.cs.in b/man/pwm3.cs.in index a45f74c..548a16f 100644 --- a/man/pwm3.cs.in +++ b/man/pwm3.cs.in @@ -30,10 +30,6 @@ obrazovku (ko Nastaví název sezení. Tato volba ovlivní, kam se ulo¾í pracovní plochy a ostatní soubory. Pokud není nastavená, pou¾ije se ~/.pwm3/session_name. .TP -.B \-xinerama 0|1 -Jestli¾e byl Ioncore sestaven s podporou Xineramy, mù¾ete touto volbou -povolit/zakázat (1/0) její pou¾ití. Implicitnì je Xinerama _zakázána_. -.TP .B \-help Zobrazí nápovìdu k pøíkazovým parametrùm .TP @@ -74,7 +70,7 @@ BINDINGS:WMoveresMode BINDINGS:WGroupWS -BINDINGS:WFloatFrame +BINDINGS:WFrame.floating .SS Pøiøazení pro menu [mod_menu] diff --git a/man/pwm3.de.in b/man/pwm3.de.in index fe38739..5f6138d 100644 --- a/man/pwm3.de.in +++ b/man/pwm3.de.in @@ -32,11 +32,6 @@ Setzt einen Sitzungsnamen. Diese Option beeinflusst wo der Arbeitsbereich und andere Sicherungsdateien abgelegt werden (~/.pwm3/sitzungs_name wenn die Option gesetzt wurde). .TP -.B \-xinerama 0|1 -Wenn Ion mit Xinerama Unterstützung kompiliert wurde, kann diese Option benutzt -werden um sie 'an = 1' oder 'aus = 0' zu stellen. Die Voreinstelllung ist -Xineramas Screeninformation 'NICHT' zu benutzen. -.TP .B \-help Zeigt die Hilfe für die Kommandozeilenoptionen .TP @@ -78,7 +73,7 @@ BINDINGS:WMoveresMode BINDINGS:WGroupWS -BINDINGS:WFloatFrame +BINDINGS:WFrame.floating .SS Bindungen für die Menüs [mod_menu] diff --git a/man/pwm3.fi.in b/man/pwm3.fi.in index 6e634c9..40c140f 100644 --- a/man/pwm3.fi.in +++ b/man/pwm3.fi.in @@ -29,12 +29,6 @@ parametrill .B \-sessionname session_name Istunnon nimi. Tämä vaikuttaa talletustiedostojen sijaintiin. .TP -.B \-xinerama 0|1 -PWM ei oletuksena käytä Xinerama-tietoa Ionista poiketen. Jos se kuitenkin -käännettiin Xinerama-tuella, voidaan tuo tieto ottaa käyttää asettamalla -tämän parametrin arvoksi 1. Tuolloin kaikilla Xinerama-näytöillä on -erilliset työpöydät. -.TP .B \-help Näytä komentorivin ohje. .TP @@ -75,7 +69,7 @@ BINDINGS:WMoveresMode BINDINGS:WGroupWS -BINDINGS:WFloatFrame +BINDINGS:WFrame.floating .SS Valikoiden sidonnat [mod_menu] diff --git a/man/pwm3.in b/man/pwm3.in index 50df639..e38625b 100644 --- a/man/pwm3.in +++ b/man/pwm3.in @@ -31,11 +31,6 @@ in the DISPLAY environment variable. Set session name. This option affects where workspace and other save files are put (~/.pwm3/session_name if option set). .TP -.B \-xinerama 0|1 -If Ioncore was compiled with Xinerama support, this option can be used to -enable/disable (1/0) the use of it. The default is _not_ to use Xinerama -screen information. -.TP .B \-help Show help on command line options .TP @@ -75,7 +70,7 @@ BINDINGS:WMoveresMode BINDINGS:WGroupWS -BINDINGS:WFloatFrame +BINDINGS:WFrame.floating .SS Bindings for menus [mod_menu] diff --git a/mod_dock/dock.c b/mod_dock/dock.c index 3b18513..c67ce6d 100644 --- a/mod_dock/dock.c +++ b/mod_dock/dock.c @@ -2,7 +2,7 @@ * Ion dock module * Copyright (C) 2003 Tom Payne * Copyright (C) 2003 Per Olofsson - * Copyright (C) 2004-2006 Tuomo Valkonen + * Copyright (C) 2004-2007 Tuomo Valkonen * * by Tom Payne * based on code by Per Olofsson @@ -905,7 +905,7 @@ static void dock_draw(WDock *dock, bool complete) { WRectangle geom=REGION_GEOM(dock); geom.x=geom.y=0; - grbrush_draw_border(dock->brush, &geom, "dock"); + grbrush_draw_border(dock->brush, &geom); } break; case DOCK_OUTLINE_STYLE_EACH: @@ -913,8 +913,7 @@ static void dock_draw(WDock *dock, bool complete) WDockApp *dockapp; for(dockapp=dock->dockapps; dockapp!=NULL; dockapp=dockapp->next){ - grbrush_draw_border(dock->brush, &dockapp->tile_geom, - "dock"); + grbrush_draw_border(dock->brush, &dockapp->tile_geom); } } break; diff --git a/mod_menu/grabmenu.c b/mod_menu/grabmenu.c index cc94437..79a01ce 100644 --- a/mod_menu/grabmenu.c +++ b/mod_menu/grabmenu.c @@ -1,7 +1,7 @@ /* * ion/mod_menu/grabmenu.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -37,8 +37,10 @@ static bool grabmenu_handler(WRegion *reg, XEvent *xev) if(reg==NULL) return FALSE; - if(menu->gm_state==ev->state && ev->keycode==menu->gm_kcb) + if((menu->gm_state==ev->state || menu->gm_state==AnyModifier) + && ev->keycode==menu->gm_kcb){ menu_select_next(menu); + } return FALSE; } @@ -53,12 +55,17 @@ WMenu *mod_menu_do_grabmenu(WMPlex *mplex, ExtlFn handler, ExtlTab tab, WMPlexAttachParams par; WMenu *menu; XKeyEvent *ev; + uint state, kcb; + bool sub; - ev=ioncore_current_key_event(); - - if(ev==NULL) + if(!ioncore_current_key(&kcb, &state, &sub)) return NULL; + if(state==0){ + /* TODO: cycle key? */ + return mod_menu_do_menu(mplex, handler, tab, param); + } + fnp.handler=handler; fnp.tab=tab; fnp.pmenu_mode=FALSE; @@ -77,10 +84,10 @@ WMenu *mod_menu_do_grabmenu(WMPlex *mplex, ExtlFn handler, ExtlTab tab, (void*)&fnp); if(menu==NULL) - return FALSE; + return NULL; - menu->gm_kcb=ev->keycode; - menu->gm_state=ev->state; + menu->gm_kcb=kcb; + menu->gm_state=state; ioncore_grab_establish((WRegion*)menu, grabmenu_handler, NULL, 0); diff --git a/mod_menu/main.c b/mod_menu/main.c index 98df15b..601e11e 100644 --- a/mod_menu/main.c +++ b/mod_menu/main.c @@ -1,7 +1,7 @@ /* * ion/mod_menu/main.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_menu/main.h b/mod_menu/main.h index c5568b8..e779d15 100644 --- a/mod_menu/main.h +++ b/mod_menu/main.h @@ -1,7 +1,7 @@ /* * ion/mod_menu/main.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_menu/menu.c b/mod_menu/menu.c index b8ec9cf..d891c23 100644 --- a/mod_menu/menu.c +++ b/mod_menu/menu.c @@ -1,7 +1,7 @@ /* * ion/mod_menu/menu.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -28,6 +28,8 @@ #include #include #include +#include +#include #include "menu.h" #include "main.h" @@ -85,22 +87,35 @@ static void get_inner_geom(WMenu *menu, WRectangle *geom) } +GR_DEFATTR(active); +GR_DEFATTR(inactive); +GR_DEFATTR(selected); +GR_DEFATTR(unselected); +GR_DEFATTR(normal); +GR_DEFATTR(submenu); + + +static void init_attr() +{ + GR_ALLOCATTR_BEGIN; + GR_ALLOCATTR(active); + GR_ALLOCATTR(inactive); + GR_ALLOCATTR(selected); + GR_ALLOCATTR(unselected); + GR_ALLOCATTR(normal); + GR_ALLOCATTR(submenu); + GR_ALLOCATTR_END; +} + + static void menu_draw_entry(WMenu *menu, int i, const WRectangle *igeom, bool complete) { WRectangle geom; - int a; - - static const char *attrs[]={ - "active-selected-normal", - "active-selected-submenu", - "active-unselected-normal", - "active-unselected-submenu", - "inactive-selected-normal", - "inactive-selected-submenu", - "inactive-unselected-normal", - "inactive-unselected-submenu", - }; + GrAttr sa, aa; + + aa=(REGION_IS_ACTIVE(menu) ? GR_ATTR(active) : GR_ATTR(inactive)); + sa=(menu->selected_entry==i ? GR_ATTR(selected) : GR_ATTR(unselected)); if(menu->entry_brush==NULL) return; @@ -109,14 +124,15 @@ static void menu_draw_entry(WMenu *menu, int i, const WRectangle *igeom, geom.h=menu->entry_h; geom.y+=(i-menu->first_entry)*(menu->entry_h+menu->entry_spacing); - a=((REGION_IS_ACTIVE(menu) ? 0 : 4) - |(menu->selected_entry==i ? 0 : 2) - |(menu->entries[i].flags&WMENUENTRY_SUBMENU ? 1 : 0)); - - grbrush_begin(menu->entry_brush, &geom, GRBRUSH_AMEND); + grbrush_begin(menu->entry_brush, &geom, GRBRUSH_AMEND|GRBRUSH_KEEP_ATTR); + + grbrush_init_attr(menu->entry_brush, &menu->entries[i].attr); + + grbrush_set_attr(menu->entry_brush, aa); + grbrush_set_attr(menu->entry_brush, sa); grbrush_draw_textbox(menu->entry_brush, &geom, menu->entries[i].title, - attrs[a], complete); + complete); grbrush_end(menu->entry_brush); } @@ -126,10 +142,10 @@ void menu_draw_entries(WMenu *menu, bool complete) { WRectangle igeom; int i, mx; - + if(menu->entry_brush==NULL) return; - + get_inner_geom(menu, &igeom); mx=menu->first_entry+menu->vis_entries; @@ -142,8 +158,8 @@ void menu_draw_entries(WMenu *menu, bool complete) void menu_draw(WMenu *menu, bool complete) { + GrAttr aa=(REGION_IS_ACTIVE(menu) ? GR_ATTR(active) : GR_ATTR(inactive)); WRectangle geom; - const char *substyle=(REGION_IS_ACTIVE(menu) ? "active" : "inactive"); if(menu->brush==NULL) return; @@ -153,7 +169,9 @@ void menu_draw(WMenu *menu, bool complete) grbrush_begin(menu->brush, &geom, (complete ? 0 : GRBRUSH_NO_CLEAR_OK)); - grbrush_draw_border(menu->brush, &geom, substyle); + grbrush_set_attr(menu->brush, aa); + + grbrush_draw_border(menu->brush, &geom); menu_draw_entries(menu, FALSE); @@ -491,9 +509,8 @@ static void menu_release_gr(WMenu *menu) static WMenuEntry *preprocess_menu(ExtlTab tab, int *n_entries) { - ExtlTab entry, sub; - ExtlFn fn; WMenuEntry *entries; + ExtlTab entry; int i, n; n=extl_table_get_n(tab); @@ -506,17 +523,40 @@ static WMenuEntry *preprocess_menu(ExtlTab tab, int *n_entries) if(entries==NULL) return NULL; - + + init_attr(); + /* Initialise entries and check submenus */ for(i=1; i<=n; i++){ - entries[i-1].title=NULL; - entries[i-1].flags=0; - if(extl_table_getis(tab, i, "submenu_fn", 'f', &fn)){ - entries[i-1].flags|=WMENUENTRY_SUBMENU; - extl_unref_fn(fn); - }else if(extl_table_getis(tab, i, "submenu", 't', &sub)){ - entries[i-1].flags|=WMENUENTRY_SUBMENU; - extl_unref_table(sub); + WMenuEntry *ent=&entries[i-1]; + + ent->title=NULL; + ent->flags=0; + + gr_stylespec_init(&ent->attr); + + if(extl_table_geti_t(tab, i, &entry)){ + char *attr; + ExtlTab sub; + ExtlFn fn; + + if(extl_table_gets_s(entry, "attr", &attr)){ + gr_stylespec_load_(&ent->attr, attr, TRUE); + free(attr); + } + + if(extl_table_gets_f(entry, "submenu_fn", &fn)){ + ent->flags|=WMENUENTRY_SUBMENU; + extl_unref_fn(fn); + }else if(extl_table_gets_t(entry, "submenu", &sub)){ + ent->flags|=WMENUENTRY_SUBMENU; + extl_unref_table(sub); + } + + if(ent->flags&WMENUENTRY_SUBMENU) + gr_stylespec_set(&ent->attr, GR_ATTR(submenu)); + + extl_unref_table(entry); } } @@ -524,6 +564,8 @@ static WMenuEntry *preprocess_menu(ExtlTab tab, int *n_entries) } +static void deinit_entries(WMenu *menu); + bool menu_init(WMenu *menu, WWindow *par, const WFitParams *fp, const WMenuCreateParams *params) @@ -545,9 +587,9 @@ bool menu_init(WMenu *menu, WWindow *par, const WFitParams *fp, menu->last_fp=*fp; - if(params->pmenu_mode) + if(params->pmenu_mode){ menu->selected_entry=-1; - else{ + }else{ menu->selected_entry=params->initial-1; if(menu->selected_entry<0) menu->selected_entry=0; @@ -575,7 +617,9 @@ bool menu_init(WMenu *menu, WWindow *par, const WFitParams *fp, if(!menu_init_gr(menu, region_rootwin_of((WRegion*)par), win)) goto fail2; - + + init_attr(); + menu_firstfit(menu, params->submenu_mode, &(params->refg)); window_select_input(&(menu->win), IONCORE_EVENTMASK_NORMAL); @@ -591,7 +635,7 @@ fail2: fail: extl_unref_table(menu->tab); extl_unref_fn(menu->handler); - free(menu->entries); + deinit_entries(menu); return FALSE; } @@ -603,11 +647,22 @@ WMenu *create_menu(WWindow *par, const WFitParams *fp, } - -void menu_deinit(WMenu *menu) +static void deinit_entries(WMenu *menu) { int i; + for(i=0; in_entries; i++){ + gr_stylespec_unalloc(&menu->entries[i].attr); + if(menu->entries[i].title!=NULL) + free(menu->entries[i].title); + } + + free(menu->entries); +} + + +void menu_deinit(WMenu *menu) +{ menu_typeahead_clear(menu); if(menu->submenu!=NULL) @@ -616,11 +671,10 @@ void menu_deinit(WMenu *menu) extl_unref_table(menu->tab); extl_unref_fn(menu->handler); - for(i=0; in_entries; i++) - free(menu->entries[i].title); - free(menu->entries); + deinit_entries(menu); menu_release_gr(menu); + window_deinit((WWindow*)menu); } @@ -931,7 +985,7 @@ EXTL_EXPORT_MEMBER void menu_cancel(WMenu *menu) { if(region_manager_allows_destroying((WRegion*)menu)) - mainloop_defer_destroy((Obj*)menu); + region_dispose_((WRegion*)menu); } diff --git a/mod_menu/menu.h b/mod_menu/menu.h index a79d36a..38dd1f8 100644 --- a/mod_menu/menu.h +++ b/mod_menu/menu.h @@ -1,7 +1,7 @@ /* * ion/mod_menu/menu.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -25,6 +25,7 @@ INTRSTRUCT(WMenuEntry); DECLSTRUCT(WMenuEntry){ char *title; int flags; + GrStyleSpec attr; }; DECLCLASS(WMenu){ diff --git a/mod_menu/mkmenu.c b/mod_menu/mkmenu.c index 5f4fecf..0c27f73 100644 --- a/mod_menu/mkmenu.c +++ b/mod_menu/mkmenu.c @@ -1,7 +1,7 @@ /* * ion/mod_menu/mkmenu.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_menu/mkmenu.h b/mod_menu/mkmenu.h index 2efed2f..610047f 100644 --- a/mod_menu/mkmenu.h +++ b/mod_menu/mkmenu.h @@ -1,7 +1,7 @@ /* * ion/mod_menu/mkmenu.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_menu/mod_menu.lua b/mod_menu/mod_menu.lua index 6375e9f..913ad16 100644 --- a/mod_menu/mod_menu.lua +++ b/mod_menu/mod_menu.lua @@ -1,7 +1,7 @@ -- -- ion/mod_menu/mod_menu.lua -- Menu opening helper routines. -- --- Copyright (c) Tuomo Valkonen 2004-2006. +-- Copyright (c) Tuomo Valkonen 2004-2007. -- -- Ion is free software; you can redistribute it and/or modify it under -- the terms of the GNU Lesser General Public License as published by @@ -29,11 +29,11 @@ assert(mod_menu and menudb) local function menu_(reg, sub, menu_or_name, fn, check) if check then -- Check that no other menus are open in reg. - local l=reg:managed_list() - for i, r in pairs(l) do - if obj_is(r, "WMenu") then - return - end + local ok=reg:managed_i(function(r) + return not obj_is(r, "WMenu") + end) + if not ok then + return end end diff --git a/mod_mgmtmode/main.c b/mod_mgmtmode/main.c index fc5ecc6..ef62c52 100644 --- a/mod_mgmtmode/main.c +++ b/mod_mgmtmode/main.c @@ -1,7 +1,7 @@ /* * ion/mod_mgmtmode/main.c * - * Copyright (c) Tuomo Valkonen 2004-2006. + * Copyright (c) Tuomo Valkonen 2004-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_mgmtmode/main.h b/mod_mgmtmode/main.h index 30f61f3..5c9fde4 100644 --- a/mod_mgmtmode/main.h +++ b/mod_mgmtmode/main.h @@ -1,7 +1,7 @@ /* * ion/mod_mgmtmode/main.h * - * Copyright (c) Tuomo Valkonen 2004-2006. + * Copyright (c) Tuomo Valkonen 2004-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_mgmtmode/mgmtmode.c b/mod_mgmtmode/mgmtmode.c index 92a3d27..4b86aa4 100644 --- a/mod_mgmtmode/mgmtmode.c +++ b/mod_mgmtmode/mgmtmode.c @@ -1,7 +1,7 @@ /* * ion/mod_mgmtmode/mgmtmode.c * - * Copyright (c) Tuomo Valkonen 2004-2006. + * Copyright (c) Tuomo Valkonen 2004-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_mgmtmode/mgmtmode.h b/mod_mgmtmode/mgmtmode.h index 1e5ee64..daf7eae 100644 --- a/mod_mgmtmode/mgmtmode.h +++ b/mod_mgmtmode/mgmtmode.h @@ -1,7 +1,7 @@ /* * ion/mod_mgmtmode/mgmtmode.h * - * Copyright (c) Tuomo Valkonen 2004-2006. + * Copyright (c) Tuomo Valkonen 2004-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_panews/Makefile b/mod_panews/Makefile deleted file mode 100644 index c1b79fb..0000000 --- a/mod_panews/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -## -## mod_panews workspace module Makefile -## - -# System-specific configuration is in system.mk -TOPDIR=.. -include $(TOPDIR)/build/system-inc.mk - -###################################### - -INCLUDES += $(X11_INCLUDES) $(LIBTU_INCLUDES) $(LIBEXTL_INCLUDES) -I.. -CFLAGS += $(XOPEN_SOURCE) $(C99_SOURCE) - -SOURCES=main.c panews.c placement.c splitext.c unusedwin.c - -MAKE_EXPORTS=mod_panews - -MODULE=mod_panews -MODULE_STUB=mod_panews.lua - -###################################### - -include $(TOPDIR)/build/rules.mk - -###################################### - -_install: module_install diff --git a/mod_panews/main.c b/mod_panews/main.c deleted file mode 100644 index b3f4f10..0000000 --- a/mod_panews/main.c +++ /dev/null @@ -1,141 +0,0 @@ -/* - * ion/panews/main.c - * - * Copyright (c) Tuomo Valkonen 1999-2006. - * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - */ - -#include - -#include -#include -#include -#include -#include -#include - -#include "main.h" -#include "panews.h" -#include "placement.h" -#include "exports.h" - - -/*{{{ Module information */ - - -#include "../version.h" - -char mod_panews_ion_api_version[]=ION_API_VERSION; - - -/*}}}*/ - - -/*{{{ Bindmaps */ - - -WBindmap *mod_panews_panews_bindmap=NULL; -WBindmap *mod_panews_frame_bindmap=NULL; -WBindmap *mod_panews_unusedwin_bindmap=NULL; - - -/*}}}*/ - - -/*{{{ Module init & deinit */ - - -void mod_panews_deinit() -{ - mod_panews_unregister_exports(); - ioncore_unregister_regclass(&CLASSDESCR(WPaneWS)); - - if(mod_panews_panews_bindmap!=NULL){ - ioncore_free_bindmap("WPaneWS", mod_panews_panews_bindmap); - mod_panews_panews_bindmap=NULL; - } - - if(mod_panews_unusedwin_bindmap!=NULL){ - ioncore_free_bindmap("WUnusedWin", mod_panews_unusedwin_bindmap); - mod_panews_unusedwin_bindmap=NULL; - } - - if(mod_panews_frame_bindmap!=NULL){ - ioncore_free_bindmap("WFrame-on-WPaneWS", mod_panews_frame_bindmap); - mod_panews_frame_bindmap=NULL; - } - - if(panews_init_layout_alt!=NULL){ - destroy_obj((Obj*)panews_init_layout_alt); - panews_init_layout_alt=NULL; - } - - if(panews_make_placement_alt!=NULL){ - destroy_obj((Obj*)panews_make_placement_alt); - panews_make_placement_alt=NULL; - } -} - - -static bool register_regions() -{ - if(!ioncore_register_regclass(&CLASSDESCR(WPaneWS), - (WRegionLoadCreateFn*)panews_load)){ - return FALSE; - } - - return TRUE; -} - - -#define INIT_HOOK_(NM) \ - NM=mainloop_register_hook(#NM, create_hook()); \ - if(NM==NULL) return FALSE; - - -static bool init_hooks() -{ - INIT_HOOK_(panews_init_layout_alt); - INIT_HOOK_(panews_make_placement_alt); - return TRUE; -} - - - -bool mod_panews_init() -{ - if(!init_hooks()) - goto err; - - mod_panews_panews_bindmap=ioncore_alloc_bindmap("WPaneWS", NULL); - mod_panews_unusedwin_bindmap=ioncore_alloc_bindmap_frame("WUnusedWin"); - mod_panews_frame_bindmap=ioncore_alloc_bindmap_frame("WFrame-on-WPaneWS"); - - if(mod_panews_panews_bindmap==NULL || - mod_panews_unusedwin_bindmap==NULL || - mod_panews_frame_bindmap==NULL){ - goto err; - } - - if(!mod_panews_register_exports()) - goto err; - - if(!register_regions()) - goto err; - - /*ioncore_read_config("cfg_panews", NULL, FALSE);*/ - - return TRUE; - -err: - mod_panews_deinit(); - return FALSE; -} - - -/*}}}*/ - diff --git a/mod_panews/main.h b/mod_panews/main.h deleted file mode 100644 index 5dc226c..0000000 --- a/mod_panews/main.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * ion/panews/main.h - * - * Copyright (c) Tuomo Valkonen 1999-2006. - * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - */ - -#ifndef ION_PANEWS_MAIN_H -#define ION_PANEWS_MAIN_H - -#include -#include - -extern bool mod_panews_init(); -extern void mod_panews_deinit(); - -extern WBindmap *mod_panews_panews_bindmap; -extern WBindmap *mod_panews_unusedwin_bindmap; -extern WBindmap *mod_panews_frame_bindmap; - -#endif /* ION_PANEWS_MAIN_H */ diff --git a/mod_panews/mod_panews.lua b/mod_panews/mod_panews.lua deleted file mode 100644 index 65bf32e..0000000 --- a/mod_panews/mod_panews.lua +++ /dev/null @@ -1,562 +0,0 @@ --- --- ion/mod_panews/mod_panews.lua --- --- Copyright (c) Tuomo Valkonen 2004-2006. --- --- Ion is free software; you can redistribute it and/or modify it under --- the terms of the GNU Lesser General Public License as published by --- the Free Software Foundation; either version 2.1 of the License, or --- (at your option) any later version. --- - - --- This is a slight abuse of the package.loaded variable perhaps, but --- library-like packages should handle checking if they're loaded instead of --- confusing the user with require/include differences. -if package.loaded["templates"] then return end - -if not ioncore.load_module("mod_panews") then - return -end - -assert(not _G["mod_panews"]); -local mod_panews={} -_G["mod_panews"]=mod_panews - -local private={} -local settings={} - --- Settings {{{ - --- Classes: --- (T)erminal --- (V)iewer --- (M)isc -settings.valid_classifications={["V"]=true, ["T"]=true, ["M"]=true,} - --- Xterm, rxvt, aterm, etc. all have "XTerm" as class part of WM_CLASS -settings.terminal_emulators={["XTerm"]=true,} - --- Pixel scale factor from 1280x1024/75dpi -settings.scalef=1.0 - ---settings.b_ratio=(1+math.sqrt(5))/2 ---settings.s_ratio=1 -settings.b_ratio=3 -settings.s_ratio=2 - -settings.b_ratio2=7 -settings.s_ratio2=1 - -settings.templates={} - -settings.templates["default"]={ - type="WSplitFloat", - dir="horizontal", - tls=settings.b_ratio, - brs=settings.s_ratio, - tls_brs_incl_handles=true, - tl={ - type="WSplitPane", - contents={ - type="WSplitFloat", - dir="vertical", - tls=settings.b_ratio2, - brs=settings.s_ratio2, - tls_brs_incl_handles=true, - tl={ - type="WSplitPane", - marker="V:single", - }, - br={ - type="WSplitPane", - marker="M:right", - }, - }, - }, - br={ - type="WSplitPane", - marker="T:up", - }, -} - - -settings.templates["alternative1"]={ - type="WSplitFloat", - dir="horizontal", - tls=settings.s_ratio2, - brs=settings.b_ratio2, - tls_brs_incl_handles=true, - tl={ - type="WSplitPane", - marker="M:down", - }, - br={ - type="WSplitFloat", - dir="vertical", - tls=settings.b_ratio, - brs=settings.s_ratio, - tls_brs_incl_handles=true, - tl={ - type="WSplitPane", - marker="V:single", - }, - br={ - type="WSplitPane", - marker="T:right", - }, - }, -} - - -settings.templates["alternative2"]={ - type="WSplitFloat", - dir="vertical", - tls=settings.b_ratio, - brs=settings.s_ratio, - tls_brs_incl_handles=true, - tl={ - type="WSplitFloat", - dir="horizontal", - tls=settings.s_ratio2, - brs=settings.b_ratio2, - tls_brs_incl_handles=true, - tl={ - type="WSplitPane", - marker="M:down", - }, - br={ - type="WSplitPane", - marker="V:single", - }, - }, - br={ - type="WSplitPane", - marker="T:right", - }, -} - - -settings.template=settings.templates["default"] - -settings.shrink_minimum=32 - ---DOC --- Set some module parameters. Currently \var{s} may contain the following --- fields: --- \begin{tabularx}{\linewidth}{lX} --- \tabhead{Field & Description} --- \var{template} & layout template for newly created \type{WPaneWS} --- workspaces. This can be either a table or one of the --- predefined layouts 'default', 'alternative1', and --- 'alternative2'. \\ --- \var{scalef} & Scale factor for classification heuristics to work --- with different screen resolutions. The default is 1.0 --- and is designed for 1280x1024 at 75dpi. \\ --- \var{valid_classifications} & A table with valid window classifications --- as valid keys. \\ --- \end{tabularx} -function mod_panews.set(s) - if s.template then - local ok=false - if type(s.template)=="string" then - if settings.templates[s.template] then - settings.template=settings.templates[s.template] - ok=true - end - elseif type(s.template)=="table" then - settings.template=s.template - ok=true - end - if not ok then - ioncore.warn_traced("Invalid template.") - end - end - if s.scalef then - if type(s.scalef)~="number" or s.scalef<=0 then - ioncore.warn_traced('Invalid scale factor') - else - settings.scalef=s.scalef - end - end - - if type(s.valid_classifications)=="table" then - settings.valid_classifications=s.valid_classifications - end -end - - ---DOC --- Get some module settings. See \fnref{mod_panews.set} for documentation --- on the contents of the returned table. -function mod_panews.get() - return table.copy(settings, true) -end - - --- }}} - - --- Helper code {{{ - -local function sfind(s, p) - local function drop2(a, b, ...) - return unpack(arg) - end - return drop2(string.find(s, p)) -end - - -function private.div_length(w, r1, r2) - local a=math.ceil(w*r1/(r1+r2)) - return a, w-a -end - -function private.split3(d, ls, cs, rs, lo, co, ro) - return { - tls = ls+cs, - brs = rs, - dir = d, - tl = { - tls = ls, - brs = cs, - dir = d, - tl = (lo or {}), - br = (co or {}), - }, - br = (ro or {}), - } -end - -function private.center3(d, ts, cs, lo, co, ro) - local sc=math.min(ts, cs) - local sl=math.floor((ts-sc)/2) - local sr=ts-sc-sl - local r=private.split3(d, sl, sc, sr, lo, co, ro) - return r -end - -function private.split2(d, ts, ls, rs, lo, ro) - if ls and rs then - assert(ls+rs==ts) - elseif not ls then - ls=ts-rs - else - rs=ts-ls - end - assert(rs>=0 and ls>=0) - return { - type="WSplitSplit", - dir=d, - tls=math.floor(ls), - brs=math.ceil(rs), - tl=lo, - br=ro, - } -end - --- }}} - - --- Classification {{{ - -function private.classify(ws, reg) - if obj_is(reg, "WClientWin") then - -- Check if there's a winprop override - local wp=ioncore.getwinprop(reg) - if wp and wp.panews_classification then - if settings.valid_classifications[wp.panews_classification] then - return wp.panews_classification - end - end - - -- Handle known terminal emulators. - local id=reg:get_ident() - if settings.terminal_emulators[id.class] then - return "T" - end - end - - -- Try size heuristics. - local cg=reg:geom() - - if cg.w<3/8*(1280*settings.scalef) then - return "M" - end - - if cg.h>4/8*(960*settings.scalef) then - return "V" - else - return "T" - end -end - --- }}} - - --- Placement code {{{ - -local max_penalty=5 -local just_some_pixel_count=16 - -function private.fitlevel_(min1, s1, us1, min2, s2, us2) - local p1, p2=4, 0.5 - - if us2>=min2 then - p2=0 - end - - if us1>=math.max(s1/2, min1) then - p1=0 - elseif us1>=min1+just_some_pixel_count then - p1=1 - elseif us1>=min1 then - p1=2 - elseif us1>0 then - p1=3 - end - - return p1+p2 -end - -function private.fitlevel(frame, node, horiz) - local fg=frame:geom() - local fsh=frame:size_hints() - local sg=node:geom() - if not horiz then - return private.fitlevel_(fsh.min_h, fg.h, sg.h, fsh.min_w, fg.w, sg.w) - else - return private.fitlevel_(fsh.min_w, fg.w, sg.w, fsh.min_h, fg.h, sg.h) - end -end - - -function private.use_unused(p, n, d, forcelevel) - local f=private.fitlevel(p.frame, n, (d=="left" or d=="right")) - if f>forcelevel then - return false, f - end - - if d=="single" then - p.res_node=n - p.res_config={reg=p.frame} - return true, f - end - - -- TODO: Check fit - local sg=n:geom() - local fg=p.frame:geom() - - if d=="up" or d=="down" then - p.res_node=n - local fh=math.min(fg.h, sg.h) - if d=="up" then - p.res_config=private.split2("vertical", sg.h, nil, fh, - {}, {reg=p.frame}) - else - p.res_config=private.split2("vertical", sg.h, fh, nil, - {reg=p.frame}, {}) - end - return true, f - elseif d=="left" or d=="right" then - p.res_node=n - local fw=math.min(fg.w, sg.w) - if d=="left" then - p.res_config=private.split2("horizontal", sg.w, nil, fw, - {}, {reg=p.frame}) - else - p.res_config=private.split2("horizontal", sg.w, fw, nil, - {reg=p.frame}, {}) - end - return true, f - end - - return false, f -end - - -function private.scan_pane(p, node, d) - local function do_scan_active(n, uf) - local t=obj_typename(n) - if t=="WSplitRegion" then - local f=private.fitlevel(p.frame, n, (d=="left" or d=="right")) - if f - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "panews.h" -#include "placement.h" -#include "main.h" -#include "splitext.h" - - -/*{{{ Create/destroy */ - - -bool panews_managed_add(WPaneWS *ws, WRegion *reg) -{ - if(OBJ_IS(reg, WFrame)) - region_add_bindmap(reg, mod_panews_frame_bindmap); - - return tiling_managed_add_default(&(ws->tiling), reg); -} - - -static WRegion *create_frame_panews(WWindow *parent, const WFitParams *fp) -{ - return (WRegion*)create_frame(parent, fp, "frame-tiled-panews"); -} - - -static bool mrsh_init_layout_extl(ExtlFn fn, WPaneWSInitParams *p) -{ - ExtlTab t=extl_create_table(); - bool ret=FALSE; - - extl_table_sets_o(t, "ws", (Obj*)p->ws); - - extl_protect(NULL); - ret=extl_call(fn, "t", "b", t, &ret); - extl_unprotect(NULL); - - if(ret) - ret=extl_table_gets_t(t, "layout", &(p->layout)); - - extl_unref_table(t); - return ret; -} - - -static bool panews_init_layout(WPaneWS *ws) -{ - WPaneWSInitParams p; - - p.ws=ws; - p.layout=extl_table_none(); - - hook_call_p(panews_init_layout_alt, &p, - (WHookMarshallExtl*)mrsh_init_layout_extl); - - if(p.layout!=extl_table_none()){ - ws->tiling.split_tree=tiling_load_node(&(ws->tiling), - ®ION_GEOM(ws), - p.layout); - extl_unref_table(p.layout); - } - - if(ws->tiling.split_tree==NULL) - ws->tiling.split_tree=(WSplit*)create_splitunused(®ION_GEOM(ws), ws); - - if(ws->tiling.split_tree!=NULL) - ws->tiling.split_tree->ws_if_root=&(ws->tiling); - - return (ws->tiling.split_tree!=NULL); -} - - -bool panews_init(WPaneWS *ws, WWindow *parent, const WFitParams *fp, - bool ilo) -{ - if(!tiling_init(&(ws->tiling), parent, fp, - create_frame_panews, FALSE)) - return FALSE; - - region_add_bindmap((WRegion*)ws, mod_panews_panews_bindmap); - - assert(ws->tiling.split_tree==NULL); - - if(ilo){ - if(!panews_init_layout(ws)){ - panews_deinit(ws); - return FALSE; - } - } - - return TRUE; -} - - -WPaneWS *create_panews(WWindow *parent, const WFitParams *fp, bool cu) -{ - CREATEOBJ_IMPL(WPaneWS, panews, (p, parent, fp, cu)); -} - - -WPaneWS *create_panews_simple(WWindow *parent, const WFitParams *fp) -{ - return create_panews(parent, fp, TRUE); -} - - -void panews_deinit(WPaneWS *ws) -{ - tiling_deinit(&(ws->tiling)); -} - - -static WSplitRegion *get_node_check(WPaneWS *ws, WRegion *reg) -{ - WSplitRegion *node; - - if(reg==NULL) - return NULL; - - node=splittree_node_of(reg); - - if(node==NULL || REGION_MANAGER(reg)!=(WRegion*)ws) - return NULL; - - return node; -} - - -static void panews_do_managed_remove(WPaneWS *ws, WRegion *reg) -{ - tiling_do_managed_remove(&(ws->tiling), reg); - if(OBJ_IS(reg, WFrame)) - region_remove_bindmap(reg, mod_panews_frame_bindmap); -} - - -static bool plainregionfilter(WSplit *node) -{ - return (strcmp(OBJ_TYPESTR(node), "WSplitRegion")==0); -} - - - -void panews_managed_remove(WPaneWS *ws, WRegion *reg) -{ - bool ds=OBJ_IS_BEING_DESTROYED(ws); - bool act=REGION_IS_ACTIVE(reg); - bool mcf=region_may_control_focus((WRegion*)ws); - WSplitRegion *node=get_node_check(ws, reg); - WRegion *other=NULL; - - other=tiling_do_get_nextto(&(ws->tiling), reg, SPLIT_ANY, PRIMN_ANY, FALSE); - - panews_do_managed_remove(ws, reg); - - if(node==(WSplitRegion*)(ws->tiling.stdispnode)) - ws->tiling.stdispnode=NULL; - - if(node==NULL) - return; - - splittree_remove((WSplit*)node, !ds); - - if(!ds){ - if(other==NULL){ - if(ws->tiling.split_tree==NULL){ - warn(TR("Unable to re-initialise workspace. Destroying.")); - mainloop_defer_destroy((Obj*)ws); - }else if(act && mcf){ - /* We don't want to give the stdisp focus, even if one exists. - * Or do we? - */ - tiling_fallback_focus(&ws->tiling, FALSE); - } - }else if(act && mcf){ - region_warp(other); - } - } -} - - -/*}}}*/ - - -/*{{{ Misc. */ - - -bool panews_managed_prepare_focus(WPaneWS *ws, WRegion *reg, - int flags, WPrepareFocusResult *res) -{ - if(flags®ION_GOTO_ENTERWINDOW){ - WSplitRegion *other, *node=get_node_check(ws, reg); - if(node!=NULL && OBJ_IS(node, WSplitUnused)){ - /* An unused region - do not focus unless there are no - * normal regions in its pane. - */ - other=split_tree_find_region_in_pane_of((WSplit*)node); - if(other!=NULL){ - tiling_managed_prepare_focus(&(ws->tiling), other->reg, - flags&~REGION_GOTO_ENTERWINDOW, - res); - return FALSE; - } - } - } - - return tiling_managed_prepare_focus(&(ws->tiling), reg, flags, res); -} - - -static bool filter_no_stdisp_unused(WSplit *split) -{ - return (OBJ_IS(split, WSplitRegion) - && !OBJ_IS(split, WSplitST) - && !OBJ_IS(split, WSplitUnused)); -} - - -bool panews_managed_may_destroy(WPaneWS *ws, WRegion *reg) -{ - if(region_manager_allows_destroying((WRegion*)ws)) - return TRUE; - - if(tiling_do_get_nextto(&(ws->tiling), reg, - SPLIT_ANY, PRIMN_ANY, FALSE)==NULL){ - return FALSE; - } - - return TRUE; -} - - -bool panews_may_destroy(WPaneWS *ws) -{ - if(split_current_todir(ws->tiling.split_tree, SPLIT_ANY, PRIMN_ANY, - filter_no_stdisp_unused)!=NULL){ - warn(TR("Refusing to close non-empty workspace.")); - return FALSE; - } - - return TRUE; -} - - -/* -static WRegion *panews_rqclose_propagate(WPaneWS *ws, WRegion *sub) -{ - WSplitRegion *node=NULL; - WRegion *reg=NULL; - - if(sub==NULL){ - if(ws->tiling.split_tree!=NULL){ - node=(WSplitRegion*)split_current_todir(ws->tiling.split_tree, - SPLIT_ANY, PRIMN_ANY, - filter_no_stdisp_unused); - } - if(node==NULL){ - mainloop_defer_destroy((Obj*)ws); - return (WRegion*)ws; - } - if(node->reg==NULL) - return NULL; - sub=node->reg; - }else{ - node=get_node_check(ws, sub); - if(node==NULL) - return NULL; - } - - - return (region_rqclose(sub) ? sub : NULL); -} -*/ - - -/*}}}*/ - - -/*{{{ Save */ - - -ExtlTab panews_get_configuration(WPaneWS *ws) -{ - return tiling_get_configuration(&(ws->tiling)); -} - - -/*}}}*/ - - -/*{{{ Load */ - - -static WSplit *load_splitunused(WPaneWS *ws, const WRectangle *geom, - ExtlTab tab) -{ - return (WSplit*)create_splitunused(geom, (WPaneWS*)ws); -} - - -static WSplit *load_splitpane(WPaneWS *ws, const WRectangle *geom, ExtlTab tab) -{ - ExtlTab t; - WSplitPane *pane; - WSplit *cnt; - - pane=create_splitpane(geom, NULL); - if(pane==NULL) - return NULL; - - if(extl_table_gets_t(tab, "contents", &t)){ - cnt=tiling_load_node(&(ws->tiling), geom, t); - extl_unref_table(t); - }else{ - cnt=load_splitunused(ws, geom, extl_table_none()); - } - - if(cnt==NULL){ - destroy_obj((Obj*)pane); - return NULL; - } - - pane->contents=cnt; - cnt->parent=&(pane->isplit); - - assert(pane->marker==NULL); - extl_table_gets_s(tab, "marker", &(pane->marker)); - - return (WSplit*)pane; -} - - -static WSplit *panews_load_node(WPaneWS *ws, const WRectangle *geom, - ExtlTab tab) -{ - char *s=NULL; - - if(!extl_table_gets_s(tab, "type", &s)){ - WRegion *reg=NULL; - /* Shortcuts for templates.lua */ - if(extl_table_gets_o(tab, "reg", (Obj**)®)){ - if(OBJ_IS(reg, WRegion)) - return load_splitregion_doit(&(ws->tiling), geom, tab); - }else{ - return load_splitunused(ws, geom, tab); - } - }else{ - if(strcmp(s, "WSplitPane")==0) - return load_splitpane(ws, geom, tab); - else if(strcmp(s, "WSplitUnused")==0) - return load_splitunused(ws, geom, tab); - } - - return tiling_load_node_default(&(ws->tiling), geom, tab); -} - - -WRegion *panews_load(WWindow *par, const WFitParams *fp, ExtlTab tab) -{ - WPaneWS *ws; - ExtlTab treetab; - - ws=create_panews(par, fp, FALSE); - - if(ws==NULL) - return NULL; - - if(extl_table_gets_t(tab, "split_tree", &treetab)){ - ws->tiling.split_tree=tiling_load_node(&(ws->tiling), ®ION_GEOM(ws), - treetab); - extl_unref_table(treetab); - } - - if(ws->tiling.split_tree==NULL){ - if(!panews_init_layout(ws)){ - destroy_obj((Obj*)ws); - return NULL; - } - } - - ws->tiling.split_tree->ws_if_root=ws; - split_restack(ws->tiling.split_tree, ws->tiling.dummywin, Above); - - return (WRegion*)ws; -} - - -/*}}}*/ - - -/*{{{ Dynamic function table and class implementation */ - - -static DynFunTab panews_dynfuntab[]={ - {region_managed_remove, - panews_managed_remove}, - - {(DynFun*)region_prepare_manage, - (DynFun*)panews_prepare_manage}, - - {(DynFun*)region_get_configuration, - (DynFun*)panews_get_configuration}, - - {(DynFun*)region_may_destroy, - (DynFun*)panews_may_destroy}, - - {(DynFun*)region_managed_may_destroy, - (DynFun*)panews_managed_may_destroy}, - - {(DynFun*)tiling_managed_add, - (DynFun*)panews_managed_add}, - - {(DynFun*)tiling_load_node, - (DynFun*)panews_load_node}, - - {(DynFun*)tiling_do_get_nextto, - (DynFun*)panews_do_get_nextto}, - - {(DynFun*)tiling_do_get_farthest, - (DynFun*)panews_do_get_farthest}, - - {(DynFun*)region_managed_prepare_focus, - (DynFun*)panews_managed_prepare_focus}, - - /* - {(DynFun*)region_rqclose_propagate, - (DynFun*)panews_rqclose_propagate},*/ - - END_DYNFUNTAB -}; - - -EXTL_EXPORT -IMPLCLASS(WPaneWS, WTiling, panews_deinit, panews_dynfuntab); - - -/*}}}*/ - diff --git a/mod_panews/panews.h b/mod_panews/panews.h deleted file mode 100644 index 1402523..0000000 --- a/mod_panews/panews.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * ion/panews/panews.h - * - * Copyright (c) Tuomo Valkonen 1999-2006. - * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - */ - -#ifndef ION_PANEWS_PANEWS_H -#define ION_PANEWS_PANEWS_H - -#include -#include -#include -#include -#include - -#include - - -INTRCLASS(WPaneWS); -DECLCLASS(WPaneWS){ - WTiling tiling; -}; - - -extern void panews_deinit(WPaneWS *ws); -extern bool panews_init(WPaneWS *ws, WWindow *parent, const WFitParams *fp, - bool cu); -extern WPaneWS *create_panews(WWindow *parent, const WFitParams *fp, bool cu); -extern WPaneWS *create_panews_simple(WWindow *parent, const WFitParams *fp); -extern WRegion *panews_load(WWindow *par, const WFitParams *fp, ExtlTab tab); - -/* Dynfun implementations */ - -extern bool panews_managed_may_destroy(WPaneWS *ws, WRegion *reg); -extern void panews_managed_remove(WPaneWS *ws, WRegion *reg); -extern bool panews_managed_add(WPaneWS *ws, WRegion *reg); -extern WRegion *panews_managed_control_focus(WPaneWS *ws, WRegion *reg); - -extern ExtlTab panews_get_configuration(WPaneWS *ws); -extern WRegion *panews_load(WWindow *par, const WFitParams *fp, ExtlTab tab); - -#endif /* ION_PANEWS_PANEWS_H */ diff --git a/mod_panews/placement.c b/mod_panews/placement.c deleted file mode 100644 index 73e2690..0000000 --- a/mod_panews/placement.c +++ /dev/null @@ -1,320 +0,0 @@ -/* - * ion/mod_panews/placement.h - * - * Copyright (c) Tuomo Valkonen 1999-2006. - * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - */ - -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "placement.h" -#include "panews.h" -#include "splitext.h" -#include "unusedwin.h" - - -WHook *panews_init_layout_alt=NULL; -WHook *panews_make_placement_alt=NULL; - - -/*{{{ create_frame_for */ - - -static WFrame *create_frame_for(WPaneWS *ws, WRegion *reg) -{ - WWindow *par=REGION_PARENT(ws); - WFitParams fp; - WRectangle mg; - WFrame *frame; - - if(par==NULL) - return NULL; - - fp.g=REGION_GEOM(ws); - fp.mode=REGION_FIT_BOUNDS; - - frame=(WFrame*)ws->tiling.create_frame_fn(par, &fp); - - if(frame==NULL) - return NULL; - - frame->flags|=FRAME_DEST_EMPTY; - - mplex_managed_geom((WMPlex*)frame, &mg); - - fp.g.w=REGION_GEOM(reg).w+(REGION_GEOM(frame).w-mg.w); - fp.g.h=REGION_GEOM(reg).h+(REGION_GEOM(frame).h-mg.h); - fp.mode=REGION_FIT_EXACT; - - region_fitrep((WRegion*)frame, NULL, &fp); - - return (WFrame*)frame; -} - - -/*}}}*/ - - -/*{{{ Placement scan */ - - -static bool mrsh_layout_extl(ExtlFn fn, WPaneWSPlacementParams *p) -{ - ExtlTab t=extl_create_table(); - bool ret=FALSE; - - extl_table_sets_o(t, "ws", (Obj*)p->ws); - extl_table_sets_o(t, "frame", (Obj*)p->frame); - extl_table_sets_o(t, "reg", (Obj*)p->reg); - extl_table_sets_o(t, "specifier", (Obj*)p->specifier); - - extl_protect(NULL); - extl_call(fn, "t", "b", t, &ret); - extl_unprotect(NULL); - - if(ret){ - ret=FALSE; - - extl_table_gets_i(t, "res_w", &(p->res_w)); - extl_table_gets_i(t, "res_h", &(p->res_h)); - - if(extl_table_gets_o(t, "res_node", (Obj**)&(p->res_node))){ - if(OBJ_IS(p->res_node, WSplitUnused)){ - if(!extl_table_gets_t(t, "res_config", &(p->res_config))){ - warn(TR("Malfunctioning placement hook; condition #%d."), 1); - goto err; - } - }else if(!OBJ_IS(p->res_node, WSplitRegion)){ - warn(TR("Malfunctioning placement hook; condition #%d."), 2); - goto err; - } - } - } - - extl_unref_table(t); - - return ret; - -err: - p->res_node=NULL; - extl_unref_table(t); - return FALSE; -} - - -static bool plainregionfilter(WSplit *node) -{ - return (strcmp(OBJ_TYPESTR(node), "WSplitRegion")==0); -} - - -static bool fallback_filter(WSplit *node) -{ - return (OBJ_IS(node, WSplitUnused) || plainregionfilter(node)); -} - - -static bool fallback_layout(WPaneWSPlacementParams *p) -{ - if(p->ws->tiling.split_tree==NULL) - return FALSE; - - if(p->specifier!=NULL){ - p->res_node=(WSplit*)p->specifier; - }else{ - p->res_node=split_current_todir(p->ws->tiling.split_tree, SPLIT_ANY, - PRIMN_ANY, fallback_filter); - } - - if(p->res_node!=NULL && OBJ_IS(p->res_node, WSplitUnused)){ - p->res_config=extl_create_table(); - if(p->res_config==extl_table_none() || p->frame==NULL) - return FALSE; - extl_table_sets_o(p->res_config, "reg", (Obj*)(p->frame)); - } - - return (p->res_node!=NULL); -} - - -/*}}}*/ - - -/*{{{ Split/replace unused code */ - - -static bool do_replace(WPaneWS *ws, WFrame *frame, WRegion *reg, - WPaneWSPlacementParams *rs) -{ - WSplit *u=rs->res_node; - WSplit *node=tiling_load_node(&(ws->tiling), &(u->geom), rs->res_config); - - assert(OBJ_IS(u, WSplitUnused)); - - if(node==NULL){ - warn(TR("Malfunctioning placement hook; condition #%d."), 3); - return FALSE; - } - - if(REGION_MANAGER(frame)!=(WRegion*)ws){ - warn(TR("Malfunctioning placement hook; condition #%d."), 4); - destroy_obj((Obj*)node); - return FALSE; - } - - if(u->parent!=NULL) - splitinner_replace(u->parent, u, node); - else - splittree_changeroot((WSplit*)u, node); - - u->parent=NULL; - mainloop_defer_destroy((Obj*)u); - - if(ws->tiling.stdispnode!=NULL) - split_regularise_stdisp(ws->tiling.stdispnode); - - if(ws->tiling.split_tree!=NULL) - split_restack(ws->tiling.split_tree, ws->tiling.dummywin, Above); - - return TRUE; -} - -/*}}}*/ - - -/*{{{ The main dynfun */ - - -static bool current_unused(WPaneWS *ws) -{ - return OBJ_IS(tiling_current(&ws->tiling), WUnusedWin); -} - - -static WRegion *panews_get_target(WPaneWS *ws, WSplitUnused *specifier, - WRegion *reg) -{ - WRegion *target=NULL; - WFrame *frame=create_frame_for(ws, reg); - WSplit **tree=&(ws->tiling.split_tree); - WPaneWSPlacementParams rs; - - assert(ws->tiling.split_tree!=NULL); - - rs.ws=ws; - rs.frame=frame; - rs.reg=reg; - rs.specifier=specifier; - rs.res_node=NULL; - rs.res_config=extl_table_none(); - rs.res_w=-1; - rs.res_h=-1; - - if(frame!=NULL){ - split_update_bounds(*tree, TRUE); - - assert(panews_make_placement_alt!=NULL); - - hook_call_p(panews_make_placement_alt, &rs, - (WHookMarshallExtl*)mrsh_layout_extl); - } - - if(rs.res_node==NULL && specifier==NULL) - fallback_layout(&rs); - - if(rs.res_node!=NULL){ - /* Resize */ - if(rs.res_w>0 || rs.res_h>0){ - WRectangle grq=rs.res_node->geom; - int gflags=REGION_RQGEOM_WEAK_ALL; - - if(rs.res_w>0){ - grq.w=rs.res_w; - gflags&=~REGION_RQGEOM_WEAK_W; - } - - if(rs.res_h>0){ - grq.h=rs.res_h; - gflags&=~REGION_RQGEOM_WEAK_H; - } - - splittree_rqgeom(rs.res_node, gflags, &grq, NULL); - } - - if(OBJ_IS(rs.res_node, WSplitUnused)){ - if(frame!=NULL){ - if(do_replace(ws, frame, reg, &rs)) - target=(WRegion*)frame; - } - }else{ - assert(OBJ_IS(rs.res_node, WSplitRegion)); - target=((WSplitRegion*)rs.res_node)->reg; - } - - extl_unref_table(rs.res_config); - } - - if(frame!=NULL && target!=(WRegion*)frame) - destroy_obj((Obj*)frame); - - if(target!=NULL && current_unused(ws)) - region_goto(target); - - return target; -} - - -WPHolder *panews_prepare_manage(WPaneWS *ws, const WClientWin *cwin, - const WManageParams *param, int redir) -{ - WRegion *target=panews_get_target(ws, NULL, (WRegion*)cwin); - WPHolder *ph; - - if(target!=NULL){ - ph=region_prepare_manage(target, cwin, param, MANAGE_REDIR_PREFER_YES); - if(ph!=NULL) - return ph; - } - - warn(TR("Ooops... could not find a region to attach client window to " - "on workspace %s."), region_name((WRegion*)ws)); - return NULL; -} - - -bool panews_handle_unused_drop(WPaneWS *ws, WSplitUnused *specifier, - WRegion *reg) -{ - WRegion *target=panews_get_target(ws, specifier, reg); - - if(target==NULL || !OBJ_IS(target, WMPlex)) - return FALSE; - - return (mplex_attach_simple((WMPlex*)target, reg, - MPLEX_ATTACH_SWITCHTO)!=NULL); -} - - -/*}}}*/ - diff --git a/mod_panews/placement.h b/mod_panews/placement.h deleted file mode 100644 index 23dd9fe..0000000 --- a/mod_panews/placement.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * ion/mod_panews/placement.h - * - * Copyright (c) Tuomo Valkonen 1999-2006. - * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - */ - -#ifndef ION_MOD_PANEWS_PLACEMENT_H -#define ION_MOD_PANEWS_PLACEMENT_H - -#include -#include -#include -#include -#include -#include -#include "panews.h" -#include "splitext.h" - - -typedef struct{ - WPaneWS *ws; - ExtlTab layout; -} WPaneWSInitParams; - - -typedef struct{ - WPaneWS *ws; - WFrame *frame; - WRegion *reg; - WSplitUnused *specifier; - - WSplit *res_node; - ExtlTab res_config; - int res_w, res_h; -} WPaneWSPlacementParams; - - -/* Handlers of this hook should accept WPaneWSInitParams as parameter. */ -extern WHook *panews_init_layout_alt; -/* Handlers of this hook should accept WPaneWSPlacementParams as parameter. */ -extern WHook *panews_make_placement_alt; - - -extern WPHolder *panews_prepare_manage(WPaneWS *ws, const WClientWin *cwin, - const WManageParams *param, - int redir); -extern bool panews_handle_unused_drop(WPaneWS *ws, WSplitUnused *specifier, - WRegion *reg); - -#endif /* ION_MOD_PANEWS_PLACEMENT_H */ diff --git a/mod_panews/splitext.c b/mod_panews/splitext.c deleted file mode 100644 index ad392c5..0000000 --- a/mod_panews/splitext.c +++ /dev/null @@ -1,617 +0,0 @@ -/* - * ion/panews/splitext.c - * - * Copyright (c) Tuomo Valkonen 1999-2006. - * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "splitext.h" -#include "unusedwin.h" - - -#define GEOM(X) (((WSplit*)(X))->geom) - - -/*{{{ Init/deinit */ - - -bool splitunused_init(WSplitUnused *split, const WRectangle *geom, - WPaneWS *ws) -{ - WWindow *par=REGION_PARENT(ws); - WUnusedWin *uwin; - WFitParams fp; - - assert(par!=NULL); - - fp.g=*geom; - fp.mode=REGION_FIT_EXACT; - - uwin=create_unusedwin(par, &fp); - - if(uwin==NULL) - return FALSE; - - if(!splitregion_init(&(split->regnode), geom, (WRegion*)uwin)){ - destroy_obj((Obj*)uwin); - return FALSE; - } - - if(!tiling_managed_add(&ws->tiling, (WRegion*)uwin)){ - split->regnode.reg=NULL; - destroy_obj((Obj*)uwin); - return FALSE; - } - - return TRUE; -} - - -WSplitUnused *create_splitunused(const WRectangle *geom, WPaneWS *ws) -{ - CREATEOBJ_IMPL(WSplitUnused, splitunused, (p, geom, ws)); -} - - -bool splitpane_init(WSplitPane *pane, const WRectangle *geom, WSplit *cnt) -{ - pane->contents=cnt; - pane->marker=NULL; - - if(!splitinner_init(&(pane->isplit), geom)) - return FALSE; - - return TRUE; -} - - -WSplitPane *create_splitpane(const WRectangle *geom, WSplit *cnt) -{ - CREATEOBJ_IMPL(WSplitPane, splitpane, (p, geom, cnt)); -} - - -void splitunused_deinit(WSplitUnused *split) -{ - if(split->regnode.reg!=NULL){ - destroy_obj((Obj*)split->regnode.reg); - split->regnode.reg=NULL; - } - - splitregion_deinit(&(split->regnode)); -} - - -void splitpane_deinit(WSplitPane *split) -{ - if(split->contents!=NULL){ - WSplit *tmp=split->contents; - split->contents=NULL; - tmp->parent=NULL; - destroy_obj((Obj*)tmp); - } - splitinner_deinit(&(split->isplit)); -} - - -/*}}}*/ - - -/*{{{ X window handling */ - - -static void splitpane_stacking(WSplitPane *pane, - Window *bottomret, Window *topret) -{ - - *bottomret=None; - *topret=None; - - if(pane->contents!=NULL) - split_stacking(pane->contents, bottomret, topret); -} - - -static void splitpane_restack(WSplitPane *pane, Window other, int mode) -{ - if(pane->contents!=None) - split_restack(pane->contents, other, mode); -} - - -static void stack_restack_reg(WRegion *reg, Window *other, int *mode) -{ - Window b=None, t=None; - - if(reg!=NULL){ - region_restack(reg, *other, *mode); - region_stacking(reg, &b, &t); - if(t!=None){ - *other=t; - *mode=Above; - } - } -} - - -static void stack_restack_split(WSplit *split, Window *other, int *mode) -{ - Window b=None, t=None; - - if(split!=NULL){ - split_restack(split, *other, *mode); - split_stacking(split, &b, &t); - if(t!=None){ - *other=t; - *mode=Above; - } - } -} - - -static void splitpane_reparent(WSplitPane *pane, WWindow *target) -{ - if(pane->contents!=NULL) - split_reparent(pane->contents, target); -} - - -static void reparentreg(WRegion *reg, WWindow *target) -{ - WRectangle g=REGION_GEOM(reg); - region_reparent(reg, target, &g, REGION_FIT_EXACT); -} - - -/*}}}*/ - - -/*{{{ Geometry */ - - -static void set_unused_bounds(WSplit *node) -{ - node->min_w=0; - node->min_h=0; - node->max_w=INT_MAX; - node->max_h=INT_MAX; - node->unused_w=node->geom.w; - node->unused_h=node->geom.h; -} - - -static void copy_bounds(WSplit *dst, const WSplit *src) -{ - dst->min_w=src->min_w; - dst->min_h=src->min_h; - dst->max_w=src->max_w; - dst->max_h=src->max_h; - dst->unused_w=src->unused_w; - dst->unused_h=src->unused_h; -} - - -static void splitunused_update_bounds(WSplitUnused *node, bool recursive) -{ - set_unused_bounds((WSplit*)node); -} - - -static void splitpane_update_bounds(WSplitPane *node, bool recursive) -{ - if(node->contents!=NULL){ - if(recursive) - split_update_bounds(node->contents, recursive); - copy_bounds((WSplit*)node, node->contents); - }else{ - set_unused_bounds((WSplit*)node); - } -} - - -static int infadd(int x, int y) -{ - return ((x==INT_MAX || y==INT_MAX) ? INT_MAX : (x+y)); -} - - -static void splitpane_do_resize(WSplitPane *pane, const WRectangle *ng, - int hprimn, int vprimn, bool transpose) -{ - if(transpose && pane->marker!=NULL){ - char *growdir=strchr(pane->marker, ':'); - if(growdir!=NULL){ - const char *newdir=NULL; - growdir++; - - if(strcmp(growdir, "right")==0) - newdir="down"; - else if(strcmp(growdir, "left")==0) - newdir="up"; - if(strcmp(growdir, "down")==0) - newdir="right"; - else if(strcmp(growdir, "up")==0) - newdir="left"; - - if(newdir!=NULL){ - char *newmarker=NULL; - *growdir='\0'; - libtu_asprintf(&newmarker, "%s:%s", pane->marker, newdir); - if(newmarker==NULL){ - *growdir=':'; - }else{ - free(pane->marker); - pane->marker=newmarker; - } - } - } - - } - - ((WSplit*)pane)->geom=*ng; - - if(pane->contents!=NULL) - split_do_resize(pane->contents, ng, hprimn, vprimn, transpose); -} - - -static void splitpane_do_rqsize(WSplitPane *pane, WSplit *node, - RootwardAmount *ha, RootwardAmount *va, - WRectangle *rg, bool tryonly) -{ - WSplitInner *par=((WSplit*)pane)->parent; - - if(par!=NULL){ - splitinner_do_rqsize(par, (WSplit*)pane, ha, va, rg, tryonly); - if(!tryonly) - ((WSplit*)pane)->geom=*rg; - }else{ - *rg=GEOM(pane); - } -} - - -/*}}}*/ - - -/*{{{ Tree manipulation */ - - -static void splitpane_replace(WSplitPane *pane, WSplit *child, WSplit *what) -{ - assert(child==pane->contents && what!=NULL); - - child->parent=NULL; - pane->contents=what; - what->parent=(WSplitInner*)pane; - what->ws_if_root=NULL; /* May not be needed */ -} - - -static WPaneWS *find_ws(WSplit *split) -{ - if(split->parent!=NULL) - return find_ws((WSplit*)split->parent); - - if(split->ws_if_root!=NULL) - return OBJ_CAST(split->ws_if_root, WPaneWS); - - return NULL; -} - - -static void splitpane_remove(WSplitPane *pane, WSplit *child, - bool reclaim_space) -{ - WSplitInner *parent=((WSplit*)pane)->parent; - WSplitUnused *un; - WPaneWS *ws=find_ws((WSplit*)pane); - - assert(child==pane->contents); - - pane->contents=NULL; - child->parent=NULL; - - if(ws!=NULL - && !OBJ_IS_BEING_DESTROYED(ws) - && !OBJ_IS_BEING_DESTROYED(pane)){ - pane->contents=(WSplit*)create_splitunused(&GEOM(pane), ws); - if(pane->contents!=NULL){ - pane->contents->parent=(WSplitInner*)pane; - return; - } - } - - if(parent!=NULL) - splitinner_remove(parent, (WSplit*)pane, reclaim_space); - else - splittree_changeroot((WSplit*)pane, NULL); - - destroy_obj((Obj*)pane); -} - - -/*}}}*/ - - -/*{{{ Tree traversal */ - - -static bool filter_any(WSplit *split) -{ - return OBJ_IS(split, WSplitRegion); -} - - -static bool filter_no_unused(WSplit *split) -{ - return (OBJ_IS(split, WSplitRegion) - && !OBJ_IS(split, WSplitUnused)); -} - - -static bool filter_no_stdisp(WSplit *split) -{ - return (OBJ_IS(split, WSplitRegion) - && !OBJ_IS(split, WSplitST)); -} - - -static bool filter_no_stdisp_unused(WSplit *split) -{ - return (OBJ_IS(split, WSplitRegion) - && !OBJ_IS(split, WSplitST) - && !OBJ_IS(split, WSplitUnused)); - -} - - -static WSplit *splitpane_current_todir(WSplitPane *pane, int dir, int primn, - WSplitFilter *filter) -{ - WSplit *ret=NULL; - - if(pane->contents==NULL) - return NULL; - - /* Try non-unused first */ - if(filter==filter_no_stdisp){ - ret=split_current_todir(pane->contents, dir, primn, - filter_no_stdisp_unused); - }else if(filter==filter_any){ - ret=split_current_todir(pane->contents, dir, primn, - filter_no_unused); - } - - if(ret==NULL) - ret=split_current_todir(pane->contents, dir, primn, filter); - - return ret; -} - - -static void splitpane_forall(WSplitPane *pane, WSplitFn *fn) -{ - if(pane->contents!=NULL) - fn(pane->contents); -} - - -static WSplit *splitpane_current(WSplitPane *pane) -{ - return pane->contents; -} - - -static WSplitRegion *get_node_check(WPaneWS *ws, WRegion *reg) -{ - WSplitRegion *node; - - if(reg==NULL) - return NULL; - - node=splittree_node_of(reg); - - if(node==NULL || REGION_MANAGER(reg)!=(WRegion*)ws) - return NULL; - - return node; -} - - -static WSplitRegion *do_get_nextto(WSplit *node, int dir, int primn, - bool any, bool paneonly) -{ - WSplitFilter *filter=(any ? filter_no_unused : filter_no_stdisp_unused); - WSplit *nextto=NULL; - - while(node->parent!=NULL){ - if(OBJ_IS(node, WSplitPane)){ - if(paneonly) - break; - filter=(any ? filter_any : filter_no_stdisp); - } - nextto=splitinner_nextto(node->parent, node, dir, primn, filter); - if(nextto!=NULL) - break; - node=(WSplit*)(node->parent); - } - - if(OBJ_IS(nextto, WSplitRegion)) - return (WSplitRegion*)nextto; - return NULL; -} - - -WRegion *panews_do_get_nextto(WPaneWS *ws, WRegion *reg, - int dir, int primn, bool any) -{ - WSplitRegion *node=get_node_check(ws, reg), *nextto=NULL; - - if(node==NULL) - return NULL; - - nextto=do_get_nextto((WSplit*)node, dir, primn, TRUE, FALSE); - - if(nextto!=NULL) - return nextto->reg; - - return NULL; -} - -WRegion *panews_do_get_farthest(WPaneWS *ws, - int dir, int primn, bool any) -{ - WSplitFilter *filter=(any ? filter_any : filter_no_stdisp); - WSplit *node=NULL; - if(ws->tiling.split_tree!=NULL) - node=split_current_todir(ws->tiling.split_tree, dir, primn, filter); - if(node!=NULL && OBJ_IS(node, WSplitRegion)) - return ((WSplitRegion*)node)->reg; - return NULL; -} - - -WSplitRegion *split_tree_find_region_in_pane_of(WSplit *node) -{ - return do_get_nextto(node, SPLIT_ANY, PRIMN_ANY, FALSE, TRUE); -} - - -/*}}}*/ - - -/*{{{ Markers and other exports */ - - -/*EXTL_DOC - * Get marker. - */ -EXTL_SAFE -EXTL_EXPORT_MEMBER -const char *splitpane_marker(WSplitPane *pane) -{ - return pane->marker; -} - - -/*EXTL_DOC - * Set marker. - */ -EXTL_EXPORT_MEMBER -bool splitpane_set_marker(WSplitPane *pane, const char *s) -{ - char *s2=NULL; - - if(s!=NULL){ - s2=scopy(s); - if(s2==NULL) - return FALSE; - } - - if(pane->marker==NULL) - free(pane->marker); - - pane->marker=s2; - - return TRUE; -} - - -/*EXTL_DOC - * Get root of contained sub-split tree. - */ -EXTL_SAFE -EXTL_EXPORT_MEMBER -WSplit *splitpane_contents(WSplitPane *pane) -{ - return pane->contents; -} - - -/*}}}*/ - - -/*{{{ Save support */ - - -static bool splitunused_get_config(WSplitUnused *node, ExtlTab *ret) -{ - *ret=split_base_config((WSplit*)node); - return TRUE; -} - - -static bool splitpane_get_config(WSplitPane *pane, ExtlTab *ret) -{ - *ret=split_base_config((WSplit*)pane); - - if(pane->contents!=NULL){ - ExtlTab t; - if(!split_get_config(pane->contents, &t)){ - extl_unref_table(*ret); - return FALSE; - } - extl_table_sets_t(*ret, "contents", t); - extl_unref_table(t); - } - - extl_table_sets_s(*ret, "marker", pane->marker); - - return TRUE; -} - - -/*}}}*/ - - -/*{{{ The classes */ - - -static DynFunTab splitunused_dynfuntab[]={ - {split_update_bounds, splitunused_update_bounds}, - {(DynFun*)split_get_config, (DynFun*)splitunused_get_config}, - END_DYNFUNTAB, -}; - - -static DynFunTab splitpane_dynfuntab[]={ - {split_update_bounds, splitpane_update_bounds}, - {split_do_resize, splitpane_do_resize}, - {splitinner_do_rqsize, splitpane_do_rqsize}, - {splitinner_replace, splitpane_replace}, - {splitinner_remove, splitpane_remove}, - {(DynFun*)split_current_todir, (DynFun*)splitpane_current_todir}, - {(DynFun*)splitinner_current, (DynFun*)splitpane_current}, - {(DynFun*)split_get_config, (DynFun*)splitpane_get_config}, - {splitinner_forall, splitpane_forall}, - {split_stacking, splitpane_stacking}, - {split_restack, splitpane_restack}, - {split_reparent, splitpane_reparent}, - END_DYNFUNTAB, -}; - - -EXTL_EXPORT -IMPLCLASS(WSplitUnused, WSplitRegion, splitunused_deinit, splitunused_dynfuntab); - -EXTL_EXPORT -IMPLCLASS(WSplitPane, WSplitInner, splitpane_deinit, splitpane_dynfuntab); - - -/*}}}*/ - diff --git a/mod_panews/splitext.h b/mod_panews/splitext.h deleted file mode 100644 index 0bc73e3..0000000 --- a/mod_panews/splitext.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * ion/panews/splitext.h - * - * Copyright (c) Tuomo Valkonen 1999-2006. - * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - */ - -#ifndef ION_PANEWS_SPLITEXT_H -#define ION_PANEWS_SPLITEXT_H - -#include -#include - -INTRCLASS(WSplitUnused); -INTRCLASS(WSplitPane); - -#include "panews.h" - -DECLCLASS(WSplitUnused){ - WSplitRegion regnode; -}; - -DECLCLASS(WSplitPane){ - WSplitInner isplit; - WSplit *contents; - char *marker; -}; - -extern bool splitunused_init(WSplitUnused *split, const WRectangle *geom, - WPaneWS *ws); -extern bool splitpane_init(WSplitPane *split, const WRectangle *geom, - WSplit *cnt); - -extern WSplitUnused *create_splitunused(const WRectangle *geom, - WPaneWS *ws); -extern WSplitPane *create_splitpane(const WRectangle *geom, WSplit *cnt); - -extern void splitunused_deinit(WSplitUnused *split); -extern void splitpane_deinit(WSplitPane *split); - -extern const char *splitpane_get_marker(WSplitPane *pane); -extern bool splitpane_set_marker(WSplitPane *pane, const char *s); - -extern WRegion *panews_do_get_nextto(WPaneWS *ws, WRegion *reg, - int dir, int primn, bool any); -extern WRegion *panews_do_get_farthest(WPaneWS *ws, - int dir, int primn, bool any); - -extern WSplitRegion *split_tree_find_region_in_pane_of(WSplit *node); - -#endif /* ION_PANEWS_SPLITEXT_H */ diff --git a/mod_panews/unusedwin.c b/mod_panews/unusedwin.c deleted file mode 100644 index 7e030f0..0000000 --- a/mod_panews/unusedwin.c +++ /dev/null @@ -1,211 +0,0 @@ -/* - * ion/panews/unusedwin.c - * - * Copyright (c) Tuomo Valkonen 1999-2006. - * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - */ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "unusedwin.h" -#include "splitext.h" -#include "placement.h" -#include "main.h" - - -/*{{{ Init/deinit */ - - -static void unusedwin_getbrush(WUnusedWin *uwin) -{ - GrBrush *brush=gr_get_brush(uwin->wwin.win, - region_rootwin_of((WRegion*)uwin), - "frame-tiled-panews-unused"); - - if(brush!=NULL){ - if(uwin->brush!=NULL) - grbrush_release(uwin->brush); - - uwin->brush=brush; - - grbrush_enable_transparency(brush, GR_TRANSPARENCY_YES); - } -} - - -bool unusedwin_init(WUnusedWin *uwin, WWindow *parent, const WFitParams *fp) -{ - uwin->brush=NULL; - - if(!window_init(&(uwin->wwin), parent, fp)) - return FALSE; - - unusedwin_getbrush(uwin); - - region_add_bindmap((WRegion*)uwin, mod_panews_unusedwin_bindmap); - - window_select_input(&(uwin->wwin), IONCORE_EVENTMASK_NORMAL); - - ((WRegion*)uwin)->flags|=REGION_PLEASE_WARP; - - return TRUE; -} - - -WUnusedWin *create_unusedwin(WWindow *parent, const WFitParams *fp) -{ - CREATEOBJ_IMPL(WUnusedWin, unusedwin, (p, parent, fp)); -} - - -void unusedwin_deinit(WUnusedWin *uwin) -{ - if(uwin->brush!=NULL){ - grbrush_release(uwin->brush); - uwin->brush=NULL; - } - - window_deinit(&(uwin->wwin)); -} - - -/*}}}*/ - - -/*{{{ unusedwin_press */ - - -static void unusedwin_border_inner_geom(const WUnusedWin *uwin, - WRectangle *geom) -{ - GrBorderWidths bdw; - - geom->x=0; - geom->y=0; - geom->w=REGION_GEOM(uwin).w; - geom->h=REGION_GEOM(uwin).h; - - if(uwin->brush!=NULL){ - grbrush_get_border_widths(uwin->brush, &bdw); - - geom->x+=bdw.left; - geom->y+=bdw.top; - geom->w-=bdw.left+bdw.right; - geom->h-=bdw.top+bdw.bottom; - } - - geom->w=maxof(geom->w, 0); - geom->h=maxof(geom->h, 0); -} - - -static int unusedwin_press(WUnusedWin *uwin, XButtonEvent *ev, - WRegion **reg_ret) -{ - WRectangle g; - - *reg_ret=NULL; - - window_p_resize_prepare(&uwin->wwin, ev); - - /* Check border */ - - unusedwin_border_inner_geom(uwin, &g); - - if(rectangle_contains(&g, ev->x, ev->y)) - return FRAME_AREA_CLIENT; - - return FRAME_AREA_BORDER; -} - - -/*}}}*/ - - -/*{{{ unusedwin_handle_drop */ - - -static bool unusedwin_handle_drop(WUnusedWin *uwin, int x, int y, - WRegion *dropped) -{ - WSplitUnused *us=OBJ_CAST(splittree_node_of((WRegion*)uwin), - WSplitUnused); - WPaneWS *ws=REGION_MANAGER_CHK(uwin, WPaneWS); - - if(us==NULL || ws==NULL) - return FALSE; - - return panews_handle_unused_drop(ws, us, dropped); -} - - -/*}}}*/ - - -/*{{{ Drawing */ - - -static void unusedwin_updategr(WUnusedWin *uwin) -{ - unusedwin_getbrush(uwin); - region_updategr_default((WRegion*)uwin); -} - - -static void unusedwin_draw(WUnusedWin *uwin, bool complete) -{ - WRectangle g; - const char *substyle=(REGION_IS_ACTIVE(uwin) - ? "active" - : "inactive"); - - if(uwin->brush==NULL) - return; - - g.x=0; - g.y=0; - g.w=REGION_GEOM(uwin).w; - g.h=REGION_GEOM(uwin).h; - - grbrush_begin(uwin->brush, &g, (complete ? 0 : GRBRUSH_NO_CLEAR_OK)); - - grbrush_draw_border(uwin->brush, &g, substyle); - - grbrush_end(uwin->brush); -} - - -/*}}}*/ - - -/*{{{ The class */ - - -static DynFunTab unusedwin_dynfuntab[]={ - {region_updategr, unusedwin_updategr}, - {window_draw, unusedwin_draw}, - {(DynFun*)window_press, (DynFun*)unusedwin_press}, - {(DynFun*)region_handle_drop, (DynFun*)unusedwin_handle_drop}, - END_DYNFUNTAB, -}; - - -IMPLCLASS(WUnusedWin, WWindow, unusedwin_deinit, unusedwin_dynfuntab); - - -/*}}}*/ - diff --git a/mod_panews/unusedwin.h b/mod_panews/unusedwin.h deleted file mode 100644 index bcdc5ba..0000000 --- a/mod_panews/unusedwin.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * ion/panews/unusedwin.h - * - * Copyright (c) Tuomo Valkonen 1999-2006. - * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - */ - -#ifndef ION_PANEWS_UNUSEDWIN_H -#define ION_PANEWS_UNUSEDWIN_H - -#include -#include - -INTRCLASS(WUnusedWin); - -DECLCLASS(WUnusedWin){ - WWindow wwin; - GrBrush *brush; -}; - -extern bool unusedwin_init(WUnusedWin *pwin, - WWindow *parent, const WFitParams *fp); -extern WUnusedWin *create_unusedwin(WWindow *parent, const WFitParams *fp); - -#endif /* ION_PANEWS_UNUSEDWIN_H */ diff --git a/mod_query/complete.c b/mod_query/complete.c index 0bc2df3..87cd934 100644 --- a/mod_query/complete.c +++ b/mod_query/complete.c @@ -1,7 +1,7 @@ /* * ion/mod_query/complete.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_query/complete.h b/mod_query/complete.h index f7aa910..d9c9773 100644 --- a/mod_query/complete.h +++ b/mod_query/complete.h @@ -1,7 +1,7 @@ /* * ion/mod_query/complete.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_query/edln.c b/mod_query/edln.c index 99283f4..911dee7 100644 --- a/mod_query/edln.c +++ b/mod_query/edln.c @@ -1,7 +1,7 @@ /* * ion/mod_query/edln.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -644,10 +644,10 @@ static int search(Edln *edln, int from, bool bwd, bool match) char *tmpstr=history_search_str(edln); if(tmpstr==NULL) return edln->histent; - e=mod_query_history_search(tmpstr, from, bwd); + e=mod_query_history_search(tmpstr, from, bwd, FALSE); free(tmpstr); }else{ - e=mod_query_history_search(edln->context, from, bwd); + e=mod_query_history_search(edln->context, from, bwd, FALSE); } return e; diff --git a/mod_query/edln.h b/mod_query/edln.h index 9d95de5..ea00f6f 100644 --- a/mod_query/edln.h +++ b/mod_query/edln.h @@ -1,7 +1,7 @@ /* * ion/mod_query/edln.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_query/fwarn.c b/mod_query/fwarn.c index 7280f85..e10d277 100644 --- a/mod_query/fwarn.c +++ b/mod_query/fwarn.c @@ -1,7 +1,7 @@ /* * ion/mod_query/query.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_query/fwarn.h b/mod_query/fwarn.h index 6dfee37..6e91a64 100644 --- a/mod_query/fwarn.h +++ b/mod_query/fwarn.h @@ -1,7 +1,7 @@ /* * ion/mod_query/fwarn.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_query/history.c b/mod_query/history.c index 05b6aa5..168f606 100644 --- a/mod_query/history.c +++ b/mod_query/history.c @@ -1,7 +1,7 @@ /* * ion/mod_query/history.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -52,9 +52,10 @@ bool mod_query_history_push(const char *str) void mod_query_history_push_(char *str) { - int ndx=mod_query_history_search(str, 0, FALSE); + int ndx=mod_query_history_search(str, 0, FALSE, TRUE); if(ndx==0){ + free(str); return; /* First entry already */ }else if(ndx>0){ int i, j; @@ -110,7 +111,7 @@ void mod_query_history_clear() -static bool match(const char *h, const char *b) +static bool match(const char *h, const char *b, bool exact) { const char *h_; @@ -124,8 +125,10 @@ static bool match(const char *h, const char *b) if(h_!=NULL) h=h_+1; } - - return (strncmp(h, b, strlen(b))==0); + + return (exact + ? strcmp(h, b)==0 + : strncmp(h, b, strlen(b))==0); } @@ -140,17 +143,18 @@ static const char *skip_colon(const char *s) * Try to find matching history entry. Returns -1 if none was * found. The parameter \var{from} specifies where to start * searching from, and \var{bwd} causes backward search from - * that point. + * that point. If \var{exact} is not set, \var{s} only required + * to be a prefix of the match. */ EXTL_SAFE EXTL_EXPORT -int mod_query_history_search(const char *s, int from, bool bwd) +int mod_query_history_search(const char *s, int from, bool bwd, bool exact) { while(1){ int i=get_index(from); if(i<0) return -1; - if(match(hist[i], s)) + if(match(hist[i], s, exact)) return from; if(bwd) from--; @@ -172,7 +176,7 @@ uint mod_query_history_complete(const char *s, char ***h_ret) int j=get_index(i); if(j<0) break; - if(match(hist[j], s)){ + if(match(hist[j], s, FALSE)){ h[n]=scopy(skip_colon(hist[j])); if(h[n]!=NULL) n++; diff --git a/mod_query/history.h b/mod_query/history.h index 005d62e..f27be88 100644 --- a/mod_query/history.h +++ b/mod_query/history.h @@ -1,7 +1,7 @@ /* * ion/mod_query/history.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -19,7 +19,8 @@ extern const char *mod_query_history_get(int n); extern bool mod_query_history_push(const char *s); extern void mod_query_history_push_(char *s); extern void mod_query_history_clear(); -extern int mod_query_history_search(const char *s, int from, bool bwd); +extern int mod_query_history_search(const char *s, int from, bool bwd, + bool exact); extern uint mod_query_history_complete(const char *s, char ***h_ret); extern ExtlTab mod_query_history_table(); diff --git a/mod_query/input.c b/mod_query/input.c index ee19026..7f8ac99 100644 --- a/mod_query/input.c +++ b/mod_query/input.c @@ -1,7 +1,7 @@ /* * ion/mod_query/input.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -162,7 +162,7 @@ EXTL_EXPORT_MEMBER void input_cancel(WInput *input) { if(region_manager_allows_destroying((WRegion*)input)) - mainloop_defer_destroy((Obj*)input); + region_dispose_((WRegion*)input); } diff --git a/mod_query/input.h b/mod_query/input.h index 21abf71..4f9f758 100644 --- a/mod_query/input.h +++ b/mod_query/input.h @@ -1,7 +1,7 @@ /* * ion/mod_query/input.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_query/inputp.h b/mod_query/inputp.h index 1da92b5..d91960f 100644 --- a/mod_query/inputp.h +++ b/mod_query/inputp.h @@ -1,7 +1,7 @@ /* * ion/mod_query/inputp.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_query/listing.c b/mod_query/listing.c index 9ceb41d..271d17e 100644 --- a/mod_query/listing.c +++ b/mod_query/listing.c @@ -1,7 +1,7 @@ /* * ion/mod_query/listing.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -141,12 +141,12 @@ static void string_calc_parts(GrBrush *brush, int maxw, char *str, static void draw_multirow(GrBrush *brush, int x, int y, int h, char *str, WListingItemInfo *iinf, - int maxw, int ciw, int wrapw, const char *style) + int maxw, int ciw, int wrapw) { int i, l; if(iinf==NULL){ - grbrush_draw_string(brush, x, y, str, strlen(str), TRUE, style); + grbrush_draw_string(brush, x, y, str, strlen(str), TRUE); return; } @@ -158,10 +158,10 @@ static void draw_multirow(GrBrush *brush, int x, int y, int h, l=iinf->part_lens[0]; } - grbrush_draw_string(brush, x, y, str, l, TRUE, style); + grbrush_draw_string(brush, x, y, str, l, TRUE); for(i=1; in_parts; i++){ - grbrush_draw_string(brush, x+maxw-wrapw, y, "\\", 1, TRUE, style); + grbrush_draw_string(brush, x+maxw-wrapw, y, "\\", 1, TRUE); y+=h; str+=l; @@ -171,7 +171,7 @@ static void draw_multirow(GrBrush *brush, int x, int y, int h, } l=iinf->part_lens[i]; - grbrush_draw_string(brush, x, y, str, l, TRUE, style); + grbrush_draw_string(brush, x, y, str, l, TRUE); } } @@ -348,8 +348,7 @@ void init_listing(WListing *l) static void do_draw_listing(GrBrush *brush, const WRectangle *geom, - WListing *l, const char *style, - const char *selstyle) + WListing *l, GrAttr selattr) { int wrapw=grbrush_get_text_width(brush, "\\", 1); int ciw=grbrush_get_text_width(brush, CONT_INDENT, CONT_INDENT_LEN); @@ -372,10 +371,15 @@ static void do_draw_listing(GrBrush *brush, const WRectangle *geom, if(i>=l->nstrs) return; + if(i==l->selected_str) + grbrush_set_attr(brush, selattr); + draw_multirow(brush, geom->x+x, y, l->itemh, l->strs[i], (l->iteminfos!=NULL ? &(l->iteminfos[i]) : NULL), - geom->w-x, ciw, wrapw, - (i==l->selected_str ? selstyle : style)); + geom->w-x, ciw, wrapw); + + if(i==l->selected_str) + grbrush_unset_attr(brush, selattr); y+=l->itemh*ITEMROWS(l, i); r+=ITEMROWS(l, i); @@ -388,18 +392,18 @@ static void do_draw_listing(GrBrush *brush, const WRectangle *geom, void draw_listing(GrBrush *brush, const WRectangle *geom, - WListing *l, bool complete, const char *style, - const char *selstyle) + WListing *l, bool complete, GrAttr selattr) { WRectangle geom2; GrBorderWidths bdw; - - grbrush_begin(brush, geom, GRBRUSH_AMEND|GRBRUSH_NEED_CLIP); - + + grbrush_begin(brush, geom, GRBRUSH_AMEND|GRBRUSH_KEEP_ATTR + |GRBRUSH_NEED_CLIP); + if(complete) grbrush_clear_area(brush, geom); - grbrush_draw_border(brush, geom, style); + grbrush_draw_border(brush, geom); grbrush_get_border_widths(brush, &bdw); @@ -408,7 +412,7 @@ void draw_listing(GrBrush *brush, const WRectangle *geom, geom2.w=geom->w-bdw.left-bdw.right; geom2.h=geom->h-bdw.top-bdw.bottom; - do_draw_listing(brush, &geom2, l, style, selstyle); + do_draw_listing(brush, &geom2, l, selattr); grbrush_end(brush); } diff --git a/mod_query/listing.h b/mod_query/listing.h index 457ec08..b4d10f0 100644 --- a/mod_query/listing.h +++ b/mod_query/listing.h @@ -1,7 +1,7 @@ /* * ion/mod_query/listing.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -41,8 +41,7 @@ extern void setup_listing(WListing *l, char **strs, int nstrs, bool onecol); extern void deinit_listing(WListing *l); extern void fit_listing(GrBrush *brush, const WRectangle *geom, WListing *l); extern void draw_listing(GrBrush *brush, const WRectangle *geom, WListing *l, - bool complete, const char *style, - const char *selstyle); + bool complete, GrAttr selattr); extern bool scrollup_listing(WListing *l); extern bool scrolldown_listing(WListing *l); extern bool listing_select(WListing *l, int i); diff --git a/mod_query/main.c b/mod_query/main.c index 9eb7323..aeef9ae 100644 --- a/mod_query/main.c +++ b/mod_query/main.c @@ -1,7 +1,7 @@ /* * ion/mod_query/main.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -55,7 +55,8 @@ WBindmap *mod_query_wedln_bindmap=NULL; ModQueryConfig mod_query_config={ 250, - TRUE + TRUE, + FALSE }; @@ -68,6 +69,8 @@ ModQueryConfig mod_query_config={ * (default: true). \\ * \var{autoshowcompl_delay} & (integer) auto-show-completions delay * in milliseconds (default: 250). \\ + * \var{caseicompl} & (boolean) Turn some completions case-insensitive + * (default: false). \\ * \end{tabularx} */ EXTL_EXPORT @@ -76,6 +79,7 @@ void mod_query_set(ExtlTab tab) ModQueryConfig *c=&mod_query_config; extl_table_gets_b(tab, "autoshowcompl", &c->autoshowcompl); + extl_table_gets_b(tab, "caseicompl", &c->caseicompl); if(extl_table_gets_i(tab, "autoshowcompl_delay", &c->autoshowcompl_delay)){ @@ -87,6 +91,7 @@ void mod_query_set(ExtlTab tab) * Get module configuration. For more information see * \fnref{mod_query.set}. */ +EXTL_SAFE EXTL_EXPORT ExtlTab mod_query_get() { @@ -94,6 +99,7 @@ ExtlTab mod_query_get() ExtlTab tab=extl_create_table(); extl_table_sets_b(tab, "autoshowcompl", c->autoshowcompl); + extl_table_sets_b(tab, "caseicompl", c->caseicompl); extl_table_sets_i(tab, "autoshowcompl_delay", c->autoshowcompl_delay); return tab; diff --git a/mod_query/main.h b/mod_query/main.h index 2d57b13..0a3f34f 100644 --- a/mod_query/main.h +++ b/mod_query/main.h @@ -1,7 +1,7 @@ /* * ion/mod_query/main.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -20,6 +20,7 @@ INTRSTRUCT(ModQueryConfig); DECLSTRUCT(ModQueryConfig){ int autoshowcompl_delay; bool autoshowcompl; + bool caseicompl; }; diff --git a/mod_query/mod_query.lua b/mod_query/mod_query.lua index 0f51738..243f987 100644 --- a/mod_query/mod_query.lua +++ b/mod_query/mod_query.lua @@ -1,7 +1,7 @@ -- -- ion/query/mod_query.lua -- Some common queries for Ion -- --- Copyright (c) Tuomo Valkonen 2004-2006. +-- Copyright (c) Tuomo Valkonen 2004-2007. -- -- Ion is free software; you can redistribute it and/or modify it under -- the terms of the GNU Lesser General Public License as published by @@ -31,14 +31,6 @@ local DIE_TIMEOUT_NO_ERRORCODE=2 -- 2 seconds -- Generic helper functions {{{ -function mod_query.make_completor(completefn) - local function completor(cp, str, point) - cp:set_completions(completefn(str, point)) - end - return completor -end - - --DOC -- Low-level query routine. \var{mplex} is the \type{WMPlex} to display -- the query in, \var{prompt} the prompt string, and \var{initvalue} @@ -60,12 +52,13 @@ function mod_query.query(mplex, prompt, initvalue, handler, completor, end -- Check that no other queries are open in the mplex. - local l=mplex:managed_list() - for i, r in pairs(l) do - if obj_is(r, "WEdln") then - return - end + local ok=mplex:managed_i(function(r) + return not obj_is(r, "WEdln") + end) + if not ok then + return end + local wedln=mod_query.do_query(mplex, prompt, initvalue, handle_it, completor, cycle) if context then @@ -175,6 +168,20 @@ function mod_query.file_completor(wedln, str) end +function mod_query.get_initdir(mplex) + --if mod_query.last_dir then + -- return mod_query.last_dir + --end + local wd=(ioncore.get_dir_for(mplex) or os.getenv("PWD")) + if wd==nil then + wd="/" + elseif string.sub(wd, -1)~="/" then + wd=wd .. "/" + end + return wd +end + + function mod_query.query_execfile(mplex, prompt, prog) assert(prog~=nil) local function handle_execwith(mplex, str) @@ -200,39 +207,10 @@ function mod_query.query_execwith(mplex, prompt, dflt, prog, completor, end -function mod_query.get_initdir(mplex) - --if mod_query.last_dir then - -- return mod_query.last_dir - --end - local wd=(ioncore.get_dir_for(mplex) or os.getenv("PWD")) - if wd==nil then - wd="/" - elseif string.sub(wd, -1)~="/" then - wd=wd .. "/" - end - return wd -end - - -local MAXDEPTH=10 - +-- }}} -function mod_query.complete_from_list(list, str) - local results={} - local len=string.len(str) - if len==0 then - results=list - else - for _, m in pairs(list) do - if string.sub(m, 1, len)==str then - table.insert(results, m) - end - end - end - - return results -end +-- Completion helpers {{{ local pipes={} @@ -325,6 +303,85 @@ function mod_query.popen_completions(cp, cmd, fn, reshnd) end +local function mk_completion_test(str, sub_ok, casei_ok) + if not str then + return function(s) return true end + end + + local function mk(str, sub_ok) + if sub_ok then + return function(s) return string.find(s, str, 1, true) end + else + local len=string.len(str) + return function(s) return string.sub(s, 1, len)==str end + end + end + + local casei=(casei_ok and mod_query.get().caseicompl) + + if not casei then + return mk(str, sub_ok) + else + local fn=mk(string.lower(str), sub_ok) + return function(s) return fn(string.lower(s)) end + end +end + + +local function mk_completion_add(entries, str, sub_ok, casei_ok) + local tst=mk_completion_test(str, sub_ok, casei_ok) + + return function(s) + if s and tst(s) then + table.insert(entries, s) + end + end +end + + +function mod_query.complete_keys(list, str, sub_ok, casei_ok) + local results={} + local test_add=mk_completion_add(results, str, sub_ok, casei_ok) + + for m, _ in pairs(list) do + test_add(m) + end + + return results +end + + +function mod_query.complete_name(str, iter) + local sub_ok_first=true + local casei_ok=true + local entries={} + local tst_add=mk_completion_add(entries, str, sub_ok_first, casei_ok) + + iter(function(reg) + tst_add(reg:name()) + return true + end) + + if #entries==0 and not sub_ok_first then + local tst_add2=mk_completion_add(entries, str, true, casei_ok) + iter(function(reg) + tst_add2(reg:name()) + return true + end) + end + + return entries +end + + +function mod_query.make_completor(completefn) + local function completor(cp, str, point) + cp:set_completions(completefn(str, point)) + end + return completor +end + + -- }}} @@ -340,36 +397,24 @@ function mod_query.call_warn(mplex, fn) end -function mod_query.complete_name(str, list) - local entries={} - local l=string.len(str) - for i, reg in pairs(list) do - local nm=reg:name() - if nm and string.sub(nm, 1, l)==str then - table.insert(entries, nm) - end - end - if #entries==0 then - for i, reg in pairs(list) do - local nm=reg:name() - if nm and string.find(nm, str, 1, true) then - table.insert(entries, nm) - end - end - end - return entries -end - function mod_query.complete_clientwin(str) - return mod_query.complete_name(str, ioncore.clientwin_list()) + return mod_query.complete_name(str, ioncore.clientwin_i) end + function mod_query.complete_workspace(str) - return mod_query.complete_name(str, ioncore.region_list("WGroupWS")) + local function iter(fn) + return ioncore.region_i(function(obj) + return (not obj_is(obj, "WGroupWS") + or fn(obj)) + end) + end + return mod_query.complete_name(str, iter) end + function mod_query.complete_region(str) - return mod_query.complete_name(str, ioncore.region_list()) + return mod_query.complete_name(str, ioncore.region_i) end @@ -383,6 +428,7 @@ function mod_query.gotoclient_handler(frame, str) end end + function mod_query.attachclient_handler(frame, str) local cwin=ioncore.lookup_clientwin(str) @@ -423,18 +469,37 @@ function mod_query.workspace_handler(mplex, name) local ws=ioncore.lookup_region(name, "WGroupWS") if ws then ws:goto() - return - end + else + local function create_handler(mplex_, layout) + if not layout or layout=="" then + layout="default" + end + + if not ioncore.getlayout(layout) then + mod_query.warn(mplex_, TR("Unknown layout")) + else + local scr=mplex:screen_of() + + local function mkws() + local tmpl={name=name, switchto=true} + if not ioncore.create_ws(scr, tmpl, layout) then + error(TR("Unknown error")) + end + end - local scr=mplex:screen_of() - - local function mkws() - if not ioncore.create_ws(scr, {name=name}) then - error(TR("Unknown error")) + mod_query.call_warn(mplex, mkws) + end end - end - mod_query.call_warn(mplex, mkws) + local function compl_layout(str) + local los=ioncore.getlayout(nil, true) + return mod_query.complete_keys(los, str, true, true) + end + + mod_query.query(mplex, TR("New workspace layout (default):"), nil, + create_handler, mod_query.make_completor(compl_layout), + "workspacelayout") + end end @@ -504,10 +569,20 @@ end --DOC --- This function asks for a name new for the workspace on which the --- query resides. -function mod_query.query_renameworkspace(mplex) - local ws=ioncore.find_manager(mplex, "WGroupWS") +-- This function asks for a name new for the workspace \var{ws}, +-- or the one on which \var{mplex} resides, if it is not set. +-- If \var{mplex} is not set, one is looked for. +function mod_query.query_renameworkspace(mplex, ws) + if not mplex then + assert(ws) + mplex=ioncore.find_manager(ws, "WMPlex") + elseif not ws then + assert(mplex) + ws=ioncore.find_manager(mplex, "WGroupWS") + end + + assert(mplex and ws) + mod_query.query(mplex, TR("Workspace name:"), ws:name(), function(mplex, str) ws:set_name(str) end, nil, "framename") @@ -766,6 +841,8 @@ end mod_query.known_hosts={} +mod_query.hostnicks={} +mod_query.ssh_completions={} function mod_query.get_known_hosts(mplex) @@ -789,8 +866,6 @@ function mod_query.get_known_hosts(mplex) end -mod_query.hostnicks={} - function mod_query.get_hostnicks(mplex) mod_query.hostnicks={} local f @@ -800,7 +875,7 @@ function mod_query.get_hostnicks(mplex) if h then f=io.open(h.."/.ssh/config") end - if not f then + if not f then warn(TR("Failed to open ~/.ssh/config")) return end @@ -837,21 +912,10 @@ function mod_query.complete_ssh(str) end local res = {} - - if string.len(host)==0 then - if string.len(user)==0 then - return mod_query.ssh_completions - end - - for _, v in ipairs(mod_query.ssh_completions) do - table.insert(res, user .. v) - end - return res - end + local tst = mk_completion_test(host, true, false) for _, v in ipairs(mod_query.ssh_completions) do - local s, e=string.find(v, host, 1, true) - if s==1 and e>=1 then + if tst(v) then table.insert(res, user .. v) end end @@ -859,7 +923,6 @@ function mod_query.complete_ssh(str) return res end -mod_query.ssh_completions={} --DOC -- This query asks for a host to connect to with SSH. @@ -1086,7 +1149,7 @@ function mod_query.query_menu(mplex, themenu, prompt) end local function xform_name(n, is_submenu) - return (string.lower(string.gsub(n, "[-%s]+", "-")) + return (string.lower(string.gsub(n, "[-/%s]+", "-")) ..(is_submenu and "/" or "")) end @@ -1116,13 +1179,8 @@ function mod_query.query_menu(mplex, themenu, prompt) local ntab=xform_menu({}, menu, "") local function complete(str) - local results={} - for s, e in pairs(ntab) do - if string.find(s, str, 1, true) then - table.insert(results, s) - end - end - return results + -- casei_ok false, because everything is already in lower case + return mod_query.complete_keys(ntab, str, true, false) end local function handle(mplex, str) @@ -1188,14 +1246,16 @@ function mod_query.show_tree(mplex, reg, max_depth) indent, reg:xid()) end - if (not max_depth or max_depth > d) and reg.managed_list then - local mgd=reg:managed_list() - if #mgd > 0 then - s=s .. "\n" .. indent .. "---" - for k, v in pairs(mgd) do - s=s .. "\n" .. get_info(v, indent, d+1) - end - end + if (not max_depth or max_depth > d) and reg.managed_i then + local first=true + reg:managed_i(function(sub) + if first then + s=s .. "\n" .. indent .. "---" + first=false + end + s=s .. "\n" .. get_info(sub, indent, d+1) + return true + end) end return s diff --git a/mod_query/mod_query_chdir.lua b/mod_query/mod_query_chdir.lua index 3b408d2..8c60cb1 100644 --- a/mod_query/mod_query_chdir.lua +++ b/mod_query/mod_query_chdir.lua @@ -1,7 +1,7 @@ -- -- ion/query/mod_query_chdir.lua -- --- Copyright (c) Tuomo Valkonen 2004-2006. +-- Copyright (c) Tuomo Valkonen 2004-2007. -- -- Ion is free software; you can redistribute it and/or modify it under -- the terms of the GNU Lesser General Public License as published by diff --git a/mod_query/query.c b/mod_query/query.c index b56c087..9318c89 100644 --- a/mod_query/query.c +++ b/mod_query/query.c @@ -1,7 +1,7 @@ /* * ion/mod_query/query.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -20,7 +20,7 @@ #include "wedln.h" -static void create_cycle_binding(WEdln *wedln, XKeyEvent *ev, ExtlFn cycle) +static void create_cycle_binding(WEdln *wedln, uint kcb, uint state, ExtlFn cycle) { WBindmap *bindmap=create_bindmap(); WBinding b; @@ -28,9 +28,9 @@ static void create_cycle_binding(WEdln *wedln, XKeyEvent *ev, ExtlFn cycle) if(bindmap==NULL) return; - b.ksb=XKeycodeToKeysym(ioncore_g.dpy, ev->keycode, 0); - b.kcb=ev->keycode; - b.state=ev->state; + b.ksb=XKeycodeToKeysym(ioncore_g.dpy, kcb, 0); + b.kcb=kcb; + b.state=state; b.act=BINDING_KEYPRESS; b.area=0; b.wait=FALSE; @@ -67,7 +67,6 @@ WEdln *mod_query_do_query(WMPlex *mplex, const char *prompt, const char *dflt, WRectangle geom; WEdlnCreateParams fnp; WMPlexAttachParams par; - XKeyEvent *ev=ioncore_current_key_event(); WEdln *wedln; fnp.prompt=prompt; @@ -85,9 +84,13 @@ WEdln *mod_query_do_query(WMPlex *mplex, const char *prompt, const char *dflt, (WRegionCreateFn*)create_wedln, (void*)&fnp); - if(wedln!=NULL && ev!=NULL && cycle!=extl_fn_none()) - create_cycle_binding(wedln, ev, cycle); + if(wedln!=NULL && cycle!=extl_fn_none()){ + uint kcb, state; + bool sub; + if(ioncore_current_key(&kcb, &state, &sub) && !sub) + create_cycle_binding(wedln, kcb, state, cycle); + } return wedln; } diff --git a/mod_query/query.h b/mod_query/query.h index 9387a17..87b60ee 100644 --- a/mod_query/query.h +++ b/mod_query/query.h @@ -1,7 +1,7 @@ /* * ion/mod_query/query.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_query/wedln-wrappers.c b/mod_query/wedln-wrappers.c index 3043d05..fa5f0e4 100644 --- a/mod_query/wedln-wrappers.c +++ b/mod_query/wedln-wrappers.c @@ -1,7 +1,7 @@ /* * ion/mod_query/wedln-wrappers.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_query/wedln.c b/mod_query/wedln.c index 094f22c..fa9193c 100644 --- a/mod_query/wedln.c +++ b/mod_query/wedln.c @@ -1,7 +1,7 @@ /* * ion/mod_query/wedln.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -25,6 +25,7 @@ #include #include #include +#include #include "edln.h" #include "wedln.h" #include "inputp.h" @@ -50,12 +51,14 @@ static int calc_text_y(WEdln *wedln, const WRectangle *geom) static int wedln_draw_strsect(WEdln *wedln, const WRectangle *geom, int x, int y, const char *str, int len, - const char *attr) + GrAttr a) { if(len==0) return 0; - grbrush_draw_string(WEDLN_BRUSH(wedln), x, y, str, len, TRUE, attr); + grbrush_set_attr(WEDLN_BRUSH(wedln), a); + grbrush_draw_string(WEDLN_BRUSH(wedln), x, y, str, len, TRUE); + grbrush_unset_attr(WEDLN_BRUSH(wedln), a); return grbrush_get_text_width(WEDLN_BRUSH(wedln), str, len); } @@ -73,9 +76,34 @@ static void dispu(const char* s, int l) } #endif -#define DSTRSECT(LEN, INV) \ - if(LEN>0){tx+=wedln_draw_strsect(wedln, geom, geom->x+tx, ty, str, LEN, INV); \ - str+=LEN; len-=LEN;} +#define DSTRSECT(LEN, A) \ + if(LEN>0){ \ + tx+=wedln_draw_strsect(wedln, geom, geom->x+tx, ty, \ + str, LEN, GR_ATTR(A)); \ + str+=LEN; len-=LEN; \ + } + + +GR_DEFATTR(active); +GR_DEFATTR(inactive); +GR_DEFATTR(normal); +GR_DEFATTR(selection); +GR_DEFATTR(cursor); +GR_DEFATTR(prompt); +GR_DEFATTR(info); + +static void init_attr() +{ + GR_ALLOCATTR_BEGIN; + GR_ALLOCATTR(active); + GR_ALLOCATTR(inactive); + GR_ALLOCATTR(normal); + GR_ALLOCATTR(selection); + GR_ALLOCATTR(cursor); + GR_ALLOCATTR(prompt); + GR_ALLOCATTR(info); + GR_ALLOCATTR_END; +} static void wedln_do_draw_str_box(WEdln *wedln, const WRectangle *geom, @@ -83,43 +111,30 @@ static void wedln_do_draw_str_box(WEdln *wedln, const WRectangle *geom, int mark, int tx) { int len=strlen(str), ll=0, ty=0; - const char *normalstyle=(REGION_IS_ACTIVE(wedln) - ? "active-normal" : "inactive-normal"); - const char *selectionstyle=(REGION_IS_ACTIVE(wedln) - ? "active-selection" : "inactive-selection"); - const char *cursorstyle=(REGION_IS_ACTIVE(wedln) - ? "active-cursor" : "inactive-cursor"); - - /*if(txw){ - WRectangle g=*geom; - g.x+=tx; - g.w-=tx; - grbrush_clear_area(WEDLN_BRUSH(wedln), &g); - }*/ ty=calc_text_y(wedln, geom); if(mark<=cursor){ if(mark>=0){ - DSTRSECT(mark, normalstyle); - DSTRSECT(cursor-mark, selectionstyle); + DSTRSECT(mark, normal); + DSTRSECT(cursor-mark, selection); }else{ - DSTRSECT(cursor, normalstyle); + DSTRSECT(cursor, normal); } if(len==0){ tx+=wedln_draw_strsect(wedln, geom, geom->x+tx, ty, - " ", 1, cursorstyle); + " ", 1, GR_ATTR(cursor)); }else{ ll=str_nextoff(str, 0); - DSTRSECT(ll, cursorstyle); + DSTRSECT(ll, cursor); } }else{ - DSTRSECT(cursor, normalstyle); + DSTRSECT(cursor, normal); ll=str_nextoff(str, 0); - DSTRSECT(ll, cursorstyle); - DSTRSECT(mark-cursor-ll, selectionstyle); + DSTRSECT(ll, cursor); + DSTRSECT(mark-cursor-ll, selection); } - DSTRSECT(len, normalstyle); + DSTRSECT(len, normal); if(txw){ WRectangle g=*geom; @@ -150,7 +165,8 @@ static void wedln_draw_str_box(WEdln *wedln, const WRectangle *geom, if(dstart!=0) tx=grbrush_get_text_width(WEDLN_BRUSH(wedln), str+vstart, dstart); - grbrush_begin(WEDLN_BRUSH(wedln), geom, GRBRUSH_AMEND|GRBRUSH_NEED_CLIP); + grbrush_begin(WEDLN_BRUSH(wedln), geom, + GRBRUSH_AMEND|GRBRUSH_KEEP_ATTR|GRBRUSH_NEED_CLIP); wedln_do_draw_str_box(wedln, geom, str+vstart+dstart, point, mark, tx); @@ -350,17 +366,10 @@ void wedln_draw_completions(WEdln *wedln, bool complete) WRectangle geom; if(wedln->compl_list.strs!=NULL && WEDLN_BRUSH(wedln)!=NULL){ - const char *style=(REGION_IS_ACTIVE(wedln) - ? "active" - : "inactive"); - const char *selstyle=(REGION_IS_ACTIVE(wedln) - ? "active-selection" - : "inactive-selection"); - get_completions_geom(wedln, G_CURRENT, &geom); draw_listing(WEDLN_BRUSH(wedln), &geom, &(wedln->compl_list), - complete, style, selstyle); + complete, GR_ATTR(selection)); } } @@ -369,7 +378,6 @@ void wedln_draw_textarea(WEdln *wedln) { WRectangle geom; int ty; - const char *style=(REGION_IS_ACTIVE(wedln) ? "active" : "inactive"); if(WEDLN_BRUSH(wedln)==NULL) return; @@ -378,30 +386,29 @@ void wedln_draw_textarea(WEdln *wedln) /*grbrush_begin(WEDLN_BRUSH(wedln), &geom, GRBRUSH_AMEND);*/ - grbrush_draw_border(WEDLN_BRUSH(wedln), &geom, style); + grbrush_draw_border(WEDLN_BRUSH(wedln), &geom); get_inner_geom(wedln, G_CURRENT, &geom); ty=calc_text_y(wedln, &geom); + grbrush_set_attr(WEDLN_BRUSH(wedln), GR_ATTR(prompt)); + if(wedln->prompt!=NULL){ - const char *promptstyle=(REGION_IS_ACTIVE(wedln) - ? "active-prompt" - : "inactive-prompt"); grbrush_draw_string(WEDLN_BRUSH(wedln), geom.x, ty, - wedln->prompt, wedln->prompt_len, TRUE, - promptstyle); + wedln->prompt, wedln->prompt_len, TRUE); } if(wedln->info!=NULL){ int x=geom.x+geom.w-wedln->info_w; - const char *promptstyle=(REGION_IS_ACTIVE(wedln) - ? "active-prompt-info" - : "inactive-prompt-info"); + + grbrush_set_attr(WEDLN_BRUSH(wedln), GR_ATTR(info)); grbrush_draw_string(WEDLN_BRUSH(wedln), x, ty, - wedln->info, wedln->info_len, TRUE, - promptstyle); + wedln->info, wedln->info_len, TRUE); + grbrush_unset_attr(WEDLN_BRUSH(wedln), GR_ATTR(info)); } + + grbrush_unset_attr(WEDLN_BRUSH(wedln), GR_ATTR(prompt)); get_textarea_geom(wedln, G_CURRENT, &geom); @@ -412,7 +419,7 @@ void wedln_draw_textarea(WEdln *wedln) } -void wedln_draw(WEdln *wedln, bool complete) +static void wedln_draw_(WEdln *wedln, bool complete, bool completions) { WRectangle g; int f=(complete ? 0 : GRBRUSH_NO_CLEAR_OK); @@ -424,13 +431,24 @@ void wedln_draw(WEdln *wedln, bool complete) grbrush_begin(WEDLN_BRUSH(wedln), &g, f); - wedln_draw_completions(wedln, FALSE); + grbrush_set_attr(WEDLN_BRUSH(wedln), REGION_IS_ACTIVE(wedln) + ? GR_ATTR(active) + : GR_ATTR(inactive)); + + if(completions) + wedln_draw_completions(wedln, FALSE); + wedln_draw_textarea(wedln); grbrush_end(WEDLN_BRUSH(wedln)); } +void wedln_draw(WEdln *wedln, bool complete) +{ + wedln_draw_(wedln, complete, TRUE); +} + /*}}} */ @@ -464,7 +482,7 @@ static void wedln_set_info(WEdln *wedln, const char *info) get_textarea_geom(wedln, G_CURRENT, &tageom); wedln_update_cursor(wedln, tageom.w); - wedln_draw_textarea(wedln); + wedln_draw_(wedln, FALSE, FALSE); } @@ -526,7 +544,8 @@ static void free_completions(char **ptr, int i) { while(i>0){ i--; - free(ptr[i]); + if(ptr[i]!=NULL) + free(ptr[i]); } free(ptr); } @@ -595,19 +614,14 @@ void wedln_set_completions(WEdln *wedln, ExtlTab completions, int cycle) extl_table_gets_s(completions, "common_beg", &beg); extl_table_gets_s(completions, "common_end", &end); - if(wedln_do_set_completions(wedln, ptr, n, beg, end, cycle, FALSE)) - return; + if(!wedln_do_set_completions(wedln, ptr, n, beg, end, cycle, FALSE)) + wedln_hide_completions(wedln); + + return; allocfail: wedln_hide_completions(wedln); free_completions(ptr, i); - while(i>0){ - i--; - /* edln_do_completions may NULL things */ - if(ptr[i]!=NULL) - free(ptr[i]); - } - free(ptr); } @@ -899,6 +913,8 @@ static bool wedln_init(WEdln *wedln, WWindow *par, const WFitParams *fp, { wedln->vstart=0; + init_attr(); + if(!wedln_init_prompt(wedln, params->prompt)) return FALSE; diff --git a/mod_query/wedln.h b/mod_query/wedln.h index 40c0529..e966b41 100644 --- a/mod_query/wedln.h +++ b/mod_query/wedln.h @@ -1,7 +1,7 @@ /* * ion/mod_query/wedln.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_query/wmessage.c b/mod_query/wmessage.c index aa6002d..b8c5fa4 100644 --- a/mod_query/wmessage.c +++ b/mod_query/wmessage.c @@ -1,7 +1,7 @@ /* * ion/mod_query/wmessage.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -16,6 +16,7 @@ #include #include #include +#include #include "wmessage.h" #include "inputp.h" @@ -77,9 +78,21 @@ static void wmsg_calc_size(WMessage *wmsg, WRectangle *geom) /*{{{ Draw */ +GR_DEFATTR(active); +GR_DEFATTR(inactive); + + +static void init_attr() +{ + GR_ALLOCATTR_BEGIN; + GR_ALLOCATTR(active); + GR_ALLOCATTR(inactive); + GR_ALLOCATTR_END; +} + + static void wmsg_draw(WMessage *wmsg, bool complete) { - const char *style=(REGION_IS_ACTIVE(wmsg) ? "active" : "inactive"); WRectangle geom; if(WMSG_BRUSH(wmsg)==NULL) @@ -90,8 +103,12 @@ static void wmsg_draw(WMessage *wmsg, bool complete) grbrush_begin(WMSG_BRUSH(wmsg), &geom, (complete ? 0 : GRBRUSH_NO_CLEAR_OK)); + grbrush_set_attr(WMSG_BRUSH(wmsg), REGION_IS_ACTIVE(wmsg) + ? GR_ATTR(active) + : GR_ATTR(inactive)); + draw_listing(WMSG_BRUSH(wmsg), &geom, &(wmsg->listing), - FALSE, style, style); + FALSE, GRATTR_NONE); grbrush_end(WMSG_BRUSH(wmsg)); } @@ -174,6 +191,8 @@ static bool wmsg_init(WMessage *wmsg, WWindow *par, const WFitParams *fp, p=p+l+1; } + init_attr(); + init_listing(&(wmsg->listing)); setup_listing(&(wmsg->listing), ptr, k, TRUE); diff --git a/mod_query/wmessage.h b/mod_query/wmessage.h index bc05b52..be1bfca 100644 --- a/mod_query/wmessage.h +++ b/mod_query/wmessage.h @@ -1,7 +1,7 @@ /* * ion/mod_query/wmessage.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_sm/sm.c b/mod_sm/sm.c index 6971f7d..d47a546 100644 --- a/mod_sm/sm.c +++ b/mod_sm/sm.c @@ -1,7 +1,7 @@ /* * ion/mod_sm/sm.c * - * Copyright (c) Tuomo Valkonen 2004-2006. + * Copyright (c) Tuomo Valkonen 2004-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_sm/sm_matchwin.c b/mod_sm/sm_matchwin.c index d64f671..eb5b7a2 100644 --- a/mod_sm/sm_matchwin.c +++ b/mod_sm/sm_matchwin.c @@ -1,7 +1,7 @@ /* * ion/mod_sm/sm_mathcwin.c * - * Copyright (c) Tuomo Valkonen 2004-2006. + * Copyright (c) Tuomo Valkonen 2004-2007. * * Based on the code of the 'sm' module for Ion1 by an unknown contributor. * diff --git a/mod_sm/sm_matchwin.h b/mod_sm/sm_matchwin.h index 2dd45f3..def2a97 100644 --- a/mod_sm/sm_matchwin.h +++ b/mod_sm/sm_matchwin.h @@ -1,7 +1,7 @@ /* * ion/mod_sm/sm_mathcwin.c * - * Copyright (c) Tuomo Valkonen 2004-2006. + * Copyright (c) Tuomo Valkonen 2004-2007. * * Based on the code of the 'sm' module for Ion1 by an unknown contributor. * diff --git a/mod_sm/sm_session.c b/mod_sm/sm_session.c index 7472e8b..a4373d0 100644 --- a/mod_sm/sm_session.c +++ b/mod_sm/sm_session.c @@ -1,7 +1,7 @@ /* * ion/mod_sm/sm_session.c * - * Copyright (c) Tuomo Valkonen 2004-2006. + * Copyright (c) Tuomo Valkonen 2004-2007. * * Based on the code of the 'sm' module for Ion1 by an unknown contributor. * diff --git a/mod_sm/sm_session.h b/mod_sm/sm_session.h index 306bf99..3fa3532 100644 --- a/mod_sm/sm_session.h +++ b/mod_sm/sm_session.h @@ -1,7 +1,7 @@ /* * ion/mod_sm/sm_session.h * - * Copyright (c) Tuomo Valkonen 2004-2006. + * Copyright (c) Tuomo Valkonen 2004-2007. * * Based on the code of the 'sm' module for Ion1 by an unknown contributor. * diff --git a/mod_sp/main.c b/mod_sp/main.c index b827ae2..c9f13b4 100644 --- a/mod_sp/main.c +++ b/mod_sp/main.c @@ -1,7 +1,7 @@ /* * ion/mod_sp/main.c * - * Copyright (c) Tuomo Valkonen 2004-2006. + * Copyright (c) Tuomo Valkonen 2004-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_sp/main.h b/mod_sp/main.h index f290b35..45b85e0 100644 --- a/mod_sp/main.h +++ b/mod_sp/main.h @@ -1,7 +1,7 @@ /* * ion/mod_sp/main.h * - * Copyright (c) Tuomo Valkonen 2004-2006. + * Copyright (c) Tuomo Valkonen 2004-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_statusbar/draw.c b/mod_statusbar/draw.c index 29e9f02..19ba93a 100644 --- a/mod_statusbar/draw.c +++ b/mod_statusbar/draw.c @@ -1,7 +1,7 @@ /* * ion/mod_statusbar/draw.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -109,7 +109,7 @@ void statusbar_calculate_xs(WStatusBar *sb) static void draw_elems(GrBrush *brush, WRectangle *g, int ty, WSBElem *elems, int nelems, bool needfill, - const char *dfltattr, bool complete) + bool complete) { int prevx=g->x; int maxx=g->x+g->w; @@ -125,8 +125,15 @@ static void draw_elems(GrBrush *brush, WRectangle *g, int ty, const char *s=(elems->text!=NULL ? elems->text : STATUSBAR_NX_STR); - grbrush_draw_string(brush, elems->x, ty, s, strlen(s), needfill, - elems->attr ? elems->attr : dfltattr); + + grbrush_set_attr(brush, elems->attr); + grbrush_set_attr(brush, elems->meter); + + grbrush_draw_string(brush, elems->x, ty, s, strlen(s), needfill); + + grbrush_unset_attr(brush, elems->meter); + grbrush_unset_attr(brush, elems->attr); + prevx=elems->x+elems->text_w; } elems++; @@ -162,7 +169,7 @@ void statusbar_draw(WStatusBar *sb, bool complete) grbrush_begin(sb->brush, &g, (complete ? 0 : GRBRUSH_NO_CLEAR_OK)); - grbrush_draw_border(sb->brush, &g, NULL); + grbrush_draw_border(sb->brush, &g); if(sb->elems==NULL) return; @@ -174,8 +181,7 @@ void statusbar_draw(WStatusBar *sb, bool complete) ty=(g.y+fnte.baseline+(g.h-fnte.max_height)/2); - draw_elems(sb->brush, &g, ty, sb->elems, sb->nelems, - TRUE, NULL, complete); + draw_elems(sb->brush, &g, ty, sb->elems, sb->nelems, TRUE, complete); grbrush_end(sb->brush); } diff --git a/mod_statusbar/draw.h b/mod_statusbar/draw.h index c30a86f..0724973 100644 --- a/mod_statusbar/draw.h +++ b/mod_statusbar/draw.h @@ -1,7 +1,7 @@ /* * ion/mod_statusbar/draw.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_statusbar/main.c b/mod_statusbar/main.c index 9ec4f20..bf0e1d0 100644 --- a/mod_statusbar/main.c +++ b/mod_statusbar/main.c @@ -1,7 +1,7 @@ /* * ion/mod_statusbar/main.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -94,7 +94,6 @@ static bool wait_statusd_init(int outfd, int errfd, ExtlFn dh, ExtlFn eh) int nfds=maxof(outfd, errfd); int retval; bool dummy, doneseen, eagain=FALSE; - const char *timeout_msg=TR("ion-statusd launch timeout."); if(gettimeofday(&endtime, NULL)!=0){ warn_err(); diff --git a/mod_statusbar/main.h b/mod_statusbar/main.h index b8ec8d2..fa4dbfd 100644 --- a/mod_statusbar/main.h +++ b/mod_statusbar/main.h @@ -1,7 +1,7 @@ /* * ion/mod_statusbar/main.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_statusbar/mod_statusbar.lua b/mod_statusbar/mod_statusbar.lua index aeef9cb..3164927 100644 --- a/mod_statusbar/mod_statusbar.lua +++ b/mod_statusbar/mod_statusbar.lua @@ -1,7 +1,7 @@ -- -- ion/mod_statusbar/mod_statusbar.lua -- --- Copyright (c) Tuomo Valkonen 2004-2006. +-- Copyright (c) Tuomo Valkonen 2004-2007. -- -- Ion is free software; you can redistribute it and/or modify it under -- the terms of the GNU Lesser General Public License as published by diff --git a/mod_statusbar/statusbar.c b/mod_statusbar/statusbar.c index 1568b9f..261560c 100644 --- a/mod_statusbar/statusbar.c +++ b/mod_statusbar/statusbar.c @@ -1,7 +1,7 @@ /* * ion/mod_statusbar/statusbar.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -10,6 +10,7 @@ */ #include +#include #include #include @@ -23,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -42,7 +44,6 @@ 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); - static WStatusBar *statusbars=NULL; @@ -113,15 +114,16 @@ void statusbar_deinit(WStatusBar *p) /*{{{ Content stuff */ + static void init_sbelem(WSBElem *el) { el->type=WSBELEM_NONE; - el->meter=NULL; el->text_w=0; el->text=NULL; el->max_w=0; el->tmpl=NULL; - el->attr=NULL; + el->meter=STRINGID_NONE; + el->attr=STRINGID_NONE; el->stretch=0; el->align=WSBELEM_ALIGN_CENTER; el->zeropad=0; @@ -130,6 +132,20 @@ static void init_sbelem(WSBElem *el) } +static bool gets_stringstore(ExtlTab t, const char *str, StringId *id) +{ + char *s; + + if(extl_table_gets_s(t, str, &s)){ + *id=stringstore_alloc(s); + free(s); + return (*id!=STRINGID_NONE); + } + + return FALSE; +} + + static WSBElem *get_sbelems(ExtlTab t, int *nret, int *filleridxret) { int i, n=extl_table_get_n(t); @@ -157,15 +173,20 @@ static WSBElem *get_sbelems(ExtlTab t, int *nret, int *filleridxret) if(el[i].type==WSBELEM_TEXT || el[i].type==WSBELEM_STRETCH){ extl_table_gets_s(tt, "text", &(el[i].text)); }else if(el[i].type==WSBELEM_METER){ - extl_table_gets_s(tt, "meter", &(el[i].meter)); + gets_stringstore(tt, "meter", &(el[i].meter)); 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); }else if(el[i].type==WSBELEM_SYSTRAY){ - extl_table_gets_s(tt, "meter", &(el[i].meter)); + const char *tmp; + + gets_stringstore(tt, "meter", &(el[i].meter)); extl_table_gets_i(tt, "align", &(el[i].align)); - if(el[i].meter==NULL || strcmp(el[i].meter, "systray")==0) + + tmp=stringstore_get(el[i].meter); + + if(tmp==NULL || strcmp(tmp, "systray")==0) systrayidx=i; }else if(el[i].type==WSBELEM_FILLER){ *filleridxret=i; @@ -198,12 +219,12 @@ static void free_sbelems(WSBElem *el, int n) for(i=0; imin_height=p->natural_h; h->max_set=TRUE; - h->max_width=p->natural_w; + h->max_width=INT_MAX;/*p->natural_w;*/ h->max_height=p->natural_h; } @@ -354,17 +375,22 @@ static WSBElem *statusbar_associate_systray(WStatusBar *sb, WRegion *reg) extl_table_gets_s(cwin->proptab, "statusbar", &name); for(i=0; inelems; i++){ + const char *meter; + if(sb->elems[i].type!=WSBELEM_SYSTRAY) continue; - if(sb->elems[i].meter==NULL){ + + meter=stringstore_get(sb->elems[i].meter); + + if(meter==NULL){ fbel=&sb->elems[i]; continue; } - if(name!=NULL && strcmp(sb->elems[i].meter, name)==0){ + if(name!=NULL && strcmp(meter, name)==0){ el=&sb->elems[i]; break; } - if(strcmp(sb->elems[i].meter, "systray")==0) + if(strcmp(meter, "systray")==0) fbel=&sb->elems[i]; } @@ -721,7 +747,7 @@ ExtlTab statusbar_get_template_table(WStatusBar *sb) extl_table_sets_i(tt, "type", sb->elems[i].type); extl_table_sets_s(tt, "text", sb->elems[i].text); - extl_table_sets_s(tt, "meter", sb->elems[i].meter); + extl_table_sets_s(tt, "meter", stringstore_get(sb->elems[i].meter)); extl_table_sets_s(tt, "tmpl", sb->elems[i].tmpl); extl_table_sets_i(tt, "align", sb->elems[i].align); extl_table_sets_i(tt, "zeropad", sb->elems[i].zeropad); @@ -844,6 +870,8 @@ void statusbar_update(WStatusBar *sb, ExtlTab t) return; for(i=0; inelems; i++){ + const char *meter; + el=&(sb->elems[i]); if(el->type!=WSBELEM_METER) @@ -854,16 +882,18 @@ void statusbar_update(WStatusBar *sb, ExtlTab t) el->text=NULL; } - if(el->attr!=NULL){ - free(el->attr); - el->attr=NULL; + if(el->attr!=GRATTR_NONE){ + stringstore_free(el->attr); + el->attr=GRATTR_NONE; } - if(el->meter!=NULL){ + meter=stringstore_get(el->meter); + + if(meter!=NULL){ const char *str; char *attrnm; - extl_table_gets_s(t, el->meter, &(el->text)); + extl_table_gets_s(t, meter, &(el->text)); if(el->text==NULL){ str=STATUSBAR_NX_STR; @@ -900,9 +930,13 @@ void statusbar_update(WStatusBar *sb, ExtlTab t) grow=TRUE; } - attrnm=scat(el->meter, "_hint"); + attrnm=scat(meter, "_hint"); if(attrnm!=NULL){ - extl_table_gets_s(t, attrnm, &(el->attr)); + char *s; + if(extl_table_gets_s(t, attrnm, &s)){ + el->attr=stringstore_alloc(s); + free(s); + } free(attrnm); } } diff --git a/mod_statusbar/statusbar.h b/mod_statusbar/statusbar.h index 73999ad..8392f16 100644 --- a/mod_statusbar/statusbar.h +++ b/mod_statusbar/statusbar.h @@ -1,7 +1,7 @@ /* * ion/mod_statusbar/statusbar.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -48,10 +48,10 @@ DECLSTRUCT(WSBElem){ int stretch; int text_w; char *text; - char *meter; int max_w; char *tmpl; - char *attr; + StringId meter; + StringId attr; int zeropad; int x; PtrList *traywins; diff --git a/mod_tiling/main.c b/mod_tiling/main.c index 5901c1c..4787870 100644 --- a/mod_tiling/main.c +++ b/mod_tiling/main.c @@ -1,7 +1,7 @@ /* * ion/mod_tiling/main.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_tiling/main.h b/mod_tiling/main.h index 35d9ddf..08bb446 100644 --- a/mod_tiling/main.h +++ b/mod_tiling/main.h @@ -1,7 +1,7 @@ /* * ion/mod_tiling/main.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_tiling/ops.c b/mod_tiling/ops.c index c86a80a..4836552 100644 --- a/mod_tiling/ops.c +++ b/mod_tiling/ops.c @@ -1,7 +1,7 @@ /* * ion/mod_tiling/ops.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -9,109 +9,14 @@ * (at your option) any later version. */ -#include - #include #include #include +#include #include -#include -#include #include "tiling.h" -static WGroup *find_group(WRegion *reg, bool *detach_framed) -{ - WRegion *mgr=REGION_MANAGER(reg); - bool was_grouped=FALSE; - - if(OBJ_IS(mgr, WMPlex)){ - WMPlex *mplex=(WMPlex*)mgr; - *detach_framed=TRUE; - mgr=REGION_MANAGER(mgr); - if(OBJ_IS(mgr, WGroup)){ - assert(mplex->mgd!=NULL); - if(mplex->mgd->reg==reg && mplex->mgd->mgr_next==NULL){ - /* Nothing to detach */ - return NULL; - } - } - }else{ - was_grouped=OBJ_IS(mgr, WGroup); - *detach_framed=FALSE; - } - - while(mgr!=NULL){ - mgr=REGION_MANAGER(mgr); - if(OBJ_IS(mgr, WGroup)) - break; - } - - if(mgr==NULL && was_grouped) - warn(TR("Already detached.")); - - return (WGroup*)mgr; -} - - -static void get_relative_geom(WRectangle *g, WRegion *reg, WRegion *mgr) -{ - WWindow *rel=REGION_PARENT(mgr), *w; - - *g=REGION_GEOM(reg); - - for(w=REGION_PARENT(reg); - w!=rel && (WRegion*)w!=mgr; - w=REGION_PARENT(w)){ - - g->x+=REGION_GEOM(w).x; - g->y+=REGION_GEOM(w).y; - } -} - - -/*EXTL_DOC - * Detach \var{reg}, i.e. make it managed by its nearest ancestor - * \type{WGroup}, framed if \var{reg} is not itself \type{WFrame}. - */ -EXTL_EXPORT -bool mod_tiling_detach(WRegion *reg) -{ - bool detach_framed=!OBJ_IS(reg, WFrame); - WGroupAttachParams ap=GROUPATTACHPARAMS_INIT; - WRegionAttachData data; - WGroup *grp; - - grp=find_group(reg, &detach_framed); - - if(grp==NULL) - return FALSE; - - ap.switchto_set=TRUE; - ap.switchto=region_may_control_focus(reg); - - ap.geom_set=TRUE; - get_relative_geom(&ap.geom, reg, (WRegion*)grp); - - /* TODO: Retain (root-relative) geometry of reg for framed - * detach instead of making a frame of this size? - */ - - data.type=REGION_ATTACH_REPARENT; - data.u.reg=reg; - - if(detach_framed){ - WFramedParam fp=FRAMEDPARAM_INIT; - - return (region_attach_framed((WRegion*)grp, &fp, - (WRegionAttachFn*)group_do_attach, - &ap, &data)!=NULL); - }else{ - return (group_do_attach(grp, &ap, &data)!=NULL); - } -} - - static WRegion *mkbottom_fn(WWindow *parent, const WFitParams *fp, void *param) { diff --git a/mod_tiling/panehandle.c b/mod_tiling/panehandle.c index 586385d..480e02d 100644 --- a/mod_tiling/panehandle.c +++ b/mod_tiling/panehandle.c @@ -1,7 +1,7 @@ /* - * ion/panews/panehandle.c + * ion/mod_tiling/panehandle.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -113,7 +113,7 @@ static void panehandle_draw(WPaneHandle *pwin, bool complete) grbrush_begin(pwin->brush, &g, (complete ? 0 : GRBRUSH_NO_CLEAR_OK)); - grbrush_draw_borderline(pwin->brush, &g, NULL, pwin->bline); + grbrush_draw_borderline(pwin->brush, &g, pwin->bline); grbrush_end(pwin->brush); } diff --git a/mod_tiling/panehandle.h b/mod_tiling/panehandle.h index c4ad184..fe06f3e 100644 --- a/mod_tiling/panehandle.h +++ b/mod_tiling/panehandle.h @@ -1,7 +1,7 @@ /* - * ion/panews/panehandle.h + * ion/mod_tiling/panehandle.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_tiling/placement.c b/mod_tiling/placement.c index 47cfa76..07de5f4 100644 --- a/mod_tiling/placement.c +++ b/mod_tiling/placement.c @@ -1,7 +1,7 @@ /* * ion/mod_tiling/placement.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_tiling/placement.h b/mod_tiling/placement.h index 9094b62..a61f892 100644 --- a/mod_tiling/placement.h +++ b/mod_tiling/placement.h @@ -1,7 +1,7 @@ /* * ion/mod_tiling/placement.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_tiling/split-stdisp.c b/mod_tiling/split-stdisp.c index d1c55f2..352ba41 100644 --- a/mod_tiling/split-stdisp.c +++ b/mod_tiling/split-stdisp.c @@ -1,7 +1,7 @@ /* * ion/mod_tiling/split-stdisp.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_tiling/split-stdisp.h b/mod_tiling/split-stdisp.h index 5d41fe1..4f6ca59 100644 --- a/mod_tiling/split-stdisp.h +++ b/mod_tiling/split-stdisp.h @@ -1,7 +1,7 @@ /* * ion/mod_tiling/split-stdisp.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_tiling/split.c b/mod_tiling/split.c index 54864d7..c3edc5e 100644 --- a/mod_tiling/split.c +++ b/mod_tiling/split.c @@ -1,7 +1,7 @@ /* * ion/mod_tiling/split.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_tiling/split.h b/mod_tiling/split.h index fa74122..10a0e5f 100644 --- a/mod_tiling/split.h +++ b/mod_tiling/split.h @@ -1,7 +1,7 @@ /* * ion/mod_tiling/split.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_tiling/splitfloat.c b/mod_tiling/splitfloat.c index 6ab6b31..ff71afd 100644 --- a/mod_tiling/splitfloat.c +++ b/mod_tiling/splitfloat.c @@ -1,7 +1,7 @@ /* - * ion/panews/splitext.c + * ion/mod_tiling/splitext.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/mod_tiling/splitfloat.h b/mod_tiling/splitfloat.h index 9bb428e..8d51b59 100644 --- a/mod_tiling/splitfloat.h +++ b/mod_tiling/splitfloat.h @@ -1,7 +1,7 @@ /* - * ion/panews/splitfloat.h + * ion/mod_tiling/splitfloat.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -9,8 +9,8 @@ * (at your option) any later version. */ -#ifndef ION_PANEWS_SPLITFLOAT_H -#define ION_PANEWS_SPLITFLOAT_H +#ifndef ION_MOD_TILING_SPLITFLOAT_H +#define ION_MOD_TILING_SPLITFLOAT_H #include #include @@ -53,4 +53,4 @@ extern WSplitRegion *splittree_split_floating(WSplit *node, int dir, WRegionSimpleCreateFn *fn, WTiling *ws); -#endif /* ION_PANEWS_SPLITFLOAT_H */ +#endif /* ION_MOD_TILING_SPLITFLOAT_H */ diff --git a/mod_tiling/tiling.c b/mod_tiling/tiling.c index 2ab56b0..159f001 100644 --- a/mod_tiling/tiling.c +++ b/mod_tiling/tiling.c @@ -1,7 +1,7 @@ /* * ion/mod_tiling/tiling.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -731,7 +731,7 @@ void tiling_managed_remove(WTiling *ws, WRegion *reg) if(!ds){ if(other==NULL) - mainloop_defer_destroy((Obj*)ws); + region_dispose((WRegion*)ws, mcf); else if(act && mcf) region_warp(other); } @@ -1125,17 +1125,20 @@ WRegion *tiling_current(WTiling *ws) /*EXTL_DOC - * Returns a list of regions managed by the workspace (frames, mostly). + * Iterate over managed regions of \var{ws} until \var{iterfn} returns + * \code{false}. + * The function itself returns \code{true} if it reaches the end of list + * without this happening. */ EXTL_SAFE EXTL_EXPORT_MEMBER -ExtlTab tiling_managed_list(WTiling *ws) +bool tiling_managed_i(WTiling *ws, ExtlFn iterfn) { PtrListIterTmp tmp; ptrlist_iter_init(&tmp, ws->managed_list); - return extl_obj_iterable_to_table((ObjIterator*)ptrlist_iter, &tmp); + return extl_iter_objlist_(iterfn, (ObjIterator*)ptrlist_iter, &tmp); } diff --git a/mod_tiling/tiling.h b/mod_tiling/tiling.h index 5b7a8e7..7d93469 100644 --- a/mod_tiling/tiling.h +++ b/mod_tiling/tiling.h @@ -1,7 +1,7 @@ /* * ion/mod_tiling/tiling.h * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by diff --git a/pwm/Makefile b/pwm/Makefile index 84c3946..0bfbed5 100644 --- a/pwm/Makefile +++ b/pwm/Makefile @@ -21,7 +21,7 @@ INCLUDES += $(X11_INCLUDES) INCLUDES += $(LIBMAINLOOP_INCLUDES) $(LIBTU_INCLUDES) $(LIBEXTL_INCLUDES) INCLUDES += -I.. -LIBS += $(X11_LIBS) $(XINERAMA_LIBS) +LIBS += $(X11_LIBS) LIBS += $(WHOLEA) $(LIBMAINLOOP_LIBS) $(LIBEXTL_LIBS) $(LIBTU_LIBS) $(NO_WHOLEA) LIBS += $(LUA_LIBS) $(DL_LIBS) LIBS += -lm diff --git a/pwm/cfg_pwm.lua b/pwm/cfg_pwm.lua index 1fe7df4..ca01137 100644 --- a/pwm/cfg_pwm.lua +++ b/pwm/cfg_pwm.lua @@ -40,7 +40,6 @@ dopath("cfg_ioncore") --dopath("mod_query") dopath("mod_menu") --dopath("mod_tiling") ---dopath("mod_panews") --dopath("mod_statusbar") dopath("mod_dock") --dopath("mod_sp") diff --git a/pwm/pwm.c b/pwm/pwm.c index 773aace..bbb042f 100644 --- a/pwm/pwm.c +++ b/pwm/pwm.c @@ -1,7 +1,7 @@ /* * ion/pwm/pwm.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -48,16 +48,8 @@ static OptParserOpt pwm_opts[]={ DUMMY_TR("Add directory to search path")}, {OPT_ID('o'), "oneroot", 0, NULL, - DUMMY_TR("Manage default root window/non-Xinerama screen only")}, - -#if defined(CF_XINERAMA) || defined(CF_SUN_XINERAMA) - {OPT_ID('x'), "xinerama", OPT_ARG, "1|0", - DUMMY_TR("Use Xinerama screen information (default: 0/no)")}, -#else - {OPT_ID('x'), "xinerama", OPT_ARG, "?", - DUMMY_TR("Ignored: not compiled with Xinerama support")}, -#endif - + DUMMY_TR("Manage default screen only")}, + {OPT_ID('s'), "session", OPT_ARG, "session_name", DUMMY_TR("Name of session (affects savefiles)")}, @@ -97,7 +89,7 @@ int main(int argc, char*argv[]) const char *cfgfile="cfg_pwm"; const char *display=NULL; char *cmd=NULL; - int stflags=IONCORE_STARTUP_NOXINERAMA; + int stflags=0; int opt; ErrorLog el; FILE *ef=NULL; @@ -139,17 +131,6 @@ int main(int argc, char*argv[]) case OPT_ID('o'): stflags|=IONCORE_STARTUP_ONEROOT; break; - case OPT_ID('x'): - { - const char *p=optparser_get_arg(); - if(strcmp(p, "1")==0) - stflags&=~IONCORE_STARTUP_NOXINERAMA; - else if(strcmp(p, "0")==0) - stflags|=IONCORE_STARTUP_NOXINERAMA; - else - warn(TR("Invalid parameter to -xinerama.")); - } - break; case OPT_ID('s'): extl_set_sessiondir(optparser_get_arg()); break; diff --git a/system.mk b/system.mk index 06ce3b1..e091318 100644 --- a/system.mk +++ b/system.mk @@ -81,13 +81,6 @@ X11_PREFIX=/usr/X11R6 X11_LIBS=-L$(X11_PREFIX)/lib -lX11 -lXext X11_INCLUDES=-I$(X11_PREFIX)/include -# Change commenting to disable Xinerama support -XINERAMA_LIBS=-lXinerama -DEFINES += -DCF_XINERAMA -# For Solaris -#XINERAMA_LIBS= -#DEFINES += -DCF_SUN_XINERAMA - # XFree86 libraries up to 4.3.0 have a bug that will cause Ion to segfault # if Opera is used when i18n support is enabled. The following setting # should work around that situation. diff --git a/version.h b/version.h index e5a60c9..4688aae 100644 --- a/version.h +++ b/version.h @@ -1,2 +1,2 @@ -#define ION_VERSION "3ds-20061223" +#define ION_VERSION "3ds-20070203" #define ION_API_VERSION "3-"ION_VERSION -- 2.39.5
    Figure 3: Most common manager-managed relations
     
    tExtlTabExtlTab Reference to Lua table
    fExltFnExltFn Reference to Lua function.
    o