Alexander Nicolaysen Sørnes : shdocvw: Add View menu to IE with list of installed toolbars.

Alexandre Julliard julliard at winehq.org
Wed Aug 4 12:27:20 CDT 2010


Module: wine
Branch: master
Commit: 6d381a4cf594e020e1a9ce540088c24768c73638
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6d381a4cf594e020e1a9ce540088c24768c73638

Author: Alexander Nicolaysen Sørnes <alex at thehandofagony.com>
Date:   Tue Aug  3 13:56:56 2010 +0200

shdocvw: Add View menu to IE with list of installed toolbars.

---

 dlls/shdocvw/En.rc      |    8 +++++
 dlls/shdocvw/iexplore.c |   78 ++++++++++++++++++++++++++++++++++++++++++++++-
 dlls/shdocvw/resource.h |    3 ++
 3 files changed, 88 insertions(+), 1 deletions(-)

diff --git a/dlls/shdocvw/En.rc b/dlls/shdocvw/En.rc
index 014245b..0d55909 100644
--- a/dlls/shdocvw/En.rc
+++ b/dlls/shdocvw/En.rc
@@ -50,6 +50,14 @@ IDR_BROWSE_MAIN_MENU MENU
         MENUITEM SEPARATOR
         MENUITEM "&Properties...",              ID_BROWSE_PROPERTIES
     }
+    POPUP "&View"
+    {
+        POPUP "&Toolbars"
+        {
+            MENUITEM "&Standard bar"            ID_BROWSE_BAR_STD
+            MENUITEM "&Address bar"             ID_BROWSE_BAR_ADDR
+        }
+    }
     POPUP "&Favorites"
     {
         MENUITEM "&Add to Favorites..."         ID_BROWSE_ADDFAV
diff --git a/dlls/shdocvw/iexplore.c b/dlls/shdocvw/iexplore.c
index c8b93af..59f9173 100644
--- a/dlls/shdocvw/iexplore.c
+++ b/dlls/shdocvw/iexplore.c
@@ -78,9 +78,16 @@ void adjust_ie_docobj_rect(HWND frame, RECT* rc)
     }
 }
 
+static HMENU get_tb_menu(HMENU menu)
+{
+    HMENU menu_view = GetSubMenu(menu, 1);
+
+    return GetSubMenu(menu_view, 0);
+}
+
 static HMENU get_fav_menu(HMENU menu)
 {
-    return GetSubMenu(menu, 1);
+    return GetSubMenu(menu, 2);
 }
 
 static LPWSTR get_fav_url_from_id(HMENU menu, UINT id)
@@ -234,12 +241,81 @@ static void add_favs_to_menu(HMENU favmenu, HMENU menu, LPCWSTR dir)
     FindClose(findhandle);
 }
 
+static void add_tbs_to_menu(HMENU menu)
+{
+    HUSKEY toolbar_handle;
+    WCHAR toolbar_key[] = {'S','o','f','t','w','a','r','e','\\',
+                           'M','i','c','r','o','s','o','f','t','\\',
+                           'I','n','t','e','r','n','e','t',' ',
+                           'E','x','p','l','o','r','e','r','\\',
+                           'T','o','o','l','b','a','r',0};
+
+    if(SHRegOpenUSKeyW(toolbar_key, KEY_READ, NULL, &toolbar_handle, TRUE) == ERROR_SUCCESS)
+    {
+        HUSKEY classes_handle;
+        WCHAR classes_key[] = {'S','o','f','t','w','a','r','e','\\',
+                               'C','l','a','s','s','e','s','\\','C','L','S','I','D',0};
+        WCHAR guid[39];
+        DWORD value_len = sizeof(guid)/sizeof(guid[0]);
+        int i;
+
+        if(SHRegOpenUSKeyW(classes_key, KEY_READ, NULL, &classes_handle, TRUE) != ERROR_SUCCESS)
+        {
+            SHRegCloseUSKey(toolbar_handle);
+            ERR("Failed to open key %s\n", debugstr_w(classes_key));
+            return;
+        }
+
+        for(i = 0; SHRegEnumUSValueW(toolbar_handle, i, guid, &value_len, NULL, NULL, NULL, SHREGENUM_HKLM) == ERROR_SUCCESS; i++)
+        {
+            WCHAR tb_name[100];
+            DWORD tb_name_len = sizeof(tb_name)/sizeof(tb_name[0]);
+            HUSKEY tb_class_handle;
+            MENUITEMINFOW item;
+            LSTATUS ret;
+            value_len = sizeof(guid)/sizeof(guid[0]);
+
+            if(lstrlenW(guid) != 38)
+            {
+                TRACE("Found invalid IE toolbar entry: %s\n", debugstr_w(guid));
+                continue;
+            }
+
+            if(SHRegOpenUSKeyW(guid, KEY_READ, classes_handle, &tb_class_handle, TRUE) != ERROR_SUCCESS)
+            {
+                ERR("Failed to get class info for %s\n", debugstr_w(guid));
+                continue;
+            }
+
+            ret = SHRegQueryUSValueW(tb_class_handle, NULL, NULL, tb_name, &tb_name_len, TRUE, NULL, 0);
+
+            SHRegCloseUSKey(tb_class_handle);
+
+            if(ret != ERROR_SUCCESS)
+            {
+                ERR("Failed to get toolbar name for %s\n", debugstr_w(guid));
+                continue;
+            }
+
+            item.cbSize = sizeof(item);
+            item.fMask = MIIM_STRING;
+            item.dwTypeData = tb_name;
+            InsertMenuItemW(menu, GetMenuItemCount(menu), TRUE, &item);
+        }
+
+        SHRegCloseUSKey(classes_handle);
+        SHRegCloseUSKey(toolbar_handle);
+    }
+}
+
 static HMENU create_ie_menu(void)
 {
     HMENU menu = LoadMenuW(shdocvw_hinstance, MAKEINTRESOURCEW(IDR_BROWSE_MAIN_MENU));
     HMENU favmenu = get_fav_menu(menu);
     WCHAR path[MAX_PATH];
 
+    add_tbs_to_menu(get_tb_menu(menu));
+
     if(SHGetFolderPathW(NULL, CSIDL_COMMON_FAVORITES, NULL, SHGFP_TYPE_CURRENT, path) == S_OK)
         add_favs_to_menu(favmenu, favmenu, path);
 
diff --git a/dlls/shdocvw/resource.h b/dlls/shdocvw/resource.h
index c313ef7..e18a9c0 100644
--- a/dlls/shdocvw/resource.h
+++ b/dlls/shdocvw/resource.h
@@ -43,6 +43,9 @@
 #define ID_BROWSE_ADDFAV               1200
 #define ID_BROWSE_HOME                 1201
 
+#define ID_BROWSE_BAR_STD              1300
+#define ID_BROWSE_BAR_ADDR             1301
+
 #define ID_BROWSE_GOTOFAV_FIRST        2000
 #define ID_BROWSE_GOTOFAV_MAX          65000
 




More information about the wine-cvs mailing list