Abdelrazak Younes wrote:
Richard Heck wrote:
Abdelrazak Younes wrote:
Richard Heck wrote:
First, the slowness is coming during the update of the standard
toolbar, in particular, during the update of the PASTE button, and
more precisely during the getStatus() call, and yet more precisely,
during the theClipboard().empty() check. So I did this:
bool GuiClipboard::empty() const
{
// We need to check both the plaintext and the LyX version of the
// clipboard. The plaintext version is empty if the LyX version
// contains only one inset, and the LyX version is empry if the
// clipboard does not come from LyX.
QTime t = QTime::currentTime();
bool b = !qApp->clipboard()->text(QClipboard::Clipboard).isEmpty();
lyxerr << "Checking emptiness took " << t.restart() << std::endl;
if (b)
return false;
return !hasLyXContents();
}
and I'm getting times on the order of 125ms just for that one call.
Should be easy to solve.
Can you fix this, Abdel?
Here is a quick untested fix
And not even compiled... here is another one that compiles and seems to
work fine.
Abdel.
Index: GuiClipboard.cpp
===================================================================
--- GuiClipboard.cpp (revision 20564)
+++ GuiClipboard.cpp (working copy)
@@ -35,6 +35,15 @@
namespace lyx {
namespace frontend {
+GuiClipboard::GuiClipboard()
+{
+ connect(qApp->clipboard(), SIGNAL(dataChanged()),
+ this, SLOT(on_dataChanged()));
+ // initialize clipboard status.
+ on_dataChanged();
+}
+
+
string const GuiClipboard::getAsLyX() const
{
LYXERR(Debug::ACTION) << "GuiClipboard::getAsLyX(): `";
@@ -109,16 +118,27 @@
}
+void GuiClipboard::on_dataChanged()
+{
+ text_clipboard_empty_ = qApp->clipboard()->
+ text(QClipboard::Clipboard).isEmpty();
+
+ has_lyx_contents_ = hasLyXContents();
+}
+
+
bool GuiClipboard::empty() const
{
// We need to check both the plaintext and the LyX version of the
// clipboard. The plaintext version is empty if the LyX version
- // contains only one inset, and the LyX version is empry if the
+ // contains only one inset, and the LyX version is empty if the
// clipboard does not come from LyX.
- if (!qApp->clipboard()->text(QClipboard::Clipboard).isEmpty())
+ if (!text_clipboard_empty_)
return false;
- return !hasLyXContents();
+ return !has_lyx_contents_;
}
} // namespace frontend
} // namespace lyx
+
+#include "GuiClipboard_moc.cpp"
Index: GuiClipboard.h
===================================================================
--- GuiClipboard.h (revision 20564)
+++ GuiClipboard.h (working copy)
@@ -16,15 +16,19 @@
#include "frontends/Clipboard.h"
+#include <QObject>
+
namespace lyx {
namespace frontend {
/**
* The Qt4 version of the Clipboard.
*/
-class GuiClipboard: public Clipboard
+class GuiClipboard: public QObject, public Clipboard
{
+ Q_OBJECT
public:
+ GuiClipboard();
virtual ~GuiClipboard() {}
/** Clipboard overloaded methods
@@ -37,6 +41,13 @@
bool isInternal() const;
bool empty() const;
//@}
+
+private Q_SLOTS:
+ void on_dataChanged();
+
+private:
+ bool text_clipboard_empty_;
+ bool has_lyx_contents_;
};
} // namespace frontend