
On Mon, Sep 24, 2007 at 07:46:29AM -0700, David Roundy wrote:
On Mon, Sep 24, 2007 at 04:20:32PM +0200, Andrea Rossato wrote:
Hi,
as we said yestarday this is my proposal for a more sophisticated layour message system.
Basically: UnDoLayouts is used for refreshes, LayoutSwitch wfor notifying a layout change, and NonVisible when a layout is a workspace not visible anymore.
I don't see why we need so many messages. It seems like UnDoLayouts should now be unused, and NonVisible should be treated the same as LayoutSwitch. Do you have a use case where these should be treated differently?
Two messages would actually be fine for me. The problem is that I would like to know when I must hide and when I must free the resources. When we change layout we now send a "UnDoLayout", and we send the same in Operations.windows before updating the state. I also have the Read instance problem, which I did not study carefully yet. If I want to cache the fontStruct/Set together with the window ids, I would like to know when XMonad is going to be restarted. The cache is done in a Maybe type and I would like to free all the resources and return a Tabbed Nothing TConf, which could be read (am I guessing right here?).
However, it might be nice to have a Focus/NonFocus message. This would allow WorkspaceDir to work properly with multiple screens. A related (and perhaps better) possibility would be to create a different method in Layout for drawing focussed stacks versus unfocussed stacks. The default, of course, would be for both to be drawn the same.
Neither solves the release/hide resources issue, btw.
class (Show (layout a), Read (layout a)) => Layout layout a where doLayout :: layout a -> Rectangle -> Stack a -> X ([(a, Rectangle)], Maybe (layout a)) doFocusLayout :: layout a -> Rectangle -> Stack a -> X ([(a, Rectangle)], Maybe (layout a)) doFocusLayout = doLayout modifyLayout :: layout a -> SomeMessage -> X (Maybe (layout a)) modifyLayout _ _ = return Nothing
Actually, I think this is exactly how I'd like to handle focus.
But I really don't see a use case for NonVisible vs UnDoLayouts vs LayoutSwitch, and am not keen on sending and defining messages without an envisioned use case. If some day someone comes up with an idea that depends on distinct NonVisible and LayoutSwitch messages, we could easily split them apart, but until then, I'd prefer to have a single message sent. At a minimum, I'd vote for eliminating UnDoLayouts.
In which case how would you suggest to handle the specific problem of Tabbed?
There is a new function sendMessage', for sending messages to a list of layouts.
Sounds good. Maybe rename this to sendMessageToWorkspaces? I know I'm as guilty as anyone with regard to foo' naming, but I think sendMessageToWorkspaces would a bit better describe what this function does.
Perfect! Andrea