- implement setting values WantsFORDisplay && HideAsDeletePerUser (not yet used)

- register control panel shell folder
- fix a memory leak

svn path=/trunk/; revision=30547
This commit is contained in:
Johannes Anderwald 2007-11-18 14:17:39 +00:00
parent 92f9c23098
commit a6b1efe4da
31 changed files with 62 additions and 4 deletions

View file

@ -357,6 +357,7 @@ BEGIN
IDS_DESKTOP "Ðàáîòíà ïëîù"
IDS_MYCOMPUTER "Ìîÿò êîìïþòúð"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "&Ãîëåìè çíà÷åòà"

View file

@ -357,6 +357,7 @@ BEGIN
IDS_DESKTOP "Desktop"
IDS_MYCOMPUTER "My Computer"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "Lar&ge Icons"

View file

@ -358,6 +358,7 @@ BEGIN
IDS_DESKTOP "Plocha"
IDS_MYCOMPUTER "Tento poèítaè"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "&Vedle sebe"

View file

@ -357,6 +357,7 @@ BEGIN
IDS_DESKTOP "Desktop"
IDS_MYCOMPUTER "My Computer"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "Lar&ge Icons"

View file

@ -359,6 +359,7 @@ BEGIN
IDS_DESKTOP "Desktop"
IDS_MYCOMPUTER "Arbeitsplatz"
IDS_RECYCLEBIN_FOLDER_NAME "Papierkorb"
IDS_CONTROLPANEL "Systemsteuerung"
/* context menus */
IDS_VIEW_LARGE "&Große Symbole"

View file

@ -357,6 +357,7 @@ BEGIN
IDS_DESKTOP "Desktop"
IDS_MYCOMPUTER "My Computer"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "Lar&ge Icons"

View file

@ -357,6 +357,7 @@ BEGIN
IDS_DESKTOP "Desktop"
IDS_MYCOMPUTER "My Computer"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "Lar&ge Icons"

View file

@ -358,6 +358,7 @@ BEGIN
IDS_DESKTOP "Escritorio"
IDS_MYCOMPUTER "Mi PC"
IDS_RECYCLEBIN_FOLDER_NAME "Papelera de reciclaje"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "Iconos &grandes"

View file

@ -357,6 +357,7 @@ BEGIN
IDS_DESKTOP "Työpöytä"
IDS_MYCOMPUTER "Oma Tietokone"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "&Suuret Kuvakkeet"

View file

@ -361,6 +361,7 @@ BEGIN
IDS_DESKTOP "Bureau"
IDS_MYCOMPUTER "Poste de travail"
IDS_RECYCLEBIN_FOLDER_NAME "Corbeille"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "&Grandes icônes"

View file

@ -360,6 +360,7 @@ BEGIN
IDS_DESKTOP "Asztal"
IDS_MYCOMPUTER "Számítógép"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "Nagy képek"

View file

@ -358,6 +358,7 @@ BEGIN
IDS_DESKTOP "Desktop"
IDS_MYCOMPUTER "Risorse del Computer"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "&Icone Grandi"

View file

@ -357,6 +357,7 @@ BEGIN
IDS_DESKTOP "デスクトップ"
IDS_MYCOMPUTER "マイ コンピュータ"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "大きいアイコン(&G)"

View file

@ -357,6 +357,7 @@ BEGIN
IDS_DESKTOP "Desktop"
IDS_MYCOMPUTER "My Computer"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "Lar&ge Icons"

View file

@ -357,6 +357,7 @@ BEGIN
IDS_DESKTOP "Skrivebord"
IDS_MYCOMPUTER "Min datamaskin"
IDS_RECYCLEBIN_FOLDER_NAME "Papirkurv"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "&Store ikoner"

View file

@ -357,6 +357,7 @@ BEGIN
IDS_DESKTOP "Desktop"
IDS_MYCOMPUTER "My Computer"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "Lar&ge Icons"

View file

@ -358,6 +358,7 @@ BEGIN
IDS_DESKTOP "Pulpit"
IDS_MYCOMPUTER "Mój komputer"
IDS_RECYCLEBIN_FOLDER_NAME "Kosz"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "&Du¿e Ikony"

View file

