Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxProblemReporter.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxProblemReporter.cpp	(revision 27027)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxProblemReporter.cpp	(revision 27028)
@@ -1027,4 +1027,16 @@
 }
 
+int VBoxProblemReporter::cannotEnterSeamlessMode()
+{
+    return message(mainMachineWindowShown(), Error,
+             tr ("<p>Can not switch the guest display to seamless mode. You "
+                 "have more virtual screens configured than physical screens are "
+                 "attached to your host.</p><p>Please either lower the virtual "
+                 "screens in your VM configuration or attach additional screens "
+                 "to your host.</p>"),
+             0, /* aAutoConfirmId */
+             QIMessageBox::Ok | QIMessageBox::Default);
+}
+
 bool VBoxProblemReporter::confirmMachineDeletion (const CMachine &machine)
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxProblemReporter.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxProblemReporter.h	(revision 27027)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxProblemReporter.h	(revision 27028)
@@ -228,4 +228,5 @@
 
     int cannotEnterFullscreenMode();
+    int cannotEnterSeamlessMode();
 
     bool confirmMachineDeletion (const CMachine &machine);
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.cpp	(revision 27027)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.cpp	(revision 27028)
@@ -23,5 +23,4 @@
 
 /* Global includes */
-#include <QMenu>
 #include <QDesktopWidget>
 
@@ -35,5 +34,4 @@
 #include "UIMachineLogicFullscreen.h"
 #include "UIMachineWindow.h"
-#include "UIMachineView.h"
 
 #include "VBoxUtils.h"
@@ -53,5 +51,5 @@
 {
     /* Cleanup machine window: */
-    cleanupMachineWindow();
+    cleanupMachineWindows();
 
     /* Cleanup action related stuff */
@@ -89,5 +87,5 @@
         ULONG guestBpp = console.GetDisplay().GetBitsPerPixel();
         ULONG64 usedBits = 0;
-        for (int i = 0; i < cGuestScreens; ++i)
+        for (int i = 0; i < cGuestScreens; ++ i)
         {
             // TODO_NEW_CORE: really take the screen geometry into account the
@@ -153,48 +151,11 @@
 }
 
-void UIMachineLogicFullscreen::sltPrepareNetworkAdaptersMenu()
-{
-    QMenu *menu = qobject_cast<QMenu*>(sender());
-    AssertMsg(menu, ("This slot should be called only on Network Adapters menu show!\n"));
-    menu->clear();
-    menu->addAction(actionsPool()->action(UIActionIndex_Simple_NetworkAdaptersDialog));
-}
-
-void UIMachineLogicFullscreen::sltPrepareSharedFoldersMenu()
-{
-    QMenu *menu = qobject_cast<QMenu*>(sender());
-    AssertMsg(menu, ("This slot should be called only on Shared Folders menu show!\n"));
-    menu->clear();
-    menu->addAction(actionsPool()->action(UIActionIndex_Simple_SharedFoldersDialog));
-}
-
-void UIMachineLogicFullscreen::sltPrepareMouseIntegrationMenu()
-{
-    QMenu *menu = qobject_cast<QMenu*>(sender());
-    AssertMsg(menu, ("This slot should be called only on Mouse Integration Menu show!\n"));
-    menu->clear();
-    menu->addAction(actionsPool()->action(UIActionIndex_Toggle_MouseIntegration));
-}
-
 void UIMachineLogicFullscreen::prepareActionGroups()
 {
+    /* Base class action groups: */
     UIMachineLogic::prepareActionGroups();
 
     /* Adjust window isn't allowed in fullscreen */
     actionsPool()->action(UIActionIndex_Simple_AdjustWindow)->setEnabled(false);
-}
-
-void UIMachineLogicFullscreen::prepareActionConnections()
-{
-    /* Base class connections: */
-    UIMachineLogic::prepareActionConnections();
-
-    /* This class connections: */
-    connect(actionsPool()->action(UIActionIndex_Menu_NetworkAdapters)->menu(), SIGNAL(aboutToShow()),
-            this, SLOT(sltPrepareNetworkAdaptersMenu()));
-    connect(actionsPool()->action(UIActionIndex_Menu_SharedFolders)->menu(), SIGNAL(aboutToShow()),
-            this, SLOT(sltPrepareSharedFoldersMenu()));
-    connect(actionsPool()->action(UIActionIndex_Menu_MouseIntegration)->menu(), SIGNAL(aboutToShow()),
-            this, SLOT(sltPrepareMouseIntegrationMenu()));
 }
 
@@ -218,4 +179,5 @@
 #endif /* Q_WS_MAC */
 
+#if 0 // TODO: Add seamless multi-monitor support!
     /* Create machine window(s): */
     for (ulong uScreenId = 0; uScreenId < uMonitorCount; ++ uScreenId)
@@ -224,4 +186,8 @@
     for (ulong uScreenId = uMonitorCount; uScreenId > 0; -- uScreenId)
         machineWindows()[uScreenId - 1]->machineWindow()->raise();
+#else
+    /* Create primary machine window: */
+    addMachineWindow(UIMachineWindow::create(this, visualStateType(), 0 /* primary only */));
+#endif
 
     /* Notify others about machine window(s) created: */
@@ -310,5 +276,5 @@
 }
 
