diff options
-rw-r--r-- | src-qt5/desktop-utils/lumina-textedit/MainUI.cpp | 61 | ||||
-rw-r--r-- | src-qt5/desktop-utils/lumina-textedit/MainUI.h | 3 |
2 files changed, 48 insertions, 16 deletions
diff --git a/src-qt5/desktop-utils/lumina-textedit/MainUI.cpp b/src-qt5/desktop-utils/lumina-textedit/MainUI.cpp index 33f2d851..780483f7 100644 --- a/src-qt5/desktop-utils/lumina-textedit/MainUI.cpp +++ b/src-qt5/desktop-utils/lumina-textedit/MainUI.cpp @@ -189,6 +189,17 @@ QString MainUI::currentFileDir(){ return dir; } +QStringList MainUI::unsavedFiles(){ + QStringList unsaved; + for(int i=0; i<tabWidget->count(); i++){ + PlainTextEditor *tmp = static_cast<PlainTextEditor*>(tabWidget->widget(i)); + if(tmp->hasChange()){ + unsaved << tmp->currentFile(); + } + } + return unsaved; +} + // ================= // PRIVATE SLOTS //================= @@ -499,21 +510,41 @@ PlainTextEditor *cur = currentEditor(); //============= void MainUI::closeEvent(QCloseEvent *ev){ //See if any of the open editors have unsaved changes first - QStringList unsaved; - for(int i=0; i<tabWidget->count(); i++){ - PlainTextEditor *tmp = static_cast<PlainTextEditor*>(tabWidget->widget(i)); - if(tmp->hasChange()){ - unsaved << tmp->currentFile(); - } + QStringList unsaved = unsavedFiles(); + if(unsaved.isEmpty()){ + QMainWindow::closeEvent(ev); + return; } - if(unsaved.isEmpty()){ QMainWindow::closeEvent(ev); return; } - bool savenow = false; - if(!savenow && !ui->actionShow_Popups->isChecked()){ savenow = true; } - if(!savenow){ - QMessageBox::StandardButton but = QMessageBox::question(this, tr("Save Changes before closing?"), QString(tr("There are unsaved changes.\nDo you want save them before you close the editor?\n\n%1")).arg(unsaved.join("\n")), QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, QMessageBox::No); - savenow = (but == QMessageBox::Yes); - if(but == QMessageBox::Cancel){ ev->ignore(); return; } - } - if(savenow){ SaveFile(); } + + //If popups are disabled, give the user a chance by opening + //the save dialog automatically, then just close. + if(!ui->actionShow_Popups->isChecked()){ + SaveFile(); QMainWindow::closeEvent(ev); + return; + } + + //Otherwise, ask the user what to do. + QMessageBox::StandardButton but = QMessageBox::question( + this, + tr("Save Changes before closing?"), + QString(tr("There are unsaved changes.\nDo you want save them before you close the editor?\n\n%1")).arg(unsaved.join("\n")), + QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, + QMessageBox::No); + + if(but == QMessageBox::Cancel){ + ev->ignore(); + return; + } + else if(but == QMessageBox::Yes){ + SaveFile(); + //If there are still unsaved files, the user presumably + //cancelled the save dialog and we don't want to close. + unsaved = unsavedFiles(); + if (!unsaved.isEmpty()) { + ev->ignore(); + return; + } + } + QMainWindow::closeEvent(ev); } diff --git a/src-qt5/desktop-utils/lumina-textedit/MainUI.h b/src-qt5/desktop-utils/lumina-textedit/MainUI.h index 148974a0..8a3812a1 100644 --- a/src-qt5/desktop-utils/lumina-textedit/MainUI.h +++ b/src-qt5/desktop-utils/lumina-textedit/MainUI.h @@ -44,6 +44,7 @@ private: //Simplification functions PlainTextEditor* currentEditor(); QString currentFileDir(); + QStringList unsavedFiles(); private slots: //Main Actions @@ -60,7 +61,7 @@ private slots: //Other Menu Actions void UpdateHighlighting(QAction *act = 0); - void showToolbar(bool); + void showToolbar(bool); void showLineNumbers(bool); void wrapLines(bool); void ModifyColors(); |