Index: /trunk/src/VBox/Frontends/VirtualBox/VirtualBox1.qrc
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/VirtualBox1.qrc	(revision 52111)
+++ /trunk/src/VBox/Frontends/VirtualBox/VirtualBox1.qrc	(revision 52112)
@@ -59,4 +59,7 @@
         <file alias="diskimage_16px.png">images/diskimage_16px.png</file>
         <file alias="diskimage_32px.png">images/diskimage_32px.png</file>
+        <file alias="display_software_16px.png">images/display_software_16px.png</file>
+        <file alias="display_hardware_16px.png">images/display_hardware_16px.png</file>
+        <file alias="display_hardware_write_16px.png">images/display_hardware_write_16px.png</file>
         <file alias="drag_drop_16px.png">images/drag_drop_16px.png</file>
         <file alias="drag_drop_disabled_16px.png">images/drag_drop_disabled_16px.png</file>
Index: /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp	(revision 52111)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp	(revision 52112)
@@ -1102,4 +1102,5 @@
         case IndicatorType_USB:           strResult = "USB"; break;
         case IndicatorType_SharedFolders: strResult = "SharedFolders"; break;
+        case IndicatorType_Display:       strResult = "Display"; break;
         case IndicatorType_VideoCapture:  strResult = "VideoCapture"; break;
         case IndicatorType_Features:      strResult = "Features"; break;
@@ -1127,4 +1128,5 @@
     keys << "USB";           values << IndicatorType_USB;
     keys << "SharedFolders"; values << IndicatorType_SharedFolders;
+    keys << "Display";       values << IndicatorType_Display;
     keys << "VideoCapture";  values << IndicatorType_VideoCapture;
     keys << "Features";      values << IndicatorType_Features;
@@ -1149,4 +1151,5 @@
         case IndicatorType_USB:           return UIIconPool::iconSet(":/usb_16px.png");
         case IndicatorType_SharedFolders: return UIIconPool::iconSet(":/sf_16px.png");
+        case IndicatorType_Display:       return UIIconPool::iconSet(":/display_software_16px.png");
         case IndicatorType_VideoCapture:  return UIIconPool::iconSet(":/video_capture_16px.png");
         case IndicatorType_Features:      return UIIconPool::iconSet(":/vtx_amdv_16px.png");
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 52111)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 52112)
@@ -490,4 +490,5 @@
     IndicatorType_Network,
     IndicatorType_SharedFolders,
+    IndicatorType_Display,
     IndicatorType_VideoCapture,
     IndicatorType_Features,
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp	(revision 52111)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp	(revision 52112)
@@ -530,4 +530,21 @@
         setName(QApplication::translate("UIActionPool", "&View"));
     }
+};
+
+class UIActionMenuViewPopup : public UIActionMenu
+{
+    Q_OBJECT;
+
+public:
+
+    UIActionMenuViewPopup(UIActionPool *pParent)
+        : UIActionMenu(pParent)
+    {
+        retranslateUi();
+    }
+
+protected:
+
+    void retranslateUi() {}
 };
 
@@ -1469,4 +1486,7 @@
         delete m_pool[UIActionIndexRuntime_Menu_View];
     m_pool[UIActionIndexRuntime_Menu_View] = new UIActionMenuView(this);
+    if (m_pool[UIActionIndexRuntime_Menu_ViewPopup])
+        delete m_pool[UIActionIndexRuntime_Menu_ViewPopup];
+    m_pool[UIActionIndexRuntime_Menu_ViewPopup] = new UIActionMenuViewPopup(this);
     if (m_pool[UIActionIndexRuntime_Menu_StatusBar])
         delete m_pool[UIActionIndexRuntime_Menu_StatusBar];
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h	(revision 52111)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h	(revision 52112)
@@ -49,4 +49,5 @@
     /* 'View' menu actions: */
     UIActionIndexRuntime_Menu_View,
+    UIActionIndexRuntime_Menu_ViewPopup,
     UIActionIndexRuntime_Toggle_Fullscreen,
     UIActionIndexRuntime_Toggle_Seamless,
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h	(revision 52111)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h	(revision 52112)
@@ -158,13 +158,13 @@
     uchar *address() { return m_image.bits(); }
     /** Returns frame-buffer width. */
-    ulong width() { return m_iWidth; }
+    ulong width() const { return m_iWidth; }
     /** Returns frame-buffer height. */
-    ulong height() { return m_iHeight; }
+    ulong height() const { return m_iHeight; }
     /** Returns frame-buffer bits-per-pixel value. */
-    ulong bitsPerPixel() { return m_image.depth(); }
+    ulong bitsPerPixel() const { return m_image.depth(); }
     /** Returns frame-buffer bytes-per-line value. */
