
On Wed, Apr 18, 2007 at 09:05:56AM -0700, David Roundy wrote:
hunk ./Operations.hs 49 - case layoutType fl of - Full -> fmap (flip (,) sc) $ maybeToList $ W.peekStack n ws - Tall -> tile (tileFraction fl) sc $ W.index n ws - Wide -> vtile (tileFraction fl) sc $ W.index n ws + (doLayout l) sc $ W.index n ws whenJust (W.peekStack n ws) (io . raiseWindow d) whenJust (W.peek ws) setFocus clearEnterEvents hunk ./Operations.hs 54
+full :: Layout +full = Layout { doLayout = \sc -> map (\w -> (w,sc)), modifyLayout = const Nothing }
If I'm reading this correctly, I don't think that will work. "full" doesn't display the first window in the tiling order, it displays the focused window. So Rectangle -> [Window] -> [(Window, Rectangle)] is not sufficient to support all the cases we have now: The layout function has to somehow know which window is focus. To that end, I think the layout function type is going to have to be something like Rectangle -> Workspace -> [(Window, Rectangle)] ...where "Workspace" is a magical, as-yet-non-existent datatype that contains a list of windows, which one is focused and the layout description. (Possibly other stuff; that's all I can think of ATM.) And of course StackSet would have to be modified to use "Workspace". In that scenario, I'm not quite sure where you'd want to parameterize your user-defined message type. Indeed, I'm not quite sure what to do about that in the first place. If the whole X monad takes this type, doesn't that mean that you made up a totally new type, you couldn't mix and match your layout functions with the builtin ones? Jason Creighton