X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiSelection.cpp;h=362da4aba54d1c9c074c19ca974aa6fd3fdc3721;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=30738cf30e6c5d6b238710d75377b04cc489155e;hpb=7565a5934f121736a690916bb28e4af61f799087;p=lyx.git diff --git a/src/frontends/qt4/GuiSelection.cpp b/src/frontends/qt4/GuiSelection.cpp index 30738cf30e..362da4aba5 100644 --- a/src/frontends/qt4/GuiSelection.cpp +++ b/src/frontends/qt4/GuiSelection.cpp @@ -27,17 +27,13 @@ namespace lyx { namespace frontend { -using support::internalLineEnding; -using support::externalLineEnding; - GuiSelection::GuiSelection() - : selection_supported_(qApp->clipboard()->supportsSelection()) + : schedule_check_(true), + selection_supported_(qApp->clipboard()->supportsSelection()) { connect(qApp->clipboard(), SIGNAL(selectionChanged()), this, SLOT(on_dataChanged())); - // initialize clipboard status. - on_dataChanged(); } @@ -55,7 +51,7 @@ void GuiSelection::haveSelection(bool own) // an application actually requests it. // This way calling Selection::have() is cheap and we can do it as // often as we want. - LYXERR(Debug::SELECTION, "GuiSelection: setting dummy selection"); + //LYXERR(Debug::SELECTION, "GuiSelection: setting dummy selection"); if (own) qApp->clipboard()->setText(QString(), QClipboard::Selection); // We don't need to do anything if own = false, as this case is @@ -76,7 +72,7 @@ docstring const GuiSelection::get() const if (str.isNull()) return docstring(); - return internalLineEnding(qstring_to_ucs4(str)); + return internalLineEnding(str); } @@ -84,16 +80,15 @@ void GuiSelection::put(docstring const & str) { LYXERR(Debug::SELECTION, "GuiSelection::put: " << to_utf8(str)); - qApp->clipboard()->setText(toqstr(externalLineEnding(str)), + qApp->clipboard()->setText(externalLineEnding(str), QClipboard::Selection); } void GuiSelection::on_dataChanged() { - LYXERR(Debug::SELECTION, "GuiSelection::on_dataChanged::empty: " << text_selection_empty_); - text_selection_empty_ = qApp->clipboard()-> - text(QClipboard::Selection).isEmpty(); + schedule_check_ = true; + LYXERR(Debug::SELECTION, "GuiSelection::on_dataChanged"); } @@ -102,12 +97,20 @@ bool GuiSelection::empty() const if (!selection_supported_) return true; - LYXERR(Debug::SELECTION, "GuiSelection::empty: " << text_selection_empty_); - - return text_selection_empty_; + // Cache which is to speed up selection-status read + // (4 calls when open Edit menu). + static bool text_selection_empty; + if (schedule_check_) { + text_selection_empty = qApp->clipboard()-> + text(QClipboard::Selection).isEmpty(); + schedule_check_ = false; + } + + LYXERR(Debug::SELECTION, "GuiSelection::filled: " << !text_selection_empty); + return text_selection_empty; } } // namespace frontend } // namespace lyx -#include "GuiSelection_moc.cpp" +#include "moc_GuiSelection.cpp"