-    ulong bytesPerLine() { return m_image.bytesPerLine(); }
+    ulong bytesPerLine() const { return m_image.bytesPerLine(); }
     /** Returns default frame-buffer pixel-format. */
-    ulong pixelFormat() { return FramebufferPixelFormat_FOURCC_RGB; }
+    ulong pixelFormat() const { return FramebufferPixelFormat_FOURCC_RGB; }
 
     /** Locks frame-buffer access. */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.cpp	(revision 52111)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.cpp	(revision 52112)
@@ -558,4 +558,76 @@
 };
 
+/** UISessionStateStatusBarIndicator extension for Runtime UI: Display indicator. */
+class UIIndicatorDisplay : public UISessionStateStatusBarIndicator
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructor, passes @a session to the UISessionStateStatusBarIndicator constructor. */
+    UIIndicatorDisplay(CSession &session)
+        : UISessionStateStatusBarIndicator(session)
+    {
+        /* Assign state-icons: */
+        setStateIcon(KDeviceActivity_Null,    UIIconPool::iconSet(":/display_software_16px.png"));
+        setStateIcon(KDeviceActivity_Idle,    UIIconPool::iconSet(":/display_hardware_16px.png"));
+        setStateIcon(KDeviceActivity_Writing, UIIconPool::iconSet(":/display_hardware_write_16px.png"));
+        /* Translate finally: */
+        retranslateUi();
+    }
+
+private:
+
+    /** Retranslation routine. */
+    void retranslateUi()
+    {
+        updateAppearance();
+    }
+
+    /** Update routine. */
+    void updateAppearance()
+    {
+        /* Get machine: */
+        const CMachine machine = m_session.GetMachine();
+
+        /* Prepare tool-tip: */
+        QString strToolTip = QApplication::translate("UIIndicatorsPool",
+                                                     "<p style='white-space:pre'>"
+                                                     "<nobr>Indicates the activity of the display:</nobr>%1</p>");
+        QString strFullData;
+
+        /* Video Memory: */
+        const ULONG uVRAMSize = machine.GetVRAMSize();
+        const QString strVRAMSize = VBoxGlobal::tr("<nobr>%1 MB</nobr>", "details report").arg(uVRAMSize);
+        strFullData += QString("<br><nobr><b>%1:</b>&nbsp;%2</nobr>")
+                               .arg(VBoxGlobal::tr("Video Memory", "details report"), strVRAMSize);
+
+        /* Monitor Count: */
+        const ULONG uMonitorCount = machine.GetMonitorCount();
+        if (uMonitorCount > 1)
+        {
+            const QString strMonitorCount = QString::number(uMonitorCount);
+            strFullData += QString("<br><nobr><b>%1:</b>&nbsp;%2</nobr>")
+                                   .arg(VBoxGlobal::tr("Screens", "details report"), strMonitorCount);
+        }
+
+        /* 3D acceleration: */
+        const bool fAcceleration3D = machine.GetAccelerate3DEnabled() && vboxGlobal().is3DAvailable();
+        if (fAcceleration3D)
+        {
+            const QString strAcceleration3D = fAcceleration3D
+                ? VBoxGlobal::tr("Enabled", "details report (3D Acceleration)")
+                : VBoxGlobal::tr("Disabled", "details report (3D Acceleration)");
+            strFullData += QString("<br><nobr><b>%1:</b>&nbsp;%2</nobr>")
+                                   .arg(VBoxGlobal::tr("3D Acceleration", "details report"), strAcceleration3D);
+        }
+
+        /* Update tool-tip: */
+        setToolTip(strToolTip.arg(strFullData));
+        /* Set initial indicator state: */
+        setState(fAcceleration3D ? KDeviceActivity_Idle : KDeviceActivity_Null);
+    }
+};
+
 /** UISessionStateStatusBarIndicator extension for Runtime UI: Video-capture indicator. */
 class UIIndicatorVideoCapture : public UISessionStateStatusBarIndicator
@@ -981,4 +1053,6 @@
     if (m_pool.contains(IndicatorType_SharedFolders))
         updateIndicatorStateForDevice(m_pool.value(IndicatorType_SharedFolders), KDeviceType_SharedFolder);
+    if (m_pool.contains(IndicatorType_Display))
+        updateIndicatorStateForDevice(m_pool.value(IndicatorType_Display),       KDeviceType_Graphics3D);
 }
 
@@ -1118,4 +1192,5 @@
                 case IndicatorType_Network:           m_pool[indicatorType] = new UIIndicatorNetwork(m_session);       break;
                 case IndicatorType_SharedFolders:     m_pool[indicatorType] = new UIIndicatorSharedFolders(m_session); break;
