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