summaryrefslogtreecommitdiffstats
path: root/src/extension/implementation/script.cpp
diff options
context:
space:
mode:
authorMartin Owens <doctormo@gmail.com>2014-03-27 01:33:44 +0000
committerMartin Owens <doctormo@gmail.com>2014-03-27 01:33:44 +0000
commit5a4fb2325f60d292b47330f540b26a3279341c90 (patch)
treed2aa7967be25450b83e625025366c618101ae49f /src/extension/implementation/script.cpp
parentThe Polar Arrange Tab of the Arrange Dialog now hides the parametric (diff)
parentRemove Snap menu item and improve grid menu item text (diff)
downloadinkscape-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.cpp109
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;