void brasero_file_chooser_customize (GtkWidget *widget, gpointer null_data) { /* we explore everything until we reach a treeview (there are two) */ if (GTK_IS_TREE_VIEW (widget)) { GtkTargetList *list; GdkAtom target; gboolean found; guint num; list = gtk_drag_source_get_target_list (widget); target = gdk_atom_intern ("text/uri-list", TRUE); found = gtk_target_list_find (list, target, &num); /* FIXME: should we unref them ? apparently not according to * the warning messages we get if we do */ if (found && gtk_tree_selection_get_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))) == GTK_SELECTION_MULTIPLE) { GtkTreeModel *model; /* This is done because GtkFileChooser does not use a * GtkListStore or GtkTreeStore any more. */ egg_tree_multi_drag_add_drag_support (GTK_TREE_VIEW (widget)); model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget)); if (model) { GType type; type = G_OBJECT_TYPE (model); brasero_enable_multi_DND_for_model_type (type); } else g_signal_connect (widget, "notify::model", G_CALLBACK (brasero_file_chooser_notify_model), NULL); } } else if (GTK_IS_BUTTON (widget)) { GtkWidget *image; gchar *stock_id = NULL; image = gtk_button_get_image (GTK_BUTTON (widget)); if (!GTK_IS_IMAGE (image)) return; gtk_image_get_stock (GTK_IMAGE (image), &stock_id, NULL); if (stock_id && (!strcmp (stock_id,GTK_STOCK_ADD) || !strcmp (stock_id, GTK_STOCK_REMOVE))) { GtkRequisition request; gint width; GtkWidget *parent; /* This is to avoid having the left part too small */ parent = gtk_widget_get_parent (widget); gtk_widget_get_requisition (parent, &request); width = request.width; gtk_widget_get_preferred_size (parent, &request, NULL); if (request.width >= width) gtk_widget_set_size_request (parent, request.width, request.height); gtk_widget_hide (widget); } } else if (GTK_IS_CONTAINER (widget)) { if (GTK_IS_PANED (widget)) { GtkWidget *left; /* This is to allow the left part to be shrunk as much * as the user want. */ left = gtk_paned_get_child1 (GTK_PANED (widget)); g_object_ref (left); gtk_container_remove (GTK_CONTAINER (widget), left); gtk_paned_pack1 (GTK_PANED (widget), left, TRUE, TRUE); g_object_unref (left); g_signal_connect (widget, "size-allocate", G_CALLBACK (brasero_file_chooser_allocation_changed), NULL); } gtk_container_foreach (GTK_CONTAINER (widget), brasero_file_chooser_customize, NULL); } }
SeahorseKeyManagerStore* seahorse_key_manager_store_new (GcrCollection *collection, GtkTreeView *view, SeahorsePredicate *pred, GSettings *settings) { SeahorseKeyManagerStore *self; GtkTreeViewColumn *col; SeahorseCollection *filtered; GtkCellRenderer *renderer; gchar *sort_by; guint last; filtered = seahorse_collection_new_for_predicate (collection, pred, NULL); pred->custom = on_filter_visible; self = g_object_new (SEAHORSE_TYPE_KEY_MANAGER_STORE, "collection", filtered, "settings", settings, "mode", GCR_COLLECTION_MODEL_LIST, NULL); pred->custom_target = self; g_object_unref (filtered); last = gcr_collection_model_set_columns (GCR_COLLECTION_MODEL (self), columns); g_return_val_if_fail (last == N_COLS, NULL); /* The sorted model is the top level model */ gtk_tree_view_set_model (view, GTK_TREE_MODEL (self)); /* add the icon column */ renderer = gtk_cell_renderer_pixbuf_new (); g_object_set (renderer, "stock-size", GTK_ICON_SIZE_DND, NULL); g_object_set (renderer, "ypad", 6, NULL); g_object_set (renderer, "yalign", 0.0, NULL); col = gtk_tree_view_column_new_with_attributes ("", renderer, "gicon", COL_ICON, NULL); gtk_tree_view_column_set_resizable (col, FALSE); gtk_tree_view_append_column (view, col); /* Name column */ col = gtk_tree_view_column_new (); renderer = gtk_cell_renderer_text_new (); g_object_set (renderer, "ypad", 6, "yalign", 0.0, "ellipsize", PANGO_ELLIPSIZE_END, NULL); gtk_tree_view_column_pack_start (col, renderer, TRUE); gtk_tree_view_column_set_attributes (col, renderer, "markup", COL_MARKUP, NULL); renderer = gtk_cell_renderer_text_new (); g_object_set (renderer, "ypad", 6, "xpad", 3, "yalign", 0.0, "xalign", 1.0, "scale", PANGO_SCALE_SMALL, "alignment", PANGO_ALIGN_RIGHT, NULL); gtk_tree_view_column_pack_start (col, renderer, FALSE); gtk_tree_view_column_set_attributes (col, renderer, "markup", COL_DESCRIPTION, NULL); gtk_tree_view_column_set_resizable (col, TRUE); gtk_tree_view_column_set_expand (col, TRUE); gtk_tree_view_append_column (view, col); gtk_tree_view_column_set_sort_column_id (col, COL_LABEL); /* Use predicate to figure out which columns to add */ if (SEAHORSE_IS_COLLECTION (collection)) pred = seahorse_collection_get_predicate (SEAHORSE_COLLECTION (collection)); else pred = NULL; /* Also watch for sort-changed on the store */ g_signal_connect (self, "sort-column-changed", G_CALLBACK (on_sort_column_changed), self); /* Update sort order in case the sorted column was added */ if ((sort_by = g_settings_get_string (settings, "sort-by")) != NULL) { set_sort_to (self, sort_by); g_free (sort_by); } gtk_tree_view_set_enable_search (view, FALSE); gtk_tree_view_set_show_expanders (view, FALSE); gtk_tree_view_set_rules_hint (view, TRUE); gtk_tree_view_set_headers_visible (view, FALSE); gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (self), COL_LABEL, GTK_SORT_ASCENDING); /* Tree drag */ egg_tree_multi_drag_add_drag_support (view); g_signal_connect (G_OBJECT (view), "drag_data_get", G_CALLBACK (drag_data_get), self); g_signal_connect (G_OBJECT (view), "drag_begin", G_CALLBACK (drag_begin), self); g_signal_connect (G_OBJECT (view), "drag_end", G_CALLBACK (drag_end), self); gtk_drag_source_set (GTK_WIDGET (view), GDK_BUTTON1_MASK, store_targets, G_N_ELEMENTS (store_targets), GDK_ACTION_COPY); return self; }