VirtualBox

Changeset 67091 in vbox for trunk/src/VBox/Frontends


Ignore:
Timestamp:
May 25, 2017 3:21:01 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
115754
Message:

FE/Qt: Selector UI: Tools pane: Reworking pane to handle stack of children using QStackedLayout instead of QStackedWidget which has a glitch under macOS causing QToolBar integration failure (as a result widget became frameless cocoa window); That also required to add an early cleanup routine.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/selector
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPane.cpp

    r67090 r67091  
    2121
    2222/* Qt includes: */
    23 # include <QStackedWidget>
     23# include <QStackedLayout>
    2424# include <QTabBar>
    2525
     
    4242    : QIWithRetranslateUI<QWidget>(pParent)
    4343    , m_pLayoutMain(0)
    44     , m_pStackedWidget(0)
     44    , m_pStackedLayout(0)
    4545    , m_pPaneSnapshots(0)
    4646    , m_pLayoutControls(0)
     
    5353}
    5454
     55UIToolsPane::~UIToolsPane()
     56{
     57    /* Cleanup: */
     58    cleanup();
     59}
     60
    5561void UIToolsPane::setMachine(const CMachine &comMachine)
    5662{
     
    96102{
    97103    /* Swap stack-widget pages as well: */
    98     QWidget *pWidget = m_pStackedWidget->widget(iFrom);
    99     m_pStackedWidget->removeWidget(pWidget);
    100     m_pStackedWidget->insertWidget(iTo, pWidget);
     104    QWidget *pWidget = m_pStackedLayout->widget(iFrom);
     105    m_pStackedLayout->removeWidget(pWidget);
     106    m_pStackedLayout->insertWidget(iTo, pWidget);
    101107}
    102108
     
    104110{
    105111    /* Activate corresponding indexes: */
    106     m_pStackedWidget->setCurrentIndex(iIndex);
     112    m_pStackedLayout->setCurrentIndex(iIndex);
    107113}
    108114
     
    126132    /* Delete the tab and corresponding widget: */
    127133    m_pTabBar->removeTab(iActualTabIndex);
    128     QWidget *pWidget = m_pStackedWidget->widget(iActualTabIndex);
    129     m_pStackedWidget->removeWidget(pWidget);
     134    QWidget *pWidget = m_pStackedLayout->widget(iActualTabIndex);
     135    m_pStackedLayout->removeWidget(pWidget);
    130136    delete pWidget;
    131137}
     
    141147        m_pLayoutMain->setContentsMargins(3, 4, 5, 0);
    142148
    143         /* Prepare stacked-widget: */
    144         prepareStackedWidget();
     149        /* Prepare stacked-layout: */
     150        prepareStackedLayout();
    145151
    146152        /* Create controls layout: */
     
    173179}
    174180
    175 void UIToolsPane::prepareStackedWidget()
    176 {
    177     /* Create stacked-widget: */
    178     m_pStackedWidget = new QStackedWidget;
    179     AssertPtrReturnVoid(m_pStackedWidget);
     181void UIToolsPane::prepareStackedLayout()
     182{
     183    /* Create stacked-layout: */
     184    m_pStackedLayout = new QStackedLayout;
     185    AssertPtrReturnVoid(m_pStackedLayout);
    180186    {
    181187        /* Add into layout: */
    182         m_pLayoutMain->addWidget(m_pStackedWidget);
     188        m_pLayoutMain->addLayout(m_pStackedLayout);
    183189    }
    184190}
     
    268274}
    269275
     276void UIToolsPane::cleanup()
     277{
     278    /* Remove all tab prematurelly: */
     279    while (m_pTabBar->count())
     280    {
     281        m_pTabBar->removeTab(0);
     282        QWidget *pWidget = m_pStackedLayout->widget(0);
     283        m_pStackedLayout->removeWidget(pWidget);
     284        delete pWidget;
     285    }
     286}
     287
    270288void UIToolsPane::activateTabBarTab(ToolsType enmType, bool fCloseable)
    271289{
     
    285303            case ToolsType_SnapshotManager:
    286304                m_pPaneSnapshots = new UISnapshotPane;
    287                 m_pStackedWidget->addWidget(m_pPaneSnapshots);
     305                m_pStackedLayout->addWidget(m_pPaneSnapshots);
    288306                break;
    289307            case ToolsType_VirtualMediaManager:
    290                 m_pStackedWidget->addWidget(new UIMediumManagerWidget(EmbedTo_Stack));
     308                m_pStackedLayout->addWidget(new UIMediumManagerWidget(EmbedTo_Stack));
    291309                break;
    292310            case ToolsType_HostNetworkManager:
    293                 m_pStackedWidget->addWidget(new UIHostNetworkManagerWidget(EmbedTo_Stack));
     311                m_pStackedLayout->addWidget(new UIHostNetworkManagerWidget(EmbedTo_Stack));
    294312                break;
    295313            default:
     
    320338
    321339    /* Activate corresponding indexes: */
    322     m_pStackedWidget->setCurrentIndex(iActualTabIndex);
     340    m_pStackedLayout->setCurrentIndex(iActualTabIndex);
    323341    m_pTabBar->setCurrentIndex(iActualTabIndex);
    324342    m_pTabBar->blockSignals(false);
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPane.h

    r67090 r67091  
    2929class QHBoxLayout;
    3030class QMenu;
    31 class QStackedWidget;
     31class QStackedLayout;
    3232class QTabBar;
    3333class QVBoxLayout;
     
    5555    /** Constructs tools pane passing @a pParent to the base-class. */
    5656    UIToolsPane(QWidget *pParent = 0);
     57    /** Destructs tools pane. */
     58    virtual ~UIToolsPane() /* override */;
    5759
    5860    /** Defines the @a comMachine object. */
     
    8082    /** Prepares all. */
    8183    void prepare();
    82     /** Prepares stacked-widget. */
    83     void prepareStackedWidget();
     84    /** Prepares stacked-layout. */
     85    void prepareStackedLayout();
    8486    /** Prepares tab-bar. */
    8587    void prepareTabBar();
     
    8890    /** Prepares menu. */
    8991    void prepareMenu();
     92    /** Cleanups all. */
     93    void cleanup();
    9094
    9195    /** Activates corresponding tab-bar tab, adds new if necessary. */
     
    9498    /** Holds the main layout isntance. */
    9599    QVBoxLayout               *m_pLayoutMain;
    96     /** Holds the stacked-widget instance. */
    97     QStackedWidget            *m_pStackedWidget;
     100    /** Holds the stacked-layout instance. */
     101    QStackedLayout            *m_pStackedLayout;
    98102    /** Holds the snapshot pane. */
    99103    UISnapshotPane            *m_pPaneSnapshots;
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette