| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ui/webui/examples/app/mac_init.h" |
| |
| #include "base/observer_list.h" |
| |
| #import "base/mac/scoped_sending_event.h" |
| #import "base/message_loop/message_pump_apple.h" |
| #import "content/public/browser/native_event_processor_mac.h" |
| #import "content/public/browser/native_event_processor_observer_mac.h" |
| |
| @interface ExamplesApplication |
| : NSApplication <CrAppProtocol, CrAppControlProtocol, NativeEventProcessor> |
| @end |
| |
| @implementation ExamplesApplication { |
| base::ObserverList<content::NativeEventProcessorObserver>::Unchecked |
| _observers; |
| BOOL _handlingSendEvent; |
| } |
| |
| - (BOOL)isHandlingSendEvent { |
| return _handlingSendEvent; |
| } |
| |
| - (void)setHandlingSendEvent:(BOOL)handlingSendEvent { |
| _handlingSendEvent = handlingSendEvent; |
| } |
| |
| - (void)sendEvent:(NSEvent*)event { |
| base::mac::ScopedSendingEvent sendingEventScoper; |
| content::ScopedNotifyNativeEventProcessorObserver scopedObserverNotifier( |
| &self->_observers, event); |
| [super sendEvent:event]; |
| } |
| |
| - (void)addNativeEventProcessorObserver: |
| (content::NativeEventProcessorObserver*)observer { |
| _observers.AddObserver(observer); |
| } |
| |
| - (void)removeNativeEventProcessorObserver: |
| (content::NativeEventProcessorObserver*)observer { |
| _observers.RemoveObserver(observer); |
| } |
| |
| @end |
| |
| namespace webui_examples { |
| |
| void MacPreBrowserMain() { |
| CHECK_EQ(NSApp, nil); |
| [ExamplesApplication sharedApplication]; |
| [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular]; |
| } |
| |
| } // namespace webui_examples |