[gnome-launch-box] drop libgnomevfs from the files module



commit c69d4fa4b6aa2b0e923e40eabee3659034add802
Author: Sven Herzberg <herzi gnome-de org>
Date:   Wed Feb 10 10:33:17 2010 +0100

    drop libgnomevfs from the files module
    
    * src/lb-modules-files.c: replaced the gnome-vfs code with gio

 src/lb-module-files.c |  144 ++++++++++++++++++++++++++++---------------------
 1 files changed, 82 insertions(+), 62 deletions(-)
---
diff --git a/src/lb-module-files.c b/src/lb-module-files.c
index e88296a..160cad3 100644
--- a/src/lb-module-files.c
+++ b/src/lb-module-files.c
@@ -28,9 +28,6 @@
 #include <gdk-pixbuf/gdk-pixbuf.h>
 #include <gtk/gtkicontheme.h>
 #include <gconf/gconf-client.h>
-#include <libgnomevfs/gnome-vfs.h>
-#include <libgnomevfs/gnome-vfs-mime-handlers.h>
-#include <libgnomevfs/gnome-vfs-file-info.h>
 
 #include "lb-item.h"
 #include "lb-module-files.h"
@@ -160,32 +157,42 @@ static GList *
 module_files_query (LbModule    *module,
 		    const gchar *match)
 {
-	LbModuleFilesPriv       *priv  = GET_PRIV (module);
-	GnomeVFSDirectoryHandle *handle;
-	GnomeVFSFileInfo        *info;
-	GnomeVFSResult           r;
-	GList                   *items = NULL;
-
-	r = gnome_vfs_directory_open (&handle, priv->dir_uri,
-				  GNOME_VFS_FILE_INFO_GET_MIME_TYPE);
-
-	if(r != GNOME_VFS_OK) {
-		g_warning("error opening %s: %s", priv->dir_uri, gnome_vfs_result_to_string(r));
-		return NULL;
-	}
-
-	info = gnome_vfs_file_info_new ();
-
-	while (gnome_vfs_directory_read_next (handle, info) == GNOME_VFS_OK) {
-		gchar *name;
-		gchar *uri;
-
-		name = g_filename_to_utf8 (info->name, -1, NULL, NULL, NULL);
-		if (!name) {
-			continue;
-		}
-
-		uri = g_build_filename (priv->dir_uri, name, NULL);
+	LbModuleFilesPriv* priv  = GET_PRIV (module);
+	GFileEnumerator  * enumerator;
+	GFileInfo        * info;
+	GError           * error;
+	GList            * items = NULL;
+	GFile            * parent;
+	GFile            * file;
+
+        parent = g_file_new_for_uri (priv->dir_uri);
+        enumerator = g_file_enumerate_children (parent,
+                                                G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME ","
+                                                G_FILE_ATTRIBUTE_STANDARD_NAME ","
+                                                G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
+                                                G_FILE_QUERY_INFO_NONE, NULL,
+                                                &error);
+
+        for (info = g_file_enumerator_next_file (enumerator, NULL, NULL);
+             info;
+             info = g_file_enumerator_next_file (enumerator, NULL, NULL))
+          {
+            gchar const* name;
+            gchar      * uri;
+
+
+            if (!info)
+              {
+                g_printerr ("error getting file information: %s",
+                            error->message);
+                g_error_free (error);
+
+                continue;
+              }
+
+            name = g_file_info_get_display_name (info);
+            file = g_file_get_child (parent, g_file_info_get_name (info));
+            uri = g_file_get_uri (file);
 
 		if (name[0] != '.' && name[strlen (name) - 1] != '~') {
 			gchar *dot = strrchr (name, '.');
@@ -203,7 +210,7 @@ module_files_query (LbModule    *module,
 						     "name",      name,
 						     "icon-name", icon_name,
 						     "uri",       uri,
-						     "mime-type", info->mime_type,
+						     "mime-type", g_file_info_get_content_type (info),
 						     NULL);
 
 				g_free (icon_name);
@@ -212,12 +219,13 @@ module_files_query (LbModule    *module,
 			}
 		}
 
-		g_free (uri);
-		g_free (name);
-		gnome_vfs_file_info_clear (info);
-	}
+            g_free (uri);
+            g_object_unref (file);
+            g_object_unref (info);
+          }
 
-	gnome_vfs_directory_close (handle);
+        g_object_unref (enumerator);
+        g_object_unref (parent);
 
 	return items;
 }
