The problem is that WindowNavigation assumes all windows are navigable, and
it was getting confused by decorations. With a bit of work, we can
decorate windows *after* combining layouts just fine.
Note that this patch doesn't work with
Thu Dec 27 03:03:56 EST 2007 Spencer Janssen <sjanssen@cse.unl.edu>
* Broadcast button events to all layouts, fix for issue #111
but this isn't a regression, since button events have never worked with
tabbed and this change.
As I said in order to have a CombinedLayout type instace of
LayoutClass and a class for easily writing pure and impure combinators
to be feeded to the CombinedLayout together with the layouts to be
conbined, there's seems to be the need to change the type of the
LayoutClass.description method from l a -> String to l a -> X String.
Without that "ugly" change - loosing the purity of the description
(please note the *every* methods of that class unless description
operates in the X monad) - I'm plainly unable to write something
really useful and maintainable. If someone can point me in the right
direction I would really really appreciate.
Since, in the meantime, PerWorkspace, which has its users, is broken
and I broke it, I'm reverting it to it supposedly more beautiful
PerWorkspac [WorkspaceId] (Maybe Bool) (l1 a) (l2 a) type.
Many layouts are written as layout modifiers because they need to
change the stack of the rectangle before executing doLayout.
This is a major source of bugs. all layout modifiers should be using the
LayoutModifier class. This method (modifyLayout) can be used to
manipulate the rectangle and the stack before running doLayout by the
layout modifier.
WARNING: this patch may be breaking your configuration. While it is
still possible to use:
tabbed shrinkText defaultTConf
updating the fields of the defaultTConf record is not possible
anymore, since the type TConf is now hidden.
WARNING: "tabSize" has been substituted by "decoHeight"
You can change your configuration this way:
myTConf :: TConf
myTConf = defaultTConf
{ tabSize = 15
, etc....
becomes:
myTConf :: DeConfig TabbedDecoration Window
myTConf = defaultTabbedConfig
{ decoHeight = 15
, etc....
and
tabbed shrinkText myTConf
becomes:
tabDeco shrinkText myTConf