From 9f749722c869cbdbab91d935fb626886058c12b0 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Sat, 4 Jun 2016 17:21:05 +0200 Subject: Fix reading of 'stroke-dasharray' when there is a trailing blank. Also fixes reading a value when there is no digit before a decimal point. Fixed bugs: - https://launchpad.net/bugs/1485197 (bzr r14950) --- src/style-internal.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/style-internal.cpp b/src/style-internal.cpp index b425a1c80..62b0de52d 100644 --- a/src/style-internal.cpp +++ b/src/style-internal.cpp @@ -1810,9 +1810,11 @@ SPIDashArray::read( gchar const *str ) { return; } + // std::vector tokens = Glib::Regex::split_simple("[,\\s]+", str ); + gchar *e = NULL; bool LineSolid = true; - while (e != str) { + while (e != str && *str != '\0') { /* TODO: Should allow rather than just a unitless (px) number. */ double number = g_ascii_strtod(str, (char **) &e); values.push_back( number ); @@ -1821,7 +1823,7 @@ SPIDashArray::read( gchar const *str ) { if (e != str) { str = e; } - while (str && *str && !isalnum(*str)) str += 1; + while (str && *str && !(isalnum(*str) || *str=='.')) str += 1; } if (LineSolid) { -- cgit v1.2.3 From fb6ee4a8495b064e6a64e1abec212941ce7c96f9 Mon Sep 17 00:00:00 2001 From: rafael-g Date: Sun, 5 Jun 2016 08:32:58 +0200 Subject: [Bug #1550178] Inkscape crashed with segfault in ExpressionEvaluator on OpenBSD. Fixed bugs: - https://launchpad.net/bugs/1550178 (bzr r14951) --- src/util/expression-evaluator.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/util/expression-evaluator.cpp b/src/util/expression-evaluator.cpp index 48064e647..b0b8e6036 100644 --- a/src/util/expression-evaluator.cpp +++ b/src/util/expression-evaluator.cpp @@ -28,6 +28,8 @@ #include "util/expression-evaluator.h" #include "util/units.h" +#include + #include #include @@ -49,7 +51,7 @@ EvaluatorToken::EvaluatorToken() } ExpressionEvaluator::ExpressionEvaluator(const char *string, Unit const *unit) : - string(string), + string(g_locale_to_utf8(string,-1,0,0,0)), unit(unit) { current_token.type = TOKEN_END; -- cgit v1.2.3 From 8e79c58572bac72489bde00c15d092bce02e850a Mon Sep 17 00:00:00 2001 From: rafael-g Date: Sun, 5 Jun 2016 08:43:06 +0200 Subject: [Bug #1587311] Entering + into stroke width dialog crashes Inkscape. Fixed bugs: - https://launchpad.net/bugs/1587311 (bzr r14952) --- src/util/expression-evaluator.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/util/expression-evaluator.cpp b/src/util/expression-evaluator.cpp index b0b8e6036..dd7ce97f7 100644 --- a/src/util/expression-evaluator.cpp +++ b/src/util/expression-evaluator.cpp @@ -208,8 +208,11 @@ EvaluatorQuantity ExpressionEvaluator::evaluateFactor() { EvaluatorQuantity evaluated_factor = EvaluatorQuantity(); EvaluatorToken consumed_token = EvaluatorToken(); - - if (acceptToken(TOKEN_NUM, &consumed_token)) { + + if (acceptToken(TOKEN_END, &consumed_token)) { + return evaluated_factor; + } + else if (acceptToken(TOKEN_NUM, &consumed_token)) { evaluated_factor.value = consumed_token.value.fl; } else if (acceptToken('(', NULL)) { evaluated_factor = evaluateExpression(); -- cgit v1.2.3 From 6f15692726681034391d42c58aa870e9dbba642f Mon Sep 17 00:00:00 2001 From: Eduard Braun Date: Sun, 5 Jun 2016 19:35:39 +0200 Subject: Extensions: Fixes and improvements for "gui-text" parameter attribute - "gui-text" was always translated (as opposed to only "_gui-text") - This made it impossible to have parameters without label (since the empty string returns the whole .po file header when translated), which caused an issue in restack extension - Added possibility to specify "msgctxt" for "gui-text" (bzr r14955) --- src/extension/param/bool.cpp | 2 +- src/extension/param/enum.cpp | 2 +- src/extension/param/float.cpp | 4 ++-- src/extension/param/int.cpp | 4 ++-- src/extension/param/parameter.cpp | 11 +++++++++++ src/extension/param/radiobutton.cpp | 2 +- src/extension/param/string.cpp | 2 +- 7 files changed, 19 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/extension/param/bool.cpp b/src/extension/param/bool.cpp index de9b1c586..87364d80f 100644 --- a/src/extension/param/bool.cpp +++ b/src/extension/param/bool.cpp @@ -137,7 +137,7 @@ Gtk::Widget *ParamBool::get_widget(SPDocument * doc, Inkscape::XML::Node * node, Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4)); #endif - Gtk::Label * label = Gtk::manage(new Gtk::Label(_(_text), Gtk::ALIGN_START)); + Gtk::Label * label = Gtk::manage(new Gtk::Label(_text, Gtk::ALIGN_START)); label->show(); hbox->pack_end(*label, true, true); diff --git a/src/extension/param/enum.cpp b/src/extension/param/enum.cpp index 8bc0fbda7..4e7420807 100644 --- a/src/extension/param/enum.cpp +++ b/src/extension/param/enum.cpp @@ -251,7 +251,7 @@ Gtk::Widget *ParamComboBox::get_widget(SPDocument * doc, Inkscape::XML::Node * n } Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4)); - Gtk::Label * label = Gtk::manage(new Gtk::Label(_(_text), Gtk::ALIGN_START)); + Gtk::Label * label = Gtk::manage(new Gtk::Label(_text, Gtk::ALIGN_START)); label->show(); hbox->pack_start(*label, false, false, _indent); diff --git a/src/extension/param/float.cpp b/src/extension/param/float.cpp index 81508f6c0..4e3cbfedc 100644 --- a/src/extension/param/float.cpp +++ b/src/extension/param/float.cpp @@ -186,7 +186,7 @@ Gtk::Widget * ParamFloat::get_widget(SPDocument * doc, Inkscape::XML::Node * nod if (_mode == FULL) { - UI::Widget::SpinScale *scale = new UI::Widget::SpinScale(_(_text), fadjust, _precision); + UI::Widget::SpinScale *scale = new UI::Widget::SpinScale(_text, fadjust, _precision); scale->set_size_request(400, -1); scale->show(); hbox->pack_start(*scale, false, false); @@ -194,7 +194,7 @@ Gtk::Widget * ParamFloat::get_widget(SPDocument * doc, Inkscape::XML::Node * nod } else if (_mode == MINIMAL) { - Gtk::Label * label = Gtk::manage(new Gtk::Label(_(_text), Gtk::ALIGN_START)); + Gtk::Label * label = Gtk::manage(new Gtk::Label(_text, Gtk::ALIGN_START)); label->show(); hbox->pack_start(*label, true, true, _indent); diff --git a/src/extension/param/int.cpp b/src/extension/param/int.cpp index c286018fd..605aab5ad 100644 --- a/src/extension/param/int.cpp +++ b/src/extension/param/int.cpp @@ -168,14 +168,14 @@ ParamInt::get_widget (SPDocument * doc, Inkscape::XML::Node * node, sigc::signal if (_mode == FULL) { - UI::Widget::SpinScale *scale = new UI::Widget::SpinScale(_(_text), fadjust, 0); + UI::Widget::SpinScale *scale = new UI::Widget::SpinScale(_text, fadjust, 0); scale->set_size_request(400, -1); scale->show(); hbox->pack_start(*scale, false, false); } else if (_mode == MINIMAL) { - Gtk::Label * label = Gtk::manage(new Gtk::Label(_(_text), Gtk::ALIGN_START)); + Gtk::Label * label = Gtk::manage(new Gtk::Label(_text, Gtk::ALIGN_START)); label->show(); hbox->pack_start(*label, true, true, _indent); diff --git a/src/extension/param/parameter.cpp b/src/extension/param/parameter.cpp index 10029893f..27d9bdf9b 100644 --- a/src/extension/param/parameter.cpp +++ b/src/extension/param/parameter.cpp @@ -20,6 +20,7 @@ #endif #include +#include #include "ui/widget/color-notebook.h" #include @@ -56,6 +57,16 @@ Parameter *Parameter::make(Inkscape::XML::Node *in_repr, Inkscape::Extension::Ex const char *guitext = in_repr->attribute("gui-text"); if (guitext == NULL) { guitext = in_repr->attribute("_gui-text"); + if (guitext == NULL) { + // guitext = ""; // propably better to require devs to explicitly set an empty gui-text if this is what they want + } else { + const char *context = in_repr->attribute("msgctxt"); + if (context != NULL) { + guitext = g_dpgettext2(NULL, context, guitext); + } else { + guitext = _(guitext); + } + } } const char *gui_tip = in_repr->attribute("gui-tip"); if (gui_tip == NULL) { diff --git a/src/extension/param/radiobutton.cpp b/src/extension/param/radiobutton.cpp index 8181c6f51..1d1b860c6 100644 --- a/src/extension/param/radiobutton.cpp +++ b/src/extension/param/radiobutton.cpp @@ -313,7 +313,7 @@ Gtk::Widget * ParamRadioButton::get_widget(SPDocument * doc, Inkscape::XML::Node Gtk::VBox * vbox = Gtk::manage(new Gtk::VBox(false, 0)); #endif - Gtk::Label * label = Gtk::manage(new Gtk::Label(_(_text), Gtk::ALIGN_START, Gtk::ALIGN_START)); + Gtk::Label * label = Gtk::manage(new Gtk::Label(_text, Gtk::ALIGN_START, Gtk::ALIGN_START)); label->show(); hbox->pack_start(*label, false, false, _indent); diff --git a/src/extension/param/string.cpp b/src/extension/param/string.cpp index 1d9205502..6b082b133 100644 --- a/src/extension/param/string.cpp +++ b/src/extension/param/string.cpp @@ -166,7 +166,7 @@ Gtk::Widget * ParamString::get_widget(SPDocument * doc, Inkscape::XML::Node * no } Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4)); - Gtk::Label * label = Gtk::manage(new Gtk::Label(_(_text), Gtk::ALIGN_START)); + Gtk::Label * label = Gtk::manage(new Gtk::Label(_text, Gtk::ALIGN_START)); label->show(); hbox->pack_start(*label, false, false, _indent); -- cgit v1.2.3