Skip to content

Commit

Permalink
Fix sidebar resize behaviour (keepassxreboot#10641)
Browse files Browse the repository at this point in the history
* Fix database view splitters resize behaviour
* Set default ratio sizes for first-run based on the size of the database widget itself
* Fix setting splitter sizes before database widget has had a chance to render for the first time
* Disallow collapsing the entry view (source of several bug reports)

Fixes: keepassxreboot#10613

---------

Co-authored-by: Jonathan White <support@dmapps.us>
  • Loading branch information
2 people authored and pull[bot] committed Jun 15, 2024
1 parent 7619416 commit 89dd59a
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 19 deletions.
32 changes: 21 additions & 11 deletions src/gui/DatabaseWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,9 @@ DatabaseWidget::DatabaseWidget(QSharedPointer<Database> db, QWidget* parent)
m_groupSplitter->setChildrenCollapsible(true);
m_groupSplitter->addWidget(m_groupView);
m_groupSplitter->addWidget(tagsWidget);
m_groupSplitter->setStretchFactor(0, 70);
m_groupSplitter->setStretchFactor(1, 30);
m_groupSplitter->setStretchFactor(0, 100);
m_groupSplitter->setStretchFactor(1, 0);
m_groupSplitter->setSizes({1, 1});

auto rightHandSideWidget = new QWidget(m_mainSplitter);
auto rightHandSideVBox = new QVBoxLayout();
Expand All @@ -138,8 +139,10 @@ DatabaseWidget::DatabaseWidget(QSharedPointer<Database> db, QWidget* parent)
m_mainSplitter->setChildrenCollapsible(true);
m_mainSplitter->addWidget(m_groupSplitter);
m_mainSplitter->addWidget(rightHandSideWidget);
m_mainSplitter->setStretchFactor(0, 30);
m_mainSplitter->setStretchFactor(1, 70);
m_mainSplitter->setStretchFactor(0, 0);
m_mainSplitter->setStretchFactor(1, 100);
m_mainSplitter->setCollapsible(1, false);
m_mainSplitter->setSizes({1, 1});

m_previewSplitter->setOrientation(Qt::Vertical);
m_previewSplitter->setChildrenCollapsible(true);
Expand Down Expand Up @@ -361,20 +364,27 @@ QHash<Config::ConfigKey, QList<int>> DatabaseWidget::splitterSizes() const

void DatabaseWidget::setSplitterSizes(const QHash<Config::ConfigKey, QList<int>>& sizes)
{
// Set the splitter sizes, if the size is invalid set a default ratio based on this widget size
for (auto itr = sizes.constBegin(); itr != sizes.constEnd(); ++itr) {
// Less than two sizes indicates an invalid value
if (itr.value().size() < 2) {
continue;
}
auto value = itr.value();
switch (itr.key()) {
case Config::GUI_SplitterState:
m_mainSplitter->setSizes(itr.value());
if (value.size() < 2) {
value = QList({static_cast<int>(width() * 0.25), static_cast<int>(width() * 0.75)});
}
m_mainSplitter->setSizes(value);
break;
case Config::GUI_PreviewSplitterState:
m_previewSplitter->setSizes(itr.value());
if (value.size() < 2) {
value = QList({static_cast<int>(height() * 0.8), static_cast<int>(height() * 0.2)});
}
m_previewSplitter->setSizes(value);
break;
case Config::GUI_GroupSplitterState:
m_groupSplitter->setSizes(itr.value());
if (value.size() < 2) {
value = QList({static_cast<int>(height() * 0.6), static_cast<int>(height() * 0.4)});
}
m_groupSplitter->setSizes(value);
break;
default:
break;
Expand Down
23 changes: 15 additions & 8 deletions src/gui/DatabaseWidgetStateSync.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,17 +62,24 @@ void DatabaseWidgetStateSync::setActive(DatabaseWidget* dbWidget)
m_activeDbWidget = dbWidget;

if (m_activeDbWidget) {
m_blockUpdates = true;
// Give the database widget a chance to render itself before restoring the state
QTimer::singleShot(0, this, [this] {
if (!m_activeDbWidget) {
return;
}

m_activeDbWidget->setSplitterSizes(m_splitterSizes);
m_blockUpdates = true;

if (m_activeDbWidget->isSearchActive()) {
restoreSearchView();
} else {
restoreListView();
}
m_activeDbWidget->setSplitterSizes(m_splitterSizes);

if (m_activeDbWidget->isSearchActive()) {
restoreSearchView();
} else {
restoreListView();
}

m_blockUpdates = false;
m_blockUpdates = false;
});

connect(m_activeDbWidget, SIGNAL(splitterSizesChanged()), SLOT(updateSplitterSizes()));
connect(m_activeDbWidget, SIGNAL(entryViewStateChanged()), SLOT(updateViewState()));
Expand Down

0 comments on commit 89dd59a

Please sign in to comment.