summaryrefslogtreecommitdiffstats
path: root/widget/cocoa/nsCocoaWindow.h
diff options
context:
space:
mode:
Diffstat (limited to 'widget/cocoa/nsCocoaWindow.h')
-rw-r--r--widget/cocoa/nsCocoaWindow.h241
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_