summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKrzysztof Kosi??ski <tweenk.pl@gmail.com>2013-09-02 00:03:47 +0000
committerKrzysztof KosiƄski <tweenk.pl@gmail.com>2013-09-02 00:03:47 +0000
commit57154184731bf7d482be5bc2a67a74d11e491e2d (patch)
tree0fe641a811f4b0ef6692575e458b1d6dc1dfe624 /src
parentUnduplicate some code in the metafile printing extensions (diff)
downloadinkscape-57154184731bf7d482be5bc2a67a74d11e491e2d.tar.gz
inkscape-57154184731bf7d482be5bc2a67a74d11e491e2d.zip
Allow EMF import from Wine apps on Linux
(bzr r12500)
Diffstat (limited to 'src')
-rw-r--r--src/ui/clipboard.cpp31
1 files changed, 17 insertions, 14 deletions
diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp
index 629960613..22d42d525 100644
--- a/src/ui/clipboard.cpp
+++ b/src/ui/clipboard.cpp
@@ -94,12 +94,6 @@
#ifdef WIN32
#include <windows.h>
-// Clipboard Formats: http://msdn.microsoft.com/en-us/library/ms649013(VS.85).aspx
-// On Windows, most graphical applications can handle CF_DIB/CF_BITMAP and/or CF_ENHMETAFILE
-// GTK automatically presents an "image/bmp" target as CF_DIB/CF_BITMAP
-// Presenting "image/x-emf" as CF_ENHMETAFILE must be done by Inkscape ?
-#define CLIPBOARD_WIN32_EMF_TARGET "CF_ENHMETAFILE"
-#define CLIPBOARD_WIN32_EMF_MIME "image/x-emf"
#endif
namespace Inkscape {
@@ -179,13 +173,18 @@ ClipboardManagerImpl::ClipboardManagerImpl()
_text_style(NULL),
_clipboard( Gtk::Clipboard::get() )
{
+ // Clipboard Formats: http://msdn.microsoft.com/en-us/library/ms649013(VS.85).aspx
+ // On Windows, most graphical applications can handle CF_DIB/CF_BITMAP and/or CF_ENHMETAFILE
+ // GTK automatically presents an "image/bmp" target as CF_DIB/CF_BITMAP
+ // Presenting "image/x-emf" as CF_ENHMETAFILE must be done by Inkscape ?
+
// push supported clipboard targets, in order of preference
_preferred_targets.push_back("image/x-inkscape-svg");
_preferred_targets.push_back("image/svg+xml");
_preferred_targets.push_back("image/svg+xml-compressed");
-#ifdef WIN32
- _preferred_targets.push_back(CLIPBOARD_WIN32_EMF_MIME);
-#endif
+ _preferred_targets.push_back("image/x-emf");
+ _preferred_targets.push_back("CF_ENHMETAFILE");
+ _preferred_targets.push_back("WCF_ENHMETAFILE"); // seen on Wine
_preferred_targets.push_back("application/pdf");
_preferred_targets.push_back("image/x-adobe-illustrator");
}
@@ -981,7 +980,7 @@ SPDocument *ClipboardManagerImpl::_retrieveClipboard(Glib::ustring required_targ
Glib::ustring target = best_target;
#ifdef WIN32
- if (best_target == CLIPBOARD_WIN32_EMF_TARGET)
+ if (best_target == "CF_ENHMETAFILE" || best_target == "WCF_ENHMETAFILE")
{ // Try to save clipboard data as en emf file (using win32 api)
if (OpenClipboard(NULL)) {
HGLOBAL hglb = GetClipboardData(CF_ENHMETAFILE);
@@ -989,7 +988,7 @@ SPDocument *ClipboardManagerImpl::_retrieveClipboard(Glib::ustring required_targ
HENHMETAFILE hemf = CopyEnhMetaFile((HENHMETAFILE) hglb, filename);
if (hemf) {
file_saved = true;
- target = CLIPBOARD_WIN32_EMF_MIME;
+ target = "image/x-emf";
DeleteEnhMetaFile(hemf);
}
}
@@ -1020,6 +1019,10 @@ SPDocument *ClipboardManagerImpl::_retrieveClipboard(Glib::ustring required_targ
if (target == "image/x-inkscape-svg") {
target = "image/svg+xml";
}
+ // Use the EMF extension to import metafiles
+ if (target == "CF_ENHMETAFILE" || target == "WCF_ENHMETAFILE") {
+ target = "image/x-emf";
+ }
Inkscape::Extension::DB::InputList inlist;
Inkscape::Extension::db.get_input_list(inlist);
@@ -1213,10 +1216,10 @@ Glib::ustring ClipboardManagerImpl::_getBestTarget()
// clipboard target debugging snippet
/*
- g_debug("Begin clipboard targets");
+ g_message("Begin clipboard targets");
for ( std::list<Glib::ustring>::iterator x = targets.begin() ; x != targets.end(); ++x )
- g_debug("Clipboard target: %s", (*x).data());
- g_debug("End clipboard targets\n");
+ g_message("Clipboard target: %s", (*x).data());
+ g_message("End clipboard targets\n");
//*/
for (std::list<Glib::ustring>::iterator i = _preferred_targets.begin() ;