]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/button.cpp
Enable variadic macros for VC9 and later.
[wxWidgets.git] / src / msw / button.cpp
index e87917bd6420e870c91974721c93c80c28490916..d00f8777930bc3640b742a0c2a8ae8230fbfe93e 100644 (file)
 // macros
 // ----------------------------------------------------------------------------
 
 // macros
 // ----------------------------------------------------------------------------
 
+BEGIN_EVENT_TABLE(wxButton, wxButtonBase)
+    EVT_CHAR_HOOK(wxButton::OnCharHook)
+END_EVENT_TABLE()
+
 // ============================================================================
 // implementation
 // ============================================================================
 // ============================================================================
 // implementation
 // ============================================================================
@@ -273,7 +277,7 @@ static wxTopLevelWindow *GetTLWParentIfNotBeingDeleted(wxWindow *win)
 // set this button as being currently default
 void wxButton::SetTmpDefault()
 {
 // set this button as being currently default
 void wxButton::SetTmpDefault()
 {
-    wxTopLevelWindow * const tlw = GetTLWParentIfNotBeingDeleted(GetParent());
+    wxTopLevelWindow * const tlw = GetTLWParentIfNotBeingDeleted(this);
     if ( !tlw )
         return;
 
     if ( !tlw )
         return;
 
@@ -287,7 +291,7 @@ void wxButton::SetTmpDefault()
 // unset this button as currently default, it may still stay permanent default
 void wxButton::UnsetTmpDefault()
 {
 // unset this button as currently default, it may still stay permanent default
 void wxButton::UnsetTmpDefault()
 {
-    wxTopLevelWindow * const tlw = GetTLWParentIfNotBeingDeleted(GetParent());
+    wxTopLevelWindow * const tlw = GetTLWParentIfNotBeingDeleted(this);
     if ( !tlw )
         return;
 
     if ( !tlw )
         return;
 
@@ -370,6 +374,25 @@ void wxButton::Command(wxCommandEvent & event)
 // event/message handlers
 // ----------------------------------------------------------------------------
 
 // event/message handlers
 // ----------------------------------------------------------------------------
 
+void wxButton::OnCharHook(wxKeyEvent& event)
+{
+    // We want to ensure that the button always processes Enter key events
+    // itself, even if it's inside some control that normally takes over them
+    // (this happens when the button is part of an in-place editor control for
+    // example).
+    if ( event.GetKeyCode() == WXK_RETURN )
+    {
+        // We should ensure that subsequent key events are still generated even
+        // if we did handle EVT_CHAR_HOOK (normally this would suppress their
+        // generation).
+        event.DoAllowNextEvent();
+    }
+    else
+    {
+        event.Skip();
+    }
+}
+
 bool wxButton::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
 {
     bool processed = false;
 bool wxButton::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
 {
     bool processed = false;