[RSHELL]
[reactos.git] / base / shell / rshell / CMenuFocusManager.cpp
index ae0332c..36ef3d0 100644 (file)
@@ -396,12 +396,10 @@ LRESULT CMenuFocusManager::ProcessMouseDown(MSG* msg)
 
     TRACE("MouseDown %d\n", m_isLButtonDown);
 
-    BOOL isTracking = FALSE;
     if (entry)
     {
         ScreenToClient(child, &pt);
         iHitTestResult = SendMessageW(child, TB_HITTEST, 0, (LPARAM) &pt);
-        isTracking = entry->mb->_IsTracking();
 
         if (iHitTestResult >= 0)
         {
@@ -448,12 +446,10 @@ LRESULT CMenuFocusManager::ProcessMouseUp(MSG* msg)
 
     TRACE("MouseUp %d\n", m_isLButtonDown);
 
-    BOOL isTracking = FALSE;
     if (entry)
     {
         ScreenToClient(child, &pt);
         iHitTestResult = SendMessageW(child, TB_HITTEST, 0, (LPARAM) &pt);
-        isTracking = entry->mb->_IsTracking();
 
         if (iHitTestResult >= 0)
         {
@@ -641,6 +637,16 @@ LRESULT CMenuFocusManager::GetMsgHook(INT nCode, WPARAM hookWParam, LPARAM hookL
 
 HRESULT CMenuFocusManager::PlaceHooks()
 {
+    if (m_hMsgFilterHook)
+    {
+        WARN("GETMESSAGE hook already placed!\n");
+        return S_OK;
+    }
+    if (m_hMsgFilterHook)
+    {
+        WARN("MSGFILTER hook already placed!\n");
+        return S_OK;
+    }
     if (m_current->type == TrackedMenuEntry)
     {
         TRACE("Entering MSGFILTER hook...\n");
@@ -759,7 +765,9 @@ HRESULT CMenuFocusManager::UpdateFocus()
 
 HRESULT CMenuFocusManager::PushMenuBar(CMenuBand * mb)
 {
-    TRACE("PushTrackedPopup %p\n", mb);
+    DbgPrint("PushMenuBar %p\n", mb);
+
+    mb->AddRef();
 
     _ASSERT(m_bandCount == 0);
 
@@ -772,7 +780,9 @@ HRESULT CMenuFocusManager::PushMenuBar(CMenuBand * mb)
 
 HRESULT CMenuFocusManager::PushMenuPopup(CMenuBand * mb)
 {
-    TRACE("PushTrackedPopup %p\n", mb);
+    DbgPrint("PushTrackedPopup %p\n", mb);
+
+    mb->AddRef();
 
     _ASSERT(!m_current || m_current->type != TrackedMenuEntry);
 
@@ -793,7 +803,7 @@ HRESULT CMenuFocusManager::PushMenuPopup(CMenuBand * mb)
 
 HRESULT CMenuFocusManager::PushTrackedPopup(HMENU popup)
 {
-    TRACE("PushTrackedPopup %p\n", popup);
+    DbgPrint("PushTrackedPopup %p\n", popup);
 
     _ASSERT(m_bandCount > 0);
     _ASSERT(!m_current || m_current->type != TrackedMenuEntry);
@@ -802,7 +812,7 @@ HRESULT CMenuFocusManager::PushTrackedPopup(HMENU popup)
     if (FAILED_UNEXPECTEDLY(hr))
         return hr;
 
-    TRACE("PushTrackedPopup %p\n", popup);
+    DbgPrint("PushTrackedPopup %p\n", popup);
     m_selectedMenu = popup;
     m_selectedItem = -1;
     m_selectedItemFlags = 0;
@@ -816,7 +826,12 @@ HRESULT CMenuFocusManager::PopMenuBar(CMenuBand * mb)
     CMenuBand * mbc;
     HRESULT hr;
 
-    TRACE("PopMenuBar %p\n", mb);
+    DbgPrint("PopMenuBar %p\n", mb);
+
+    if (m_current == m_entryUnderMouse)
+    {
+        m_entryUnderMouse = NULL;
+    }
 
     hr = PopFromArray(&type, &mbc, NULL);
     if (FAILED_UNEXPECTEDLY(hr))
@@ -834,6 +849,8 @@ HRESULT CMenuFocusManager::PopMenuBar(CMenuBand * mb)
 
     mbc->_SetParentBand(NULL);
 
+    mbc->Release();
+
     hr = UpdateFocus();
     if (FAILED_UNEXPECTEDLY(hr))
         return hr;
@@ -853,7 +870,12 @@ HRESULT CMenuFocusManager::PopMenuPopup(CMenuBand * mb)
     CMenuBand * mbc;
     HRESULT hr;
 
-    TRACE("PopMenuPopup %p\n", mb);
+    DbgPrint("PopMenuPopup %p\n", mb);
+
+    if (m_current == m_entryUnderMouse)
+    {
+        m_entryUnderMouse = NULL;
+    }
 
     hr = PopFromArray(&type, &mbc, NULL);
     if (FAILED_UNEXPECTEDLY(hr))
@@ -871,6 +893,8 @@ HRESULT CMenuFocusManager::PopMenuPopup(CMenuBand * mb)
 
     mbc->_SetParentBand(NULL);
 
+    mbc->Release();
+
     hr = UpdateFocus();
     if (FAILED_UNEXPECTEDLY(hr))
         return hr;
@@ -890,7 +914,7 @@ HRESULT CMenuFocusManager::PopTrackedPopup(HMENU popup)
     HMENU hmenu;
     HRESULT hr;
 
-    TRACE("PopTrackedPopup %p\n", popup);
+    DbgPrint("PopTrackedPopup %p\n", popup);
 
     hr = PopFromArray(&type, NULL, &hmenu);
     if (FAILED_UNEXPECTEDLY(hr))