[RSHELL]
[reactos.git] / base / shell / rshell / CMenuDeskBar.cpp
index 2923fa3..94340cd 100644 (file)
@@ -133,6 +133,17 @@ HRESULT STDMETHODCALLTYPE CMenuDeskBar::QueryService(REFGUID guidService, REFIID
     {
         return this->QueryInterface(riid, ppvObject);
     }
+    
+    if (IsEqualGUID(guidService, SID_SMenuBandBottom) ||
+        IsEqualGUID(guidService, SID_SMenuBandBottomSelected) ||
+        IsEqualGUID(guidService, SID_SMenuBandChild))
+    {
+        if (m_Client == NULL)
+            return E_NOINTERFACE;
+
+        return IUnknown_QueryService(m_Client, guidService, riid, ppvObject);
+    }
+
 
     if (m_Site == NULL)
         return E_NOINTERFACE;
@@ -345,7 +356,7 @@ HRESULT STDMETHODCALLTYPE CMenuDeskBar::Popup(POINTL *ppt, RECTL *prcExclude, MP
         y = rcWorkArea.bottom - cy;
     }
 
-    this->SetWindowPos(HWND_TOPMOST, x, y, cx, cy, SWP_SHOWWINDOW);
+    this->SetWindowPos(HWND_TOPMOST, x, y, cx, cy, SWP_SHOWWINDOW | SWP_NOACTIVATE);
 
     m_ShowFlags = dwFlags;
     m_Shown = true;
@@ -636,9 +647,14 @@ LRESULT CMenuDeskBar::_OnActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL
     return 0;
 }
 
+LRESULT CMenuDeskBar::_OnMouseActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
+{
+    return MA_NOACTIVATE;
+}
+
 LRESULT CMenuDeskBar::_OnAppActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 {
-    if (wParam == 0)
+    if (wParam == 0 && m_Shown)
     {
         OnSelect(MPOS_FULLCANCEL);
     }