Difference between revisions of "Shell status"
m |
|||
(18 intermediate revisions by 4 users not shown) | |||
Line 8: | Line 8: | ||
|- | |- | ||
| Core services || | | Core services || | ||
− | '''Core functions of the shell'''<br> | + | '''Core functions of the shell. ALL of these should be green in the end.'''<br> |
− | [[File:Symbol neutral vote.png]] ShellExecuteExW: I think wine's implementation is completely backwards. This should execute items | + | [[File:Symbol neutral vote.png]] '''ShellExecuteExW''': I think wine's implementation is completely backwards. This should execute items of the shell namespace. I think that every path passed should be resolved as a pidl first.<br> |
− | [[File:Symbol neutral vote.png]] SHChangeNotifyRegister, SHChangeNotifyDeregister, SHChangeNotify: Many things need work here. Windows use a worker thread for some reason, we leak handles and support for items on the desktop is *terrible* (it needs some very clever hacks that we don't have)<br> | + | [[File:Symbol neutral vote.png]] '''SHChangeNotifyRegister, SHChangeNotifyDeregister, SHChangeNotify''': Many things need work here. Windows use a worker thread for some reason, we leak handles and support for items on the desktop is *terrible* (it needs some very clever hacks that we don't have)<br> |
− | [[File:Symbol neutral vote.png]] SHFileOperationW: Many edge cases are broken. Right now most copy and paste problems are bugs in this function<br> | + | [[File:Symbol neutral vote.png]] '''SHFileOperationW''': Many edge cases are broken. Right now most copy and paste problems are bugs in this function<br> |
− | [[File:Symbol support vote.png]] Shell_NotifyIconW | + | [[File:Symbol support vote.png]] '''Shell_NotifyIconW''': This is a mere forwarder of the notifications to explorer. The forwarder is complete but a lot of stuff in explorer's end need work for this to seem to work properly<br> |
− | [[File:Symbol support vote.png]] SHBrowseForFolderW<br> | + | [[File:Symbol support vote.png]] '''SHBrowseForFolderW'''<br> |
− | [[File:Symbol neutral vote.png]] Control_RunDLLW: See the failed tests to see how broken it is<br> | + | [[File:Symbol neutral vote.png]] '''Control_RunDLLW''': See the failed tests to see how broken it is<br> |
− | [[File:Symbol neutral vote.png]] SHMapPIDLToSystemImageListIndex: The way it interacts with IIconExtraction is FUBAR. Overlays support is hacked.<br> | + | [[File:Symbol neutral vote.png]] '''SHMapPIDLToSystemImageListIndex''': The way it interacts with IIconExtraction is FUBAR. Overlays support is hacked.<br> |
− | [[File:Symbol oppose vote.png]] SHMapIDListToImageListIndexAsync<br> | + | [[File:Symbol oppose vote.png]] '''SHMapIDListToImageListIndexAsync'''<br> |
− | [[File:Symbol support vote.png]] CShellItem<br> | + | [[File:Symbol support vote.png]] '''CShellItem'''<br> |
− | [[File:Symbol neutral vote.png]] CQueryAssociations: Only the documented part is implemented; | + | [[File:Symbol neutral vote.png]] '''CQueryAssociations''': Only the documented part is implemented; In windows more internal classes expose IQueryAssociations. It is really questionable if any of the undocumented part merits to be implemented.<br> |
− | [[File:Symbol oppose vote.png]] DAD_* functions<br> | + | [[File:Symbol oppose vote.png]] '''DAD_*''' functions<br> |
− | [[File:Symbol oppose vote.png]] CDragDropHelper: Implements the visual effects that are used when dragging shell items. It is closely related to the DAD_* functions<br> | + | [[File:Symbol oppose vote.png]] '''CDropTargetHelper''' (called CDragDropHelper in windows): Implements the visual effects that are used when dragging shell items. It is closely related to the DAD_* functions<br> |
− | [[File:Symbol oppose vote.png]] SHAppBarMessage<br> | + | [[File:Symbol oppose vote.png]] '''SHAppBarMessage'''<br> |
− | [[File:Symbol oppose vote.png]] OpenAs_RunDLL<br> | + | [[File:Symbol oppose vote.png]] '''OpenAs_RunDLL'''<br> |
|- | |- | ||
| Def namespace objects || | | Def namespace objects || | ||
− | '''Core objects used by the namespace components to interact with the user'''<br> | + | '''Core objects used by the namespace components to interact with the user. Fixing the noted problems in these items is really important'''<br> |
− | [[File:Symbol support vote.png]] CDefaultContextMenu (called CDefFolderMenu in windows): tried to implement the context menu of the cpl items in the control panel with callbacks but run into problems with ids _again_<br> | + | [[File:Symbol support vote.png]] '''CDefaultContextMenu''' (called CDefFolderMenu in windows): tried to implement the context menu of the cpl items in the control panel with callbacks but run into problems with ids _again_<br> |
− | [[File:Symbol support vote.png]] CDefView: I hope webview and crap like that won't be needed and we can keep this component simple<br> | + | [[File:Symbol support vote.png]] '''CDefView''': I hope webview and crap like that won't be needed and we can keep this component simple. This misses some features like saving and loading icon positions but what is implemented has very few bugs<br> |
− | [[File:Symbol neutral vote.png]] CExtractIcon: Its implementation and the way it interacts with the icon cache is a mess.<br> | + | [[File:Symbol neutral vote.png]] '''CExtractIcon''': Its implementation and the way it interacts with the icon cache is a mess.<br> |
|- | |- | ||
| Namespace || | | Namespace || | ||
− | '''The components that constitute the shell namespace'''<br> | + | '''The components that constitute the shell namespace. Fixing the gray and red components that follow isn't really important for now. The rest are'''<br> |
− | [[File:Symbol support vote.png]] CRegFolder. In windows users of this class aggregate it and let it handle IShellFolder2 first. Imo this is not needed. ParseDisplayName should support parsing user friendly names but it doesn't right now<br> | + | [[File:Symbol support vote.png]] '''CRegFolder'''. In windows users of this class aggregate it and let it handle IShellFolder2 first. Imo this is not needed. ParseDisplayName should support parsing user friendly names but it doesn't right now<br> |
− | [[File:Symbol support vote.png]] CDesktopFolder<br> | + | [[File:Symbol support vote.png]] '''CDesktopFolder'''<br> |
− | [[File:Symbol support vote.png]] CDrivesFolder: Windows use a CMountpoint class but we do the bare minimum. I guess it is fine thins way<br> | + | [[File:Symbol support vote.png]] '''CDrivesFolder''': Windows use a CMountpoint class but we do the bare minimum. I guess it is fine thins way<br> |
− | [[File:Symbol support vote.png]] CFSFolder: BindToObject must be improved not to create new CFSFolder objects for complex pidls. I stupidly thought we could use _ILGetFileStructW and access the name directly. Turns out it should also accept ansi-only pidls as well(CORE-14009)<br> | + | [[File:Symbol support vote.png]] '''CFSFolder''': BindToObject must be improved not to create new CFSFolder objects for complex pidls. I stupidly thought we could use _ILGetFileStructW and access the name directly. Turns out it should also accept ansi-only pidls as well(CORE-14009)<br> |
− | [[File:Symbol support vote.png]] CControlPanelFolder: The context menu of the cpl items should use CDefContextMenu and use callbacks to start launch the cpl (instead of having a separate implementation of the IContextMenu)<br> | + | [[File:Symbol support vote.png]] '''CControlPanelFolder''': The context menu of the cpl items should use CDefContextMenu and use callbacks to start launch the cpl (instead of having a separate implementation of the IContextMenu)<br> |
− | [[File:Symbol support vote.png]] CRecycleBinFolder: Icons are unimplemented due to the stupidly complex internal architecture of the | + | [[File:Symbol support vote.png]] '''CRecycleBinFolder''': Icons are unimplemented due to the stupidly complex internal architecture of the recycle bin implementation<br> |
− | [[File:Symbol neutral vote.png]] CNetFolder: This is only a quick and dirty implementation so far<br> | + | [[File:Symbol neutral vote.png]] '''CNetFolder''': This is only a quick and dirty implementation so far<br> |
− | [[File:Symbol neutral vote.png]] CMergedFolder: pidls must never contain pointers. they can contain other pidls however<br> | + | [[File:Symbol neutral vote.png]] '''CMergedFolder''': pidls must never contain pointers. they can contain other pidls however<br> |
− | [[File:Symbol neutral vote.png]] CPrintersFolder: lots of stuff to implement here. in windows there is a strange interaction with printui but I don't think there is any reason to implement such an interaction; the printers folder can be completely self contained and use only documented exports of printui<br> | + | [[File:Symbol neutral vote.png]] '''CPrintersFolder''': lots of stuff to implement here. in windows there is a strange interaction with printui but I don't think there is any reason to implement such an interaction; the printers folder can be completely self contained and use only documented exports of printui<br> |
− | [[File:Symbol oppose vote.png]] CCDBurnFolder: do we even need this?<br> | + | [[File:Symbol oppose vote.png]] '''CCDBurnFolder''': do we even need this?<br> |
|- | |- | ||
| Shell menus || | | Shell menus || | ||
'''Components that implement the menu like toolbars of the shell'''<br> | '''Components that implement the menu like toolbars of the shell'''<br> | ||
− | [[File:Symbol support vote.png]] CMenuBand<br> | + | [[File:Symbol support vote.png]] '''CMenuBand''': Doesn't support accessibility, drag and drop and renaming shell folder items<br> |
− | [[File:Symbol support vote.png]] CMenuDeskBar<br> | + | [[File:Symbol support vote.png]] '''CMenuDeskBar'''<br> |
− | [[File:Symbol support vote.png]] CMenuSite<br> | + | [[File:Symbol support vote.png]] '''CMenuSite'''<br> |
− | [[File:Symbol support vote.png]] CStartMenu<br> | + | [[File:Symbol support vote.png]] '''CStartMenu'''<br> |
− | [[File:Symbol oppose vote.png]] CPersonalStartMenu: Used by the modern start menu. It implements the all programs popup menu.<br> | + | [[File:Symbol oppose vote.png]] '''CPersonalStartMenu''': Used by the modern start menu. It implements the all programs popup menu.<br> |
− | [[File:Symbol oppose vote.png]] CTrackShellMenu: Find out that this is for<br> | + | [[File:Symbol oppose vote.png]] '''CTrackShellMenu''': Find out that this is for<br> |
|- | |- | ||
| Built in shell extensions || | | Built in shell extensions || | ||
'''Components that aren't part of the core and are mostly instantiated in the same way shell extensions are'''<br> | '''Components that aren't part of the core and are mostly instantiated in the same way shell extensions are'''<br> | ||
− | [[File:Symbol support vote.png]] CShellLink<br> | + | [[File:Symbol support vote.png]] '''CShellLink'''<br> |
− | [[File:Symbol support vote.png]] CNewMenu<br> | + | [[File:Symbol support vote.png]] '''CNewMenu'''<br> |
− | [[File:Symbol support vote.png]] COpenWithMenu<br> | + | [[File:Symbol support vote.png]] '''COpenWithMenu'''<br> |
− | [[File:Symbol support vote.png]] CExeDropHandler<br> | + | [[File:Symbol support vote.png]] '''CExeDropHandler'''<br> |
− | [[File:Symbol support vote.png]] CFileDefExt<br> | + | [[File:Symbol support vote.png]] '''CFileDefExt'''<br> |
− | [[File:Symbol support vote.png]] CDrvDefExt<br> | + | [[File:Symbol support vote.png]] '''CDrvDefExt'''<br> |
− | [[File:Symbol support vote.png]] CFolderOptions<br> | + | [[File:Symbol support vote.png]] '''CFolderOptions'''<br> |
− | [[File:Symbol oppose vote.png]] CFileSearchBand: Why on earth is | + | [[File:Symbol oppose vote.png]] '''CFileSearchBand''': Why on earth is there an IDeskBand in shell32?<br> |
− | [[File:Symbol oppose vote.png]] CFolderShortcut<br> | + | [[File:Symbol oppose vote.png]] '''CFolderShortcut'''<br> |
− | [[File:Symbol oppose vote.png]] CSendToMenu<br> | + | [[File:Symbol oppose vote.png]] '''CSendToMenu'''<br> |
− | [[File:Symbol oppose vote.png]] CCDBurn<br> | + | [[File:Symbol oppose vote.png]] '''CCDBurn'''<br> |
− | [[File:Symbol oppose vote.png]] CCopyMoveToMenu<br> | + | [[File:Symbol oppose vote.png]] '''CCopyMoveToMenu'''<br> |
− | [[File:Symbol oppose vote.png]] CStartMenuPin: I think this is the IContextMenu that lets you pin stuff in the modern start menu<br> | + | [[File:Symbol oppose vote.png]] '''CStartMenuPin''': I think this is the IContextMenu that lets you pin stuff in the modern start menu<br> |
− | [[File:Symbol oppose vote.png]] CBurnAudioCDExtension<br> | + | [[File:Symbol oppose vote.png]] '''CBurnAudioCDExtension'''<br> |
|- | |- | ||
| Shell automation || | | Shell automation || | ||
'''Components exposing shell functionality with the IDispatch interface. As of now these are barely implemented'''<br> | '''Components exposing shell functionality with the IDispatch interface. As of now these are barely implemented'''<br> | ||
− | [[File:Symbol neutral vote.png]] CShellDispatch<br> | + | [[File:Symbol neutral vote.png]] '''CShellDispatch'''<br> |
− | [[File:Symbol neutral vote.png]] CFolder<br> | + | [[File:Symbol neutral vote.png]] '''CFolder'''<br> |
− | [[File:Symbol neutral vote.png]] CFolderItem, CFolderItems<br> | + | [[File:Symbol neutral vote.png]] '''CFolderItem, CFolderItems'''<br> |
− | [[File:Symbol neutral vote.png]] CFolderItemVerb, CFolderItemVerbs<br> | + | [[File:Symbol neutral vote.png]] '''CFolderItemVerb, CFolderItemVerbs'''<br> |
− | [[File:Symbol neutral vote.png]] CDefViewDual (called CShellFolderView in windows)<br> | + | [[File:Symbol neutral vote.png]] '''CDefViewDual''' (called CShellFolderView in windows)<br> |
− | [[File:Symbol oppose vote.png]] CShellFolderViewOC: Find out what this is for<br> | + | [[File:Symbol oppose vote.png]] '''CShellFolderViewOC''': Find out what this is for<br> |
|- | |- | ||
| Shell desktop || | | Shell desktop || | ||
'''Components used by explorer that implement most of the desktop'''<br> | '''Components used by explorer that implement most of the desktop'''<br> | ||
− | [[File:Symbol support vote.png]] | + | [[File:Symbol support vote.png]] '''CShellBrowser''': It doesn't support refreshing environment variables. When a folder is dragged on its edge it should show a docking bar with its contents. It should use RegisterDeviceNotifications and get notifications about storage devices and call SHChangeNotify accordingly.<br> |
− | [[File:Symbol support vote.png]] SHDesktopMessageLoop | + | [[File:Symbol support vote.png]] '''SHCreateDesktop, SHDesktopMessageLoop'''<br> |
− | [[File:Symbol support vote.png]] ShellDDEInit | + | [[File:Symbol support vote.png]] '''ShellDDEInit'''<br> |
+ | [[File:Symbol oppose vote.png]] '''CSDWindows, WinList_Init, WinList_Terminate''': In windows this is implemented in shdocvw but our shell will not depend on it at all. WinList_Init should do CoRegisterClassObject with CLSID_ShellWindows and an instance of CSDWindows. | ||
|- | |- | ||
| Components intentionally ignored || | | Components intentionally ignored || | ||
Line 100: | Line 101: | ||
|- | |- | ||
! colspan="2"| browseui | ! colspan="2"| browseui | ||
+ | |- | ||
+ | | Auto complete support || | ||
+ | '''Components used to implement autocomplete'''<br> | ||
+ | [[File:Symbol oppose vote.png]] CACLHistory<br> | ||
+ | [[File:Symbol oppose vote.png]] CACListISF (CACLIShellFolder)<br> | ||
+ | [[File:Symbol support vote.png]] CACLCustomMRU<br> | ||
+ | [[File:Symbol oppose vote.png]] CACLMRU<br> | ||
+ | [[File:Symbol support vote.png]] CACLMulti<br> | ||
+ | [[File:Symbol support vote.png]] CAutoComplete<br> | ||
+ | |- | ||
+ | | Shell bands || | ||
+ | '''Implementations of IBandSite and IDeskBand.'''<br> | ||
+ | [[File:Symbol neutral vote.png]] CBandSite: Several features are missing. Not sure if the existing code is correct<br> | ||
+ | [[File:Symbol support vote.png]] CBandSiteMenu<br> | ||
+ | [[File:Symbol neutral vote.png]] CISFBand: Several features are missing. Existing code is correct.<br> | ||
+ | [[File:Symbol oppose vote.png]] CQuickLinks<br> | ||
+ | [[File:Symbol oppose vote.png]] CDeskBar<br> | ||
+ | [[File:Symbol oppose vote.png]] CDeskBarApp<br> | ||
+ | [[File:Symbol support vote.png]] SHEnumClassesOfCategories<br> | ||
+ | |- | ||
+ | | Classic browser toolbar || | ||
+ | '''The exported components that make up the toolbar in the browser.'''<br> | ||
+ | [[File:Symbol support vote.png]] CAddressBand<br> | ||
+ | [[File:Symbol support vote.png]] CAddressEditBox<br> | ||
+ | [[File:Symbol support vote.png]] CBandProxy<br> | ||
+ | [[File:Symbol support vote.png]] CBrandBand<br> | ||
+ | [[File:Symbol neutral vote.png]] CInternetToolbar: Windows share a lot of code of this class with others like CBaseBar and CBandSite<br> | ||
+ | |- | ||
+ | | Shell browser || | ||
+ | '''The classic file explorer.'''<br> | ||
+ | [[File:Symbol support vote.png]] CShellBrowser (called CShellBrowser2 in windows): In windows this shares a lot of code with internet explorer and even depends on shdocvw, in ReactOS this class is self contained.<br> | ||
+ | [[File:Symbol oppose vote.png]] CExplorerBrowser<br> | ||
+ | [[File:Symbol oppose vote.png]] CCommonBrowser: This is the shared component between the file explorer and internet explorer in windows. We follow a flat design of the CShellBrowser instead. This won't be implemented.<br> | ||
+ | [[File:Symbol support vote.png]] CExplorerBand: Originally in shdocvw but implemented in browseui to avoid any senseless dependency. Its implementation doesn't use the same helper classes which among others implement INSCTree. We opted for a completely flat design. Besides that it should be feature complete. | ||
+ | |- | ||
+ | | Tasks support || | ||
+ | '''The components implement a com based support for work item objects.'''<br> | ||
+ | [[File:Symbol oppose vote.png]] CBackgroundTaskScheduler (?)<br> | ||
+ | [[File:Symbol oppose vote.png]] CSharedTaskScheduler<br> | ||
+ | [[File:Symbol oppose vote.png]] CShellTaskScheduler<br> | ||
+ | |- | ||
+ | | Misc || | ||
+ | '''Misc components. I'm not sure what most of them are for or if we need them'''<br> | ||
+ | [[File:Symbol support vote.png]] CProgressDialog<br> | ||
+ | [[File:Symbol oppose vote.png]] CAugmentedISF<br> | ||
+ | [[File:Symbol oppose vote.png]] CAugmentedISF2<br> | ||
+ | [[File:Symbol oppose vote.png]] CBrowserBand<br> | ||
+ | [[File:Symbol oppose vote.png]] CComCatCacheTask<br> | ||
+ | [[File:Symbol oppose vote.png]] CCommBand: Class for [https://msdn.microsoft.com/en-us/library/Bb776819 CATID_CommBand]/Horizontal Explorer Bar?<br> | ||
+ | [[File:Symbol oppose vote.png]] CDockingBarPropertyBag<br> | ||
+ | [[File:Symbol oppose vote.png]] CGlobalFolderSettings<br> | ||
+ | [[File:Symbol oppose vote.png]] CImageListCache<br> | ||
+ | [[File:Symbol oppose vote.png]] CImageCtxThumb (CLSID_ImgCtxThumbnailExtractor)<br> | ||
+ | [[File:Symbol oppose vote.png]] COrderList (called OrderListExport in the registry and CLSID_OrderListExport in the inf file)<br> | ||
+ | [[File:Symbol oppose vote.png]] CRegTreeOptions<br> | ||
+ | [[File:Symbol oppose vote.png]] CUserAssist<br> | ||
+ | [[File:Symbol oppose vote.png]] CWebSearchExt<br> | ||
+ | [[File:Symbol oppose vote.png]] CSearchBand<br> | ||
+ | [[File:Symbol oppose vote.png]] CShellSearchExt<br> | ||
|- | |- | ||
! colspan="2"| explorer | ! colspan="2"| explorer | ||
Line 105: | Line 165: | ||
! colspan="2"| shlwapi | ! colspan="2"| shlwapi | ||
|} | |} | ||
+ | |||
+ | [[Category:Development]] |
Latest revision as of 07:30, 11 May 2021
This is WIP. For now I tried to list as many parts of shell32 as possible. Note that I'm comparing ros shell with windows 2003 one here.
Current Status and Roadmap
Legend: means only bugfixes needed. means unimplemented. means that it needs lots of work, either it is too buggy or implemented in a hacky/wrong way.
shell32 | |
---|---|
Core services |
Core functions of the shell. ALL of these should be green in the end. |
Def namespace objects |
Core objects used by the namespace components to interact with the user. Fixing the noted problems in these items is really important |
Namespace |
The components that constitute the shell namespace. Fixing the gray and red components that follow isn't really important for now. The rest are |
Shell menus |
Components that implement the menu like toolbars of the shell |
Built in shell extensions |
Components that aren't part of the core and are mostly instantiated in the same way shell extensions are |
Shell automation |
Components exposing shell functionality with the IDispatch interface. As of now these are barely implemented |
Shell desktop |
Components used by explorer that implement most of the desktop |
Components intentionally ignored |
Misc components with 0 chance to get implemented |
Uncategorized components |
Misc components that I don't know what they are for |
browseui | |
Auto complete support |
Components used to implement autocomplete |
Shell bands |
Implementations of IBandSite and IDeskBand. |
Classic browser toolbar |
The exported components that make up the toolbar in the browser. |
Shell browser |
The classic file explorer. |
Tasks support |
The components implement a com based support for work item objects. |
Misc |
Misc components. I'm not sure what most of them are for or if we need them |
explorer | |
shlwapi |