static void gstyle_color_widget_actions_rename (GSimpleAction *action, GVariant *variant, gpointer user_data) { GstyleColorWidget *self = (GstyleColorWidget *)user_data; GtkWidget *popover; GstyleColor *color; const gchar *name; g_assert (GSTYLE_IS_COLOR_WIDGET (self)); g_assert (G_IS_SIMPLE_ACTION (action)); color = gstyle_color_widget_get_color (self); name = gstyle_color_get_name (color); popover = g_object_new (GSTYLE_TYPE_RENAME_POPOVER, "label", _("Color name"), "name", name, "message", _("Enter a new name for the color"), NULL); gtk_popover_set_relative_to (GTK_POPOVER (popover), GTK_WIDGET (self)); g_signal_connect_swapped (popover, "closed", G_CALLBACK (contextual_popover_closed_cb), self); g_signal_connect_swapped (popover, "renamed", G_CALLBACK (rename_popover_entry_renamed_cb), self); gtk_popover_popup (GTK_POPOVER (popover)); }
static void update_popover_direction (GtkMenuButton *menu_button) { GtkMenuButtonPrivate *priv = menu_button->priv; if (!priv->popover) return; switch (priv->arrow_type) { case GTK_ARROW_UP: gtk_popover_set_position (GTK_POPOVER (priv->popover), GTK_POS_TOP); break; case GTK_ARROW_DOWN: case GTK_ARROW_NONE: gtk_popover_set_position (GTK_POPOVER (priv->popover), GTK_POS_BOTTOM); break; case GTK_ARROW_LEFT: gtk_popover_set_position (GTK_POPOVER (priv->popover), GTK_POS_LEFT); break; case GTK_ARROW_RIGHT: gtk_popover_set_position (GTK_POPOVER (priv->popover), GTK_POS_RIGHT); break; } }
static gboolean navigator_button_release_cb (GcalYearView *year_view, GdkEventButton *event, GtkWidget *widget) { GcalYearViewPrivate *priv = year_view->priv; gint day, month; if (!priv->button_pressed) return FALSE; if (!calculate_day_month_for_coord (year_view, event->x, event->y, &day, &month)) goto fail; priv->button_pressed = FALSE; priv->selected_data->end_day = day; priv->selected_data->end_month = month; /* update date and notify */ priv->date->day = day; priv->date->month = month + 1; g_object_notify (G_OBJECT (year_view), "active-date"); gtk_widget_queue_draw (widget); if (priv->popover_mode) { GdkRectangle rect; GtkWidget *box; /* sizing */ box = gtk_bin_get_child (GTK_BIN (priv->popover)); gtk_widget_set_size_request (box, 200, priv->navigator_grid->box_side * 2 * 7); /* FIXME: improve rect */ rect.x = event->x; rect.y = event->y; rect.width = rect.height = 1; gtk_popover_set_pointing_to (GTK_POPOVER (priv->popover), &rect); /* FIXME: do no show over selected days */ gtk_popover_set_position (GTK_POPOVER (priv->popover), GTK_POS_RIGHT); gtk_widget_show (priv->popover); } update_sidebar (year_view); return TRUE; fail: priv->button_pressed = FALSE; reset_sidebar (year_view); return TRUE; }
static void gb_color_picker_prefs_palette_row_init (GbColorPickerPrefsPaletteRow *self) { GtkBuilder *builder; GtkWidget *button_rename; GtkWidget *button_remove; gtk_widget_init_template (GTK_WIDGET (self)); gtk_widget_add_events (self->event_box, GDK_KEY_PRESS_MASK); g_signal_connect_swapped (self->event_box, "button-press-event", G_CALLBACK (event_box_button_pressed_cb), self); builder = gtk_builder_new_from_resource ("/org/gnome/builder/plugins/color-picker-plugin/gtk/color-picker-palette-menu.ui"); self->popover_menu = GTK_WIDGET (g_object_ref_sink (gtk_builder_get_object (builder, "popover"))); button_rename = GTK_WIDGET (gtk_builder_get_object (builder, "button_rename")); g_signal_connect_object (button_rename, "button-release-event", G_CALLBACK (popover_button_rename_clicked_cb), self, G_CONNECT_SWAPPED); button_remove = GTK_WIDGET (gtk_builder_get_object (builder, "button_remove")); g_signal_connect_object (button_remove, "button-release-event", G_CALLBACK (popover_button_remove_clicked_cb), self, G_CONNECT_SWAPPED); gtk_popover_set_relative_to (GTK_POPOVER (self->popover_menu), GTK_WIDGET (self)); g_object_unref (builder); }
static void day_selected_cb (GtkCalendar *calendar, gpointer user_data) { cairo_rectangle_int_t rect; GtkAllocation allocation; GtkWidget *popover; GdkEvent *event; event = gtk_get_current_event (); if (event->type != GDK_BUTTON_PRESS) return; gdk_window_coords_to_parent (event->button.window, event->button.x, event->button.y, &event->button.x, &event->button.y); gtk_widget_get_allocation (GTK_WIDGET (calendar), &allocation); rect.x = event->button.x - allocation.x; rect.y = event->button.y - allocation.y; rect.width = rect.height = 1; popover = create_popover (GTK_WIDGET (calendar), gtk_entry_new (), GTK_POS_BOTTOM); gtk_popover_set_pointing_to (GTK_POPOVER (popover), &rect); gtk_widget_show (popover); gdk_event_free (event); }
/** * gtk_menu_button_get_popover: * @menu_button: a #GtkMenuButton * * Returns the #GtkPopover that pops out of the button. * If the button is not using a #GtkPopover, this function * returns %NULL. * * Returns: (transfer none): a #GtkPopover or %NULL * * Since: 3.12 */ GtkPopover * gtk_menu_button_get_popover (GtkMenuButton *menu_button) { g_return_val_if_fail (GTK_IS_MENU_BUTTON (menu_button), NULL); return GTK_POPOVER (menu_button->priv->popover); }
static void photos_dropdown_add_manager (PhotosDropdown *self, PhotosBaseManager *mngr) { GMenu *menu; GtkWidget *popover; GtkWidget *w; PhotosBaseModel *model; model = photos_base_model_new (mngr); self->models = g_list_prepend (self->models, g_object_ref (model)); /* HACK: see https://bugzilla.gnome.org/show_bug.cgi?id=733977 */ popover = gtk_popover_new (NULL); menu = photos_base_model_get_model (model); gtk_popover_bind_model (GTK_POPOVER (popover), G_MENU_MODEL (menu), "app"); w = g_object_ref (gtk_bin_get_child (GTK_BIN (popover))); gtk_container_remove (GTK_CONTAINER (popover), w); gtk_container_add (GTK_CONTAINER (self->grid), w); g_object_unref (w); gtk_widget_set_valign (w, GTK_ALIGN_START); gtk_widget_set_vexpand (w, TRUE); gtk_widget_destroy (popover); g_object_unref (model); }
static GtkWidget * create_popover (GtkWidget *child) { GtkBuilder *builder = gtk_builder_new_from_resource ("/org/fsearch/fsearch/popover.ui"); GtkWidget *popover = GTK_WIDGET (gtk_builder_get_object (builder, "DatabasePopover")); gtk_popover_set_relative_to (GTK_POPOVER (popover), child); return popover; }
/** * gtk_menu_button_set_popover: * @menu_button: a #GtkMenuButton * @popover: (allow-none): a #GtkPopover * * Sets the #GtkPopover that will be popped up when the button is * clicked, or %NULL to disable the button. If #GtkMenuButton:menu-model * or #GtkMenuButton:popup are set, they will be set to %NULL. * * Since: 3.12 */ void gtk_menu_button_set_popover (GtkMenuButton *menu_button, GtkWidget *popover) { GtkMenuButtonPrivate *priv = menu_button->priv; g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button)); g_return_if_fail (GTK_IS_POPOVER (popover) || popover == NULL); g_object_freeze_notify (G_OBJECT (menu_button)); g_clear_object (&priv->model); if (priv->popover) { if (gtk_widget_get_visible (priv->popover)) gtk_widget_hide (priv->popover); g_signal_handlers_disconnect_by_func (priv->popover, menu_deactivate_cb, menu_button); gtk_popover_set_relative_to (GTK_POPOVER (priv->popover), NULL); } priv->popover = popover; if (popover) { gtk_popover_set_relative_to (GTK_POPOVER (priv->popover), GTK_WIDGET (menu_button)); g_signal_connect_swapped (priv->popover, "closed", G_CALLBACK (menu_deactivate_cb), menu_button); update_popover_direction (menu_button); gtk_style_context_remove_class (gtk_widget_get_style_context (GTK_WIDGET (menu_button)), "menu-button"); } if (popover && priv->menu) gtk_menu_button_set_popup (menu_button, NULL); update_sensitivity (menu_button); g_object_notify (G_OBJECT (menu_button), "popover"); g_object_notify (G_OBJECT (menu_button), "menu-model"); g_object_thaw_notify (G_OBJECT (menu_button)); }
static GtkWidget * action_ancestor (GtkWidget *widget) { if (GTK_IS_MENU (widget)) return gtk_menu_get_attach_widget (GTK_MENU (widget)); else if (GTK_IS_POPOVER (widget)) return gtk_popover_get_relative_to (GTK_POPOVER (widget)); else return gtk_widget_get_parent (widget); }
static void gb_color_picker_prefs_palette_row_edit (GbColorPickerPrefsPaletteRow *self) { GtkWidget *popover; const gchar *name; g_assert (GB_IS_COLOR_PICKER_PREFS_PALETTE_ROW (self)); name = gtk_label_get_text (self->palette_name); popover = g_object_new (GSTYLE_TYPE_RENAME_POPOVER, "label", _("Palette name"), "name", name, "message", _("Enter a new name for the palette"), NULL); gtk_popover_set_relative_to (GTK_POPOVER (popover), GTK_WIDGET (self)); g_signal_connect_swapped (popover, "closed", G_CALLBACK (contextual_popover_closed_cb), self); g_signal_connect_swapped (popover, "renamed", G_CALLBACK (rename_popover_entry_renamed_cb), self); gtk_popover_popup (GTK_POPOVER (popover)); }
GtkWidget * do_popover (GtkWidget *do_widget) { static GtkWidget *window = NULL; GtkWidget *popover, *box, *widget; if (!window) { window = gtk_window_new (GTK_WINDOW_TOPLEVEL); box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 24); gtk_container_set_border_width (GTK_CONTAINER (box), 24); gtk_container_add (GTK_CONTAINER (window), box); g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); widget = gtk_toggle_button_new_with_label ("Button"); popover = create_popover (widget, gtk_label_new ("This popover does not grab input"), GTK_POS_TOP); gtk_popover_set_modal (GTK_POPOVER (popover), FALSE); g_signal_connect (widget, "toggled", G_CALLBACK (toggle_changed_cb), popover); gtk_container_add (GTK_CONTAINER (box), widget); widget = gtk_entry_new (); popover = create_complex_popover (widget, GTK_POS_TOP); gtk_entry_set_icon_from_icon_name (GTK_ENTRY (widget), GTK_ENTRY_ICON_PRIMARY, "edit-find"); gtk_entry_set_icon_from_icon_name (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY, "edit-clear"); g_signal_connect (widget, "icon-press", G_CALLBACK (entry_icon_press_cb), popover); g_signal_connect (widget, "size-allocate", G_CALLBACK (entry_size_allocate_cb), popover); gtk_container_add (GTK_CONTAINER (box), widget); widget = gtk_calendar_new (); g_signal_connect (widget, "day-selected", G_CALLBACK (day_selected_cb), NULL); gtk_container_add (GTK_CONTAINER (box), widget); } if (!gtk_widget_get_visible (window)) gtk_widget_show_all (window); else { gtk_widget_destroy (window); window = NULL; } return window; }
static GtkWidget* setup_popover (VteTerminal *vtterm) { GtkWidget *popover = gtk_popover_new (GTK_WIDGET (vtterm)); g_signal_connect (G_OBJECT (popover), "closed", G_CALLBACK (popover_closed), vtterm); dg_lobj GtkBuilder *builder = gtk_builder_new_from_resource (DWT_GRESOURCE ("menus.xml")); gtk_popover_bind_model (GTK_POPOVER (popover), G_MENU_MODEL (gtk_builder_get_object (builder, "popover-menu")), NULL); return popover; }
static GtkWidget* get_popup (EogZoomEntry *zoom_entry) { GdkRectangle rect; if (zoom_entry->priv->popup) return zoom_entry->priv->popup; zoom_entry->priv->popup = gtk_popover_new_from_model (GTK_WIDGET (zoom_entry), G_MENU_MODEL (zoom_entry->priv->menu)); g_signal_connect (zoom_entry->priv->popup, "closed", G_CALLBACK (popup_menu_closed), zoom_entry); gtk_entry_get_icon_area (GTK_ENTRY (zoom_entry->priv->value_entry), GTK_ENTRY_ICON_SECONDARY, &rect); gtk_popover_set_relative_to (GTK_POPOVER (zoom_entry->priv->popup), zoom_entry->priv->value_entry); gtk_popover_set_pointing_to (GTK_POPOVER (zoom_entry->priv->popup), &rect); gtk_popover_set_position (GTK_POPOVER (zoom_entry->priv->popup), GTK_POS_BOTTOM); gtk_widget_set_size_request (zoom_entry->priv->popup, 150, -1); return zoom_entry->priv->popup; }
static void gb_project_tree_actions__project_rename_file_cb (GObject *object, GAsyncResult *result, gpointer user_data) { IdeProject *project = (IdeProject *)object; g_autoptr(GbRenameFilePopover) popover = user_data; g_autoptr(GError) error = NULL; GbTreeNode *node; GFile *file; GbTree *tree; gboolean expanded = FALSE; g_assert (IDE_IS_PROJECT (project)); g_assert (GB_IS_RENAME_FILE_POPOVER (popover)); if (!ide_project_rename_file_finish (project, result, &error)) { /* todo: display error */ g_warning ("%s", error->message); return; } file = g_object_get_data (G_OBJECT (popover), "G_FILE"); tree = GB_TREE (gtk_popover_get_relative_to (GTK_POPOVER (popover))); g_assert (G_IS_FILE (file)); g_assert (GB_IS_TREE (tree)); if ((node = gb_tree_get_selected (tree))) expanded = gb_tree_node_get_expanded (node); gb_tree_rebuild (tree); node = gb_tree_find_custom (tree, (GEqualFunc)project_item_equal_func, file); if (node != NULL) { gb_tree_node_expand (node, TRUE); if (!expanded) gb_tree_node_collapse (node); gb_tree_node_select (node); gb_tree_scroll_to_node (tree, node); } gtk_widget_hide (GTK_WIDGET (popover)); gtk_widget_destroy (GTK_WIDGET (popover)); }
static void popover_button_rename_clicked_cb (GbColorPickerPrefsPaletteRow *self, GdkEvent *event, GtkButton *button) { g_assert (GB_IS_COLOR_PICKER_PREFS_PALETTE_ROW (self)); g_assert (GTK_IS_BUTTON (button)); self->is_editing = TRUE; g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_IS_EDITING]); gtk_popover_popdown (GTK_POPOVER (self->popover_menu)); g_signal_emit_by_name (self, "edit"); }
static GtkWidget * create_popover (GtkWidget *parent, GtkWidget *child, GtkPositionType pos) { GtkWidget *popover; popover = gtk_popover_new (parent); gtk_popover_set_position (GTK_POPOVER (popover), pos); gtk_container_add (GTK_CONTAINER (popover), child); gtk_container_set_border_width (GTK_CONTAINER (popover), 6); gtk_widget_show (child); return popover; }
static GtkWidget * create_popover (GtkWidget *parent, GtkWidget *child, GtkPositionType pos) { GtkWidget *popover; popover = gtk_popover_new (parent); gtk_popover_set_position (GTK_POPOVER (popover), pos); gtk_container_add (GTK_CONTAINER (popover), child); g_object_set (child, "margin", 6, NULL); gtk_widget_show (child); return popover; }
static void popover_button_remove_clicked_cb (GbColorPickerPrefsPaletteRow *self, GdkEvent *event, GtkButton *button) { const gchar *id; g_assert (GB_IS_COLOR_PICKER_PREFS_PALETTE_ROW (self)); g_assert (event != NULL); g_assert (GTK_IS_BUTTON (button)); id = g_variant_get_string (self->target, NULL); g_signal_emit_by_name (self, "closed", id); gtk_popover_popdown (GTK_POPOVER (self->popover_menu)); }
static void entry_icon_press_cb (GtkEntry *entry, GtkEntryIconPosition icon_pos, GdkEvent *event, gpointer user_data) { GtkWidget *popover = user_data; cairo_rectangle_int_t rect; gtk_entry_get_icon_area (entry, icon_pos, &rect); gtk_popover_set_pointing_to (GTK_POPOVER (popover), &rect); gtk_widget_show (popover); g_object_set_data (G_OBJECT (entry), "popover-icon-pos", GUINT_TO_POINTER (icon_pos)); }
static gboolean event_box_button_pressed_cb (GbColorPickerPrefsPaletteRow *self, GdkEventButton *event, GtkEventBox *event_box) { g_assert (GB_IS_COLOR_PICKER_PREFS_PALETTE_ROW (self)); g_assert (event != NULL); g_assert (GTK_IS_EVENT_BOX (event_box)); if (event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_SECONDARY) { gtk_popover_popup (GTK_POPOVER (self->popover_menu)); return GDK_EVENT_STOP; } return GDK_EVENT_PROPAGATE; }
static void entry_size_allocate_cb (GtkEntry *entry, GtkAllocation *allocation, gpointer user_data) { GtkEntryIconPosition popover_pos; GtkPopover *popover = user_data; cairo_rectangle_int_t rect; if (gtk_widget_is_visible (GTK_WIDGET (popover))) { popover_pos = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (entry), "popover-icon-pos")); gtk_entry_get_icon_area (entry, popover_pos, &rect); gtk_popover_set_pointing_to (GTK_POPOVER (popover), &rect); } }
static void gcal_year_view_size_allocate (GtkWidget *widget, GtkAllocation *alloc) { GcalYearViewPrivate *priv = GCAL_YEAR_VIEW (widget)->priv; GtkStyleContext *context; gint padding_left; context = gtk_widget_get_style_context (widget); gtk_style_context_save (context); gtk_style_context_add_class (context, "year-navigator"); gtk_style_context_get (context, gtk_widget_get_state_flags (widget), "padding-left", &padding_left, NULL); gtk_style_context_restore (context); priv->popover_mode = (alloc->width < NAVIGATOR_CELL_WIDTH * 4 + padding_left * 8 + SIDEBAR_PREFERRED_WIDTH); if (priv->popover_mode && !gtk_widget_is_ancestor (priv->events_sidebar, priv->popover)) { g_object_ref (priv->sidebar); gtk_container_remove (GTK_CONTAINER (widget), priv->sidebar); gtk_container_add (GTK_CONTAINER (priv->popover), priv->sidebar); g_object_unref (priv->sidebar); gtk_widget_show_all (priv->sidebar); popover_closed_cb (GCAL_YEAR_VIEW (widget), GTK_POPOVER (priv->popover)); } else if (!priv->popover_mode && gtk_widget_is_ancestor (priv->events_sidebar, priv->popover)) { g_object_ref (priv->sidebar); gtk_container_remove (GTK_CONTAINER (priv->popover), priv->sidebar); gtk_box_pack_end (GTK_BOX (widget), priv->sidebar, FALSE, TRUE, 0); g_object_unref (priv->sidebar); gtk_widget_show (priv->sidebar); g_signal_handlers_block_by_func (priv->popover, popover_closed_cb, widget); gtk_widget_hide (priv->popover); g_signal_handlers_unblock_by_func (priv->popover, popover_closed_cb, widget); } GTK_WIDGET_CLASS (gcal_year_view_parent_class)->size_allocate (widget, alloc); }
GtkPopover *cast_GtkPopover(GtkWidget* widget) { return GTK_POPOVER(widget); }
static gboolean term_mouse_button_released (VteTerminal *vtterm, GdkEventButton *event, gpointer userdata) { g_free (last_match_text); last_match_text = NULL; glong row = (glong) (event->y) / vte_terminal_get_char_height (vtterm); glong col = (glong) (event->x) / vte_terminal_get_char_width (vtterm); gint match_tag; dg_lmem gchar* match = vte_terminal_match_check (vtterm, col, row, &match_tag); if (match && event->button == 1) { if (CHECK_FLAGS (event->state, GDK_CONTROL_MASK)) { dg_lerr GError *gerror = NULL; if (!gtk_show_uri (NULL, match, event->time, &gerror)) g_printerr ("Could not open URL: %s\n", gerror->message); return FALSE; } else if (g_regex_match (image_regex, match, 0, NULL)) { /* Show picture in a popover */ GdkRectangle rect; rect.height = vte_terminal_get_char_height (vtterm); rect.width = vte_terminal_get_char_width (vtterm); rect.y = rect.height * row; rect.x = rect.width * col; GtkWidget* popover = make_popover_for_image_url (vtterm, match); gtk_popover_set_pointing_to (GTK_POPOVER (popover), &rect); return FALSE; } } if (event->button == 3 && userdata != NULL) { GdkRectangle rect; rect.height = vte_terminal_get_char_height (vtterm); rect.width = vte_terminal_get_char_width (vtterm); rect.y = rect.height * row; rect.x = rect.width * col; gtk_popover_set_pointing_to (GTK_POPOVER (userdata), &rect); GActionMap *actions = G_ACTION_MAP (gtk_widget_get_ancestor (GTK_WIDGET (vtterm), GTK_TYPE_WINDOW)); g_simple_action_set_enabled (G_SIMPLE_ACTION (g_action_map_lookup_action (actions, "copy")), vte_terminal_get_has_selection (vtterm)); g_simple_action_set_enabled (G_SIMPLE_ACTION (g_action_map_lookup_action (actions, "open-url")), match != NULL); g_simple_action_set_enabled (G_SIMPLE_ACTION (g_action_map_lookup_action (actions, "copy-url")), match != NULL); if (match) { last_match_text = match; match = NULL; } gtk_widget_show_all (GTK_WIDGET (userdata)); return TRUE; } return FALSE; }
static void popover_button_clicked_cb (GtkButton *button, gpointer user_data) { GtkWidget *tb; GtkWidget *box; GtkWidget *radio1; GtkWidget *radio2; GtkWidget *radio3; GtkPassedClockSourceData *pdata; GSList *list; config_t config; box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); radio1 = gtk_radio_button_new_with_label (NULL, "Cycle"); radio2 = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (radio1), "Hpet"); radio3 = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (radio1), "System"); list = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio1)); pdata = user_data; if (pdata -> popover == NULL) { pdata -> popover = gtk_popover_new (GTK_WIDGET (button)); while (list) { tb = list -> data; if (g_strcmp0 (gtk_button_get_label (GTK_BUTTON (tb)), get_clocksource (config)) == 0) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tb), TRUE); } list = list -> next; } gtk_box_pack_start (GTK_BOX (box), radio1, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (box), radio2, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (box), radio3, FALSE, FALSE, 2); gtk_container_add (GTK_CONTAINER (pdata -> popover), box); } else { g_print ("Not NULL\n"); } list = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio1)); gtk_popover_set_position (GTK_POPOVER (pdata -> popover), GTK_POS_RIGHT); g_signal_connect (radio1, "notify::active", G_CALLBACK (notify_button_toggled_cb), pdata); g_signal_connect (radio2, "notify::active", G_CALLBACK (notify_button_toggled_cb), pdata); g_signal_connect (radio3, "notify::active", G_CALLBACK (notify_button_toggled_cb), pdata); gtk_widget_show_all (pdata -> popover); }
/* The multi-press gesture used by the flowbox to select a child * forbid us to use dnd so we need to catch it here and select yourself * the child */ static void gstyle_color_widget_multipress_gesture_pressed (GtkGestureMultiPress *gesture, guint n_press, gdouble x, gdouble y, GstyleColorWidget *self) { GtkWidget *container; GtkWidget *child; GtkWidget *popover; GtkBuilder *builder; GtkWidget *button_rename; GtkWidget *button_remove; GtkWidget *ancestor; gint button; button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture)); gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED); child = gtk_widget_get_parent (GTK_WIDGET (self)); if (child != NULL && button == GDK_BUTTON_PRIMARY) { if (GTK_IS_LIST_BOX_ROW (child)) { container = gtk_widget_get_parent (GTK_WIDGET (child)); if (container != NULL && GTK_IS_LIST_BOX (container)) { gtk_list_box_select_row (GTK_LIST_BOX (container), GTK_LIST_BOX_ROW (child)); gtk_widget_grab_focus (GTK_WIDGET (self)); if (n_press == 2) g_signal_emit_by_name (container, "row-activated", child); } } else if (GTK_IS_FLOW_BOX_CHILD (child)) { container = gtk_widget_get_parent (GTK_WIDGET (child)); if (container != NULL && GTK_IS_FLOW_BOX (container)) { gtk_flow_box_select_child (GTK_FLOW_BOX (container), GTK_FLOW_BOX_CHILD (child)); gtk_widget_grab_focus (GTK_WIDGET (self)); if (n_press == 2) g_signal_emit_by_name (container, "child-activated", child); } } } if (button == GDK_BUTTON_SECONDARY) { ancestor = gtk_widget_get_ancestor (GTK_WIDGET (self), GSTYLE_TYPE_PALETTE_WIDGET); if (ancestor != NULL) { builder = gtk_builder_new_from_resource ("/org/gnome/libgstyle/ui/gstyle-color-widget.ui"); popover = GTK_WIDGET (gtk_builder_get_object (builder, "popover")); button_rename = GTK_WIDGET (gtk_builder_get_object (builder, "button_rename")); g_signal_connect_object (button_rename, "button-release-event", G_CALLBACK (popover_button_rename_clicked_cb), self, G_CONNECT_SWAPPED); button_remove = GTK_WIDGET (gtk_builder_get_object (builder, "button_remove")); g_signal_connect_object (button_remove, "button-release-event", G_CALLBACK (popover_button_remove_clicked_cb), self, G_CONNECT_SWAPPED); gtk_popover_set_relative_to (GTK_POPOVER (popover), GTK_WIDGET (self)); g_signal_connect_swapped (popover, "closed", G_CALLBACK (contextual_popover_closed_cb), self); gtk_widget_show (popover); g_object_unref (builder); } } }
static void gs_editor_button_new_clicked_cb (GtkWidget *widget, GsEditor *self) { widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "popover_new")); gtk_popover_popup (GTK_POPOVER (widget)); }