Author: dquintana Date: Sat Jul 12 02:43:06 2014 New Revision: 63710
URL: http://svn.reactos.org/svn/reactos?rev=63710&view=rev Log: [RSHELL] * Notify the parent menu popup when the deskbar is closing.
[EXPLORER-NEW] * Set the button pressed when the start menu gets displayed. * Set the button released when the start menu notifies it was closed.
Modified: branches/shell-experiments/base/shell/explorer-new/precomp.h branches/shell-experiments/base/shell/explorer-new/startmnu.c branches/shell-experiments/base/shell/explorer-new/traywnd.c branches/shell-experiments/base/shell/rshell/CMenuDeskBar.cpp
Modified: branches/shell-experiments/base/shell/explorer-new/precomp.h URL: http://svn.reactos.org/svn/reactos/branches/shell-experiments/base/shell/exp... ============================================================================== --- branches/shell-experiments/base/shell/explorer-new/precomp.h [iso-8859-1] (original) +++ branches/shell-experiments/base/shell/explorer-new/precomp.h [iso-8859-1] Sat Jul 12 02:43:06 2014 @@ -455,4 +455,7 @@ CreateTaskSwitchWnd(IN HWND hWndParent, IN OUT ITrayWindow *Tray);
+HRESULT +Tray_OnStartMenuDismissed(); + #endif /* _EXPLORER_PRECOMP__H_ */
Modified: branches/shell-experiments/base/shell/explorer-new/startmnu.c URL: http://svn.reactos.org/svn/reactos/branches/shell-experiments/base/shell/exp... ============================================================================== --- branches/shell-experiments/base/shell/explorer-new/startmnu.c [iso-8859-1] (original) +++ branches/shell-experiments/base/shell/explorer-new/startmnu.c [iso-8859-1] Sat Jul 12 02:43:06 2014 @@ -291,6 +291,7 @@ static const IServiceProviderVtbl IServiceProviderImpl_Vtbl; static const ITrayPrivVtbl ITrayPrivImpl_Vtbl; static const IOleCommandTargetVtbl IOleCommandTargetImpl_Vtbl; +static const IMenuPopupVtbl IMenuPopupImpl_Vtbl;
typedef struct { @@ -298,9 +299,12 @@ const IServiceProviderVtbl *lpServiceProviderVtbl; const ITrayPrivVtbl *lpStartMenuCallbackVtbl; const IOleCommandTargetVtbl *lpOleCommandTargetVtbl; + const IMenuPopupVtbl *lpMenuPopupVtbl; LONG Ref;
ITrayWindow *Tray; + + IMenuPopup * StartMenuPopup; } IStartMenuSiteImpl;
static IUnknown * @@ -313,6 +317,8 @@ IMPL_CASTS(IServiceProvider, IStartMenuSite, lpServiceProviderVtbl) IMPL_CASTS(ITrayPriv, IStartMenuSite, lpStartMenuCallbackVtbl) IMPL_CASTS(IOleCommandTarget, IStartMenuSite, lpOleCommandTargetVtbl) +IMPL_CASTS(IDeskBar, IStartMenuSite, lpMenuPopupVtbl) +IMPL_CASTS(IMenuPopup, IStartMenuSite, lpMenuPopupVtbl)
/*******************************************************************/
@@ -379,6 +385,16 @@ &IID_IOleCommandTarget)) { *ppvObj = IOleCommandTarget_from_IStartMenuSiteImpl(This); + } + else if (IsEqualIID(riid, + &IID_IDeskBar)) + { + *ppvObj = IDeskBar_from_IStartMenuSiteImpl(This); + } + else if (IsEqualIID(riid, + &IID_IMenuPopup)) + { + *ppvObj = IMenuPopup_from_IStartMenuSiteImpl(This); } else { @@ -776,6 +792,89 @@
/*******************************************************************/
+METHOD_IUNKNOWN_INHERITED_ADDREF(IMenuPopup, IStartMenuSite) +METHOD_IUNKNOWN_INHERITED_RELEASE(IMenuPopup, IStartMenuSite) +METHOD_IUNKNOWN_INHERITED_QUERYINTERFACE(IMenuPopup, IStartMenuSite) + +static HRESULT STDMETHODCALLTYPE +IStartMenuSiteImpl_IMenuPopup_GetWindow(IN OUT IMenuPopup *iface, OUT HWND *phwnd) +{ + IStartMenuSiteImpl * This = IStartMenuSiteImpl_from_IMenuPopup(iface); + ITrayPriv * tp = ITrayPriv_from_IStartMenuSiteImpl(This); + return IStartMenuSiteImpl_GetWindow(tp, phwnd); +} + +static HRESULT STDMETHODCALLTYPE +IStartMenuSiteImpl_IMenuPopup_ContextSensitiveHelp(IN OUT IMenuPopup *iface, IN BOOL fEnterMode) +{ + IStartMenuSiteImpl * This = IStartMenuSiteImpl_from_IMenuPopup(iface); + ITrayPriv * tp = ITrayPriv_from_IStartMenuSiteImpl(This); + return IStartMenuSiteImpl_ContextSensitiveHelp(tp, fEnterMode); +} + +static HRESULT STDMETHODCALLTYPE +IStartMenuSiteImpl_SetClient(IN OUT IMenuPopup *iface, IUnknown *punkClient) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +IStartMenuSiteImpl_GetClient(IN OUT IMenuPopup *iface, IUnknown ** ppunkClient) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +IStartMenuSiteImpl_OnPosRectChangeDB(IN OUT IMenuPopup *iface, RECT *prc) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +IStartMenuSiteImpl_Popup(IN OUT IMenuPopup *iface, POINTL *ppt, RECTL *prcExclude, MP_POPUPFLAGS dwFlags) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +IStartMenuSiteImpl_OnSelect(IN OUT IMenuPopup *iface, DWORD dwSelectType) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +IStartMenuSiteImpl_SetSubMenu(IN OUT IMenuPopup *iface, IMenuPopup *pmp, BOOL fSet) +{ + if (!fSet) + { + return Tray_OnStartMenuDismissed(); + } + + return S_OK; +} + +static const IMenuPopupVtbl IMenuPopupImpl_Vtbl = +{ + /*** IUnknown methods ***/ + METHOD_IUNKNOWN_INHERITED_QUERYINTERFACE_NAME(IMenuPopup, IStartMenuSite), + METHOD_IUNKNOWN_INHERITED_ADDREF_NAME(IMenuPopup, IStartMenuSite), + METHOD_IUNKNOWN_INHERITED_RELEASE_NAME(IMenuPopup, IStartMenuSite), + /*** IOleWindow methods ***/ + IStartMenuSiteImpl_IMenuPopup_GetWindow, + IStartMenuSiteImpl_IMenuPopup_ContextSensitiveHelp, + /*** IDeskBar methods ***/ + IStartMenuSiteImpl_SetClient, + IStartMenuSiteImpl_GetClient, + IStartMenuSiteImpl_OnPosRectChangeDB, + /*** IMenuPopup ***/ + IStartMenuSiteImpl_Popup, + IStartMenuSiteImpl_OnSelect, + IStartMenuSiteImpl_SetSubMenu +}; + + +/*******************************************************************/ + static IStartMenuSiteImpl* IStartMenuSiteImpl_Construct(IN ITrayWindow *Tray) { @@ -791,6 +890,7 @@ This->lpServiceProviderVtbl = &IServiceProviderImpl_Vtbl; This->lpStartMenuCallbackVtbl = &ITrayPrivImpl_Vtbl; This->lpOleCommandTargetVtbl = &IOleCommandTargetImpl_Vtbl; + This->lpMenuPopupVtbl = &IMenuPopupImpl_Vtbl; This->Ref = 1;
This->Tray = Tray;
Modified: branches/shell-experiments/base/shell/explorer-new/traywnd.c URL: http://svn.reactos.org/svn/reactos/branches/shell-experiments/base/shell/exp... ============================================================================== --- branches/shell-experiments/base/shell/explorer-new/traywnd.c [iso-8859-1] (original) +++ branches/shell-experiments/base/shell/explorer-new/traywnd.c [iso-8859-1] Sat Jul 12 02:43:06 2014 @@ -101,6 +101,8 @@ HDPA hdpaShellServices; } ITrayWindowImpl;
+static ITrayWindowImpl * g_TrayWindow; + BOOL LaunchCPanel(HWND hwnd, LPCTSTR applet) { TCHAR szParams[MAX_PATH]; @@ -2122,6 +2124,8 @@ &pt, &rcExclude, dwFlags); + + SendMessageW(This->hwndStart, BM_SETSTATE, TRUE, 0); } } } @@ -2870,6 +2874,8 @@
ITrayWindowImpl_Open(TrayWindow);
+ g_TrayWindow = This; + return TrayWindow; }
@@ -3040,3 +3046,16 @@ ITrayWindowImpl_IShellDesktopTray_RegisterDesktopWindow, ITrayWindowImpl_IShellDesktopTray_Unknown }; + +HRESULT +ITrayWindowImpl_RaiseStartButton(ITrayWindowImpl * This) +{ + SendMessageW(This->hwndStart, BM_SETSTATE, FALSE, 0); + return S_OK; +} + +HRESULT +Tray_OnStartMenuDismissed() +{ + return ITrayWindowImpl_RaiseStartButton(g_TrayWindow); +}
Modified: branches/shell-experiments/base/shell/rshell/CMenuDeskBar.cpp URL: http://svn.reactos.org/svn/reactos/branches/shell-experiments/base/shell/rsh... ============================================================================== --- branches/shell-experiments/base/shell/rshell/CMenuDeskBar.cpp [iso-8859-1] (original) +++ branches/shell-experiments/base/shell/rshell/CMenuDeskBar.cpp [iso-8859-1] Sat Jul 12 02:43:06 2014 @@ -495,6 +495,11 @@
m_Shown = false;
+ if (m_SubMenuParent) + { + m_SubMenuParent->SetSubMenu(this, FALSE); + } + if (m_SubMenuChild) { hr = m_SubMenuChild->OnSelect(MPOS_CANCELLEVEL);