diff options
| author | Martin Owens <doctormo@gmail.com> | 2014-03-27 01:33:44 +0000 |
|---|---|---|
| committer | Martin Owens <doctormo@gmail.com> | 2014-03-27 01:33:44 +0000 |
| commit | 5a4fb2325f60d292b47330f540b26a3279341c90 (patch) | |
| tree | d2aa7967be25450b83e625025366c618101ae49f /src/extension/implementation/script.cpp | |
| parent | The Polar Arrange Tab of the Arrange Dialog now hides the parametric (diff) | |
| parent | Remove Snap menu item and improve grid menu item text (diff) | |
| download | inkscape-5a4fb2325f60d292b47330f540b26a3279341c90.tar.gz inkscape-5a4fb2325f60d292b47330f540b26a3279341c90.zip | |
Commit a merge to trunk, with probabal errors
(bzr r11073.1.36)
Diffstat (limited to 'src/extension/implementation/script.cpp')
| -rw-r--r-- | src/extension/implementation/script.cpp | 109 |
1 files changed, 67 insertions, 42 deletions
diff --git a/src/extension/implementation/script.cpp b/src/extension/implementation/script.cpp index 432b25bb9..f0fd3711b 100644 --- a/src/extension/implementation/script.cpp +++ b/src/extension/implementation/script.cpp @@ -19,10 +19,16 @@ # include <config.h> #endif +#if GLIBMM_DISABLE_DEPRECATED && HAVE_GLIBMM_THREADS_H +#include <glibmm/threads.h> +#endif + #include <gtkmm/messagedialog.h> #include <gtkmm/main.h> #include <gtkmm/scrolledwindow.h> #include <gtkmm/textview.h> +#include <glibmm/miscutils.h> +#include <glibmm/convert.h> #include <unistd.h> #include <errno.h> @@ -667,8 +673,13 @@ void Script::effect(Inkscape::Extension::Effect *module, printf("TOO BAD TO LIVE!!!"); exit(1); } + if (doc == NULL) + { + g_warning("Script::effect: View not defined"); + return; + } - SPDesktop *desktop = (SPDesktop *)doc; + SPDesktop *desktop = reinterpret_cast<SPDesktop *>(doc); sp_namedview_document_from_window(desktop); std::list<std::string> params; @@ -694,16 +705,14 @@ void Script::effect(Inkscape::Extension::Effect *module, return; } - if (desktop != NULL) { - Inkscape::Util::GSListConstIterator<SPItem *> selected = - sp_desktop_selection(desktop)->itemList(); - while ( selected != NULL ) { - Glib::ustring selected_id; - selected_id += "--id="; - selected_id += (*selected)->getId(); - params.insert(params.begin(), selected_id); - ++selected; - } + Inkscape::Util::GSListConstIterator<SPItem *> selected = + sp_desktop_selection(desktop)->itemList(); //desktop should not be NULL since doc was checked and desktop is a casted pointer + while ( selected != NULL ) { + Glib::ustring selected_id; + selected_id += "--id="; + selected_id += (*selected)->getId(); + params.insert(params.begin(), selected_id); + ++selected; } file_listener fileout; @@ -726,31 +735,37 @@ void Script::effect(Inkscape::Extension::Effect *module, g_unlink(tempfilename_out.c_str()); - /* Do something with mydoc.... */ if (mydoc) { - doc->doc()->emitReconstructionStart(); - copy_doc(doc->doc()->rroot, mydoc->rroot); - doc->doc()->emitReconstructionFinish(); - SPObject *layer = NULL; - SPObject *obj = mydoc->getObjectById("base"); - - // Getting the named view from the document generated by the extension - SPNamedView *nv = (SPNamedView *) obj; - - //Check if it has a default layer set up - if ( nv != NULL){ - if( nv->default_layer_id != 0 ) { - SPDocument *document = desktop->doc(); - //If so, get that layer - layer = document->getObjectById(g_quark_to_string(nv->default_layer_id)); + SPDocument* vd=doc->doc(); + if (vd != NULL) + { + vd->emitReconstructionStart(); + copy_doc(vd->rroot, mydoc->rroot); + vd->emitReconstructionFinish(); + SPObject *layer = NULL; + + // Getting the named view from the document generated by the extension + SPNamedView *nv = sp_document_namedview(mydoc, NULL); + + //Check if it has a default layer set up + if ( nv != NULL) + { + if( nv->default_layer_id != 0 ) { + SPDocument *document = desktop->doc(); + //If so, get that layer + if (document != NULL) + { + layer = document->getObjectById(g_quark_to_string(nv->default_layer_id)); + } + } + } + + sp_namedview_update_layers_from_document(desktop); + //If that layer exists, + if (layer) { + //set the current layer + desktop->setCurrentLayer(layer); } - } - - sp_namedview_update_layers_from_document(desktop); - //If that layer exists, - if (layer) { - //set the current layer - desktop->setCurrentLayer(layer); } mydoc->release(); } @@ -777,6 +792,11 @@ void Script::effect(Inkscape::Extension::Effect *module, */ void Script::copy_doc (Inkscape::XML::Node * oldroot, Inkscape::XML::Node * newroot) { + if ((oldroot == NULL) ||(newroot == NULL)) + { + g_warning("Error on copy_doc: NULL pointer input."); + return; + } std::vector<Inkscape::XML::Node *> delete_list; Inkscape::XML::Node * oldroot_namedview = NULL; @@ -853,7 +873,11 @@ void Script::checkStderr (const Glib::ustring &data, GtkWidget *dlg = GTK_WIDGET(warning.gobj()); sp_transientize(dlg); +#if WITH_GTKMM_3_0 + Gtk::Box * vbox = warning.get_content_area(); +#else Gtk::Box * vbox = warning.get_vbox(); +#endif /* Gtk::TextView * textview = new Gtk::TextView(Gtk::TextBuffer::create()); */ Gtk::TextView * textview = new Gtk::TextView(); @@ -861,13 +885,7 @@ void Script::checkStderr (const Glib::ustring &data, textview->set_wrap_mode(Gtk::WRAP_WORD); textview->show(); - // Remove the last character - char *errormsg = (char*) data.c_str(); - while (*errormsg != '\0') errormsg++; - errormsg -= 1; - *errormsg = '\0'; - - textview->get_buffer()->set_text(_(data.c_str())); + textview->get_buffer()->set_text(data.c_str()); Gtk::ScrolledWindow * scrollwindow = new Gtk::ScrolledWindow(); scrollwindow->add(*textview); @@ -963,7 +981,14 @@ int Script::execute (const std::list<std::string> &in_command, // assemble the rest of argv std::copy(in_params.begin(), in_params.end(), std::back_inserter(argv)); if (!filein.empty()) { - argv.push_back(filein); + if(Glib::path_is_absolute(filein)) + argv.push_back(filein); + else { + std::vector<std::string> buildargs; + buildargs.push_back(Glib::get_current_dir()); + buildargs.push_back(filein); + argv.push_back(Glib::build_filename(buildargs)); + } } int stdout_pipe, stderr_pipe; |
