void gtk_css_node_set_visible (GtkCssNode *cssnode, gboolean visible) { if (cssnode->visible == visible) return; cssnode->visible = visible; g_object_notify_by_pspec (G_OBJECT (cssnode), cssnode_properties[PROP_VISIBLE]); if (cssnode->invalid) { if (cssnode->visible) { if (cssnode->parent) gtk_css_node_set_invalid (cssnode->parent, TRUE); else GTK_CSS_NODE_GET_CLASS (cssnode)->queue_validate (cssnode); } else { if (cssnode->parent == NULL) GTK_CSS_NODE_GET_CLASS (cssnode)->dequeue_validate (cssnode); } } if (cssnode->next_sibling) gtk_css_node_invalidate (cssnode->next_sibling, GTK_CSS_CHANGE_ANY_SIBLING | GTK_CSS_CHANGE_NTH_CHILD | (cssnode->previous_sibling ? 0 : GTK_CSS_CHANGE_FIRST_CHILD)); if (cssnode->previous_sibling) gtk_css_node_invalidate (cssnode->previous_sibling, GTK_CSS_CHANGE_NTH_LAST_CHILD | (cssnode->next_sibling ? 0 : GTK_CSS_CHANGE_LAST_CHILD)); }
void gtk_css_node_set_visible (GtkCssNode *cssnode, gboolean visible) { GtkCssNode *iter; if (cssnode->visible == visible) return; cssnode->visible = visible; g_object_notify_by_pspec (G_OBJECT (cssnode), cssnode_properties[PROP_VISIBLE]); if (cssnode->invalid) { if (cssnode->visible) { if (cssnode->parent) gtk_css_node_set_invalid (cssnode->parent, TRUE); else GTK_CSS_NODE_GET_CLASS (cssnode)->queue_validate (cssnode); } else { if (cssnode->parent == NULL) GTK_CSS_NODE_GET_CLASS (cssnode)->dequeue_validate (cssnode); } } if (cssnode->next_sibling) { gtk_css_node_invalidate (cssnode->next_sibling, GTK_CSS_CHANGE_ANY_SIBLING | GTK_CSS_CHANGE_NTH_CHILD); if (gtk_css_node_is_first_child (cssnode)) { for (iter = cssnode->next_sibling; iter != NULL; iter = iter->next_sibling) { gtk_css_node_invalidate (iter, GTK_CSS_CHANGE_FIRST_CHILD); if (iter->visible) break; } } } if (cssnode->previous_sibling) { if (gtk_css_node_is_last_child (cssnode)) { for (iter = cssnode->previous_sibling; iter != NULL; iter = iter->previous_sibling) { gtk_css_node_invalidate (iter, GTK_CSS_CHANGE_LAST_CHILD); if (iter->visible) break; } } gtk_css_node_invalidate (cssnode->parent->first_child, GTK_CSS_CHANGE_NTH_LAST_CHILD); } }
void gtk_css_node_remove_region (GtkCssNode *cssnode, GQuark region) { if (gtk_css_node_declaration_remove_region (&cssnode->decl, region)) gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_REGION); }
static void gtk_css_node_propagate_pending_changes (GtkCssNode *cssnode, gboolean style_changed) { GtkCssChange change, child_change; GtkCssNode *child; change = _gtk_css_change_for_child (cssnode->pending_changes); if (style_changed) change |= GTK_CSS_CHANGE_PARENT_STYLE; if (!cssnode->needs_propagation && change == 0) return; for (child = gtk_css_node_get_first_child (cssnode); child; child = gtk_css_node_get_next_sibling (child)) { child_change = child->pending_changes; gtk_css_node_invalidate (child, change); if (child->visible) change |= _gtk_css_change_for_sibling (child_change); } cssnode->needs_propagation = FALSE; }
void gtk_css_node_add_region (GtkCssNode *cssnode, GQuark region, GtkRegionFlags flags) { if (gtk_css_node_declaration_add_region (&cssnode->decl, region, flags)) gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_REGION); }
static void gtk_css_node_clear_classes (GtkCssNode *cssnode) { if (gtk_css_node_declaration_clear_classes (&cssnode->decl)) { gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_CLASS); g_object_notify_by_pspec (G_OBJECT (cssnode), cssnode_properties[PROP_CLASSES]); } }
void gtk_css_node_set_id (GtkCssNode *cssnode, /* interned */ const char *id) { if (gtk_css_node_declaration_set_id (&cssnode->decl, id)) { gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_ID); g_object_notify_by_pspec (G_OBJECT (cssnode), cssnode_properties[PROP_ID]); } }
void gtk_css_node_remove_class (GtkCssNode *cssnode, GQuark style_class) { if (gtk_css_node_declaration_remove_class (&cssnode->decl, style_class)) { gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_CLASS); g_object_notify_by_pspec (G_OBJECT (cssnode), cssnode_properties[PROP_CLASSES]); } }
void gtk_css_node_set_state (GtkCssNode *cssnode, GtkStateFlags state_flags) { if (gtk_css_node_declaration_set_state (&cssnode->decl, state_flags)) { gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_STATE); g_object_notify_by_pspec (G_OBJECT (cssnode), cssnode_properties[PROP_STATE]); } }
void gtk_css_node_set_widget_type (GtkCssNode *cssnode, GType widget_type) { if (gtk_css_node_declaration_set_type (&cssnode->decl, widget_type)) { gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_NAME); g_object_notify_by_pspec (G_OBJECT (cssnode), cssnode_properties[PROP_WIDGET_TYPE]); } }
void gtk_css_node_set_name (GtkCssNode *cssnode, /*interned*/ const char *name) { if (gtk_css_node_declaration_set_name (&cssnode->decl, name)) { gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_NAME); g_object_notify_by_pspec (G_OBJECT (cssnode), cssnode_properties[PROP_NAME]); g_object_notify_by_pspec (G_OBJECT (cssnode), cssnode_properties[PROP_WIDGET_TYPE]); } }
void gtk_css_node_invalidate_frame_clock (GtkCssNode *cssnode, gboolean just_timestamp) { /* frame clock is handled by the top level */ if (cssnode->parent) return; gtk_css_node_invalidate_timestamp (cssnode); if (!just_timestamp) gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_ANIMATIONS); }
void gtk_css_node_set_visible (GtkCssNode *cssnode, gboolean visible) { if (cssnode->visible == visible) return; cssnode->visible = visible; g_object_notify_by_pspec (G_OBJECT (cssnode), cssnode_properties[PROP_VISIBLE]); if (cssnode->next_sibling) gtk_css_node_invalidate (cssnode->next_sibling, GTK_CSS_CHANGE_POSITION | GTK_CSS_CHANGE_ANY_SIBLING); }
void gtk_css_node_invalidate_style_provider (GtkCssNode *cssnode) { GtkCssNode *child; gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_SOURCE); for (child = cssnode->first_child; child; child = child->next_sibling) { if (gtk_css_node_get_style_provider_or_null (child) == NULL) gtk_css_node_invalidate_style_provider (child); } }
static void gtk_css_node_invalidate_timestamp (GtkCssNode *cssnode) { GtkCssNode *child; if (!cssnode->invalid) return; if (!gtk_css_style_is_static (cssnode->style)) gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_TIMESTAMP); for (child = cssnode->first_child; child; child = child->next_sibling) { gtk_css_node_invalidate_timestamp (child); } }
void gtk_css_path_node_set_widget_path (GtkCssPathNode *node, GtkWidgetPath *path) { gtk_internal_return_if_fail (GTK_IS_CSS_PATH_NODE (node)); if (node->path == path) return; if (node->path) gtk_widget_path_unref (node->path); if (path) gtk_widget_path_ref (path); node->path = path; gtk_css_node_invalidate (GTK_CSS_NODE (node), GTK_CSS_CHANGE_ANY); }
static void gtk_css_node_reposition (GtkCssNode *node, GtkCssNode *new_parent, GtkCssNode *previous) { GtkCssNode *old_parent; g_assert (! (new_parent == NULL && previous != NULL)); old_parent = node->parent; /* Take a reference here so the whole function has a reference */ g_object_ref (node); if (node->visible) { if (node->next_sibling) gtk_css_node_invalidate (node->next_sibling, GTK_CSS_CHANGE_ANY_SIBLING | GTK_CSS_CHANGE_NTH_CHILD | (node->previous_sibling ? 0 : GTK_CSS_CHANGE_FIRST_CHILD)); else if (node->previous_sibling) gtk_css_node_invalidate (node->previous_sibling, GTK_CSS_CHANGE_LAST_CHILD); } if (old_parent != NULL) { g_signal_emit (old_parent, cssnode_signals[NODE_REMOVED], 0, node, node->previous_sibling); if (old_parent->first_child && node->visible) gtk_css_node_invalidate (old_parent->first_child, GTK_CSS_CHANGE_NTH_LAST_CHILD); } if (old_parent != new_parent) { if (old_parent == NULL) { gtk_css_node_parent_will_be_set (node); } else { g_object_unref (node); } if (gtk_css_node_get_style_provider_or_null (node) == NULL) gtk_css_node_invalidate_style_provider (node); gtk_css_node_invalidate (node, GTK_CSS_CHANGE_TIMESTAMP | GTK_CSS_CHANGE_ANIMATIONS); if (new_parent) { g_object_ref (node); if (node->pending_changes) new_parent->needs_propagation = TRUE; if (node->invalid && node->visible) gtk_css_node_set_invalid (new_parent, TRUE); } else { gtk_css_node_parent_was_unset (node); } } if (new_parent) { g_signal_emit (new_parent, cssnode_signals[NODE_ADDED], 0, node, previous); if (node->visible) gtk_css_node_invalidate (new_parent->first_child, GTK_CSS_CHANGE_NTH_LAST_CHILD); } if (node->visible) { if (node->next_sibling) { if (node->previous_sibling == NULL) gtk_css_node_invalidate (node->next_sibling, GTK_CSS_CHANGE_FIRST_CHILD); else gtk_css_node_invalidate_style (node->next_sibling); } else if (node->previous_sibling) { gtk_css_node_invalidate (node->previous_sibling, GTK_CSS_CHANGE_LAST_CHILD); } } else { if (node->next_sibling) gtk_css_node_invalidate_style (node->next_sibling); } gtk_css_node_invalidate (node, GTK_CSS_CHANGE_ANY_PARENT | GTK_CSS_CHANGE_ANY_SIBLING | GTK_CSS_CHANGE_NTH_CHILD | (node->previous_sibling ? 0 : GTK_CSS_CHANGE_FIRST_CHILD) | (node->next_sibling ? 0 : GTK_CSS_CHANGE_LAST_CHILD)); g_object_unref (node); }