]> git.lyx.org Git - lyx.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 09:59:47 +0000 (11:59 +0200)
This should avoid performance problems related to the window update machinery.
Moreover this fixes a crash introduced by 82808fea 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.

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

index 15d2626ce7567846aae5c95d218a1ac30833d6af..1572a036d24e8c331142713650f7e049c4304f8a 100644 (file)
@@ -41,9 +41,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 f54fd9ad2687b1ab9859dbe268f08ae58421c128..b304730700bb9baad739418e9624883cb236cb60 100644 (file)
@@ -12,6 +12,7 @@
 #ifndef LYX_VC_H
 #define LYX_VC_H
 
+#include "support/docstring.h"
 #include "support/unique_ptr.h"
 
 #include <string>
@@ -48,8 +49,8 @@ public:
        };
        ///
        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 9c698cb757ab2d73b5c0601c38d242dd9c57f7ed..3324ecde739b3b4ed1d76c43be923099e262010e 100644 (file)
@@ -1182,12 +1182,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 31df06b8a9efd2084224eab8fe1ebe444e7c8ef2..22523a88aadd8ba546882dbaefa5300cb3c4d44d 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"
 
@@ -247,11 +246,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)
 {
 }
 
@@ -1388,8 +1388,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 8a1b98e3d9bf6bb94a3e638cb1a381da65989e7d..712af883e9d0932c0e8d1d8a022f6680a681e956 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