// QMainWindowX.cpp // QMainWindow with extensions #include // private Qt declarations --------------------------------------------------- // for 'restoreStateX' (QTBUG-68939) #if QT_VERSION == QT_VERSION_CHECK(5, 9, 6) #include #include // QMainWindowPrivate from qmainwindow.cpp class QMainWindowPrivate : public QWidgetPrivate { Q_DECLARE_PUBLIC(QMainWindow) public: inline QMainWindowPrivate() : layout(0), explicitIconSize(false), toolButtonStyle(Qt::ToolButtonIconOnly) #ifdef Q_OS_OSX , useUnifiedToolBar(false) #endif #if 0 // Used to be included in Qt4 for Q_WS_MAC , useHIToolBar(false) , activateUnifiedToolbarAfterFullScreen(false) #endif #if QT_CONFIG(dockwidget) && !defined(QT_NO_CURSOR) , hasOldCursor(false) , cursorAdjusted(false) #endif { } QMainWindowLayout *layout; QSize iconSize; bool explicitIconSize; Qt::ToolButtonStyle toolButtonStyle; #ifdef Q_OS_OSX bool useUnifiedToolBar; #endif #if 0 // Used to be included in Qt4 for Q_WS_MAC bool useHIToolBar; bool activateUnifiedToolbarAfterFullScreen; #endif void init(); QList hoverSeparator; QPoint hoverPos; #if QT_CONFIG(dockwidget) && !defined(QT_NO_CURSOR) QCursor separatorCursor(const QList &path) const; void adjustCursor(const QPoint &pos); QCursor oldCursor; QCursor adjustedCursor; uint hasOldCursor : 1; uint cursorAdjusted : 1; #endif static inline QMainWindowLayout *mainWindowLayout(const QMainWindow *mainWindow) { return mainWindow ? mainWindow->d_func()->layout : static_cast(0); } }; #endif // ------------------------------------------------------------------------ #include "QMainWindowX.h" // QMainWindowX ********************************************************************* QMainWindowX::QMainWindowX(QWidget* pParent /*= NULL*/, Qt::WindowFlags flags /*= Qt::WindowFlags()*/) : QMainWindow(pParent, flags) { } bool QMainWindowX::restoreStateX(const QByteArray& state, int nVersion /*= 0*/) { // original call bool bR = restoreState(state, nVersion); // repair QTBUG-68939 / QTBUG-69297 #if QT_VERSION == QT_VERSION_CHECK(5, 9, 6) // get access to the private d_func() QMainWindowPrivate* pPriv = (QMainWindowPrivate*) d_ptr.data(); // set restoredSizeHint to 0 (values != 0 cause the bug) for (int i = 0; i < 4; i++) { pPriv->layout->layoutState.dockAreaLayout.docks[i].restoredSizeHint = QSize(0,0); pPriv->layout->savedState.dockAreaLayout.docks[i].restoredSizeHint = QSize(0,0); } #endif return bR; }