mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-09-27 14:56:16 +00:00
67 lines
1.8 KiB
C
67 lines
1.8 KiB
C
|
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
#ifndef BASE_CHROME_APPLICATION_MAC_H_
|
||
|
#define BASE_CHROME_APPLICATION_MAC_H_
|
||
|
|
||
|
#import <AppKit/AppKit.h>
|
||
|
|
||
|
#include "base/basictypes.h"
|
||
|
#include "base/scoped_nsobject.h"
|
||
|
|
||
|
// Event hooks must implement this protocol.
|
||
|
@protocol CrApplicationEventHookProtocol
|
||
|
- (void)hookForEvent:(NSEvent*)theEvent;
|
||
|
@end
|
||
|
|
||
|
|
||
|
@interface CrApplication : NSApplication {
|
||
|
@private
|
||
|
BOOL handlingSendEvent_;
|
||
|
// Array of objects implementing the CrApplicationEventHookProtocol
|
||
|
scoped_nsobject<NSMutableArray> eventHooks_;
|
||
|
}
|
||
|
#if(0)
|
||
|
@property(readonly,
|
||
|
getter=isHandlingSendEvent,
|
||
|
nonatomic) BOOL handlingSendEvent;
|
||
|
#else
|
||
|
// We don't have properties before ObjC 2.0, so we use the 1.0 equivalent.
|
||
|
- (BOOL)isHandlingSendEvent;
|
||
|
#endif
|
||
|
|
||
|
|
||
|
// Add or remove an event hook to be called for every sendEvent:
|
||
|
// that the application receives. These handlers are called before
|
||
|
// the normal [NSApplication sendEvent:] call is made.
|
||
|
|
||
|
// This is not a good alternative to a nested event loop. It should
|
||
|
// be used only when normal event logic and notification breaks down
|
||
|
// (e.g. when clicking outside a canBecomeKey:NO window to "switch
|
||
|
// context" out of it).
|
||
|
- (void)addEventHook:(id<CrApplicationEventHookProtocol>)hook;
|
||
|
- (void)removeEventHook:(id<CrApplicationEventHookProtocol>)hook;
|
||
|
|
||
|
+ (NSApplication*)sharedApplication;
|
||
|
@end
|
||
|
|
||
|
namespace chrome_application_mac {
|
||
|
|
||
|
// Controls the state of |handlingSendEvent_| in the event loop so that it is
|
||
|
// reset properly.
|
||
|
class ScopedSendingEvent {
|
||
|
public:
|
||
|
ScopedSendingEvent();
|
||
|
~ScopedSendingEvent();
|
||
|
|
||
|
private:
|
||
|
CrApplication* app_;
|
||
|
BOOL handling_;
|
||
|
DISALLOW_COPY_AND_ASSIGN(ScopedSendingEvent);
|
||
|
};
|
||
|
|
||
|
} // chrome_application_mac
|
||
|
|
||
|
#endif // BASE_CHROME_APPLICATION_MAC_H_
|