VirtualBox

Ignore:
Timestamp:
May 29, 2012 5:13:41 PM (13 years ago)
Author:
vboxsync
Message:

FE/Qt: 5820: Make sure window visibility state persist through visual representation mode change.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/runtime
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.cpp

    r41486 r41487  
    163163    /* Process KGuestMonitorChangedEventType_Enabled change event: */
    164164    if (isHidden() && changeType == KGuestMonitorChangedEventType_Enabled)
    165         showInNecessaryMode();
     165        uisession()->setScreenVisible(m_uScreenId, true);
    166166    /* Process KGuestMonitorChangedEventType_Disabled change event: */
    167167    else if (!isHidden() && changeType == KGuestMonitorChangedEventType_Disabled)
    168         hide();
     168        uisession()->setScreenVisible(m_uScreenId, false);
     169
     170    /* Update screen visibility status: */
     171    showInNecessaryMode();
    169172}
    170173
     
    612615#endif /* VBOX_WITH_DEBUGGER_GUI */
    613616
    614 bool UIMachineWindow::shouldWeShowWindow() const
    615 {
    616     /* By default, every window should be shown: */
    617     bool fResult = true;
    618     /* But if machine is 'turned off': */
    619     if (uisession()->isTurnedOff())
    620     {
    621         /* If machine is in 'saved' state: */
    622         if (uisession()->isSaved())
    623         {
    624             /* We are getting shown-state from saved-state: */
    625             BOOL fEnabled = true;
    626             ULONG guestOriginX = 0, guestOriginY = 0, guestWidth = 0, guestHeight = 0;
    627             machine().QuerySavedGuestScreenInfo(m_uScreenId, guestOriginX, guestOriginY, guestWidth, guestHeight, fEnabled);
    628             fResult = fEnabled;
    629         }
    630         /* If machine is in 'powered off', 'teleported' or 'aborted' state: */
    631         else
    632         {
    633             /* Shown-state is 'enabled' only for 1st monitor: */
    634             fResult = m_uScreenId == 0;
    635         }
    636     }
    637     return fResult;
    638 }
    639 
    640617/* static */
    641618Qt::WindowFlags UIMachineWindow::windowFlags(UIVisualStateType visualStateType)
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.h

    r41486 r41487  
    109109
    110110    /* Helpers: */
    111     bool shouldWeShowWindow() const;
    112111    const QString& defaultWindowTitle() const { return m_strWindowTitlePrefix; }
    113112    static Qt::WindowFlags windowFlags(UIVisualStateType visualStateType);
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp

    r41484 r41487  
    9292    prepareConsoleEventHandlers();
    9393
     94    /* Prepare screens: */
     95    prepareScreens();
     96
    9497    /* Prepare framebuffers: */
    9598    prepareFramebuffers();
     
    655658}
    656659
     660void UISession::prepareScreens()
     661{
     662    /* Get machine: */
     663    CMachine machine = m_session.GetMachine();
     664
     665    /* Prepare initial screen visibility status: */
     666    m_monitorVisibilityVector.resize(machine.GetMonitorCount());
     667    m_monitorVisibilityVector.fill(false);
     668    m_monitorVisibilityVector[0] = true;
     669
     670    /* If machine is in 'saved' state: */
     671    if (isSaved())
     672    {
     673        /* Update screen visibility status from saved-state: */
     674        for (int i = 0; i < m_monitorVisibilityVector.size(); ++i)
     675        {
     676            BOOL fEnabled = true;
     677            ULONG guestOriginX = 0, guestOriginY = 0, guestWidth = 0, guestHeight = 0;
     678            machine.QuerySavedGuestScreenInfo(i, guestOriginX, guestOriginY, guestWidth, guestHeight, fEnabled);
     679            m_monitorVisibilityVector[i] = fEnabled;
     680        }
     681    }
     682}
     683
    657684void UISession::prepareFramebuffers()
    658685{
     
    10731100}
    10741101
     1102bool UISession::isScreenVisible(ulong uScreenId) const
     1103{
     1104    Assert(uScreenId < (ulong)m_monitorVisibilityVector.size());
     1105    return m_monitorVisibilityVector.value((int)uScreenId, false);
     1106}
     1107
     1108void UISession::setScreenVisible(ulong uScreenId, bool fIsMonitorVisible)
     1109{
     1110    Assert(uScreenId < (ulong)m_monitorVisibilityVector.size());
     1111    if (uScreenId < (ulong)m_monitorVisibilityVector.size())
     1112        m_monitorVisibilityVector[(int)uScreenId] = fIsMonitorVisible;
     1113}
     1114
    10751115UIFrameBuffer* UISession::frameBuffer(ulong uScreenId) const
    10761116{
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h

    r41484 r41487  
    147147    void setMouseIntegrated(bool fIsMouseIntegrated) { m_fIsMouseIntegrated = fIsMouseIntegrated; }
    148148
     149    /* Screen visibility status: */
     150    bool isScreenVisible(ulong uScreenId) const;
     151    void setScreenVisible(ulong uScreenId, bool fIsMonitorVisible);
     152
    149153    /* Returns existing framebuffer for the given screen-number;
    150154     * Returns 0 (asserts) if screen-number attribute is out of bounds: */
     
    202206    /* Prepare helpers: */
    203207    void prepareConsoleEventHandlers();
     208    void prepareScreens();
    204209    void prepareFramebuffers();
    205210    void prepareMenuPool();
     
    210215    void cleanupMenuPool();
    211216    void cleanupFramebuffers();
     217    //void cleanupSession() {}
    212218    void cleanupConsoleEventHandlers();
    213219
     
    227233
    228234    UIMachineMenuBar *m_pMenuPool;
     235
     236    /* Screen visibility vector: */
     237    QVector<bool> m_monitorVisibilityVector;
    229238
    230239    /* Frame-buffers vector: */
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.cpp

    r41486 r41487  
    166166{
    167167    /* Show window if we have to: */
    168     if (shouldWeShowWindow())
     168    if (uisession()->isScreenVisible(m_uScreenId))
    169169    {
    170170        /* Make sure the window is placed on valid screen
     
    186186#endif /* Q_WS_MAC */
    187187    }
     188    /* Else hide window: */
     189    else hide();
    188190}
    189191
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp

    r41486 r41487  
    506506{
    507507    /* Show window if we have to: */
    508     if (shouldWeShowWindow())
     508    if (uisession()->isScreenVisible(m_uScreenId))
    509509        show();
     510    /* Else hide window: */
     511    else
     512        hide();
    510513}
    511514
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.cpp

    r41486 r41487  
    200200{
    201201    /* Show window if we have to: */
    202     if (shouldWeShowWindow())
     202    if (uisession()->isScreenVisible(m_uScreenId))
    203203        show();
     204    /* Else hide window: */
     205    else
     206        hide();
    204207}
    205208
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.cpp

    r41486 r41487  
    220220{
    221221    /* Show window if we have to: */
    222     if (shouldWeShowWindow())
     222    if (uisession()->isScreenVisible(m_uScreenId))
    223223    {
    224224        /* Show manually maximized window: */
     
    235235#endif /* Q_WS_MAC */
    236236    }
     237    /* Else hide window: */
     238    else hide();
    237239}
    238240
Note: See TracChangeset for help on using the changeset viewer.

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