+                case IndicatorType_Display:           m_pool[indicatorType] = new UIIndicatorDisplay(m_session);       break;
                 case IndicatorType_VideoCapture:      m_pool[indicatorType] = new UIIndicatorVideoCapture(m_session);  break;
                 case IndicatorType_Features:          m_pool[indicatorType] = new UIIndicatorFeatures(m_session);      break;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineDefs.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineDefs.h	(revision 52111)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineDefs.h	(revision 52112)
@@ -35,7 +35,8 @@
     UIVisualElement_USBStuff              = RT_BIT(7),
     UIVisualElement_SharedFolderStuff     = RT_BIT(8),
-    UIVisualElement_VideoCapture          = RT_BIT(9),
-    UIVisualElement_FeaturesStuff         = RT_BIT(10),
-    UIVisualElement_MiniToolBar           = RT_BIT(11),
+    UIVisualElement_Display               = RT_BIT(9),
+    UIVisualElement_VideoCapture          = RT_BIT(10),
+    UIVisualElement_FeaturesStuff         = RT_BIT(11),
+    UIVisualElement_MiniToolBar           = RT_BIT(12),
     UIVisualElement_AllStuff              = 0xFFFF
 };
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 52111)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 52112)
@@ -840,4 +840,5 @@
     m_pRunningActions->addAction(gActionPool->action(UIActionIndexRuntime_Simple_Reset));
     m_pRunningActions->addAction(gActionPool->action(UIActionIndexRuntime_Simple_Shutdown));
+    m_pRunningActions->addAction(gActionPool->action(UIActionIndexRuntime_Menu_ViewPopup));
     m_pRunningActions->addAction(gActionPool->action(UIActionIndexRuntime_Toggle_Fullscreen));
     m_pRunningActions->addAction(gActionPool->action(UIActionIndexRuntime_Toggle_Seamless));
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.cpp	(revision 52111)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.cpp	(revision 52112)
@@ -28,7 +28,12 @@
 #include "UIStatusBarEditorWindow.h"
 #include "UIExtraDataManager.h"
+#include "UIFrameBuffer.h"
 #ifdef Q_WS_MAC
 #include "VBoxUtils.h"
 #endif /* Q_WS_MAC */
+
+/* COM includes: */
+#include "CConsole.h"
+#include "CDisplay.h"
 
 UIMachineLogicNormal::UIMachineLogicNormal(QObject *pParent, UISession *pSession)
@@ -119,4 +124,108 @@
 }
 
