[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