static void remove_dict_row (IdeEditorSpellWidget *self, GtkListBox *listbox, GtkListBoxRow *row) { GtkListBoxRow *next_row; gchar *word; gboolean exist; g_assert (IDE_IS_EDITOR_SPELL_WIDGET (self)); g_assert (GTK_IS_LIST_BOX (listbox)); g_assert (GTK_IS_LIST_BOX_ROW (row)); word = g_object_get_data (G_OBJECT (row), "word"); exist = ide_editor_spell_dict_remove_word_from_personal (self->dict, word); if (!exist) g_warning ("The word %s do not exist in the personnal dictionary", word); if (row == gtk_list_box_get_selected_row (listbox)) { if (NULL != (next_row = get_next_row_to_focus (listbox, row))) { gtk_widget_grab_focus (GTK_WIDGET (next_row)); gtk_list_box_select_row (listbox, next_row); } else gtk_widget_grab_focus (GTK_WIDGET (self->word_entry)); } gtk_container_remove (GTK_CONTAINER (self->dict_words_list), GTK_WIDGET (row)); ide_editor_spell_widget__dict_word_entry_changed_cb (self, GTK_ENTRY (self->dict_word_entry)); }
static void ide_editor_spell_widget__row_selected_cb (IdeEditorSpellWidget *self, GtkListBoxRow *row, GtkListBox *listbox) { const gchar *word; GtkLabel *label; g_assert (IDE_IS_EDITOR_SPELL_WIDGET (self)); g_assert (GTK_IS_LIST_BOX_ROW (row) || row == NULL); g_assert (GTK_IS_LIST_BOX (listbox)); if (row != NULL) { label = GTK_LABEL (gtk_bin_get_child (GTK_BIN (row))); word = gtk_label_get_text (label); g_signal_handlers_block_by_func (self->word_entry, ide_editor_spell_widget__word_entry_changed_cb, self); gtk_entry_set_text (self->word_entry, word); gtk_editable_set_position (GTK_EDITABLE (self->word_entry), -1); update_change_ignore_sensibility (self); g_signal_handlers_unblock_by_func (self->word_entry, ide_editor_spell_widget__word_entry_changed_cb, self); } }
static GtkListBoxRow * get_next_row_to_focus (GtkListBox *listbox, GtkListBoxRow *row) { g_autoptr(GList) children = NULL; gint index; gint new_index; gint len; g_assert (GTK_IS_LIST_BOX (listbox)); g_assert (GTK_IS_LIST_BOX_ROW (row)); children = gtk_container_get_children (GTK_CONTAINER (listbox)); if (0 == (len = g_list_length (children))) return NULL; index = gtk_list_box_row_get_index (row); if (index < len - 1) new_index = index + 1; else if (index == len - 1 && len > 1) new_index = index - 1; else return NULL; return gtk_list_box_get_row_at_index (listbox, new_index); }
void glade_gtk_listbox_get_child_property (GladeWidgetAdaptor *adaptor, GObject *container, GObject *child, const gchar *property_name, GValue *value) { g_return_if_fail (GTK_IS_LIST_BOX (container)); g_return_if_fail (GTK_IS_LIST_BOX_ROW (child)); if (strcmp (property_name, "position") == 0) { gint position = gtk_list_box_row_get_index (GTK_LIST_BOX_ROW (child)); g_value_set_int (value, position); } else { /* Chain Up */ GWA_GET_CLASS (GTK_TYPE_CONTAINER)->child_get_property (adaptor, container, child, property_name, value); } }
void bind_listbox_model(GtkListBox* widget, NewWidgetFunc new_widget, GtkListStore* model, GSList* model_bindings, GCallback on_changed, GCallback on_activated) { g_return_if_fail(GTK_IS_LIST_BOX(widget)); PrivateListBoxData* data = g_malloc(sizeof(PrivateListBoxData)); data->widget = widget; data->active = NULL; data->model = GTK_TREE_MODEL(model); data->model_bindings = model_bindings; data->new_widget = new_widget; data->on_changed = on_changed; data->on_activated = on_activated; g_object_set_data(G_OBJECT(widget), LISTBOX_BINDING_PROP, data); g_signal_connect(widget, "row-selected", G_CALLBACK(on_listbox_row_selected), data); gtk_tree_model_foreach(GTK_TREE_MODEL(model), (GtkTreeModelForeachFunc)on_listbox_row_inserted, data); g_signal_connect(model, "row-changed", G_CALLBACK(on_listbox_row_changed), data); g_signal_connect(model, "row-deleted", G_CALLBACK(on_listbox_row_deleted), data); g_signal_connect(model, "row-inserted", G_CALLBACK(on_listbox_row_inserted), data); }
static void ide_editor_spell_widget__row_activated_cb (IdeEditorSpellWidget *self, GtkListBoxRow *row, GtkListBox *listbox) { g_assert (IDE_IS_EDITOR_SPELL_WIDGET (self)); g_assert (GTK_IS_LIST_BOX_ROW (row)); g_assert (GTK_IS_LIST_BOX (listbox)); if (row != NULL) change_misspelled_word (self, FALSE); }
void glade_gtk_listbox_add_child (GladeWidgetAdaptor *adaptor, GObject *object, GObject *child) { g_return_if_fail (GTK_IS_LIST_BOX (object)); g_return_if_fail (GTK_IS_LIST_BOX_ROW (child)); /* Insert to the end of the list */ glade_gtk_listbox_insert (GTK_LIST_BOX (object), GTK_LIST_BOX_ROW (child), -1); }
static void gb_shortcuts_dialog__list_box__row_activated (GbShortcutsDialog *self, GtkListBoxRow *row, GtkListBox *list_box) { GbShortcutsDialogPrivate *priv = gb_shortcuts_dialog_get_instance_private (self); const gchar *name; g_assert (GB_IS_SHORTCUTS_DIALOG (self)); g_assert (GTK_IS_LIST_BOX_ROW (row)); g_assert (GTK_IS_LIST_BOX (list_box)); name = g_object_get_data (G_OBJECT (row), "GB_SHORTCUTS_VIEW_NAME"); gtk_stack_set_visible_child_name (priv->stack, name); gtk_widget_hide (GTK_WIDGET (priv->popover)); }
static void gb_view_stack__views_listbox_row_activated_cb (GbViewStack *self, GtkListBoxRow *row, GtkListBox *list_box) { GbView *view; g_assert (GB_IS_VIEW_STACK (self)); g_assert (GTK_IS_LIST_BOX_ROW (row)); g_assert (GTK_IS_LIST_BOX (list_box)); view = g_object_get_data (G_OBJECT (row), "GB_VIEW"); if (GB_IS_VIEW (view)) { gtk_widget_hide (GTK_WIDGET (self->views_popover)); gb_view_stack_set_active_view (self, GTK_WIDGET (view)); gtk_widget_grab_focus (GTK_WIDGET (view)); } }
static gboolean dict_row_key_pressed_event_cb (IdeEditorSpellWidget *self, GdkEventKey *event, GtkListBox *listbox) { GtkListBoxRow *row; g_assert (IDE_IS_EDITOR_SPELL_WIDGET (self)); g_assert (event != NULL); g_assert (GTK_IS_LIST_BOX (listbox)); if (NULL != (row = gtk_list_box_get_selected_row (listbox)) && event->keyval == GDK_KEY_Delete) { remove_dict_row (self, GTK_LIST_BOX (self->dict_words_list), GTK_LIST_BOX_ROW (row)); return GDK_EVENT_STOP; } return GDK_EVENT_PROPAGATE; }
/* 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); } } }