@@ -227,11 +235,11 @@ module_files_add_actions (LbModule *module,
 			  LbItem   *item)
 {
 	LbItemFile              *item_file;
+	GAppInfo  * default_application;
 	GList                   *applications = NULL;
 	GList                   *actions = NULL;
 	GList                   *list = NULL;
 	const gchar             *mime_type;
-	GnomeVFSMimeApplication *default_application;
 
 	if (! LB_IS_ITEM_FILE (item)) {
 		return;
@@ -241,38 +249,49 @@ module_files_add_actions (LbModule *module,
 
 	mime_type = lb_item_file_get_mime_type (item_file);
 
-	if (! mime_type) {
-		GnomeVFSFileInfo *info;
+	if (!mime_type)
+	  {
+	    GFileInfo* info;
+	    GFile* file;
 
-		info = gnome_vfs_file_info_new ();
+	    file = g_file_new_for_uri (lb_item_file_get_uri (item_file));
+	    info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
+			              0, NULL,
+				      NULL);
 
-		if (gnome_vfs_get_file_info (lb_item_file_get_uri (item_file),
-					     info,
-					     GNOME_VFS_FILE_INFO_GET_MIME_TYPE) ==
-		    GNOME_VFS_OK) {
-			lb_item_file_set_mime_type (item_file, info->mime_type);
-		}
+	    if (info)
+	      {
+		lb_item_file_set_mime_type (item_file, g_file_info_get_content_type (info));
+	      }
 
-		gnome_vfs_file_info_unref (info);
+	      g_object_unref (info);
+	      g_object_unref (file);
 
-		mime_type = lb_item_file_get_mime_type (item_file);
+	      mime_type = lb_item_file_get_mime_type (item_file);
 	}
 
 	if (! mime_type) {
 		return;
 	}
 
-	default_application = gnome_vfs_mime_get_default_application (mime_type);
-	applications = gnome_vfs_mime_get_all_applications (mime_type);
+	default_application = g_app_info_get_default_for_type (mime_type, TRUE);
+	applications = g_app_info_get_all_for_type (mime_type);
 
 	for (list = applications; list ; list = list->next) {
-		GnomeVFSMimeApplication *application = list->data;
+		GAppInfo *application = list->data;
 		LbAction                *action;
 		const gchar             *name;
-		const gchar             *icon;
+		const gchar             *icon = NULL;
+		GIcon                   *gicon;
 
-		icon = gnome_vfs_mime_application_get_icon (application);
-		name = gnome_vfs_mime_application_get_name (application);
+		gicon = g_app_info_get_icon (application);
+		if (G_IS_THEMED_ICON (gicon))
+		  {
+		    gchar const* const* names = g_themed_icon_get_names (G_THEMED_ICON (gicon));
+
+		    icon = names ? names[0] : NULL;
+		  }
+		name = g_app_info_get_name (application);
 
 		action = g_object_new (LB_TYPE_ACTION,
 				       "name",      name,
@@ -281,7 +300,7 @@ module_files_add_actions (LbModule *module,
 
 		lb_action_set_data (action, application,
 				    (GDestroyNotify)
-				    gnome_vfs_mime_application_free);
+				    g_object_unref);
 
 		g_signal_connect (action, "activate",
 				  G_CALLBACK (module_files_activate_action),
@@ -290,7 +309,7 @@ module_files_add_actions (LbModule *module,
 		// We want the default application to be the first action so
 		// we construct a list of actions with the default at the
 		// head. We add the actions to the item later.
-		if (gnome_vfs_mime_application_equal (application, default_application)) {
+		if (g_app_info_equal (application, default_application)) {
 			actions = g_list_prepend (actions, action);
 		} else {
 			actions = g_list_append (actions, action);
@@ -313,18 +332,19 @@ static void
 module_files_activate_action (LbAction      *action,
 			      LbModuleFiles *module)
 {
-	GnomeVFSMimeApplication *application;
-	LbItemFile              *item;
-	GList                    list;
+	GdkAppLaunchContext* context;
+	GAppInfo  * application;
+	LbItemFile* item;
+	GList       list;
 
 	item = LB_ITEM_FILE (lb_action_get_item (action));
 
 	list.next = NULL;
 	list.data = (gpointer) lb_item_file_get_uri (item);
 
-	application = (GnomeVFSMimeApplication *) lb_action_get_data (action);
-
-	gnome_vfs_mime_application_launch (application, &list);
+	application = G_APP_INFO (lb_action_get_data (action));
 
-	g_print ("activate me!\n");
+	context = gdk_app_launch_context_new ();
+	g_app_info_launch (application, &list, G_APP_LAUNCH_CONTEXT (context), NULL);
+	g_object_unref (context);
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]