~vcs-imports/anjuta/main

« back to all changes in this revision

Viewing changes to plugins/file-manager/file-model.c

  • Committer: jhs
  • Date: 2009-04-02 11:19:50 UTC
  • Revision ID: vcs-imports@canonical.com-20090402111950-18n2mz43io1epyju
2009-04-02  Johannes Schmid  <jhs@gnome.org>

        * plugins/file-manager/file-model.c (file_model_add_dummy),
        (file_model_vcs_status_callback), (file_model_update_file),
        (file_model_add_file), (on_file_model_changed),
        (on_row_expanded_async), (file_model_new):
        * plugins/file-manager/file-model.h:
        * plugins/git/git-vcs-interface.c (on_status_command_data_arrived):
        
        Use query_status() only on directories. Works fine with svn and should make
        git interface easier. git still has some problems there though.

Show diffs side-by-side

added added

removed removed

Lines of Context:
118
118
        gtk_tree_store_set (store, &dummy, 
119
119
                                            COLUMN_FILENAME, _("Loading..."),
120
120
                                                COLUMN_SORT, -1,
 
121
                            COLUMN_DUMMY, TRUE,
121
122
                                            -1);
122
123
}
123
124
 
182
183
        VcsData* data = user_data;
183
184
        FileModelPrivate *priv = FILE_MODEL_GET_PRIVATE (data->model);
184
185
        gchar* path = g_file_get_path (file);
185
 
                
 
186
        
186
187
        GtkTreePath* tree_path = gtk_tree_row_reference_get_path (data->ref);
187
188
        if (tree_path)
188
189
        {
 
190
                GFile* dir;
 
191
                GFile* parent;
189
192
                GdkPixbuf* file_icon = NULL;
190
193
                GdkPixbuf* emblem = NULL;
191
194
                GtkTreeIter iter;
 
195
                GtkTreeIter child;
192
196
                GtkTreeModel* model = gtk_tree_row_reference_get_model (data->ref);
193
197
 
194
198
                gtk_tree_model_get_iter (model,
195
199
                                                                 &iter,
196
200
                                                                 tree_path);
 
201
                gtk_tree_model_get (model, &iter,
 
202
                                    COLUMN_FILE, &dir, -1);
 
203
 
 
204
                parent = g_file_get_parent (file);
197
205
                
198
 
                if (priv->filter_unversioned &&
199
 
                        (status == ANJUTA_VCS_STATUS_UNVERSIONED ||
200
 
                         status == ANJUTA_VCS_STATUS_IGNORED))
201
 
                {
202
 
                        gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
203
 
                }
204
 
                else
205
 
                {
206
 
                        emblem = get_vcs_emblem (status);
207
 
                        if (emblem)
 
206
                if (gtk_tree_model_iter_children (model, &child, &iter) &&
 
207
                    g_file_equal (dir, parent))
 
208
                {
 
209
                        do
208
210
                        {
209
 
                                gtk_tree_model_get (model, &iter,
210
 
                                                                        COLUMN_PIXBUF, &file_icon,
211
 
                                                                        -1);
212
 
                                if (file_icon)
 
211
                                GFile* child_file;
 
212
                                gboolean dummy;
 
213
                                gtk_tree_model_get (model, &child,
 
214
                                                    COLUMN_FILE,
 
215
                                                    &child_file,
 
216
                                                    COLUMN_DUMMY,
 
217
                                                    &dummy, -1);
 
218
                                if (dummy)
 
219
                                        break;
 
220
                                if (g_file_equal (file, child_file))
213
221
                                {
214
 
                                        GdkPixbuf *new_icon;
215
 
 
216
 
                                        new_icon = gdk_pixbuf_copy (file_icon);
217
 
                                        gdk_pixbuf_composite (emblem,
218
 
                                                                                  new_icon,
219
 
                                                                                  0, 0,
220
 
                                                                                  gdk_pixbuf_get_width (file_icon),
221
 
                                                                                  gdk_pixbuf_get_height (file_icon),
222
 
                                                                                  0, 0,
223
 
                                                                                  1, 1,
224
 
                                                                                  GDK_INTERP_BILINEAR,
225
 
                                                                                  COMPOSITE_ALPHA);
226
 
                                        gtk_tree_store_set (GTK_TREE_STORE (model),
227
 
                                                                                &iter,
228
 
                                                                                COLUMN_PIXBUF,
229
 
                                                                                new_icon,
230
 
                                                                                -1);
231
 
                                        DEBUG_PRINT ("%s", "setting emblem");
232
 
                                        g_object_unref (new_icon);
233
 
                                        g_object_unref (file_icon);
 
222
 
 
223
                                        if (priv->filter_unversioned &&
 
224
                                            (status == ANJUTA_VCS_STATUS_UNVERSIONED ||
 
225
                                             status == ANJUTA_VCS_STATUS_IGNORED))
 
226
                                        {
 
227
                                                gtk_tree_store_remove (GTK_TREE_STORE (model), &child);
 
228
                                        }
 
229
                                        else
 
230
                                        {
 
231
                                                emblem = get_vcs_emblem (status);
 
232
                                                if (emblem)
 
233
                                                {
 
234
                                                        gtk_tree_model_get (model, &child,
 
235
                                                                            COLUMN_PIXBUF, &file_icon,
 
236
                                                                            -1);
 
237
                                                        if (file_icon)
 
238
                                                        {
 
239
                                                                GdkPixbuf *new_icon;
 
240
 
 
241
                                                                new_icon = gdk_pixbuf_copy (file_icon);
 
242
                                                                gdk_pixbuf_composite (emblem,
 
243
                                                                                      new_icon,
 
244
                                                                                      0, 0,
 
245
                                                                                      gdk_pixbuf_get_width (file_icon),
 
246
                                                                                      gdk_pixbuf_get_height (file_icon),
 
247
                                                                                      0, 0,
 
248
                                                                                      1, 1,
 
249
                                                                                      GDK_INTERP_BILINEAR,
 
250
                                                                                      COMPOSITE_ALPHA);
 
251
                                                                gtk_tree_store_set (GTK_TREE_STORE (model),
 
252
                                                                                    &child,
 
253
                                                                                    COLUMN_PIXBUF,
 
254
                                                                                    new_icon,
 
255
                                                                                    -1);
 
256
                                                                DEBUG_PRINT ("%s", "setting emblem");
 
257
                                                                g_object_unref (new_icon);
 
258
                                                                g_object_unref (file_icon);
 
259
                                                        }
 
260
                                                        g_object_unref (emblem);
 
261
                                                }
 
262
 
 
263
                                                gtk_tree_store_set (GTK_TREE_STORE (model),
 
264
                                                                    &child,
 
265
                                                                    COLUMN_STATUS,
 
266
                                                                    status,
 
267
                                                                    -1);
 
268
                                        }
 
269
                                        g_object_unref (child_file);
 
270
                                        break;
234
271
                                }
235
 
                                g_object_unref (emblem);
236
272
                        }
237
 
                        
238
 
                        gtk_tree_store_set (GTK_TREE_STORE (model),
239
 
                                                                &iter,
240
 
                                                                COLUMN_STATUS,
241
 
                                                                status,
242
 
                                                                -1);
 
273
                        while (gtk_tree_model_iter_next (model, &child));
243
274
                }
244
275
                gtk_tree_path_free (tree_path);
 
276
                g_object_unref (dir);
 
277
                g_object_unref (parent);
245
278
        }
246
279
        g_free(path);
247
280
}
288
321
file_model_update_file (FileModel* model,
289
322
                                                GtkTreeIter* iter,
290
323
                                                GFile* file,
291
 
                                                GFileInfo* file_info)
 
