[Xfce4-commits] r30050 - in thunar/branches/migration-to-gio: . thunar

Jannis Pohlmann jannis at xfce.org
Fri Jun 19 17:34:20 CEST 2009


Author: jannis
Date: 2009-06-19 15:34:20 +0000 (Fri, 19 Jun 2009)
New Revision: 30050

Modified:
   thunar/branches/migration-to-gio/ChangeLog
   thunar/branches/migration-to-gio/thunar/thunar-location-entry.c
Log:
	* thunar/thunar-location-entry.c: Simplify the activate code by
	  deriving from ThunarBrowser and using the poke functions to mount
	  volumes or resolve files asynchronously and on demand.

Modified: thunar/branches/migration-to-gio/ChangeLog
===================================================================
--- thunar/branches/migration-to-gio/ChangeLog	2009-06-19 15:34:16 UTC (rev 30049)
+++ thunar/branches/migration-to-gio/ChangeLog	2009-06-19 15:34:20 UTC (rev 30050)
@@ -1,5 +1,11 @@
 2009-06-19	Jannis Pohlmann <jannis at xfce.org>
 
+	* thunar/thunar-location-entry.c: Simplify the activate code by
+	  deriving from ThunarBrowser and using the poke functions to mount
+	  volumes or resolve files asynchronously and on demand.
+
+2009-06-19	Jannis Pohlmann <jannis at xfce.org>
+
 	* thunar/thunar-shortcuts-view.c: Dramatically simplify the way
 	  directories and volumes are mounted and opened by deriving from
 	  ThunarBrowser and calling thunar_browser_poke_file() and

Modified: thunar/branches/migration-to-gio/thunar/thunar-location-entry.c
===================================================================
--- thunar/branches/migration-to-gio/thunar/thunar-location-entry.c	2009-06-19 15:34:16 UTC (rev 30049)
+++ thunar/branches/migration-to-gio/thunar/thunar-location-entry.c	2009-06-19 15:34:20 UTC (rev 30050)
@@ -24,6 +24,7 @@
 
 #include <gdk/gdkkeysyms.h>
 
+#include <thunar/thunar-browser.h>
 #include <thunar/thunar-dialogs.h>
 #include <thunar/thunar-gobject-extensions.h>
 #include <thunar/thunar-gtk-extensions.h>
@@ -36,10 +37,6 @@
 
 
 
-typedef struct _ActivateData ActivateData;
-
-
-
 /* Property identifiers */
 enum
 {
@@ -103,14 +100,8 @@
   GtkWidget  *path_entry;
 };
 
-struct _ActivateData
-{
-  ThunarLocationEntry *location_entry;
-  ThunarFile          *file;
-};
 
 
-
 static GObjectClass *thunar_location_entry_parent_class;
 
 
@@ -136,6 +127,13 @@
         NULL,
       };
 
+      static const GInterfaceInfo browser_info =
+      {
+        NULL,
+        NULL,
+        NULL,
+      };
+
       static const GInterfaceInfo component_info =
       {
         (GInterfaceInitFunc) thunar_location_entry_component_init,
@@ -158,6 +156,7 @@
       };
 
       type = g_type_register_static (GTK_TYPE_HBOX, I_("ThunarLocationEntry"), &info, 0);
+      g_type_add_interface_static (type, THUNAR_TYPE_BROWSER, &browser_info);
       g_type_add_interface_static (type, THUNAR_TYPE_NAVIGATOR, &navigator_info);
       g_type_add_interface_static (type, THUNAR_TYPE_COMPONENT, &component_info);
       g_type_add_interface_static (type, THUNAR_TYPE_LOCATION_BAR, &location_bar_info);
@@ -458,58 +457,28 @@
 
 
 static void
