Code

added fix from Dale Harvey to expand incomplete JIDs specified in user
[inkscape.git] / src / interface.cpp
index 5de76aff170a9bfc6dacf880730887e0e9c825d0..212a7b9a0b11f1a79706dde6a25d4c9b4c4a7d23 100644 (file)
@@ -54,6 +54,9 @@
 #include "message-context.h"
 
 // Added for color drag-n-drop
+#if ENABLE_LCMS
+#include "lcms.h"
+#endif // ENABLE_LCMS
 #include "display/sp-canvas.h"
 #include "color.h"
 #include "svg/svg-color.h"
@@ -85,7 +88,9 @@ static GtkTargetEntry ui_drop_target_entries [] = {
     {"image/svg",     0, SVG_DATA},
     {"image/png",     0, PNG_DATA},
     {"image/jpeg",    0, JPEG_DATA},
+#if ENABLE_LCMS
     {"application/x-inkscape-color", 0, APP_X_INKY_COLOR},
+#endif // ENABLE_LCMS
     {"application/x-color", 0, APP_X_COLOR}
 };
 
@@ -976,6 +981,7 @@ sp_ui_drag_data_received(GtkWidget *widget,
                          gpointer user_data)
 {
     switch (info) {
+#if ENABLE_LCMS
         case APP_X_INKY_COLOR:
         {
             SPDesktop *desktop = SP_ACTIVE_DESKTOP;
@@ -988,6 +994,8 @@ sp_ui_drag_data_received(GtkWidget *widget,
             if ( item )
             {
                 if ( data->length >= 8 ) {
+                    cmsHPROFILE srgbProf = cmsCreate_sRGBProfile();
+
                     gchar c[64] = {0};
                     // Careful about endian issues.
                     guint16* dataVals = (guint16*)data->data;
@@ -1005,23 +1013,25 @@ sp_ui_drag_data_received(GtkWidget *widget,
                     sp_desktop_apply_css_recursive( item, css, true );
                     item->updateRepr();
 
-                    if ( data->length > 12 ) {
+                    if ( data->length > 14 ) {
+                        int flags = dataVals[4];
+
                         // piggie-backed palette entry info
-                        int index = dataVals[4];
+                        int index = dataVals[5];
                         Glib::ustring palName;
-                        for ( int i = 0; i < dataVals[5]; i++ ) {
-                            palName += (gunichar)dataVals[6+i];
+                        for ( int i = 0; i < dataVals[6]; i++ ) {
+                            palName += (gunichar)dataVals[7+i];
                         }
 
                         // Now hook in a magic tag of some sort.
-                        if ( !palName.empty() ) {
+                        if ( !palName.empty() && (flags & 1) ) {
                             gchar* str = g_strdup_printf("%d|", index);
                             palName.insert( 0, str );
                             g_free(str);
                             str = 0;
 
                             sp_object_setAttribute( SP_OBJECT(item),
-                                                    (drag_context->action != GDK_ACTION_MOVE) ? "HOTFill":"HOTStroke",
+                                                    (drag_context->action != GDK_ACTION_MOVE) ? "inkscape:x-fill-tag":"inkscape:x-stroke-tag",
                                                     palName.c_str(),
                                                     false );
                             item->updateRepr();
@@ -1030,10 +1040,15 @@ sp_ui_drag_data_received(GtkWidget *widget,
 
                     SPDocument *doc = SP_ACTIVE_DOCUMENT;
                     sp_document_done( doc );
+
+                    if ( srgbProf ) {
+                        cmsCloseProfile( srgbProf );
+                    }
                 }
             }
         }
         break;
+#endif // ENABLE_LCMS
 
         case APP_X_COLOR:
         {