1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #ifndef nsWindowMap_h_ 7 #define nsWindowMap_h_ 8 9 #import <Cocoa/Cocoa.h> 10 11 // WindowDataMap 12 // 13 // In both mozilla and embedding apps, we need to have a place to put 14 // per-top-level-window logic and data, to handle such things as IME 15 // commit when the window gains/loses focus. We can't use a window 16 // delegate, because an embeddor probably already has one. Nor can we 17 // subclass NSWindow, again because we can't impose that burden on the 18 // embeddor. 19 // 20 // So we have a global map of NSWindow -> TopLevelWindowData, and set 21 // up TopLevelWindowData as a notification observer etc. 22 23 @interface WindowDataMap : NSObject { 24 @private 25 NSMutableDictionary* mWindowMap; // dict of TopLevelWindowData keyed by address of NSWindow 26 } 27 28 + (WindowDataMap*)sharedWindowDataMap; 29 30 - (void)ensureDataForWindow:(NSWindow*)inWindow; 31 - (id)dataForWindow:(NSWindow*)inWindow; 32 33 // set data for a given window. inData is retained (and any previously set data 34 // is released). 35 - (void)setData:(id)inData forWindow:(NSWindow*)inWindow; 36 37 // remove the data for the given window. the data is released. 38 - (void)removeDataForWindow:(NSWindow*)inWindow; 39 40 @end 41 42 @class ChildView; 43 44 // TopLevelWindowData 45 // 46 // Class to hold per-window data, and handle window state changes. 47 48 @interface TopLevelWindowData : NSObject { 49 @private 50 } 51 52 - (id)initWithWindow:(NSWindow*)inWindow; 53 + (void)activateInWindow:(NSWindow*)aWindow; 54 + (void)deactivateInWindow:(NSWindow*)aWindow; 55 + (void)activateInWindowViews:(NSWindow*)aWindow; 56 + (void)deactivateInWindowViews:(NSWindow*)aWindow; 57 58 @end 59 60 #endif // nsWindowMap_h_ 61