@ -359,6 +359,7 @@ BEGIN
IDS_DESKTOP "Área de trabalho"
IDS_MYCOMPUTER "Meu computador"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "Ícones &grandes"

View file

@ -359,6 +359,7 @@ BEGIN
IDS_DESKTOP "Ambiente de trabalho"
IDS_MYCOMPUTER "O Meu Computador"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "Ícones &grandes"

View file

@ -357,6 +357,7 @@ BEGIN
IDS_DESKTOP "Ðàáî÷èé ñòîë"
IDS_MYCOMPUTER "Ìîé êîìïüþòåð"
IDS_RECYCLEBIN_FOLDER_NAME "Êîðçèíà"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "&Áîëüøèå çíà÷êè"

View file

@ -357,6 +357,7 @@ BEGIN
IDS_DESKTOP "Desktop"
IDS_MYCOMPUTER "My Computer"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "Lar&ge Icons"

View file

@ -357,6 +357,7 @@ BEGIN
IDS_DESKTOP "Desktop"
IDS_MYCOMPUTER "My Computer"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "Lar&ge Icons"

View file

@ -357,6 +357,7 @@ BEGIN
IDS_DESKTOP "Desktop"
IDS_MYCOMPUTER "My Computer"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "Lar&ge Icons"

View file

@ -357,6 +357,7 @@ BEGIN
IDS_DESKTOP "Masaüstü"
IDS_MYCOMPUTER "Bilgisayarým"
IDS_RECYCLEBIN_FOLDER_NAME "Çöp"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "Bü&yük Simgeler"

View file

@ -366,6 +366,7 @@ BEGIN
IDS_VIEW_DETAILS "&Подробиці"
IDS_SELECT "Ви&брати"
IDS_OPEN "Ві&дкрити"
IDS_CONTROLPANEL "Control Panel"
IDS_CREATEFOLDER_DENIED "Не вдалося створити нову папку: Відмова у доступі."
IDS_CREATEFOLDER_CAPTION "Помилка при створенні нової папки"

View file

@ -357,6 +357,7 @@ BEGIN
IDS_DESKTOP "Desktop"
IDS_MYCOMPUTER "My Computer"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "Lar&ge Icons"

View file

@ -358,6 +358,7 @@ BEGIN
IDS_DESKTOP "Desktop"
IDS_MYCOMPUTER "My Computer"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "Lar&ge Icons"

View file

@ -358,6 +358,7 @@ BEGIN
IDS_DESKTOP "Desktop"
IDS_MYCOMPUTER "My Computer"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
IDS_CONTROLPANEL "Control Panel"
/* context menus */
IDS_VIEW_LARGE "Lar&ge Icons"

View file

