[WIN32K:NTUSER] Make NtUserResolveDesktop() and IntResolveDesktop() work in a more...
[reactos.git] / win32ss / user / winsrv / consrv / frontends / gui / guiterm.c
index e371ea4..258b1e2 100644 (file)
@@ -96,8 +96,6 @@ InvalidateCell(PGUI_CONSOLE_DATA GuiData,
  *                        GUI Terminal Initialization                         *
  ******************************************************************************/
 
-VOID
-SwitchFullScreen(PGUI_CONSOLE_DATA GuiData, BOOL FullScreen);
 VOID
 CreateSysMenu(HWND hWnd);
 
@@ -203,9 +201,7 @@ GuiConsoleInputThread(PVOID Param)
                     if (GuiData->GuiInfo.FullScreen) SwitchFullScreen(GuiData, TRUE);
 
                     DPRINT("PM_CREATE_CONSOLE -- showing window\n");
-                    // ShowWindow(NewWindow, (int)GuiData->GuiInfo.ShowWindow);
                     ShowWindowAsync(NewWindow, (int)GuiData->GuiInfo.ShowWindow);
-                    DPRINT("Window showed\n");
                 }
                 else
                 {
@@ -328,7 +324,7 @@ GuiInit(IN PCONSOLE_INIT_INFO ConsoleInitInfo,
 
     hDesk = NtUserResolveDesktop(ConsoleLeaderProcessHandle,
                                  &DesktopPath,
-                                 0,
+                                 FALSE,
                                  &hWinSta);
     DPRINT("NtUserResolveDesktop(DesktopPath = '%wZ') returned hDesk = 0x%p; hWinSta = 0x%p\n",
            &DesktopPath, hDesk, hWinSta);
@@ -1174,6 +1170,7 @@ GuiLoadFrontEnd(IN OUT PFRONTEND FrontEnd,
 {
     PCONSOLE_START_INFO ConsoleStartInfo;
     PGUI_INIT_INFO GuiInitInfo;
+    USEROBJECTFLAGS UserObjectFlags;
 
     if (FrontEnd == NULL || ConsoleInfo == NULL || ConsoleInitInfo == NULL)
         return STATUS_INVALID_PARAMETER;
@@ -1194,6 +1191,21 @@ GuiLoadFrontEnd(IN OUT PFRONTEND FrontEnd,
         return STATUS_UNSUCCESSFUL;
     }
 
+    GuiInitInfo->IsWindowVisible = ConsoleInitInfo->IsWindowVisible;
+    if (GuiInitInfo->IsWindowVisible)
+    {
+        /* Don't show the console if the window station is not interactive */
+        if (GetUserObjectInformationW(GuiInitInfo->WinSta,
+                                      UOI_FLAGS,
+                                      &UserObjectFlags,
+                                      sizeof(UserObjectFlags),
+                                      NULL))
+        {
+            if (!(UserObjectFlags.dwFlags & WSF_VISIBLE))
+                GuiInitInfo->IsWindowVisible = FALSE;
+        }
+    }
+
     /*
      * Load terminal settings
      */
@@ -1209,7 +1221,7 @@ GuiLoadFrontEnd(IN OUT PFRONTEND FrontEnd,
 
     GuiInitInfo->TermInfo.ShowWindow = SW_SHOWNORMAL;
 
-    if (ConsoleInitInfo->IsWindowVisible)
+    if (GuiInitInfo->IsWindowVisible)
     {
         /* 2. Load the remaining console settings via the registry */
         if ((ConsoleStartInfo->dwStartupFlags & STARTF_TITLEISLINKNAME) == 0)
@@ -1256,7 +1268,6 @@ GuiLoadFrontEnd(IN OUT PFRONTEND FrontEnd,
 
     // Display
     GuiInitInfo->TermInfo.FullScreen   = ConsoleInfo->FullScreen;
-    // GuiInitInfo->TermInfo.ShowWindow;
     GuiInitInfo->TermInfo.AutoPosition = ConsoleInfo->AutoPosition;
     GuiInitInfo->TermInfo.WindowOrigin = ConsoleInfo->WindowPosition;
 
@@ -1273,8 +1284,6 @@ GuiLoadFrontEnd(IN OUT PFRONTEND FrontEnd,
 
     // ASSERT(GuiInitInfo->hIcon && GuiInitInfo->hIconSm);
 
-    GuiInitInfo->IsWindowVisible = ConsoleInitInfo->IsWindowVisible;
-
     /* Finally, initialize the frontend structure */
     FrontEnd->Vtbl     = &GuiVtbl;
     FrontEnd->Context  = NULL;