static void gtk_switch_init (GtkSwitch *self) { GtkGesture *gesture; self->priv = gtk_switch_get_instance_private (self); self->priv->use_action_appearance = TRUE; gtk_widget_set_has_window (GTK_WIDGET (self), FALSE); gtk_widget_set_can_focus (GTK_WIDGET (self), TRUE); 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); self->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); self->priv->pan_gesture = gesture; }
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 gstyle_color_widget_init (GstyleColorWidget *self) { GtkStyleContext *context; GtkWidget *widget = GTK_WIDGET (self); gtk_widget_set_has_window (GTK_WIDGET (self), TRUE); self->label = GTK_LABEL (g_object_new (GTK_TYPE_LABEL, "ellipsize", PANGO_ELLIPSIZE_END, "visible", TRUE, "halign", GTK_ALIGN_CENTER, "valign", GTK_ALIGN_CENTER, NULL)); gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->label)); self->is_name_visible = TRUE; self->is_fallback_name_visible = TRUE; self->fallback_name_kind = GSTYLE_COLOR_KIND_RGB_HEX6; self->checkered_pattern = gstyle_utils_get_checkered_pattern (); gtk_widget_set_valign (widget, GTK_ALIGN_FILL); gtk_widget_set_halign (widget, GTK_ALIGN_FILL); gtk_widget_set_hexpand (widget, TRUE); gtk_widget_set_vexpand (widget, TRUE); context = gtk_widget_get_style_context (GTK_WIDGET (self)); self->default_provider = gstyle_css_provider_init_default (gtk_style_context_get_screen (context)); self->target_list = gtk_target_list_new (dnd_targets, G_N_ELEMENTS (dnd_targets)); gtk_target_list_add_text_targets (self->target_list, 0); gtk_drag_dest_set (widget, 0, NULL, 0, GDK_ACTION_MOVE); gtk_drag_dest_set_target_list (widget, self->target_list); gtk_drag_dest_set_track_motion (GTK_WIDGET (self), TRUE); update_container_parent_informations (self); self->multipress_gesture = gtk_gesture_multi_press_new (widget); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (self->multipress_gesture), 0); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (self->multipress_gesture), GTK_PHASE_BUBBLE); g_signal_connect (self->multipress_gesture, "pressed", G_CALLBACK (gstyle_color_widget_multipress_gesture_pressed), widget); self->drag_gesture = gtk_gesture_drag_new (GTK_WIDGET (self)); g_signal_connect (self->drag_gesture, "drag-update", G_CALLBACK (gstyle_color_widget_drag_gesture_update), self); g_signal_connect_swapped (self, "key-press-event", G_CALLBACK (gstyle_color_widget_key_pressed_cb), self); gstyle_color_widget_actions_init (self); gtk_widget_set_can_focus (GTK_WIDGET (self), TRUE); }
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 void gtk_app_chooser_widget_init (GtkAppChooserWidget *self) { GtkTreeSelection *selection; GtkTreeModel *sort; GtkGesture *gesture; self->priv = gtk_app_chooser_widget_get_instance_private (self); gtk_widget_set_has_surface (GTK_WIDGET (self), FALSE); gtk_widget_init_template (GTK_WIDGET (self)); /* Various parts of the GtkTreeView code need custom code to setup, mostly * because we lack signals to connect to, or properties to set. */ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self->priv->program_list)); gtk_tree_selection_set_select_function (selection, gtk_app_chooser_selection_func, self, NULL); sort = gtk_tree_view_get_model (GTK_TREE_VIEW (self->priv->program_list)); gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort), COLUMN_NAME, GTK_SORT_ASCENDING); gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (sort), COLUMN_NAME, gtk_app_chooser_sort_func, self, NULL); gtk_tree_view_set_search_column (GTK_TREE_VIEW (self->priv->program_list), COLUMN_NAME); gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW (self->priv->program_list), gtk_app_chooser_search_equal_func, NULL, NULL); gtk_tree_view_column_set_cell_data_func (self->priv->column, self->priv->secondary_padding, padding_cell_renderer_func, NULL, NULL); self->priv->monitor = g_app_info_monitor_get (); g_signal_connect (self->priv->monitor, "changed", G_CALLBACK (app_info_changed), self); gesture = gtk_gesture_multi_press_new (); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), GDK_BUTTON_SECONDARY); g_signal_connect (gesture, "pressed", G_CALLBACK (gtk_app_chooser_row_pressed_cb), self); gtk_widget_add_controller (self->priv->program_list, GTK_EVENT_CONTROLLER (gesture)); }
static void gtk_color_swatch_init (GtkColorSwatch *swatch) { 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); }
static void gtk_im_context_wayland_set_client_window (GtkIMContext *context, GdkWindow *window) { GtkIMContextWayland *context_wayland = GTK_IM_CONTEXT_WAYLAND (context); GtkWidget *widget = NULL; if (window == context_wayland->window) return; if (window) gdk_window_get_user_data (window, (gpointer*) &widget); if (context_wayland->widget && context_wayland->widget != widget) g_clear_object (&context_wayland->gesture); g_set_object (&context_wayland->window, window); if (context_wayland->widget != widget) { context_wayland->widget = widget; if (widget) { GtkGesture *gesture; gesture = gtk_gesture_multi_press_new (widget); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture), GTK_PHASE_CAPTURE); g_signal_connect (gesture, "pressed", G_CALLBACK (pressed_cb), context); g_signal_connect (gesture, "released", G_CALLBACK (released_cb), context); context_wayland->gesture = gesture; } } }
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); }
/* Set up the property editors in the dialog. */ static void setup_dialog (CcMousePropertiesPrivate *d) { GtkWidget *button; d->left_handed = g_settings_get_boolean (d->mouse_settings, "left-handed"); button = WID (d->left_handed ? "primary-button-right" : "primary-button-left"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); g_settings_bind (d->mouse_settings, "left-handed", WID ("primary-button-left"), "active", G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_INVERT_BOOLEAN); g_settings_bind (d->mouse_settings, "left-handed", WID ("primary-button-right"), "active", G_SETTINGS_BIND_DEFAULT); /* Allow changing orientation with either button */ button = WID ("primary-button-right"); d->right_gesture = gtk_gesture_multi_press_new (button); handle_secondary_button (d, button, d->right_gesture); button = WID ("primary-button-left"); d->left_gesture = gtk_gesture_multi_press_new (button); handle_secondary_button (d, button, d->left_gesture); g_settings_bind (d->mouse_settings, "natural-scroll", WID ("mouse-natural-scrolling-switch"), "active", G_SETTINGS_BIND_DEFAULT); gtk_list_box_set_header_func (GTK_LIST_BOX (WID ("general-listbox")), cc_list_box_update_header_func, NULL, NULL); gtk_list_box_set_header_func (GTK_LIST_BOX (WID ("touchpad-listbox")), cc_list_box_update_header_func, NULL, NULL); /* Mouse section */ gtk_widget_set_visible (WID ("mouse-frame"), d->have_mouse); g_settings_bind (d->mouse_settings, "speed", gtk_range_get_adjustment (GTK_RANGE (WID ("mouse-speed-scale"))), "value", G_SETTINGS_BIND_DEFAULT); gtk_list_box_set_header_func (GTK_LIST_BOX (WID ("mouse-listbox")), cc_list_box_update_header_func, NULL, NULL); /* Touchpad section */ gtk_widget_set_visible (WID ("touchpad-toggle-switch"), show_touchpad_enabling_switch (d)); g_settings_bind_with_mapping (d->touchpad_settings, "send-events", WID ("touchpad-toggle-switch"), "active", G_SETTINGS_BIND_DEFAULT, touchpad_enabled_get_mapping, touchpad_enabled_set_mapping, NULL, NULL); g_settings_bind_with_mapping (d->touchpad_settings, "send-events", WID ("touchpad-options-listbox"), "sensitive", G_SETTINGS_BIND_GET, touchpad_enabled_get_mapping, touchpad_enabled_set_mapping, NULL, NULL); g_settings_bind (d->touchpad_settings, "natural-scroll", WID ("touchpad-natural-scrolling-switch"), "active", G_SETTINGS_BIND_DEFAULT); g_settings_bind (d->touchpad_settings, "speed", gtk_range_get_adjustment (GTK_RANGE (WID ("touchpad-speed-scale"))), "value", G_SETTINGS_BIND_DEFAULT); g_settings_bind (d->touchpad_settings, "tap-to-click", WID ("tap-to-click-switch"), "active", G_SETTINGS_BIND_DEFAULT); setup_touchpad_options (d); g_signal_connect (WID ("edge-scrolling-switch"), "state-set", G_CALLBACK (edge_scrolling_changed_event), d); g_signal_connect (WID ("two-finger-scrolling-switch"), "state-set", G_CALLBACK (two_finger_scrolling_changed_event), d); gtk_list_box_set_header_func (GTK_LIST_BOX (WID ("touchpad-options-listbox")), cc_list_box_update_header_func, NULL, NULL); }
static void photos_preview_nav_buttons_constructed (GObject *object) { PhotosPreviewNavButtons *self = PHOTOS_PREVIEW_NAV_BUTTONS (object); GtkStyleContext *context; GtkWidget *button; GtkWidget *image; G_OBJECT_CLASS (photos_preview_nav_buttons_parent_class)->constructed (object); self->prev_widget = g_object_ref_sink (gtk_revealer_new ()); gtk_widget_set_halign (self->prev_widget, GTK_ALIGN_START); gtk_widget_set_margin_start (self->prev_widget, 30); gtk_widget_set_margin_end (self->prev_widget, 30); gtk_widget_set_valign (self->prev_widget, GTK_ALIGN_CENTER); gtk_revealer_set_transition_type (GTK_REVEALER (self->prev_widget), GTK_REVEALER_TRANSITION_TYPE_CROSSFADE); gtk_overlay_add_overlay (GTK_OVERLAY (self->overlay), self->prev_widget); image = gtk_image_new_from_icon_name (PHOTOS_ICON_GO_PREVIOUS_SYMBOLIC, GTK_ICON_SIZE_INVALID); gtk_image_set_pixel_size (GTK_IMAGE (image), 16); button = gtk_button_new (); gtk_button_set_image (GTK_BUTTON (button), image); gtk_actionable_set_action_name (GTK_ACTIONABLE (button), "app.load-previous"); context = gtk_widget_get_style_context (button); gtk_style_context_add_class (context, "osd"); gtk_container_add (GTK_CONTAINER (self->prev_widget), button); g_signal_connect_swapped (button, "enter-notify-event", G_CALLBACK (photos_preview_nav_buttons_enter_notify), self); g_signal_connect_swapped (button, "leave-notify-event", G_CALLBACK (photos_preview_nav_buttons_leave_notify), self); self->next_widget = g_object_ref_sink (gtk_revealer_new ()); gtk_widget_set_halign (self->next_widget, GTK_ALIGN_END); gtk_widget_set_margin_start (self->next_widget, 30); gtk_widget_set_margin_end (self->next_widget, 30); gtk_widget_set_valign (self->next_widget, GTK_ALIGN_CENTER); gtk_revealer_set_transition_type (GTK_REVEALER (self->next_widget), GTK_REVEALER_TRANSITION_TYPE_CROSSFADE); gtk_overlay_add_overlay (GTK_OVERLAY (self->overlay), self->next_widget); image = gtk_image_new_from_icon_name (PHOTOS_ICON_GO_NEXT_SYMBOLIC, GTK_ICON_SIZE_INVALID); gtk_image_set_pixel_size (GTK_IMAGE (image), 16); button = gtk_button_new (); gtk_button_set_image (GTK_BUTTON (button), image); gtk_actionable_set_action_name (GTK_ACTIONABLE (button), "app.load-next"); context = gtk_widget_get_style_context (button); gtk_style_context_add_class (context, "osd"); gtk_container_add (GTK_CONTAINER (self->next_widget), button); g_signal_connect_swapped (button, "enter-notify-event", G_CALLBACK (photos_preview_nav_buttons_enter_notify), self); g_signal_connect_swapped (button, "leave-notify-event", G_CALLBACK (photos_preview_nav_buttons_leave_notify), self); g_signal_connect_swapped (self->overlay, "motion-notify-event", G_CALLBACK (photos_preview_nav_buttons_motion_notify), self); self->tap_gesture = gtk_gesture_multi_press_new (self->preview_view); gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (self->tap_gesture), TRUE); g_signal_connect_swapped (self->tap_gesture, "released", G_CALLBACK (photos_preview_nav_buttons_multi_press_released), self); g_signal_connect_swapped (self->tap_gesture, "stopped", G_CALLBACK (photos_preview_nav_buttons_multi_press_stopped), self); /* We will not need them any more */ self->overlay = NULL; self->preview_view = NULL; }
GtkWidget * do_clipboard (GtkWidget *do_widget) { if (!window) { GtkWidget *vbox, *hbox; GtkWidget *label; GtkWidget *entry, *button; GtkWidget *image; GtkGesture *gesture; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget)); gtk_window_set_title (GTK_WINDOW (window), "Clipboard"); g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); g_object_set (vbox, "margin", 8, NULL); gtk_container_add (GTK_CONTAINER (window), vbox); label = gtk_label_new ("\"Copy\" will copy the text\nin the entry to the clipboard"); gtk_container_add (GTK_CONTAINER (vbox), label); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); g_object_set (hbox, "margin", 8, NULL); gtk_container_add (GTK_CONTAINER (vbox), hbox); /* Create the first entry */ entry = gtk_entry_new (); gtk_container_add (GTK_CONTAINER (hbox), entry); /* Create the button */ button = gtk_button_new_with_mnemonic (_("_Copy")); gtk_container_add (GTK_CONTAINER (hbox), button); g_signal_connect (button, "clicked", G_CALLBACK (copy_button_clicked), entry); label = gtk_label_new ("\"Paste\" will paste the text from the clipboard to the entry"); gtk_container_add (GTK_CONTAINER (vbox), label); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); g_object_set (hbox, "margin", 8, NULL); gtk_container_add (GTK_CONTAINER (vbox), hbox); /* Create the second entry */ entry = gtk_entry_new (); gtk_container_add (GTK_CONTAINER (hbox), entry); /* Create the button */ button = gtk_button_new_with_mnemonic (_("_Paste")); gtk_container_add (GTK_CONTAINER (hbox), button); g_signal_connect (button, "clicked", G_CALLBACK (paste_button_clicked), entry); label = gtk_label_new ("Images can be transferred via the clipboard, too"); gtk_container_add (GTK_CONTAINER (vbox), label); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); g_object_set (hbox, "margin", 8, NULL); gtk_container_add (GTK_CONTAINER (vbox), hbox); /* Create the first image */ image = gtk_image_new_from_icon_name ("dialog-warning"); gtk_container_add (GTK_CONTAINER (hbox), image); /* make image a drag source */ gtk_drag_source_set (image, GDK_BUTTON1_MASK, NULL, GDK_ACTION_COPY); gtk_drag_source_add_image_targets (image); g_signal_connect (image, "drag-begin", G_CALLBACK (drag_begin), image); g_signal_connect (image, "drag-data-get", G_CALLBACK (drag_data_get), image); /* accept drops on image */ gtk_drag_dest_set (image, GTK_DEST_DEFAULT_ALL, NULL, GDK_ACTION_COPY); gtk_drag_dest_add_image_targets (image); g_signal_connect (image, "drag-data-received", G_CALLBACK (drag_data_received), image); /* context menu on image */ gesture = gtk_gesture_multi_press_new (); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), GDK_BUTTON_SECONDARY); g_signal_connect (gesture, "pressed", G_CALLBACK (pressed_cb), image); gtk_widget_add_controller (image, GTK_EVENT_CONTROLLER (gesture)); /* Create the second image */ image = gtk_image_new_from_icon_name ("process-stop"); gtk_container_add (GTK_CONTAINER (hbox), image); /* make image a drag source */ gtk_drag_source_set (image, GDK_BUTTON1_MASK, NULL, GDK_ACTION_COPY); gtk_drag_source_add_image_targets (image); g_signal_connect (image, "drag-begin", G_CALLBACK (drag_begin), image); g_signal_connect (image, "drag-data-get", G_CALLBACK (drag_data_get), image); /* accept drops on image */ gtk_drag_dest_set (image, GTK_DEST_DEFAULT_ALL, NULL, GDK_ACTION_COPY); gtk_drag_dest_add_image_targets (image); g_signal_connect (image, "drag-data-received", G_CALLBACK (drag_data_received), image); /* context menu on image */ gesture = gtk_gesture_multi_press_new (); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), GDK_BUTTON_SECONDARY); g_signal_connect (gesture, "pressed", G_CALLBACK (pressed_cb), image); gtk_widget_add_controller (image, GTK_EVENT_CONTROLLER (gesture)); } if (!gtk_widget_get_visible (window)) gtk_widget_show (window); else gtk_widget_destroy (window); return window; }
static void ide_omni_bar_init (IdeOmniBar *self) { gtk_widget_init_template (GTK_WIDGET (self)); G_GNUC_BEGIN_IGNORE_DEPRECATIONS; gtk_container_set_reallocate_redraws (GTK_CONTAINER (self), TRUE); G_GNUC_END_IGNORE_DEPRECATIONS; gtk_widget_set_direction (GTK_WIDGET (self->branch_box), GTK_TEXT_DIR_LTR); g_signal_connect_object (self->build_button, "query-tooltip", G_CALLBACK (ide_omni_bar__build_button__query_tooltip), self, G_CONNECT_SWAPPED); /* * IdeBuildManager bindings and signals. */ self->build_manager_bindings = dzl_binding_group_new (); dzl_binding_group_bind (self->build_manager_bindings, "busy", self->cancel_button, "visible", G_BINDING_SYNC_CREATE); dzl_binding_group_bind (self->build_manager_bindings, "busy", self->build_button, "visible", G_BINDING_SYNC_CREATE | G_BINDING_INVERT_BOOLEAN); dzl_binding_group_bind (self->build_manager_bindings, "has-diagnostics", self->build_result_diagnostics_image, "visible", G_BINDING_SYNC_CREATE); dzl_binding_group_bind (self->build_manager_bindings, "error-count", self->popover_errors_label, "label", G_BINDING_SYNC_CREATE); dzl_binding_group_bind (self->build_manager_bindings, "warning-count", self->popover_warnings_label, "label", G_BINDING_SYNC_CREATE); dzl_binding_group_bind_full (self->build_manager_bindings, "last-build-time", self->popover_last_build_time_label, "label", G_BINDING_SYNC_CREATE, date_time_to_label, NULL, NULL, NULL); self->build_manager_signals = dzl_signal_group_new (IDE_TYPE_BUILD_MANAGER); dzl_signal_group_connect_object (self->build_manager_signals, "build-started", G_CALLBACK (ide_omni_bar__build_manager__build_started), self, G_CONNECT_SWAPPED); dzl_signal_group_connect_object (self->build_manager_signals, "build-failed", G_CALLBACK (ide_omni_bar__build_manager__build_failed), self, G_CONNECT_SWAPPED); dzl_signal_group_connect_object (self->build_manager_signals, "build-finished", G_CALLBACK (ide_omni_bar__build_manager__build_finished), self, G_CONNECT_SWAPPED); /* * Project bindings. */ self->project_bindings = dzl_binding_group_new (); dzl_binding_group_bind (self->project_bindings, "name", self->popover_project_label, "label", G_BINDING_SYNC_CREATE); /* * IdeVcs bindings and signals. */ self->vcs_bindings = dzl_binding_group_new (); dzl_binding_group_bind (self->vcs_bindings, "branch-name", self->branch_label, "label", G_BINDING_SYNC_CREATE); dzl_binding_group_bind (self->vcs_bindings, "branch-name", self->popover_branch_label, "label", G_BINDING_SYNC_CREATE); /* * IdeConfigurationManager bindings and signals. */ self->config_manager_bindings = dzl_binding_group_new (); dzl_binding_group_bind (self->config_manager_bindings, "current-display-name", self->config_name_label, "label", G_BINDING_SYNC_CREATE); self->config_manager_signals = dzl_signal_group_new (IDE_TYPE_CONFIGURATION_MANAGER); dzl_signal_group_connect_object (self->config_manager_signals, "notify::current", G_CALLBACK (ide_omni_bar__config_manager__notify_current), self, G_CONNECT_SWAPPED); /* * Enable various events for state tracking. */ gtk_widget_add_events (GTK_WIDGET (self->event_box), GDK_BUTTON_PRESS_MASK); g_signal_connect_object (self->event_box, "enter-notify-event", G_CALLBACK (event_box_enter_notify), self, G_CONNECT_SWAPPED); g_signal_connect_object (self->event_box, "leave-notify-event", G_CALLBACK (event_box_leave_notify), self, G_CONNECT_SWAPPED); g_signal_connect_object (self->popover, "closed", G_CALLBACK (ide_omni_bar_popover_closed), self, G_CONNECT_SWAPPED); self->gesture = gtk_gesture_multi_press_new (GTK_WIDGET (self->event_box)); g_signal_connect (self->gesture, "pressed", G_CALLBACK (multipress_pressed_cb), self); /* * Register to be notified of IdeWorkbench:context set. */ ide_widget_set_context_handler (self, ide_omni_bar_context_set); }