summary refs log tree commit diff
path: root/src/Splitter.cc
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-07-04 00:05:05 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-07-04 00:05:05 +0300
commit6c5309d9eb006bd7d9505f217798964803531b58 (patch)
tree53c8620b32bf005191414b7398a33082e5965f6d /src/Splitter.cc
parentAdd build target for doxygen (diff)
downloadnheko-6c5309d9eb006bd7d9505f217798964803531b58.tar.xz
Fix regressions regarding UI resizing
The room list would be hidden only through window resizing.
Diffstat (limited to 'src/Splitter.cc')
-rw-r--r--src/Splitter.cc111
1 files changed, 44 insertions, 67 deletions
diff --git a/src/Splitter.cc b/src/Splitter.cc

index acf0fd19..8a625227 100644 --- a/src/Splitter.cc +++ b/src/Splitter.cc
@@ -21,37 +21,18 @@ #include <QSettings> #include <QShortcut> +#include "Config.h" #include "Splitter.h" #include "Theme.h" +constexpr auto MaxWidth = (1 << 24) - 1; + Splitter::Splitter(QWidget *parent) : QSplitter(parent) { connect(this, &QSplitter::splitterMoved, this, &Splitter::onSplitterMoved); setChildrenCollapsible(false); setStyleSheet("QSplitter::handle { image: none; }"); - - auto showChatShortcut = new QShortcut(QKeySequence(tr("Ctrl+O", "Show chat")), parent); - auto showSidebarShortcut = - new QShortcut(QKeySequence(tr("Ctrl+L", "Show sidebar")), parent); - - connect(showChatShortcut, &QShortcut::activated, this, [this]() { - if (count() != 2) - return; - - hideSidebar(); - widget(1)->show(); - }); - connect(showSidebarShortcut, &QShortcut::activated, this, [this]() { - if (count() != 2) - return; - - widget(0)->setMinimumWidth(ui::sidebar::NormalSize); - widget(0)->setMaximumWidth(QApplication::desktop()->screenGeometry().height()); - - widget(0)->show(); - widget(1)->hide(); - }); } void @@ -61,7 +42,10 @@ Splitter::restoreSizes(int fallback) int savedWidth = settings.value("sidebar/width").toInt(); auto left = widget(0); - if (savedWidth == ui::sidebar::SmallSize) { + if (savedWidth == 0) { + hideSidebar(); + return; + } else if (savedWidth == ui::sidebar::SmallSize) { if (left) { left->setMinimumWidth(ui::sidebar::SmallSize); left->setMaximumWidth(ui::sidebar::SmallSize); @@ -69,21 +53,12 @@ Splitter::restoreSizes(int fallback) } } - if (savedWidth >= ui::sidebar::NormalSize && savedWidth <= 2 * ui::sidebar::NormalSize) { - if (left) { - left->setMinimumWidth(ui::sidebar::NormalSize); - left->setMaximumWidth(2 * ui::sidebar::NormalSize); - setSizes({savedWidth, fallback - savedWidth}); - return; - } - } - - if (savedWidth == 0) { - hideSidebar(); - return; - } - + left->setMinimumWidth(ui::sidebar::NormalSize); + left->setMaximumWidth(2 * ui::sidebar::NormalSize); setSizes({ui::sidebar::NormalSize, fallback - ui::sidebar::NormalSize}); + + setStretchFactor(0, 0); + setStretchFactor(1, 1); } Splitter::~Splitter() @@ -92,11 +67,7 @@ Splitter::~Splitter() if (left) { QSettings settings; - - if (!left->isVisible()) - settings.setValue("sidebar/width", 0); - else - settings.setValue("sidebar/width", left->width()); + settings.setValue("sidebar/width", left->width()); } } @@ -143,49 +114,55 @@ Splitter::onSplitterMoved(int pos, int index) // if we are coming from the left, the cursor should // end up on the second widget. - if (extended.contains(pos)) { + if (extended.contains(pos) && + right->size().width() >= + conf::sideBarCollapsePoint + ui::sidebar::NormalSize) { left->setMinimumWidth(ui::sidebar::NormalSize); left->setMaximumWidth(2 * ui::sidebar::NormalSize); leftMoveCount_ = 0; - } else if (left->rect().contains(left->mapFromGlobal(QCursor::pos()))) { - hideSidebar(); } } } } + void -Splitter::showChatView() +Splitter::hideSidebar() { - if (count() != 2) - return; + auto left = widget(0); + if (left) + left->hide(); +} +void +Splitter::showChatView() +{ + auto left = widget(0); auto right = widget(1); - // We are in Roomlist-only view so we'll switch into Chat-only view. - if (!right->isVisible()) { + if (right->isHidden()) { + left->hide(); right->show(); - hideSidebar(); - } -} -void -Splitter::showSidebar() -{ - auto left = widget(0); - if (left) { - left->setMinimumWidth(ui::sidebar::SmallSize); - left->setMaximumWidth(ui::sidebar::SmallSize); - left->show(); + // Restore previous size. + if (left->minimumWidth() == ui::sidebar::SmallSize) { + left->setMinimumWidth(ui::sidebar::SmallSize); + left->setMaximumWidth(ui::sidebar::SmallSize); + } else { + left->setMinimumWidth(ui::sidebar::NormalSize); + left->setMaximumWidth(2 * ui::sidebar::NormalSize); + } } } void -Splitter::hideSidebar() +Splitter::showFullRoomList() { - auto left = widget(0); - if (left) { - left->hide(); - emit hiddenSidebar(); - } + auto left = widget(0); + auto right = widget(1); + + right->hide(); + + left->show(); + left->setMaximumWidth(MaxWidth); }