From: Julian Smart Date: Sun, 7 Mar 2004 17:28:36 +0000 (+0000) Subject: Improved wxTreeCtrl tooltip processing performance (causing X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/73bb67760795ef047ca16c1f151ba49c77eaef62?ds=sidebyside Improved wxTreeCtrl tooltip processing performance (causing major delays in processing button clicks) Added wxFULL_REPAINT_ON_RESIZE as default for wxStatusBar on wxGTK since otherwise there are display problems. Similarly for wxGrid. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26132 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/frame.h b/include/wx/frame.h index e202679bb9..ee270269f7 100644 --- a/include/wx/frame.h +++ b/include/wx/frame.h @@ -89,7 +89,7 @@ public: #if wxUSE_STATUSBAR // create the main status bar by calling OnCreateStatusBar() virtual wxStatusBar* CreateStatusBar(int number = 1, - long style = wxST_SIZEGRIP, + long style = wxST_SIZEGRIP|wxFULL_REPAINT_ON_RESIZE, wxWindowID winid = 0, const wxString& name = wxStatusLineNameStr); diff --git a/include/wx/generic/statusbr.h b/include/wx/generic/statusbr.h index c36a0c7cdc..364c1b3d0b 100644 --- a/include/wx/generic/statusbr.h +++ b/include/wx/generic/statusbr.h @@ -31,7 +31,7 @@ public: wxWindowID winid, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = 0, + long style = wxFULL_REPAINT_ON_RESIZE, const wxString& name = wxPanelNameStr) { Init(); @@ -53,7 +53,7 @@ public: bool Create(wxWindow *parent, wxWindowID winid, const wxPoint& WXUNUSED(pos) = wxDefaultPosition, const wxSize& WXUNUSED(size) = wxDefaultSize, - long style = 0, + long style = wxFULL_REPAINT_ON_RESIZE, const wxString& name = wxPanelNameStr) { return Create(parent, winid, style, name); diff --git a/include/wx/generic/treectlg.h b/include/wx/generic/treectlg.h index b8aa298b8b..f82e154ac7 100644 --- a/include/wx/generic/treectlg.h +++ b/include/wx/generic/treectlg.h @@ -384,6 +384,7 @@ public: void OnKillFocus( wxFocusEvent &event ); void OnChar( wxKeyEvent &event ); void OnMouse( wxMouseEvent &event ); + void OnGetToolTip( wxTreeEvent &event ); void OnInternalIdle( ); // implementation helpers diff --git a/include/wx/gtk/frame.h b/include/wx/gtk/frame.h index 3c452d5451..ecb5d0d02a 100644 --- a/include/wx/gtk/frame.h +++ b/include/wx/gtk/frame.h @@ -62,7 +62,7 @@ public: virtual void PositionStatusBar(); virtual wxStatusBar* CreateStatusBar(int number = 1, - long style = wxST_SIZEGRIP, + long style = wxST_SIZEGRIP|wxFULL_REPAINT_ON_RESIZE, wxWindowID id = 0, const wxString& name = wxStatusLineNameStr); #endif // wxUSE_STATUSBAR diff --git a/include/wx/gtk1/frame.h b/include/wx/gtk1/frame.h index 3c452d5451..ecb5d0d02a 100644 --- a/include/wx/gtk1/frame.h +++ b/include/wx/gtk1/frame.h @@ -62,7 +62,7 @@ public: virtual void PositionStatusBar(); virtual wxStatusBar* CreateStatusBar(int number = 1, - long style = wxST_SIZEGRIP, + long style = wxST_SIZEGRIP|wxFULL_REPAINT_ON_RESIZE, wxWindowID id = 0, const wxString& name = wxStatusLineNameStr); #endif // wxUSE_STATUSBAR diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 74de24b9f7..ee086a77c8 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -3479,7 +3479,7 @@ END_EVENT_TABLE() wxGridRowLabelWindow::wxGridRowLabelWindow( wxGrid *parent, wxWindowID id, const wxPoint &pos, const wxSize &size ) - : wxWindow( parent, id, pos, size, wxWANTS_CHARS|wxBORDER_NONE ) + : wxWindow( parent, id, pos, size, wxWANTS_CHARS|wxBORDER_NONE|wxFULL_REPAINT_ON_RESIZE ) { m_owner = parent; } @@ -3545,7 +3545,7 @@ END_EVENT_TABLE() wxGridColLabelWindow::wxGridColLabelWindow( wxGrid *parent, wxWindowID id, const wxPoint &pos, const wxSize &size ) - : wxWindow( parent, id, pos, size, wxWANTS_CHARS|wxBORDER_NONE ) + : wxWindow( parent, id, pos, size, wxWANTS_CHARS|wxBORDER_NONE|wxFULL_REPAINT_ON_RESIZE ) { m_owner = parent; } @@ -3610,7 +3610,7 @@ END_EVENT_TABLE() wxGridCornerLabelWindow::wxGridCornerLabelWindow( wxGrid *parent, wxWindowID id, const wxPoint &pos, const wxSize &size ) - : wxWindow( parent, id, pos, size, wxWANTS_CHARS|wxBORDER_NONE ) + : wxWindow( parent, id, pos, size, wxWANTS_CHARS|wxBORDER_NONE|wxFULL_REPAINT_ON_RESIZE ) { m_owner = parent; } @@ -3682,7 +3682,7 @@ wxGridWindow::wxGridWindow( wxGrid *parent, wxWindowID id, const wxPoint &pos, const wxSize &size ) - : wxWindow( parent, id, pos, size, wxWANTS_CHARS | wxBORDER_NONE | wxCLIP_CHILDREN, + : wxWindow( parent, id, pos, size, wxWANTS_CHARS | wxBORDER_NONE | wxCLIP_CHILDREN|wxFULL_REPAINT_ON_RESIZE, wxT("grid window") ) { diff --git a/src/generic/treectlg.cpp b/src/generic/treectlg.cpp index bf31859dd7..4e79785c02 100644 --- a/src/generic/treectlg.cpp +++ b/src/generic/treectlg.cpp @@ -674,6 +674,7 @@ BEGIN_EVENT_TABLE(wxGenericTreeCtrl,wxScrolledWindow) EVT_CHAR (wxGenericTreeCtrl::OnChar) EVT_SET_FOCUS (wxGenericTreeCtrl::OnSetFocus) EVT_KILL_FOCUS (wxGenericTreeCtrl::OnKillFocus) + EVT_TREE_ITEM_GETTOOLTIP(-1, wxGenericTreeCtrl::OnGetToolTip) END_EVENT_TABLE() #if !defined(__WXMSW__) || defined(__WIN16__) || defined(__WXUNIVERSAL__) @@ -2882,7 +2883,10 @@ void wxGenericTreeCtrl::OnMouse( wxMouseEvent &event ) // Is the mouse over a tree item button? int flags = 0; - wxGenericTreeItem *underMouse = m_anchor->HitTest(pt, this, flags, 0); + wxGenericTreeItem *thisItem = m_anchor->HitTest(pt, this, flags, 0); + wxGenericTreeItem *underMouse = thisItem; + bool underMouseChanged = (underMouse != m_underMouse) ; + if ((underMouse) && (flags & wxTREE_HITTEST_ONITEMBUTTON) && (!event.LeftIsDown()) && @@ -2912,10 +2916,10 @@ void wxGenericTreeCtrl::OnMouse( wxMouseEvent &event ) #if wxUSE_TOOLTIPS // Determines what item we are hovering over and need a tooltip for - wxTreeItemId hoverItem = HitTest(ScreenToClient(wxGetMousePosition())); + wxTreeItemId hoverItem = thisItem; // We do not want a tooltip if we are dragging, or if the rename timer is running - if (hoverItem.IsOk() && !m_isDragging && (!m_renameTimer || !m_renameTimer->IsRunning())) + if (underMouseChanged && hoverItem.IsOk() && !m_isDragging && (!m_renameTimer || !m_renameTimer->IsRunning())) { // Ask the tree control what tooltip (if any) should be shown wxTreeEvent hevent(wxEVT_COMMAND_TREE_ITEM_GETTOOLTIP, GetId()); @@ -3365,4 +3369,11 @@ bool wxGenericTreeCtrl::SetForegroundColour(const wxColour& colour) return TRUE; } +// Process the tooltip event, to speed up event processing. +// Doesn't actually get a tooltip. +void wxGenericTreeCtrl::OnGetToolTip( wxTreeEvent &event ) +{ + event.Veto(); +} + #endif // wxUSE_TREECTRL