mirror of
https://git.lyx.org/repos/lyx.git
synced 2025-01-06 01:15:24 +00:00
Fix bug #6538 (Figure: relative path changed to absolute on copy/paste)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_1_6_X@37114 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
653e054c06
commit
8e8c451ca1
@ -44,6 +44,8 @@
|
|||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
|
||||||
|
#include <boost/crc.hpp>
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
@ -325,6 +327,13 @@ void GuiClipboard::put(string const & lyx, docstring const & text)
|
|||||||
if (!lyx.empty()) {
|
if (!lyx.empty()) {
|
||||||
QByteArray const qlyx(lyx.c_str(), lyx.size());
|
QByteArray const qlyx(lyx.c_str(), lyx.size());
|
||||||
data->setData(lyxMimeType(), qlyx);
|
data->setData(lyxMimeType(), qlyx);
|
||||||
|
// If the OS has not the concept of clipboard ownership,
|
||||||
|
// we recognize internal data through its checksum.
|
||||||
|
if (!hasInternal()) {
|
||||||
|
boost::crc_32_type crc32;
|
||||||
|
crc32.process_bytes(lyx.c_str(), lyx.size());
|
||||||
|
checksum = crc32.checksum();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Don't test for text.empty() since we want to be able to clear the
|
// Don't test for text.empty() since we want to be able to clear the
|
||||||
// clipboard.
|
// clipboard.
|
||||||
@ -397,11 +406,26 @@ bool GuiClipboard::hasGraphicsContents(Clipboard::GraphicsType type) const
|
|||||||
|
|
||||||
bool GuiClipboard::isInternal() const
|
bool GuiClipboard::isInternal() const
|
||||||
{
|
{
|
||||||
|
if (!hasLyXContents())
|
||||||
|
return false;
|
||||||
|
|
||||||
// ownsClipboard() is also true for stuff coming from dialogs, e.g.
|
// ownsClipboard() is also true for stuff coming from dialogs, e.g.
|
||||||
// the preamble dialog
|
// the preamble dialog. This does only work on X11 and Windows, since
|
||||||
// FIXME: This does only work on X11, since ownsClipboard() is
|
// ownsClipboard() is hardwired to return false on OS X.
|
||||||
// hardwired to return false on Windows and OS X.
|
if (hasInternal())
|
||||||
return qApp->clipboard()->ownsClipboard() && hasLyXContents();
|
return qApp->clipboard()->ownsClipboard();
|
||||||
|
|
||||||
|
// We are running on OS X: Check whether clipboard data is from
|
||||||
|
// ourself by comparing its checksum with the stored one.
|
||||||
|
QMimeData const * source =
|
||||||
|
qApp->clipboard()->mimeData(QClipboard::Clipboard);
|
||||||
|
if (!source)
|
||||||
|
return false;
|
||||||
|
QByteArray const ar = source->data(lyxMimeType());
|
||||||
|
string const data(ar.data(), ar.count());
|
||||||
|
boost::crc_32_type crc32;
|
||||||
|
crc32.process_bytes(data.c_str(), data.size());
|
||||||
|
return checksum == crc32.checksum();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -409,8 +433,10 @@ bool GuiClipboard::hasInternal() const
|
|||||||
{
|
{
|
||||||
// Windows and Mac OS X does not have the concept of ownership;
|
// Windows and Mac OS X does not have the concept of ownership;
|
||||||
// the clipboard is a fully global resource so all applications
|
// the clipboard is a fully global resource so all applications
|
||||||
// are notified of changes.
|
// are notified of changes. However, on Windows ownership is
|
||||||
#if (defined(Q_WS_X11))
|
// emulated by Qt through the OleIsCurrentClipboard() API, while
|
||||||
|
// on Mac OS X we deal with this issue by ourself.
|
||||||
|
#if (defined(Q_WS_X11) || defined(Q_WS_WIN))
|
||||||
return true;
|
return true;
|
||||||
#else
|
#else
|
||||||
return false;
|
return false;
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
|
#include <boost/cstdint.hpp>
|
||||||
|
|
||||||
namespace lyx {
|
namespace lyx {
|
||||||
namespace frontend {
|
namespace frontend {
|
||||||
|
|
||||||
@ -57,6 +59,8 @@ private:
|
|||||||
bool text_clipboard_empty_;
|
bool text_clipboard_empty_;
|
||||||
bool has_lyx_contents_;
|
bool has_lyx_contents_;
|
||||||
bool has_graphics_contents_;
|
bool has_graphics_contents_;
|
||||||
|
/// checksum for internal clipboard data (used on Mac)
|
||||||
|
boost::uint32_t checksum;
|
||||||
};
|
};
|
||||||
|
|
||||||
QString const lyxMimeType();
|
QString const lyxMimeType();
|
||||||
|
@ -3729,8 +3729,7 @@ void InsetTabular::doDispatch(Cursor & cur, FuncRequest & cmd)
|
|||||||
cell(cur.idx())->dispatch(cur, cmd);
|
cell(cur.idx())->dispatch(cur, cmd);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (theClipboard().isInternal() ||
|
if (theClipboard().isInternal()) {
|
||||||
!theClipboard().hasInternal() && theClipboard().hasLyXContents()) {
|
|
||||||
cur.recordUndoInset(INSERT_UNDO);
|
cur.recordUndoInset(INSERT_UNDO);
|
||||||
pasteClipboard(cur);
|
pasteClipboard(cur);
|
||||||
}
|
}
|
||||||
|
@ -117,6 +117,9 @@ What's new
|
|||||||
- Don't allow to make tables within floats "long" as this could lead to
|
- Don't allow to make tables within floats "long" as this could lead to
|
||||||
LaTeX errors (bug 6585).
|
LaTeX errors (bug 6585).
|
||||||
|
|
||||||
|
- Don't use absolute paths on internal copy/paste operations on Mac
|
||||||
|
(bug 6538).
|
||||||
|
|
||||||
- Correct the denomination of the languages Norsk and Nynorsk.
|
- Correct the denomination of the languages Norsk and Nynorsk.
|
||||||
|
|
||||||
- Do not allow to put the cursor in an InsetInfo. Instead, a context
|
- Do not allow to put the cursor in an InsetInfo. Instead, a context
|
||||||
|
Loading…
Reference in New Issue
Block a user