-void UIMachineLogicFullscreen::cleanupMachineWindow()
+void UIMachineLogicFullscreen::cleanupMachineWindows()
 {
     /* Do not cleanup machine window if it is not present: */
@@ -316,7 +282,12 @@
         return;
 
-    /* Cleanup machine window: */
+#if 0 // TODO: Add seamless multi-monitor support!
+    /* Cleanup normal machine window: */
     foreach (UIMachineWindow *pMachineWindow, machineWindows())
         UIMachineWindow::destroy(pMachineWindow);
+#else
+    /* Create machine window(s): */
+    UIMachineWindow::destroy(machineWindows()[0] /* primary only */);
+#endif
 
 #ifdef Q_WS_MAC
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.h	(revision 27027)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.h	(revision 27028)
@@ -45,21 +45,12 @@
     void initialize();
 
-private slots:
-
-    /* Windowed mode funtionality: */
-    void sltPrepareNetworkAdaptersMenu();
-    void sltPrepareSharedFoldersMenu();
-    void sltPrepareMouseIntegrationMenu();
-
 private:
 
     /* Prepare helpers: */
     void prepareActionGroups();
-    void prepareActionConnections();
     void prepareMachineWindows();
 
     /* Cleanup helpers: */
-    void cleanupMachineWindow();
-    void cleanupActionConnections() {}
+    void cleanupMachineWindows();
     void cleanupActionGroups();
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.cpp	(revision 27027)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.cpp	(revision 27028)
@@ -22,4 +22,7 @@
  */
 
+/* Global includes */
+#include <QDesktopWidget>
+
 /* Local includes */
 #include "COMDefs.h"
@@ -28,4 +31,5 @@
 
 #include "UISession.h"
+#include "UIActionsPool.h"
 #include "UIMachineLogicSeamless.h"
 #include "UIMachineWindow.h"
@@ -42,4 +46,59 @@
     /* Cleanup normal machine window: */
     cleanupMachineWindows();
+}
+
+bool UIMachineLogicSeamless::checkAvailability()
+{
+    /* Temporary get a machine object */
+    const CMachine &machine = uisession()->session().GetMachine();
+    const CConsole &console = uisession()->session().GetConsole();
+
+#if (QT_VERSION >= 0x040600)
+    int cHostScreens = QApplication::desktop()->screenCount();
+#else /* (QT_VERSION >= 0x040600) */
+    int cHostScreens = QApplication::desktop()->numScreens();
+#endif /* !(QT_VERSION >= 0x040600) */
+
+    int cGuestScreens = machine.GetMonitorCount();
+    /* Check that there are enough physical screens are connected */
+    if (cHostScreens < cGuestScreens)
+    {
+        vboxProblem().cannotEnterSeamlessMode();
+        return false;
+    }
+
+    // TODO_NEW_CORE: this is how it looked in the old version
+    // bool VBoxConsoleView::isAutoresizeGuestActive() { return mGuestSupportsGraphics && mAutoresizeGuest; }
+//    if (uisession()->session().GetConsole().isAutoresizeGuestActive())
+    if (uisession()->isGuestAdditionsActive())
+    {
+        ULONG64 availBits = machine.GetVRAMSize() /* VRAM */
+                          * _1M /* MB to bytes */
+                          * 8; /* to bits */
+        ULONG guestBpp = console.GetDisplay().GetBitsPerPixel();
+        ULONG64 usedBits = 0;
+        for (int i = 0; i < cGuestScreens; ++ i)
+        {
+            // TODO_NEW_CORE: really take the screen geometry into account the
+            // different fb will be displayed. */
+            QRect screen = QApplication::desktop()->availableGeometry(i);
+            usedBits += screen.width() /* display width */
+                      * screen.height() /* display height */
+                      * guestBpp
+                      + _1M * 8; /* current cache per screen - may be changed in future */
+        }
+        usedBits += 4096 * 8; /* adapter info */
+
+        if (availBits < usedBits)
+        {
+//          vboxProblem().cannotEnterSeamlessMode(screen.width(), screen.height(), guestBpp,
+//                                                (((usedBits + 7) / 8 + _1M - 1) / _1M) * _1M);
+            vboxProblem().cannotEnterSeamlessMode(0, 0, guestBpp,
+                                                  (((usedBits + 7) / 8 + _1M - 1) / _1M) * _1M);
+            return false;
+        }
+    }
+
+    return true;
 }
 
@@ -69,4 +128,13 @@
         sltMouseCapabilityChanged();
     }
+}
+
+void UIMachineLogicSeamless::prepareActionGroups()
+{
+    /* Base class action groups: */
+    UIMachineLogic::prepareActionGroups();
+
+    /* Adjust window isn't allowed in seamless */
+    actionsPool()->action(UIActionIndex_Simple_AdjustWindow)->setEnabled(false);
 }
 
@@ -203,2 +271,8 @@
 }
 
+void UIMachineLogicSeamless::cleanupActionGroups()
+{
+    /* Reenable adjust window */
+    actionsPool()->action(UIActionIndex_Simple_AdjustWindow)->setEnabled(true);
+}
+
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.h	(revision 27027)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.h	(revision 27028)
@@ -42,4 +42,5 @@
     virtual ~UIMachineLogicSeamless();
 
+    bool checkAvailability();
     void initialize();
 
@@ -47,8 +48,10 @@
 
     /* Prepare helpers: */
+    void prepareActionGroups();
     void prepareMachineWindows();
 
     /* Cleanup helpers: */
     void cleanupMachineWindows();
+    void cleanupActionGroups();
 
     /* Friend classes: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineViewSeamless.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineViewSeamless.h	(revision 27027)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineViewSeamless.h	(revision 27028)
@@ -33,5 +33,5 @@
 protected:
 
-    /* Normal machine view constructor/destructor: */
+    /* Seamless machine view constructor/destructor: */
     UIMachineViewSeamless(  UIMachineWindow *pMachineWindow
                           , VBoxDefs::RenderMode renderMode
