diff --git a/base/shell/explorer/lang/bg-BG.rc b/base/shell/explorer/lang/bg-BG.rc index abed935e45..68df50d7fd 100644 --- a/base/shell/explorer/lang/bg-BG.rc +++ b/base/shell/explorer/lang/bg-BG.rc @@ -196,3 +196,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Свойства на задачната лента и на пусковия изборник" IDS_RESTORE_ALL "&Show Open Windows" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/cs-CZ.rc b/base/shell/explorer/lang/cs-CZ.rc index a8d92e8e40..eee6216495 100644 --- a/base/shell/explorer/lang/cs-CZ.rc +++ b/base/shell/explorer/lang/cs-CZ.rc @@ -202,3 +202,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Vlastnosti hlavního panelu a Start menu" IDS_RESTORE_ALL "&Show Open Windows" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/de-DE.rc b/base/shell/explorer/lang/de-DE.rc index e24726f74d..f98c5f9dac 100644 --- a/base/shell/explorer/lang/de-DE.rc +++ b/base/shell/explorer/lang/de-DE.rc @@ -196,3 +196,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Taskleisten- und Startmenüeinstellungen" IDS_RESTORE_ALL "&Show Open Windows" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/en-US.rc b/base/shell/explorer/lang/en-US.rc index 7bb22c452c..d542b92879 100644 --- a/base/shell/explorer/lang/en-US.rc +++ b/base/shell/explorer/lang/en-US.rc @@ -196,3 +196,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Taskbar and Start Menu" IDS_RESTORE_ALL "&Show Open Windows" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/es-ES.rc b/base/shell/explorer/lang/es-ES.rc index 855b5e8480..e4fca3894c 100644 --- a/base/shell/explorer/lang/es-ES.rc +++ b/base/shell/explorer/lang/es-ES.rc @@ -208,3 +208,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Propiedades de la Barra de tareas y del Menú Inicio" IDS_RESTORE_ALL "&Mostrar ventanas abiertas" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/et-EE.rc b/base/shell/explorer/lang/et-EE.rc index e4e894120f..11d7600d9e 100644 --- a/base/shell/explorer/lang/et-EE.rc +++ b/base/shell/explorer/lang/et-EE.rc @@ -203,3 +203,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Tegumiriba ja Menüü Start" IDS_RESTORE_ALL "&Show Open Windows" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/eu-ES.rc b/base/shell/explorer/lang/eu-ES.rc index cfa2544572..442e18f0f7 100644 --- a/base/shell/explorer/lang/eu-ES.rc +++ b/base/shell/explorer/lang/eu-ES.rc @@ -203,3 +203,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Ataza-barra eta Hasi menuaren propietateak" IDS_RESTORE_ALL "E&rakutsi irekitako leihoak" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/fi-FI.rc b/base/shell/explorer/lang/fi-FI.rc index b564f3a6b2..e88c3f8b7d 100644 --- a/base/shell/explorer/lang/fi-FI.rc +++ b/base/shell/explorer/lang/fi-FI.rc @@ -196,3 +196,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Tehtäväpalkki ja Käynnistä Valikko" IDS_RESTORE_ALL "&Show Open Windows" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/fr-FR.rc b/base/shell/explorer/lang/fr-FR.rc index 0d1ac38a69..6afe1a68e2 100644 --- a/base/shell/explorer/lang/fr-FR.rc +++ b/base/shell/explorer/lang/fr-FR.rc @@ -196,3 +196,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Barre des tâches et Menu Démarrer" IDS_RESTORE_ALL "&Afficher les fenêtres ouvertes" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Annuler &cascade" + IDS_TRAYWND_UNDO_TILE "Annuler &mosaïque" +END diff --git a/base/shell/explorer/lang/he-IL.rc b/base/shell/explorer/lang/he-IL.rc index dbe1a5d6c2..d8a345b23e 100644 --- a/base/shell/explorer/lang/he-IL.rc +++ b/base/shell/explorer/lang/he-IL.rc @@ -196,3 +196,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "שורת המשימות ושולחן העבודה" IDS_RESTORE_ALL "&Show Open Windows" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/hi-IN.rc b/base/shell/explorer/lang/hi-IN.rc index d503dcac0c..e71db93b01 100644 --- a/base/shell/explorer/lang/hi-IN.rc +++ b/base/shell/explorer/lang/hi-IN.rc @@ -196,3 +196,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "टास्कबार और स्टार्ट मेनू" IDS_RESTORE_ALL "खुले हुऐ विंडोज &दिखाएं" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/hu-HU.rc b/base/shell/explorer/lang/hu-HU.rc index 4ed7ff57c4..96cc81c12c 100644 --- a/base/shell/explorer/lang/hu-HU.rc +++ b/base/shell/explorer/lang/hu-HU.rc @@ -196,3 +196,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Tálca és Start menü" IDS_RESTORE_ALL "&Megnyitott ablakok megjelenítése" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/id-ID.rc b/base/shell/explorer/lang/id-ID.rc index 835f8b3482..59a88c323e 100644 --- a/base/shell/explorer/lang/id-ID.rc +++ b/base/shell/explorer/lang/id-ID.rc @@ -196,3 +196,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Bilah Tugas dan Menu Mulai" IDS_RESTORE_ALL "&Tampilkan Semua Jendela" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/it-IT.rc b/base/shell/explorer/lang/it-IT.rc index f58f97c540..af2c8dd382 100644 --- a/base/shell/explorer/lang/it-IT.rc +++ b/base/shell/explorer/lang/it-IT.rc @@ -196,3 +196,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Proprietà della Barra delle applicazioni e del Menú di avvio" IDS_RESTORE_ALL "&Show Open Windows" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/ja-JP.rc b/base/shell/explorer/lang/ja-JP.rc index 5ff1420b7a..8321a8263f 100644 --- a/base/shell/explorer/lang/ja-JP.rc +++ b/base/shell/explorer/lang/ja-JP.rc @@ -196,3 +196,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "タスクバーとスタートメニュー" IDS_RESTORE_ALL "&Show Open Windows" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/ko-KR.rc b/base/shell/explorer/lang/ko-KR.rc index a54b493997..c54c62fd99 100644 --- a/base/shell/explorer/lang/ko-KR.rc +++ b/base/shell/explorer/lang/ko-KR.rc @@ -204,3 +204,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "작업 표시줄 및 시작 메뉴" IDS_RESTORE_ALL "열린 창 보기(&S)" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/lt-LT.rc b/base/shell/explorer/lang/lt-LT.rc index 0f2681b150..52ebe4a1ad 100644 --- a/base/shell/explorer/lang/lt-LT.rc +++ b/base/shell/explorer/lang/lt-LT.rc @@ -199,3 +199,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Taskbar and Start Menu" IDS_RESTORE_ALL "&Show Open Windows" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/ms-MY.rc b/base/shell/explorer/lang/ms-MY.rc index 40d5a92bc1..25728bc672 100644 --- a/base/shell/explorer/lang/ms-MY.rc +++ b/base/shell/explorer/lang/ms-MY.rc @@ -198,3 +198,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Bar Tugas dan Menu Mula" IDS_RESTORE_ALL "&Show Open Windows" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/nl-NL.rc b/base/shell/explorer/lang/nl-NL.rc index d9c52184c7..d0020dda43 100644 --- a/base/shell/explorer/lang/nl-NL.rc +++ b/base/shell/explorer/lang/nl-NL.rc @@ -196,3 +196,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Taakbalk en menu Start eigenschappen" IDS_RESTORE_ALL "&Show Open Windows" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/no-NO.rc b/base/shell/explorer/lang/no-NO.rc index 062dcd1cef..288f66e5b9 100644 --- a/base/shell/explorer/lang/no-NO.rc +++ b/base/shell/explorer/lang/no-NO.rc @@ -197,3 +197,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Egenskaper for oppgavelinjen og startmeny" IDS_RESTORE_ALL "&Show Open Windows" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/pl-PL.rc b/base/shell/explorer/lang/pl-PL.rc index a36a7168de..cbb6be101b 100644 --- a/base/shell/explorer/lang/pl-PL.rc +++ b/base/shell/explorer/lang/pl-PL.rc @@ -207,3 +207,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Paska zadań i menu Start" IDS_RESTORE_ALL "&Pokaż otwarte okna" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/pt-BR.rc b/base/shell/explorer/lang/pt-BR.rc index 1ee4135c8c..5ed2cd5940 100644 --- a/base/shell/explorer/lang/pt-BR.rc +++ b/base/shell/explorer/lang/pt-BR.rc @@ -198,3 +198,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Propriedades do Barra de Tarefas e Menu Iniciar" IDS_RESTORE_ALL "&Show Open Windows" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/pt-PT.rc b/base/shell/explorer/lang/pt-PT.rc index 94107915b1..eac8650391 100644 --- a/base/shell/explorer/lang/pt-PT.rc +++ b/base/shell/explorer/lang/pt-PT.rc @@ -198,3 +198,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Barra de Tarefas e Menu Iniciar" IDS_RESTORE_ALL "&Mostrar janelas abertas" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/ro-RO.rc b/base/shell/explorer/lang/ro-RO.rc index a8d609c58f..2829a28a7b 100644 --- a/base/shell/explorer/lang/ro-RO.rc +++ b/base/shell/explorer/lang/ro-RO.rc @@ -198,3 +198,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Bara de activități și meniul „Pornire”" IDS_RESTORE_ALL "&Afișează ferestrele deschise" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/ru-RU.rc b/base/shell/explorer/lang/ru-RU.rc index 15ad76a321..88a2c25747 100644 --- a/base/shell/explorer/lang/ru-RU.rc +++ b/base/shell/explorer/lang/ru-RU.rc @@ -198,3 +198,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Меню ""Пуск"" и панель задач" IDS_RESTORE_ALL "&Показать окна" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/sk-SK.rc b/base/shell/explorer/lang/sk-SK.rc index 90e30583a8..68361fc3c6 100644 --- a/base/shell/explorer/lang/sk-SK.rc +++ b/base/shell/explorer/lang/sk-SK.rc @@ -201,3 +201,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Vlastnosti panela úloh a ponuky Štart" IDS_RESTORE_ALL "&Show Open Windows" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/sq-AL.rc b/base/shell/explorer/lang/sq-AL.rc index 9f7d14d2f7..dda9532bd5 100644 --- a/base/shell/explorer/lang/sq-AL.rc +++ b/base/shell/explorer/lang/sq-AL.rc @@ -200,3 +200,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Taskbar dhe Start Menu" IDS_RESTORE_ALL "&Show Open Windows" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/tr-TR.rc b/base/shell/explorer/lang/tr-TR.rc index deec41b8be..bb24531a45 100644 --- a/base/shell/explorer/lang/tr-TR.rc +++ b/base/shell/explorer/lang/tr-TR.rc @@ -201,3 +201,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Görev Çubuğu ve Başlat Menüsü" IDS_RESTORE_ALL "&Açık Pencereleri Göster" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/uk-UA.rc b/base/shell/explorer/lang/uk-UA.rc index 03fbaa8b7c..8d638ce729 100644 --- a/base/shell/explorer/lang/uk-UA.rc +++ b/base/shell/explorer/lang/uk-UA.rc @@ -204,3 +204,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "Властивості меню Пуск та Панелі завдань" IDS_RESTORE_ALL "&Показати відкриті вікна" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/zh-CN.rc b/base/shell/explorer/lang/zh-CN.rc index 942fc5bf07..7dd167bcc5 100644 --- a/base/shell/explorer/lang/zh-CN.rc +++ b/base/shell/explorer/lang/zh-CN.rc @@ -205,3 +205,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "任务栏和开始菜单属性" IDS_RESTORE_ALL "显示打开的窗口(&S)" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/zh-HK.rc b/base/shell/explorer/lang/zh-HK.rc index 6635a3e64a..0939ea3c7c 100644 --- a/base/shell/explorer/lang/zh-HK.rc +++ b/base/shell/explorer/lang/zh-HK.rc @@ -204,3 +204,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "工作列及開始功能表" IDS_RESTORE_ALL "顯示開啟的視窗(&S)" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/lang/zh-TW.rc b/base/shell/explorer/lang/zh-TW.rc index 345abeb2b1..9b01056210 100644 --- a/base/shell/explorer/lang/zh-TW.rc +++ b/base/shell/explorer/lang/zh-TW.rc @@ -205,3 +205,9 @@ BEGIN IDS_TASKBAR_STARTMENU_PROP_CAPTION "工作列及開始功能表" IDS_RESTORE_ALL "顯示開啟的視窗(&S)" END + +STRINGTABLE +BEGIN + IDS_TRAYWND_UNDO_CASCADE "Undo &cascade windows" + IDS_TRAYWND_UNDO_TILE "Undo &tile windows" +END diff --git a/base/shell/explorer/resource.h b/base/shell/explorer/resource.h index 5265eb1561..2ff1e6b4e5 100644 --- a/base/shell/explorer/resource.h +++ b/base/shell/explorer/resource.h @@ -102,6 +102,8 @@ #define IDS_HELP_COMMAND 732 #define IDS_TASKBAR_STARTMENU_PROP_CAPTION 810 #define IDS_RESTORE_ALL 811 +#define IDS_TRAYWND_UNDO_CASCADE 812 +#define IDS_TRAYWND_UNDO_TILE 813 /*******************************************************************************\ |* Control Resources *| diff --git a/base/shell/explorer/traywnd.cpp b/base/shell/explorer/traywnd.cpp index da62c75c26..54d1072230 100644 --- a/base/shell/explorer/traywnd.cpp +++ b/base/shell/explorer/traywnd.cpp @@ -58,6 +58,44 @@ void appbar_notify_all(HMONITOR hMon, UINT uMsg, HWND hwndExclude, LPARAM lParam static const WCHAR szTrayWndClass[] = L"Shell_TrayWnd"; +enum { NONE, TILED, CASCADED } g_Arrangement = NONE; + +struct WINDOWPOSBACKUPDATA +{ + HWND hwnd; + WINDOWPLACEMENT wplt; +}; +CSimpleArray g_WindowPosBackup; + +static BOOL CALLBACK BackupWindowsPosProc(HWND hwnd, LPARAM lParam) +{ + WINDOWPOSBACKUPDATA wposdata; + HWND hDesk = GetDesktopWindow(); + if (IsWindowVisible(hwnd) && !IsIconic(hwnd) && (hwnd != hDesk)) + { + wposdata.hwnd = hwnd; + wposdata.wplt.length = sizeof(wposdata.wplt); + GetWindowPlacement(hwnd, &(wposdata.wplt)); + g_WindowPosBackup.Add(wposdata); + } + + return TRUE; +} + +VOID BackupWindowPos() +{ + EnumWindows(BackupWindowsPosProc, NULL); +} + +VOID RestoreWindowPos() +{ + for (INT i = g_WindowPosBackup.GetSize() - 1; i >= 0; --i) + { + SetWindowPlacement(g_WindowPosBackup[i].hwnd, &(g_WindowPosBackup[i].wplt)); + } + g_WindowPosBackup.RemoveAll(); +} + struct EFFECTIVE_INFO { HWND hwndFound; @@ -607,6 +645,8 @@ public: break; case ID_SHELL_CMD_UNDO_ACTION: + g_Arrangement = NONE; + RestoreWindowPos(); break; case ID_SHELL_CMD_SHOW_DESKTOP: @@ -615,20 +655,35 @@ public: case ID_SHELL_CMD_TILE_WND_H: appbar_notify_all(NULL, ABN_WINDOWARRANGE, NULL, TRUE); + if (g_Arrangement == NONE) + { + BackupWindowPos(); + } TileWindows(NULL, MDITILE_HORIZONTAL, NULL, 0, NULL); appbar_notify_all(NULL, ABN_WINDOWARRANGE, NULL, FALSE); + g_Arrangement = TILED; break; case ID_SHELL_CMD_TILE_WND_V: appbar_notify_all(NULL, ABN_WINDOWARRANGE, NULL, TRUE); + if (g_Arrangement == NONE) + { + BackupWindowPos(); + } TileWindows(NULL, MDITILE_VERTICAL, NULL, 0, NULL); appbar_notify_all(NULL, ABN_WINDOWARRANGE, NULL, FALSE); + g_Arrangement = TILED; break; case ID_SHELL_CMD_CASCADE_WND: appbar_notify_all(NULL, ABN_WINDOWARRANGE, NULL, TRUE); + if (g_Arrangement == NONE) + { + BackupWindowPos(); + } CascadeWindows(NULL, MDITILE_SKIPDISABLED, NULL, 0, NULL); appbar_notify_all(NULL, ABN_WINDOWARRANGE, NULL, FALSE); + g_Arrangement = CASCADED; break; case ID_SHELL_CMD_CUST_NOTIF: @@ -2991,12 +3046,29 @@ HandleTrayContextMenu: ::EnableMenuItem(hMenu, ID_SHELL_CMD_CASCADE_WND, MF_BYCOMMAND | MF_ENABLED); ::EnableMenuItem(hMenu, ID_SHELL_CMD_TILE_WND_H, MF_BYCOMMAND | MF_ENABLED); ::EnableMenuItem(hMenu, ID_SHELL_CMD_TILE_WND_V, MF_BYCOMMAND | MF_ENABLED); + if (g_Arrangement != NONE) + { + CStringW strCaption((g_Arrangement == TILED) ? MAKEINTRESOURCEW(IDS_TRAYWND_UNDO_TILE) + : MAKEINTRESOURCEW(IDS_TRAYWND_UNDO_CASCADE)); + MENUITEMINFOW mii = { sizeof(mii) }; + GetMenuItemInfoW(hMenu, ID_SHELL_CMD_UNDO_ACTION, FALSE, &mii); + mii.fMask = MIIM_TYPE; + mii.fType = MFT_STRING; + mii.dwTypeData = const_cast(&strCaption[0]); + SetMenuItemInfoW(hMenu, ID_SHELL_CMD_UNDO_ACTION, FALSE, &mii); + } + else + { + DeleteMenu(hMenu, ID_SHELL_CMD_UNDO_ACTION, MF_BYCOMMAND); + } } else { ::EnableMenuItem(hMenu, ID_SHELL_CMD_CASCADE_WND, MF_BYCOMMAND | MF_GRAYED); ::EnableMenuItem(hMenu, ID_SHELL_CMD_TILE_WND_H, MF_BYCOMMAND | MF_GRAYED); ::EnableMenuItem(hMenu, ID_SHELL_CMD_TILE_WND_V, MF_BYCOMMAND | MF_GRAYED); + DeleteMenu(hMenu, ID_SHELL_CMD_UNDO_ACTION, MF_BYCOMMAND); + g_Arrangement = NONE; } return 0; }