mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-27 23:02:20 +00:00
f56dca9254
Bug 1870512 removed top level windows with WindowType::Popup, instead replacing it with an "alert" feature for the only use of them that we had. Turns out that on Windows they need a bit more special handling than I thought, so this patch uses the alert boolean to fix two regressions (that alerts now create taskbar icons, and that they steal focus). Remove mIsForMenuPopupFrame since that is now a synonym with WindowType::Popup. Remove also the dialog vs. toplevel difference of using WS_EX_DLGMODALFRAME, since that doesn't seem to have an effect at all on windows 10+. Differential Revision: https://phabricator.services.mozilla.com/D200508
114 lines
4.3 KiB
C++
114 lines
4.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 mozilla_widget_InitData_h__
|
|
#define mozilla_widget_InitData_h__
|
|
|
|
#include <cstdint>
|
|
#include "mozilla/TypedEnumBits.h"
|
|
#include "X11UndefineNone.h"
|
|
|
|
namespace mozilla::widget {
|
|
|
|
// Window types
|
|
enum class WindowType : uint8_t {
|
|
TopLevel, // default top level window
|
|
Dialog, // top level window but usually handled differently
|
|
// by the OS
|
|
Sheet, // MacOSX sheet (special dialog class)
|
|
Popup, // used for combo boxes, etc
|
|
Child, // child windows (contained inside a window on the
|
|
// desktop (has no border))
|
|
Invisible, // windows that are invisible or offscreen
|
|
};
|
|
|
|
// Popup types for WindowType::Popup
|
|
enum class PopupType : uint8_t {
|
|
Panel,
|
|
Menu,
|
|
Tooltip,
|
|
Any, // used only to pass to nsXULPopupManager::GetTopPopup
|
|
};
|
|
|
|
// Popup levels specify the window ordering behaviour.
|
|
enum class PopupLevel : uint8_t {
|
|
// The popup appears just above its parent and maintains its position
|
|
// relative to the parent.
|
|
Parent,
|
|
// 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.
|
|
Floating,
|
|
// The popup appears on top of other windows, including those of other
|
|
// applications.
|
|
Top,
|
|
};
|
|
|
|
// Border styles
|
|
enum class BorderStyle : int16_t {
|
|
None = 0, // no border, titlebar, etc.. opposite of all
|
|
All = 1 << 0, // all window decorations
|
|
Border = 1 << 1, // enables the border on the window. these
|
|
// are only for decoration and are not
|
|
// resize handles
|
|
ResizeH = 1 << 2, // enables the resize handles for the
|
|
// window. if this is set, border is
|
|
// implied to also be set
|
|
Title = 1 << 3, // enables the titlebar for the window
|
|
Menu = 1 << 4, // enables the window menu button on the
|
|
// title bar. this being on should force
|
|
// the title bar to display
|
|
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
|
|
Maximize = 1 << 6, // enables the maxmize button so the user
|
|
// can maximize the window
|
|
Close = 1 << 7, // show the close button
|
|
Default = -1 // whatever the OS wants... i.e. don't do anything
|
|
};
|
|
|
|
MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(BorderStyle)
|
|
|
|
enum class TransparencyMode : uint8_t {
|
|
Opaque = 0, // Fully opaque
|
|
Transparent, // Parts of the window may be transparent
|
|
// If you add to the end here, you must update the serialization code in
|
|
// WidgetMessageUtils.h
|
|
};
|
|
|
|
// Basic struct for widget initialization data.
|
|
// @see Create member function of nsIWidget
|
|
struct InitData {
|
|
WindowType mWindowType = WindowType::Child;
|
|
BorderStyle mBorderStyle = BorderStyle::Default;
|
|
PopupType mPopupHint = PopupType::Panel;
|
|
PopupLevel mPopupLevel = PopupLevel::Top;
|
|
TransparencyMode mTransparencyMode = TransparencyMode::Opaque;
|
|
// when painting exclude area occupied by child windows and sibling windows
|
|
bool mClipChildren = false;
|
|
bool mClipSiblings = false;
|
|
bool mRTL = false;
|
|
bool mNoAutoHide = false; // true for noautohide panels
|
|
bool mIsDragPopup = false; // true for drag feedback panels
|
|
// true if window creation animation is suppressed, e.g. for session restore
|
|
bool mIsAnimationSuppressed = false;
|
|
// true if the window should support an alpha channel, if available.
|
|
bool mHasRemoteContent = false;
|
|
bool mAlwaysOnTop = false;
|
|
// Whether we're a PictureInPicture window
|
|
bool mPIPWindow = false;
|
|
// True if the window is user-resizable.
|
|
bool mResizable = false;
|
|
bool mIsPrivate = false;
|
|
// True if the window is an alert / notification.
|
|
bool mIsAlert = false;
|
|
};
|
|
|
|
} // namespace mozilla::widget
|
|
|
|
#endif // mozilla_widget_InitData
|