Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

50 most recent check-ins

  • Updated changelog, release notes, home page, and version.
  • Tagged as v0.2.0.
Leaf check-in: 006f915258 user: manuv tags: rel1.x, v0.2.0
Replaced ckout with rel1.x in documentation prior to 0.2.0 release. check-in: d8eada88df user: manuv tags: rel1.x
Added new documentation to version control. check-in: 8561cd9213 user: mvnathan tags: rel1.x
Updated documentation prior to 0.2.0 release. check-in: 6c304fa76f user: mvnathan tags: rel1.x
Merged from dev1.x to rel1.x in anticipation of 0.2.0 release. check-in: a7356e4e43 user: manuv tags: rel1.x
Added rectangle to minx.layout.full constructor. Leaf check-in: 49f4a20229 user: manuv tags: dev1.x
Updated design notes. check-in: 3f11394238 user: manuv tags: dev1.x
Updated milestones to reflect current idea of how to proceed. check-in: 38c4e0baf0 user: manuv tags: dev1.x
Added layouts section to main API page. check-in: 2c9b74f1ab user: manuv tags: dev1.x
Updated various bits of documentation (most of it concetrated in minx.core.hooks and minx.core.layman). check-in: d1c87b1563 user: manuv tags: dev1.x
  • Added some basic info about layouts to minx.core.wm doc string.
  • Updated hooks-list.wiki with info about new hooks.
  • Fixed a bug in layman.receptive_layout(): have to add layout returned by receptive_layout_hook to layouts list.
  • In layman.find(), added ability to search for layouts based on their names. (Noticed we needed this ability when writing sample code to illustrate layouts usage.)
  • Removed unnecessary warnings from minxlib::window, which were simply cluttering the log.
  • Other minor edits elsewhere.
check-in: 3740586cc4 user: manuv tags: dev1.x
Minor updates to make doxygen work without warnings. check-in: 690640b8e9 user: manuv tags: dev1.x
Some minor reorganization of the X event handlers:
  • Moved focus change event handlers from minx.core.xevents to minx.layout.base.
  • Removed reparent notification handler from minx.core.xevents in favour of handling the event entirely from minx.layout.base.

This should pretty much all the code that's needed for the 0.2.0 release. Now to tackle the documentation... check-in: 4dc459e610 user: manuv tags: dev1.x

Make full layout occupy entire area of its parent window. Until now, we were leaving a little space on each side for debugging; that doesn't seem necessary any more... check-in: b66fd70acf user: manuv tags: dev1.x
Added a function and default key binding to quit Minx. check-in: 33a1e31904 user: manuv tags: dev1.x
  • Added support for end-user hook to create layouts before managing existing windows and entering event loop.
  • Made the display and root_windows members of the minx.core.wm class public (i.e., removed leading underscore) so that they can be accessed by the init_hook.
  • Removed unnecessary layout creation in wm.start() because the default layout logic in the layman.receptive_layout() method takes care of this already.
check-in: ac0236beec user: manuv tags: dev1.x
  • Forgotten to register exception translators for protocol errors.
  • Add exception handler for generic protocol errors in minx.core.wm event loop.
check-in: fa872bf983 user: manuv tags: dev1.x
Centralized Boost.Python converter registration in python.cc because, for example, both minxlib::display and minxlib::window return STL vectors of window objects and we would like to avoid registering duplicate converters for the same types, a situation more likely to arise when the converters are registered from the pythonize() functions of the different classes. check-in: 471330b4ef user: manuv tags: dev1.x
Fixed the sporadic recognitions of key bindings, especially the ones with modifiers. The problem turned out to be a lack of additional grabs with the various combinations of the lock modifiers; without these, the Caps Lock, Num Lock, etc. totally screw up the key binding logic because the X server doesn't even recognize them and, therefore, doesn't generate the necessary keyboard events.

Got the idea for this from a cursory perusal of the code for xbindkeys. And now (at long last) key bindings work flawlessly! Getting close to the 0.2.0 release... check-in: 17ccc163e4 user: manuv tags: dev1.x

