summaryrefslogtreecommitdiffstats
path: root/src/widgets/paint-selector.cpp
diff options
context:
space:
mode:
authorKarl Cheng <qantas94heavy@gmail.com>2019-05-12 12:26:47 +0000
committerKarl Cheng <qantas94heavy@gmail.com>2019-05-12 12:30:59 +0000
commit6e1495731a8f04fe88c5bd9777627424886751a2 (patch)
treec27fde4eb808e16c89dd60e4c1781f3b7c1b5f3a /src/widgets/paint-selector.cpp
parentMerge branch 'master' of gitlab.com:inkscape/inkscape (diff)
downloadinkscape-6e1495731a8f04fe88c5bd9777627424886751a2.tar.gz
inkscape-6e1495731a8f04fe88c5bd9777627424886751a2.zip
Retrieve pattern object from ID before casting
The actual pattern object itself needs to be retrieved before casting as SP_PATTERN(). You can't magically get an SPPattern* out of a gchar*. Also move SP_IS_PATTERN() check to before it is used. Fixes: https://bugs.launchpad.net/inkscape/+bug/1378595
Diffstat (limited to 'src/widgets/paint-selector.cpp')
-rw-r--r--src/widgets/paint-selector.cpp32
1 files changed, 18 insertions, 14 deletions
diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp
index 6b63905c0..b640ee22f 100644
--- a/src/widgets/paint-selector.cpp
+++ b/src/widgets/paint-selector.cpp
@@ -1388,20 +1388,20 @@ gboolean SPPaintSelector::isSeparator (GtkTreeModel *model, GtkTreeIter *iter, g
SPPattern *SPPaintSelector::getPattern()
{
SPPattern *pat = nullptr;
- g_return_val_if_fail((mode == MODE_PATTERN) , NULL);
+ g_return_val_if_fail(mode == MODE_PATTERN, NULL);
GtkWidget *combo = GTK_WIDGET(g_object_get_data(G_OBJECT(this), "patternmenu"));
/* no pattern menu if we were just selected */
- if ( combo == nullptr ) {
+ if (combo == nullptr) {
return nullptr;
}
GtkTreeModel *store = gtk_combo_box_get_model(GTK_COMBO_BOX(combo));
/* Get the selected pattern */
- GtkTreeIter iter;
- if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX(combo), &iter) ||
+ GtkTreeIter iter;
+ if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(combo), &iter) ||
!gtk_list_store_iter_is_valid(GTK_LIST_STORE(store), &iter)) {
return nullptr;
}
@@ -1409,18 +1409,21 @@ SPPattern *SPPaintSelector::getPattern()
gchar *patid = nullptr;
gboolean stockid = FALSE;
gchar *label = nullptr;
- gtk_tree_model_get (store, &iter, COMBO_COL_LABEL, &label, COMBO_COL_STOCK, &stockid, COMBO_COL_PATTERN, &patid, -1);
+ gtk_tree_model_get(store, &iter,
+ COMBO_COL_LABEL, &label,
+ COMBO_COL_STOCK, &stockid,
+ COMBO_COL_PATTERN, &patid, -1);
+
if (patid == nullptr) {
return nullptr;
}
- if (strcmp(patid, "none")){
-
+ if (strcmp(patid, "none") != 0) {
gchar *paturn;
+
if (stockid) {
- paturn = g_strconcat("urn:inkscape:pattern:",patid,NULL);
- }
- else {
+ paturn = g_strconcat("urn:inkscape:pattern:", patid, NULL);
+ } else {
paturn = g_strdup(patid);
}
SPObject *pat_obj = get_stock_item(paturn);
@@ -1429,11 +1432,12 @@ SPPattern *SPPaintSelector::getPattern()
}
g_free(paturn);
} else {
- pat = SP_PATTERN(patid)->rootPattern();
- }
+ SPDocument *doc = SP_ACTIVE_DOCUMENT;
+ SPObject *pat_obj = doc->getObjectById(patid);
- if (pat && !SP_IS_PATTERN(pat)) {
- pat = nullptr;
+ if (pat_obj && SP_IS_PATTERN(pat_obj)) {
+ pat = SP_PATTERN(pat_obj)->rootPattern();
+ }
}
return pat;