From 1e57fd12b18f82b4fbc00ee5dbe78d03143b4adb Mon Sep 17 00:00:00 2001 From: Guillaume Munch Date: Tue, 28 Feb 2017 22:58:44 +0100 Subject: [PATCH] Display externally modified status --- src/frontends/WorkAreaManager.cpp | 13 +++++-------- src/frontends/WorkAreaManager.h | 3 ++- src/frontends/qt4/GuiView.cpp | 6 ++++++ src/frontends/qt4/GuiWorkArea.cpp | 17 +++++++++++++---- src/frontends/qt4/GuiWorkArea_Private.h | 2 ++ src/frontends/qt4/Menus.cpp | 4 ++++ 6 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/frontends/WorkAreaManager.cpp b/src/frontends/WorkAreaManager.cpp index f938db4eb9..a1c244ece7 100644 --- a/src/frontends/WorkAreaManager.cpp +++ b/src/frontends/WorkAreaManager.cpp @@ -33,10 +33,8 @@ void WorkAreaManager::remove(WorkArea * wa) void WorkAreaManager::redrawAll(bool update_metrics) { - iterator it = work_areas_.begin(); - iterator const en = work_areas_.end(); - for (; it != en; ++it) - (*it)->redraw(update_metrics); + for (WorkArea * wa : work_areas_) + wa->redraw(update_metrics); } @@ -50,12 +48,11 @@ void WorkAreaManager::closeAll() void WorkAreaManager::updateTitles() { - iterator it = work_areas_.begin(); - iterator const en = work_areas_.end(); - for (; it != en; ++it) - (*it)->updateWindowTitle(); + for (WorkArea * wa : work_areas_) + wa->updateWindowTitle(); } + } // namespace frontend } // namespace lyx diff --git a/src/frontends/WorkAreaManager.h b/src/frontends/WorkAreaManager.h index dfef00e6f6..e8952f2eae 100644 --- a/src/frontends/WorkAreaManager.h +++ b/src/frontends/WorkAreaManager.h @@ -38,7 +38,8 @@ public: void redrawAll(bool update_metrics); /// void closeAll(); - /// Update window titles of all users. + /// Update window titles of all users and the external modifications + /// warning. void updateTitles(); private: diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index c5956324ca..7ff8e04b1c 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -1121,6 +1121,12 @@ void GuiView::updateWindowTitle(GuiWorkArea * wa) Buffer const & buf = wa->bufferView().buffer(); // Set the windows title docstring title = buf.fileName().displayName(130) + from_ascii("[*]"); + if (buf.notifiesExternalModification()) { + title = bformat(_("%1$s (modified externally)"), title); + // If the external modification status has changed, then maybe the status of + // buffer-save has changed too. + updateToolbars(); + } #ifndef Q_WS_MAC title += from_ascii(" - LyX"); #endif diff --git a/src/frontends/qt4/GuiWorkArea.cpp b/src/frontends/qt4/GuiWorkArea.cpp index bb8de83dc0..050eae761f 100644 --- a/src/frontends/qt4/GuiWorkArea.cpp +++ b/src/frontends/qt4/GuiWorkArea.cpp @@ -251,7 +251,7 @@ GuiWorkArea::Private::Private(GuiWorkArea * parent) need_resize_(false), schedule_redraw_(false), preedit_lines_(1), pixel_ratio_(1.0), completer_(new GuiCompleter(p, p)), dialog_mode_(false), - read_only_(false), clean_(true) + read_only_(false), clean_(true), externally_modified_(false) { } @@ -1390,12 +1390,16 @@ QVariant GuiWorkArea::inputMethodQuery(Qt::InputMethodQuery query) const void GuiWorkArea::updateWindowTitle() { Buffer const & buf = bufferView().buffer(); - if (buf.fileName() != d->file_name_ || buf.isReadonly() != d->read_only_ - || buf.lyxvc().vcstatus() != d->vc_status_ || buf.isClean() != d->clean_) { + if (buf.fileName() != d->file_name_ + || buf.isReadonly() != d->read_only_ + || buf.lyxvc().vcstatus() != d->vc_status_ + || buf.isClean() != d->clean_ + || buf.notifiesExternalModification() != d->externally_modified_) { d->file_name_ = buf.fileName(); d->read_only_ = buf.isReadonly(); d->vc_status_ = buf.lyxvc().vcstatus(); d->clean_ = buf.isClean(); + d->externally_modified_ = buf.notifiesExternalModification(); Q_EMIT titleChanged(this); } } @@ -2052,9 +2056,14 @@ void TabWorkArea::updateTabTexts() QString tab_tooltip = it->abs(); if (buf.isReadonly()) { setTabIcon(tab_index, QIcon(getPixmap("images/", "emblem-readonly", "svgz,png"))); - tab_tooltip = qt_("%1 (read only)").arg(it->abs()); + tab_tooltip = qt_("%1 (read only)").arg(tab_tooltip); } else setTabIcon(tab_index, QIcon()); + if (buf.notifiesExternalModification()) { + QString const warn = qt_("%1 (modified externally)"); + tab_tooltip = warn.arg(tab_tooltip); + tab_text += QChar(0x26a0); + } setTabText(tab_index, tab_text); setTabToolTip(tab_index, tab_tooltip); } diff --git a/src/frontends/qt4/GuiWorkArea_Private.h b/src/frontends/qt4/GuiWorkArea_Private.h index 712af883e9..a3cc7b338d 100644 --- a/src/frontends/qt4/GuiWorkArea_Private.h +++ b/src/frontends/qt4/GuiWorkArea_Private.h @@ -196,6 +196,8 @@ struct GuiWorkArea::Private docstring vc_status_; /// bool clean_; + /// + bool externally_modified_; }; // GuiWorkArea diff --git a/src/frontends/qt4/Menus.cpp b/src/frontends/qt4/Menus.cpp index 30f493bb5e..a0eaa65a84 100644 --- a/src/frontends/qt4/Menus.cpp +++ b/src/frontends/qt4/Menus.cpp @@ -990,6 +990,8 @@ void MenuDefinition::expandDocuments() QString label = toqstr(b.fileName().displayName(20)); if (!b.isClean()) label += "*"; + if (b.notifiesExternalModification()) + label += QChar(0x26a0); if (i < 10) label = QString::number(i) + ". " + label + '|' + QString::number(i); add(MenuItem(MenuItem::Command, label, @@ -1007,6 +1009,8 @@ void MenuDefinition::expandDocuments() QString label = toqstr(b->fileName().displayName(20)); if (!b->isClean()) label += "*"; + if (b->notifiesExternalModification()) + label += QChar(0x26a0); if (i < 10) label = QString::number(i) + ". " + label + '|' + QString::number(i); item.submenu().add(MenuItem(MenuItem::Command, label,