Added support for making layouts invisible. check-in: d02dcfd679 user: manuv tags: dev1.x
Added Xinerama support to minxlib::window::screen() so that it returns the screen index based on a window's location, i.e., this function now always returns the physical screen a window is on. check-in: 083960bf79 user: manuv tags: dev1.x
Added compile-time check for Xinerama. check-in: 6bd2c2f038 user: manuv tags: dev1.x
Added support for multi-head configurations with Xinerama. check-in: 657794f774 user: manuv tags: dev1.x
Instead of checking to see if the layout's parent matches a prospective client window's parent to ascertain whether the layout can manage that window, we now check that both are on the same screen. Otherwise, for example, a layout nested within another will never return True when it is checked for receptivity. check-in: 231a2aedce user: manuv tags: dev1.x
Added support for multiple screens. Next: Xinerama. check-in: 923fc7a655 user: manuv tags: dev1.x
  • Since we often need to meddle with a window's geometry, changed minxlib::window::geometry() so it returns a list rather than (an immutable) tuple.
  • Fixed a bug in minx.layout.full.configure_request() that was offsetting window placement within the layout window.
check-in: 60d774f64f user: manuv tags: dev1.x
Removed hard-coded adjustment for window borders in full layout. A deceptively small requirement that ended up touching quite a bit of code! check-in: ee58a49b66 user: manuv tags: dev1.x
Reworked map and unmap handlers to use layman.find() to ascertain whether or not the event's target window is a top-level window. check-in: b1689f3074 user: manuv tags: dev1.x
Moved top-level window map request handling from xevents to layout classes. check-in: 53f2e7de4d user: manuv tags: dev1.x
Moved top-level window configure request handler from xevents into the layout classes. check-in: f345bdb173 user: manuv tags: dev1.x
Moved reparent notification handling from xevents to the layout related classes. check-in: 890341f86e user: manuv tags: dev1.x
Added a base class for layouts. check-in: 5cf0e450c9 user: manuv tags: dev1.x
Preliminary version of a layout manager (part of the ongoing effort to refactor the code for better layout-related encapsulation/abstraction). check-in: 2fa8845df1 user: manuv tags: dev1.x
Semi-fix for compound key bindings (e.g., M4-D) being ignored when non-Minx windows have focus. Had to add key press mask for these application windows. So now, at least for the terminals, these key bindings work.

However, target window still gets the key press event (e.g., a terminal window types 'd' when M4-D is pressed). Also, it doesn't work for all windows (e.g., xmessage doesn't respond). So there's still some work to be done here... check-in: bfb7417666 user: manuv tags: dev1.x

Moved some of the layout code out from minx.core.wm into a newly added minx.layout.full. Event processing, however, is still concentrated in minx.core.xevents and should be refactored out so that it's in the right place.

But at least now we have some basic infrastructure for a separate layouts directory/subpackage. check-in: 0a84c4d950 user: manuv tags: dev1.x

Cleaned up and documented the code a little bit. Also fixed the bug of focus not being handed off properly when a window dies (the problem was due to exceptions not being handled; logging the exceptions in the event loop quickly revealed the issue). check-in: 527f28cf40 user: manuv tags: dev1.x
Preliminary support for the full layout. Code is in bad shape and there are some obvious bugs that have to be fixed. Long way to go before we can release version 0.2.0...

