Commit 72fa3839 authored by Charlie Fenton's avatar Charlie Fenton
Browse files

MGR: In Event Log, work around a wxWidgets 3.0 bug in wxGenericListCtrl (Linux...

MGR: In Event Log, work around a wxWidgets 3.0 bug in wxGenericListCtrl (Linux only) which causes headers to be misaligned after horizontal scrolling.
parent edfa2bf4
......@@ -99,13 +99,22 @@ CDlgEventLog::CDlgEventLog( wxWindow* parent, wxWindowID id, const wxString& cap
Create(parent, id, caption, pos, size, style);
#ifdef __WXGTK__
m_pList->SaveEventHandler((m_pList->GetMainWin())->GetEventHandler());
(m_pList->GetMainWin())->PushEventHandler(new MyEvtLogEvtHandler(m_pList));
#endif
wxLogTrace(wxT("Function Start/End"), wxT("CDlgEventLog::CDlgEventLog - Constructor Function End"));
}
CDlgEventLog::~CDlgEventLog() {
wxLogTrace(wxT("Function Start/End"), wxT("CDlgEventLog::CDlgEventLog - Destructor Function Begin"));
#ifdef __WXGTK__
m_pList->PopEventHandler(true);
#endif
if (m_pMessageInfoAttr) {
delete m_pMessageInfoAttr;
m_pMessageInfoAttr = NULL;
......
......@@ -32,6 +32,42 @@
#include "DlgEventLogListCtrl.h"
#include "DlgEventLog.h"
#ifdef __WXGTK__
IMPLEMENT_DYNAMIC_CLASS(MyEvtLogEvtHandler, wxEvtHandler)
BEGIN_EVENT_TABLE(MyEvtLogEvtHandler, wxEvtHandler)
EVT_PAINT(MyEvtLogEvtHandler::OnPaint)
END_EVENT_TABLE()
MyEvtLogEvtHandler::MyEvtLogEvtHandler() {}
MyEvtLogEvtHandler::MyEvtLogEvtHandler(wxGenericListCtrl *theListControl) {
m_listCtrl = theListControl;
m_view_startX = 0;
}
void MyEvtLogEvtHandler::OnPaint(wxPaintEvent & event)
{
if (m_listCtrl) {
// Work around a wxWidgets 3.0 bug in wxGenericListCtrl (Linux
// only) which causes headers to be misaligned after horizontal
// scrolling due to wxListHeaderWindow::OnPaint() calling
// parent->GetViewStart() before the parent window has been
// scrolled to the new position.
int view_startX;
((CDlgEventLogListCtrl*)m_listCtrl)->savedHandler->ProcessEvent(event);
m_listCtrl->GetViewStart( &view_startX, NULL );
if (view_startX != m_view_startX) {
m_view_startX = view_startX;
((wxWindow *)m_listCtrl->m_headerWin)->Refresh();
((wxWindow *)m_listCtrl->m_headerWin)->Update();
}
} else {
event.Skip();
}
}
#endif
IMPLEMENT_DYNAMIC_CLASS(CDlgEventLogListCtrl, DLG_LISTCTRL_BASE)
......@@ -40,6 +76,7 @@ BEGIN_EVENT_TABLE(CDlgEventLogListCtrl, DLG_LISTCTRL_BASE)
#ifdef __WXMAC__
EVT_SIZE(CDlgEventLogListCtrl::OnSize)
#endif
END_EVENT_TABLE()
......@@ -55,10 +92,8 @@ CDlgEventLogListCtrl::CDlgEventLogListCtrl(CDlgEventLog* pView, wxWindowID iList
#ifdef __WXMAC__
m_fauxHeaderView = NULL;
m_fauxBodyView = NULL;
#ifdef __WXMAC__
SetupMacAccessibilitySupport();
#endif
#endif
}
......
......@@ -22,7 +22,7 @@
#pragma interface "DlgEventLogListCtrl.cpp"
#endif
#ifdef __WXMAC__
#if (defined(__WXMAC__) || defined(__WXGTK__))
#define DLG_LISTCTRL_BASE wxGenericListCtrl
#else
#define DLG_LISTCTRL_BASE wxListView
......@@ -46,6 +46,12 @@ public:
~CDlgEventLogListCtrl();
#endif
#ifdef __WXGTK__
void SaveEventHandler(wxEvtHandler *stdHandler) { savedHandler = stdHandler; }
wxEvtHandler* savedHandler;
wxScrolledWindow* GetMainWin(void) { return (wxScrolledWindow*) m_mainWin; }
#endif
private:
virtual wxString OnGetItemText(long item, long column) const;
......@@ -70,4 +76,23 @@ private:
#endif
};
#ifdef __WXGTK__
// Define a custom event handler
class MyEvtLogEvtHandler : public wxEvtHandler
{
DECLARE_DYNAMIC_CLASS(MyEvtLogEvtHandler)
public:
MyEvtLogEvtHandler();
MyEvtLogEvtHandler(wxGenericListCtrl *theListControl);
void OnPaint(wxPaintEvent & event);
private:
wxGenericListCtrl * m_listCtrl;
int m_view_startX;
DECLARE_EVENT_TABLE()
};
#endif
#endif
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment