summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Barany2018-12-18 23:01:47 -0800
committerAaron Barany2018-12-18 23:01:47 -0800
commitb45e8b087295738ce0f5031fc1ba7e8b1c4dc72f (patch)
tree8feb4d69f64ccc8faa45972638c65213c320ddc5
parent924fcf31b1a790ee8d4e6fdd8cab10f81802c737 (diff)
downloadaur-b45e8b087295738ce0f5031fc1ba7e8b1c4dc72f.tar.gz
Improved debugger column patch.
-rw-r--r--.SRCINFO2
-rw-r--r--PKGBUILD2
-rw-r--r--qtcreator-debugger-columns-fix.patch393
3 files changed, 163 insertions, 234 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 4dad22af5fff..09aa912e8752 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -43,7 +43,7 @@ pkgbase = qtcreator-fixed-themes
sha256sums = f938a72cc79c9ed8de07da8af79b170f67448a74dbd3228dd3de7e4855ed633d
sha256sums = ba6a48156cc14935a0dea12e8282bdfb1936e0c67216c660eef41bd5b5a44d4b
sha256sums = 12dad35519cfc62119b0af21b31a96149081ae1ee6d6e7cb65ee80f3774ff06f
- sha256sums = 6aa7d2ac2c7e2772d9937c0c1029190153768c25c7260292757d8c40b669e0f0
+ sha256sums = e22bf0c3c18832c014adc5d07f09ce962c4515d40b68ad115b4991f14522be07
pkgname = qtcreator-fixed-themes
diff --git a/PKGBUILD b/PKGBUILD
index 857d25388d73..548d81131dc7 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -46,7 +46,7 @@ sha256sums=('aec7b4595e17f5536eb2eef4331057f2d0fa4ba0a46f4968cc06959a1d589b43'
'f938a72cc79c9ed8de07da8af79b170f67448a74dbd3228dd3de7e4855ed633d'
'ba6a48156cc14935a0dea12e8282bdfb1936e0c67216c660eef41bd5b5a44d4b'
'12dad35519cfc62119b0af21b31a96149081ae1ee6d6e7cb65ee80f3774ff06f'
- '6aa7d2ac2c7e2772d9937c0c1029190153768c25c7260292757d8c40b669e0f0')
+ 'e22bf0c3c18832c014adc5d07f09ce962c4515d40b68ad115b4991f14522be07')
prepare() {
mkdir -p build
diff --git a/qtcreator-debugger-columns-fix.patch b/qtcreator-debugger-columns-fix.patch
index 246d7cad1630..7f303da731fe 100644
--- a/qtcreator-debugger-columns-fix.patch
+++ b/qtcreator-debugger-columns-fix.patch
@@ -1,67 +1,71 @@
-diff --git a/src/libs/utils/spancolumntreeview.cpp b/src/libs/utils/spancolumntreeview.cpp
-new file mode 100644
-index 0000000000..d4139e7429
---- /dev/null
-+++ b/src/libs/utils/spancolumntreeview.cpp
-@@ -0,0 +1,113 @@
-+/****************************************************************************
-+**
-+** Copyright (C) 2018 Aaron Barany (akb825@gmail.com)
-+** Contact: https://www.qt.io/licensing/
-+**
-+** This file is part of Qt Creator.
-+**
-+** Commercial License Usage
-+** Licensees holding valid commercial Qt licenses may use this file in
-+** accordance with the commercial license agreement provided with the
-+** Software or, alternatively, in accordance with the terms contained in
-+** a written agreement between you and The Qt Company. For licensing terms
-+** and conditions see https://www.qt.io/terms-conditions. For further
-+** information use the contact form at https://www.qt.io/contact-us.
-+**
-+** GNU General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU
-+** General Public License version 3 as published by the Free Software
-+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-+** included in the packaging of this file. Please review the following
-+** information to ensure the GNU General Public License requirements will
-+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-+**
-+****************************************************************************/
-+
-+#include "spancolumntreeview.h"
-+
-+#include <utils/qtcassert.h>
-+
-+#include <QHeaderView>
-+
-+namespace Utils {
-+namespace Internal {
-+
-+class SpanColumnTreeViewPrivate : public QObject
-+{
-+public:
-+ SpanColumnTreeViewPrivate(SpanColumnTreeView *parent, int mainSpanColumn)
-+ : q(parent)
-+ , spanColumn(mainSpanColumn)
-+ , processing(false)
-+ {
-+ connect(q->header(), &QHeaderView::sectionResized, this, [this](int logicalIndex, int, int) {
-+ rebalanceColumns(logicalIndex >= spanColumn ? logicalIndex + 1 : spanColumn);
+diff --git a/src/libs/utils/basetreeview.cpp b/src/libs/utils/basetreeview.cpp
+index bae4c16fef..a1ccafd816 100644
+--- a/src/libs/utils/basetreeview.cpp
++++ b/src/libs/utils/basetreeview.cpp
+@@ -55,6 +55,28 @@ public:
+ m_settingsTimer.setSingleShot(true);
+ connect(&m_settingsTimer, &QTimer::timeout,
+ this, &BaseTreeViewPrivate::doSaveState);
++ connect(q->header(), &QHeaderView::sectionResized, this, [this](int logicalIndex, int oldSize, int newSize) {
++ QHeaderView *h = q->header();
++ QTC_ASSERT(h, return);
++
++ int column;
++ if (oldSize < newSize && logicalIndex + 1 < h->count() &&
++ h->sectionSize(logicalIndex + 1) == h->minimumSectionSize()) {
++ // Protect against sizing past the next section.
++ column = logicalIndex;
++ } else if (logicalIndex >= m_spanColumn) {
++ // Resize after the span column.zzz
++ column = logicalIndex + 1;
++ } else {
++ // Resize the span column or before it.
++ column = m_spanColumn;
++ }
++
++ rebalanceColumns(column);
+ });
+ connect(q->header(), &QHeaderView::geometriesChanged, this, [this]() {
+ rebalanceColumns();
+ });
+ }
+
+ bool eventFilter(QObject *, QEvent *event) override
+@@ -197,6 +219,17 @@ public:
+ }
+ }
+
++ void setSpanColumn(int column)
++ {
++ if (column == m_spanColumn)
++ return;
++
++ m_spanColumn = column;
++ if (m_spanColumn >= 0)
++ q->header()->setStretchLastSection(false);
++ rebalanceColumns();
+ }
+
+ void toggleColumnWidth(int logicalIndex)
+ {
+ QHeaderView *h = q->header();
+@@ -212,10 +245,65 @@ public:
+ targetSize = qMax(minSize, headerSize);
+ }
+ h->resizeSection(logicalIndex, targetSize);
++ rebalanceColumns();
+ m_userHandled.remove(logicalIndex); // Reset.
+ saveState();
+ }
+
+ void rebalanceColumns()
+ {
-+ rebalanceColumns(spanColumn);
++ rebalanceColumns(m_spanColumn);
+ }
+
+ void rebalanceColumns(int column)
+ {
-+ if (processing)
++ if (m_spanColumn < 0 || column < 0 || m_processingSpans)
+ return;
+
+ QHeaderView *h = q->header();
@@ -71,6 +75,22 @@ index 0000000000..d4139e7429
+ if (column >= count)
+ return;
+
++ // Start with the target column, and resize other columns as necessary.
++ for (int i = column; i < count; ++i) {
++ if (tryRebalanceColumns(i))
++ return;
++ }
++ for (int i = column - 1; i >= 0; --i) {
++ if (tryRebalanceColumns(i))
++ return;
++ }
++ }
++
++ bool tryRebalanceColumns(int column)
++ {
++ QHeaderView *h = q->header();
++
++ int count = h->count();
+ int otherColumnTotal = 0;
+ for (int i = 0; i < count; ++i) {
+ if (i != column)
@@ -79,150 +99,76 @@ index 0000000000..d4139e7429
+
+ int totalSize = h->width();
+ if (otherColumnTotal < totalSize) {
-+ processing = true;
-+ q->setColumnWidth(column, totalSize - otherColumnTotal);
-+ processing = false;
-+ }
++ m_processingSpans = true;
++ h->resizeSection(column, totalSize - otherColumnTotal);
++ m_processingSpans = false;
++ } else
++ return false;
++
++ // Make sure this didn't go over the total size.
++ int totalColumnSize = 0;
++ for (int i = 0; i < count; ++i)
++ totalColumnSize += h->sectionSize(i);
++ return totalColumnSize != totalSize;
+ }
+
-+private:
-+ SpanColumnTreeView* q;
-+ int spanColumn;
-+ bool processing;
-+};
-+
-+} // namespace Internal
-+
-+SpanColumnTreeView::SpanColumnTreeView(int spanColumn, QWidget *parent)
-+ : BaseTreeView(parent)
-+ , d(new Internal::SpanColumnTreeViewPrivate(this, spanColumn))
-+{
-+ header()->setStretchLastSection(false);
-+}
-+
-+SpanColumnTreeView::~SpanColumnTreeView()
+ public:
+ BaseTreeView *q;
+ QMap<int, int> m_userHandled; // column -> width, "not present" means "automatic"
+@@ -224,6 +312,8 @@ public:
+ QString m_settingsKey;
+ bool m_expectUserChanges = false;
+ ProgressIndicator *m_progressIndicator = nullptr;
++ int m_spanColumn = -1;
++ bool m_processingSpans = false;
+ };
+
+ class BaseTreeViewDelegate : public QItemDelegate
+@@ -416,6 +506,21 @@ void BaseTreeView::resizeColumns()
+ d->resizeColumns();
+ }
+
++int BaseTreeView::spanColumn() const
+{
-+ delete d;
++ return d->m_spanColumn;
+}
+
-+void SpanColumnTreeView::rebalanceColumns()
++void BaseTreeView::setSpanColumn(int column)
+{
-+ d->rebalanceColumns();
++ d->setSpanColumn(column);
+}
+
-+void SpanColumnTreeView::setModel(QAbstractItemModel *model)
++void BaseTreeView::refreshSpanColumn()
+{
-+ BaseTreeView::setModel(model);
+ d->rebalanceColumns();
+}
+
-+} // namespace Utils
-diff --git a/src/libs/utils/spancolumntreeview.h b/src/libs/utils/spancolumntreeview.h
-new file mode 100644
-index 0000000000..884cb5da01
---- /dev/null
-+++ b/src/libs/utils/spancolumntreeview.h
-@@ -0,0 +1,49 @@
-+/****************************************************************************
-+**
-+** Copyright (C) 2018 Aaron Barany (akb825@gmail.com)
-+** Contact: https://www.qt.io/licensing/
-+**
-+** This file is part of Qt Creator.
-+**
-+** Commercial License Usage
-+** Licensees holding valid commercial Qt licenses may use this file in
-+** accordance with the commercial license agreement provided with the
-+** Software or, alternatively, in accordance with the terms contained in
-+** a written agreement between you and The Qt Company. For licensing terms
-+** and conditions see https://www.qt.io/terms-conditions. For further
-+** information use the contact form at https://www.qt.io/contact-us.
-+**
-+** GNU General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU
-+** General Public License version 3 as published by the Free Software
-+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-+** included in the packaging of this file. Please review the following
-+** information to ensure the GNU General Public License requirements will
-+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-+**
-+****************************************************************************/
-+
-+#pragma once
-+
-+#include "basetreeview.h"
-+
-+namespace Utils {
-+
-+namespace Internal { class SpanColumnTreeViewPrivate; }
-+
-+class QTCREATOR_UTILS_EXPORT SpanColumnTreeView : public BaseTreeView
-+{
-+public:
-+ explicit SpanColumnTreeView(int spanColumn, QWidget *parent = nullptr);
-+ ~SpanColumnTreeView() override;
-+
-+ void rebalanceColumns();
-+
-+ void setModel(QAbstractItemModel *model) override;
-+
-+private:
-+ Internal::SpanColumnTreeViewPrivate *d;
-+};
-+
-+}
+ void BaseTreeView::setSettings(QSettings *settings, const QByteArray &key)
+ {
+ QTC_ASSERT(!d->m_settings, qDebug() << "DUPLICATED setSettings" << key);
+diff --git a/src/libs/utils/basetreeview.h b/src/libs/utils/basetreeview.h
+index 923c69b042..8ea6659c0c 100644
+--- a/src/libs/utils/basetreeview.h
++++ b/src/libs/utils/basetreeview.h
+@@ -73,6 +73,13 @@ public:
+ void hideProgressIndicator();
+ void resizeColumns();
+
++ int spanColumn() const;
++ void setSpanColumn(int column);
+
-diff --git a/src/libs/utils/utils-lib.pri b/src/libs/utils/utils-lib.pri
-index 3369e0e161..079e0e8c32 100644
---- a/src/libs/utils/utils-lib.pri
-+++ b/src/libs/utils/utils-lib.pri
-@@ -122,7 +122,9 @@ SOURCES += \
- $$PWD/filecrumblabel.cpp \
- $$PWD/fixedsizeclicklabel.cpp \
- $$PWD/removefiledialog.cpp \
-- $$PWD/differ.cpp
-+ $$PWD/differ.cpp \
-+ $$PWD/spancolumntreeview.cpp
++ // In some situations this needs to be called when manually resizing columns when the span
++ // column is set.
++ void refreshSpanColumn();
+
+ signals:
+ void aboutToShow();
- win32:SOURCES += $$PWD/consoleprocess_win.cpp
- else:SOURCES += $$PWD/consoleprocess_unix.cpp
-@@ -260,7 +262,8 @@ HEADERS += \
- $$PWD/link.h \
- $$PWD/fixedsizeclicklabel.h \
- $$PWD/removefiledialog.h \
-- $$PWD/differ.h
-+ $$PWD/differ.h \
-+ $$PWD/spancolumntreeview.h
-
- FORMS += $$PWD/filewizardpage.ui \
- $$PWD/newclasswidget.ui \
-diff --git a/src/libs/utils/utils.qbs b/src/libs/utils/utils.qbs
-index 40f7a21ca4..895e2199d8 100644
---- a/src/libs/utils/utils.qbs
-+++ b/src/libs/utils/utils.qbs
-@@ -218,6 +218,8 @@ Project {
- "smallstringlayout.h",
- "smallstringmemory.h",
- "smallstringvector.h",
-+ "spancolumntreeview.cpp",
-+ "spancolumntreeview.h",
- "statuslabel.cpp",
- "statuslabel.h",
- "stringutils.cpp",
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
-index 0925cb79e4..edf6eeb7c6 100644
+index 0925cb79e4..0e642e4740 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
-@@ -78,6 +78,7 @@
- #include <utils/qtcassert.h>
- #include <utils/qtcprocess.h>
- #include <utils/savedaction.h>
-+#include <utils/spancolumntreeview.h>
- #include <utils/styledbar.h>
- #include <utils/utilsicons.h>
-
-@@ -647,7 +648,7 @@ void DebuggerEnginePrivate::setupViews()
+@@ -647,7 +647,7 @@ void DebuggerEnginePrivate::setupViews()
m_registerWindow->setObjectName(DOCKWIDGET_REGISTER);
m_registerWindow->setWindowTitle(tr("Reg&isters"));
@@ -231,50 +177,39 @@ index 0925cb79e4..edf6eeb7c6 100644
m_stackView->setModel(m_stackHandler.model());
m_stackView->setSettings(settings, "Debugger.StackView");
m_stackView->setIconSize(QSize(10, 10));
-@@ -666,7 +667,7 @@ void DebuggerEnginePrivate::setupViews()
- m_sourceFilesWindow->setObjectName(DOCKWIDGET_SOURCE_FILES);
- m_sourceFilesWindow->setWindowTitle(tr("Source Files"));
-
-- m_threadsView = new BaseTreeView;
-+ m_threadsView = new SpanColumnTreeView(ThreadData::FunctionColumn);
- m_threadsView->setModel(m_threadsHandler.model());
+@@ -671,6 +671,7 @@ void DebuggerEnginePrivate::setupViews()
m_threadsView->setSortingEnabled(true);
m_threadsView->setSettings(settings, "Debugger.ThreadsView");
-@@ -712,7 +713,7 @@ void DebuggerEnginePrivate::setupViews()
- connect(m_localsView->header(), &QHeaderView::sectionResized,
- this, &DebuggerEnginePrivate::updateReturnViewHeader, Qt::QueuedConnection);
-
-- m_breakView = new BaseTreeView;
-+ m_breakView = new SpanColumnTreeView(BreakpointFunctionColumn);
+ m_threadsView->setIconSize(QSize(10, 10));
++ m_threadsView->setSpanColumn(ThreadData::FunctionColumn);
+ m_threadsWindow = addSearch(m_threadsView);
+ m_threadsWindow->setObjectName(DOCKWIDGET_THREADS);
+ m_threadsWindow->setWindowTitle(tr("&Threads"));
+@@ -716,6 +717,7 @@ void DebuggerEnginePrivate::setupViews()
m_breakView->setIconSize(QSize(10, 10));
m_breakView->setWindowIcon(Icons::BREAKPOINTS.icon());
m_breakView->setSelectionMode(QAbstractItemView::ExtendedSelection);
++ m_breakView->setSpanColumn(BreakpointFunctionColumn);
+ connect(action(UseAddressInBreakpointsView), &QAction::toggled,
+ this, [this](bool on) { m_breakView->setColumnHidden(BreakpointAddressColumn, !on); });
+ m_breakView->setSettings(settings, "Debugger.BreakWindow");
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
-index 3f7b01d2bd..de8790b7b5 100644
+index 3f7b01d2bd..042ea05804 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
-@@ -118,6 +118,7 @@
- #include <utils/proxyaction.h>
- #include <utils/qtcassert.h>
- #include <utils/savedaction.h>
-+#include <utils/spancolumntreeview.h>
- #include <utils/statuslabel.h>
- #include <utils/styledbar.h>
- #include <utils/temporarydirectory.h>
-@@ -1031,7 +1032,7 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments,
- vbox->insertWidget(0, label);
- };
-
-- m_breakpointManagerView = new BaseTreeView;
-+ m_breakpointManagerView = new SpanColumnTreeView(BreakpointFunctionColumn);
- m_breakpointManagerView->setIconSize(QSize(10, 10));
- m_breakpointManagerView->setWindowIcon(Icons::BREAKPOINTS.icon());
- m_breakpointManagerView->setSelectionMode(QAbstractItemView::ExtendedSelection);
+@@ -1038,6 +1038,7 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments,
+ m_breakpointManagerView->setSettings(settings, "Debugger.BreakWindow");
+ m_breakpointManagerView->setRootIsDecorated(true);
+ m_breakpointManagerView->setModel(BreakpointManager::model());
++ m_breakpointManagerView->setSpanColumn(BreakpointFunctionColumn);
+ m_breakpointManagerWindow = addSearch(m_breakpointManagerView);
+ m_breakpointManagerWindow->setWindowTitle(tr("Breakpoint Preset"));
+ m_breakpointManagerWindow->setObjectName(DOCKWIDGET_BREAKPOINTMANAGER);
diff --git a/src/plugins/debugger/stackwindow.cpp b/src/plugins/debugger/stackwindow.cpp
-index 83e6af2829..e182d472eb 100644
+index 83e6af2829..e25f6aa72b 100644
--- a/src/plugins/debugger/stackwindow.cpp
+++ b/src/plugins/debugger/stackwindow.cpp
-@@ -32,33 +32,51 @@
+@@ -32,33 +32,56 @@
#include <utils/savedaction.h>
#include <QAction>
@@ -285,12 +220,13 @@ index 83e6af2829..e182d472eb 100644
-StackTreeView::StackTreeView()
+StackTreeView::StackTreeView(QWidget *parent)
-+ : SpanColumnTreeView(StackFunctionNameColumn, parent)
++ : BaseTreeView(parent)
{
- setWindowTitle(tr("Stack"));
-
connect(action(UseAddressInStackView), &QAction::toggled,
this, &StackTreeView::showAddressColumn);
++ setSpanColumn(StackFunctionNameColumn);
showAddressColumn(false);
}
@@ -313,46 +249,39 @@ index 83e6af2829..e182d472eb 100644
- resizeColumnToContents(StackLevelColumn);
- resizeColumnToContents(StackLineNumberColumn);
- resizeColumnToContents(StackAddressColumn);
-+ adjustForContents();
++ adjustForContents(true);
}
-void StackTreeView::setModel(QAbstractItemModel *model)
-+void StackTreeView::adjustForContents()
++void StackTreeView::adjustForContents(bool refreshSpan)
{
- BaseTreeView::setModel(model);
+ // Skip resizing if no contents. This will be called again once contents are available.
-+ if (!model() || model()->rowCount() == 0)
++ if (!model() || model()->rowCount() == 0) {
++ if (refreshSpan)
++ refreshSpanColumn();
+ return;
++ }
+
++ // Resize without attempting to fix up the columns.
++ setSpanColumn(-1);
resizeColumnToContents(StackLevelColumn);
+ resizeColumnToContents(StackFileNameColumn);
resizeColumnToContents(StackLineNumberColumn);
- showAddressColumn(action(UseAddressInStackView)->isChecked());
+ resizeColumnToContents(StackAddressColumn);
-+ // The above resizes might be slightly off relative to the total size.
-+ rebalanceColumns();
++ setSpanColumn(StackFunctionNameColumn);
+ m_contentsAdjusted = true;
}
} // namespace Internal
diff --git a/src/plugins/debugger/stackwindow.h b/src/plugins/debugger/stackwindow.h
-index 5439ead73f..fcdd9deaa8 100644
+index 5439ead73f..79f2974e82 100644
--- a/src/plugins/debugger/stackwindow.h
+++ b/src/plugins/debugger/stackwindow.h
-@@ -25,26 +25,25 @@
-
- #pragma once
-
--#include <utils/basetreeview.h>
-+#include <utils/spancolumntreeview.h>
-
- #include <QCoreApplication>
-
- namespace Debugger {
- namespace Internal {
+@@ -34,17 +34,16 @@ namespace Internal {
--class StackTreeView : public Utils::BaseTreeView
-+class StackTreeView : public Utils::SpanColumnTreeView
+ class StackTreeView : public Utils::BaseTreeView
{
- Q_DECLARE_TR_FUNCTIONS(Debugger::Internal::StackTreeView)
-
@@ -366,7 +295,7 @@ index 5439ead73f..fcdd9deaa8 100644
void showAddressColumn(bool on);
- void reloadFullStack();
- void copyContentsToClipboard();
-+ void adjustForContents();
++ void adjustForContents(bool refreshSpan = false);
+
+ bool m_contentsAdjusted = false;
};