diff --exclude-from=/home/dang/bin/scripts/diffrc -up -ruN gtk-engines-2.8.2.orig/engines/smooth/src/engine/shared/gtk/smooth_gtk_rc.c gtk-engines-2.8.2/engines/smooth/src/engine/shared/gtk/smooth_gtk_rc.c --- gtk-engines-2.8.2.orig/engines/smooth/src/engine/shared/gtk/smooth_gtk_rc.c 2006-11-13 11:07:12.000000000 -0500 +++ gtk-engines-2.8.2/engines/smooth/src/engine/shared/gtk/smooth_gtk_rc.c 2007-02-22 16:12:41.000000000 -0500 @@ -2207,11 +2207,12 @@ smooth_arrow_merge (SmoothArrowPart *des { SmoothArrow dummy; - if (dest_arrow->DefaultStyle) - g_free(dest_arrow->DefaultStyle); - + /* what is this for? */ smooth_style_get_arrow(src_arrow, 0, 0, &dummy); - memcpy(dest_arrow, src_arrow, sizeof(SmoothArrowPart)); + + SmoothCopyArrowPart(dest_arrow, src_arrow); + + /* Only used to inherit in one rc style. So this should work fine, I think. */ dest_arrow->Inherited = NULL; } diff --exclude-from=/home/dang/bin/scripts/diffrc -up -ruN gtk-engines-2.8.2.orig/engines/smooth/src/utils/draw_arrows.c gtk-engines-2.8.2/engines/smooth/src/utils/draw_arrows.c --- gtk-engines-2.8.2.orig/engines/smooth/src/utils/draw_arrows.c 2006-07-25 05:46:47.000000000 -0400 +++ gtk-engines-2.8.2/engines/smooth/src/utils/draw_arrows.c 2007-02-22 16:12:41.000000000 -0500 @@ -685,3 +685,52 @@ void SmoothFreeArrowStyles(SmoothArrowPa } } } + + +void SmoothCopyArrowPart(SmoothArrowPart *dst, SmoothArrowPart *src) +{ + gint i, j; + g_assert (dst != NULL); + g_assert (src != NULL); + + SmoothFreeArrowStyles(dst); + + if (src->DefaultStyle) + { + dst->DefaultStyle = g_new0(SmoothArrow, 1); + memcpy(dst->DefaultStyle, src->DefaultStyle, sizeof(SmoothArrow)); + } + + if (src->DefaultStateStyles) + { + dst->DefaultStateStyles = g_new0(SmoothArrow, 1); + memcpy(dst->DefaultStateStyles, src->DefaultStateStyles, sizeof(SmoothArrow)); + } + + if (src->DefaultTypeStyles) + { + dst->DefaultTypeStyles = g_new0(SmoothArrow, 1); + memcpy(dst->DefaultTypeStyles, src->DefaultTypeStyles, sizeof(SmoothArrow)); + } + + for (i=0; i < 5; i++) + { + if (src->Styles[i]) + { + dst->Styles[i] = g_new0(SmoothArrow, 1); + memcpy(dst->Styles[i], src->Styles[i], sizeof(SmoothArrow)); + } + } + + dst->StylesFreed = src->StylesFreed; + dst->Inherited = src->Inherited; + + for (i=0; i < 5; i++) + { + for (j=0; j < SMOOTH_ARROW_TYPE_COUNT; j++) + { + dst->CompositeArrows[i][j] = src->CompositeArrows[i][j]; + dst->CompositeArrowsSet[i][j] = src->CompositeArrowsSet[i][j]; + } + } +} diff --exclude-from=/home/dang/bin/scripts/diffrc -up -ruN gtk-engines-2.8.2.orig/engines/smooth/src/utils/draw_arrows.h gtk-engines-2.8.2/engines/smooth/src/utils/draw_arrows.h --- gtk-engines-2.8.2.orig/engines/smooth/src/utils/draw_arrows.h 2006-08-14 15:25:41.000000000 -0400 +++ gtk-engines-2.8.2/engines/smooth/src/utils/draw_arrows.h 2007-02-22 16:12:41.000000000 -0500 @@ -112,5 +112,7 @@ SmoothDrawArrow(SmoothCanvas *Canvas, GE_INTERNAL void SmoothFreeArrowStyles(SmoothArrowPart *arrow); +GE_INTERNAL void +SmoothCopyArrowPart(SmoothArrowPart *dst, SmoothArrowPart *src); #endif /* DRAW_ARROWS_H */