> --- lib/rb-tree-dnd.c 5 Apr 2004 14:26:48 -0000 1.7 > +++ lib/rb-tree-dnd.c 2 Sep 2004 21:36:46 -0000 > > Is it just me, or does drag and drop to the source list still not work > even with this patch? Here is a patch which fixes dnd from the library view and from nautilus to the source list, this hides the GtkTreeModelFilter in rb-sourcelist- model instead of explicitly creating it in rb-sourcelist. Since rb- sourcelist-model implements a specific interface to be able to handle dnd and since the "displayed" model will be the GtkTreeModelFilter and not the underlying GtkListStore, I think this change makes sense. Walters disagreed sometimes ago though, that's why I'm posting it here to get approval before committing it ;) This is available from teuf gnome org--2004/rhythmbox--tags-merge--0.9-- patch-6 and teuf gnome org--2004/rhythmbox--tags-merge--0.9--patch-7 for the arch addicts over here. Christophe
* added files {arch}/rhythmbox/rhythmbox--tags-merge/rhythmbox--tags-merge--0.9/teuf gnome org--2004/patch-log/patch-6 {arch}/rhythmbox/rhythmbox--tags-merge/rhythmbox--tags-merge--0.9/teuf gnome org--2004/patch-log/patch-7 * modified files --- orig/sources/rb-sourcelist-model.c +++ mod/sources/rb-sourcelist-model.c @@ -108,7 +108,7 @@ NULL }; - rb_sourcelist_model_type = g_type_register_static (GTK_TYPE_LIST_STORE, "RBSourceListModel", + rb_sourcelist_model_type = g_type_register_static (GTK_TYPE_TREE_MODEL_FILTER, "RBSourceListModel", &rb_sourcelist_model_info, 0); g_type_add_interface_static (rb_sourcelist_model_type, RB_TYPE_TREE_DRAG_SOURCE, @@ -184,10 +184,32 @@ (* G_OBJECT_CLASS (parent_class)->finalize) (object); } +static gboolean +rb_sourcelist_is_row_visible (GtkTreeModel *model, + GtkTreeIter *iter, + gpointer data) +{ + RBSource *source; + + gtk_tree_model_get (GTK_TREE_MODEL (model), iter, + RB_SOURCELIST_MODEL_COLUMN_SOURCE, &source, -1); + + if (source != NULL) { + gboolean visible; + g_object_get (G_OBJECT (source), "visibility", &visible, NULL); + + return visible; + } else { + return FALSE; + } +} + + GtkTreeModel * rb_sourcelist_model_new (void) { RBSourceListModel *model; + GtkListStore *store; GType *column_types = g_new (GType, RB_SOURCELIST_MODEL_N_COLUMNS); column_types[RB_SOURCELIST_MODEL_COLUMN_PLAYING] = G_TYPE_BOOLEAN; @@ -195,11 +217,18 @@ column_types[RB_SOURCELIST_MODEL_COLUMN_NAME] = G_TYPE_STRING; column_types[RB_SOURCELIST_MODEL_COLUMN_SOURCE] = G_TYPE_POINTER; column_types[RB_SOURCELIST_MODEL_COLUMN_ATTRIBUTES] = PANGO_TYPE_ATTR_LIST; + store = gtk_list_store_newv (RB_SOURCELIST_MODEL_N_COLUMNS, + column_types); + + model = RB_SOURCELIST_MODEL (g_object_new (RB_TYPE_SOURCELIST_MODEL, + "child-model", store, + "virtual-root", NULL, + NULL)); + + gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (model), + rb_sourcelist_is_row_visible, + NULL, NULL); - model = RB_SOURCELIST_MODEL (g_object_new (RB_TYPE_SOURCELIST_MODEL, NULL)); - gtk_list_store_set_column_types (GTK_LIST_STORE (model), - RB_SOURCELIST_MODEL_N_COLUMNS, - column_types); g_free (column_types); return GTK_TREE_MODEL (model); --- orig/sources/rb-sourcelist-model.h +++ mod/sources/rb-sourcelist-model.h @@ -40,14 +40,14 @@ typedef struct RBSourceListModel { - GtkListStore parent; + GtkTreeModelFilter parent; RBSourceListModelPriv *priv; } RBSourceListModel; typedef struct RBSourceListModelClass { - GtkListStoreClass parent_class; + GtkTreeModelFilterClass parent_class; void (*drop_received) (RBSourceListModel *model, RBSource *target, GtkTreeViewDropPosition pos, GtkSelectionData *data); --- orig/sources/rb-sourcelist.c +++ mod/sources/rb-sourcelist.c @@ -83,9 +83,6 @@ static void rb_sourcelist_title_cell_data_func (GtkTreeViewColumn *column, GtkCellRenderer *renderer, GtkTreeModel *tree_model, GtkTreeIter *iter, RBSourceList *sourcelist); -static gboolean rb_sourcelist_is_row_visible (GtkTreeModel *model, - GtkTreeIter *iter, - gpointer data); static GtkVBoxClass *parent_class = NULL; @@ -184,15 +181,10 @@ sourcelist->priv = g_new0 (RBSourceListPriv, 1); - sourcelist->priv->real_model = rb_sourcelist_model_new (); - sourcelist->priv->filter_model = gtk_tree_model_filter_new (sourcelist->priv->real_model, - NULL); - - gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (sourcelist->priv->filter_model), - rb_sourcelist_is_row_visible, - NULL, NULL); + sourcelist->priv->filter_model = rb_sourcelist_model_new (); + sourcelist->priv->real_model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (sourcelist->priv->filter_model)); - g_signal_connect_object (G_OBJECT (sourcelist->priv->real_model), + g_signal_connect_object (G_OBJECT (sourcelist->priv->filter_model), "drop_received", G_CALLBACK (drop_received_cb), sourcelist, 0); @@ -549,28 +541,6 @@ gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (sourcelist->priv->filter_model)); } - -static gboolean -rb_sourcelist_is_row_visible (GtkTreeModel *model, - GtkTreeIter *iter, - gpointer data) -{ - RBSource *source; - - gtk_tree_model_get (GTK_TREE_MODEL (model), iter, - RB_SOURCELIST_MODEL_COLUMN_SOURCE, &source, -1); - - if (source != NULL) { - gboolean visible; - g_object_get (G_OBJECT (source), - "visibility", &visible, - NULL); - return visible; - } else { - return FALSE; - } -} - static void rb_sourcelist_title_cell_data_func (GtkTreeViewColumn *column, GtkCellRenderer *renderer, GtkTreeModel *tree_model, GtkTreeIter *iter,
Attachment:
signature.asc
Description: Ceci est une partie de message =?ISO-8859-1?Q?num=E9riquement?= =?ISO-8859-1?Q?_sign=E9e?=