49 lines
1.6 KiB
C
49 lines
1.6 KiB
C
|
// Copyright (c) 2012 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_MAC_SCOPED_SENDING_EVENT_H_
|
||
|
#define BASE_MAC_SCOPED_SENDING_EVENT_H_
|
||
|
|
||
|
#include "base/base_export.h"
|
||
|
#include "base/basictypes.h"
|
||
|
#include "base/message_loop/message_pump_mac.h"
|
||
|
|
||
|
// Nested event loops can pump IPC messages, including
|
||
|
// script-initiated tab closes, which could release objects that the
|
||
|
// nested event loop might message. CrAppProtocol defines how to ask
|
||
|
// the embedding NSApplication subclass if an event is currently being
|
||
|
// handled, in which case such closes are deferred to the top-level
|
||
|
// event loop.
|
||
|
//
|
||
|
// ScopedSendingEvent allows script-initiated event loops to work like
|
||
|
// a nested event loop, as such events do not arrive via -sendEvent:.
|
||
|
// CrAppControlProtocol lets ScopedSendingEvent tell the embedding
|
||
|
// NSApplication what to return from -handlingSendEvent.
|
||
|
|
||
|
@protocol CrAppControlProtocol<CrAppProtocol>
|
||
|
- (void)setHandlingSendEvent:(BOOL)handlingSendEvent;
|
||
|
@end
|
||
|
|
||
|
namespace base {
|
||
|
namespace mac {
|
||
|
|
||
|
class BASE_EXPORT ScopedSendingEvent {
|
||
|
public:
|
||
|
ScopedSendingEvent();
|
||
|
~ScopedSendingEvent();
|
||
|
|
||
|
private:
|
||
|
// The NSApp in control at the time the constructor was run, to be
|
||
|
// sure the |handling_| setting is restored appropriately.
|
||
|
NSObject<CrAppControlProtocol>* app_;
|
||
|
BOOL handling_; // Value of -[app_ handlingSendEvent] at construction.
|
||
|
|
||
|
DISALLOW_COPY_AND_ASSIGN(ScopedSendingEvent);
|
||
|
};
|
||
|
|
||
|
} // namespace mac
|
||
|
} // namespace base
|
||
|
|
||
|
#endif // BASE_MAC_SCOPED_SENDING_EVENT_H_
|