-thunar_location_entry_activate_finish (GObject      *object,
-                                       GAsyncResult *result,
-                                       gpointer      user_data)
+thunar_location_entry_poke_file_finish (ThunarBrowser *browser,
+                                        ThunarFile    *file,
+                                        ThunarFile    *target_file,
+                                        GError        *error,
+                                        gpointer       ignored)
 {
-  ActivateData *data = user_data;
-  GError       *error = NULL;
+  _thunar_return_if_fail (THUNAR_IS_LOCATION_ENTRY (browser));
+  _thunar_return_if_fail (THUNAR_IS_FILE (file));
 
-  _thunar_return_if_fail (G_IS_FILE (object));
-  _thunar_return_if_fail (G_IS_ASYNC_RESULT (result));
-  _thunar_return_if_fail (data != NULL);
-  _thunar_return_if_fail (THUNAR_IS_LOCATION_ENTRY (data->location_entry));
-  _thunar_return_if_fail (THUNAR_IS_FILE (data->file));
-
-  /* finish mounting the volume */
-  if (!g_file_mount_enclosing_volume_finish (G_FILE (object), result, &error))
-    {
-      if (error->domain == G_IO_ERROR)
-        {
-          /* ignore already mounted and unsupported errors */
-          if (error->code == G_IO_ERROR_ALREADY_MOUNTED 
-              || error->code == G_IO_ERROR_NOT_SUPPORTED)
-            {
-              g_clear_error (&error);
-            }
-        }
-    }
-
-  /* check if mounting succeeded */
   if (error == NULL)
     {
-      /* reload the file if it wasn't mounted before */
-      if (!thunar_file_is_mounted (data->file))
-        thunar_file_reload (data->file);
-
-      /* we then try to open or launch it */
-      thunar_location_entry_open_or_launch (data->location_entry, data->file);
+      /* try to open or launch the target file */
+      thunar_location_entry_open_or_launch (THUNAR_LOCATION_ENTRY (browser), 
+                                            target_file);
     }
   else
     {
       /* display an error explaining why we couldn't open/mount the file */
-      thunar_dialogs_show_error (data->location_entry->path_entry, 
+      thunar_dialogs_show_error (THUNAR_LOCATION_ENTRY (browser)->path_entry,
                                  error, _("Failed to open \"%s\""), 
-                                 thunar_file_get_display_name (data->file));
-
-      /* free the error */
-      g_error_free (error);
+                                 thunar_file_get_display_name (file));
     }
-
-  /* destroy the activate data */
-  g_object_unref (data->file);
-  g_object_unref (data->location_entry);
-  _thunar_slice_free (ActivateData, data);
 }
 
 
@@ -520,11 +489,7 @@
 thunar_location_entry_activate (GtkWidget           *path_entry,
                                 ThunarLocationEntry *location_entry)
 {
-  GMountOperation *mount_operation;
-  ActivateData    *data;
-  ThunarFile      *file;
-  GtkWidget       *window;
-  GFile           *location;
+  ThunarFile *file;
 
   _thunar_return_if_fail (THUNAR_IS_LOCATION_ENTRY (location_entry));
   _thunar_return_if_fail (location_entry->path_entry == path_entry);
@@ -533,38 +498,8 @@
   file = thunar_path_entry_get_current_file (THUNAR_PATH_ENTRY (path_entry));
   if (G_LIKELY (file != NULL))
     {
-      /* check if the file is mounted */
-      if (thunar_file_is_mounted (file))
-        {
-          /* it is, we don't need to mount its volume first */
-          thunar_location_entry_open_or_launch (location_entry, file);
-        }
-      else
-        {
-          /* get the GFile of the file */
-          location = thunar_file_get_file (file);
-          
-          /* determine the toplevel window */
-          window = gtk_widget_get_toplevel (path_entry);
-
-          /* allocate a new activate data struct */
-          data = _thunar_slice_new0 (ActivateData);
-          data->file = g_object_ref (file);
-          data->location_entry = g_object_ref (location_entry);
-
-          /* create a GTK+ mount operation */
-          mount_operation = gtk_mount_operation_new (GTK_WINDOW (window));
-
-          /* mount the volume enclosing the file asynchronously. Thunar will switch
-           * to the new directory or launch the activated file in the mount callback */
-          g_file_mount_enclosing_volume (location, G_MOUNT_MOUNT_NONE,
-                                         mount_operation, NULL, 
-                                         thunar_location_entry_activate_finish,
-                                         data);
-
-          /* we no longer need the mount operation */
-          g_object_unref (mount_operation);
-        }
+      thunar_browser_poke_file (THUNAR_BROWSER (location_entry), file, path_entry,
+                                thunar_location_entry_poke_file_finish, NULL);
     }
 }
 




More information about the Xfce4-commits mailing list