]> git.saurik.com Git - wxWidgets.git/commitdiff
Added some missing wxTextCtrl features to to-do list in wxX11's readme.txt
authorJulian Smart <julian@anthemion.co.uk>
Mon, 22 Apr 2002 14:33:07 +0000 (14:33 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Mon, 22 Apr 2002 14:33:07 +0000 (14:33 +0000)
Made the wxTipDialog fonts all Swiss (TODO: use current GUI setting for
the font family)
Worked around focus anomaly by suppressing parent's FocusIn event
when child's focus is being set by clicking on it (TODO: move some of this
to SetFocus() to make it work programmatically)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15237 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/x11/readme.txt
samples/widgets/widgets.cpp
src/generic/tipdlg.cpp
src/x11/app.cpp
src/x11/window.cpp

index 60e1a43969b674209dc7e1f5f2bcc062d3753338..9e2d595a26c0e9b437017bcdbbae83317f55762a 100644 (file)
@@ -55,9 +55,11 @@ Many of the samples are running.
 Some remaining issues:
 
 - some refresh efficiency issues
-- progress dialog not working (see dialogs sample)
 - clipboard implementation missing
 - drag and drop implementation missing
+- wxX11's wxTextCtrl (separate from wxUniv version)
+  needs some work, for example to remove vertical scrollbar,
+  and to provide wordwrap
 - wxToggleButton implementation missing
 - wxSpinCtrl implementation missing
 - tooltips implementation missing
index af1bb212723d5ebab60747f5258901748b0a45e9..b6595732cf0557e24fff0c9387577330ae74587c 100644 (file)
@@ -218,6 +218,7 @@ bool WidgetsApp::OnInit()
 
     //wxLog::AddTraceMask(_T("listbox"));
     //wxLog::AddTraceMask(_T("scrollbar"));
+    //wxLog::AddTraceMask(_T("focus"));
 
     return TRUE;
 }
index c13b869e2b6d1d069fb766d87eb50414f6257157..d1ce8278e02a292d1affdb40f21bf1d65f9a3744 100644 (file)
@@ -188,12 +188,13 @@ wxTipDialog::wxTipDialog(wxWindow *parent,
                             wxDefaultPosition, wxSize(200, 160),
                             wxTE_MULTILINE |
                             wxTE_READONLY |
+                            wxTE_NO_VSCROLL |
                             wxTE_RICH | // a hack to get rid of vert scrollbar
                             wxSUNKEN_BORDER);
 #if defined(__WXMSW__)
-    m_text->SetFont(wxFont(12, wxROMAN, wxNORMAL, wxNORMAL));
+    m_text->SetFont(wxFont(12, wxSWISS, wxNORMAL, wxNORMAL));
 #else
-    m_text->SetFont(wxFont(14, wxROMAN, wxNORMAL, wxNORMAL));
+    m_text->SetFont(wxFont(14, wxSWISS, wxNORMAL, wxNORMAL));
 #endif
 
     wxIcon icon = wxArtProvider::GetIcon(wxART_TIP, wxART_CMN_DIALOG);
index 050ac895fbb21878d37b4f3c7d3de3ad15caeb75..46eeb9379addc062bb18a660e27565416d125bb4 100644 (file)
@@ -568,9 +568,9 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
         {
             printf( "GraphicExpose event\n" );
 
-            // wxLogDebug( "GraphicsExpose from %s", win->GetName().c_str(),
-            //                              event->xgraphicsexpose.x, event->xgraphicsexpose.y,
-            //                              event->xgraphicsexpose.width, event->xgraphicsexpose.height);
+            wxLogTrace( _T("expose"), _T("GraphicsExpose from %s"), win->GetName().c_str(),
+                                          event->xgraphicsexpose.x, event->xgraphicsexpose.y,
+                                          event->xgraphicsexpose.width, event->xgraphicsexpose.height);
 
             win->GetUpdateRegion().Union( event->xgraphicsexpose.x, event->xgraphicsexpose.y,
                                           event->xgraphicsexpose.width, event->xgraphicsexpose.height);
@@ -758,6 +758,15 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
                     g_prevFocus = wxWindow::FindFocus();
                     g_nextFocus = win;
 
+                    wxLogTrace( _T("focus"), _T("About to call SetFocus on %s of type %s due to button press"), win->GetName().c_str(), win->GetClassInfo()->GetClassName() );
+
+                    // Record the fact that this window is
+                    // getting the focus, because we'll need to
+                    // check if its parent is getting a bogus
+                    // focus and duly ignore it.
+                    // TODO: may need to have this code in SetFocus, too.
+                    extern wxWindow* g_GettingFocus;
+                    g_GettingFocus = win;
                     win->SetFocus();
                 }
             }
