60 Commits
Author SHA1 Message Date
Whindmar Saksit c891aefdcf [SHELL32] Implement CFolder[Item] getters/setters (#9173) 2026-07-01 11:41:17 +02:00
Katayama Hirofumi MZ efca5040cb [SHELL32] Get PerceivedType default icon (#8627)
Related to #8626. Display the correct icon.
JIRA issue: CORE-19355
- Modify CFSExtractIcon_CreateInstance function to load
  PerceivedType default icon.
2026-01-24 10:08:02 +09:00
Katayama Hirofumi MZ ae3aee6ee3 [SHELL32] Fix CFSFolder::CompareIDs.SHFSF_COL_TYPE (#8589)
JIRA issue: CORE-20434
Fix 1st bug of CORE-20434.
- In CFSFolder::CompareIDs, implement
  SHFSF_COL_TYPE, using
  SHGetFileInfoW.
2026-01-15 07:09:54 +09:00
Whindmar Saksit 8edf4f0926 [SHELL32][NTOBJSHEX] CDefaultContextMenu cannot close keys it does not own (#8233) 2025-07-12 15:18:39 +02:00
Whindmar Saksit d663eb4466 [SHELL32][CMD][SHLWAPI] Use the openas verb when invoking unknown file types (#7981)
CORE-20184
2025-05-30 18:46:24 +02:00
Whindmar Saksit d3456f5060 [SHELL32] Implement IShellFolder2::GetDetailsEx (#7880) 2025-04-21 23:21:44 +02:00
Whindmar Saksit fb6191b71a [SHELL32] Respect StrCmpLogicalW policy in shell folders (#7900) 2025-04-21 23:06:47 +02:00
Whindmar Saksit ac3ecb2b2d [SHELL32] Add SHFileOp error UI and use it for CFSFolder renaming (#7858) 2025-04-04 20:34:52 +02:00
Whindmar Saksit 28399a216b [SHELL32] Use FS compatible PIDL format for Recycle Bin items (#7532)
* [SHELL32] Use FS compatible PIDL format for Recycle Bin items

This allows SHChangeNotify to handle these items and DefView will correctly update the recycle folder.

CORE-18005 CORE-19239 CORE-13950 CORE-18435 CORE-18436 CORE-18437
2024-12-19 14:38:27 +01:00
Whindmar Saksit 2aadf2eb26 [SHELL32] Implement and use SHOpenPropSheet (#7432)
- Implement SHOpenPropSheetW.
- Reuse already opened propertysheets and format dialogs by finding the existing unique stub window.
- Default .lnk property dialog to the shortcut tab.
2024-11-27 17:45:03 +01:00
Whindmar Saksit 8107ff8636 [SHELL32][SHELL32_APITEST] Consolidate file type description handling (#7485)
- Fixes the case where an extension exists in HKCR but has no ProgId (half of CORE-19355)
- Fixes some cases where Wine hardcoded "File and "... file" strings are used instead of localized strings in SHGetFileInfo.
2024-11-17 20:13:05 +01:00
Whindmar Saksit 6d109254ab [SHELL32] Correctly compare pidls for SHBrowseForFolder BFFM_SETEXPANDED (#7499)
_ILIsEqualSimple just does a memcmp and that does not work for all items.

Should improve shell change notifications (CORE-13950).
2024-11-16 16:28:28 +01:00
Whindmar Saksit a17b6e9369 [SHELL32][BROWSEUI] Set DefView InvokeCommand directory (#7495)
If a .lnk shortcut does not specify a working directory, it should use the directory provided by the InvokeCommand caller when it's launced.

CORE-19855
2024-11-08 23:27:26 +01:00
Timo Kreuzer b707be90a1 [REACTOS] Use standard conforming names
- Use _alloca instead of non-standard alloca
- Use _TCHAR instead of non-standard TCHAR
- Use _off_t instead of deprecated off_t
- Use _O_BINARY instead of O_BINARY
2024-10-20 14:12:25 +03:00
Timo Kreuzer e4930be4ff [REACTOS] Use the ISO C and C++ conformant names: _wcsicmp, _stricmp
Stop using non-conforming wcsicmp, stricmp, strcasecmp
2024-10-20 14:12:25 +03:00
Whindmar Saksit 325d74c30f [SHELL32] Don't display .zip files in BrowseForFolder (#7437)
.zip files have both SFGAO_STREAM and SFGAO_FOLDER attributes set (https://devblogs.microsoft.com/oldnewthing/20171101-00/?p=97325)

CORE-19751
2024-10-11 23:57:28 +02:00
Whindmar Saksit 7b081be46d [SHELL32][MKSHELLLINK] Support EXP_SPECIAL_FOLDER datablock in shortcuts (#7158)
CORE-19692
2024-09-14 13:10:49 +02:00
Whindmar Saksit 6ae11ba09d [SHELL32] Don't display non-enumerable nor non-folder items in Explorer tree (#7189)
This partially implements RegFolder required items as described by Geoff Chappell.

CORE-19176 CORE-14061
2024-08-29 20:45:59 +02:00
Whindmar Saksit 802dc9714b [SHELL32][SHLWAPI][BROWSEUI][EXPLORER] Save folder view state (#7127)
Saves/restores the Listview icon mode, columns and sort info per-folder.
2024-07-19 14:40:20 +02:00
Whindmar Saksit 71a3be2497 [SHELL32][EXPLORER][SHLWAPI][SDK] Implement SHGetSetSettings (#6982)
These settings are cached per-process (and invalidated by the global counter). This should reduce the number of registry reads performed by DefView and CFSFolder.
2024-07-05 20:35:45 +02:00
Katayama Hirofumi MZ 55898a7ffd [SHELL32] Make some PIDL (_IL*) functions Unicode (#7018)
There were encoding problems due to non-
Unicode functions.
JIRA issue: CORE-19653
- Adapt _ILGetDrive, _ILGetExtension,
  _ILGetFileAttributes, _ILGetFileDate,
  _ILGetFileSize, and _ILGetFileType
  functions to Unicode.
- Adapt SHELL_IsShortcut and
  SHGetFileInfoW functions to Unicode.
- Delete useless _ILSimpleGetText
  function.
2024-06-19 04:32:40 +09:00
Whindmar Saksit ecb5cae48f [SHELL32] SetNameOf should not append old extension to folders (#6954) 2024-06-08 18:45:23 +02:00
Katayama Hirofumi MZ 3285f698fd [SHELL32][SDK] SHChangeNotify: Re-work Part 1 (#6898)
Making shell change notification implementation better.
Now recycle bin icon change is working.
JIRA issue: CORE-13950
JIRA issue: CORE-19591
JIRA issue: CORE-11453
- Delete SHSimpleIDListFromPathA/W hacks.
- Translate simple PIDLs (coming from SHSimpleIDListFromPathA/W)
  in CDefView::OnChangeNotify method.
- Add CDefView::LV_RefreshIcons method for SHCNE_UPDATEIMAGE
  change event.
- Rename CDefView::LV_ProdItem method as CDefView::LV_UpdateItem.
- Call SHUpdateRecycleBinIcon in SHFileOperationW function.
- Half-implement SHUpdateRecycleBinIcon.
- Call SHChangeNotify in DeleteExt function.
2024-05-17 08:10:15 +09:00
Whindmar Saksit daf806802a [SHELL32] Use common default DFM callback message handler (#6779)
Moves default processing of all DFM_ callback messages in SHELL32 to a single function.

CORE-18585
2024-05-09 19:52:05 +02:00
Whindmar Saksit 07d55ce1cf [SHELL32] CFSFolder parsing must only apply bind data to the last item (#6794)
When IShellFolder::ParseDisplayName is asked to parse multiple path elements, the IFileSystemBindData (if any) only applies to the last item. The other elements are always folders.
2024-05-02 18:00:12 +02:00
3693d55404 [SHELL32] Fix Desktop folder details view (#5743)
* [SHELL32] Fix Desktop Folder Details View

JIRA issue: [CORE-19177|https://jira.reactos.org/browse/CORE-19177]

* Remove Comments column from Desktop Folder Details View and simplify code.
* Revise date/time sort based on reviewer comments.
* Swap size and type column positions for desktop folder details view.

With help from Whindmar, most (hopefully all) of the magic number for the columns
have been removed in all of the shell folders.

Co-authored-by: Whindmar Saksit <[email protected]>
Co-authored-by: Carl J. Bialorucki <[email protected]>
2024-04-25 17:20:28 -05:00
Katayama Hirofumi MZ 7fdec96009 [SHELL32] Fix ParseDisplayName Part 2 (#6740)
Follow-up to #6721. Reduce
SHParseDisplayName failures.
JIRA issue: CORE-19495
- Re-implement CFSFolder::ParseDisplayName
  method to validate the names.
- Add CFSFolder::_ParseSimple,
  CFSFolder::_GetFindDataFromName, and
  CFSFolder::_CreateIDListFromName helper
  methods.
- Add PathIsDotOrDotDotW, PathIsValidElement,
  PathIsDosDevice, and SHILAppend helper
  functions.
- Delete GetNextElementW and add
  Shell_NextElement function.
2024-04-13 21:07:12 +09:00
Whindmar Saksit a83e40f6d1 [SHELL32] Fix FS folder assoc array class order (#6047)
Fixes the reg class key order for FS items. The existing code was close,
but for some reason used `//` as the path separator for SystemFileAssociations!

- Fixed SystemFileAssociations.

- Swapped the order of `*` and `AllFilesystemObjects`. This is the documented
  order and can also be observed in Process Monitor.
  https://learn.microsoft.com/en-us/windows/win32/shell/fa-associationarray#about-association-arrays

- Removed `(..., L"%s//%s", extension, wszClass)`, this does not seem to be
  a valid thing (`.TestAAExtWeird` in my tests).

- Adds the `Unknown` class when appropriate. Not adding the `openas` verb
  to `Unknown` rgs registration now to mimic Windows, because ROS
  `CDefaultContextMenu` lacks verb de-duplication and the menu would end up
  with two "Open With" entries. This just uses `(cidl == 1)` to simulate
  Windows, while Windows on NT6 uses `MultiSelectModel=Single`, a NT6 feature
  not implemented in ROS.

- The class order for folders was wrong and is still "wrong" in this PR,
  but I chose to use the Windows menu display order until the exact mechanics
  required in `CDefaultContextMenu` can be understood.

- Extracts the extension from ANSI PIDLs.
2024-03-24 21:37:59 +01:00
Oleg Dubinskiy f9a5344254 [SHELL32] Allow using custom desktop/folders/drives icons (#6421)
Implement proper reading the current user's icons from registry.

CORE-14758

- Load the icons specified by user in registry in the following keys:
  "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\DefaultIcon"
  (virtual namespace folders)
  "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons"
  (filesystem folders and drives)
- Implement two functions HCU/HLM_GetIconW for reading the icons
  from mentioned HKCU and HKLM keys accordingly.
- Use HCR_RegGetIconW for falling back to default icons.
  This function always loads only default icons, even when
  the custom ones are specified by user.
- Refactor SIC_LoadOverlayIcon to use newly implemented HLM_GetIconW.

These changes apply to:
- virtual namespace folders and other desktop items (like My Computer,
  My Documents, Network Places, Recycle Bin, Web Browser (aka Internet
  Explorer), Control Panel and some of its items);
- normal filesystem directories;
- all types of drives (fixed disk drives, removable drives, CD-ROMs,
  RamDisks and network drives). Handle invalid drives, setting blank
  icon for them, since they cannot be recognized or mounted correctly.
  Also, load the autorun icons first to avoid overriding them by the
  icons defined in registry.

I've rechecked twice: excluding Start Menu icons, Desktop Workspace icon
and some FS folder icons that have their own desktop.ini configuration
files (we probably should write the custom icons we load to these configs,
as Windows does it, perhaps with WritePrivateProfileStringW), all other
icons can be changed now (only ones that can be changed on XP SP3 / 2003
SP2) via built-in system tools (like Desktop icons in desk.cpl) or any
3rd-party tools without modifying system resources.

Also all icons for the known file types can be changed,
same as before my changes.

Regarding Start Menu icons:
- changing them should be correctly implemented in explorer
  instead of shell32, as the former is responsible for the Start Menu
  and partially for the taskbar;
- in order to actually use all of them, we need to implement modern
  Start Menu first.

Useful reference: http://www.winfaq.de/faq_html/Content/tip0000/onlinefaq.php?h=tip0162.htm
2024-02-29 00:20:47 +03:00
Doug Lyons 8a7b5a9009 [SHELL32][USER32] Fix icon regression and one test (#5207) 2023-05-21 11:18:00 +02:00
Joachim Henze a33fe38418 [SHELL32] Show 'comment' column for folders, make it rightmost CORE-18615 (#4868)
In explorer filebrowser 'details' view
the column 'comments' had invalid length of zero, and therefore
was hidden under the 'attributes' column.

I guess even after this patch, it will not display any
sane contents in there yet.
Therefore I chose a small width of 10 only, to reduce the chance for
it to trigger an undesired horizontal scrollbar.

As far as I see we don't support manual showing and hiding of additional columns yet.
By default my Windows does not show this column. But when activated manually, it is always
shown on the right hand side of the 'attributes' column.
2022-11-11 18:25:50 +01:00
Mark Jansen 6a1f287820 [SHELL32] Show file / drive properties at the position where the mouse was.
CORE-18386
2022-10-14 21:02:33 +02:00
Thomas Csovcsity 860d3544af [SHELL32] Folders: Adjust column sequence in details view (#4279)
Adjust column sequence in folder view to match WinXP and Win2k3 order.
CORE-11846
2022-05-05 17:05:18 +02:00
Mark Jansen 6304059721 [SHELL32] Add extra information when encountering an unexpected pidl
In addition, make pdump slightly less unusable
2022-02-22 19:43:05 +01:00
Mark Jansen f6f5490ab4 [SHELL32] ShellExecute: Implement SEE_MASK_INVOKEIDLIST
CORE-18035
Also simplify some error handling by using smart pointers
2022-02-07 20:56:21 +01:00
Hermès Bélusca-Maïto 83be315abf [SHELL32] Use wide char string literals.
Import parts of Wine commit b215536852dc5a132108db92c90a41c70b738e50
shell32: Use wide char string literals.
Signed-off-by: Alexandre Julliard <[email protected]>
2022-01-09 22:39:29 +01:00
Katayama Hirofumi MZ f153b52dbb [SHELL32] Use IDI_SHELL_DOCUMENT for broken non-exe icons
CORE-16287
2021-12-24 02:47:31 +09:00
Katayama Hirofumi MZ 9078e34f3c [SHELL32] Don't smartass-renaming on LNK files (#4020)
Renaming .LNK files had a bug that the selection won't include the extension-like filename part.
CORE-17807
2021-10-11 13:33:43 +09:00
Mark Jansen 9276b3f1bf [SHELL32] CFSFolder: Add fallback for failing shell extension
CORE-17673
2021-09-21 21:42:25 +02:00
Hermès Bélusca-Maïto 9393fc320e [FORMATTING] Remove trailing whitespace. Addendum to 34593d93.
Excluded: 3rd-party code (incl. wine) and most of the win32ss.
2021-09-13 03:52:22 +02:00
Mark Jansen 9fcdc68182 [SHELL32] Include the folder path in logging 2021-05-22 16:34:54 +02:00
Joachim Henze f363c27ab4 [SHELL32] Demote 2 noisy goodpath loggings to TRACE CORE-17216
Those 2 did spam heavily when browsing folders with
many .zip files within. Mark Jansen confirmed that
this is good-path-logging and was just forgotten
to be disabled earlier.
2020-08-23 00:35:02 +02:00
Mark Jansen 679c95597c [SHELL32] Fix sorting on size for big files
CORE-17205
2020-08-17 18:17:24 +02:00
Mark Jansen 83a9f71690 [SHELL32] Allow creation of an empty CFileSysEnum
CORE-16908
2020-05-19 20:35:52 +02:00
Mark Jansen f379a29606 [SHELL32] Properly enumerate virtual shell folders (on files) as fake folders
CORE-16908
2020-05-17 17:09:04 +02:00
Mark Jansen b1003ae909 [SHELL32] Update CFileSysEnum to be maintaineable
CORE-16908
2020-05-17 17:09:04 +02:00
Katayama Hirofumi MZ 2fad488a85 [SHELL32] Add 'm_' prefix to CFSFolder members (#2129)
CORE-7585
2019-12-05 05:35:25 +09:00
Katayama Hirofumi MZ 5734570a15 [BOOT][SHELL32][INCLUDE] Support 'SuperHidden' files (#2102)
PR #2101 shows desktop.ini files on Desktop. I want to hide them.
- Add "ShowSuperHidden" setting to Explorer.
- Add SHCONTF_INCLUDESUPERHIDDEN flag.
- Support SHCONTF_INCLUDESUPERHIDDEN in Explorer.
CORE-10045
2019-11-29 15:14:18 +09:00
Katayama Hirofumi MZ cfdbccf937 [SHELL32] Follow-up of #2076 (#2091)
Fix EXE and SCR file icons. CORE-16533
2019-11-26 21:45:58 +09:00
Katayama Hirofumi MZ 399854ce31 [SHELL32] Set default exe icon (#2076)
The default icon of an exe file was empty if no icon available from exe.
CORE-10480
2019-11-24 19:26:32 +09:00