Skip to content

Commit

Permalink
[RAPPS] Hide the main window during active download/install if the us…
Browse files Browse the repository at this point in the history
…er closes it (reactos#7014)
  • Loading branch information
whindsaks authored Sep 26, 2024
1 parent 2f83e6a commit 053939e
Show file tree
Hide file tree
Showing 7 changed files with 55 additions and 2 deletions.
17 changes: 15 additions & 2 deletions base/applications/rapps/gui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -318,13 +318,13 @@ CMainWindow::ProcessWindowMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lPa
case WM_CREATE:
if (!InitControls())
::PostMessageW(hwnd, WM_CLOSE, 0, 0);
::PostMessageW(hwnd, DM_REPOSITION, 0, 0);
break;

case WM_DESTROY:
{
ShowWindow(SW_HIDE);
hMainWnd = NULL;
SaveSettings(hwnd, &SettingsInfo);

FreeLogs();

delete m_ClientPanel;
Expand All @@ -333,6 +333,19 @@ CMainWindow::ProcessWindowMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lPa
return 0;
}

case WM_CLOSE:
ShowWindow(SW_HIDE);
return g_Busy;

case WM_NOTIFY_OPERATIONCOMPLETED:
if (!g_Busy && !IsWindowVisible())
SendMessage(WM_CLOSE, 0, 0);
break;

case DM_REPOSITION:
EmulateDialogReposition(hwnd); // We are not a real dialog, we need help from a real one
break;

case WM_COMMAND:
OnCommand(wParam, lParam);
break;
Expand Down
2 changes: 2 additions & 0 deletions base/applications/rapps/include/misc.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ VOID
CopyTextToClipboard(LPCWSTR lpszText);
VOID
ShowPopupMenuEx(HWND hwnd, HWND hwndOwner, UINT MenuID, UINT DefaultItem, POINT *Point = NULL);
VOID
EmulateDialogReposition(HWND hwnd);
BOOL
StartProcess(const CStringW &Path, BOOL Wait);
BOOL
Expand Down
4 changes: 4 additions & 0 deletions base/applications/rapps/include/rapps.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,8 @@
#include "misc.h"
#include "configparser.h"

extern LONG g_Busy;

#define WM_NOTIFY_OPERATIONCOMPLETED (WM_APP + 0)

#endif /* _RAPPS_H */
7 changes: 7 additions & 0 deletions base/applications/rapps/loaddlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,7 @@ CDownloadManager::DownloadDlgProc(HWND Dlg, UINT uMsg, WPARAM wParam, LPARAM lPa
{
case WM_INITDIALOG:
{
g_Busy++;
HICON hIconSm, hIconBg;
CStringW szTempCaption;

Expand Down Expand Up @@ -557,6 +558,12 @@ CDownloadManager::DownloadDlgProc(HWND Dlg, UINT uMsg, WPARAM wParam, LPARAM lPa
}
return TRUE;

case WM_DESTROY:
g_Busy--;
if (hMainWnd)
PostMessage(hMainWnd, WM_NOTIFY_OPERATIONCOMPLETED, 0, 0);
return FALSE;

default:
return FALSE;
}
Expand Down
25 changes: 25 additions & 0 deletions base/applications/rapps/misc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,31 @@ CopyTextToClipboard(LPCWSTR lpszText)
CloseClipboard();
}

static INT_PTR CALLBACK
NothingDlgProc(HWND hDlg, UINT uMsg, WPARAM, LPARAM)
{
return uMsg == WM_CLOSE ? DestroyWindow(hDlg) : FALSE;
}

VOID
EmulateDialogReposition(HWND hwnd)
{
static const DWORD DlgTmpl[] = { WS_POPUP | WS_CAPTION | WS_SYSMENU, 0, 0, 0, 0, 0 };
HWND hDlg = CreateDialogIndirectW(NULL, (LPDLGTEMPLATE)DlgTmpl, NULL, NothingDlgProc);
if (hDlg)
{
RECT r;
GetWindowRect(hwnd, &r);
if (SetWindowPos(hDlg, hDlg, r.left, r.top, r.right - r.left, r.bottom - r.top, SWP_NOZORDER | SWP_NOACTIVATE))
{
SendMessage(hDlg, DM_REPOSITION, 0, 0);
if (GetWindowRect(hDlg, &r))
SetWindowPos(hwnd, hwnd, r.left, r.top, r.right - r.left, r.bottom - r.top, SWP_NOZORDER | SWP_NOACTIVATE);
}
SendMessage(hDlg, WM_CLOSE, 0, 0);
}
}

VOID
ShowPopupMenuEx(HWND hwnd, HWND hwndOwner, UINT MenuID, UINT DefaultItem, POINT *Point)
{
Expand Down
1 change: 1 addition & 0 deletions base/applications/rapps/unattended.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,7 @@ ParseCmdAndExecute(LPWSTR lpCmdLine, BOOL bIsFirstLaunch, int nCmdShow)
if (hWindow)
{
/* Activate the window in the other instance */
ShowWindow(hWindow, SW_SHOW);
SwitchToThisWindow(hWindow, TRUE);
if (bAppwizMode)
PostMessage(hWindow, WM_COMMAND, ID_ACTIVATE_APPWIZ, 0);
Expand Down
1 change: 1 addition & 0 deletions base/applications/rapps/winmain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <conutils.h>

LPCWSTR szWindowClass = L"ROSAPPMGR2";
LONG g_Busy = 0;

HWND hMainWnd;
HINSTANCE hInst;
Expand Down

0 comments on commit 053939e

Please sign in to comment.