Skip navigation.
 
mlRe: newbie:how to get the frontmost window but a key window
FROM : j o a r
DATE : Fri Jan 11 17:41:06 2008

On Jan 11, 2008, at 2:58 AM, norio wrote:

> What I want to do is to search text from the window just below 
> "Find..." dialog, like almost every text editor do.



This should be a standard key window <-> main window relationship 
between your document window and the find panel.


> My app opens a window which doesn't have text input field at launch 
> time. The window just displays something.
>
> Then open a document by selecting Open... from File menu. So you can 
> open several windows. I thought they were main windows.



And they typically would be. Or to be more precise, at any given time 
_one_ of them would be the main window of your application:

<http://developer.apple.com/documentation/Cocoa/Conceptual/WinPanel/Concepts/ChangingMainKeyWindow.html
>


> And open Find.. window and when you press Find button on the window, 
> text is being searched from the document of the window just below 
> the Find window.
>
> With these steps, currentDocument and mainWindow return nil as I 
> told in the previous mail.
> Who sets a window to main window? I went to see the inspector window 
> of the window in IB but I couldn't get.



The main window is set automatically by AppKit as the user opens or 
switches between document windows. The same goes for the key window. 
This should work correctly out of the box.

Some troubleshooting steps:

* The basic requirement for this to work is that your document window 
is a type of window that assumes main status - typically NSWindow and 
subclasses thereof, but not including NSPanel. Likewise, your panels 
should be of a type that doesn't assume main window status, like 
NSPanel (or subclasses thereof).

* Sign up for and log the NSWindow key / main notifications to track 
how key & main window status changes while you work with your 
application. To do this, add notification registration to one of your 
shared controller objects:

           [[NSNotificationCenter notificationCenter] addObserver: self
                                            selector: 
@selector(windowDidBecomeKey:)
                                                name: 
NSWindowDidBecomeKeyNotification
                                              object: nil];

A good place for signing up for notifications is "awakeFromNib". Also 
implement the corresponding callback method:

   - (void) windowDidBecomeKey:(NSNotification *) notification
   {
       NSWindow *window = [notification object];
       NSLog(@"WindowDidBecomeKey: %@, (Title: \"%@\", Delegate: %@)", 
window, [window title], [window delegate]);
   }

...and repeat for all relevant notifications:

   (NSWindowDidBecomeKeyNotification)
   NSWindowDidBecomeMainNotification
   NSWindowDidResignKeyNotification
   NSWindowDidResignMainNotification

Try opening, closing and switching between your application windows 
and panels and verify that the key and main status changes as you 
would expect.

j o a r

Related mailsAuthorDate
mlnewbie:how to get the frontmost window but a key window norio Jan 11, 05:15
mlRe: newbie:how to get the frontmost window but a key window j o a r Jan 11, 06:53
mlRe: newbie:how to get the frontmost window but a key window norio Jan 11, 11:58
mlRe: newbie:how to get the frontmost window but a key window j o a r Jan 11, 17:41