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_check_menu_item_direction_changed (GtkWidget *widget, GtkTextDirection previous_dir) { GtkCheckMenuItem *check_menu_item = GTK_CHECK_MENU_ITEM (widget); GtkCheckMenuItemPrivate *priv = check_menu_item->priv; GtkCssNode *widget_node, *node; widget_node = gtk_widget_get_css_node (widget); if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) { gtk_css_node_remove_class (priv->indicator_node, g_quark_from_static_string (GTK_STYLE_CLASS_LEFT)); gtk_css_node_add_class (priv->indicator_node, g_quark_from_static_string (GTK_STYLE_CLASS_RIGHT)); node = gtk_css_node_get_last_child (widget_node); if (node != priv->indicator_node) gtk_css_node_insert_after (widget_node, priv->indicator_node, node); } else { gtk_css_node_add_class (priv->indicator_node, g_quark_from_static_string (GTK_STYLE_CLASS_LEFT)); gtk_css_node_remove_class (priv->indicator_node, g_quark_from_static_string (GTK_STYLE_CLASS_RIGHT)); node = gtk_css_node_get_first_child (widget_node); if (node != priv->indicator_node) gtk_css_node_insert_before (widget_node, priv->indicator_node, node); } GTK_WIDGET_CLASS (gtk_check_menu_item_parent_class)->direction_changed (widget, previous_dir); }
static void gtk_switch_init (GtkSwitch *self) { GtkSwitchPrivate *priv; GtkGesture *gesture; GtkCssNode *widget_node; priv = self->priv = gtk_switch_get_instance_private (self); gtk_widget_set_has_window (GTK_WIDGET (self), FALSE); gtk_widget_set_can_focus (GTK_WIDGET (self), TRUE); widget_node = gtk_widget_get_css_node (GTK_WIDGET (self)); priv->gadget = gtk_css_custom_gadget_new_for_node (widget_node, GTK_WIDGET (self), gtk_switch_get_content_size, gtk_switch_allocate_contents, gtk_switch_snapshot_trough, NULL, NULL); priv->slider_gadget = gtk_css_custom_gadget_new ("slider", GTK_WIDGET (self), priv->gadget, NULL, NULL, NULL, gtk_switch_snapshot_slider, NULL, NULL); gesture = gtk_gesture_multi_press_new (GTK_WIDGET (self)); gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (gesture), FALSE); gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (gesture), TRUE); g_signal_connect (gesture, "pressed", G_CALLBACK (gtk_switch_multipress_gesture_pressed), self); g_signal_connect (gesture, "released", G_CALLBACK (gtk_switch_multipress_gesture_released), self); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture), GTK_PHASE_BUBBLE); priv->multipress_gesture = gesture; gesture = gtk_gesture_pan_new (GTK_WIDGET (self), GTK_ORIENTATION_HORIZONTAL); gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (gesture), FALSE); gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (gesture), TRUE); g_signal_connect (gesture, "pan", G_CALLBACK (gtk_switch_pan_gesture_pan), self); g_signal_connect (gesture, "drag-end", G_CALLBACK (gtk_switch_pan_gesture_drag_end), self); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture), GTK_PHASE_BUBBLE); priv->pan_gesture = gesture; gtk_switch_create_pango_layouts (self); }
static GtkWidget * _gtk_text_handle_ensure_widget (GtkTextHandle *handle, GtkTextHandlePosition pos) { GtkTextHandlePrivate *priv; priv = handle->priv; if (!priv->windows[pos].widget) { GtkWidget *widget, *window; GtkStyleContext *context; widget = gtk_event_box_new (); gtk_event_box_set_visible_window (GTK_EVENT_BOX (widget), TRUE); gtk_widget_set_events (widget, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_POINTER_MOTION_MASK); gtk_widget_set_direction (widget, priv->windows[pos].dir); g_signal_connect (widget, "draw", G_CALLBACK (gtk_text_handle_widget_draw), handle); g_signal_connect (widget, "event", G_CALLBACK (gtk_text_handle_widget_event), handle); g_signal_connect (widget, "style-updated", G_CALLBACK (gtk_text_handle_widget_style_updated), handle); priv->windows[pos].widget = g_object_ref_sink (widget); window = gtk_widget_get_ancestor (priv->parent, GTK_TYPE_WINDOW); _gtk_window_add_popover (GTK_WINDOW (window), widget, priv->parent, FALSE); context = gtk_widget_get_style_context (widget); gtk_style_context_set_parent (context, gtk_widget_get_style_context (priv->parent)); gtk_css_node_set_name (gtk_widget_get_css_node (widget), I_("cursor-handle")); if (pos == GTK_TEXT_HANDLE_POSITION_SELECTION_END) { gtk_style_context_add_class (context, GTK_STYLE_CLASS_BOTTOM); if (priv->mode == GTK_TEXT_HANDLE_MODE_CURSOR) gtk_style_context_add_class (context, GTK_STYLE_CLASS_INSERTION_CURSOR); } else gtk_style_context_add_class (context, GTK_STYLE_CLASS_TOP); } return priv->windows[pos].widget; }
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); }
static void gtk_button_init (GtkButton *button) { GtkButtonPrivate *priv; button->priv = gtk_button_get_instance_private (button); priv = button->priv; gtk_widget_set_can_focus (GTK_WIDGET (button), TRUE); gtk_widget_set_receives_default (GTK_WIDGET (button), TRUE); gtk_widget_set_has_window (GTK_WIDGET (button), FALSE); priv->in_button = FALSE; priv->button_down = FALSE; priv->use_underline = FALSE; priv->child_type = WIDGET_CHILD; priv->gesture = gtk_gesture_multi_press_new (GTK_WIDGET (button)); gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (priv->gesture), FALSE); gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (priv->gesture), TRUE); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (priv->gesture), GDK_BUTTON_PRIMARY); g_signal_connect (priv->gesture, "pressed", G_CALLBACK (multipress_pressed_cb), button); g_signal_connect (priv->gesture, "released", G_CALLBACK (multipress_released_cb), button); g_signal_connect (priv->gesture, "update", G_CALLBACK (multipress_gesture_update_cb), button); g_signal_connect (priv->gesture, "cancel", G_CALLBACK (multipress_gesture_cancel_cb), button); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (priv->gesture), GTK_PHASE_BUBBLE); priv->gadget = gtk_css_custom_gadget_new_for_node (gtk_widget_get_css_node (GTK_WIDGET (button)), GTK_WIDGET (button), gtk_button_measure, gtk_button_allocate, gtk_button_render, NULL, NULL); }