widget/nsWidgetInitData.h
author Brindusan Cristian <cbrindusan@mozilla.com>
Tue, 05 Mar 2019 22:42:15 +0200
changeset 520316 be4b780a7783cdf7d3ead37c98917dc0d2e94a1d
parent 511100 2d7f5838e68fbac83742ee5c52d3c7ebf2a7315b
permissions -rw-r--r--
Backed out 5 changesets (bug 1508976, bug 1522581) for android geckoview bustages at /usr/bin/python2.7. CLOSED TREE Backed out changeset 7a6be593b0be (bug 1522581) Backed out changeset c47b37ac1775 (bug 1522581) Backed out changeset 91c31d2a7706 (bug 1508976) Backed out changeset da57df805c56 (bug 1508976) Backed out changeset 4e5d97c93515 (bug 1508976)

/* -*- 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
  eWindowType_plugin,     // plugin window
  eWindowType_plugin_ipc_chrome,   // chrome side native widget for plugins
                                   // (e10s)
  eWindowType_plugin_ipc_content,  // content side puppet widget for plugins
                                   // (e10s)
};

/**
 * 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),
        mListenForResizes(false),
        mUnicode(true),
        mRTL(false),
        mNoAutoHide(false),
        mIsDragPopup(false),
        mIsAnimationSuppressed(false),
        mSupportTranslucency(false),
        mMouseTransparent(false),
        mHasRemoteContent(false),
        mAlwaysOnTop(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 mListenForResizes;
  bool mUnicode;
  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;
};

#endif  // nsWidgetInitData_h__