Shell status

From ReactOS Wiki
Jump to: navigation, search

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: Symbol support vote.png means only bugfixes needed. Symbol oppose vote.png means unimplemented. Symbol neutral vote.png means that it needs lots of work, either it is too buggy or implemented in a hacky/wrong way.

Core services

Core functions of the shell. ALL of these should be green in the end.
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.
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)
Symbol neutral vote.png SHFileOperationW: Many edge cases are broken. Right now most copy and paste problems are bugs in this function
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
Symbol support vote.png SHBrowseForFolderW
Symbol neutral vote.png Control_RunDLLW: See the failed tests to see how broken it is
Symbol neutral vote.png SHMapPIDLToSystemImageListIndex: The way it interacts with IIconExtraction is FUBAR. Overlays support is hacked.
Symbol oppose vote.png SHMapIDListToImageListIndexAsync
Symbol support vote.png CShellItem
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.
Symbol oppose vote.png DAD_* functions
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
Symbol oppose vote.png SHAppBarMessage
Symbol oppose vote.png OpenAs_RunDLL

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
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_
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
Symbol neutral vote.png CExtractIcon: Its implementation and the way it interacts with the icon cache is a mess.


The components that constitute the shell namespace. Fixing the gray and red components that follow isn't really important for now. The rest are
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
Symbol support vote.png CDesktopFolder
Symbol support vote.png CDrivesFolder: Windows use a CMountpoint class but we do the bare minimum. I guess it is fine thins way
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)
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)
Symbol support vote.png CRecycleBinFolder: Icons are unimplemented due to the stupidly complex internal architecture of the recycle bin implementation
Symbol neutral vote.png CNetFolder: This is only a quick and dirty implementation so far
Symbol neutral vote.png CMergedFolder: pidls must never contain pointers. they can contain other pidls however
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
Symbol oppose vote.png CCDBurnFolder: do we even need this?

Shell menus

Components that implement the menu like toolbars of the shell
Symbol support vote.png CMenuBand: Doesn't support accessibility, drag and drop and renaming shell folder items
Symbol support vote.png CMenuDeskBar
Symbol support vote.png CMenuSite
Symbol support vote.png CStartMenu
Symbol oppose vote.png CPersonalStartMenu: Used by the modern start menu. It implements the all programs popup menu.
Symbol oppose vote.png CTrackShellMenu: Find out that this is for

Built in shell extensions

Components that aren't part of the core and are mostly instantiated in the same way shell extensions are
Symbol support vote.png CShellLink
Symbol support vote.png CNewMenu
Symbol support vote.png COpenWithMenu
Symbol support vote.png CExeDropHandler
Symbol support vote.png CFileDefExt
Symbol support vote.png CDrvDefExt
Symbol support vote.png CFolderOptions
Symbol oppose vote.png CFileSearchBand: Why on earth is there an IDeskBand in shell32?
Symbol oppose vote.png CFolderShortcut
Symbol oppose vote.png CSendToMenu
Symbol oppose vote.png CCDBurn
Symbol oppose vote.png CCopyMoveToMenu
Symbol oppose vote.png CStartMenuPin: I think this is the IContextMenu that lets you pin stuff in the modern start menu
Symbol oppose vote.png CBurnAudioCDExtension

Shell automation

Components exposing shell functionality with the IDispatch interface. As of now these are barely implemented
Symbol neutral vote.png CShellDispatch
Symbol neutral vote.png CFolder
Symbol neutral vote.png CFolderItem, CFolderItems
Symbol neutral vote.png CFolderItemVerb, CFolderItemVerbs
Symbol neutral vote.png CDefViewDual (called CShellFolderView in windows)
Symbol oppose vote.png CShellFolderViewOC: Find out what this is for

Shell desktop

Components used by explorer that implement most of the desktop
Symbol support vote.png CShellBrowser: It doesn't support refreshing environment variables. When a folder is draged 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.
Symbol support vote.png SHCreateDesktop, SHDesktopMessageLoop
Symbol support vote.png ShellDDEInit
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

Misc components with 0 chance to get implemented
Symbol oppose vote.png CActiveDesktop Symbol oppose vote.png CBriefcase Symbol oppose vote.png CDUIView Symbol oppose vote.png DirectUI:: Symbol oppose vote.png Expando

Uncategorized components

Misc components that I don't know what they are for
Symbol oppose vote.png CDeskMovr Symbol oppose vote.png CFolderViewHost Symbol oppose vote.png CQuickLinks Symbol oppose vote.png CThumbnail

Auto complete support

Components used to implement autocomplete
Symbol oppose vote.png CACLHistory
Symbol oppose vote.png CACListISF (CACLIShellFolder)
Symbol support vote.png CACLCustomMRU
Symbol oppose vote.png CACLMRU
Symbol support vote.png CACLMulti
Symbol support vote.png CAutoComplete

Shell bands

Implementations of IBandSite and IDeskBand.
Symbol neutral vote.png CBandSite: Several features are missing. Not sure if the existing code is correct
Symbol support vote.png CBandSiteMenu
Symbol neutral vote.png CISFBand: Several features are missing. Existing code is correct.
Symbol oppose vote.png CQuickLinks
Symbol oppose vote.png CDeskBar
Symbol oppose vote.png CDeskBarApp
Symbol support vote.png SHEnumClassesOfCategories

Classic browser toolbar

The exported components that make up the toolbar in the browser.
Symbol support vote.png CAddressBand
Symbol support vote.png CAddressEditBox
Symbol support vote.png CBandProxy
Symbol support vote.png CBrandBand
Symbol neutral vote.png CInternetToolbar: Windows share a lot of code of this class with others like CBaseBar and CBandSite

Shell browser

The classic file explorer.
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.
Symbol oppose vote.png CExplorerBrowser
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.
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.
Symbol oppose vote.png CBackgroundTaskScheduler (?)
Symbol oppose vote.png CSharedTaskScheduler
Symbol oppose vote.png CShellTaskScheduler


Misc components. I'm not sure what most of them are for or if we need them
Symbol support vote.png CProgressDialog
Symbol oppose vote.png CAugmentedISF
Symbol oppose vote.png CAugmentedISF2
Symbol oppose vote.png CBrowserBand
Symbol oppose vote.png CComCatCacheTask
Symbol oppose vote.png CCommBand
Symbol oppose vote.png CDockingBarPropertyBag
Symbol oppose vote.png CGlobalFolderSettings
Symbol oppose vote.png CImageListCache
Symbol oppose vote.png CImageCtxThumb (CLSID_ImgCtxThumbnailExtractor)
Symbol oppose vote.png COrderList (called OrderListExport in the registry and CLSID_OrderListExport in the inf file)
Symbol oppose vote.png CRegTreeOptions
Symbol oppose vote.png CUserAssist
Symbol oppose vote.png CWebSearchExt
Symbol oppose vote.png CSearchBand
Symbol oppose vote.png CShellSearchExt