diff options
author | Aaron Barany | 2018-12-18 23:01:47 -0800 |
---|---|---|
committer | Aaron Barany | 2018-12-18 23:01:47 -0800 |
commit | b45e8b087295738ce0f5031fc1ba7e8b1c4dc72f (patch) | |
tree | 8feb4d69f64ccc8faa45972638c65213c320ddc5 | |
parent | 924fcf31b1a790ee8d4e6fdd8cab10f81802c737 (diff) | |
download | aur-b45e8b087295738ce0f5031fc1ba7e8b1c4dc72f.tar.gz |
Improved debugger column patch.
-rw-r--r-- | .SRCINFO | 2 | ||||
-rw-r--r-- | PKGBUILD | 2 | ||||
-rw-r--r-- | qtcreator-debugger-columns-fix.patch | 393 |
3 files changed, 163 insertions, 234 deletions
@@ -43,7 +43,7 @@ pkgbase = qtcreator-fixed-themes sha256sums = f938a72cc79c9ed8de07da8af79b170f67448a74dbd3228dd3de7e4855ed633d sha256sums = ba6a48156cc14935a0dea12e8282bdfb1936e0c67216c660eef41bd5b5a44d4b sha256sums = 12dad35519cfc62119b0af21b31a96149081ae1ee6d6e7cb65ee80f3774ff06f - sha256sums = 6aa7d2ac2c7e2772d9937c0c1029190153768c25c7260292757d8c40b669e0f0 + sha256sums = e22bf0c3c18832c014adc5d07f09ce962c4515d40b68ad115b4991f14522be07 pkgname = qtcreator-fixed-themes @@ -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; }; |