+void UIMachineLogicNormal::sltPrepareMenuViewPopup()
+{
+    /* Make sure sender is valid: */
+    QMenu *pMenu = qobject_cast<QMenu*>(sender());
+    AssertMsgReturnVoid(pMenu, ("This slot should be called only on View popup-menu show!\n"));
+
+    /* Clear contents: */
+    pMenu->clear();
+
+    /* Add default contents: */
+    pMenu->addAction(gActionPool->action(UIActionIndexRuntime_Simple_AdjustWindow));
+    pMenu->addAction(gActionPool->action(UIActionIndexRuntime_Toggle_GuestAutoresize));
+    pMenu->addSeparator();
+
+    /* Check if guest additions are enabled: */
+    const bool fGAEnabled = uisession()->isGuestAdditionsActive() &&
+                            uisession()->isGuestSupportsGraphics();
+
+    /* For each the machine-window: */
+    foreach (UIMachineWindow *pMachineWindow, machineWindows())
+    {
+        /* Add 'Virtual Screen %1' menu: */
+        const int iScreenID = pMachineWindow->screenId();
+        QMenu *pSubMenu = pMenu->addMenu(QApplication::translate("UIMultiScreenLayout",
+                                                                 "Virtual Screen %1").arg(iScreenID + 1));
+        pSubMenu->setProperty("Screen ID", iScreenID);
+        pSubMenu->setEnabled(fGAEnabled);
+        connect(pSubMenu, SIGNAL(aboutToShow()), this, SLOT(sltPrepareMenuViewVirtualScreen()));
+    }
+}
+
+void UIMachineLogicNormal::sltPrepareMenuViewVirtualScreen()
+{
+    /* Make sure sender is valid: */
+    QMenu *pMenu = qobject_cast<QMenu*>(sender());
+    AssertMsgReturnVoid(pMenu, ("This slot should be called only on 'Virtual Screen %1' menu show!\n"));
+
+    /* Clear contents: */
+    pMenu->clear();
+
+    /* Prepare new contents: */
+    const QList<QSize> sizes = QList<QSize>()
+                               << QSize(640, 480)
+                               << QSize(800, 600)
+                               << QSize(1024, 768)
+                               << QSize(1280, 720)
+                               << QSize(1280, 800)
+                               << QSize(1366, 768)
+                               << QSize(1440, 900)
+                               << QSize(1600, 900)
+                               << QSize(1680, 1050)
+                               << QSize(1920, 1080)
+                               << QSize(1920, 1200);
+
+    /* Get corresponding screen ID and frame-buffer: */
+    const int iScreenID = pMenu->property("Screen ID").toInt();
+    const UIFrameBuffer *pFrameBuffer = uisession()->frameBuffer(iScreenID);
+
+    /* Create exclusive action-group: */
+    QActionGroup *pActionGroup = new QActionGroup(pMenu);
+    AssertPtrReturnVoid(pActionGroup);
+    {
+        /* Configure exclusive action-group: */
+        pActionGroup->setExclusive(true);
+        /* For every available size: */
+        foreach (const QSize &size, sizes)
+        {
+            /* Create exclusive action: */
+            QAction *pAction = pActionGroup->addAction(UIActionPoolRuntime::tr("Resize to %1x%2", "Virtual Screen")
+                                                                               .arg(size.width()).arg(size.height()));
+            AssertPtrReturnVoid(pAction);
+            {
+                /* Configure exclusive action: */
+                pAction->setProperty("Screen ID", iScreenID);
+                pAction->setProperty("Requested Size", size);
+                pAction->setCheckable(true);
+                if (pFrameBuffer->width() == size.width() &&
+                    pFrameBuffer->height() == size.height())
+                {
+                    pAction->setChecked(true);
+                }
+                /* Insert group actions into menu: */
+                pMenu->addActions(pActionGroup->actions());
+            }
+        }
+        /* Install listener for exclusive action-group: */
+        connect(pActionGroup, SIGNAL(triggered(QAction*)),
+                this, SLOT(sltHandleActionTriggerViewVirtualScreen(QAction*)));
+    }
+}
+
+void UIMachineLogicNormal::sltHandleActionTriggerViewVirtualScreen(QAction *pAction)
+{
+    /* Make sure sender is valid: */
+    AssertMsgReturnVoid(pAction, ("This slot should be called only on 'Virtual Screen %1' menu action trigger!\n"));
+
+    /* Resize guest to required size: */
+    const int iScreenID = pAction->property("Screen ID").toInt();
+    const QSize size = pAction->property("Requested Size").toSize();
+    CDisplay display = session().GetConsole().GetDisplay();
+    display.SetVideoModeHint(iScreenID, uisession()->isScreenVisible(iScreenID),
+                             false, 0, 0, size.width(), size.height(), 0);
+}
+
 void UIMachineLogicNormal::sltPrepareHardDisksMenu()
 {
@@ -166,4 +275,6 @@
 
     /* "View" actions connections: */
+    connect(gActionPool->action(UIActionIndexRuntime_Menu_ViewPopup)->menu(), SIGNAL(aboutToShow()),
+            this, SLOT(sltPrepareMenuViewPopup()));
     connect(gActionPool->action(UIActionIndexRuntime_Toggle_Fullscreen), SIGNAL(triggered(bool)),
             this, SLOT(sltChangeVisualStateToFullscreen()));
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.h	(revision 52111)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.h	(revision 52112)
@@ -43,4 +43,7 @@
     void sltStatusBarSettingsClosed();
     void sltToggleStatusBar();
+    void sltPrepareMenuViewPopup();
+    void sltPrepareMenuViewVirtualScreen();
+    void sltHandleActionTriggerViewVirtualScreen(QAction *pAction);
 
     /* Devices menu functionality: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp	(revision 52111)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp	(revision 52112)
@@ -152,4 +152,5 @@
         case IndicatorType_Network:       pAction = gActionPool->action(UIActionIndexRuntime_Menu_Network);          break;
         case IndicatorType_SharedFolders: pAction = gActionPool->action(UIActionIndexRuntime_Menu_SharedFolders);    break;
+        case IndicatorType_Display:       pAction = gActionPool->action(UIActionIndexRuntime_Menu_ViewPopup);          break;
         case IndicatorType_VideoCapture:  pAction = gActionPool->action(UIActionIndexRuntime_Menu_VideoCapture);     break;
         case IndicatorType_Mouse:         pAction = gActionPool->action(UIActionIndexRuntime_Menu_MouseIntegration); break;
@@ -488,4 +489,6 @@
     if (iElement & UIVisualElement_SharedFolderStuff)
         m_pIndicatorsPool->updateAppearance(IndicatorType_SharedFolders);
+    if (iElement & UIVisualElement_Display)
+        m_pIndicatorsPool->updateAppearance(IndicatorType_Display);
     if (iElement & UIVisualElement_VideoCapture)
         m_pIndicatorsPool->updateAppearance(IndicatorType_VideoCapture);
