- make Shell Hook Messages really work in Windows
- comments for SHELL32's RegisterShellHook()
Modified: trunk/reactos/subsys/system/explorer/desktop/desktop.cpp
Modified: trunk/reactos/subsys/system/explorer/shell/mainframe.cpp
Modified: trunk/reactos/subsys/system/explorer/taskbar/startmenu.cpp
Modified: trunk/reactos/subsys/system/explorer/taskbar/taskbar.cpp
Modified: trunk/reactos/subsys/system/explorer/taskbar/taskbar.h
Modified: trunk/reactos/subsys/system/explorer/taskbar/traynotify.cpp
Modified: trunk/reactos/subsys/system/explorer/utility/utility.cpp
Modified: trunk/reactos/subsys/system/explorer/utility/utility.h
Modified: trunk/reactos/subsys/system/explorer/utility/window.cpp
Modified: trunk/reactos/subsys/system/explorer/utility/window.h

Modified: trunk/reactos/subsys/system/explorer/desktop/desktop.cpp
--- trunk/reactos/subsys/system/explorer/desktop/desktop.cpp	2005-03-27 19:57:20 UTC (rev 14353)
+++ trunk/reactos/subsys/system/explorer/desktop/desktop.cpp	2005-03-27 19:57:26 UTC (rev 14354)
@@ -436,7 +436,7 @@
 	  case WM_DESTROY:
 
 		///@todo use IShellBrowser::GetViewStateStream() and _pShellView->SaveViewState() to store view state
-		
+
 		if (SetShellWindow)
 			SetShellWindow(0);
 		break;

Modified: trunk/reactos/subsys/system/explorer/shell/mainframe.cpp
--- trunk/reactos/subsys/system/explorer/shell/mainframe.cpp	2005-03-27 19:57:20 UTC (rev 14353)
+++ trunk/reactos/subsys/system/explorer/shell/mainframe.cpp	2005-03-27 19:57:26 UTC (rev 14354)
@@ -736,7 +736,6 @@
 	extraBtns.idCommand = ID_WEB_WINDOW;
 	SendMessage(_hextrabar, TB_INSERTBUTTON, INT_MAX, (LPARAM)&extraBtns);
 
