#include "rapps.h"
+#include <shellapi.h>
+
HWND hMainWnd;
HINSTANCE hInst;
HIMAGELIST hImageTreeView = NULL;
INT SelectedEnumType = ENUM_ALL_COMPONENTS;
SETTINGS_INFO SettingsInfo;
-
VOID
-FillDafaultSettings(PSETTINGS_INFO pSettingsInfo)
+FillDefaultSettings(PSETTINGS_INFO pSettingsInfo)
{
pSettingsInfo->bSaveWndPos = TRUE;
pSettingsInfo->bUpdateAtStart = FALSE;
pSettingsInfo->bLogEnabled = TRUE;
- wcscpy(pSettingsInfo->szDownloadDir, L"C:\\Downloads");
+ StringCbCopyW(pSettingsInfo->szDownloadDir,
+ sizeof(pSettingsInfo->szDownloadDir),
+ L"C:\\Downloads");
pSettingsInfo->bDelInstaller = FALSE;
pSettingsInfo->Maximized = FALSE;
if (RegCreateKeyExW(HKEY_LOCAL_MACHINE, L"Software\\ReactOS\\rapps", 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL) == ERROR_SUCCESS)
{
- RegSetValueEx(hKey, L"Settings", 0, REG_BINARY, (LPBYTE)&SettingsInfo, sizeof(SETTINGS_INFO));
+ RegSetValueExW(hKey, L"Settings", 0, REG_BINARY, (LPBYTE)&SettingsInfo, sizeof(SETTINGS_INFO));
RegCloseKey(hKey);
}
}
/* Destroy old image list */
if (hImageListView)
- ImageList_Destroy(hImageListView);
+ ImageList_Destroy(hImageListView);
SelectedEnumType = EnumType;
LoadStringW(hInst, IDS_APPS_COUNT, szBuffer2, sizeof(szBuffer2) / sizeof(WCHAR));
- swprintf(szBuffer1, szBuffer2, ListView_GetItemCount(hListView));
+ StringCbPrintfW(szBuffer1, sizeof(szBuffer1),
+ szBuffer2,
+ ListView_GetItemCount(hListView));
SetStatusBarText(szBuffer1);
SetWelcomeText();
InitCategoriesList();
LoadStringW(hInst, IDS_APPS_COUNT, szBuffer2, sizeof(szBuffer2) / sizeof(WCHAR));
- swprintf(szBuffer1, szBuffer2, ListView_GetItemCount(hListView));
+ StringCbPrintfW(szBuffer1, sizeof(szBuffer1),
+ szBuffer2,
+ ListView_GetItemCount(hListView));
SetStatusBarText(szBuffer1);
return TRUE;
}
UpdateApplicationsList(-1);
break;
+ case ID_RESETDB:
+ UpdateAppsDB();
+ UpdateApplicationsList(-1);
+ break;
+
case ID_HELP:
MessageBoxW(hwnd, L"Help not implemented yet", NULL, MB_OK);
break;
}
break;
- case LVN_KEYDOWN:
+ case LVN_ITEMCHANGED:
{
- LPNMLVKEYDOWN pnkd = (LPNMLVKEYDOWN) lParam;
+ LPNMLISTVIEW pnic = (LPNMLISTVIEW) lParam;
- if (pnkd->hdr.hwndFrom == hListView)
+ if (pnic->hdr.hwndFrom == hListView)
{
- INT ItemIndex = (INT) SendMessage(hListView, LVM_GETNEXTITEM, -1, LVNI_FOCUSED);
-
- if (pnkd->wVKey == VK_UP) ItemIndex -= 1;
- if (pnkd->wVKey == VK_DOWN) ItemIndex += 1;
+ /* Check if this is a valid item
+ * (technically, it can be also an unselect) */
+ INT ItemIndex = pnic->iItem;
+ if (ItemIndex == -1 ||
+ ItemIndex >= ListView_GetItemCount(pnic->hdr.hwndFrom))
+ {
+ break;
+ }
- if (IS_INSTALLED_ENUM(SelectedEnumType))
- ShowInstalledAppInfo(ItemIndex);
- if (IS_AVAILABLE_ENUM(SelectedEnumType))
- ShowAvailableAppInfo(ItemIndex);
+ /* Check if the focus has been moved to another item */
+ if ((pnic->uChanged & LVIF_STATE) &&
+ (pnic->uNewState & LVIS_FOCUSED) &&
+ !(pnic->uOldState & LVIS_FOCUSED))
+ {
+ if (IS_INSTALLED_ENUM(SelectedEnumType))
+ ShowInstalledAppInfo(ItemIndex);
+ if (IS_AVAILABLE_ENUM(SelectedEnumType))
+ ShowAvailableAppInfo(ItemIndex);
+ }
}
}
break;
WNDCLASSEXW WndClass = {0};
WCHAR szWindowClass[] = L"ROSAPPMGR";
WCHAR szWindowName[MAX_STR_LEN];
- WCHAR szErrorText[MAX_STR_LEN];
HANDLE hMutex = NULL;
MSG Msg;
- hInst = hInstance;
-
- if (!IsUserAnAdmin())
+ switch (GetUserDefaultUILanguage())
{
- LoadStringW(hInst, IDS_USER_NOT_ADMIN, szErrorText, sizeof(szErrorText) / sizeof(WCHAR));
- MessageBox(0, szErrorText, NULL, MB_OK | MB_ICONWARNING);
- return 1;
+ case MAKELANGID(LANG_HEBREW, SUBLANG_DEFAULT):
+ SetProcessDefaultLayout(LAYOUT_RTL);
+ break;
+
+ default:
+ break;
}
+ hInst = hInstance;
+
hMutex = CreateMutexW(NULL, FALSE, szWindowClass);
if ((!hMutex) || (GetLastError() == ERROR_ALREADY_EXISTS))
{
if (!LoadSettings())
{
- FillDafaultSettings(&SettingsInfo);
+ FillDefaultSettings(&SettingsInfo);
}
InitLogs();