[SHELL32] CDefView: Improve the context menu positioning 1817/head
authorMark Jansen <mark.jansen@reactos.org>
Thu, 8 Aug 2019 19:01:19 +0000 (21:01 +0200)
committerMark Jansen <mark.jansen@reactos.org>
Thu, 15 Aug 2019 09:28:31 +0000 (11:28 +0200)
Previously we would always show a menu on the focused item, but
this should only be done when it is also selected.

dll/win32/shell32/CDefView.cpp

index df076f5..acaa2e6 100644 (file)
@@ -1443,15 +1443,19 @@ LRESULT CDefView::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &b
     /* There is no position requested, so try to find one */
     if (lParam == ~0)
     {
-        int lvIndex;
+        HWND hFocus = ::GetFocus();
+        int lvIndex = -1;
         POINT pt;
 
-        /* Do we have a focused item, */
-        if ((lvIndex = m_ListView.GetNextItem(-1, LVIS_FOCUSED)) < 0)
+        if (hFocus == m_ListView.m_hWnd || m_ListView.IsChild(hFocus))
         {
-            /* or a selected item? */
-            lvIndex = m_ListView.GetNextItem(-1, LVIS_SELECTED);
+            /* Is there an item focused and selected? */
+            lvIndex = m_ListView.GetNextItem(-1, LVIS_SELECTED|LVIS_FOCUSED);
+            /* If not, find the first selected item */
+            if (lvIndex < 0)
+                lvIndex = m_ListView.GetNextItem(-1, LVIS_SELECTED);
         }
+
         /* We got something */
         if (lvIndex > -1)
         {