diff --git a/controls/button.c b/controls/button.c
index 44b1b00130238e5e05c47d6e163a03e8aff60a78..a9747964df01942640e389f4747ea63e12ea71fa 100644
--- a/controls/button.c
+++ b/controls/button.c
@@ -136,11 +136,20 @@ static inline LRESULT WINAPI ButtonWndProc_locked(WND* wndPtr, UINT uMsg,
         }
         break;
 
-    case WM_LBUTTONDOWN:
     case WM_LBUTTONDBLCLK:
-        SendMessageA( hWnd, BM_SETSTATE, TRUE, 0 );
+	if(wndPtr->dwStyle & BS_NOTIFY || 
+		style==BS_RADIOBUTTON ||
+		style==BS_USERBUTTON ||
+		style==BS_OWNERDRAW){
+	    SendMessageA( GetParent(hWnd), WM_COMMAND,
+		    MAKEWPARAM( wndPtr->wIDmenu, BN_DOUBLECLICKED ), hWnd);
+	    break;
+	}
+	/* fall through */
+    case WM_LBUTTONDOWN:
         SetCapture( hWnd );
         SetFocus( hWnd );
+        SendMessageA( hWnd, BM_SETSTATE, TRUE, 0 );
         break;
 
     case WM_LBUTTONUP: