https://git.reactos.org/?p=reactos.git;a=commitdiff;h=960a305e5c5f503363d7cc8914d1839b61b0187a
commit 960a305e5c5f503363d7cc8914d1839b61b0187a Author: Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com> AuthorDate: Fri Aug 2 04:12:02 2024 +0900 Commit: GitHub <nore...@github.com> CommitDate: Fri Aug 2 04:12:02 2024 +0900 [BROWSEUI][SHDOCVW] Move CExplorerBand to shdocvw (#7163) CExplorerBand should be implemented in shdocvw.dll. https://github.com/reactos/reactos/blob/894ad4f17d119d312d4ae816cb41db12369389e8/modules/rostests/apitests/com/shdocvw.c#L37 JIRA issue: CORE-19698 - Move CExplorerBand code from browseui to shdocvw. - Delete IDS_FOLDERSLABEL resource string from browseui. - Add IDS_FOLDERSLABEL resource string to shdocvw. - Adapt code to these changes. - Add sdk/include/reactos/ shdocvw_undoc.h. - Implement IEILIsEqual function. --- dll/win32/browseui/CMakeLists.txt | 2 - dll/win32/browseui/browseui.cpp | 2 +- dll/win32/browseui/browseui.h | 2 +- dll/win32/browseui/browseui.rc | 1 - dll/win32/browseui/lang/bg-BG.rc | 5 -- dll/win32/browseui/lang/de-DE.rc | 5 -- dll/win32/browseui/lang/en-US.rc | 5 -- dll/win32/browseui/lang/es-ES.rc | 5 -- dll/win32/browseui/lang/et-EE.rc | 5 -- dll/win32/browseui/lang/eu-ES.rc | 5 -- dll/win32/browseui/lang/fr-FR.rc | 5 -- dll/win32/browseui/lang/he-IL.rc | 5 -- dll/win32/browseui/lang/hi-IN.rc | 5 -- dll/win32/browseui/lang/hu-HU.rc | 5 -- dll/win32/browseui/lang/id-ID.rc | 5 -- dll/win32/browseui/lang/it-IT.rc | 5 -- dll/win32/browseui/lang/ja-JP.rc | 5 -- dll/win32/browseui/lang/pl-PL.rc | 5 -- dll/win32/browseui/lang/pt-BR.rc | 5 -- dll/win32/browseui/lang/pt-PT.rc | 5 -- dll/win32/browseui/lang/ro-RO.rc | 5 -- dll/win32/browseui/lang/ru-RU.rc | 5 -- dll/win32/browseui/lang/sq-AL.rc | 5 -- dll/win32/browseui/lang/tr-TR.rc | 5 -- dll/win32/browseui/lang/uk-UA.rc | 5 -- dll/win32/browseui/lang/zh-CN.rc | 5 -- dll/win32/browseui/lang/zh-TW.rc | 5 -- dll/win32/browseui/precomp.h | 1 - dll/win32/browseui/resource.h | 1 - dll/win32/browseui/utility.h | 8 -- .../explorerband.cpp => shdocvw/CExplorerBand.cpp} | 10 +-- .../explorerband.h => shdocvw/CExplorerBand.h} | 0 dll/win32/shdocvw/CFavBand.cpp | 83 +----------------- dll/win32/shdocvw/CFavBand.h | 6 -- dll/win32/shdocvw/CMakeLists.txt | 10 ++- dll/win32/shdocvw/lang/bg-BG.rc | 9 ++ dll/win32/shdocvw/lang/de-DE.rc | 9 ++ dll/win32/shdocvw/lang/en-US.rc | 5 +- dll/win32/shdocvw/lang/es-ES.rc | 9 ++ dll/win32/shdocvw/lang/et-EE.rc | 9 ++ dll/win32/shdocvw/lang/eu-ES.rc | 9 ++ dll/win32/shdocvw/lang/fr-FR.rc | 9 ++ dll/win32/shdocvw/lang/he-IL.rc | 9 ++ dll/win32/shdocvw/lang/hi-IN.rc | 9 ++ dll/win32/shdocvw/lang/hu-HU.rc | 9 ++ dll/win32/shdocvw/lang/id-ID.rc | 9 ++ dll/win32/shdocvw/lang/it-IT.rc | 9 ++ dll/win32/shdocvw/lang/ja-JP.rc | 9 ++ dll/win32/shdocvw/lang/pl-PL.rc | 9 ++ dll/win32/shdocvw/lang/pt-BR.rc | 9 ++ dll/win32/shdocvw/lang/pt-PT.rc | 9 ++ dll/win32/shdocvw/lang/ro-RO.rc | 9 ++ dll/win32/shdocvw/lang/ru-RU.rc | 9 ++ dll/win32/shdocvw/lang/sq-AL.rc | 9 ++ dll/win32/shdocvw/lang/tr-TR.rc | 9 ++ dll/win32/shdocvw/lang/uk-UA.rc | 9 ++ dll/win32/shdocvw/lang/zh-CN.rc | 9 ++ dll/win32/shdocvw/lang/zh-TW.rc | 9 ++ dll/win32/shdocvw/mrulist.cpp | 42 ++------- dll/win32/shdocvw/objects.cpp | 99 ++++++++++++++++++++++ dll/win32/shdocvw/objects.h | 42 +++++++++ .../{browseui => shdocvw}/res/explorerband.rgs | 0 dll/win32/shdocvw/{ => res}/favband.rgs | 0 dll/win32/shdocvw/{ => res}/shdocvw_v1.idl | 0 dll/win32/shdocvw/{ => res}/shdocvw_v1.rgs | 0 dll/win32/shdocvw/resource.h | 6 +- dll/win32/shdocvw/shdocvw.h | 9 +- dll/win32/shdocvw/shdocvw.rc | 73 +++++++++++++++- dll/win32/shdocvw/shdocvw.spec | 2 +- dll/win32/shdocvw/shdocvw_main.c | 30 ++----- dll/win32/{browseui => shdocvw}/utility.cpp | 60 ++++++++----- dll/win32/shdocvw/utility.h | 13 +++ sdk/include/reactos/shdocvw_undoc.h | 22 +++++ 73 files changed, 523 insertions(+), 319 deletions(-) diff --git a/dll/win32/browseui/CMakeLists.txt b/dll/win32/browseui/CMakeLists.txt index 83a78e085dc..e420dc69686 100644 --- a/dll/win32/browseui/CMakeLists.txt +++ b/dll/win32/browseui/CMakeLists.txt @@ -25,7 +25,6 @@ list(APPEND SOURCE CTaskbarList.h commonbrowser.cpp desktopipc.cpp - explorerband.cpp globalfoldersettings.cpp internettoolbar.cpp parsecmdline.cpp @@ -34,7 +33,6 @@ list(APPEND SOURCE shellbrowser.cpp toolsband.cpp travellog.cpp - utility.cpp CProgressDialog.cpp CUserAssist.cpp CUserAssist.h) diff --git a/dll/win32/browseui/browseui.cpp b/dll/win32/browseui/browseui.cpp index 8634429bfc9..80812ba7d25 100644 --- a/dll/win32/browseui/browseui.cpp +++ b/dll/win32/browseui/browseui.cpp @@ -153,7 +153,7 @@ OBJECT_ENTRY(CLSID_InternetToolbar, CInternetToolbar) OBJECT_ENTRY(CLSID_CRegTreeOptions, CRegTreeOptions) OBJECT_ENTRY(CLSID_ShellTaskScheduler, CShellTaskScheduler) OBJECT_ENTRY(CLSID_TaskbarList, CTaskbarList) -OBJECT_ENTRY(CLSID_ExplorerBand, CExplorerBand) +//OBJECT_ENTRY(CLSID_ExplorerBand, CExplorerBand) // Moved to shdocvw.dll OBJECT_ENTRY(CLSID_FileSearchBand, CSearchBar) OBJECT_ENTRY(CLSID_ProgressDialog, CProgressDialog) OBJECT_ENTRY(CLSID_ISFBand, CISFBand) diff --git a/dll/win32/browseui/browseui.h b/dll/win32/browseui/browseui.h index 46907ad0ad7..9702bd5fa88 100644 --- a/dll/win32/browseui/browseui.h +++ b/dll/win32/browseui/browseui.h @@ -6,7 +6,7 @@ #define USE_CUSTOM_ADDRESSEDITBOX 1 #define USE_CUSTOM_BANDPROXY 1 #define USE_CUSTOM_BRANDBAND 1 -#define USE_CUSTOM_EXPLORERBAND 1 +#define USE_CUSTOM_EXPLORERBAND 0 // Moved to shdocvw.dll #define USE_CUSTOM_SEARCHBAND 1 #define USE_CUSTOM_INTERNETTOOLBAR 1 diff --git a/dll/win32/browseui/browseui.rc b/dll/win32/browseui/browseui.rc index 789486938cb..0db5999a2c1 100644 --- a/dll/win32/browseui/browseui.rc +++ b/dll/win32/browseui/browseui.rc @@ -43,7 +43,6 @@ IDR_GLOBALFOLDERSETTINGS REGISTRY "res/globalfoldersettings.rgs" IDR_INTERNETTOOLBAR REGISTRY "res/internettoolbar.rgs" IDR_REGTREEOPTIONS REGISTRY "res/regtreeoptions.rgs" IDR_SHELLTASKSCHEDULER REGISTRY "res/shelltaskscheduler.rgs" -IDR_EXPLORERBAND REGISTRY "res/explorerband.rgs" IDR_PROGRESSDIALOG REGISTRY "res/progressdialog.rgs" IDR_AUTOCOMPLETE REGISTRY "res/autocomplete.rgs" IDR_ACLISTISF REGISTRY "res/shellautocomplete.rgs" diff --git a/dll/win32/browseui/lang/bg-BG.rc b/dll/win32/browseui/lang/bg-BG.rc index 85eb1cd35eb..37dbe925083 100644 --- a/dll/win32/browseui/lang/bg-BG.rc +++ b/dll/win32/browseui/lang/bg-BG.rc @@ -291,11 +291,6 @@ BEGIN IDS_ADDRESSBANDLABEL "&Адрес" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "Папки" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Адрес" diff --git a/dll/win32/browseui/lang/de-DE.rc b/dll/win32/browseui/lang/de-DE.rc index c38adff1d86..825dc9b7962 100644 --- a/dll/win32/browseui/lang/de-DE.rc +++ b/dll/win32/browseui/lang/de-DE.rc @@ -298,11 +298,6 @@ BEGIN IDS_ADDRESSBANDLABEL "Adre&sse" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "Ordner" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Address" diff --git a/dll/win32/browseui/lang/en-US.rc b/dll/win32/browseui/lang/en-US.rc index 0cc96a612a8..64098afe576 100644 --- a/dll/win32/browseui/lang/en-US.rc +++ b/dll/win32/browseui/lang/en-US.rc @@ -309,11 +309,6 @@ BEGIN IDS_ADDRESSBANDLABEL "A&ddress" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "Folders" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Address" diff --git a/dll/win32/browseui/lang/es-ES.rc b/dll/win32/browseui/lang/es-ES.rc index 97be2a77f22..567ff90a0bc 100644 --- a/dll/win32/browseui/lang/es-ES.rc +++ b/dll/win32/browseui/lang/es-ES.rc @@ -300,11 +300,6 @@ BEGIN IDS_ADDRESSBANDLABEL "Dire&cción" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "Carpetas" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Address" diff --git a/dll/win32/browseui/lang/et-EE.rc b/dll/win32/browseui/lang/et-EE.rc index 692178b4aeb..3cd0d001535 100644 --- a/dll/win32/browseui/lang/et-EE.rc +++ b/dll/win32/browseui/lang/et-EE.rc @@ -298,11 +298,6 @@ BEGIN IDS_ADDRESSBANDLABEL "Aa&dress" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "Kaustad" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Address" diff --git a/dll/win32/browseui/lang/eu-ES.rc b/dll/win32/browseui/lang/eu-ES.rc index 71f1a4b89da..19aa87830de 100644 --- a/dll/win32/browseui/lang/eu-ES.rc +++ b/dll/win32/browseui/lang/eu-ES.rc @@ -298,11 +298,6 @@ BEGIN IDS_ADDRESSBANDLABEL "Dire&cción" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "Carpetas" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Address" diff --git a/dll/win32/browseui/lang/fr-FR.rc b/dll/win32/browseui/lang/fr-FR.rc index dc4eec607ae..63dd8eb93b7 100644 --- a/dll/win32/browseui/lang/fr-FR.rc +++ b/dll/win32/browseui/lang/fr-FR.rc @@ -309,11 +309,6 @@ BEGIN IDS_ADDRESSBANDLABEL "A&dresse" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "Dossiers" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Address" diff --git a/dll/win32/browseui/lang/he-IL.rc b/dll/win32/browseui/lang/he-IL.rc index d8514bd5b2a..30c0a9c8f5c 100644 --- a/dll/win32/browseui/lang/he-IL.rc +++ b/dll/win32/browseui/lang/he-IL.rc @@ -293,11 +293,6 @@ BEGIN IDS_ADDRESSBANDLABEL "&כתובת" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "תיקיות" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Address" diff --git a/dll/win32/browseui/lang/hi-IN.rc b/dll/win32/browseui/lang/hi-IN.rc index a9869c7f850..a26363efd33 100644 --- a/dll/win32/browseui/lang/hi-IN.rc +++ b/dll/win32/browseui/lang/hi-IN.rc @@ -291,11 +291,6 @@ BEGIN IDS_ADDRESSBANDLABEL "&एड्रेस" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "फ़ोल्डरों" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Address" diff --git a/dll/win32/browseui/lang/hu-HU.rc b/dll/win32/browseui/lang/hu-HU.rc index 6e3a31ac28f..463c43710a6 100644 --- a/dll/win32/browseui/lang/hu-HU.rc +++ b/dll/win32/browseui/lang/hu-HU.rc @@ -309,11 +309,6 @@ BEGIN IDS_ADDRESSBANDLABEL "&Cím" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "Mappák" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Cím" diff --git a/dll/win32/browseui/lang/id-ID.rc b/dll/win32/browseui/lang/id-ID.rc index 317e25762ee..c1d397fd70f 100644 --- a/dll/win32/browseui/lang/id-ID.rc +++ b/dll/win32/browseui/lang/id-ID.rc @@ -310,11 +310,6 @@ BEGIN IDS_ADDRESSBANDLABEL "A&lamat" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "Folder" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Alamat" diff --git a/dll/win32/browseui/lang/it-IT.rc b/dll/win32/browseui/lang/it-IT.rc index 5138b3cece3..e0813a0cf7f 100644 --- a/dll/win32/browseui/lang/it-IT.rc +++ b/dll/win32/browseui/lang/it-IT.rc @@ -291,11 +291,6 @@ BEGIN IDS_ADDRESSBANDLABEL "Indirizzo" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "Cartelle" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Indirizzo" diff --git a/dll/win32/browseui/lang/ja-JP.rc b/dll/win32/browseui/lang/ja-JP.rc index 4ffed19d1b7..ea4f0583ea7 100644 --- a/dll/win32/browseui/lang/ja-JP.rc +++ b/dll/win32/browseui/lang/ja-JP.rc @@ -309,11 +309,6 @@ BEGIN IDS_ADDRESSBANDLABEL "アドレス(&D)" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "フォルダー" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "アドレス(&A)" diff --git a/dll/win32/browseui/lang/pl-PL.rc b/dll/win32/browseui/lang/pl-PL.rc index b9aa53ff175..f7526430f54 100644 --- a/dll/win32/browseui/lang/pl-PL.rc +++ b/dll/win32/browseui/lang/pl-PL.rc @@ -300,11 +300,6 @@ BEGIN IDS_ADDRESSBANDLABEL "A&dres" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "Foldery" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Adres" diff --git a/dll/win32/browseui/lang/pt-BR.rc b/dll/win32/browseui/lang/pt-BR.rc index 845176e3e43..1a49d763777 100644 --- a/dll/win32/browseui/lang/pt-BR.rc +++ b/dll/win32/browseui/lang/pt-BR.rc @@ -293,11 +293,6 @@ BEGIN IDS_ADDRESSBANDLABEL "E&ndereço" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "Pastas" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Address" diff --git a/dll/win32/browseui/lang/pt-PT.rc b/dll/win32/browseui/lang/pt-PT.rc index 2d4b6d03f69..961b84e66a9 100644 --- a/dll/win32/browseui/lang/pt-PT.rc +++ b/dll/win32/browseui/lang/pt-PT.rc @@ -293,11 +293,6 @@ BEGIN IDS_ADDRESSBANDLABEL "E&ndereço" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "Pastas" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Address" diff --git a/dll/win32/browseui/lang/ro-RO.rc b/dll/win32/browseui/lang/ro-RO.rc index ea065d92cfa..3ce2a8fa364 100644 --- a/dll/win32/browseui/lang/ro-RO.rc +++ b/dll/win32/browseui/lang/ro-RO.rc @@ -299,11 +299,6 @@ BEGIN IDS_ADDRESSBANDLABEL "A&dresă" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "Foldere" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Adresă" diff --git a/dll/win32/browseui/lang/ru-RU.rc b/dll/win32/browseui/lang/ru-RU.rc index 582a53e31ac..c4eeffd39e9 100644 --- a/dll/win32/browseui/lang/ru-RU.rc +++ b/dll/win32/browseui/lang/ru-RU.rc @@ -300,11 +300,6 @@ BEGIN IDS_ADDRESSBANDLABEL "А&дрес" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "Папки" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Адрес" diff --git a/dll/win32/browseui/lang/sq-AL.rc b/dll/win32/browseui/lang/sq-AL.rc index 1d34450e988..0298e254089 100644 --- a/dll/win32/browseui/lang/sq-AL.rc +++ b/dll/win32/browseui/lang/sq-AL.rc @@ -310,11 +310,6 @@ BEGIN IDS_ADDRESSBANDLABEL "A&dresa" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "Dosje" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Address" diff --git a/dll/win32/browseui/lang/tr-TR.rc b/dll/win32/browseui/lang/tr-TR.rc index 5578a1e2f75..71039340ddd 100644 --- a/dll/win32/browseui/lang/tr-TR.rc +++ b/dll/win32/browseui/lang/tr-TR.rc @@ -293,11 +293,6 @@ BEGIN IDS_ADDRESSBANDLABEL "A&dres" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "Dizinler" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Address" diff --git a/dll/win32/browseui/lang/uk-UA.rc b/dll/win32/browseui/lang/uk-UA.rc index 9e606fa86b8..a5dc172200c 100644 --- a/dll/win32/browseui/lang/uk-UA.rc +++ b/dll/win32/browseui/lang/uk-UA.rc @@ -299,11 +299,6 @@ BEGIN IDS_ADDRESSBANDLABEL "А&дреса" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "Папки" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Address" diff --git a/dll/win32/browseui/lang/zh-CN.rc b/dll/win32/browseui/lang/zh-CN.rc index b5b58963be5..86c1ca80181 100644 --- a/dll/win32/browseui/lang/zh-CN.rc +++ b/dll/win32/browseui/lang/zh-CN.rc @@ -313,11 +313,6 @@ BEGIN IDS_ADDRESSBANDLABEL "地址(&D)" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "文件夹" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "地址(&A)" diff --git a/dll/win32/browseui/lang/zh-TW.rc b/dll/win32/browseui/lang/zh-TW.rc index 89b59c0672a..15665202889 100644 --- a/dll/win32/browseui/lang/zh-TW.rc +++ b/dll/win32/browseui/lang/zh-TW.rc @@ -315,11 +315,6 @@ BEGIN IDS_ADDRESSBANDLABEL "網址(&D)" END -STRINGTABLE -BEGIN - IDS_FOLDERSLABEL "資料夾" -END - STRINGTABLE BEGIN IDS_ADDRESSMENUTEXT "&Address" diff --git a/dll/win32/browseui/precomp.h b/dll/win32/browseui/precomp.h index cfed44eef59..a3175a99156 100644 --- a/dll/win32/browseui/precomp.h +++ b/dll/win32/browseui/precomp.h @@ -58,7 +58,6 @@ #include "regtreeoptions.h" #include "CShellTaskScheduler.h" #include "CTaskbarList.h" -#include "explorerband.h" #include "CProgressDialog.h" #include "CUserAssist.h" #include "browseui.h" diff --git a/dll/win32/browseui/resource.h b/dll/win32/browseui/resource.h index fecbd49a2df..ca58cf9651c 100644 --- a/dll/win32/browseui/resource.h +++ b/dll/win32/browseui/resource.h @@ -125,7 +125,6 @@ #define IDS_SEARCHLABEL 12897 #define IDS_STANDARD_TOOLBAR 12624 #define IDS_ADDRESSBANDLABEL 12902 -#define IDS_FOLDERSLABEL 12919 #define IDS_ADDRESSMENUTEXT 13137 #define IDS_HISTORYTEXT 13169 #define IDS_UP 58434 diff --git a/dll/win32/browseui/utility.h b/dll/win32/browseui/utility.h deleted file mode 100644 index b40d18c34a4..00000000000 --- a/dll/win32/browseui/utility.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -void *operator new(size_t size); -void operator delete(void *p); - -HRESULT SHELL_GetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl); -BOOL SHELL_IsEqualAbsoluteID(PCIDLIST_ABSOLUTE a, PCIDLIST_ABSOLUTE b); -BOOL SHELL_IsVerb(IContextMenu *pcm, UINT_PTR idCmd, LPCWSTR Verb); diff --git a/dll/win32/browseui/explorerband.cpp b/dll/win32/shdocvw/CExplorerBand.cpp similarity index 99% rename from dll/win32/browseui/explorerband.cpp rename to dll/win32/shdocvw/CExplorerBand.cpp index 5922c74f612..ab65442d847 100644 --- a/dll/win32/browseui/explorerband.cpp +++ b/dll/win32/shdocvw/CExplorerBand.cpp @@ -6,16 +6,12 @@ * Copyright 2020-2024 Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com> */ -#include "precomp.h" +#include "objects.h" #include <commoncontrols.h> #include <undocshell.h> -#include "utility.h" -#if 1 -#undef UNIMPLEMENTED - -#define UNIMPLEMENTED DbgPrint("%s is UNIMPLEMENTED!\n", __FUNCTION__) -#endif +#include <wine/debug.h> +WINE_DEFAULT_DEBUG_CHANNEL(shdocvw); /* * TODO: diff --git a/dll/win32/browseui/explorerband.h b/dll/win32/shdocvw/CExplorerBand.h similarity index 100% rename from dll/win32/browseui/explorerband.h rename to dll/win32/shdocvw/CExplorerBand.h diff --git a/dll/win32/shdocvw/CFavBand.cpp b/dll/win32/shdocvw/CFavBand.cpp index b839f2cfdcd..38e7a4ebbdc 100644 --- a/dll/win32/shdocvw/CFavBand.cpp +++ b/dll/win32/shdocvw/CFavBand.cpp @@ -5,47 +5,11 @@ * COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com> */ -#include <windows.h> -#include <shlobj.h> -#include <shlwapi.h> -#include <atlbase.h> -#include <atlcom.h> -#include <atlwin.h> -#include <undocshell.h> -#include <shlobj_undoc.h> -#include <shlguid_undoc.h> -#include <shlwapi_undoc.h> -#include <shdeprecated.h> -#include <olectlid.h> -#include <exdispid.h> -#include <shellutils.h> -#include <ui/rosctrls.h> -#include "shdocvw.h" -#include "CFavBand.h" +#include "objects.h" #include <wine/debug.h> WINE_DEFAULT_DEBUG_CHANNEL(shdocvw); -void *operator new(size_t size) -{ - return ::LocalAlloc(LPTR, size); -} - -void operator delete(void *ptr) -{ - ::LocalFree(ptr); -} - -void operator delete(void *ptr, size_t size) -{ - ::LocalFree(ptr); -} - -#if 1 -#undef UNIMPLEMENTED -#define UNIMPLEMENTED ERR("%s is UNIMPLEMENTED!\n", __FUNCTION__) -#endif - CFavBand::CFavBand() : m_fVisible(FALSE) , m_bFocused(FALSE) @@ -53,7 +17,7 @@ CFavBand::CFavBand() , m_hToolbarImageList(NULL) , m_hTreeViewImageList(NULL) { - ::InterlockedIncrement(&SHDOCVW_refCount); + SHDOCVW_LockModule(); SHGetSpecialFolderLocation(NULL, CSIDL_FAVORITES, &m_pidlFav); } @@ -69,7 +33,7 @@ CFavBand::~CFavBand() ImageList_Destroy(m_hTreeViewImageList); m_hTreeViewImageList = NULL; } - ::InterlockedDecrement(&SHDOCVW_refCount); + SHDOCVW_UnlockModule(); } VOID CFavBand::OnFinalMessage(HWND) @@ -615,44 +579,3 @@ STDMETHODIMP CFavBand::Invoke( } return E_INVALIDARG; } - -BEGIN_OBJECT_MAP(ObjectMap) - OBJECT_ENTRY(CLSID_SH_FavBand, CFavBand) -END_OBJECT_MAP() - -class CFavBandModule : public CComModule -{ -public: -}; - -static CFavBandModule gModule; - -EXTERN_C VOID -CFavBand_Init(HINSTANCE hInstance) -{ - gModule.Init(ObjectMap, hInstance, NULL); -} - -EXTERN_C HRESULT -CFavBand_DllCanUnloadNow(VOID) -{ - return gModule.DllCanUnloadNow(); -} - -EXTERN_C HRESULT -CFavBand_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) -{ - return gModule.DllGetClassObject(rclsid, riid, ppv); -} - -EXTERN_C HRESULT -CFavBand_DllRegisterServer(VOID) -{ - return gModule.DllRegisterServer(FALSE); -} - -EXTERN_C HRESULT -CFavBand_DllUnregisterServer(VOID) -{ - return gModule.DllUnregisterServer(FALSE); -} diff --git a/dll/win32/shdocvw/CFavBand.h b/dll/win32/shdocvw/CFavBand.h index 9386a309784..ff6f86c282e 100644 --- a/dll/win32/shdocvw/CFavBand.h +++ b/dll/win32/shdocvw/CFavBand.h @@ -7,12 +7,6 @@ #pragma once -EXTERN_C VOID CFavBand_Init(HINSTANCE hInstance); -EXTERN_C HRESULT CFavBand_DllCanUnloadNow(VOID); -EXTERN_C HRESULT CFavBand_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv); -EXTERN_C HRESULT CFavBand_DllRegisterServer(VOID); -EXTERN_C HRESULT CFavBand_DllUnregisterServer(VOID); - #define FAVBANDCLASSNAME L"ReactOS Favorites Band" #ifdef __cplusplus diff --git a/dll/win32/shdocvw/CMakeLists.txt b/dll/win32/shdocvw/CMakeLists.txt index 6110906a268..71ab7e8ddb3 100644 --- a/dll/win32/shdocvw/CMakeLists.txt +++ b/dll/win32/shdocvw/CMakeLists.txt @@ -10,12 +10,11 @@ list(APPEND SOURCE precomp.h ${CMAKE_CURRENT_BINARY_DIR}/shdocvw_stubs.c) -add_typelib(shdocvw_v1.idl) +add_typelib(res/shdocvw_v1.idl) set_source_files_properties(shdocvw.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/shdocvw_v1.tlb) add_library(shdocvw MODULE ${SOURCE} - mrulist.cpp shdocvw.rc $<TARGET_OBJECTS:shdocvw_sublib> ${CMAKE_CURRENT_BINARY_DIR}/shdocvw.def) @@ -32,7 +31,12 @@ add_dependencies(shdocvw stdole2) add_pch(shdocvw precomp.h SOURCE) add_cd_file(TARGET shdocvw DESTINATION reactos/system32 FOR all) -add_library(shdocvw_sublib OBJECT CFavBand.cpp) +add_library(shdocvw_sublib OBJECT + CExplorerBand.cpp + CFavBand.cpp + mrulist.cpp + objects.cpp + utility.cpp) target_link_libraries(shdocvw_sublib PRIVATE atl_classes) target_compile_definitions(shdocvw_sublib PRIVATE $<TARGET_PROPERTY:shdocvw,COMPILE_DEFINITIONS>) target_compile_options(shdocvw_sublib PRIVATE $<TARGET_PROPERTY:shdocvw,COMPILE_OPTIONS>) diff --git a/dll/win32/shdocvw/lang/bg-BG.rc b/dll/win32/shdocvw/lang/bg-BG.rc new file mode 100644 index 00000000000..f83e20b8019 --- /dev/null +++ b/dll/win32/shdocvw/lang/bg-BG.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "Папки" +END diff --git a/dll/win32/shdocvw/lang/de-DE.rc b/dll/win32/shdocvw/lang/de-DE.rc new file mode 100644 index 00000000000..3c9eac042ed --- /dev/null +++ b/dll/win32/shdocvw/lang/de-DE.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "Ordner" +END diff --git a/dll/win32/shdocvw/lang/en-US.rc b/dll/win32/shdocvw/lang/en-US.rc index a5691c65715..12d6bbe94dd 100644 --- a/dll/win32/shdocvw/lang/en-US.rc +++ b/dll/win32/shdocvw/lang/en-US.rc @@ -3,6 +3,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US STRINGTABLE BEGIN - IDS_ADD "Add" - IDS_ORGANIZE "Organize" + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "Folders" END diff --git a/dll/win32/shdocvw/lang/es-ES.rc b/dll/win32/shdocvw/lang/es-ES.rc new file mode 100644 index 00000000000..cedac65d717 --- /dev/null +++ b/dll/win32/shdocvw/lang/es-ES.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "Carpetas" +END diff --git a/dll/win32/shdocvw/lang/et-EE.rc b/dll/win32/shdocvw/lang/et-EE.rc new file mode 100644 index 00000000000..a3a46d82942 --- /dev/null +++ b/dll/win32/shdocvw/lang/et-EE.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_ESTONIAN, SUBLANG_DEFAULT + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "Kaustad" +END diff --git a/dll/win32/shdocvw/lang/eu-ES.rc b/dll/win32/shdocvw/lang/eu-ES.rc new file mode 100644 index 00000000000..6f37fee0a8e --- /dev/null +++ b/dll/win32/shdocvw/lang/eu-ES.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_BASQUE, SUBLANG_NEUTRAL + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "Carpetas" +END diff --git a/dll/win32/shdocvw/lang/fr-FR.rc b/dll/win32/shdocvw/lang/fr-FR.rc new file mode 100644 index 00000000000..3abed1c22b6 --- /dev/null +++ b/dll/win32/shdocvw/lang/fr-FR.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "Dossiers" +END diff --git a/dll/win32/shdocvw/lang/he-IL.rc b/dll/win32/shdocvw/lang/he-IL.rc new file mode 100644 index 00000000000..7a933a2f963 --- /dev/null +++ b/dll/win32/shdocvw/lang/he-IL.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "תיקיות" +END diff --git a/dll/win32/shdocvw/lang/hi-IN.rc b/dll/win32/shdocvw/lang/hi-IN.rc new file mode 100644 index 00000000000..91c4b047f50 --- /dev/null +++ b/dll/win32/shdocvw/lang/hi-IN.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_HINDI, SUBLANG_HINDI_INDIA + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "फ़ोल्डरों" +END diff --git a/dll/win32/shdocvw/lang/hu-HU.rc b/dll/win32/shdocvw/lang/hu-HU.rc new file mode 100644 index 00000000000..257148a8114 --- /dev/null +++ b/dll/win32/shdocvw/lang/hu-HU.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "Mappák" +END diff --git a/dll/win32/shdocvw/lang/id-ID.rc b/dll/win32/shdocvw/lang/id-ID.rc new file mode 100644 index 00000000000..de3b981a694 --- /dev/null +++ b/dll/win32/shdocvw/lang/id-ID.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "Folder" +END diff --git a/dll/win32/shdocvw/lang/it-IT.rc b/dll/win32/shdocvw/lang/it-IT.rc new file mode 100644 index 00000000000..80b1d4c8f37 --- /dev/null +++ b/dll/win32/shdocvw/lang/it-IT.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "Cartelle" +END diff --git a/dll/win32/shdocvw/lang/ja-JP.rc b/dll/win32/shdocvw/lang/ja-JP.rc new file mode 100644 index 00000000000..5b03707daa8 --- /dev/null +++ b/dll/win32/shdocvw/lang/ja-JP.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT + +STRINGTABLE +BEGIN + IDS_ADD "追加..." + IDS_ORGANIZE "整理..." + IDS_FOLDERSLABEL "フォルダー" +END diff --git a/dll/win32/shdocvw/lang/pl-PL.rc b/dll/win32/shdocvw/lang/pl-PL.rc new file mode 100644 index 00000000000..023ee07f7a4 --- /dev/null +++ b/dll/win32/shdocvw/lang/pl-PL.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_POLISH, SUBLANG_DEFAULT + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "Foldery" +END diff --git a/dll/win32/shdocvw/lang/pt-BR.rc b/dll/win32/shdocvw/lang/pt-BR.rc new file mode 100644 index 00000000000..8eb8b6bbf24 --- /dev/null +++ b/dll/win32/shdocvw/lang/pt-BR.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "Pastas" +END diff --git a/dll/win32/shdocvw/lang/pt-PT.rc b/dll/win32/shdocvw/lang/pt-PT.rc new file mode 100644 index 00000000000..ff2ed6ebeae --- /dev/null +++ b/dll/win32/shdocvw/lang/pt-PT.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "Pastas" +END diff --git a/dll/win32/shdocvw/lang/ro-RO.rc b/dll/win32/shdocvw/lang/ro-RO.rc new file mode 100644 index 00000000000..26a2005fb85 --- /dev/null +++ b/dll/win32/shdocvw/lang/ro-RO.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "Foldere" +END diff --git a/dll/win32/shdocvw/lang/ru-RU.rc b/dll/win32/shdocvw/lang/ru-RU.rc new file mode 100644 index 00000000000..b96b547feba --- /dev/null +++ b/dll/win32/shdocvw/lang/ru-RU.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "Папки" +END diff --git a/dll/win32/shdocvw/lang/sq-AL.rc b/dll/win32/shdocvw/lang/sq-AL.rc new file mode 100644 index 00000000000..9d5ec92b41e --- /dev/null +++ b/dll/win32/shdocvw/lang/sq-AL.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "Dosje" +END diff --git a/dll/win32/shdocvw/lang/tr-TR.rc b/dll/win32/shdocvw/lang/tr-TR.rc new file mode 100644 index 00000000000..1ff52043ffa --- /dev/null +++ b/dll/win32/shdocvw/lang/tr-TR.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "Dizinler" +END diff --git a/dll/win32/shdocvw/lang/uk-UA.rc b/dll/win32/shdocvw/lang/uk-UA.rc new file mode 100644 index 00000000000..d009579a7cd --- /dev/null +++ b/dll/win32/shdocvw/lang/uk-UA.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "Папки" +END diff --git a/dll/win32/shdocvw/lang/zh-CN.rc b/dll/win32/shdocvw/lang/zh-CN.rc new file mode 100644 index 00000000000..37f2630ac3e --- /dev/null +++ b/dll/win32/shdocvw/lang/zh-CN.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "文件夹" +END diff --git a/dll/win32/shdocvw/lang/zh-TW.rc b/dll/win32/shdocvw/lang/zh-TW.rc new file mode 100644 index 00000000000..b02ae00c74e --- /dev/null +++ b/dll/win32/shdocvw/lang/zh-TW.rc @@ -0,0 +1,9 @@ + +LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL + +STRINGTABLE +BEGIN + IDS_ADD "Add..." + IDS_ORGANIZE "Organize..." + IDS_FOLDERSLABEL "資料夾" +END diff --git a/dll/win32/shdocvw/mrulist.cpp b/dll/win32/shdocvw/mrulist.cpp index ba3fcb11fc2..5714e6e8ae5 100644 --- a/dll/win32/shdocvw/mrulist.cpp +++ b/dll/win32/shdocvw/mrulist.cpp @@ -7,21 +7,11 @@ #define COBJMACROS -#include <windef.h> -#include <winbase.h> -#include <winreg.h> -#include <objbase.h> -#include <oleauto.h> -#include <shlobj.h> -#include <shlobj_undoc.h> -#include <shlguid_undoc.h> -#include <shlwapi.h> -#include <shlwapi_undoc.h> +#include "objects.h" +#include <tchar.h> #include <strsafe.h> -#include "shdocvw.h" #include <wine/debug.h> - WINE_DEFAULT_DEBUG_CHANNEL(shdocvw); class CSafeMutex; @@ -32,22 +22,6 @@ class CMruBase; class CMruPidlList; class CMruClassFactory; -extern "C" void __cxa_pure_virtual(void) -{ - ERR("__cxa_pure_virtual\n"); - ::DebugBreak(); -} - -BOOL IEILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2, BOOL bUnknown) -{ - UINT cb1 = ILGetSize(pidl1), cb2 = ILGetSize(pidl2); - if (cb1 == cb2 && memcmp(pidl1, pidl2, cb1) == 0) - return TRUE; - - FIXME("%p, %p\n", pidl1, pidl2); - return FALSE; -} - // The flags for SLOTITEMDATA.dwFlags #define SLOT_LOADED 0x1 #define SLOT_SET 0x2 @@ -155,7 +129,7 @@ public: CMruBase::CMruBase() { - ::InterlockedIncrement(&SHDOCVW_refCount); + SHDOCVW_LockModule(); } CMruBase::~CMruBase() @@ -176,7 +150,7 @@ CMruBase::~CMruBase() m_pSlots = (SLOTITEMDATA*)::LocalFree(m_pSlots); } - ::InterlockedDecrement(&SHDOCVW_refCount); + SHDOCVW_UnlockModule(); } STDMETHODIMP CMruBase::QueryInterface(REFIID riid, void **ppvObj) @@ -1321,11 +1295,11 @@ protected: public: CMruClassFactory() { - ::InterlockedIncrement(&SHDOCVW_refCount); + SHDOCVW_LockModule(); } virtual ~CMruClassFactory() { - ::InterlockedDecrement(&SHDOCVW_refCount); + SHDOCVW_UnlockModule(); } // IUnknown methods @@ -1389,9 +1363,9 @@ STDMETHODIMP CMruClassFactory::CreateInstance(IUnknown *pUnkOuter, REFIID riid, STDMETHODIMP CMruClassFactory::LockServer(BOOL fLock) { if (fLock) - ::InterlockedIncrement(&SHDOCVW_refCount); + SHDOCVW_LockModule(); else - ::InterlockedDecrement(&SHDOCVW_refCount); + SHDOCVW_UnlockModule(); return S_OK; } diff --git a/dll/win32/shdocvw/objects.cpp b/dll/win32/shdocvw/objects.cpp new file mode 100644 index 00000000000..8891cb70260 --- /dev/null +++ b/dll/win32/shdocvw/objects.cpp @@ -0,0 +1,99 @@ +/* + * PROJECT: ReactOS Explorer + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: shdocvw.dll objects + * COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com> + */ + +#include "objects.h" + +#include <wine/debug.h> +WINE_DEFAULT_DEBUG_CHANNEL(shdocvw); + +void *operator new(size_t size) +{ + return ::LocalAlloc(LMEM_FIXED, size); +} + +void operator delete(void *ptr) +{ + ::LocalFree(ptr); +} + +void operator delete(void *ptr, size_t size) +{ + ::LocalFree(ptr); +} + +EXTERN_C void __cxa_pure_virtual(void) +{ + ERR("__cxa_pure_virtual\n"); + ::DebugBreak(); +} + +BEGIN_OBJECT_MAP(ObjectMap) + OBJECT_ENTRY(CLSID_SH_FavBand, CFavBand) + OBJECT_ENTRY(CLSID_ExplorerBand, CExplorerBand) +END_OBJECT_MAP() + +class SHDOCVW_Module : public CComModule +{ +public: +}; + +static SHDOCVW_Module gModule; + +EXTERN_C VOID +SHDOCVW_Init(HINSTANCE hInstance) +{ + gModule.Init(ObjectMap, hInstance, NULL); +} + +EXTERN_C HRESULT +SHDOCVW_DllCanUnloadNow(VOID) +{ + return gModule.DllCanUnloadNow(); +} + +EXTERN_C HRESULT CMruLongList_CreateInstance(DWORD_PTR dwUnused1, void **ppv, DWORD_PTR dwUnused3); +EXTERN_C HRESULT CMruPidlList_CreateInstance(DWORD_PTR dwUnused1, void **ppv, DWORD_PTR dwUnused3); +EXTERN_C HRESULT CMruClassFactory_CreateInstance(REFIID riid, void **ppv); + +EXTERN_C HRESULT +SHDOCVW_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) +{ + HRESULT hr = gModule.DllGetClassObject(rclsid, riid, ppv); + if (SUCCEEDED(hr)) + return hr; + + if (IsEqualGUID(riid, IID_IClassFactory) || IsEqualGUID(riid, IID_IUnknown)) + { + if (IsEqualGUID(rclsid, CLSID_MruLongList) || + IsEqualGUID(rclsid, CLSID_MruPidlList)) + { + return CMruClassFactory_CreateInstance(riid, ppv); + } + } + else if (IsEqualGUID(riid, IID_IMruDataList)) + { + return CMruLongList_CreateInstance(0, ppv, 0); + } + else if (IsEqualGUID(riid, IID_IMruPidlList)) + { + return CMruPidlList_CreateInstance(0, ppv, 0); + } + + return CLASS_E_CLASSNOTAVAILABLE; +} + +EXTERN_C HRESULT +SHDOCVW_DllRegisterServer(VOID) +{ + return gModule.DllRegisterServer(FALSE); +} + +EXTERN_C HRESULT +SHDOCVW_DllUnregisterServer(VOID) +{ + return gModule.DllUnregisterServer(FALSE); +} diff --git a/dll/win32/shdocvw/objects.h b/dll/win32/shdocvw/objects.h new file mode 100644 index 00000000000..91a02218f1e --- /dev/null +++ b/dll/win32/shdocvw/objects.h @@ -0,0 +1,42 @@ +/* + * PROJECT: ReactOS Explorer + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: shdocvw.dll objects + * COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com> + */ + +#pragma once + +#include <windows.h> +#include <shlobj.h> +#include <shlwapi.h> +#include <olectlid.h> +#include <exdispid.h> +#include "shdocvw.h" + +#ifdef __cplusplus +#include <atlbase.h> +#include <atlcom.h> +#include <atlwin.h> +#include <undocshell.h> +#include <shlobj_undoc.h> +#include <shlguid_undoc.h> +#include <shlwapi_undoc.h> +#include <shdocvw_undoc.h> +#include <shdeprecated.h> +#include <shellutils.h> +#include <ui/rosctrls.h> +#include "CExplorerBand.h" +#include "CFavBand.h" +#include "utility.h" +void *operator new(size_t size); +void operator delete(void *ptr); +void operator delete(void *ptr, size_t size); +EXTERN_C void __cxa_pure_virtual(void); +#endif /* def C++ */ + +EXTERN_C VOID SHDOCVW_Init(HINSTANCE hInstance); +EXTERN_C HRESULT SHDOCVW_DllCanUnloadNow(VOID); +EXTERN_C HRESULT SHDOCVW_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv); +EXTERN_C HRESULT SHDOCVW_DllRegisterServer(VOID); +EXTERN_C HRESULT SHDOCVW_DllUnregisterServer(VOID); diff --git a/dll/win32/browseui/res/explorerband.rgs b/dll/win32/shdocvw/res/explorerband.rgs similarity index 100% rename from dll/win32/browseui/res/explorerband.rgs rename to dll/win32/shdocvw/res/explorerband.rgs diff --git a/dll/win32/shdocvw/favband.rgs b/dll/win32/shdocvw/res/favband.rgs similarity index 100% rename from dll/win32/shdocvw/favband.rgs rename to dll/win32/shdocvw/res/favband.rgs diff --git a/dll/win32/shdocvw/shdocvw_v1.idl b/dll/win32/shdocvw/res/shdocvw_v1.idl similarity index 100% rename from dll/win32/shdocvw/shdocvw_v1.idl rename to dll/win32/shdocvw/res/shdocvw_v1.idl diff --git a/dll/win32/shdocvw/shdocvw_v1.rgs b/dll/win32/shdocvw/res/shdocvw_v1.rgs similarity index 100% rename from dll/win32/shdocvw/shdocvw_v1.rgs rename to dll/win32/shdocvw/res/shdocvw_v1.rgs diff --git a/dll/win32/shdocvw/resource.h b/dll/win32/shdocvw/resource.h index b7c1b8f1d0e..12e0b62ce5d 100644 --- a/dll/win32/shdocvw/resource.h +++ b/dll/win32/shdocvw/resource.h @@ -1,5 +1,6 @@ #define IDR_SHDOCVW 1 #define IDR_FAVBAND 2 +#define IDR_EXPLORERBAND 3 #define IDR_TYPELIB 1 #define IDW_TOOLBAR 2 @@ -8,5 +9,6 @@ #define ID_ADD 100 #define ID_ORGANIZE 101 -#define IDS_ADD 1000 -#define IDS_ORGANIZE 1001 +#define IDS_ADD 1000 +#define IDS_ORGANIZE 1001 +#define IDS_FOLDERSLABEL 1002 diff --git a/dll/win32/shdocvw/shdocvw.h b/dll/win32/shdocvw/shdocvw.h index 5119561691d..c086913518b 100644 --- a/dll/win32/shdocvw/shdocvw.h +++ b/dll/win32/shdocvw/shdocvw.h @@ -61,15 +61,8 @@ static inline void SHDOCVW_UnlockModule(void) { InterlockedDecrement( &SHDOCVW_r #ifdef __REACTOS__ #include "resource.h" -EXTERN_C HRESULT CMruLongList_CreateInstance(DWORD_PTR dwUnused1, void **ppv, DWORD_PTR dwUnused3); -EXTERN_C HRESULT CMruPidlList_CreateInstance(DWORD_PTR dwUnused1, void **ppv, DWORD_PTR dwUnused3); -EXTERN_C HRESULT CMruClassFactory_CreateInstance(REFIID riid, void **ppv); +#include "objects.h" #define ARRAY_SIZE(array) _countof(array) -#ifdef __cplusplus -void *operator new(size_t size); -void operator delete(void *ptr); -void operator delete(void *ptr, size_t size); -#endif EXTERN_C HINSTANCE instance; #endif // def __REACTOS__ diff --git a/dll/win32/shdocvw/shdocvw.rc b/dll/win32/shdocvw/shdocvw.rc index 4bbcdbd5889..0990bd00269 100644 --- a/dll/win32/shdocvw/shdocvw.rc +++ b/dll/win32/shdocvw/shdocvw.rc @@ -19,10 +19,9 @@ #include "windef.h" #include "resource.h" -IDR_SHDOCVW WINE_REGISTRY "shdocvw_v1.rgs" - -IDR_FAVBAND REGISTRY "favband.rgs" - +IDR_SHDOCVW WINE_REGISTRY "res/shdocvw_v1.rgs" +IDR_FAVBAND REGISTRY "res/favband.rgs" +IDR_EXPLORERBAND REGISTRY "res/explorerband.rgs" IDR_TYPELIB TYPELIB "shdocvw_v1.tlb" LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL @@ -40,6 +39,72 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL /* UTF-8 */ #pragma code_page(65001) +#ifdef LANGUAGE_BG_BG + #include "lang/bg-BG.rc" +#endif +#ifdef LANGUAGE_DE_DE + #include "lang/de-DE.rc" +#endif #ifdef LANGUAGE_EN_US #include "lang/en-US.rc" #endif +#ifdef LANGUAGE_ES_ES + #include "lang/es-ES.rc" +#endif +#ifdef LANGUAGE_ET_EE + #include "lang/et-EE.rc" +#endif +#ifdef LANGUAGE_EU_ES + #include "lang/eu-ES.rc" +#endif +#ifdef LANGUAGE_FR_FR + #include "lang/fr-FR.rc" +#endif +#ifdef LANGUAGE_HE_IL + #include "lang/he-IL.rc" +#endif +#ifdef LANGUAGE_HI_IN + #include "lang/hi-IN.rc" +#endif +#ifdef LANGUAGE_HU_HU + #include "lang/hu-HU.rc" +#endif +#ifdef LANGUAGE_ID_ID + #include "lang/id-ID.rc" +#endif +#ifdef LANGUAGE_IT_IT + #include "lang/it-IT.rc" +#endif +#ifdef LANGUAGE_JA_JP + #include "lang/ja-JP.rc" +#endif +#ifdef LANGUAGE_PL_PL + #include "lang/pl-PL.rc" +#endif +#ifdef LANGUAGE_PT_BR + #include "lang/pt-BR.rc" +#endif +#ifdef LANGUAGE_PT_PT + #include "lang/pt-PT.rc" +#endif +#ifdef LANGUAGE_RO_RO + #include "lang/ro-RO.rc" +#endif +#ifdef LANGUAGE_RU_RU + #include "lang/ru-RU.rc" +#endif +#ifdef LANGUAGE_SQ_AL + #include "lang/sq-AL.rc" +#endif +#ifdef LANGUAGE_TR_TR + #include "lang/tr-TR.rc" +#endif +#ifdef LANGUAGE_UK_UA + #include "lang/uk-UA.rc" +#endif +#ifdef LANGUAGE_ZH_CN + #include "lang/zh-CN.rc" +#endif +#ifdef LANGUAGE_PL_PL + #include "lang/zh-TW.rc" +#endif diff --git a/dll/win32/shdocvw/shdocvw.spec b/dll/win32/shdocvw/shdocvw.spec index f90cd11c6f9..0a8bd10cd84 100644 --- a/dll/win32/shdocvw/shdocvw.spec +++ b/dll/win32/shdocvw/shdocvw.spec @@ -111,7 +111,7 @@ 216 stub -noname GetDefaultInternetSearchUrlW 217 stub -noname GetDefaultInternetSearchUrlA 218 stdcall -noname IEParseDisplayNameWithBCW(long wstr ptr ptr) -219 stub -noname IEILIsEqual +219 stdcall -noname IEILIsEqual(ptr ptr long) 221 stub -noname IECreateFromPathCPWithBCA 222 stub -noname IECreateFromPathCPWithBCW 223 stub -noname ResetWebSettings # FIXME: Inspect diff --git a/dll/win32/shdocvw/shdocvw_main.c b/dll/win32/shdocvw/shdocvw_main.c index 1dd0b88c4ad..c817bbb3c5f 100644 --- a/dll/win32/shdocvw/shdocvw_main.c +++ b/dll/win32/shdocvw/shdocvw_main.c @@ -32,7 +32,7 @@ #include "winnls.h" #include <shlguid_undoc.h> #include <rpcproxy.h> /* for __wine_register_resources / __wine_unregister_resources */ -#include "CFavBand.h" +#include "objects.h" #endif #include "shlwapi.h" #include "wininet.h" @@ -95,26 +95,10 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv) #ifdef __REACTOS__ { - HRESULT hr = CFavBand_DllGetClassObject(rclsid, riid, ppv); - if (hr != CLASS_E_CLASSNOTAVAILABLE) + HRESULT hr = SHDOCVW_DllGetClassObject(rclsid, riid, ppv); + if (SUCCEEDED(hr)) return hr; } - if (IsEqualGUID(riid, &IID_IClassFactory) || IsEqualGUID(riid, &IID_IUnknown)) - { - if (IsEqualGUID(rclsid, &CLSID_MruLongList) || - IsEqualGUID(rclsid, &CLSID_MruPidlList)) - { - return CMruClassFactory_CreateInstance(riid, ppv); - } - } - else if (IsEqualGUID(riid, &IID_IMruDataList)) - { - return CMruLongList_CreateInstance(0, ppv, 0); - } - else if (IsEqualGUID(riid, &IID_IMruPidlList)) - { - return CMruPidlList_CreateInstance(0, ppv, 0); - } #endif /* As a last resort, figure if the CLSID belongs to a 'Shell Instance Object' */ @@ -128,7 +112,7 @@ HRESULT WINAPI DllRegisterServer(void) { TRACE("\n"); #ifdef __REACTOS__ - CFavBand_DllRegisterServer(); + SHDOCVW_DllRegisterServer(); return __wine_register_resources(instance); #else return S_OK; @@ -142,7 +126,7 @@ HRESULT WINAPI DllUnregisterServer(void) { TRACE("\n"); #ifdef __REACTOS__ - CFavBand_DllUnregisterServer(); + SHDOCVW_DllUnregisterServer(); return __wine_unregister_resources(instance); #else return S_OK; @@ -189,7 +173,7 @@ BOOL WINAPI DllMain(HINSTANCE hinst, DWORD fdwReason, LPVOID fImpLoad) case DLL_PROCESS_ATTACH: #ifdef __REACTOS__ instance = hinst; - CFavBand_Init(hinst); + SHDOCVW_Init(hinst); #endif DisableThreadLibraryCalls(hinst); break; @@ -208,7 +192,7 @@ BOOL WINAPI DllMain(HINSTANCE hinst, DWORD fdwReason, LPVOID fImpLoad) HRESULT WINAPI DllCanUnloadNow(void) { #ifdef __REACTOS__ - if (CFavBand_DllCanUnloadNow() != S_OK) + if (SHDOCVW_DllCanUnloadNow() != S_OK) return S_FALSE; #endif return SHDOCVW_refCount ? S_FALSE : S_OK; diff --git a/dll/win32/browseui/utility.cpp b/dll/win32/shdocvw/utility.cpp similarity index 57% rename from dll/win32/browseui/utility.cpp rename to dll/win32/shdocvw/utility.cpp index ead564a1f6e..fdf3550d548 100644 --- a/dll/win32/browseui/utility.cpp +++ b/dll/win32/shdocvw/utility.cpp @@ -1,24 +1,21 @@ -#include "precomp.h" -#ifndef SHCIDS_CANONICALONLY -#define SHCIDS_CANONICALONLY 0x10000000L -#endif +/* + * PROJECT: ReactOS Explorer + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: Utility for shdocvw.dll + * COPYRIGHT: Copyright 2024 Whindmar Saksit <whinds...@proton.me> + */ -void *operator new(size_t size) -{ - return LocalAlloc(LMEM_ZEROINIT, size); -} +#include "objects.h" -void operator delete(void *p) -{ - LocalFree(p); -} +#include <wine/debug.h> +WINE_DEFAULT_DEBUG_CHANNEL(shdocvw); -void operator delete(void *p, UINT_PTR) -{ - LocalFree(p); -} +#ifndef SHCIDS_CANONICALONLY +#define SHCIDS_CANONICALONLY 0x10000000L +#endif -HRESULT SHELL_GetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl) +EXTERN_C HRESULT +SHELL_GetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl) { #if DLL_EXPORT_VERSION >= _WIN32_WINNT_VISTA && 0 // FIXME: SHELL32 not ready yet return SHGetIDListFromObject(punk, ppidl); @@ -51,12 +48,14 @@ static HRESULT SHELL_CompareAbsoluteIDs(LPARAM lParam, PCIDLIST_ABSOLUTE a, PCID return hr; } -BOOL SHELL_IsEqualAbsoluteID(PCIDLIST_ABSOLUTE a, PCIDLIST_ABSOLUTE b) +EXTERN_C BOOL +SHELL_IsEqualAbsoluteID(PCIDLIST_ABSOLUTE a, PCIDLIST_ABSOLUTE b) { return !SHELL_CompareAbsoluteIDs(SHCIDS_CANONICALONLY, a, b); } -BOOL SHELL_IsVerb(IContextMenu *pcm, UINT_PTR idCmd, LPCWSTR Verb) +EXTERN_C BOOL +SHELL_IsVerb(IContextMenu *pcm, UINT_PTR idCmd, LPCWSTR Verb) { HRESULT hr; WCHAR wide[MAX_PATH]; @@ -71,3 +70,26 @@ BOOL SHELL_IsVerb(IContextMenu *pcm, UINT_PTR idCmd, LPCWSTR Verb) } return FALSE; } + +EXTERN_C BOOL +_ILIsDesktop(LPCITEMIDLIST pidl) +{ + return (pidl == NULL || pidl->mkid.cb == 0); +} + +/************************************************************************* + * IEILIsEqual [SHDOCVW.219] + */ +EXTERN_C BOOL WINAPI +IEILIsEqual( + _In_ LPCITEMIDLIST pidl1, + _In_ LPCITEMIDLIST pidl2, + _In_ BOOL bUnknown) +{ + UINT cb1 = ILGetSize(pidl1), cb2 = ILGetSize(pidl2); + if (cb1 == cb2 && memcmp(pidl1, pidl2, cb1) == 0) + return TRUE; + + FIXME("%p, %p\n", pidl1, pidl2); + return FALSE; +} diff --git a/dll/win32/shdocvw/utility.h b/dll/win32/shdocvw/utility.h new file mode 100644 index 00000000000..94c7ac5a3eb --- /dev/null +++ b/dll/win32/shdocvw/utility.h @@ -0,0 +1,13 @@ +/* + * PROJECT: ReactOS Explorer + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: Utility for shdocvw.dll + * COPYRIGHT: Copyright 2024 Whindmar Saksit <whinds...@proton.me> + */ + +#pragma once + +EXTERN_C HRESULT SHELL_GetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl); +EXTERN_C BOOL SHELL_IsEqualAbsoluteID(PCIDLIST_ABSOLUTE a, PCIDLIST_ABSOLUTE b); +EXTERN_C BOOL SHELL_IsVerb(IContextMenu *pcm, UINT_PTR idCmd, LPCWSTR Verb); +EXTERN_C BOOL _ILIsDesktop(LPCITEMIDLIST pidl); diff --git a/sdk/include/reactos/shdocvw_undoc.h b/sdk/include/reactos/shdocvw_undoc.h new file mode 100644 index 00000000000..57e3ee8b9d7 --- /dev/null +++ b/sdk/include/reactos/shdocvw_undoc.h @@ -0,0 +1,22 @@ +/* + * PROJECT: ReactOS Headers + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: shdocvw.dll undocumented APIs + * COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com> + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif /* defined(__cplusplus) */ + +BOOL WINAPI +IEILIsEqual( + _In_ LPCITEMIDLIST pidl1, + _In_ LPCITEMIDLIST pidl2, + _In_ BOOL bUnknown); + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* defined(__cplusplus) */