[NTDLL][NTUSER] Fix unselected text after WM_CBLOSTTEXTFOCUS
authorManuel Bachmann <tarnyko@tarnyko.net>
Thu, 2 Nov 2017 01:06:50 +0000 (02:06 +0100)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Sun, 19 Aug 2018 12:24:34 +0000 (14:24 +0200)
When we unselect text after the WM_CBLOSTTEXTFOCUS message,
make sure we also forget we have been focused at all;
otherwise the edit may become focused again, but with an
empty text selection.

CORE-10266

win32ss/user/user32/controls/combo.c
win32ss/user/user32/controls/edit.c

index eb9d6fd..1153790 100644 (file)
@@ -2260,16 +2260,14 @@ LRESULT WINAPI ComboWndProc_common( HWND hwnd, UINT message, WPARAM wParam, LPAR
         }
         break;
 
-        case WM_CBLOSTTEXTFOCUS: /* undocumented message - deselects the text when focus is lost */
+    case WM_CBLOSTTEXTFOCUS: /* undocumented message - deselects the text when focus is lost */
+        if (lphc->hWndEdit != NULL)
         {
-           if (lphc->hWndEdit != NULL)
-           {
-               SendMessage(lphc->self, WM_LBUTTONUP, 0, 0xFFFFFFFF);
-               SendMessage(lphc->hWndEdit, EM_SETSEL, 0, 0);
-               lphc->wState &= ~CBF_FOCUSED;   
-               CB_NOTIFY(lphc, CBN_KILLFOCUS);
-           } 
-        }
+            SendMessage(lphc->self, WM_LBUTTONUP, 0, 0xFFFFFFFF);
+            SendMessage(lphc->hWndEdit, EM_SETSEL, 0, 0);
+            lphc->wState &= ~(CBF_FOCUSED | CBF_BEENFOCUSED);
+            CB_NOTIFY(lphc, CBN_KILLFOCUS);
+        } 
         return TRUE;
 
 #endif
index f1db16f..70bdd1d 100644 (file)
@@ -3626,7 +3626,6 @@ static LRESULT EDIT_WM_KeyDown(EDITSTATE *es, INT key)
  */
 static LRESULT EDIT_WM_KillFocus(EDITSTATE *es)
 {
-#if 0 // See CORE-10266.
        HWND hCombo;
        LONG lStyles;
 
@@ -3647,15 +3646,7 @@ static LRESULT EDIT_WM_KillFocus(EDITSTATE *es)
                if ((lStyles & CBS_DROPDOWN) || (lStyles & CBS_SIMPLE))
                        SendMessage(hCombo, WM_CBLOSTTEXTFOCUS, 0, 0);
        }
-#else
-       es->flags &= ~EF_FOCUSED;
-       DestroyCaret();
-       if(!(es->style & ES_NOHIDESEL))
-               EDIT_InvalidateText(es, es->selection_start, es->selection_end);
-       EDIT_NOTIFY_PARENT(es, EN_KILLFOCUS);
-       /* throw away left over scroll when we lose focus */
-       es->wheelDeltaRemainder = 0;
-#endif
+
        return 0;
 }