Next steps:

  • Code clean-up and documentation.
  • Bug fix: killing a window doesn't focus another.
  • Bug fix: some key bindings are not recognized when a window has focus.
  • Extract and abstract layout functionality currently in wm and xevents.
  • Remove hard-coded border adjustments when resizing windows to fit layout.
  • Add support for multiple screens and Xinerama.
  • End-user hooks for creating custom layouts before launching window manager.
  • Layout windows need to be transparent/invisible.
  • Documentation for all of this (design notes, HOWTO's, etc.).

That's when we'll be ready to hit 0.2.0. check-in: ab72e115ad user: manuv tags: dev1.x

Don't manage the layout window. This way, it doesn't get added to the focus list; consequently, it is never focused, which, in turn, means that killing it isn't possible via key bindings and, so, the window manager won't nuke itself like that.

Eventually, should implement layouts so that killing them doesn't take down the window manager. check-in: 0d21ae6035 user: manuv tags: dev1.x

Got rid of minxlib::display::xlib() and just pass a Display* to the minxlib::window and various minxlib::event classes.

Also: various minor edits. check-in: fa47a47a48 user: manuv tags: dev1.x

Added support for setting window properties. This will allow us to mark layouts so that we can then handle X events for them properly.

Also some minor fixes to:

  • minxlib/factory.hh: figured out Boost iterator adaptor weirdness in factory_map::iterator::dereference().
  • minxlib/exception.cc: corrected a stale comment.
check-in: 024080cf2b user: manuv tags: dev1.x
The first stirrings of support for layouts (finally). After much thought and some abortive attempts (never checked in), it looks like the way forward is to implement and treat layouts as windows. While this approach does not have the attractiveness of a more abstract design (wherein layouts simply manage rectangles and know nothing of actual windows), it does offer certain distinct, practical advantages:
  • Minx doesn't have to maintain internal mappings of which windows a layout is managing, their respective geometries, etc. Instead, we can simply query the X server for this info when we need it.
  • It is much easier to implement layout nesting (again because the X server already provides the necessary infrastructure for creating and managing hierarchies of windows).
  • Because layouts are simply top-level windows, entire arrangements of tiled windows can be easily layered and moved around. That is, instead of a single floating layer, we can have multiple layers.
  • Moving windows between layouts is a simple matter of reparenting the window. X will generate appropriate events, which Minx can handle to update any internal state (which is already minimal).
  • If Xinerama is available, moving windows and entire layouts across screens should be fairly straightforward to implement (useful, for example, for laptop un/docking).

Seriously, what's not to like?

Now, having touted the numerous benefits and basic soundness (genius, anyone?) of the layouts-as-windows idea, a few words about this check-in:

It begins the long and winding road leading to the grand vision described above. At this stage, of course, little of any real use is available. minxlib provides an API for creating new windows and the main window manager object uses it to create a black, top-level window the same size as the root window.

That's pretty much it; no window management, tiling, multiple screen support, etc., just yet. In fact, the layout window is just another window that Minx manages. Killing it, hilariously enough, nukes the window manager. check-in: df1a814742 user: manuv tags: dev1.x

Added header comment to logo generation program. check-in: c6e6e8982d user: manuv tags: dev1.x
  • Added an Asymptote program to generate the Minx logo.
  • Updated makefile in wiki/img to generate logo.
  • Added the logo itself to version control.
check-in: dd752c8b15 user: manuv tags: dev1.x
Released version 0.1.9, which has support for forcibly killing applications that claim to support the WM_DELETE_WINDOW protocol but botch it. check-in: 797b95bcc3 user: mvnathan tags: rel1.x, v0.1.9
Merged from dev1.x to rel1.x in preparation for version 0.1.9 release. check-in: cdd3b7b3cb user: mvnathan tags: rel1.x
Added support for nuking windows, i.e., killing them brutally instead of softly (in other words: bypass WM_DELETE_WINDOW). check-in: e9d8811169 user: mvnathan tags: dev1.x
Updated changelog, release notes, home page, and version number for 0.1.8 and tagged. check-in: 19551c698b user: mvnathan tags: rel1.x, v0.1.8
Merged from dev1.x to rel1.x in preparation for release of version 0.1.8. check-in: a856d91c82 user: mvnathan tags: rel1.x
Updated FAQ and Key Bindings HOWTO with examples of binding keys to the window manager's spawn function. check-in: 984a1e82af user: mvnathan tags: dev1.x
Added support for launching applications via key bindings. check-in: 6402597f91 user: mvnathan tags: dev1.x