@ -83,6 +83,8 @@ struct regsvr_coclass
#define SHELLFOLDER_WANTSFORPARSING 0x00000002
#define SHELLFOLDER_ATTRIBUTES 0x00000004
#define SHELLFOLDER_CALLFORATTRIBUTES 0x00000008
#define SHELLFOLDER_WANTSFORDISPLAY 0x00000010
#define SHELLFOLDER_HIDEASDELETEPERUSER 0x00000020
static HRESULT register_coclasses(struct regsvr_coclass const *list);
static HRESULT unregister_coclasses(struct regsvr_coclass const *list);
@ -135,6 +137,8 @@ static WCHAR const defaulticon_keyname[] = {
static WCHAR const contextmenu_keyname[] = { 'C', 'o', 'n', 't', 'e', 'x', 't', 'M', 'e', 'n', 'u', 'H', 'a', 'n', 'd', 'l', 'e', 'r', 's', 0 };
static char const tmodel_valuename[] = "ThreadingModel";
static char const wfparsing_valuename[] = "WantsFORPARSING";
static char const wfdisplay_valuename[] = "WantsFORDISPLAY";
static char const hideasdeleteperuser_valuename[] = "HideAsDeletePerUser";
static char const attributes_valuename[] = "Attributes";
static char const cfattributes_valuename[] = "CallForAttributes";
static char const localized_valuename[] = "LocalizedString";
@ -335,7 +339,7 @@ static HRESULT register_coclasses(struct regsvr_coclass const *list)
}
if (list->flags &
(SHELLFOLDER_WANTSFORPARSING|SHELLFOLDER_ATTRIBUTES|SHELLFOLDER_CALLFORATTRIBUTES))
(SHELLFOLDER_WANTSFORPARSING|SHELLFOLDER_ATTRIBUTES|SHELLFOLDER_CALLFORATTRIBUTES|SHELLFOLDER_WANTSFORDISPLAY|SHELLFOLDER_HIDEASDELETEPERUSER))
{
HKEY shellfolder_key;
@ -351,7 +355,11 @@ static HRESULT register_coclasses(struct regsvr_coclass const *list)
if (list->flags & SHELLFOLDER_CALLFORATTRIBUTES)
res = RegSetValueExA(shellfolder_key, cfattributes_valuename, 0, REG_DWORD,
(const BYTE *)&list->dwCallForAttributes, sizeof(DWORD));
RegCloseKey(shellfolder_key);
if (list->flags & SHELLFOLDER_WANTSFORDISPLAY)
res = RegSetValueExA(shellfolder_key, wfdisplay_valuename, 0, REG_SZ, (const BYTE *)"", 1);
if (list->flags & SHELLFOLDER_HIDEASDELETEPERUSER)
res = RegSetValueExA(shellfolder_key, hideasdeleteperuser_valuename, 0, REG_SZ, (const BYTE *)"", 1);
RegCloseKey(shellfolder_key);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
}
@ -572,6 +580,19 @@ static struct regsvr_coclass const coclass_list[] = {
"shell32.dll",
"Apartment"
},
{ &CLSID_ControlPanel,
"Shell Control Panel Folder",
IDS_CONTROLPANEL,
NULL,
"shell32.dll",
"Apartment",
SHELLFOLDER_WANTSFORDISPLAY|SHELLFOLDER_ATTRIBUTES|SHELLFOLDER_HIDEASDELETEPERUSER,
SFGAO_FOLDER|SFGAO_HASSUBFOLDER,
0,
NULL,
NULL,
IDI_SHELL_CONTROL_PANEL1
},
{ &CLSID_DragDropHelper,
"Shell Drag and Drop Helper",
0,
@ -706,6 +727,8 @@ static const WCHAR wszDesktop[] = { 'D','e','s','k','t','o','p',0 };
static const WCHAR wszSlash[] = { '/', 0 };
static const WCHAR wszMyDocuments[] = { 'M','y',' ','D','o','c','u','m','e','n','t','s', 0 };
static const WCHAR wszRecycleBin[] = { 'T','r','a','s','h', 0 };
static const WCHAR wszMyComputer[] = { 'M','y','C','o','m','p','u','t','e','r',0 };
static const WCHAR wszControlPanel[] = { 'C','o','n','t','r','o','l',0 };
static struct regsvr_namespace const namespace_extensions_list[] = {
#if 0
@ -725,6 +748,11 @@ static struct regsvr_namespace const namespace_extensions_list[] = {
wszDesktop,
wszRecycleBin
},
{
&CLSID_ControlPanel,
wszMyComputer,
wszControlPanel
},
{ NULL }
};

View file

@ -289,7 +289,7 @@ static BOOL CreateDesktopEnumList(IEnumIDList *list, DWORD dwFlags)
}
else
{
ret = AddToEnumList(list, _ILCreateGuidFromStrW(iid));
ret = AddToEnumList(list, pidl);
}
i++;
}

View file

@ -106,6 +106,8 @@
#define IDS_SHELL_ABOUT_AUTHORS 144
#define IDS_SHELL_ABOUT_BACK 145
#define FCIDM_SHVIEW_NEW 146
#define FCIDM_SHVIEW_VIEW 147
#define IDS_CONTROLPANEL 148
/* Note: this string is referenced from the registry */
#define IDS_RECYCLEBIN_FOLDER_NAME 8964
@ -172,7 +174,7 @@
#define IDI_SHELL_TRASH_FILE 142
#define IDI_SHELL_CONFIRM_DELETE 161
#define IDI_SHELL_MY_DOCUMENTS 235
#define IDI_SHELL_CONTROL_PANEL1 330
/*
AVI resources, windows shell32 has 14 of them: 150-152 and 160-170
FIXME: Need to add them, but for now just let them use the same: searching.avi