taskmgr: Avoid forward declarations (2/3)
Francois Gouget
fgouget at free.fr
Tue Mar 21 11:34:04 CST 2006
Changelog:
* programs/taskmgr/applpage.c
Francois Gouget <fgouget at free.fr>
Reorder functions to avoid forward declarations.
--
Francois Gouget <fgouget at free.fr> http://fgouget.free.fr/
f u kn rd ts, ur wy 2 gky 4 ur wn gd.
-------------- next part --------------
Index: programs/taskmgr/applpage.c
===================================================================
RCS file: /home/wine/wine/programs/taskmgr/applpage.c,v
retrieving revision 1.7
diff -u -p -r1.7 applpage.c
--- programs/taskmgr/applpage.c 21 Mar 2006 10:54:06 -0000 1.7
+++ programs/taskmgr/applpage.c 21 Mar 2006 14:29:13 -0000
@@ -48,14 +48,6 @@ static int nApplicationPageWidth;
static int nApplicationPageHeight;
static HANDLE hApplicationPageEvent = NULL; /* When this event becomes signaled then we refresh the app list */
static BOOL bSortAscending = TRUE;
-static DWORD WINAPI ApplicationPageRefreshThread(void *lpParameter);
-static BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam);
-static void AddOrUpdateHwnd(HWND hWnd, TCHAR *szTitle, HICON hIcon, BOOL bHung);
-static void ApplicationPageUpdate(void);
-static void ApplicationPageOnNotify(WPARAM wParam, LPARAM lParam);
-static void ApplicationPageShowContextMenu1(void);
-static void ApplicationPageShowContextMenu2(void);
-static int CALLBACK ApplicationPageCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
#if 0
void SwitchToThisWindow (
@@ -64,252 +56,61 @@ BOOL bRestore /* Restore the window if i
);
#endif
-INT_PTR CALLBACK
-ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+static void ApplicationPageUpdate(void)
{
- RECT rc;
- int nXDifference;
- int nYDifference;
- LV_COLUMN column;
- TCHAR szTemp[256];
- int cx, cy;
-
- switch (message) {
- case WM_INITDIALOG:
-
- /* Save the width and height */
- GetClientRect(hDlg, &rc);
- nApplicationPageWidth = rc.right;
- nApplicationPageHeight = rc.bottom;
-
- /* Update window position */
- SetWindowPos(hDlg, NULL, 15, 30, 0, 0, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER);
-
- /* Get handles to the controls */
- hApplicationPageListCtrl = GetDlgItem(hDlg, IDC_APPLIST);
- hApplicationPageEndTaskButton = GetDlgItem(hDlg, IDC_ENDTASK);
- hApplicationPageSwitchToButton = GetDlgItem(hDlg, IDC_SWITCHTO);
- hApplicationPageNewTaskButton = GetDlgItem(hDlg, IDC_NEWTASK);
-
- SetWindowText(hApplicationPageListCtrl, _T("Tasks"));
-
- /* Initialize the application page's controls */
- column.mask = LVCF_TEXT|LVCF_WIDTH;
- _tcscpy(szTemp, _T("Task"));
- column.pszText = szTemp;
- column.cx = 250;
- /* Add the "Task" column */
- SendMessage(hApplicationPageListCtrl, LVM_INSERTCOLUMN, 0, (LPARAM) &column);
- column.mask = LVCF_TEXT|LVCF_WIDTH;
- _tcscpy(szTemp, _T("Status"));
- column.pszText = szTemp;
- column.cx = 95;
- /* Add the "Status" column */
- SendMessage(hApplicationPageListCtrl, LVM_INSERTCOLUMN, 1, (LPARAM) &column);
-
- SendMessage(hApplicationPageListCtrl, LVM_SETIMAGELIST, LVSIL_SMALL,
- (LPARAM) ImageList_Create(16, 16, ILC_COLOR8|ILC_MASK, 0, 1));
- SendMessage(hApplicationPageListCtrl, LVM_SETIMAGELIST, LVSIL_NORMAL,
- (LPARAM) ImageList_Create(32, 32, ILC_COLOR8|ILC_MASK, 0, 1));
-
- UpdateApplicationListControlViewSetting();
-
- /* Start our refresh thread */
- CreateThread(NULL, 0, ApplicationPageRefreshThread, NULL, 0, NULL);
-
- return TRUE;
-
- case WM_DESTROY:
- /* Close the event handle, this will make the */
- /* refresh thread exit when the wait fails */
- CloseHandle(hApplicationPageEvent);
- break;
-
- case WM_COMMAND:
-
- /* Handle the button clicks */
- switch (LOWORD(wParam))
- {
- case IDC_ENDTASK:
- ApplicationPage_OnEndTask();
- break;
- case IDC_SWITCHTO:
- ApplicationPage_OnSwitchTo();
- break;
- case IDC_NEWTASK:
- SendMessage(hMainWnd, WM_COMMAND, MAKEWPARAM(ID_FILE_NEW, 0), 0);
- break;
- }
-
- break;
-
- case WM_SIZE:
- if (wParam == SIZE_MINIMIZED)
- return 0;
-
- cx = LOWORD(lParam);
- cy = HIWORD(lParam);
- nXDifference = cx - nApplicationPageWidth;
- nYDifference = cy - nApplicationPageHeight;
- nApplicationPageWidth = cx;
- nApplicationPageHeight = cy;
-
- /* Reposition the application page's controls */
- GetWindowRect(hApplicationPageListCtrl, &rc);
- cx = (rc.right - rc.left) + nXDifference;
- cy = (rc.bottom - rc.top) + nYDifference;
- SetWindowPos(hApplicationPageListCtrl, NULL, 0, 0, cx, cy, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOMOVE|SWP_NOZORDER);
- InvalidateRect(hApplicationPageListCtrl, NULL, TRUE);
-
- GetClientRect(hApplicationPageEndTaskButton, &rc);
- MapWindowPoints(hApplicationPageEndTaskButton, hDlg, (LPPOINT)(&rc), (sizeof(RECT)/sizeof(POINT)) );
- cx = rc.left + nXDifference;
- cy = rc.top + nYDifference;
- SetWindowPos(hApplicationPageEndTaskButton, NULL, cx, cy, 0, 0, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER);
- InvalidateRect(hApplicationPageEndTaskButton, NULL, TRUE);
-
- GetClientRect(hApplicationPageSwitchToButton, &rc);
- MapWindowPoints(hApplicationPageSwitchToButton, hDlg, (LPPOINT)(&rc), (sizeof(RECT)/sizeof(POINT)) );
- cx = rc.left + nXDifference;
- cy = rc.top + nYDifference;
- SetWindowPos(hApplicationPageSwitchToButton, NULL, cx, cy, 0, 0, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER);
- InvalidateRect(hApplicationPageSwitchToButton, NULL, TRUE);
-
- GetClientRect(hApplicationPageNewTaskButton, &rc);
- MapWindowPoints(hApplicationPageNewTaskButton, hDlg, (LPPOINT)(&rc), (sizeof(RECT)/sizeof(POINT)) );
- cx = rc.left + nXDifference;
- cy = rc.top + nYDifference;
- SetWindowPos(hApplicationPageNewTaskButton, NULL, cx, cy, 0, 0, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER);
- InvalidateRect(hApplicationPageNewTaskButton, NULL, TRUE);
-
- break;
-
- case WM_NOTIFY:
- ApplicationPageOnNotify(wParam, lParam);
- break;
-
+ /* Enable or disable the "End Task" & "Switch To" buttons */
+ if (ListView_GetSelectedCount(hApplicationPageListCtrl))
+ {
+ EnableWindow(hApplicationPageEndTaskButton, TRUE);
+ EnableWindow(hApplicationPageSwitchToButton, TRUE);
}
-
- return 0;
-}
-
-void RefreshApplicationPage(void)
-{
- /* Signal the event so that our refresh thread */
- /* will wake up and refresh the application page */
- SetEvent(hApplicationPageEvent);
-}
-
-void UpdateApplicationListControlViewSetting(void)
-{
- DWORD dwStyle = GetWindowLong(hApplicationPageListCtrl, GWL_STYLE);
-
- dwStyle &= ~LVS_REPORT;
- dwStyle &= ~LVS_ICON;
- dwStyle &= ~LVS_LIST;
- dwStyle &= ~LVS_SMALLICON;
-
- if (TaskManagerSettings.View_LargeIcons)
- dwStyle |= LVS_ICON;
- else if (TaskManagerSettings.View_SmallIcons)
- dwStyle |= LVS_SMALLICON;
else
- dwStyle |= LVS_REPORT;
-
- SetWindowLong(hApplicationPageListCtrl, GWL_STYLE, dwStyle);
-
- RefreshApplicationPage();
-}
-
-static DWORD WINAPI ApplicationPageRefreshThread(void *lpParameter)
-{
- /* Create the event */
- hApplicationPageEvent = CreateEvent(NULL, TRUE, TRUE, NULL);
-
- /* If we couldn't create the event then exit the thread */
- if (!hApplicationPageEvent)
- return 0;
-
- while (1)
{
- DWORD dwWaitVal;
-
- /* Wait on the event */
- dwWaitVal = WaitForSingleObject(hApplicationPageEvent, INFINITE);
-
- /* If the wait failed then the event object must have been */
- /* closed and the task manager is exiting so exit this thread */
- if (dwWaitVal == WAIT_FAILED)
- return 0;
-
- if (dwWaitVal == WAIT_OBJECT_0)
- {
- /* Reset our event */
- ResetEvent(hApplicationPageEvent);
-
- /*
- * FIXME:
- *
- * Should this be EnumDesktopWindows() instead?
- */
- EnumWindows(EnumWindowsProc, 0);
- }
+ EnableWindow(hApplicationPageEndTaskButton, FALSE);
+ EnableWindow(hApplicationPageSwitchToButton, FALSE);
}
-}
-
-static BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
-{
- HICON hIcon;
- TCHAR szText[260];
- BOOL bLargeIcon;
- BOOL bHung = FALSE;
- typedef int (__stdcall *IsHungAppWindowProc)(HWND);
- IsHungAppWindowProc IsHungAppWindow;
-
- /* Skip our window */
- if (hWnd == hMainWnd)
- return TRUE;
-
- bLargeIcon = TaskManagerSettings.View_LargeIcons ? TRUE : FALSE;
-
- GetWindowText(hWnd, szText, 260); /* Get the window text */
-
- /* Check and see if this is a top-level app window */
- if ((_tcslen(szText) <= 0) ||
- !IsWindowVisible(hWnd) ||
- (GetParent(hWnd) != NULL) ||
- (GetWindow(hWnd, GW_OWNER) != NULL) ||
- (GetWindowLong(hWnd, GWL_EXSTYLE) & WS_EX_TOOLWINDOW))
+ /* If we are on the applications tab the the windows menu will */
+ /* be present on the menu bar so enable & disable the menu items */
+ if (TabCtrl_GetCurSel(hTabWnd) == 0)
{
- return TRUE; /* Skip this window */
- }
+ HMENU hMenu;
+ HMENU hWindowsMenu;
- /* Get the icon for this window */
- hIcon = NULL;
- SendMessageTimeout(hWnd, WM_GETICON, bLargeIcon ? ICON_BIG /*1*/ : ICON_SMALL /*0*/, 0, 0, 1000, (PDWORD_PTR)&hIcon);
+ hMenu = GetMenu(hMainWnd);
+ hWindowsMenu = GetSubMenu(hMenu, 3);
- if (!hIcon)
- {
- hIcon = (HICON)GetClassLongPtr(hWnd, bLargeIcon ? GCLP_HICON : GCLP_HICONSM);
- if (!hIcon) hIcon = (HICON)GetClassLongPtr(hWnd, bLargeIcon ? GCLP_HICONSM : GCLP_HICON);
- if (!hIcon) SendMessageTimeout(hWnd, WM_QUERYDRAGICON, 0, 0, 0, 1000, (PDWORD_PTR)&hIcon);
- if (!hIcon) SendMessageTimeout(hWnd, WM_GETICON, bLargeIcon ? ICON_SMALL /*0*/ : ICON_BIG /*1*/, 0, 0, 1000, (PDWORD_PTR)&hIcon);
+ /* Only one item selected */
+ if (ListView_GetSelectedCount(hApplicationPageListCtrl) == 1)
+ {
+ EnableMenuItem(hWindowsMenu, ID_WINDOWS_TILEHORIZONTALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ EnableMenuItem(hWindowsMenu, ID_WINDOWS_TILEVERTICALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ EnableMenuItem(hWindowsMenu, ID_WINDOWS_MINIMIZE, MF_BYCOMMAND|MF_ENABLED);
+ EnableMenuItem(hWindowsMenu, ID_WINDOWS_MAXIMIZE, MF_BYCOMMAND|MF_ENABLED);
+ EnableMenuItem(hWindowsMenu, ID_WINDOWS_CASCADE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ EnableMenuItem(hWindowsMenu, ID_WINDOWS_BRINGTOFRONT, MF_BYCOMMAND|MF_ENABLED);
+ }
+ /* More than one item selected */
+ else if (ListView_GetSelectedCount(hApplicationPageListCtrl) > 1)
+ {
+ EnableMenuItem(hWindowsMenu, ID_WINDOWS_TILEHORIZONTALLY, MF_BYCOMMAND|MF_ENABLED);
+ EnableMenuItem(hWindowsMenu, ID_WINDOWS_TILEVERTICALLY, MF_BYCOMMAND|MF_ENABLED);
+ EnableMenuItem(hWindowsMenu, ID_WINDOWS_MINIMIZE, MF_BYCOMMAND|MF_ENABLED);
+ EnableMenuItem(hWindowsMenu, ID_WINDOWS_MAXIMIZE, MF_BYCOMMAND|MF_ENABLED);
+ EnableMenuItem(hWindowsMenu, ID_WINDOWS_CASCADE, MF_BYCOMMAND|MF_ENABLED);
+ EnableMenuItem(hWindowsMenu, ID_WINDOWS_BRINGTOFRONT, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ }
+ /* No items selected */
+ else
+ {
+ EnableMenuItem(hWindowsMenu, ID_WINDOWS_TILEHORIZONTALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ EnableMenuItem(hWindowsMenu, ID_WINDOWS_TILEVERTICALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ EnableMenuItem(hWindowsMenu, ID_WINDOWS_MINIMIZE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ EnableMenuItem(hWindowsMenu, ID_WINDOWS_MAXIMIZE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ EnableMenuItem(hWindowsMenu, ID_WINDOWS_CASCADE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ EnableMenuItem(hWindowsMenu, ID_WINDOWS_BRINGTOFRONT, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ }
}
-
- if (!hIcon)
- hIcon = LoadIcon(hInst, bLargeIcon ? MAKEINTRESOURCE(IDI_WINDOW) : MAKEINTRESOURCE(IDI_WINDOWSM));
-
- bHung = FALSE;
-
- IsHungAppWindow = (IsHungAppWindowProc)(FARPROC)GetProcAddress(GetModuleHandle(_T("USER32.DLL")), "IsHungAppWindow");
-
- if (IsHungAppWindow)
- bHung = IsHungAppWindow(hWnd);
-
- AddOrUpdateHwnd(hWnd, szText, hIcon, bHung);
-
- return TRUE;
}
static void AddOrUpdateHwnd(HWND hWnd, TCHAR *szTitle, HICON hIcon, BOOL bHung)
@@ -434,61 +235,179 @@ static void AddOrUpdateHwnd(HWND hWnd, T
ApplicationPageUpdate();
}
-static void ApplicationPageUpdate(void)
+static BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
- /* Enable or disable the "End Task" & "Switch To" buttons */
- if (ListView_GetSelectedCount(hApplicationPageListCtrl))
+ HICON hIcon;
+ TCHAR szText[260];
+ BOOL bLargeIcon;
+ BOOL bHung = FALSE;
+ typedef int (__stdcall *IsHungAppWindowProc)(HWND);
+ IsHungAppWindowProc IsHungAppWindow;
+
+
+ /* Skip our window */
+ if (hWnd == hMainWnd)
+ return TRUE;
+
+ bLargeIcon = TaskManagerSettings.View_LargeIcons ? TRUE : FALSE;
+
+ GetWindowText(hWnd, szText, 260); /* Get the window text */
+
+ /* Check and see if this is a top-level app window */
+ if ((_tcslen(szText) <= 0) ||
+ !IsWindowVisible(hWnd) ||
+ (GetParent(hWnd) != NULL) ||
+ (GetWindow(hWnd, GW_OWNER) != NULL) ||
+ (GetWindowLong(hWnd, GWL_EXSTYLE) & WS_EX_TOOLWINDOW))
{
- EnableWindow(hApplicationPageEndTaskButton, TRUE);
- EnableWindow(hApplicationPageSwitchToButton, TRUE);
+ return TRUE; /* Skip this window */
}
- else
+
+ /* Get the icon for this window */
+ hIcon = NULL;
+ SendMessageTimeout(hWnd, WM_GETICON, bLargeIcon ? ICON_BIG /*1*/ : ICON_SMALL /*0*/, 0, 0, 1000, (PDWORD_PTR)&hIcon);
+
+ if (!hIcon)
{
- EnableWindow(hApplicationPageEndTaskButton, FALSE);
- EnableWindow(hApplicationPageSwitchToButton, FALSE);
+ hIcon = (HICON)GetClassLongPtr(hWnd, bLargeIcon ? GCLP_HICON : GCLP_HICONSM);
+ if (!hIcon) hIcon = (HICON)GetClassLongPtr(hWnd, bLargeIcon ? GCLP_HICONSM : GCLP_HICON);
+ if (!hIcon) SendMessageTimeout(hWnd, WM_QUERYDRAGICON, 0, 0, 0, 1000, (PDWORD_PTR)&hIcon);
+ if (!hIcon) SendMessageTimeout(hWnd, WM_GETICON, bLargeIcon ? ICON_SMALL /*0*/ : ICON_BIG /*1*/, 0, 0, 1000, (PDWORD_PTR)&hIcon);
}
- /* If we are on the applications tab the the windows menu will */
- /* be present on the menu bar so enable & disable the menu items */
- if (TabCtrl_GetCurSel(hTabWnd) == 0)
+ if (!hIcon)
+ hIcon = LoadIcon(hInst, bLargeIcon ? MAKEINTRESOURCE(IDI_WINDOW) : MAKEINTRESOURCE(IDI_WINDOWSM));
+
+ bHung = FALSE;
+
+ IsHungAppWindow = (IsHungAppWindowProc)(FARPROC)GetProcAddress(GetModuleHandle(_T("USER32.DLL")), "IsHungAppWindow");
+
+ if (IsHungAppWindow)
+ bHung = IsHungAppWindow(hWnd);
+
+ AddOrUpdateHwnd(hWnd, szText, hIcon, bHung);
+
+ return TRUE;
+}
+
+static DWORD WINAPI ApplicationPageRefreshThread(void *lpParameter)
+{
+ /* Create the event */
+ hApplicationPageEvent = CreateEvent(NULL, TRUE, TRUE, NULL);
+
+ /* If we couldn't create the event then exit the thread */
+ if (!hApplicationPageEvent)
+ return 0;
+
+ while (1)
{
- HMENU hMenu;
- HMENU hWindowsMenu;
+ DWORD dwWaitVal;
+
+ /* Wait on the event */
+ dwWaitVal = WaitForSingleObject(hApplicationPageEvent, INFINITE);
+
+ /* If the wait failed then the event object must have been */
+ /* closed and the task manager is exiting so exit this thread */
+ if (dwWaitVal == WAIT_FAILED)
+ return 0;
+
+ if (dwWaitVal == WAIT_OBJECT_0)
+ {
+ /* Reset our event */
+ ResetEvent(hApplicationPageEvent);
+
+ /*
+ * FIXME:
+ *
+ * Should this be EnumDesktopWindows() instead?
+ */
+ EnumWindows(EnumWindowsProc, 0);
+ }
+ }
+}
+
+static void ApplicationPageShowContextMenu1(void)
+{
+ HMENU hMenu;
+ HMENU hSubMenu;
+ POINT pt;
+
+ GetCursorPos(&pt);
+
+ hMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_APPLICATION_PAGE_CONTEXT1));
+ hSubMenu = GetSubMenu(hMenu, 0);
+
+ if (TaskManagerSettings.View_LargeIcons)
+ CheckMenuRadioItem(hSubMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, ID_VIEW_LARGE, MF_BYCOMMAND);
+ else if (TaskManagerSettings.View_SmallIcons)
+ CheckMenuRadioItem(hSubMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, ID_VIEW_SMALL, MF_BYCOMMAND);
+ else
+ CheckMenuRadioItem(hSubMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, ID_VIEW_DETAILS, MF_BYCOMMAND);
+
+ TrackPopupMenu(hSubMenu, TPM_LEFTALIGN|TPM_TOPALIGN|TPM_LEFTBUTTON, pt.x, pt.y, 0, hMainWnd, NULL);
+
+ DestroyMenu(hMenu);
+}
+
+static void ApplicationPageShowContextMenu2(void)
+{
+ HMENU hMenu;
+ HMENU hSubMenu;
+ POINT pt;
+
+ GetCursorPos(&pt);
+
+ hMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_APPLICATION_PAGE_CONTEXT2));
+ hSubMenu = GetSubMenu(hMenu, 0);
+
+ if (ListView_GetSelectedCount(hApplicationPageListCtrl) == 1)
+ {
+ EnableMenuItem(hSubMenu, ID_WINDOWS_TILEHORIZONTALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ EnableMenuItem(hSubMenu, ID_WINDOWS_TILEVERTICALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ EnableMenuItem(hSubMenu, ID_WINDOWS_MINIMIZE, MF_BYCOMMAND|MF_ENABLED);
+ EnableMenuItem(hSubMenu, ID_WINDOWS_MAXIMIZE, MF_BYCOMMAND|MF_ENABLED);
+ EnableMenuItem(hSubMenu, ID_WINDOWS_CASCADE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ EnableMenuItem(hSubMenu, ID_WINDOWS_BRINGTOFRONT, MF_BYCOMMAND|MF_ENABLED);
+ }
+ else if (ListView_GetSelectedCount(hApplicationPageListCtrl) > 1)
+ {
+ EnableMenuItem(hSubMenu, ID_WINDOWS_TILEHORIZONTALLY, MF_BYCOMMAND|MF_ENABLED);
+ EnableMenuItem(hSubMenu, ID_WINDOWS_TILEVERTICALLY, MF_BYCOMMAND|MF_ENABLED);
+ EnableMenuItem(hSubMenu, ID_WINDOWS_MINIMIZE, MF_BYCOMMAND|MF_ENABLED);
+ EnableMenuItem(hSubMenu, ID_WINDOWS_MAXIMIZE, MF_BYCOMMAND|MF_ENABLED);
+ EnableMenuItem(hSubMenu, ID_WINDOWS_CASCADE, MF_BYCOMMAND|MF_ENABLED);
+ EnableMenuItem(hSubMenu, ID_WINDOWS_BRINGTOFRONT, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ }
+ else
+ {
+ EnableMenuItem(hSubMenu, ID_WINDOWS_TILEHORIZONTALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ EnableMenuItem(hSubMenu, ID_WINDOWS_TILEVERTICALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ EnableMenuItem(hSubMenu, ID_WINDOWS_MINIMIZE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ EnableMenuItem(hSubMenu, ID_WINDOWS_MAXIMIZE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ EnableMenuItem(hSubMenu, ID_WINDOWS_CASCADE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ EnableMenuItem(hSubMenu, ID_WINDOWS_BRINGTOFRONT, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
+ }
+
+ SetMenuDefaultItem(hSubMenu, ID_APPLICATION_PAGE_SWITCHTO, MF_BYCOMMAND);
- hMenu = GetMenu(hMainWnd);
- hWindowsMenu = GetSubMenu(hMenu, 3);
+ TrackPopupMenu(hSubMenu, TPM_LEFTALIGN|TPM_TOPALIGN|TPM_LEFTBUTTON, pt.x, pt.y, 0, hMainWnd, NULL);
- /* Only one item selected */
- if (ListView_GetSelectedCount(hApplicationPageListCtrl) == 1)
- {
- EnableMenuItem(hWindowsMenu, ID_WINDOWS_TILEHORIZONTALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- EnableMenuItem(hWindowsMenu, ID_WINDOWS_TILEVERTICALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- EnableMenuItem(hWindowsMenu, ID_WINDOWS_MINIMIZE, MF_BYCOMMAND|MF_ENABLED);
- EnableMenuItem(hWindowsMenu, ID_WINDOWS_MAXIMIZE, MF_BYCOMMAND|MF_ENABLED);
- EnableMenuItem(hWindowsMenu, ID_WINDOWS_CASCADE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- EnableMenuItem(hWindowsMenu, ID_WINDOWS_BRINGTOFRONT, MF_BYCOMMAND|MF_ENABLED);
- }
- /* More than one item selected */
- else if (ListView_GetSelectedCount(hApplicationPageListCtrl) > 1)
- {
- EnableMenuItem(hWindowsMenu, ID_WINDOWS_TILEHORIZONTALLY, MF_BYCOMMAND|MF_ENABLED);
- EnableMenuItem(hWindowsMenu, ID_WINDOWS_TILEVERTICALLY, MF_BYCOMMAND|MF_ENABLED);
- EnableMenuItem(hWindowsMenu, ID_WINDOWS_MINIMIZE, MF_BYCOMMAND|MF_ENABLED);
- EnableMenuItem(hWindowsMenu, ID_WINDOWS_MAXIMIZE, MF_BYCOMMAND|MF_ENABLED);
- EnableMenuItem(hWindowsMenu, ID_WINDOWS_CASCADE, MF_BYCOMMAND|MF_ENABLED);
- EnableMenuItem(hWindowsMenu, ID_WINDOWS_BRINGTOFRONT, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- }
- /* No items selected */
- else
- {
- EnableMenuItem(hWindowsMenu, ID_WINDOWS_TILEHORIZONTALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- EnableMenuItem(hWindowsMenu, ID_WINDOWS_TILEVERTICALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- EnableMenuItem(hWindowsMenu, ID_WINDOWS_MINIMIZE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- EnableMenuItem(hWindowsMenu, ID_WINDOWS_MAXIMIZE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- EnableMenuItem(hWindowsMenu, ID_WINDOWS_CASCADE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- EnableMenuItem(hWindowsMenu, ID_WINDOWS_BRINGTOFRONT, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- }
+ DestroyMenu(hMenu);
+}
+
+static int CALLBACK ApplicationPageCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
+{
+ LPAPPLICATION_PAGE_LIST_ITEM Param1;
+ LPAPPLICATION_PAGE_LIST_ITEM Param2;
+
+ if (bSortAscending) {
+ Param1 = (LPAPPLICATION_PAGE_LIST_ITEM)lParam1;
+ Param2 = (LPAPPLICATION_PAGE_LIST_ITEM)lParam2;
+ } else {
+ Param1 = (LPAPPLICATION_PAGE_LIST_ITEM)lParam2;
+ Param2 = (LPAPPLICATION_PAGE_LIST_ITEM)lParam1;
}
+ return _tcscmp(Param1->szTitle, Param2->szTitle);
}
static void ApplicationPageOnNotify(WPARAM wParam, LPARAM lParam)
@@ -579,73 +498,161 @@ static void ApplicationPageOnNotify(WPAR
}
-static void ApplicationPageShowContextMenu1(void)
+INT_PTR CALLBACK
+ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
- HMENU hMenu;
- HMENU hSubMenu;
- POINT pt;
+ RECT rc;
+ int nXDifference;
+ int nYDifference;
+ LV_COLUMN column;
+ TCHAR szTemp[256];
+ int cx, cy;
- GetCursorPos(&pt);
+ switch (message) {
+ case WM_INITDIALOG:
- hMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_APPLICATION_PAGE_CONTEXT1));
- hSubMenu = GetSubMenu(hMenu, 0);
+ /* Save the width and height */
+ GetClientRect(hDlg, &rc);
+ nApplicationPageWidth = rc.right;
+ nApplicationPageHeight = rc.bottom;
- if (TaskManagerSettings.View_LargeIcons)
- CheckMenuRadioItem(hSubMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, ID_VIEW_LARGE, MF_BYCOMMAND);
- else if (TaskManagerSettings.View_SmallIcons)
- CheckMenuRadioItem(hSubMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, ID_VIEW_SMALL, MF_BYCOMMAND);
- else
- CheckMenuRadioItem(hSubMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, ID_VIEW_DETAILS, MF_BYCOMMAND);
+ /* Update window position */
+ SetWindowPos(hDlg, NULL, 15, 30, 0, 0, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER);
- TrackPopupMenu(hSubMenu, TPM_LEFTALIGN|TPM_TOPALIGN|TPM_LEFTBUTTON, pt.x, pt.y, 0, hMainWnd, NULL);
+ /* Get handles to the controls */
+ hApplicationPageListCtrl = GetDlgItem(hDlg, IDC_APPLIST);
+ hApplicationPageEndTaskButton = GetDlgItem(hDlg, IDC_ENDTASK);
+ hApplicationPageSwitchToButton = GetDlgItem(hDlg, IDC_SWITCHTO);
+ hApplicationPageNewTaskButton = GetDlgItem(hDlg, IDC_NEWTASK);
- DestroyMenu(hMenu);
+ SetWindowText(hApplicationPageListCtrl, _T("Tasks"));
+
+ /* Initialize the application page's controls */
+ column.mask = LVCF_TEXT|LVCF_WIDTH;
+ _tcscpy(szTemp, _T("Task"));
+ column.pszText = szTemp;
+ column.cx = 250;
+ /* Add the "Task" column */
+ SendMessage(hApplicationPageListCtrl, LVM_INSERTCOLUMN, 0, (LPARAM) &column);
+ column.mask = LVCF_TEXT|LVCF_WIDTH;
+ _tcscpy(szTemp, _T("Status"));
+ column.pszText = szTemp;
+ column.cx = 95;
+ /* Add the "Status" column */
+ SendMessage(hApplicationPageListCtrl, LVM_INSERTCOLUMN, 1, (LPARAM) &column);
+
+ SendMessage(hApplicationPageListCtrl, LVM_SETIMAGELIST, LVSIL_SMALL,
+ (LPARAM) ImageList_Create(16, 16, ILC_COLOR8|ILC_MASK, 0, 1));
+ SendMessage(hApplicationPageListCtrl, LVM_SETIMAGELIST, LVSIL_NORMAL,
+ (LPARAM) ImageList_Create(32, 32, ILC_COLOR8|ILC_MASK, 0, 1));
+
+ UpdateApplicationListControlViewSetting();
+
+ /* Start our refresh thread */
+ CreateThread(NULL, 0, ApplicationPageRefreshThread, NULL, 0, NULL);
+
+ return TRUE;
+
+ case WM_DESTROY:
+ /* Close the event handle, this will make the */
+ /* refresh thread exit when the wait fails */
+ CloseHandle(hApplicationPageEvent);
+ break;
+
+ case WM_COMMAND:
+
+ /* Handle the button clicks */
+ switch (LOWORD(wParam))
+ {
+ case IDC_ENDTASK:
+ ApplicationPage_OnEndTask();
+ break;
+ case IDC_SWITCHTO:
+ ApplicationPage_OnSwitchTo();
+ break;
+ case IDC_NEWTASK:
+ SendMessage(hMainWnd, WM_COMMAND, MAKEWPARAM(ID_FILE_NEW, 0), 0);
+ break;
+ }
+
+ break;
+
+ case WM_SIZE:
+ if (wParam == SIZE_MINIMIZED)
+ return 0;
+
+ cx = LOWORD(lParam);
+ cy = HIWORD(lParam);
+ nXDifference = cx - nApplicationPageWidth;
+ nYDifference = cy - nApplicationPageHeight;
+ nApplicationPageWidth = cx;
+ nApplicationPageHeight = cy;
+
+ /* Reposition the application page's controls */
+ GetWindowRect(hApplicationPageListCtrl, &rc);
+ cx = (rc.right - rc.left) + nXDifference;
+ cy = (rc.bottom - rc.top) + nYDifference;
+ SetWindowPos(hApplicationPageListCtrl, NULL, 0, 0, cx, cy, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOMOVE|SWP_NOZORDER);
+ InvalidateRect(hApplicationPageListCtrl, NULL, TRUE);
+
+ GetClientRect(hApplicationPageEndTaskButton, &rc);
+ MapWindowPoints(hApplicationPageEndTaskButton, hDlg, (LPPOINT)(&rc), (sizeof(RECT)/sizeof(POINT)) );
+ cx = rc.left + nXDifference;
+ cy = rc.top + nYDifference;
+ SetWindowPos(hApplicationPageEndTaskButton, NULL, cx, cy, 0, 0, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER);
+ InvalidateRect(hApplicationPageEndTaskButton, NULL, TRUE);
+
+ GetClientRect(hApplicationPageSwitchToButton, &rc);
+ MapWindowPoints(hApplicationPageSwitchToButton, hDlg, (LPPOINT)(&rc), (sizeof(RECT)/sizeof(POINT)) );
+ cx = rc.left + nXDifference;
+ cy = rc.top + nYDifference;
+ SetWindowPos(hApplicationPageSwitchToButton, NULL, cx, cy, 0, 0, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER);
+ InvalidateRect(hApplicationPageSwitchToButton, NULL, TRUE);
+
+ GetClientRect(hApplicationPageNewTaskButton, &rc);
+ MapWindowPoints(hApplicationPageNewTaskButton, hDlg, (LPPOINT)(&rc), (sizeof(RECT)/sizeof(POINT)) );
+ cx = rc.left + nXDifference;
+ cy = rc.top + nYDifference;
+ SetWindowPos(hApplicationPageNewTaskButton, NULL, cx, cy, 0, 0, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER);
+ InvalidateRect(hApplicationPageNewTaskButton, NULL, TRUE);
+
+ break;
+
+ case WM_NOTIFY:
+ ApplicationPageOnNotify(wParam, lParam);
+ break;
+
+ }
+
+ return 0;
}
-static void ApplicationPageShowContextMenu2(void)
+void RefreshApplicationPage(void)
{
- HMENU hMenu;
- HMENU hSubMenu;
- POINT pt;
+ /* Signal the event so that our refresh thread */
+ /* will wake up and refresh the application page */
+ SetEvent(hApplicationPageEvent);
+}
- GetCursorPos(&pt);
+void UpdateApplicationListControlViewSetting(void)
+{
+ DWORD dwStyle = GetWindowLong(hApplicationPageListCtrl, GWL_STYLE);
- hMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_APPLICATION_PAGE_CONTEXT2));
- hSubMenu = GetSubMenu(hMenu, 0);
+ dwStyle &= ~LVS_REPORT;
+ dwStyle &= ~LVS_ICON;
+ dwStyle &= ~LVS_LIST;
+ dwStyle &= ~LVS_SMALLICON;
- if (ListView_GetSelectedCount(hApplicationPageListCtrl) == 1)
- {
- EnableMenuItem(hSubMenu, ID_WINDOWS_TILEHORIZONTALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- EnableMenuItem(hSubMenu, ID_WINDOWS_TILEVERTICALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- EnableMenuItem(hSubMenu, ID_WINDOWS_MINIMIZE, MF_BYCOMMAND|MF_ENABLED);
- EnableMenuItem(hSubMenu, ID_WINDOWS_MAXIMIZE, MF_BYCOMMAND|MF_ENABLED);
- EnableMenuItem(hSubMenu, ID_WINDOWS_CASCADE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- EnableMenuItem(hSubMenu, ID_WINDOWS_BRINGTOFRONT, MF_BYCOMMAND|MF_ENABLED);
- }
- else if (ListView_GetSelectedCount(hApplicationPageListCtrl) > 1)
- {
- EnableMenuItem(hSubMenu, ID_WINDOWS_TILEHORIZONTALLY, MF_BYCOMMAND|MF_ENABLED);
- EnableMenuItem(hSubMenu, ID_WINDOWS_TILEVERTICALLY, MF_BYCOMMAND|MF_ENABLED);
- EnableMenuItem(hSubMenu, ID_WINDOWS_MINIMIZE, MF_BYCOMMAND|MF_ENABLED);
- EnableMenuItem(hSubMenu, ID_WINDOWS_MAXIMIZE, MF_BYCOMMAND|MF_ENABLED);
- EnableMenuItem(hSubMenu, ID_WINDOWS_CASCADE, MF_BYCOMMAND|MF_ENABLED);
- EnableMenuItem(hSubMenu, ID_WINDOWS_BRINGTOFRONT, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- }
+ if (TaskManagerSettings.View_LargeIcons)
+ dwStyle |= LVS_ICON;
+ else if (TaskManagerSettings.View_SmallIcons)
+ dwStyle |= LVS_SMALLICON;
else
- {
- EnableMenuItem(hSubMenu, ID_WINDOWS_TILEHORIZONTALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- EnableMenuItem(hSubMenu, ID_WINDOWS_TILEVERTICALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- EnableMenuItem(hSubMenu, ID_WINDOWS_MINIMIZE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- EnableMenuItem(hSubMenu, ID_WINDOWS_MAXIMIZE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- EnableMenuItem(hSubMenu, ID_WINDOWS_CASCADE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- EnableMenuItem(hSubMenu, ID_WINDOWS_BRINGTOFRONT, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
- }
-
- SetMenuDefaultItem(hSubMenu, ID_APPLICATION_PAGE_SWITCHTO, MF_BYCOMMAND);
+ dwStyle |= LVS_REPORT;
- TrackPopupMenu(hSubMenu, TPM_LEFTALIGN|TPM_TOPALIGN|TPM_LEFTBUTTON, pt.x, pt.y, 0, hMainWnd, NULL);
+ SetWindowLong(hApplicationPageListCtrl, GWL_STYLE, dwStyle);
- DestroyMenu(hMenu);
+ RefreshApplicationPage();
}
void ApplicationPage_OnViewLargeIcons(void)
@@ -944,18 +951,3 @@ void ApplicationPage_OnGotoProcess(void)
}
}
}
-
-static int CALLBACK ApplicationPageCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
-{
- LPAPPLICATION_PAGE_LIST_ITEM Param1;
- LPAPPLICATION_PAGE_LIST_ITEM Param2;
-
- if (bSortAscending) {
- Param1 = (LPAPPLICATION_PAGE_LIST_ITEM)lParam1;
- Param2 = (LPAPPLICATION_PAGE_LIST_ITEM)lParam2;
- } else {
- Param1 = (LPAPPLICATION_PAGE_LIST_ITEM)lParam2;
- Param2 = (LPAPPLICATION_PAGE_LIST_ITEM)lParam1;
- }
- return _tcscmp(Param1->szTitle, Param2->szTitle);
-}
More information about the wine-patches
mailing list