author Doug Thayer <dothayer@mozilla.com>
Fri, 01 Mar 2019 18:29:09 +0000
changeset 520116 8b3fe0426ffc1b3a2ad044ef6cdde6c4f736f8e2
parent 511100 2d7f5838e68fbac83742ee5c52d3c7ebf2a7315b
permissions -rw-r--r--
Bug 1442694 - Fix failures due to removing selected tab r=Gijs This adds test which reproduce the failure as well as the fix. Essentially, if we hit the edited case in SessionStore with `tab` equal to `tabbrowser.tabs[t]`, we remove the tab and then try to pin it, which obviously blows up. Note: the additional method in SessionStore.jsm was largely to get around complexity requirements inside restoreWindow. Cleaner solutions welcome. Differential Revision: https://phabricator.services.mozilla.com/D21383

/* -*- 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 {
  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
  // 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
  // the popup appears on top of other windows, including those of other
  // applications

 * 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 {
      : mWindowType(eWindowType_child),
        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__