commit 1e57fd12b18f82b4fbc00ee5dbe78d03143b4adb
Author: Guillaume Munch <[email protected]>
Date: Tue Feb 28 22:58:44 2017 +0100
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 f938db4..a1c244e 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 dfef00e..e8952f2 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 c595632..7ff8e04 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 bb8de83..050eae7 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 712af88..a3cc7b3 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 30f493b..a0eaa65 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,