-#define	W_VER_NT 0
 	if ((HIWORD(GetVersion())>>14) == W_VER_NT) {
 		 // insert NT object namespace button
 		extraBtns.iString = SendMessage(_hextrabar, TB_ADDSTRING, 0, (LPARAM)TEXT("NT Obj\0"));

Modified: trunk/reactos/subsys/system/explorer/taskbar/startmenu.cpp
--- trunk/reactos/subsys/system/explorer/taskbar/startmenu.cpp	2005-03-27 19:57:20 UTC (rev 14353)
+++ trunk/reactos/subsys/system/explorer/taskbar/startmenu.cpp	2005-03-27 19:57:26 UTC (rev 14354)
@@ -1952,7 +1952,6 @@
 	 // Show "Run..." dialog
 	if (RunFileDlg) {
 #ifndef _ROS_ /* FIXME: our shell32 always expects Ansi strings */
-#define	W_VER_NT 0
 		if ((HIWORD(GetVersion())>>14) == W_VER_NT) {
 			WCHAR wTitle[40], wText[256];
 

Modified: trunk/reactos/subsys/system/explorer/taskbar/taskbar.cpp
--- trunk/reactos/subsys/system/explorer/taskbar/taskbar.cpp	2005-03-27 19:57:20 UTC (rev 14353)
+++ trunk/reactos/subsys/system/explorer/taskbar/taskbar.cpp	2005-03-27 19:57:26 UTC (rev 14354)
@@ -36,7 +36,17 @@
 DynamicFct<BOOL (WINAPI*)(HWND hwnd)> g_RegisterShellHookWindow(TEXT("user32"), "RegisterShellHookWindow");
 DynamicFct<BOOL (WINAPI*)(HWND hwnd)> g_DeregisterShellHookWindow(TEXT("user32"), "DeregisterShellHookWindow");
 
+/*
+DynamicFct<BOOL (WINAPI*)(HWND hWnd, DWORD dwType)> g_RegisterShellHook(TEXT("shell32"), (LPCSTR)0xb5);
 
+ // constants for RegisterShellHook()
+#define RSH_UNREGISTER			0
+#define RSH_REGISTER			1
+#define RSH_REGISTER_PROGMAN	2
+#define RSH_REGISTER_TASKMAN	3
+*/
+
+
 TaskBarEntry::TaskBarEntry()
 {
 	_id = 0;
@@ -59,13 +69,30 @@
 
 TaskBar::TaskBar(HWND hwnd)
  :	super(hwnd),
-	WM_SHELLHOOK(RegisterWindowMessage(TEXT("SHELLHOOK")))
+	WM_SHELLHOOK(RegisterWindowMessage(WINMSG_SHELLHOOK))
 {
 	_last_btn_width = 0;
+
+	_mmMetrics_org.cbSize = sizeof(MINIMIZEDMETRICS);
+
+	SystemParametersInfo(SPI_GETMINIMIZEDMETRICS, sizeof(_mmMetrics_org), &_mmMetrics_org, 0);
+
+	 // configure the window manager to hide windows when they are minimized
+	 // This is neccessary to enable shell hook messages.
+	if (!(_mmMetrics_org.iArrange & ARW_HIDE)) {
+		MINIMIZEDMETRICS _mmMetrics_new = _mmMetrics_org;
+
+		_mmMetrics_new.iArrange |= ARW_HIDE;
+
+		SystemParametersInfo(SPI_SETMINIMIZEDMETRICS, sizeof(_mmMetrics_new), &_mmMetrics_new, 0);
+	}
 }
 
 TaskBar::~TaskBar()
 {
+//	if (g_RegisterShellHook)
+//		(*g_RegisterShellHook)(_hwnd, RSH_UNREGISTER);
+
 	if (g_DeregisterShellHookWindow)
 		(*g_DeregisterShellHookWindow)(_hwnd);
 	else
@@ -73,6 +100,8 @@
 
 	if (g_SetTaskmanWindow)
 		(*g_SetTaskmanWindow)(0);
+
+	SystemParametersInfo(SPI_GETMINIMIZEDMETRICS, sizeof(_mmMetrics_org), &_mmMetrics_org, 0);
 }
 
 HWND TaskBar::Create(HWND hwndParent)
@@ -105,7 +134,7 @@
 
 	_next_id = IDC_FIRST_APP;
 
-	 // register ourselved as task manager window to make the following call to RegisterShellHookWindow working
+	 // register the taskbar window as task manager window to make the following call to RegisterShellHookWindow working
 	if (g_SetTaskmanWindow)
 		(*g_SetTaskmanWindow)(_hwnd);
 
@@ -118,6 +147,16 @@
 		SetTimer(_hwnd, 0, 200, NULL);
 	}
 
+/* Alternatively we could use the RegisterShellHook() function in SHELL32, but this is not yet implemented in the WINE code.
+	if (g_RegisterShellHook) {
+		(*g_RegisterShellHook)(0, RSH_REGISTER);
+
+		if ((HIWORD(GetVersion())>>14) == W_VER_NT)
+			(*g_RegisterShellHook)(_hwnd, RSH_REGISTER_TASKMAN);
+		else
+			(*g_RegisterShellHook)(_hwnd, RSH_REGISTER);
+	}
+*/
 	Refresh();
 
 	return 0;
@@ -156,6 +195,10 @@
 			  case HSHELL_WINDOWDESTROYED:
 			  case HSHELL_WINDOWACTIVATED:
 			  case HSHELL_REDRAW:
+#ifdef HSHELL_FLASH
+			  case HSHELL_FLASH:
+			  case HSHELL_RUDEAPPACTIVATED:
+#endif
 				Refresh();
 				break;
 			}
@@ -409,6 +452,7 @@
 
 		entry._fsState = btn.fsState;
 
+#ifdef _ROS_	// now handled by activating the ARW_HIDE flag with SystemParametersInfo(SPI_SETMINIMIZEDMETRICS)
 		 // move minimized windows out of sight
 		if (IsIconic(hwnd)) {
 			RECT rect;
@@ -418,6 +462,7 @@
 			if (rect.bottom > 0)
 				SetWindowPos(hwnd, 0, -32000, -32000, 0, 0, SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE);
 		}
+#endif
 	}
 
 	return TRUE;

Modified: trunk/reactos/subsys/system/explorer/taskbar/taskbar.h
--- trunk/reactos/subsys/system/explorer/taskbar/taskbar.h	2005-03-27 19:57:20 UTC (rev 14353)
+++ trunk/reactos/subsys/system/explorer/taskbar/taskbar.h	2005-03-27 19:57:26 UTC (rev 14354)
@@ -85,6 +85,7 @@
 	int			_next_id;
 	WindowHandle _last_foreground_wnd;
 	int			_last_btn_width;
+	MINIMIZEDMETRICS _mmMetrics_org;
 
 	const UINT WM_SHELLHOOK;
 

Modified: trunk/reactos/subsys/system/explorer/taskbar/traynotify.cpp
--- trunk/reactos/subsys/system/explorer/taskbar/traynotify.cpp	2005-03-27 19:57:20 UTC (rev 14353)
+++ trunk/reactos/subsys/system/explorer/taskbar/traynotify.cpp	2005-03-27 19:57:26 UTC (rev 14354)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2003, 2004 Martin Fuchs
+ * Copyright 2003, 2004, 2005 Martin Fuchs
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public

Modified: trunk/reactos/subsys/system/explorer/utility/utility.cpp
--- trunk/reactos/subsys/system/explorer/utility/utility.cpp	2005-03-27 19:57:20 UTC (rev 14353)
+++ trunk/reactos/subsys/system/explorer/utility/utility.cpp	2005-03-27 19:57:26 UTC (rev 14354)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2003, 2004 Martin Fuchs
+ * Copyright 2003, 2004, 2005 Martin Fuchs
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public

Modified: trunk/reactos/subsys/system/explorer/utility/utility.h
--- trunk/reactos/subsys/system/explorer/utility/utility.h	2005-03-27 19:57:20 UTC (rev 14353)
+++ trunk/reactos/subsys/system/explorer/utility/utility.h	2005-03-27 19:57:26 UTC (rev 14354)
@@ -59,7 +59,9 @@
 #define _MAX_PATH	260
 #endif
 
+#define	W_VER_NT 0	// constant for HIWORD(GetVersion())>>14
 
+
 #ifdef __cplusplus
 extern "C" {
 #endif

Modified: trunk/reactos/subsys/system/explorer/utility/window.cpp
--- trunk/reactos/subsys/system/explorer/utility/window.cpp	2005-03-27 19:57:20 UTC (rev 14353)
+++ trunk/reactos/subsys/system/explorer/utility/window.cpp	2005-03-27 19:57:26 UTC (rev 14354)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2003, 2004 Martin Fuchs
+ * Copyright 2003, 2004, 2005 Martin Fuchs
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public

Modified: trunk/reactos/subsys/system/explorer/utility/window.h
--- trunk/reactos/subsys/system/explorer/utility/window.h	2005-03-27 19:57:20 UTC (rev 14353)
+++ trunk/reactos/subsys/system/explorer/utility/window.h	2005-03-27 19:57:26 UTC (rev 14354)
@@ -984,7 +984,9 @@
 
 #define	WINMSG_TASKBARCREATED	TEXT("TaskbarCreated")
 
+#define	WINMSG_SHELLHOOK		TEXT("SHELLHOOK")
 
+
 struct TrayIcon
 {
 	TrayIcon(HWND hparent, UINT id)