From e018794583ad95cdf3e1eb4bdccb71102fa269e9 Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Wed, 3 Dec 2014 17:16:53 +0000 Subject: [PATCH] [EXPLORER] - Handle TWM_DOEXITWINDOWS in CTrayWindow. This message is sent from CDesktopWindow when it handles alt+f4 as an accelerator. - Also handle SC_CLOSE for WM_SYSCOMMAND by calling ExitWindowsDialog. - Fixes pressing alt+f4 in xp - Now we have to make CDesktopWindow send TWM_DOEXITWINDOWS to the tray svn path=/trunk/; revision=65555 --- reactos/base/shell/explorer/precomp.h | 1 + reactos/base/shell/explorer/traywnd.cpp | 36 ++++++++++++++++++++----- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/reactos/base/shell/explorer/precomp.h b/reactos/base/shell/explorer/precomp.h index 16454f80074..5d66bdd9699 100644 --- a/reactos/base/shell/explorer/precomp.h +++ b/reactos/base/shell/explorer/precomp.h @@ -159,6 +159,7 @@ void WINAPI _ShellDDEInit(BOOL bInit); */ #define TWM_OPENSTARTMENU (WM_USER + 260) +#define TWM_DOEXITWINDOWS (WM_USER + 342) extern const GUID IID_IShellDesktopTray; diff --git a/reactos/base/shell/explorer/traywnd.cpp b/reactos/base/shell/explorer/traywnd.cpp index 49d91878fa2..7bc06cbfddc 100644 --- a/reactos/base/shell/explorer/traywnd.cpp +++ b/reactos/base/shell/explorer/traywnd.cpp @@ -2611,6 +2611,32 @@ HandleTrayContextMenu: return TRUE; } + LRESULT DoExitWindows() + { + ExitWindowsDialog(m_hWnd); + return 0; + } + + LRESULT OnDoExitWindows(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) + { + /* + * TWM_DOEXITWINDOWS is send by the CDesktopBrowserr to us to + * show the shutdown dialog + */ + return DoExitWindows(); + } + + LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) + { + if (wParam == SC_CLOSE) + { + return DoExitWindows(); + } + + bHandled = FALSE; + return TRUE; + } + LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { LRESULT Ret = FALSE; @@ -2675,13 +2701,7 @@ HandleTrayContextMenu: case IDM_SHUTDOWN: { - HINSTANCE hShell32; - EXITWINDLG ExitWinDlg; - - hShell32 = GetModuleHandle(TEXT("SHELL32.DLL")); - ExitWinDlg = (EXITWINDLG) GetProcAddress(hShell32, (LPCSTR) 60); - - ExitWinDlg(m_hWnd); + DoExitWindows(); break; } } @@ -2794,6 +2814,7 @@ HandleTrayContextMenu: /*MESSAGE_HANDLER(WM_DESTROY, OnDestroy)*/ MESSAGE_HANDLER(WM_NCHITTEST, OnNcHitTest) MESSAGE_HANDLER(WM_COMMAND, OnCommand) + MESSAGE_HANDLER(WM_SYSCOMMAND, OnSysCommand) MESSAGE_HANDLER(WM_NOTIFY, OnNotify) MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu) MESSAGE_HANDLER(WM_TIMER, OnTimer) @@ -2813,6 +2834,7 @@ HandleTrayContextMenu: MESSAGE_HANDLER(WM_NCMOUSEMOVE, OnMouseMove) MESSAGE_HANDLER(WM_APP_TRAYDESTROY, OnAppTrayDestroy) MESSAGE_HANDLER(TWM_OPENSTARTMENU, OnOpenStartMenu) + MESSAGE_HANDLER(TWM_DOEXITWINDOWS, OnDoExitWindows) ALT_MSG_MAP(1) END_MSG_MAP()