static void swatch_state_flags_changed (GtkWidget *widget, GtkStateFlags previous_state) { GtkColorSwatch *swatch = GTK_COLOR_SWATCH (widget); gtk_css_node_set_state (gtk_css_gadget_get_node (swatch->priv->gadget), gtk_widget_get_state_flags (widget)); gtk_css_node_set_state (gtk_css_gadget_get_node (swatch->priv->overlay_gadget), gtk_widget_get_state_flags (widget)); GTK_WIDGET_CLASS (gtk_color_swatch_parent_class)->state_flags_changed (widget, previous_state); }
static void gtk_color_swatch_init (GtkColorSwatch *swatch) { GtkCssNode *widget_node; GtkStyleContext *context; swatch->priv = gtk_color_swatch_get_instance_private (swatch); swatch->priv->use_alpha = TRUE; swatch->priv->selectable = TRUE; swatch->priv->has_menu = TRUE; gtk_widget_set_can_focus (GTK_WIDGET (swatch), TRUE); gtk_widget_set_has_window (GTK_WIDGET (swatch), FALSE); swatch->priv->long_press_gesture = gtk_gesture_long_press_new (GTK_WIDGET (swatch)); gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (swatch->priv->long_press_gesture), TRUE); g_signal_connect (swatch->priv->long_press_gesture, "pressed", G_CALLBACK (hold_action), swatch); swatch->priv->multipress_gesture = gtk_gesture_multi_press_new (GTK_WIDGET (swatch)); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (swatch->priv->multipress_gesture), 0); g_signal_connect (swatch->priv->multipress_gesture, "pressed", G_CALLBACK (tap_action), swatch); widget_node = gtk_widget_get_css_node (GTK_WIDGET (swatch)); swatch->priv->overlay_node = gtk_css_node_new (); gtk_css_node_set_name (swatch->priv->overlay_node, I_("overlay")); gtk_css_node_set_parent (swatch->priv->overlay_node, widget_node); gtk_css_node_set_state (swatch->priv->overlay_node, gtk_css_node_get_state (widget_node)); g_object_unref (swatch->priv->overlay_node); context = gtk_widget_get_style_context (GTK_WIDGET (swatch)); gtk_style_context_add_class (context, "activatable"); }
static void gtk_css_node_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { GtkCssNode *cssnode = GTK_CSS_NODE (object); switch (property_id) { case PROP_CLASSES: gtk_css_node_set_classes (cssnode, g_value_get_boxed (value)); break; case PROP_ID: gtk_css_node_set_id (cssnode, g_value_get_string (value)); break; case PROP_STATE: gtk_css_node_set_state (cssnode, g_value_get_flags (value)); break; case PROP_VISIBLE: gtk_css_node_set_visible (cssnode, g_value_get_boolean (value)); break; case PROP_WIDGET_TYPE: gtk_css_node_set_widget_type (cssnode, g_value_get_gtype (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } }
static void swatch_state_flags_changed (GtkWidget *widget, GtkStateFlags previous_state) { GtkColorSwatch *swatch = GTK_COLOR_SWATCH (widget); gtk_css_node_set_state (swatch->priv->overlay_node, gtk_widget_get_state_flags (widget)); }
static void update_node_state (GtkCheckMenuItem *check_menu_item) { GtkCheckMenuItemPrivate *priv = check_menu_item->priv; GtkStateFlags state; state = gtk_widget_get_state_flags (GTK_WIDGET (check_menu_item)); if (priv->inconsistent) state |= GTK_STATE_FLAG_INCONSISTENT; if (priv->active) state |= GTK_STATE_FLAG_CHECKED; gtk_css_node_set_state (priv->indicator_node, state); }
static void gtk_check_menu_item_init (GtkCheckMenuItem *check_menu_item) { GtkCheckMenuItemPrivate *priv; GtkCssNode *widget_node; priv = check_menu_item->priv = gtk_check_menu_item_get_instance_private (check_menu_item); priv->active = FALSE; widget_node = gtk_widget_get_css_node (GTK_WIDGET (check_menu_item)); priv->indicator_node = gtk_css_node_new (); gtk_css_node_set_name (priv->indicator_node, I_("check")); gtk_css_node_set_parent (priv->indicator_node, widget_node); gtk_css_node_set_state (priv->indicator_node, gtk_css_node_get_state (widget_node)); g_signal_connect_object (priv->indicator_node, "style-changed", G_CALLBACK (node_style_changed_cb), check_menu_item, 0); g_object_unref (priv->indicator_node); }