From fc8b2d8e076086b8943db496af5cb2ef6f0b610f Mon Sep 17 00:00:00 2001
From: Wu Xiaotian <yetist@gmail.com>
Date: Wed, 31 Jul 2019 16:51:14 +0800
Subject: add new interface

---
 src/file-manager/fm-widget-view.c | 103 ++++++++++++++++----------------------
 src/file-manager/fm-widget-view.h |   6 +--
 2 files changed, 44 insertions(+), 65 deletions(-)

(limited to 'src')

diff --git a/src/file-manager/fm-widget-view.c b/src/file-manager/fm-widget-view.c
index 4edf473e..de678a85 100644
--- a/src/file-manager/fm-widget-view.c
+++ b/src/file-manager/fm-widget-view.c
@@ -1,8 +1,8 @@
 /* vi: set sw=4 ts=4 wrap ai: */
 /*
- * fm-widget-view.c: This file is part of ____
+ * fm-widget-view.c: This file is part of caja.
  *
- * Copyright (C) 2019 yetist <yetist@yetibook>
+ * Copyright (C) 2019 Wu Xiaotian <yetist@gmail.com>
  *
  *
  * This program is free software; you can redistribute it and/or modify
@@ -41,9 +41,8 @@
 
 struct _FMWidgetView
 {
-  FMDirectoryView         object;
-  int                     number_of_files;
-  CajaWidgetViewProvider *provider;
+    FMDirectoryView         object;
+    CajaWidgetViewProvider *provider;
 };
 
 static GList *fm_widget_view_get_selection                   (FMDirectoryView   *view);
@@ -57,34 +56,18 @@ G_DEFINE_TYPE_WITH_CODE (FMWidgetView, fm_widget_view, FM_TYPE_DIRECTORY_VIEW,
 static void
 fm_widget_view_add_file (FMDirectoryView *view, CajaFile *file, CajaDirectory *directory)
 {
-    CajaFile *file_dir;
-    static GTimer *timer = NULL;
-    static gdouble cumu = 0, elaps;
-    FM_WIDGET_VIEW (view)->number_of_files++;
-    cairo_surface_t *icon;
-
-    if (!timer) timer = g_timer_new ();
-
-    g_timer_start (timer);
-    icon = caja_file_get_icon_surface (file, caja_get_icon_size_for_zoom_level (CAJA_ZOOM_LEVEL_STANDARD),
-                                       TRUE, gtk_widget_get_scale_factor (GTK_WIDGET(view)), 0);
-
-    elaps = g_timer_elapsed (timer, NULL);
-    g_timer_stop (timer);
-
-    g_object_unref (icon);
-
-    cumu += elaps;
-    g_message ("entire loading: %.3f, cumulative %.3f", elaps, cumu);
-
     FMWidgetView *widget_view;
+    CajaFile *file_dir;
 
     widget_view = FM_WIDGET_VIEW (view);
+    g_return_if_fail (FM_IS_WIDGET_VIEW(view));
+    g_return_if_fail (CAJA_IS_WIDGET_VIEW_PROVIDER (widget_view->provider));
+
     file_dir = caja_directory_get_corresponding_file (directory);
     caja_widget_view_provider_add_file (widget_view->provider, file, file_dir);
+    caja_file_unref (file_dir);
 }
 
-
 static void
 fm_widget_view_begin_loading (FMDirectoryView *view)
 {
@@ -115,31 +98,36 @@ fm_widget_view_begin_loading (FMDirectoryView *view)
             break;
         }
     }
-
+    caja_file_unref (file);
+    g_free (mimetype);
     caja_module_extension_list_free (providers);
 
     if (widget_view->provider == NULL) {
+        g_free (uri);
         return;
     }
 
     caja_widget_view_provider_set_location (widget_view->provider, uri);
+    g_free (uri);
 
     widget = caja_widget_view_provider_get_widget (widget_view->provider);
     gtk_container_add (GTK_CONTAINER(widget_view), widget);
 
     window = fm_directory_view_get_containing_window (view);
     caja_widget_view_provider_set_window (widget_view->provider, window);
-
-    g_print("uri in widget_view = %s, window=%p\n", uri, window);
-
-    g_free (mimetype);
 }
 
 static void
 fm_widget_view_clear (FMDirectoryView *view)
 {
-}
+    FMWidgetView *widget_view;
 
+    widget_view = FM_WIDGET_VIEW (view);
+    g_return_if_fail (FM_IS_WIDGET_VIEW(view));
+    g_return_if_fail (CAJA_IS_WIDGET_VIEW_PROVIDER (widget_view->provider));
+
+    caja_widget_view_provider_clear (widget_view->provider);
+}
 
 static void
 fm_widget_view_file_changed (FMDirectoryView *view, CajaFile *file, CajaDirectory *directory)
@@ -158,7 +146,6 @@ fm_widget_view_get_selection (FMDirectoryView *view)
     return NULL;
 }
 
-
 static GList *
 fm_widget_view_get_selection_for_file_transfer (FMDirectoryView *view)
 {
@@ -168,13 +155,25 @@ fm_widget_view_get_selection_for_file_transfer (FMDirectoryView *view)
 static guint
 fm_widget_view_get_item_count (FMDirectoryView *view)
 {
-    return FM_WIDGET_VIEW (view)->number_of_files;
+    FMWidgetView *widget_view;
+
+    widget_view = FM_WIDGET_VIEW (view);
+    g_return_val_if_fail (FM_IS_WIDGET_VIEW(view), 0);
+    g_return_val_if_fail (CAJA_IS_WIDGET_VIEW_PROVIDER (widget_view->provider), 0);
+
+    return caja_widget_view_provider_get_item_count (widget_view->provider);
 }
 
 static gboolean
 fm_widget_view_is_empty (FMDirectoryView *view)
 {
-    return FM_WIDGET_VIEW (view)->number_of_files == 0;
+    FMWidgetView *widget_view;
+
+    widget_view = FM_WIDGET_VIEW (view);
+    g_return_val_if_fail (FM_IS_WIDGET_VIEW(view), TRUE);
+    g_return_val_if_fail (CAJA_IS_WIDGET_VIEW_PROVIDER (widget_view->provider), TRUE);
+
+    return caja_widget_view_provider_get_item_count (widget_view->provider) == 0;
 }
 
 static void
@@ -185,8 +184,6 @@ fm_widget_view_end_file_changes (FMDirectoryView *view)
 static void
 fm_widget_view_remove_file (FMDirectoryView *view, CajaFile *file, CajaDirectory *directory)
 {
-    FM_WIDGET_VIEW (view)->number_of_files--;
-    g_assert (FM_WIDGET_VIEW (view)->number_of_files >= 0);
 }
 
 static void
@@ -208,7 +205,6 @@ fm_widget_view_reveal_selection (FMDirectoryView *view)
 static void
 fm_widget_view_merge_menus (FMDirectoryView *view)
 {
-    //EEL_CALL_PARENT (FM_DIRECTORY_VIEW_CLASS, merge_menus, (view));
     FM_DIRECTORY_VIEW_CLASS (fm_widget_view_parent_class)->merge_menus(view);
 }
 
@@ -270,7 +266,6 @@ fm_widget_view_click_policy_changed (FMDirectoryView *directory_view)
 {
 }
 
-
 static int
 fm_widget_view_compare_files (FMDirectoryView *view, CajaFile *file1, CajaFile *file2)
 {
@@ -302,10 +297,6 @@ fm_widget_view_end_loading (FMDirectoryView *view,
 static void
 fm_widget_view_finalize (GObject *object)
 {
-    FMWidgetView *widget_view;
-
-    widget_view = FM_WIDGET_VIEW (object);
-
     G_OBJECT_CLASS (fm_widget_view_parent_class)->finalize (object);
 }
 
@@ -317,14 +308,17 @@ fm_widget_view_emblems_changed (FMDirectoryView *directory_view)
 static char *
 fm_widget_view_get_first_visible_file (CajaView *view)
 {
-    //FIXME: return string to tell caja we are ready.
-    return g_strdup("file:///tmp/a.txt");
-    return NULL;
+    FMWidgetView *widget_view;
+
+    widget_view = FM_WIDGET_VIEW (view);
+    g_return_val_if_fail (FM_IS_WIDGET_VIEW(view), NULL);
+    g_return_val_if_fail (CAJA_IS_WIDGET_VIEW_PROVIDER (widget_view->provider), NULL);
+
+    return caja_widget_view_provider_get_first_visible_file (widget_view->provider);
 }
 
 static void
-fm_widget_view_scroll_to_file (CajaView *view,
-                              const char *uri)
+fm_widget_view_scroll_to_file (CajaView *view, const char *uri)
 {
 }
 
@@ -403,14 +397,6 @@ fm_widget_view_iface_init (CajaViewIface *iface)
 static void
 fm_widget_view_init (FMWidgetView *widget_view)
 {
-    //GtkWidget *widget;
-
-    //widget = gtk_app_chooser_widget_new ("text/plain");
-    //gtk_app_chooser_widget_set_show_all (GTK_APP_CHOOSER_WIDGET(widget), TRUE);
-
-    //gtk_container_add (GTK_CONTAINER(widget_view), widget);
-    //gtk_widget_show(widget);
-
     widget_view->provider = NULL;
 }
 
@@ -443,10 +429,6 @@ fm_widget_view_supports_uri (const char *uri,
 
         provider = CAJA_WIDGET_VIEW_PROVIDER (l->data);
         if (caja_widget_view_provider_supports_uri (provider, uri, file_type, mime_type)) {
-            //CajaFile *file;
-            //file = caja_file_get_by_uri (uri);
-            //caja_file_set_metadata (file, CAJA_METADATA_KEY_DEFAULT_VIEW, NULL, FM_WIDGET_VIEW_ID);
-            //caja_file_unref (file);
             result = TRUE;
         }
     }
@@ -470,7 +452,6 @@ static CajaViewInfo fm_widget_view =
 void
 fm_widget_view_register (void)
 {
-    fm_widget_view.id = fm_widget_view.id;
     fm_widget_view.view_combo_label = _(fm_widget_view.view_combo_label);
     fm_widget_view.view_menu_label_with_mnemonic = _(fm_widget_view.view_menu_label_with_mnemonic);
     fm_widget_view.error_label = _(fm_widget_view.error_label);
diff --git a/src/file-manager/fm-widget-view.h b/src/file-manager/fm-widget-view.h
index 6ff29699..7b12df92 100644
--- a/src/file-manager/fm-widget-view.h
+++ b/src/file-manager/fm-widget-view.h
@@ -1,9 +1,8 @@
 /* vi: set sw=4 ts=4 wrap ai: */
 /*
- * fm-widget-view.h: This file is part of ____
- *
- * Copyright (C) 2019 yetist <yetist@yetibook>
+ * fm-widget-view.h: This file is part of caja.
  *
+ * Copyright (C) 2019 Wu Xiaotian <yetist@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -31,7 +30,6 @@ G_BEGIN_DECLS
 #define FM_TYPE_WIDGET_VIEW              (fm_widget_view_get_type ())
 G_DECLARE_FINAL_TYPE (FMWidgetView, fm_widget_view, FM, WIDGET_VIEW, FMDirectoryView)
 
-
 FMWidgetView* fm_widget_view_new      (void);
 void          fm_widget_view_register (void);
 
-- 
cgit v1.2.1