Code

Clear the mssage context after drag filling
[inkscape.git] / src / interface.cpp
index c7608f53a6c65f3e53d21cb3e2a77ddf0054dc7a..fa41e5898bbe81268ce036ee0cab0ab34b375bfb 100644 (file)
@@ -936,7 +936,8 @@ sp_ui_context_menu(Inkscape::UI::View::View *view, SPItem *item)
     }
 
     if (( group && group != dt->currentLayer() ) ||
-        ( dt->currentLayer() != dt->currentRoot() ) ) {
+        ( dt->currentLayer() != dt->currentRoot() && SP_OBJECT_PARENT(dt->currentLayer()) != dt->currentRoot() ) ) {
+        /* Separator */
         sp_ui_menu_append_item(GTK_MENU(m), NULL, NULL, NULL, NULL, NULL, NULL);
     }
 
@@ -974,11 +975,13 @@ sp_ui_drag_data_received(GtkWidget *widget,
                          guint event_time,
                          gpointer user_data)
 {
+    SPDocument *doc = SP_ACTIVE_DOCUMENT;
+    SPDesktop *desktop = SP_ACTIVE_DESKTOP;
+
     switch (info) {
 #if ENABLE_MAGIC_COLORS
         case APP_X_INKY_COLOR:
         {
-            SPDesktop *desktop = SP_ACTIVE_DESKTOP;
             int destX = 0;
             int destY = 0;
             gtk_widget_translate_coordinates( widget, &(desktop->canvas->widget), x, y, &destX, &destY );
@@ -1039,7 +1042,6 @@ sp_ui_drag_data_received(GtkWidget *widget,
                     sp_desktop_apply_css_recursive( item, css, true );
                     item->updateRepr();
 
-                    SPDocument *doc = SP_ACTIVE_DOCUMENT;
                     sp_document_done( doc , SP_VERB_NONE, 
                                       _("Drop color"));
 
@@ -1054,7 +1056,6 @@ sp_ui_drag_data_received(GtkWidget *widget,
 
         case APP_X_COLOR:
         {
-            SPDesktop *desktop = SP_ACTIVE_DESKTOP;
             int destX = 0;
             int destY = 0;
             gtk_widget_translate_coordinates( widget, &(desktop->canvas->widget), x, y, &destX, &destY );
@@ -1081,7 +1082,6 @@ sp_ui_drag_data_received(GtkWidget *widget,
                     sp_desktop_apply_css_recursive( item, css, true );
                     item->updateRepr();
 
-                    SPDocument *doc = SP_ACTIVE_DOCUMENT;
                     sp_document_done( doc , SP_VERB_NONE, 
                                       _("Drop color"));
                 }
@@ -1093,8 +1093,6 @@ sp_ui_drag_data_received(GtkWidget *widget,
         case SVG_XML_DATA: {
             gchar *svgdata = (gchar *)data->data;
 
-            SPDocument *doc = SP_ACTIVE_DOCUMENT;
-
             Inkscape::XML::Document *rnewdoc = sp_repr_read_mem(svgdata, data->length, SP_SVG_NS_URI);
 
             if (rnewdoc == NULL) {
@@ -1108,14 +1106,14 @@ sp_ui_drag_data_received(GtkWidget *widget,
             Inkscape::XML::Node *newgroup = rnewdoc->createElement("svg:g");
             newgroup->setAttribute("style", style);
 
+            Inkscape::XML::Document * xml_doc =  sp_document_repr_doc(doc);
             for (Inkscape::XML::Node *child = repr->firstChild(); child != NULL; child = child->next()) {
-                Inkscape::XML::Node *newchild = child->duplicate();
+                Inkscape::XML::Node *newchild = child->duplicate(xml_doc);
                 newgroup->appendChild(newchild);
             }
 
             Inkscape::GC::release(rnewdoc);
 
-            SPDesktop *desktop = SP_ACTIVE_DESKTOP;
             // Add it to the current layer
 
             // Greg's edits to add intelligent positioning of svg drops
@@ -1159,7 +1157,6 @@ sp_ui_drag_data_received(GtkWidget *widget,
             Base64OutputStream b64out(outs);
             b64out.setColumnWidth(0);
 
-            SPDocument *doc = SP_ACTIVE_DOCUMENT;
             Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
 
             Inkscape::XML::Node *newImage = xml_doc->createElement("svg:image");
@@ -1194,8 +1191,6 @@ sp_ui_drag_data_received(GtkWidget *widget,
                 }
             }
 
-            SPDesktop *desktop = SP_ACTIVE_DESKTOP;
-
             // Add it to the current layer
             desktop->currentLayer()->appendChildRepr(newImage);
 
@@ -1259,52 +1254,39 @@ bool
 sp_ui_overwrite_file(gchar const *filename)
 {
     bool return_value = FALSE;
-    GtkWidget *dialog;
-    GtkWidget *hbox;
-    GtkWidget *boxdata;
-    gchar *title;
-    gchar *text;
 
     if (Inkscape::IO::file_test(filename, G_FILE_TEST_EXISTS)) {
-
-        title = g_strdup_printf(_("Overwrite %s"), filename);
-        dialog = gtk_dialog_new_with_buttons(title,
-                                             NULL,
-                                             (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
-                                             GTK_STOCK_NO,
-                                             GTK_RESPONSE_NO,
-                                             GTK_STOCK_YES,
-                                             GTK_RESPONSE_YES,
-                                             NULL);
-        gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_YES);
-
-        sp_transientize(dialog);
-        gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
-
-        hbox = gtk_hbox_new(FALSE, 5);
-
-        // TODO - replace with Inkscape-specific call
-        boxdata = gtk_image_new_from_stock(GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG);
-
-        gtk_widget_show(boxdata);
-        gtk_box_pack_start(GTK_BOX(hbox), boxdata, TRUE, TRUE, 5);
-        text = g_strdup_printf(_("The file %s already exists.  Do you want to overwrite that file with the current document?"), filename);
-        boxdata = gtk_label_new(text);
-        gtk_label_set_line_wrap(GTK_LABEL(boxdata), TRUE);
-        gtk_widget_show(boxdata);
-        gtk_box_pack_start(GTK_BOX(hbox), boxdata, FALSE, FALSE, 5);
-        gtk_widget_show(hbox);
-        gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, TRUE, 5);
-
-        if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_YES) {
+        GtkWidget* ancestor = 0;
+        SPDesktop *desktop = SP_ACTIVE_DESKTOP;
+        if ( desktop ) {
+            desktop->getToplevel( ancestor );
+        }
+        GtkWindow *window = GTK_WIDGET_TOPLEVEL(ancestor) ? GTK_WINDOW( ancestor ) : 0;
+        gchar* baseName = g_path_get_basename( filename );
+        gchar* dirName = g_path_get_dirname( filename );
+        GtkWidget* dialog = gtk_message_dialog_new_with_markup( window,
+                                                                (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
+                                                                GTK_MESSAGE_QUESTION,
+                                                                GTK_BUTTONS_NONE,
+                                                                _( "<span weight=\"bold\" size=\"larger\">A file named \"%s\" already exists. Do you want to replace it?</span>\n\n"
+                                                                   "The file already exists in \"%s\". Replacing it will overwrite its contents." ),
+                                                                baseName,
+                                                                dirName
+            );
+        gtk_dialog_add_buttons( GTK_DIALOG(dialog),
+                                GTK_STOCK_CANCEL, GTK_RESPONSE_NO,
+                                _("Replace"), GTK_RESPONSE_YES,
+                                NULL );
+        gtk_dialog_set_default_response( GTK_DIALOG(dialog), GTK_RESPONSE_YES );
+
+        if ( gtk_dialog_run( GTK_DIALOG(dialog) ) == GTK_RESPONSE_YES ) {
             return_value = TRUE;
         } else {
             return_value = FALSE;
         }
-
         gtk_widget_destroy(dialog);
-        g_free(title);
-        g_free(text);
+        g_free( baseName );
+        g_free( dirName );
     } else {
         return_value = TRUE;
     }