diff --git a/src/vmainwindow.cpp b/src/vmainwindow.cpp index b5374f09..e8d70a9d 100644 --- a/src/vmainwindow.cpp +++ b/src/vmainwindow.cpp @@ -91,6 +91,12 @@ VMainWindow::VMainWindow(VSingleInstanceGuard *p_guard, QWidget *p_parent) m_panelViewState = PanelViewState::TwoPanels; } + m_panelViewTimer = new QTimer(this); + m_panelViewTimer->setSingleShot(true); + m_panelViewTimer->setInterval(500); + connect(m_panelViewTimer, &QTimer::timeout, + this, &VMainWindow::postChangePanelView); + initCaptain(); setupUI(); @@ -2036,21 +2042,21 @@ void VMainWindow::onePanelView() { m_panelViewState = PanelViewState::SinglePanel; g_config->setEnableCompactMode(false); - changePanelView(m_panelViewState); + changePanelView(m_panelViewState, true); } void VMainWindow::twoPanelView() { m_panelViewState = PanelViewState::TwoPanels; g_config->setEnableCompactMode(false); - changePanelView(m_panelViewState); + changePanelView(m_panelViewState, true); } void VMainWindow::compactModeView() { m_panelViewState = PanelViewState::CompactMode; g_config->setEnableCompactMode(true); - changePanelView(m_panelViewState); + changePanelView(m_panelViewState, true); } void VMainWindow::enableCompactMode(bool p_enabled) @@ -2099,7 +2105,7 @@ void VMainWindow::enableCompactMode(bool p_enabled) setTabOrder(directoryTree, m_fileList->getContentWidget()); } -void VMainWindow::changePanelView(PanelViewState p_state) +void VMainWindow::changePanelView(PanelViewState p_state, bool p_postCheck) { switch (p_state) { case PanelViewState::ExpandMode: @@ -2149,6 +2155,10 @@ void VMainWindow::changePanelView(PanelViewState p_state) if (p_state != PanelViewState::ExpandMode) { expandViewAct->setChecked(false); } + + if (p_postCheck) { + m_panelViewTimer->start(); + } } void VMainWindow::updateWindowTitle(const QString &str) @@ -3285,3 +3295,80 @@ void VMainWindow::setMenuBarVisible(bool p_visible) menuBar()->setFixedHeight(0); } } + +void VMainWindow::postChangePanelView() +{ + const int minVal = 10; + bool needUpdate = false; + QList sizes = m_mainSplitter->sizes(); + switch (m_panelViewState) { + case PanelViewState::SinglePanel: + if (sizes[1] == 0) { + sizes[1] = minVal; + needUpdate = true; + } + + if (sizes[2] == 0) { + sizes[2] = minVal; + needUpdate = true; + } + + break; + + case PanelViewState::TwoPanels: + if (sizes[0] == 0) { + sizes[0] = minVal; + needUpdate = true; + } + + if (sizes[1] == 0) { + sizes[1] = minVal; + needUpdate = true; + } + + if (sizes[2] == 0) { + sizes[2] = minVal; + needUpdate = true; + } + + break; + + case PanelViewState::CompactMode: + { + if (sizes[0] == 0) { + sizes[0] = minVal; + needUpdate = true; + } + + if (sizes[2] == 0) { + sizes[2] = minVal; + needUpdate = true; + } + + bool naviUpdate = false; + QList naviSizes = m_naviSplitter->sizes(); + if (naviSizes[0] == 0) { + naviSizes[0] = minVal; + naviUpdate = true; + } + + if (naviSizes[1] == 0) { + naviSizes[1] = minVal; + naviUpdate = true; + } + + if (naviUpdate) { + m_naviSplitter->setSizes(naviSizes); + } + + break; + } + + default: + break; + } + + if (needUpdate) { + m_mainSplitter->setSizes(sizes); + } +} diff --git a/src/vmainwindow.h b/src/vmainwindow.h index 00f96655..ed39eed2 100644 --- a/src/vmainwindow.h +++ b/src/vmainwindow.h @@ -189,6 +189,9 @@ private slots: // Activate Universal Entry. void activateUniversalEntry(); + // Make sure width of the panel is not zero after changePanelView(). + void postChangePanelView(); + protected: void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE; @@ -271,7 +274,7 @@ private: // Change the panel view according to @p_state. // Will not change m_panelViewState. - void changePanelView(PanelViewState p_state); + void changePanelView(PanelViewState p_state, bool p_postCheck = false); // Whether heading sequence is applicable to current tab. // Only available for writable Markdown file. @@ -430,6 +433,9 @@ private: // Timer to check the shared memory between instances of VNote. QTimer *m_sharedMemTimer; + // Timer to check the panel size. + QTimer *m_panelViewTimer; + // Tray icon. QSystemTrayIcon *m_trayIcon;