@@ -781,19 +790,26 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
                     (event->xfocus.mode == NotifyNormal))
 #endif
                 {
-                    // wxLogDebug( "FocusIn from %s of type %s", win->GetName().c_str(), win->GetClassInfo()->GetClassName() );
-#if 0
-                    wxString msg;
-                    msg.Printf( "FocusIn from %s of type %s\n", win->GetName().c_str(), win->GetClassInfo()->GetClassName() );
-                    printf(msg.c_str());
-#endif
+                    wxLogTrace( _T("focus"), _T("FocusIn from %s of type %s"), win->GetName().c_str(), win->GetClassInfo()->GetClassName() );
                     
-                    wxFocusEvent focusEvent(wxEVT_SET_FOCUS, win->GetId());
-                    focusEvent.SetEventObject(win);
-                    focusEvent.SetWindow( g_prevFocus );
-                    g_prevFocus = NULL;
+                    extern wxWindow* g_GettingFocus;
+                    if (g_GettingFocus && g_GettingFocus->GetParent() == win)
+                    {
+                        // Ignore this, this can be a spurious FocusIn
+                        // caused by a child having its focus set.
+                        g_GettingFocus = NULL;
+                        wxLogTrace( _T("focus"), _T("FocusIn from %s of type %s being deliberately ignored"), win->GetName().c_str(), win->GetClassInfo()->GetClassName() );
+                        return TRUE;
+                    }
+                    else
+                    {
+                        wxFocusEvent focusEvent(wxEVT_SET_FOCUS, win->GetId());
+                        focusEvent.SetEventObject(win);
+                        focusEvent.SetWindow( g_prevFocus );
+                        g_prevFocus = NULL;
 
-                    return win->GetEventHandler()->ProcessEvent(focusEvent);
+                        return win->GetEventHandler()->ProcessEvent(focusEvent);
+                    }
                 }
                 return FALSE;
                 break;
@@ -805,7 +821,7 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
                     (event->xfocus.mode == NotifyNormal))
 #endif
                 {
-                    // wxLogDebug( "FocusOut from %s of type %s", win->GetName().c_str(), win->GetClassInfo()->GetClassName() );
+                    wxLogTrace( _T("focus"), _T("FocusOut from %s of type %s"), win->GetName().c_str(), win->GetClassInfo()->GetClassName() );
 
                     wxFocusEvent focusEvent(wxEVT_KILL_FOCUS, win->GetId());
                     focusEvent.SetEventObject(win);
index b04be864ebc75da7a3ecc444b221de574eb2c387..9fa7e4d83fc598d9ac8478990fed9f005d8a85f4 100644 (file)
@@ -386,18 +386,15 @@ void wxWindowX11::SetFocus()
     
     if (wxWindowIsVisible(xwindow))
     {
-        XSetInputFocus( wxGlobalDisplay(), xwindow, RevertToParent, CurrentTime );
+        wxLogTrace( _T("focus"), _T("wxWindowX11::SetFocus: %s"), GetClassInfo()->GetClassName());
+        //        XSetInputFocus( wxGlobalDisplay(), xwindow, RevertToParent, CurrentTime );
+        XSetInputFocus( wxGlobalDisplay(), xwindow, RevertToNone, CurrentTime );
         m_needsInputFocus = FALSE;
     }
     else
     {
         m_needsInputFocus = TRUE;
     }
-#if 0
-    wxString msg;
-    msg.Printf("SetFocus: %s\n", GetClassInfo()->GetClassName());
-    printf(msg.c_str());
-#endif
 }
 
 // Get the window with the focus
@@ -1225,6 +1222,9 @@ void wxWindowX11::OnSysColourChanged(wxSysColourChangedEvent& event)
     }
 }
 
+// See handler for InFocus case in app.cpp for details.
+wxWindow* g_GettingFocus = NULL;
+
 void wxWindowX11::OnInternalIdle()
 {
     // Update invalidated regions.
@@ -1247,6 +1247,7 @@ void wxWindowX11::OnInternalIdle()
         // no point in trying again.
         m_needsInputFocus = FALSE;
     }
+    g_GettingFocus = NULL;
 }
 
 // ----------------------------------------------------------------------------