Author: tfaber Date: Sat Jan 18 14:11:19 2014 New Revision: 61675
URL: http://svn.reactos.org/svn/reactos?rev=61675&view=rev Log: [RAPPS] - Allow double-clicking to install programs. Based on patch by Edijs Kolesnikovičs and Yuntian Zhang. CORE-4357 #resolve #comment Thanks guys, this was a major annoyance.
Modified: trunk/reactos/base/applications/rapps/listview.c trunk/reactos/base/applications/rapps/misc.c trunk/reactos/base/applications/rapps/rapps.h trunk/reactos/base/applications/rapps/richedit.c trunk/reactos/base/applications/rapps/winmain.c
Modified: trunk/reactos/base/applications/rapps/listview.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/rapps/lis... ============================================================================== --- trunk/reactos/base/applications/rapps/listview.c [iso-8859-1] (original) +++ trunk/reactos/base/applications/rapps/listview.c [iso-8859-1] Sat Jan 18 14:11:19 2014 @@ -105,7 +105,7 @@ WS_CHILD | WS_VISIBLE | LVS_SORTASCENDING | LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS, 205, 28, 465, 250, hwnd, - NULL, + GetSubMenu(LoadMenuW(hInst, MAKEINTRESOURCEW(IDR_APPLICATIONMENU)), 0), hInst, NULL);
Modified: trunk/reactos/base/applications/rapps/misc.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/rapps/mis... ============================================================================== --- trunk/reactos/base/applications/rapps/misc.c [iso-8859-1] (original) +++ trunk/reactos/base/applications/rapps/misc.c [iso-8859-1] Sat Jan 18 14:11:19 2014 @@ -149,17 +149,35 @@ }
VOID -ShowPopupMenu(HWND hwnd, UINT MenuID) -{ - HMENU hPopupMenu = GetSubMenu(LoadMenuW(hInst, MAKEINTRESOURCEW(MenuID)), 0); +ShowPopupMenu(HWND hwnd, UINT MenuID, UINT DefaultItem) +{ + HMENU hMenu = NULL; + HMENU hPopupMenu; + MENUITEMINFO mii; POINT pt; + + if (MenuID) + { + hMenu = LoadMenuW(hInst, MAKEINTRESOURCEW(MenuID)); + hPopupMenu = GetSubMenu(hMenu, 0); + } + else + hPopupMenu = GetMenu(hwnd); + + ZeroMemory(&mii, sizeof(mii)); + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_STATE; + GetMenuItemInfo(hPopupMenu, DefaultItem, FALSE, &mii); + if (!(mii.fState & MFS_GRAYED)) + SetMenuDefaultItem(hPopupMenu, DefaultItem, FALSE);
GetCursorPos(&pt);
SetForegroundWindow(hwnd); TrackPopupMenu(hPopupMenu, 0, pt.x, pt.y, 0, hMainWnd, NULL);
- DestroyMenu(hPopupMenu); + if (hMenu) + DestroyMenu(hMenu); }
BOOL
Modified: trunk/reactos/base/applications/rapps/rapps.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/rapps/rap... ============================================================================== --- trunk/reactos/base/applications/rapps/rapps.h [iso-8859-1] (original) +++ trunk/reactos/base/applications/rapps/rapps.h [iso-8859-1] Sat Jan 18 14:11:19 2014 @@ -149,7 +149,7 @@ int GetClientWindowHeight(HWND hwnd); VOID CopyTextToClipboard(LPCWSTR lpszText); VOID SetWelcomeText(VOID); -VOID ShowPopupMenu(HWND hwnd, UINT MenuID); +VOID ShowPopupMenu(HWND hwnd, UINT MenuID, UINT DefaultItem); BOOL StartProcess(LPWSTR lpPath, BOOL Wait); BOOL GetStorageDirectory(PWCHAR lpDirectory, DWORD cch); BOOL ExtractFilesFromCab(LPWSTR lpCabName, LPWSTR lpOutputPath);
Modified: trunk/reactos/base/applications/rapps/richedit.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/rapps/ric... ============================================================================== --- trunk/reactos/base/applications/rapps/richedit.c [iso-8859-1] (original) +++ trunk/reactos/base/applications/rapps/richedit.c [iso-8859-1] Sat Jan 18 14:11:19 2014 @@ -36,7 +36,7 @@ SendMessageW(hRichEdit, EM_SETSEL, Link->chrg.cpMin, Link->chrg.cpMax); SendMessageW(hRichEdit, EM_GETSELTEXT, 0, (LPARAM)pLink);
- ShowPopupMenu(hwnd, IDR_LINKMENU); + ShowPopupMenu(hwnd, IDR_LINKMENU, -1); } break; }
Modified: trunk/reactos/base/applications/rapps/winmain.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/rapps/win... ============================================================================== --- trunk/reactos/base/applications/rapps/winmain.c [iso-8859-1] (original) +++ trunk/reactos/base/applications/rapps/winmain.c [iso-8859-1] Sat Jan 18 14:11:19 2014 @@ -588,6 +588,25 @@ EndDeferWindowPos(hdwp); }
+BOOL IsSelectedNodeInstalled(void) +{ + HTREEITEM hSelectedItem = TreeView_GetSelection(hTreeView); + TV_ITEM tItem; + + tItem.mask = TVIF_PARAM | TVIF_HANDLE; + tItem.hItem = hSelectedItem; + TreeView_GetItem(hTreeView, &tItem); + switch (tItem.lParam) + { + case IDS_INSTALLED: + case IDS_APPLICATIONS: + case IDS_UPDATES: + return TRUE; + default: + return FALSE; + } +} + LRESULT CALLBACK MainWindowProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) { @@ -691,6 +710,42 @@ UpdateApplicationsList(ENUM_CAT_VIDEO); break; } + } + + /* Disable/enable items based on treeview selection */ + if (IsSelectedNodeInstalled()) + { + EnableMenuItem(GetMenu(hwnd), ID_REGREMOVE, MF_ENABLED); + EnableMenuItem(GetMenu(hwnd), ID_INSTALL, MF_GRAYED); + EnableMenuItem(GetMenu(hwnd), ID_UNINSTALL, MF_ENABLED); + EnableMenuItem(GetMenu(hwnd), ID_MODIFY, MF_ENABLED); + + EnableMenuItem(GetMenu(hListView), ID_REGREMOVE, MF_ENABLED); + EnableMenuItem(GetMenu(hListView), ID_INSTALL, MF_GRAYED); + EnableMenuItem(GetMenu(hListView), ID_UNINSTALL, MF_ENABLED); + EnableMenuItem(GetMenu(hListView), ID_MODIFY, MF_ENABLED); + + SendMessage(hToolBar, TB_ENABLEBUTTON, ID_REGREMOVE, TRUE); + SendMessage(hToolBar, TB_ENABLEBUTTON, ID_INSTALL, FALSE); + SendMessage(hToolBar, TB_ENABLEBUTTON, ID_UNINSTALL, TRUE); + SendMessage(hToolBar, TB_ENABLEBUTTON, ID_MODIFY, TRUE); + } + else + { + EnableMenuItem(GetMenu(hwnd), ID_REGREMOVE, MF_GRAYED); + EnableMenuItem(GetMenu(hwnd), ID_INSTALL, MF_ENABLED); + EnableMenuItem(GetMenu(hwnd), ID_UNINSTALL, MF_GRAYED); + EnableMenuItem(GetMenu(hwnd), ID_MODIFY, MF_GRAYED); + + EnableMenuItem(GetMenu(hListView), ID_REGREMOVE, MF_GRAYED); + EnableMenuItem(GetMenu(hListView), ID_INSTALL, MF_ENABLED); + EnableMenuItem(GetMenu(hListView), ID_UNINSTALL, MF_GRAYED); + EnableMenuItem(GetMenu(hListView), ID_MODIFY, MF_GRAYED); + + SendMessage(hToolBar, TB_ENABLEBUTTON, ID_REGREMOVE, FALSE); + SendMessage(hToolBar, TB_ENABLEBUTTON, ID_INSTALL, TRUE); + SendMessage(hToolBar, TB_ENABLEBUTTON, ID_UNINSTALL, FALSE); + SendMessage(hToolBar, TB_ENABLEBUTTON, ID_MODIFY, FALSE); } } break; @@ -734,19 +789,34 @@ break;
case NM_CLICK: - if (data->hwndFrom == hListView) + { + if (data->hwndFrom == hListView && ((LPNMLISTVIEW)lParam)->iItem != -1) { if (IS_INSTALLED_ENUM(SelectedEnumType)) ShowInstalledAppInfo(-1); if (IS_AVAILABLE_ENUM(SelectedEnumType)) ShowAvailableAppInfo(-1); } - break; + } + break; + + case NM_DBLCLK: + { + if (data->hwndFrom == hListView && ((LPNMLISTVIEW)lParam)->iItem != -1) + { + SendMessage(hwnd, WM_COMMAND, ID_INSTALL, 0); //Won't do anything if the program is already installed + } + } + break;
case NM_RCLICK: - if (data->hwndFrom == hListView) - ShowPopupMenu(hListView, IDR_APPLICATIONMENU); - break; + { + if (data->hwndFrom == hListView && ((LPNMLISTVIEW)lParam)->iItem != -1) + { + ShowPopupMenu(hListView, 0, ID_INSTALL); + } + } + break;
case EN_LINK: RichEditOnLink(hwnd, (ENLINK*)lParam);