diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2019-07-02 11:05:31 -0400 |
|---|---|---|
| committer | isanae <14251494+isanae@users.noreply.github.com> | 2019-07-02 11:05:31 -0400 |
| commit | c6e80f1a5eed4a57663e7fc55c2727258eaad552 (patch) | |
| tree | 2c4633f4dc3b912a696d36a52329059fe982321b /src/modinfodialog.cpp | |
| parent | 16b6e772a7ae1561ba87c6d76d001b19635761cd (diff) | |
focus tabs when they need a confirmation to close
dialog did not handle closeEvent() at all, it only checked the close button
bunch of comments
Diffstat (limited to 'src/modinfodialog.cpp')
| -rw-r--r-- | src/modinfodialog.cpp | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp index b3055b5a..4af479c4 100644 --- a/src/modinfodialog.cpp +++ b/src/modinfodialog.cpp @@ -154,7 +154,7 @@ ModInfoDialog::ModInfoDialog( connect( tabInfo.tab.get(), &ModInfoDialogTab::originModified, [this, i](int originID) { - onOriginModified(static_cast<std::size_t>(i), originID); + onOriginModified(originID); }); connect( @@ -167,6 +167,15 @@ ModInfoDialog::ModInfoDialog( connect( tabInfo.tab.get(), &ModInfoDialogTab::hasDataChanged, [&]{ setTabsColors(); }); + + connect( + tabInfo.tab.get(), &ModInfoDialogTab::wantsFocus, + [&, i=static_cast<std::size_t>(i)] + { + if (i < m_tabs.size()) { + switchToTab(ETabs(m_tabs[i].tab->tabID())); + } + }); } connect(ui->tabWidget, &QTabWidget::currentChanged, [&]{ onTabChanged(); }); @@ -546,6 +555,7 @@ void ModInfoDialog::reAddTabs(const std::vector<bool>& visibility, ETabs sel) } + // removing all tabs ui->tabWidget->clear(); // reset real positions @@ -566,7 +576,7 @@ void ModInfoDialog::reAddTabs(const std::vector<bool>& visibility, ETabs sel) } } -void ModInfoDialog::onOriginModified(std::size_t tabIndex, int originID) +void ModInfoDialog::onOriginModified(int originID) { emit originModified(originID); updateTabs(true); @@ -581,15 +591,31 @@ void ModInfoDialog::onDeleteShortcut() } } +void ModInfoDialog::closeEvent(QCloseEvent* e) +{ + if (tryClose()) { + e->accept(); + } else { + e->ignore(); + } +} + void ModInfoDialog::on_closeButton_clicked() { + if (tryClose()) { + close(); + } +} + +bool ModInfoDialog::tryClose() +{ for (auto& tabInfo : m_tabs) { if (!tabInfo.tab->canClose()) { - return; + return false; } } - close(); + return true; } void ModInfoDialog::onTabChanged() |
