forked from AuroraMiddleware/gtk
stylecontext: Don't crah when invalidate() is called on saved context
We need to invalidate the root node, not the current one. Fixes crashes on startup of eclipse. Testcase included. https://bugzilla.redhat.com/show_bug.cgi?id=1185828
This commit is contained in:
parent
473ab791ff
commit
edec64cda3
@ -3108,17 +3108,19 @@ gtk_style_context_invalidate (GtkStyleContext *context)
|
|||||||
{
|
{
|
||||||
GtkBitmask *changes;
|
GtkBitmask *changes;
|
||||||
GtkCssStyle *style;
|
GtkCssStyle *style;
|
||||||
|
GtkCssNode *root;
|
||||||
|
|
||||||
g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
|
g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
|
||||||
|
|
||||||
gtk_style_context_clear_cache (context);
|
gtk_style_context_clear_cache (context);
|
||||||
|
gtk_css_node_set_values (context->priv->cssnode, NULL);
|
||||||
|
|
||||||
/* insta-recalculate the new style here */
|
root = gtk_style_context_get_root (context);
|
||||||
style = build_properties (context,
|
style = build_properties (context,
|
||||||
context->priv->cssnode->decl,
|
root->decl,
|
||||||
!gtk_style_context_is_saved (context),
|
TRUE,
|
||||||
gtk_css_node_get_parent_style (context, context->priv->cssnode));
|
gtk_css_node_get_parent_style (context, root));
|
||||||
gtk_css_node_set_values (context->priv->cssnode, style);
|
gtk_css_node_set_values (root, style);
|
||||||
g_object_unref (style);
|
g_object_unref (style);
|
||||||
|
|
||||||
if (!gtk_style_context_is_saved (context))
|
if (!gtk_style_context_is_saved (context))
|
||||||
|
@ -289,6 +289,24 @@ test_basic_properties (void)
|
|||||||
g_object_unref (context);
|
g_object_unref (context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test_invalidate_saved (void)
|
||||||
|
{
|
||||||
|
GtkWidget *window;
|
||||||
|
GtkStyleContext *context;
|
||||||
|
|
||||||
|
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||||
|
|
||||||
|
context = gtk_widget_get_style_context (window);
|
||||||
|
gtk_style_context_save (context);
|
||||||
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||||
|
gtk_style_context_invalidate (context);
|
||||||
|
G_GNUC_END_IGNORE_DEPRECATIONS
|
||||||
|
gtk_style_context_restore (context);
|
||||||
|
|
||||||
|
gtk_widget_destroy (window);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char *argv[])
|
main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@ -299,6 +317,7 @@ main (int argc, char *argv[])
|
|||||||
g_test_add_func ("/style/path", test_path);
|
g_test_add_func ("/style/path", test_path);
|
||||||
g_test_add_func ("/style/match", test_match);
|
g_test_add_func ("/style/match", test_match);
|
||||||
g_test_add_func ("/style/basic", test_basic_properties);
|
g_test_add_func ("/style/basic", test_basic_properties);
|
||||||
|
g_test_add_func ("/style/invalidate-saved", test_invalidate_saved);
|
||||||
|
|
||||||
return g_test_run ();
|
return g_test_run ();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user