]> git.lyx.org Git - features.git/commitdiff
Do some caching of window title and related UI
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Wed, 19 Oct 2016 09:55:08 +0000 (11:55 +0200)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Wed, 19 Oct 2016 15:34:54 +0000 (17:34 +0200)
This should avoid performance problems related to the window update machinery.
Moreover this fixes a crash introduced by e4998f21 when closing a file.

Note that GuiWorkArea::Private already had a read_only_ member, but it
was unused.

Also rename LyXVC::vcname() to LyXVC::vcstatus() since it now contains
directly the UI string to be shown.

(cherry picked from commit 6cb05ce8bb58720dfef6e5707c1f3fad3949881f)
(cherry picked from commit 85bcf0d93f7b0137c1d3b4d030a1840cbfe5892e)

src/LyXVC.cpp
src/LyXVC.h
src/frontends/qt4/GuiView.cpp
src/frontends/qt4/GuiWorkArea.cpp
src/frontends/qt4/GuiWorkArea_Private.h

index 323965858c56870a4eef7842466d174f959db297..fcea6491da7dc749e950c0a0768be2fed4c7a9ec 100644 (file)
@@ -46,9 +46,14 @@ LyXVC::~LyXVC()
 {}
 
 
-string LyXVC::vcname() const
+docstring LyXVC::vcstatus() const
 {
-       return vcs->vcname();
+       if (!vcs)
+               return docstring();
+       if (locking())
+               return bformat(_("%1$s lock"), from_ascii(vcs->vcname()));
+       else
+               return from_ascii(vcs->vcname());
 }
 
 
index 197c4d98b9faaeff2aa30cb6d4f0dfd79ad3e277..3d18a45def8ebd79598570ffc8378ab69e9f6fe0 100644 (file)
@@ -14,6 +14,8 @@
 
 #include <boost/scoped_ptr.hpp>
 
+#include "support/docstring.h"
+
 #include <string>
 
 
@@ -50,8 +52,8 @@ public:
        LyXVC();
        ///
        ~LyXVC();
-       /// Name of the underlying VCS
-       std::string vcname() const;
+       /// Status of the underlying VCS
+       docstring vcstatus() const;
        /// Is \p fn under version control?
        static bool fileInVC(support::FileName const & fn);
        /** Not a good name perhaps. This function should be called whenever
index a7d4f4d19f862b62d7534994a72f1faf84099650..9166f72ed395ba1edc20613e8838b38884e74418 100644 (file)
@@ -1180,12 +1180,7 @@ void GuiView::updateWindowTitle(GuiWorkArea * wa)
 
        if (buf.lyxvc().inUse()) {
                version_control_->show();
-               if (buf.lyxvc().locking())
-                       version_control_->setText(
-                               toqstr(bformat(_("%1$s lock"),
-                                              from_ascii(buf.lyxvc().vcname()))));
-               else
-                       version_control_->setText(toqstr(buf.lyxvc().vcname()));
+               version_control_->setText(toqstr(buf.lyxvc().vcstatus()));
        } else
                version_control_->hide();
 }
index 4fb5ef0a539376fc6314bf12c09d4424f4654fd2..5557c996961219fcd6d5baef36d6a4b6ccfbaf70 100644 (file)
@@ -47,7 +47,6 @@
 #include "support/convert.h"
 #include "support/debug.h"
 #include "support/gettext.h"
-#include "support/FileName.h"
 #include "support/lassert.h"
 #include "support/TempFile.h"
 
@@ -246,11 +245,12 @@ SyntheticMouseEvent::SyntheticMouseEvent()
 
 
 GuiWorkArea::Private::Private(GuiWorkArea * parent)
-: p(parent), screen_(0), buffer_view_(0), read_only_(false), lyx_view_(0),
-cursor_visible_(false), cursor_(0),
-need_resize_(false), schedule_redraw_(false), preedit_lines_(1),
-pixel_ratio_(1.0),
-completer_(new GuiCompleter(p, p)), dialog_mode_(false)
+: p(parent), screen_(0), buffer_view_(0), lyx_view_(0),
+  cursor_visible_(false), cursor_(0),
+  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)
 {
 }
 
@@ -1373,8 +1373,15 @@ QVariant GuiWorkArea::inputMethodQuery(Qt::InputMethodQuery query) const
 
 void GuiWorkArea::updateWindowTitle()
 {
-       d->lyx_view_->updateWindowTitle(this);
-       titleChanged(this);
+       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_) {
+               d->file_name_ = buf.fileName();
+               d->read_only_ = buf.isReadonly();
+               d->vc_status_ = buf.lyxvc().vcstatus();
+               d->clean_ = buf.isClean();
+               titleChanged(this);
+       }
 }
 
 
index 5320c5c7133ce9faeeaeeb5478049306c2a1355a..0e03dd61fe64e06121b884eb50613ef2f7229e3b 100644 (file)
@@ -15,6 +15,7 @@
 #include "FuncRequest.h"
 #include "LyXRC.h"
 
+#include "support/FileName.h"
 #include "support/Timeout.h"
 
 #include <QMouseEvent>
@@ -150,8 +151,6 @@ struct GuiWorkArea::Private
        QPaintDevice * screen_;
        ///
        BufferView * buffer_view_;
-       /// Read only Buffer status cache.
-       bool read_only_;
        ///
        GuiView * lyx_view_;
        /// is the cursor currently displayed
@@ -187,6 +186,17 @@ struct GuiWorkArea::Private
        /// when the menu is actually shown (after releasing on Windows)
        /// and after the DEPM has done its job.
        std::string context_menu_name_;
+
+       /// stuff related to window title
+       ///
+       support::FileName file_name_;
+       ///
+       bool read_only_;
+       ///
+       docstring vc_status_;
+       ///
+       bool clean_;
+
 }; // GuiWorkArea
 
 } // namespace frontend