diff options
| author | Tavmjong Bah <tavmjong@free.fr> | 2019-11-15 13:08:04 +0000 |
|---|---|---|
| committer | Tavmjong Bah <tavmjong@free.fr> | 2019-11-15 13:08:04 +0000 |
| commit | a4ee55bc416d5afdd9538f951c27e2df2379a76c (patch) | |
| tree | 67e74cf00b74da3fc800f69265630f6f22d9b28b | |
| parent | Correct order of stylesheet list insertion (after bug fix to libcroco). (diff) | |
| download | inkscape-a4ee55bc416d5afdd9538f951c27e2df2379a76c.tar.gz inkscape-a4ee55bc416d5afdd9538f951c27e2df2379a76c.zip | |
Add unlinking function to CRStyleSheet.
| -rw-r--r-- | src/3rdparty/libcroco/cr-stylesheet.c | 43 | ||||
| -rw-r--r-- | src/3rdparty/libcroco/cr-stylesheet.h | 7 |
2 files changed, 50 insertions, 0 deletions
diff --git a/src/3rdparty/libcroco/cr-stylesheet.c b/src/3rdparty/libcroco/cr-stylesheet.c index c80c40b93..3f554b18c 100644 --- a/src/3rdparty/libcroco/cr-stylesheet.c +++ b/src/3rdparty/libcroco/cr-stylesheet.c @@ -180,6 +180,7 @@ cr_stylesheet_append_stylesheet (CRStyleSheet * a_this, CRStyleSheet * a_new_sty for (cur = a_this; cur->next; cur = cur->next) ; cur->next = a_new_stylesheet; + a_new_stylesheet->prev = cur; /* The "origin" must apriori be the same for all stylesheets in a list. We must set it correctly or errors will occur in @@ -190,6 +191,48 @@ cr_stylesheet_append_stylesheet (CRStyleSheet * a_this, CRStyleSheet * a_new_sty return a_this; } +/** + * cr_stylesheet_unlink: + *@a_this: the stylesheet to unlink. + * + *Unlinks the stylesheet from the stylesheet list. + * + *Returns a pointer to the unlinked stylesheet in + *case of a successfull completion, NULL otherwise. + */ +CRStyleSheet * +cr_stylesheet_unlink (CRStyleSheet * a_this) +{ + CRStyleSheet *result = a_this; + + g_return_val_if_fail (result, NULL); + + /* + *some sanity checks first + */ + if (a_this->prev) { + g_return_val_if_fail (a_this->prev->next == a_this, NULL); + + } + if (a_this->next) { + g_return_val_if_fail (a_this->next->prev == a_this, NULL); + } + + /* + *now, the real unlinking job. + */ + if (a_this->prev) { + a_this->prev->next = a_this->next; + } + if (a_this->next) { + a_this->next->prev = a_this->prev; + } + + a_this->next = NULL; + a_this->prev = NULL; + + return a_this; +} /** *Appends a new import stylesheet to the current list of imports. diff --git a/src/3rdparty/libcroco/cr-stylesheet.h b/src/3rdparty/libcroco/cr-stylesheet.h index 7ebaf7a60..d6e720d90 100644 --- a/src/3rdparty/libcroco/cr-stylesheet.h +++ b/src/3rdparty/libcroco/cr-stylesheet.h @@ -91,6 +91,11 @@ struct _CRStyleSheet * A link to the next stylesheet. */ CRStyleSheet *next; + + /** + * A link to the previous stylesheet. + */ + CRStyleSheet *prev; } ; CRStyleSheet * cr_stylesheet_new (CRStatement *a_stmts) ; @@ -107,6 +112,8 @@ CRStyleSheet * cr_stylesheet_append_import (CRStyleSheet *a_this, CRStyleSheet * CRStyleSheet * cr_stylesheet_append_stylesheet (CRStyleSheet *a_this, CRStyleSheet *a_new_stylesheet) ; +CRStyleSheet * cr_stylesheet_unlink (CRStyleSheet *a_this) ; + void cr_stylesheet_ref (CRStyleSheet *a_this) ; gboolean cr_stylesheet_unref (CRStyleSheet *a_this) ; |
