]> git.saurik.com Git - wxWidgets.git/commitdiff
Improve default wxSearchCtrl GetBestSize() width and ensure that SetFocus focuses...
authorKevin Ollivier <kevino@theolliviers.com>
Mon, 11 Dec 2006 07:35:46 +0000 (07:35 +0000)
committerKevin Ollivier <kevino@theolliviers.com>
Mon, 11 Dec 2006 07:35:46 +0000 (07:35 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43911 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/mac/carbon/srchctrl.h
src/mac/carbon/srchctrl.cpp

index 2d521cf67f7966cdafc66a170f945929736fa1a3..84da5212d720a6d5b4ceadd9eb2b8db31486e80d 100644 (file)
@@ -83,6 +83,8 @@ public:
 
     wxMacSearchFieldControl * GetPeer() const
     { return (wxMacSearchFieldControl*) m_peer; }
 
     wxMacSearchFieldControl * GetPeer() const
     { return (wxMacSearchFieldControl*) m_peer; }
+    
+    virtual void SetFocus();
        
 protected:
 
        
 protected:
 
index 89f2e20457ed035648a8c0bd40ace40ee6f18173..f6677c0ff8b23e65d96591129fb5513a9ac6c0dc 100644 (file)
@@ -261,7 +261,34 @@ wxSearchCtrl::~wxSearchCtrl()
 
 wxSize wxSearchCtrl::DoGetBestSize() const
 {
 
 wxSize wxSearchCtrl::DoGetBestSize() const
 {
-    return wxWindow::DoGetBestSize();
+    wxSize size = wxWindow::DoGetBestSize();
+    // it seems to return a default width of about 16, which is way too small here.
+    if (size.GetWidth() < 100)
+        size.SetWidth(100);
+    
+    return size;
+}
+
+void wxSearchCtrl::SetFocus()
+{
+    // NB: We have to implement SetFocus a little differently because kControlFocusNextPart
+    // leads to setting the focus on the search icon rather than the text area.
+    // We get around this by explicitly telling the control to set focus to the
+    // text area.
+    if ( !AcceptsFocus() )
+            return ;
+
+    wxWindow* former = FindFocus() ;
+    if ( former == this )
+        return ;
+
+    // as we cannot rely on the control features to find out whether we are in full keyboard mode,
+    // we can only leave in case of an error
+    OSStatus err = m_peer->SetFocus( kControlEditTextPart ) ;
+    if ( err == errCouldntSetFocus )
+        return ;
+
+    SetUserFocusWindow( (WindowRef)MacGetTopLevelWindowRef() );
 }
 
 // search control specific interfaces
 }
 
 // search control specific interfaces