[PATCH 1/2] oledlg: Improve menu items localization for OleUIAddVerbMenuW()
Nikolay Sivov
nsivov at codeweavers.com
Tue Sep 8 08:45:18 CDT 2015
---
-------------- next part --------------
>From a332e1dcdc14a2bb53bfab7672b47396decbd8aa Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov at codeweavers.com>
Date: Tue, 8 Sep 2015 16:23:29 +0300
Subject: [PATCH 1/2] oledlg: Improve menu items localization for
OleUIAddVerbMenuW()
---
dlls/oledlg/oledlg.rc | 2 ++
dlls/oledlg/oledlg_main.c | 36 ++++++++++++++++++++----------------
dlls/oledlg/resource.h | 2 ++
3 files changed, 24 insertions(+), 16 deletions(-)
diff --git a/dlls/oledlg/oledlg.rc b/dlls/oledlg/oledlg.rc
index 9c1a818..0cf6578 100644
--- a/dlls/oledlg/oledlg.rc
+++ b/dlls/oledlg/oledlg.rc
@@ -30,7 +30,9 @@ STRINGTABLE
IDS_NOTOLEMOD "File does not appear to be a valid OLE module. Unable to register OLE control."
IDS_NOTOLEMODCAPTION "Add Control"
IDS_VERBMENU_OBJECT "&Object"
+ IDS_VERBMENU_OBJECT_WITH_NAME "%s &Object"
IDS_VERBMENU_CONVERT "&Convert..."
+ IDS_VERBMENU_SINGLEVERB_OBJECT "%1 %2 &Object"
}
STRINGTABLE
diff --git a/dlls/oledlg/oledlg_main.c b/dlls/oledlg/oledlg_main.c
index a1f4db4..2730562 100644
--- a/dlls/oledlg/oledlg_main.c
+++ b/dlls/oledlg/oledlg_main.c
@@ -158,14 +158,15 @@ static void insert_verb_to_menu(HMENU menu, UINT idmin, const OLEVERB *verb)
BOOL WINAPI OleUIAddVerbMenuW(IOleObject *object, LPCWSTR shorttype,
HMENU hMenu, UINT uPos, UINT idmin, UINT idmax, BOOL addConvert, UINT idConvert, HMENU *ret_submenu)
{
- static const WCHAR spaceW[] = {' ',0};
IEnumOLEVERB *enumverbs = NULL;
- WCHAR *rootname, *objecttype;
LPOLESTR usertype = NULL;
OLEVERB firstverb, verb;
+ WCHAR *objecttype;
WCHAR resstrW[32]; /* should be enough */
+ DWORD_PTR args[2];
BOOL singleverb;
HMENU submenu;
+ WCHAR *str;
TRACE("(%p, %s, %p, %d, %d, %d, %d, %d, %p)\n", object, debugstr_w(shorttype),
hMenu, uPos, idmin, idmax, addConvert, idConvert, ret_submenu);
@@ -193,12 +194,6 @@ BOOL WINAPI OleUIAddVerbMenuW(IOleObject *object, LPCWSTR shorttype,
else
objecttype = (WCHAR*)shorttype;
- rootname = CoTaskMemAlloc((strlenW(objecttype) + strlenW(resstrW) + 2)*sizeof(WCHAR));
- strcpyW(rootname, objecttype);
- strcatW(rootname, spaceW);
- strcatW(rootname, resstrW);
- CoTaskMemFree(usertype);
-
/* iterate through verbs */
/* find first suitable verb */
@@ -206,18 +201,20 @@ BOOL WINAPI OleUIAddVerbMenuW(IOleObject *object, LPCWSTR shorttype,
singleverb = get_next_insertable_verb(enumverbs, idmin, idmax, &verb) != S_OK;
if (singleverb && !addConvert) {
- WCHAR *str = CoTaskMemAlloc((strlenW(rootname) + strlenW(firstverb.lpszVerbName) + 2)*sizeof(WCHAR));
+ LoadStringW(OLEDLG_hInstance, IDS_VERBMENU_SINGLEVERB_OBJECT, resstrW, sizeof(resstrW)/sizeof(WCHAR));
+
+ args[0] = (DWORD_PTR)firstverb.lpszVerbName;
+ args[1] = (DWORD_PTR)objecttype;
- strcpyW(str, firstverb.lpszVerbName);
- strcatW(str, spaceW);
- strcatW(str, rootname);
+ FormatMessageW(FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_ARGUMENT_ARRAY,
+ resstrW, 0, 0, (WCHAR*)&str, 0, (__ms_va_list*)args);
RemoveMenu(hMenu, uPos, MF_BYPOSITION);
InsertMenuW(hMenu, uPos, MF_BYPOSITION|MF_STRING, idmin, str);
CoTaskMemFree(firstverb.lpszVerbName);
- CoTaskMemFree(rootname);
- CoTaskMemFree(str);
+ HeapFree(GetProcessHeap(), 0, str);
IEnumOLEVERB_Release(enumverbs);
+ CoTaskMemFree(usertype);
return TRUE;
}
@@ -246,9 +243,16 @@ BOOL WINAPI OleUIAddVerbMenuW(IOleObject *object, LPCWSTR shorttype,
*ret_submenu = submenu;
/* now submenu is ready, add root entry to original menu, attach submenu */
- InsertMenuW(hMenu, uPos, MF_BYPOSITION|MF_POPUP|MF_STRING, (UINT_PTR)submenu, rootname);
+ LoadStringW(OLEDLG_hInstance, IDS_VERBMENU_OBJECT_WITH_NAME, resstrW, sizeof(resstrW)/sizeof(WCHAR));
+
+ args[0] = (DWORD_PTR)objecttype;
+ FormatMessageW(FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_ARGUMENT_ARRAY,
+ resstrW, 0, 0, (WCHAR*)&str, 0, (__ms_va_list*)args);
+
+ InsertMenuW(hMenu, uPos, MF_BYPOSITION|MF_POPUP|MF_STRING, (UINT_PTR)submenu, str);
+ HeapFree(GetProcessHeap(), 0, str);
IEnumOLEVERB_Release(enumverbs);
- CoTaskMemFree(rootname);
+ CoTaskMemFree(usertype);
return TRUE;
}
diff --git a/dlls/oledlg/resource.h b/dlls/oledlg/resource.h
index 04a757a..2b6a178 100644
--- a/dlls/oledlg/resource.h
+++ b/dlls/oledlg/resource.h
@@ -43,6 +43,8 @@
/* String ids for verb menu */
#define IDS_VERBMENU_CONVERT 0x130
+#define IDS_VERBMENU_SINGLEVERB_OBJECT 0x132
+#define IDS_VERBMENU_OBJECT_WITH_NAME 0x134
#define IDS_VERBMENU_OBJECT 0x135
/* String ids for Paste Special */
--
2.1.4
More information about the wine-patches
mailing list