324
                                                GFileInfo* file_info,
 
325
                        gboolean add)
292
326
{
293
327
        GtkTreeStore* store = GTK_TREE_STORE(model);
294
328
        gboolean is_dir = FALSE;
328
362
                                                COLUMN_STATUS, ANJUTA_VCS_STATUS_NONE,
329
363
                                                COLUMN_IS_DIR, is_dir,
330
364
                                                COLUMN_SORT, g_file_info_get_sort_order(file_info),
 
365
                            COLUMN_DUMMY, FALSE,
331
366
                                                -1);
332
367
        
333
368
        if (is_dir)
 
369
        {
334
370
                file_model_add_dummy(model, iter);
335
 
        else
336
371
                file_model_get_vcs_status (model, iter, file);
 
372
        }
 
373
        if (!is_dir && !add)
 
374
        {
 
375
                GtkTreeIter parent;
 
376
                GFile* dir;
 
377
                gtk_tree_model_iter_parent (GTK_TREE_MODEL (model), &parent, iter);
 
378
                gtk_tree_model_get (GTK_TREE_MODEL (model), &parent,
 
379
                                    COLUMN_FILE, &dir, -1);
 
380
                file_model_get_vcs_status (model, &parent, dir);
 
381
                g_object_unref (dir);
 
382
        }
337
383
        
338
384
        if (pixbuf)
339
385
                g_object_unref (pixbuf);
352
398
        if (file_model_filter_file (model, file_info))
353
399
        {
354
400
                gtk_tree_store_append (store, &iter, parent);
355
 
                file_model_update_file (model, &iter, file, file_info);
 
401
                file_model_update_file (model, &iter, file, file_info, TRUE);
356
402
        }
357
403
}
358
404
 
418
464
                                if (!found)
419
465
                                        file_model_add_file (model, &iter, file, file_info);
420
466
                                else
421
 
                                        file_model_update_file (model, &file_iter, file, file_info);
 
467
                                        file_model_update_file (model, &file_iter, file, file_info, FALSE);
422
468
                                g_object_unref (file_info);
423
469
                        }
424
470
                        break;
509
555
        gtk_tree_store_remove (GTK_TREE_STORE(model), &dummy);
510
556
 
511
557
        file_model_add_watch (model, path);
 
558
        file_model_get_vcs_status (model, &real_iter, dir);
512
559
        gtk_tree_path_free (path);
513
560
        gtk_tree_row_reference_free (ref);
514
561
        g_object_unref(files);
721
768
                g_object_new (FILE_TYPE_MODEL, "base_uri", base_uri, NULL);
722
769
        GType types[N_COLUMNS] = {GDK_TYPE_PIXBUF, G_TYPE_STRING,
723
770
                G_TYPE_STRING, G_TYPE_UINT, G_TYPE_OBJECT,
724
 
                G_TYPE_BOOLEAN, G_TYPE_INT};
 
771
                G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_BOOLEAN};
725
772
        FileModelPrivate* priv = FILE_MODEL_GET_PRIVATE(model);
726
773
        
727
774
        g_signal_connect (G_OBJECT (tree_view), "row-collapsed",