Change the return type of QtGetScrollBarsContainer() under wxQt
Neither QListWidget nor QTextEdit derive from QScrollArea and the cast to it is just UB. Instead, using the common base class QAbstractScrollArea is safer and eliminates the need to these dangerous and insidious crosscast'ings.
This commit is contained in:
parent
484785fb88
commit
5fb8a54e14
9 changed files with 20 additions and 21 deletions
|
|
@ -13,7 +13,7 @@
|
|||
#include "wx/frame.h"
|
||||
|
||||
class QMainWindow;
|
||||
class QScrollArea;
|
||||
class QAbstractScrollArea;
|
||||
|
||||
class WXDLLIMPEXP_CORE wxFrame : public wxFrameBase
|
||||
{
|
||||
|
|
@ -51,7 +51,7 @@ public:
|
|||
virtual void RemoveChild( wxWindowBase *child ) override;
|
||||
|
||||
QMainWindow *GetQMainWindow() const;
|
||||
virtual QScrollArea *QtGetScrollBarsContainer() const override;
|
||||
virtual QAbstractScrollArea *QtGetScrollBarsContainer() const override;
|
||||
|
||||
protected:
|
||||
virtual wxPoint GetClientAreaOrigin() const override;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
class QListWidget;
|
||||
class QModelIndex;
|
||||
class QScrollArea;
|
||||
class QAbstractScrollArea;
|
||||
|
||||
class WXDLLIMPEXP_CORE wxListBox : public wxListBoxBase
|
||||
{
|
||||
|
|
@ -87,7 +87,7 @@ protected:
|
|||
|
||||
virtual int DoListHitTest(const wxPoint& point) const override;
|
||||
|
||||
virtual QScrollArea *QtGetScrollBarsContainer() const override;
|
||||
virtual QAbstractScrollArea *QtGetScrollBarsContainer() const override;
|
||||
|
||||
#if wxUSE_CHECKLISTBOX
|
||||
bool m_hasCheckBoxes;
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
#ifndef _WX_QT_TEXTCTRL_H_
|
||||
#define _WX_QT_TEXTCTRL_H_
|
||||
|
||||
class QScrollArea;
|
||||
class QAbstractScrollArea;
|
||||
class wxQtEdit;
|
||||
|
||||
class WXDLLIMPEXP_CORE wxTextCtrl : public wxTextCtrlBase
|
||||
|
|
@ -93,7 +93,7 @@ protected:
|
|||
virtual bool DoLoadFile(const wxString& file, int fileType) override;
|
||||
virtual bool DoSaveFile(const wxString& file, int fileType) override;
|
||||
|
||||
virtual QScrollArea *QtGetScrollBarsContainer() const override;
|
||||
virtual QAbstractScrollArea *QtGetScrollBarsContainer() const override;
|
||||
|
||||
// From wxTextEntry:
|
||||
virtual wxWindow *GetEditableWindow() override { return this; }
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ class QShortcut;
|
|||
template < class T > class QList;
|
||||
|
||||
class QWidget;
|
||||
class QScrollArea;
|
||||
class QAbstractScrollArea;
|
||||
class QScrollBar;
|
||||
class QPicture;
|
||||
class QPainter;
|
||||
|
|
@ -181,7 +181,7 @@ public:
|
|||
virtual void QtHandleShortcut ( int command );
|
||||
#endif // wxUSE_ACCEL
|
||||
|
||||
virtual QScrollArea *QtGetScrollBarsContainer() const;
|
||||
virtual QAbstractScrollArea *QtGetScrollBarsContainer() const;
|
||||
|
||||
#if wxUSE_TOOLTIPS
|
||||
// applies tooltip to the widget.
|
||||
|
|
@ -232,7 +232,7 @@ protected:
|
|||
|
||||
private:
|
||||
void Init();
|
||||
QScrollArea *m_qtContainer; // either nullptr or the same as m_qtWindow pointer
|
||||
QAbstractScrollArea *m_qtContainer; // either nullptr or the same as m_qtWindow pointer
|
||||
|
||||
// Return the viewport of m_qtContainer, if it's used, or just m_qtWindow.
|
||||
//
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
|
||||
|
||||
#include <QtGui/QPicture>
|
||||
#include <QtWidgets/QWidget>
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/log.h"
|
||||
|
|
@ -20,7 +21,6 @@
|
|||
#include "wx/qt/dcclient.h"
|
||||
#include "wx/qt/private/converter.h"
|
||||
|
||||
#include <QtWidgets/QScrollArea>
|
||||
#include <QtGui/QPainter>
|
||||
|
||||
//##############################################################################
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@
|
|||
#include "wx/qt/private/converter.h"
|
||||
#include "wx/qt/private/winevent.h"
|
||||
|
||||
#include <QtWidgets/QScrollArea>
|
||||
#include <QtWidgets/QMainWindow>
|
||||
#include <QtWidgets/QMenuBar>
|
||||
|
||||
|
|
@ -210,7 +209,7 @@ void wxFrame::RemoveChild( wxWindowBase *child )
|
|||
wxFrameBase::RemoveChild( child );
|
||||
}
|
||||
|
||||
QScrollArea *wxFrame::QtGetScrollBarsContainer() const
|
||||
QAbstractScrollArea *wxFrame::QtGetScrollBarsContainer() const
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -368,9 +368,9 @@ void wxListBox::QtSendEvent(wxEventType evtType, int rowIndex, bool selected)
|
|||
SendEvent(evtType, rowIndex, selected);
|
||||
}
|
||||
|
||||
QScrollArea *wxListBox::QtGetScrollBarsContainer() const
|
||||
QAbstractScrollArea *wxListBox::QtGetScrollBarsContainer() const
|
||||
{
|
||||
return (QScrollArea *) m_qtListWidget;
|
||||
return static_cast<QAbstractScrollArea*>(m_qtListWidget);
|
||||
}
|
||||
|
||||
void wxListBox::UnSelectAll()
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ public:
|
|||
virtual long XYToPosition(long x, long y) const = 0;
|
||||
virtual bool PositionToXY(long pos, long *x, long *y) const = 0;
|
||||
virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, long *pos) const = 0;
|
||||
virtual QScrollArea *ScrollBarsContainer() const = 0;
|
||||
virtual QAbstractScrollArea *ScrollBarsContainer() const = 0;
|
||||
virtual void WriteText( const wxString &text ) = 0;
|
||||
virtual void SetMaxLength(unsigned long len) = 0;
|
||||
virtual void MarkDirty() = 0;
|
||||
|
|
@ -353,9 +353,9 @@ public:
|
|||
m_edit->ensureCursorVisible();
|
||||
}
|
||||
|
||||
QScrollArea *ScrollBarsContainer() const override
|
||||
QAbstractScrollArea *ScrollBarsContainer() const override
|
||||
{
|
||||
return (QScrollArea *) m_edit;
|
||||
return static_cast<QAbstractScrollArea*>(m_edit);
|
||||
}
|
||||
|
||||
virtual void SetStyleFlags(long flags) override
|
||||
|
|
@ -559,7 +559,7 @@ public:
|
|||
return wxTE_HT_ON_TEXT;
|
||||
}
|
||||
|
||||
virtual QScrollArea *ScrollBarsContainer() const override
|
||||
virtual QAbstractScrollArea *ScrollBarsContainer() const override
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
|
@ -911,7 +911,7 @@ QWidget *wxTextCtrl::GetHandle() const
|
|||
return (QWidget *) m_qtEdit->GetHandle();
|
||||
}
|
||||
|
||||
QScrollArea *wxTextCtrl::QtGetScrollBarsContainer() const
|
||||
QAbstractScrollArea *wxTextCtrl::QtGetScrollBarsContainer() const
|
||||
{
|
||||
return m_qtEdit->ScrollBarsContainer();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -701,7 +701,7 @@ QWidget *wxWindowQt::QtGetClientWidget() const
|
|||
/* Returns a scrollbar for the given orientation */
|
||||
QScrollBar *wxWindowQt::QtGetScrollBar( int orientation ) const
|
||||
{
|
||||
QScrollArea *scrollArea = QtGetScrollBarsContainer();
|
||||
QAbstractScrollArea *scrollArea = QtGetScrollBarsContainer();
|
||||
wxCHECK_MSG( scrollArea, nullptr, "Window without scrolling area" );
|
||||
|
||||
if ( orientation == wxHORIZONTAL )
|
||||
|
|
@ -1774,7 +1774,7 @@ QWidget *wxWindowQt::GetHandle() const
|
|||
return m_qtWindow;
|
||||
}
|
||||
|
||||
QScrollArea *wxWindowQt::QtGetScrollBarsContainer() const
|
||||
QAbstractScrollArea *wxWindowQt::QtGetScrollBarsContainer() const
|
||||
{
|
||||
return m_qtContainer;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue