Maintaining window cascade when window size changes

  • Hi,

    Question going to Omni: In your OmniInspector framework, how do you
    tell your inspectors to stick together? When an inspector in the
    middle of the cascade changes its size, all subsequent inspectors
    stick to that inspectors bottom edge. How do you do that?

    Best,
    Fabian

    Fabian Schuiki
    <fabianschuiki...>
  • On May 29, 2007, at 11:07 AM, Fabian Schuiki wrote:

    > Hi,
    >
    > Question going to Omni: In your OmniInspector framework, how do you
    > tell your inspectors to stick together? When an inspector in the
    > middle of the cascade changes its size, all subsequent inspectors
    > stick to that inspectors bottom edge. How do you do that?

    Manually, for the most part. We register for
    NSWindowDidResizeNotification for the windows involved, and then when
    one of them is changed, we reposition every other window below it
    appropriately. The code is in OIInspectorGroup -
    controllerWindowDidResize: if you are interested in looking at the code.

    I initially attempted to write the code such that each inspector was
    a child window of the one above it, in the hopes that a lot of these
    manipulations would be automatically handled by the child window
    support in the window server, but at least in 10.3 and 10.4, AppKit
    really doesn't deal well with child windows that themselves have
    child windows. Just one level of parent and child is all that seems
    to be supported.

    So the only use of child windows now is that when you drag a group of
    inspectors, the topmost window is a parent and all of the windows
    under it are child windows of that top parent. This allows the window
    server to manage the dragging around of groups of windows
    automatically. But everything else is all done in our code.

    Hope this helps,
    - Greg
  • Thanks Greg!

    It took me about a day to find out that those nasty effects that
    appeared if you had child windows with child windows :-D. Looks like
    the WindowServer handles the parent's child window's child window
    well when moving, but if the paren'ts child window's child window has
    a child window too, that last window doesn't get moved. When you're
    dragging the parent window, the child window's -frame method doesn't
    return quite what you'd expect (it returns the frame before starting
    the move).
    I look forward to Leopard, hopefully Apple got some of this stuff
    right (they had a plenty of time now).

    So thanks again and all the best for you (and propably OmniFocus),
    Fabian

    Fabian Schuiki
    <fabianschuiki...>

    Am 30.05.2007 um 17:27 schrieb Greg Titus:

    >
    > On May 29, 2007, at 11:07 AM, Fabian Schuiki wrote:
    >
    >> Hi,
    >>
    >> Question going to Omni: In your OmniInspector framework, how do
    >> you tell your inspectors to stick together? When an inspector in
    >> the middle of the cascade changes its size, all subsequent
    >> inspectors stick to that inspectors bottom edge. How do you do that?
    >
    > Manually, for the most part. We register for
    > NSWindowDidResizeNotification for the windows involved, and then
    > when one of them is changed, we reposition every other window below
    > it appropriately. The code is in OIInspectorGroup -
    > controllerWindowDidResize: if you are interested in looking at the
    > code.
    >
    > I initially attempted to write the code such that each inspector
    > was a child window of the one above it, in the hopes that a lot of
    > these manipulations would be automatically handled by the child
    > window support in the window server, but at least in 10.3 and 10.4,
    > AppKit really doesn't deal well with child windows that themselves
    > have child windows. Just one level of parent and child is all that
    > seems to be supported.
    >
    > So the only use of child windows now is that when you drag a group
    > of inspectors, the topmost window is a parent and all of the
    > windows under it are child windows of that top parent. This allows
    > the window server to manage the dragging around of groups of
    > windows automatically. But everything else is all done in our code.
    >
    > Hope this helps,
    > - Greg
previous month may 2007 next month
MTWTFSS
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
Go to today