winecfg: appdefaults: use more strings from resources, unicode
Frank Richter
frank.richter at gmail.com
Tue Aug 15 23:23:52 CDT 2006
-------------- next part --------------
>From bff1c79ab9a1fb602c06d4a08c66f8029edd668a Mon Sep 17 00:00:00 2001
From: Frank Richter frank.richter at gmail.com <frank.richter at gmail.com>
Date: Wed, 16 Aug 2006 06:21:52 +0200
Subject: [PATCH] winecfg: appdefaults: use more strings from resources, unicode
---
programs/winecfg/appdefaults.c | 84 +++++++++++++++++++++++++++-------------
programs/winecfg/resource.h | 4 ++
programs/winecfg/winecfg.h | 6 +++
3 files changed, 66 insertions(+), 28 deletions(-)
diff --git a/programs/winecfg/appdefaults.c b/programs/winecfg/appdefaults.c
index e880cfe..8725757 100644
--- a/programs/winecfg/appdefaults.c
+++ b/programs/winecfg/appdefaults.c
@@ -109,7 +109,12 @@ init_comboboxes (HWND dialog)
/* add the default entries (automatic) which correspond to no setting */
if (current_app)
- SendDlgItemMessage(dialog, IDC_WINVER, CB_ADDSTRING, 0, (LPARAM) "Use global settings");
+ {
+ WCHAR str[256];
+ LoadStringW (GetModuleHandle (NULL), IDS_USE_GLOBAL_SETTINGS, str,
+ sizeof(str)/sizeof(str[0]));
+ SendDlgItemMessageW (dialog, IDC_WINVER, CB_ADDSTRING, 0, (LPARAM)str);
+ }
for (i = 0; i < NB_VERSIONS; i++)
{
@@ -118,19 +123,19 @@ init_comboboxes (HWND dialog)
}
}
-static void add_listview_item(HWND listview, const char *text, void *association)
+static void add_listview_item(HWND listview, const WCHAR *text, void *association)
{
- LVITEM item;
+ LVITEMW item;
ZeroMemory(&item, sizeof(LVITEM));
item.mask = LVIF_TEXT | LVIF_PARAM;
- item.pszText = (char*) text;
- item.cchTextMax = strlen(text);
+ item.pszText = (WCHAR*) text;
+ item.cchTextMax = lstrlenW(text);
item.lParam = (LPARAM) association;
item.iItem = ListView_GetItemCount(listview);
- SendMessage(listview, LVM_INSERTITEM, 0, (LPARAM) &item);
+ SendMessage(listview, LVM_INSERTITEMW, 0, (LPARAM) &item);
}
/* Called when the application is initialized (cannot reinit!) */
@@ -140,7 +145,7 @@ static void init_appsheet(HWND dialog)
HKEY key;
int i;
DWORD size;
- char appname[1024];
+ WCHAR appname[1024];
WINE_TRACE("()\n");
@@ -148,19 +153,19 @@ static void init_appsheet(HWND dialog)
/* we use the lparam field of the item so we can alter the presentation later and not change code
* for instance, to use the tile view or to display the EXEs embedded 'display name' */
- add_listview_item(listview, "Default Settings", NULL);
+ add_listview_item(listview, load_string (IDS_DEFAULT_SETTINGS), NULL);
/* because this list is only populated once, it's safe to bypass the settings list here */
if (RegOpenKey(config_key, "AppDefaults", &key) == ERROR_SUCCESS)
{
i = 0;
- size = sizeof(appname);
- while (RegEnumKeyEx(key, i, appname, &size, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
+ size = sizeof(appname)/sizeof(appname[0]);
+ while (RegEnumKeyExW (key, i, appname, &size, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
{
- add_listview_item(listview, appname, strdupA(appname));
+ add_listview_item(listview, appname, strdupW(appname));
i++;
- size = sizeof(appname);
+ size = sizeof(appname)/sizeof(appname[0]);
}
RegCloseKey(key);
@@ -240,47 +245,63 @@ static void on_selection_change(HWND dia
set_window_title(dialog);
}
-static BOOL list_contains_file(HWND listview, char *filename)
+static BOOL list_contains_file(HWND listview, WCHAR *filename)
{
- LVFINDINFO find_info = { LVFI_STRING, filename, 0, {0, 0}, 0 };
+ LVFINDINFOW find_info = { LVFI_STRING, filename, 0, {0, 0}, 0 };
int index;
- index = ListView_FindItem(listview, -1, &find_info);
+ index = ListView_FindItemW(listview, -1, &find_info);
return (index != -1);
}
static void on_add_app_click(HWND dialog)
{
- char filetitle[MAX_PATH];
- char file[MAX_PATH];
-
- OPENFILENAME ofn = { sizeof(OPENFILENAME),
- 0, /*hInst*/0, "Wine Programs (*.exe,*.exe.so)\0*.exe;*.exe.so\0", NULL, 0, 0, NULL,
- 0, NULL, 0, "c:\\", "Select a Windows executable file",
+ WCHAR filetitle[MAX_PATH];
+ WCHAR file[MAX_PATH];
+ WCHAR programsFilter[100];
+ WCHAR selectExecutableStr[100];
+ static const WCHAR pathC[] = { 'c',':','\\',0 };
+
+ OPENFILENAMEW ofn = { sizeof(OPENFILENAMEW),
+ 0, /*hInst*/0, 0, NULL, 0, 0, NULL,
+ 0, NULL, 0, pathC, 0,
OFN_SHOWHELP | OFN_HIDEREADONLY, 0, 0, NULL, 0, NULL };
+ LoadStringW (GetModuleHandle (NULL), IDS_SELECT_EXECUTABLE, selectExecutableStr,
+ sizeof(selectExecutableStr)/sizeof(selectExecutableStr[0]));
+ LoadStringW (GetModuleHandle (NULL), IDS_EXECUTABLE_FILTER, programsFilter,
+ sizeof(programsFilter)/sizeof(programsFilter[0]));
+
+ ofn.lpstrTitle = selectExecutableStr;
+ ofn.lpstrFilter = programsFilter;
ofn.lpstrFileTitle = filetitle;
ofn.lpstrFileTitle[0] = '\0';
- ofn.nMaxFileTitle = sizeof(filetitle);
+ ofn.nMaxFileTitle = sizeof(filetitle)/sizeof(filetitle[0]);
ofn.lpstrFile = file;
ofn.lpstrFile[0] = '\0';
- ofn.nMaxFile = sizeof(file);
+ ofn.nMaxFile = sizeof(file)/sizeof(file[0]);
- if (GetOpenFileName(&ofn))
+ if (GetOpenFileNameW (&ofn))
{
HWND listview = GetDlgItem(dialog, IDC_APP_LISTVIEW);
int count = ListView_GetItemCount(listview);
- char* new_app;
+ WCHAR* new_app;
+ char* new_appA;
+ DWORD new_appA_len;
- new_app = strdupA(filetitle);
+ new_app = strdupW(filetitle);
if (list_contains_file(listview, new_app))
return;
- WINE_TRACE("adding %s\n", new_app);
+ WINE_TRACE("adding %s\n", wine_dbgstr_w (new_app));
+
+ new_appA_len = WideCharToMultiByte (CP_ACP, 0, new_app, -1, NULL, 0, NULL, NULL);
+ new_appA = HeapAlloc (GetProcessHeap(), 0, new_appA_len);
+ WideCharToMultiByte (CP_ACP, 0, new_app, -1, new_appA, new_appA_len, NULL, NULL);
- add_listview_item(listview, new_app, new_app);
+ add_listview_item(listview, new_app, new_appA);
ListView_SetItemState(listview, count, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
@@ -294,6 +315,10 @@ static void on_remove_app_click(HWND dia
HWND listview = GetDlgItem(dialog, IDC_APP_LISTVIEW);
int selection = get_listview_selection(listview);
char *section = keypath(""); /* AppDefaults\\whatever.exe\\ */
+ LVITEMW item;
+
+ item.iItem = selection;
+ item.mask = LVIF_PARAM | LVIF_TEXT;
WINE_TRACE("selection=%d, section=%s\n", selection, section);
@@ -301,6 +326,9 @@ static void on_remove_app_click(HWND dia
section[strlen(section)] = '\0'; /* remove last backslash */
set_reg_key(config_key, section, NULL, NULL); /* delete the section */
+ SendMessage(listview, LVM_GETITEMW, 0, (LPARAM) &item);
+ HeapFree (GetProcessHeap(), 0, item.pszText);
+ HeapFree (GetProcessHeap(), 0, (void*)item.lParam);
SendMessage(listview, LVM_DELETEITEM, selection, 0);
ListView_SetItemState(listview, selection - 1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
diff --git a/programs/winecfg/resource.h b/programs/winecfg/resource.h
index 99c10ed..67013c1 100644
--- a/programs/winecfg/resource.h
+++ b/programs/winecfg/resource.h
@@ -86,6 +86,10 @@ #define IDS_DLL_BUILTIN
#define IDS_DLL_NATIVE_BUILTIN 8014
#define IDS_DLL_BUILTIN_NATIVE 8015
#define IDS_DLL_DISABLED 8016
+#define IDS_DEFAULT_SETTINGS 8017
+#define IDS_EXECUTABLE_FILTER 8018
+#define IDS_USE_GLOBAL_SETTINGS 8019
+#define IDS_SELECT_EXECUTABLE 8020
/* drive editing */
#define IDC_LIST_DRIVES 1042
diff --git a/programs/winecfg/winecfg.h b/programs/winecfg/winecfg.h
index 5332abe..3cd3d45 100644
--- a/programs/winecfg/winecfg.h
+++ b/programs/winecfg/winecfg.h
@@ -121,6 +121,12 @@ static inline char *strdupA(const char *
return strcpy(r, s);
}
+static inline WCHAR *strdupW(const WCHAR *s)
+{
+ WCHAR *r = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(s)+1)*sizeof(WCHAR));
+ return lstrcpyW(r, s);
+}
+
static inline char *get_text(HWND dialog, WORD id)
{
HWND item = GetDlgItem(dialog, id);
--
1.4.1.1
More information about the wine-patches
mailing list