gecko-dev/widget/nsWidgetInitData.h
Ben Hearsum 814c293c0a Bug 1751010: Set AUMID correctly for private browsing windows r=mossop,mhowell
This is done differently depending on whether the Private Browsing window is the initial one, or if it's a new window from a running application. In the former case, we're still not setting it up early enough -- the window will initially show up in one icon, and then switch to the other one after we've adjusted the AUMID.

Regardless, the fact that we're doing it for every new window appears to mean that other places that require it (such as GeckoChildProcessHost.cpp) will Do The Right Thing (because they'll pull the cached version that `GetAppUserModelID` finds).

This behind a pref for now both because of the issue noted above, as well as the fact that we're waiting on finalized branding for this.

Differential Revision: https://phabricator.services.mozilla.com/D138194
2022-03-01 14:16:47 +00:00

145 lines
5.3 KiB
C

/* -*- Mode: C++; tab-width: 40; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef nsWidgetInitData_h__
#define nsWidgetInitData_h__
/**
* Window types
*
* Don't alter previously encoded enum values - 3rd party apps may look at
* these.
*/
enum nsWindowType {
eWindowType_toplevel, // default top level window
eWindowType_dialog, // top level window but usually handled differently
// by the OS
eWindowType_sheet, // MacOSX sheet (special dialog class)
eWindowType_popup, // used for combo boxes, etc
eWindowType_child, // child windows (contained inside a window on the
// desktop (has no border))
eWindowType_invisible, // windows that are invisible or offscreen
};
/**
* Popup types
*
* For eWindowType_popup
*/
enum nsPopupType {
ePopupTypePanel,
ePopupTypeMenu,
ePopupTypeTooltip,
ePopupTypeAny = 0xF000 // used only to pass to
// nsXULPopupManager::GetTopPopup
};
/**
* Popup levels specify the window ordering behaviour.
*/
enum nsPopupLevel {
// the popup appears just above its parent and maintains its position
// relative to the parent
ePopupLevelParent,
// the popup is a floating popup used for tool palettes. A parent window
// must be specified, but a platform implementation need not use this.
// On Windows, floating is generally equivalent to parent. On Mac, floating
// puts the popup at toplevel, but it will hide when the application is
// deactivated
ePopupLevelFloating,
// the popup appears on top of other windows, including those of other
// applications
ePopupLevelTop
};
/**
* Border styles
*/
enum nsBorderStyle {
eBorderStyle_none = 0, // no border, titlebar, etc.. opposite of
// all
eBorderStyle_all = 1 << 0, // all window decorations
eBorderStyle_border = 1 << 1, // enables the border on the window. these
// are only for decoration and are not
// resize handles
eBorderStyle_resizeh = 1 << 2, // enables the resize handles for the
// window. if this is set, border is
// implied to also be set
eBorderStyle_title = 1 << 3, // enables the titlebar for the window
eBorderStyle_menu = 1 << 4, // enables the window menu button on the
// title bar. this being on should force
// the title bar to display
eBorderStyle_minimize = 1 << 5, // enables the minimize button so the user
// can minimize the window. turned off for
// tranient windows since they can not be
// minimized separate from their parent
eBorderStyle_maximize = 1 << 6, // enables the maxmize button so the user
// can maximize the window
eBorderStyle_close = 1 << 7, // show the close button
eBorderStyle_default = -1 // whatever the OS wants... i.e. don't do
// anything
};
/**
* Basic struct for widget initialization data.
* @see Create member function of nsIWidget
*/
struct nsWidgetInitData {
nsWidgetInitData()
: mWindowType(eWindowType_child),
mBorderStyle(eBorderStyle_default),
mPopupHint(ePopupTypePanel),
mPopupLevel(ePopupLevelTop),
mScreenId(0),
clipChildren(false),
clipSiblings(false),
mDropShadow(false),
mRTL(false),
mNoAutoHide(false),
mIsDragPopup(false),
mIsAnimationSuppressed(false),
mSupportTranslucency(false),
mMouseTransparent(false),
mHasRemoteContent(false),
mAlwaysOnTop(false),
mPIPWindow(false),
mFissionWindow(false),
mResizable(false),
mIsPrivate(false) {}
nsWindowType mWindowType;
nsBorderStyle mBorderStyle;
nsPopupType mPopupHint;
nsPopupLevel mPopupLevel;
// B2G multi-screen support. Screen ID is for differentiating screens of
// windows, and due to the hardware limitation, it is platform-specific for
// now, which align with the value of display type defined in HWC.
uint32_t mScreenId;
// when painting exclude area occupied by child windows and sibling windows
bool clipChildren, clipSiblings, mDropShadow;
bool mRTL;
bool mNoAutoHide; // true for noautohide panels
bool mIsDragPopup; // true for drag feedback panels
// true if window creation animation is suppressed, e.g. for session restore
bool mIsAnimationSuppressed;
// true if the window should support an alpha channel, if available.
bool mSupportTranslucency;
// true if the window should be transparent to mouse events. Currently this is
// only valid for eWindowType_popup widgets
bool mMouseTransparent;
bool mHasRemoteContent;
bool mAlwaysOnTop;
// Is PictureInPicture window
bool mPIPWindow;
// True if fission is enabled for this window
bool mFissionWindow;
// True if the window is user-resizable.
bool mResizable;
bool mIsPrivate;
};
#endif // nsWidgetInitData_h__