diff options
Diffstat (limited to 'widget/cocoa/nsCocoaWindow.h')
-rw-r--r-- | widget/cocoa/nsCocoaWindow.h | 241 |
1 files changed, 100 insertions, 141 deletions
diff --git a/widget/cocoa/nsCocoaWindow.h b/widget/cocoa/nsCocoaWindow.h index 621c32eb44..96e117ba26 100644 --- a/widget/cocoa/nsCocoaWindow.h +++ b/widget/cocoa/nsCocoaWindow.h @@ -12,7 +12,6 @@ #include "mozilla/RefPtr.h" #include "nsBaseWidget.h" -#include "nsPIWidgetCocoa.h" #include "nsCocoaUtils.h" #include "nsTouchBar.h" #include <dlfcn.h> @@ -27,12 +26,6 @@ namespace mozilla { enum class NativeKeyBindingsType : uint8_t; } // namespace mozilla -typedef struct _nsCocoaWindowList { - _nsCocoaWindowList() : prev(nullptr), window(nullptr) {} - struct _nsCocoaWindowList* prev; - nsCocoaWindow* window; // Weak -} nsCocoaWindowList; - // NSWindow subclass that is the base class for all of our own window classes. // Among other things, this class handles the storage of those settings that // need to be persisted across window destruction and reconstruction, i.e. when @@ -169,102 +162,75 @@ typedef struct _nsCocoaWindowList { - (void)sendToplevelDeactivateEvents; @end -@interface MOZTitlebarView : NSVisualEffectView -@end - @interface FullscreenTitlebarTracker : NSTitlebarAccessoryViewController - (FullscreenTitlebarTracker*)init; @end // NSWindow subclass for handling windows with toolbars. @interface ToolbarWindow : BaseWindow { - // This window's titlebar view, if present. - // Will be nil if the window has neither a titlebar nor a unified toolbar. - // This view is a subview of the window's content view and gets created and - // destroyed by updateTitlebarView. - MOZTitlebarView* mTitlebarView; // [STRONG] // mFullscreenTitlebarTracker attaches an invisible rectangle to the system // title bar. This allows us to detect when the title bar is showing in // fullscreen. FullscreenTitlebarTracker* mFullscreenTitlebarTracker; - CGFloat mUnifiedToolbarHeight; - CGFloat mSheetAttachmentPosition; CGFloat mMenuBarHeight; - /* Store the height of the titlebar when this window is initialized. The - titlebarHeight getter returns 0 when in fullscreen, which is not useful in - some cases. */ - CGFloat mInitialTitlebarHeight; NSRect mWindowButtonsRect; } -- (void)setUnifiedToolbarHeight:(CGFloat)aHeight; -- (CGFloat)unifiedToolbarHeight; -- (CGFloat)titlebarHeight; -- (NSRect)titlebarRect; -- (void)setTitlebarNeedsDisplay; - (void)setDrawsContentsIntoWindowFrame:(BOOL)aState; -- (void)setSheetAttachmentPosition:(CGFloat)aY; -- (CGFloat)sheetAttachmentPosition; - (void)placeWindowButtons:(NSRect)aRect; - (NSRect)windowButtonsRect; - (void)windowMainStateChanged; @end -class nsCocoaWindow final : public nsBaseWidget, public nsPIWidgetCocoa { +class nsCocoaWindow final : public nsBaseWidget { private: typedef nsBaseWidget Inherited; public: nsCocoaWindow(); - NS_DECL_ISUPPORTS_INHERITED - NS_DECL_NSPIWIDGETCOCOA; // semicolon for clang-format bug 1629756 - - [[nodiscard]] virtual nsresult Create(nsIWidget* aParent, - nsNativeWidget aNativeParent, - const DesktopIntRect& aRect, - InitData* = nullptr) override; - - [[nodiscard]] virtual nsresult Create(nsIWidget* aParent, - nsNativeWidget aNativeParent, - const LayoutDeviceIntRect& aRect, - InitData* = nullptr) override; - - virtual void Destroy() override; - - virtual void Show(bool aState) override; - virtual bool NeedsRecreateToReshow() override; - - virtual nsIWidget* GetSheetWindowParent(void) override; - virtual void Enable(bool aState) override; - virtual bool IsEnabled() const override; - virtual void SetModal(bool aState) override; - virtual void SetFakeModal(bool aState) override; - virtual bool IsRunningAppModal() override; - virtual bool IsVisible() const override; - virtual void SetFocus(Raise, mozilla::dom::CallerType aCallerType) override; - virtual LayoutDeviceIntPoint WidgetToScreenOffset() override; - virtual LayoutDeviceIntPoint GetClientOffset() override; - virtual LayoutDeviceIntMargin ClientToWindowMargin() override; - - virtual void* GetNativeData(uint32_t aDataType) override; - - virtual void ConstrainPosition(DesktopIntPoint&) override; - virtual void SetSizeConstraints(const SizeConstraints& aConstraints) override; - virtual void Move(double aX, double aY) override; - virtual nsSizeMode SizeMode() override { return mSizeMode; } - virtual void SetSizeMode(nsSizeMode aMode) override; - virtual void GetWorkspaceID(nsAString& workspaceID) override; - virtual void MoveToWorkspace(const nsAString& workspaceID) override; - virtual void SuppressAnimation(bool aSuppress) override; - virtual void HideWindowChrome(bool aShouldHide) override; - - virtual bool PrepareForFullscreenTransition(nsISupports** aData) override; - virtual void PerformFullscreenTransition(FullscreenTransitionStage aStage, - uint16_t aDuration, - nsISupports* aData, - nsIRunnable* aCallback) override; - virtual void CleanupFullscreenTransition() override; + [[nodiscard]] nsresult Create(nsIWidget* aParent, + nsNativeWidget aNativeParent, + const DesktopIntRect& aRect, + InitData* = nullptr) override; + + [[nodiscard]] nsresult Create(nsIWidget* aParent, + nsNativeWidget aNativeParent, + const LayoutDeviceIntRect& aRect, + InitData* = nullptr) override; + + void Destroy() override; + + void Show(bool aState) override; + bool NeedsRecreateToReshow() override; + + void Enable(bool aState) override; + bool IsEnabled() const override; + void SetModal(bool aState) override; + bool IsRunningAppModal() override; + bool IsVisible() const override; + void SetFocus(Raise, mozilla::dom::CallerType aCallerType) override; + LayoutDeviceIntPoint WidgetToScreenOffset() override; + LayoutDeviceIntPoint GetClientOffset() override; + LayoutDeviceIntMargin ClientToWindowMargin() override; + + void* GetNativeData(uint32_t aDataType) override; + + void ConstrainPosition(DesktopIntPoint&) override; + void SetSizeConstraints(const SizeConstraints& aConstraints) override; + void Move(double aX, double aY) override; + nsSizeMode SizeMode() override { return mSizeMode; } + void SetSizeMode(nsSizeMode aMode) override; + void GetWorkspaceID(nsAString& workspaceID) override; + void MoveToWorkspace(const nsAString& workspaceID) override; + void SuppressAnimation(bool aSuppress) override; + void HideWindowChrome(bool aShouldHide) override; + + bool PrepareForFullscreenTransition(nsISupports** aData) override; + void PerformFullscreenTransition(FullscreenTransitionStage aStage, + uint16_t aDuration, nsISupports* aData, + nsIRunnable* aCallback) override; + void CleanupFullscreenTransition() override; nsresult MakeFullScreen(bool aFullScreen) final; nsresult MakeFullScreenWithNativeTransition(bool aFullScreen) final; NSAnimation* FullscreenTransitionAnimation() const { @@ -277,79 +243,79 @@ class nsCocoaWindow final : public nsBaseWidget, public nsPIWidgetCocoa { mFullscreenTransitionAnimation = nil; } - virtual void Resize(double aWidth, double aHeight, bool aRepaint) override; - virtual void Resize(double aX, double aY, double aWidth, double aHeight, - bool aRepaint) override; + void Resize(double aWidth, double aHeight, bool aRepaint) override; + void Resize(double aX, double aY, double aWidth, double aHeight, + bool aRepaint) override; NSRect GetClientCocoaRect(); - virtual LayoutDeviceIntRect GetClientBounds() override; - virtual LayoutDeviceIntRect GetScreenBounds() override; + LayoutDeviceIntRect GetClientBounds() override; + LayoutDeviceIntRect GetScreenBounds() override; void ReportMoveEvent(); void ReportSizeEvent(); - virtual void SetCursor(const Cursor&) override; + void SetCursor(const Cursor&) override; CGFloat BackingScaleFactor(); void BackingScaleFactorChanged(); - virtual double GetDefaultScaleInternal() override; - virtual int32_t RoundsWidgetCoordinatesTo() override; + double GetDefaultScaleInternal() override; + int32_t RoundsWidgetCoordinatesTo() override; mozilla::DesktopToLayoutDeviceScale GetDesktopToDeviceScale() final { return mozilla::DesktopToLayoutDeviceScale(BackingScaleFactor()); } - virtual nsresult SetTitle(const nsAString& aTitle) override; - - virtual void Invalidate(const LayoutDeviceIntRect& aRect) override; - virtual WindowRenderer* GetWindowRenderer() override; - virtual nsresult DispatchEvent(mozilla::WidgetGUIEvent* aEvent, - nsEventStatus& aStatus) override; - virtual void CaptureRollupEvents(bool aDoCapture) override; - [[nodiscard]] virtual nsresult GetAttention(int32_t aCycleCount) override; - virtual bool HasPendingInputEvent() override; - virtual TransparencyMode GetTransparencyMode() override; - virtual void SetTransparencyMode(TransparencyMode aMode) override; - virtual void SetWindowShadowStyle(mozilla::WindowShadow aStyle) override; - virtual void SetWindowOpacity(float aOpacity) override; - virtual void SetWindowTransform( - const mozilla::gfx::Matrix& aTransform) override; - virtual void SetInputRegion(const InputRegion&) override; - virtual void SetColorScheme( - const mozilla::Maybe<mozilla::ColorScheme>&) override; - virtual void SetShowsToolbarButton(bool aShow) override; - virtual void SetSupportsNativeFullscreen(bool aShow) override; - virtual void SetWindowAnimationType(WindowAnimationType aType) override; - virtual void SetDrawsTitle(bool aDrawTitle) override; - virtual nsresult SetNonClientMargins(const LayoutDeviceIntMargin&) override; + nsresult SetTitle(const nsAString& aTitle) override; + + void Invalidate(const LayoutDeviceIntRect& aRect) override; + WindowRenderer* GetWindowRenderer() override; + nsresult DispatchEvent(mozilla::WidgetGUIEvent* aEvent, + nsEventStatus& aStatus) override; + void CaptureRollupEvents(bool aDoCapture) override; + [[nodiscard]] nsresult GetAttention(int32_t aCycleCount) override; + bool HasPendingInputEvent() override; + TransparencyMode GetTransparencyMode() override; + void SetTransparencyMode(TransparencyMode aMode) override; + void SetWindowShadowStyle(mozilla::WindowShadow aStyle) override; + void SetWindowOpacity(float aOpacity) override; + void SetWindowTransform(const mozilla::gfx::Matrix& aTransform) override; + void SetInputRegion(const InputRegion&) override; + void SetColorScheme(const mozilla::Maybe<mozilla::ColorScheme>&) override; + void SetShowsToolbarButton(bool aShow) override; + void SetSupportsNativeFullscreen(bool aShow) override; + void SetWindowAnimationType(WindowAnimationType aType) override; + void SetDrawsTitle(bool aDrawTitle) override; + nsresult SetNonClientMargins(const LayoutDeviceIntMargin&) override; void SetDrawsInTitlebar(bool aState); - virtual void UpdateThemeGeometries( + void UpdateThemeGeometries( const nsTArray<ThemeGeometry>& aThemeGeometries) override; - virtual nsresult SynthesizeNativeMouseEvent( - LayoutDeviceIntPoint aPoint, NativeMouseMessage aNativeMessage, - mozilla::MouseButton aButton, nsIWidget::Modifiers aModifierFlags, - nsIObserver* aObserver) override; - virtual nsresult SynthesizeNativeMouseScrollEvent( + nsresult SynthesizeNativeMouseEvent(LayoutDeviceIntPoint aPoint, + NativeMouseMessage aNativeMessage, + mozilla::MouseButton aButton, + nsIWidget::Modifiers aModifierFlags, + nsIObserver* aObserver) override; + nsresult SynthesizeNativeMouseScrollEvent( LayoutDeviceIntPoint aPoint, uint32_t aNativeMessage, double aDeltaX, double aDeltaY, double aDeltaZ, uint32_t aModifierFlags, uint32_t aAdditionalFlags, nsIObserver* aObserver) override; - virtual void LockAspectRatio(bool aShouldLock) override; + void LockAspectRatio(bool aShouldLock) override; void DispatchSizeModeEvent(); void DispatchOcclusionEvent(); // be notified that a some form of drag event needs to go into Gecko - virtual bool DragEvent(unsigned int aMessage, - mozilla::gfx::Point aMouseGlobal, - UInt16 aKeyModifiers); + bool DragEvent(unsigned int aMessage, mozilla::gfx::Point aMouseGlobal, + UInt16 aKeyModifiers); + + bool HasModalDescendants() const { return mNumModalDescendants > 0; } + bool IsModal() const { return mModal; } - bool HasModalDescendents() { return mNumModalDescendents > 0; } NSWindow* GetCocoaWindow() { return mWindow; } void SetMenuBar(RefPtr<nsMenuBarX>&& aMenuBar); nsMenuBarX* GetMenuBar(); - virtual void SetInputContext(const InputContext& aContext, - const InputContextAction& aAction) override; - virtual InputContext GetInputContext() override { return mInputContext; } - MOZ_CAN_RUN_SCRIPT virtual bool GetEditCommands( + void SetInputContext(const InputContext& aContext, + const InputContextAction& aAction) override; + InputContext GetInputContext() override { return mInputContext; } + MOZ_CAN_RUN_SCRIPT bool GetEditCommands( mozilla::NativeKeyBindingsType aType, const mozilla::WidgetKeyboardEvent& aEvent, nsTArray<mozilla::CommandInt>& aCommands) override; @@ -400,6 +366,7 @@ class nsCocoaWindow final : public nsBaseWidget, public nsPIWidgetCocoa { void DestroyNativeWindow(); void UpdateBounds(); int32_t GetWorkspaceID(); + void SendSetZLevelEvent(); void DoResize(double aX, double aY, double aWidth, double aHeight, bool aRepaint, bool aConstrainToCurrentScreen); @@ -407,7 +374,7 @@ class nsCocoaWindow final : public nsBaseWidget, public nsPIWidgetCocoa { void UpdateFullscreenState(bool aFullScreen, bool aNativeMode); nsresult DoMakeFullScreen(bool aFullScreen, bool aUseSystemTransition); - virtual already_AddRefed<nsIWidget> AllocateChildPopupWidget() override { + already_AddRefed<nsIWidget> AllocateChildPopupWidget() override { return nsIWidget::CreateTopLevelWindow(); } @@ -417,8 +384,6 @@ class nsCocoaWindow final : public nsBaseWidget, public nsPIWidgetCocoa { WindowDelegate* mDelegate; // our delegate for processing window msgs [STRONG] RefPtr<nsMenuBarX> mMenuBar; - NSWindow* mSheetWindowParent; // if this is a sheet, this is the NSWindow - // it's attached to nsChildView* mPopupContentView; // if this is a popup, this is its content widget // if this is a toplevel window, and there is any ongoing fullscreen @@ -432,8 +397,6 @@ class nsCocoaWindow final : public nsBaseWidget, public nsPIWidgetCocoa { WindowAnimationType mAnimationType; bool mWindowMadeHere; // true if we created the window, false for embedding - bool mSheetNeedsShow; // if this is a sheet, are we waiting to be shown? - // this is used for sibling sheet contention only nsSizeMode mSizeMode; bool mInFullScreenMode; // Whether we are currently using native fullscreen. It could be false because @@ -482,19 +445,18 @@ class nsCocoaWindow final : public nsBaseWidget, public nsPIWidgetCocoa { // unnecessary OcclusionStateChanged events. bool mHasStartedNativeFullscreen; - bool mModal; - bool mFakeModal; - - bool mIsAnimationSuppressed; + bool mModal = false; + bool mIsAnimationSuppressed = false; - bool mInReportMoveEvent; // true if in a call to ReportMoveEvent(). - bool mInResize; // true if in a call to DoResize(). - bool mWindowTransformIsIdentity; - bool mAlwaysOnTop; - bool mAspectRatioLocked; + bool mInReportMoveEvent = false; // true if in a call to ReportMoveEvent(). + bool mInResize = false; // true if in a call to DoResize(). + bool mWindowTransformIsIdentity = true; + bool mAlwaysOnTop = false; + bool mAspectRatioLocked = false; bool mIsAlert = false; // True if this is an non-native alert window. + bool mWasShown = false; - int32_t mNumModalDescendents; + int32_t mNumModalDescendants = 0; InputContext mInputContext; NSWindowAnimationBehavior mWindowAnimationBehavior; @@ -508,9 +470,6 @@ class nsCocoaWindow final : public nsBaseWidget, public nsPIWidgetCocoa { // to EndOurNativeTransition() when the native transition is complete. bool CanStartNativeTransition(); void EndOurNativeTransition(); - - // true if Show() has been called. - bool mWasShown; }; #endif // nsCocoaWindow_h_ |