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 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 gb_search_box_constructed (GObject *object) { GbSearchBox *self = (GbSearchBox *)object; g_return_if_fail (GB_IS_SEARCH_BOX (self)); G_OBJECT_CLASS (gb_search_box_parent_class)->constructed (object); gtk_popover_set_relative_to (self->popover, GTK_WIDGET (self->entry)); g_signal_connect_object (self->entry, "activate", G_CALLBACK (gb_search_box_entry_activate), self, G_CONNECT_SWAPPED); g_signal_connect_object (self->entry, "changed", G_CALLBACK (gb_search_box_entry_changed), self, G_CONNECT_SWAPPED); g_signal_connect_object (self->entry, "key-press-event", G_CALLBACK (gb_search_box_entry_key_press_event), self, G_CONNECT_SWAPPED); g_signal_connect_object (self->display, "result-activated", G_CALLBACK (gb_search_box_display_result_activated), self, G_CONNECT_SWAPPED); }
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 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)); }
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; }
/* 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); } } }