[maemo-commits] [maemo-commits] r16788 - projects/haf/branches/hildon-fm/fremantle/hildon-fm

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Thu Nov 27 17:51:40 EET 2008
Author: rabinovich
Date: 2008-11-27 17:51:40 +0200 (Thu, 27 Nov 2008)
New Revision: 16788

Modified:
   projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-selection.c
Log:
priv->current_row is a row reference for the last activated item, no TreeSelection anymore

Modified: projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-selection.c
===================================================================
--- projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-selection.c	2008-11-27 14:49:07 UTC (rev 16787)
+++ projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-selection.c	2008-11-27 15:51:40 UTC (rev 16788)
@@ -197,6 +197,7 @@
        in for example, folder chooser dialog and some other similar dialogs */
     gboolean show_files;
     gboolean edit_mode;
+    GtkTreeRowReference *current_row; // a row in sort_model of content pane
 };
 
 #if 0
@@ -609,6 +610,7 @@
 
     /* Works also with NULLs */
     gtk_tree_row_reference_free(priv->current_folder);
+    gtk_tree_row_reference_free(priv->current_row);
     g_strfreev(priv->drag_data_uris);
 
     g_object_unref(priv->dir_filter);
@@ -1803,6 +1805,9 @@
 
     model = gtk_tree_view_get_model(view); /* Content pane filter model */
 
+    gtk_tree_row_reference_free(HILDON_FILE_SELECTION(data)->priv->current_row);
+    HILDON_FILE_SELECTION(data)->priv->current_row = gtk_tree_row_reference_new(model, path);
+
     if (gtk_tree_model_get_iter(model, &iter, path)) {
         gtk_tree_model_get(model, &iter,
                            HILDON_FILE_SYSTEM_MODEL_COLUMN_IS_FOLDER,
@@ -2565,7 +2570,7 @@
 
 /*     self->priv->dir_tree = */
 /*         gtk_tree_view_new_with_model(self->priv->dir_filter); */
-    self->priv->dir_tree = hildon_gtk_tree_view_new_with_model(HILDON_UI_MODE_EDIT, self->priv->dir_filter); //TODO
+    self->priv->dir_tree = hildon_gtk_tree_view_new_with_model(HILDON_UI_MODE_EDIT, self->priv->dir_filter); //for selection-changed signal to be sent
 
     col = gtk_tree_view_column_new();
     gtk_tree_view_column_set_sizing(col, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
@@ -3702,21 +3707,14 @@
  * hildon_file_selection_select_all:
  * @self: a pointer to #HildonFileSelection
  *
- * Selects all files from the content pane. Multiple selection must be
- * enabled before calling this.
+ * Selects the first row in the content pane.
  */
 void hildon_file_selection_select_all(HildonFileSelection * self)
 {
-    GtkTreeSelection *selection;
-
     g_return_if_fail(HILDON_IS_FILE_SELECTION(self));
 
-    selection =
-        gtk_tree_view_get_selection(GTK_TREE_VIEW(self->priv->view[0]));
-    gtk_tree_selection_select_all(selection);
-    selection =
-        gtk_tree_view_get_selection(GTK_TREE_VIEW(self->priv->view[1]));
-    gtk_tree_selection_select_all(selection);
+    gtk_tree_row_reference_free(self->priv->current_row);
+    self->priv->current_row = gtk_tree_row_reference_new(self->priv->sort_model, gtk_tree_path_new_first());
 }
 
 /**
@@ -3812,11 +3810,13 @@
   return NULL;
 }
 
+#if 0 //Fremantle
 static void select_path_helper(gpointer path, gpointer selection)
 {
     gtk_tree_selection_select_path((GtkTreeSelection *)(selection),
                                    (GtkTreePath *)(path));
 }
+#endif
 
 /* Used by select/unselect path for selections */
 static void
@@ -3829,7 +3829,6 @@
 
     if (GTK_IS_TREE_VIEW(view)) {
         GtkTreeIter sort_iter, filter_iter;
-        GtkTreeSelection *selection;
         GtkTreeView *treeview = GTK_TREE_VIEW(view);
 
         gtk_tree_model_filter_convert_child_iter_to_iter
@@ -3840,8 +3839,6 @@
           (GTK_TREE_MODEL_SORT(priv->sort_model),
            &sort_iter, &filter_iter);
 
-        selection = gtk_tree_view_get_selection(treeview);
-
         if (select)
         {
           GtkTreePath *path;
@@ -3853,26 +3850,13 @@
 
           if (path)
           {
-            GList *selected = NULL;
-
-            if (keep_current)
-              selected = gtk_tree_selection_get_selected_rows(selection, NULL);
-
             gtk_tree_view_set_cursor(treeview, path, NULL, FALSE);
+            gtk_tree_row_reference_free(priv->current_row);
+            priv->current_row = gtk_tree_row_reference_new(priv->sort_model, path);
             gtk_tree_path_free(path);
-
-            if (keep_current)
-            {
-              g_list_foreach(selected, (GFunc) select_path_helper, selection);
-              g_list_foreach(selected, (GFunc) gtk_tree_path_free, NULL);
-              g_list_free(selected);
-            }
           }
 
-          gtk_tree_selection_select_iter(selection, &sort_iter);
         }
-        else
-          gtk_tree_selection_unselect_iter(selection, &sort_iter);
     }
 }
 
@@ -4292,7 +4276,7 @@
 
     return TRUE;
 }
-
+#if 0 //Fremantle
 static void get_selected_files_helper(GtkTreeModel * model,
                                       GtkTreePath * path,
                                       GtkTreeIter * iter, gpointer data)
@@ -4314,28 +4298,43 @@
       *list = g_slist_append(*list, file_path);
     }
 }
-
+#endif
 /* Similar to get_selected_paths, but returns only files. This still uses
    content_pane_last_used, so we do not need to change dialog at all */
+/** 
+ * _hildon_file_selection_get_selected_files:
+ * @self:  a #HildonFileSelection.
+ *
+ * This function always returns a list of one file or NULL.
+ */
 GSList *_hildon_file_selection_get_selected_files(HildonFileSelection
                                                        * self)
 {
     GtkWidget *view;
+    GtkTreeIter iter;
+    GtkTreeModel *model;
+    gboolean folder;
+    GtkFilePath *file_path;
 
     g_return_val_if_fail(HILDON_IS_FILE_SELECTION(self), NULL);
 
     view = get_current_view(self->priv);
 
     if (GTK_IS_TREE_VIEW(view) && self->priv->content_pane_last_used) {
-        GSList *paths = NULL;
-
-        gtk_tree_selection_selected_foreach(gtk_tree_view_get_selection
-                                            (GTK_TREE_VIEW(view)),
-                                            get_selected_files_helper,
-                                            &paths);
-        return paths;
+        model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
+        if (gtk_tree_row_reference_valid(self->priv->current_row)) {
+            gtk_tree_model_get_iter(model, &iter, gtk_tree_row_reference_get_path(self->priv->current_row));
+            gtk_tree_model_get(model, &iter,
+                               HILDON_FILE_SYSTEM_MODEL_COLUMN_IS_FOLDER,
+                               &folder, -1);
+            if (!folder) {
+                gtk_tree_model_get(model, &iter,
+                                   HILDON_FILE_SYSTEM_MODEL_COLUMN_GTK_PATH_INTERNAL,
+                                   &file_path, -1);
+                return g_slist_append(NULL, file_path);
+            }
+        }
     }
-
     return NULL;
 }
 


More information about the maemo-commits mailing list