anjuta r4362 - in trunk: . plugins/file-loader
- From: jhs svn gnome org
- To: svn-commits-list gnome org
- Subject: anjuta r4362 - in trunk: . plugins/file-loader
- Date: Sat, 25 Oct 2008 21:12:12 +0000 (UTC)
Author: jhs
Date: Sat Oct 25 21:12:12 2008
New Revision: 4362
URL: http://svn.gnome.org/viewvc/anjuta?rev=4362&view=rev
Log:
2008-10-25 Johannes Schmid <jhs idefix>
Patch by: Jens Georg
* plugins/file-loader/plugin.c (launch_application_failure),
(get_supertype_from_mime_type), (get_available_plugins_for_mime),
(open_with_dialog), (launch_in_default_application), (open_file),
(on_open_recent_file_idle), (on_open_recent_file),
(open_file_with), (create_open_with_submenu),
(hide_fragment_identifier), (iloader_load):
#511589 â Anjuta uses GNOME-VFS
Modified:
trunk/ChangeLog
trunk/plugins/file-loader/plugin.c
Modified: trunk/plugins/file-loader/plugin.c
==============================================================================
--- trunk/plugins/file-loader/plugin.c (original)
+++ trunk/plugins/file-loader/plugin.c Sat Oct 25 21:12:12 2008
@@ -19,10 +19,6 @@
*/
#include <config.h>
-#include <libgnomevfs/gnome-vfs-mime-utils.h>
-#include <libgnomevfs/gnome-vfs-mime.h>
-#include <libgnomevfs/gnome-vfs-mime-handlers.h>
-#include <libgnomevfs/gnome-vfs-ops.h>
#include <glib/gi18n.h>
@@ -101,12 +97,10 @@
static void
launch_application_failure (AnjutaFileLoaderPlugin *plugin,
const gchar *uri,
- GnomeVFSResult result)
+ const gchar *errmsg)
{
- const gchar *errmsg;
GtkWidget *parent;
- errmsg = gnome_vfs_result_to_string (result);
parent =
gtk_widget_get_toplevel (GTK_WIDGET(ANJUTA_PLUGIN (plugin)->shell));
anjuta_util_dialog_error (GTK_WINDOW (parent),
@@ -114,6 +108,23 @@
g_basename (uri), errmsg);
}
+static gchar *
+get_supertype_from_mime_type (const gchar *mime_type)
+{
+ gchar *supertype;
+ gchar *delim;
+ gchar *retval;
+
+ supertype = g_strdup (mime_type);
+ delim = strchr (supertype, '/');
+ g_return_val_if_fail (delim != NULL, supertype);
+
+ *delim = '\0';
+ retval = g_strconcat (supertype, "/*", NULL);
+ g_free(supertype);
+ return retval;
+}
+
static GList *
get_available_plugins_for_mime (AnjutaFileLoaderPlugin* plugin,
const gchar *mime_type)
@@ -134,7 +145,7 @@
NULL);
if (!plugin_descs);
{
- gchar* supertype = gnome_vfs_get_supertype_from_mime_type (mime_type);
+ gchar* supertype = get_supertype_from_mime_type (mime_type);
plugin_descs = anjuta_plugin_manager_query (plugin_manager,
"Anjuta Plugin",
"Interfaces", "IAnjutaFile",
@@ -155,7 +166,7 @@
GList *plugin_descs, *snode;
GList *mime_apps, *node;
GtkWidget *menu, *menuitem;
- GnomeVFSMimeApplication *mime_app;
+ GAppInfo *mime_app;
GtkWidget *dialog, *parent, *hbox, *label;
GtkWidget *options;
@@ -227,7 +238,7 @@
}
/* Open with application menu items */
- mime_apps = gnome_vfs_mime_get_all_applications (mime_type);
+ mime_apps = g_app_info_get_all_for_type (mime_type);
if (mime_apps)
{
/* Separator */
@@ -237,9 +248,13 @@
node = mime_apps;
while (node)
{
- mime_app = (GnomeVFSMimeApplication *)(node->data);
- menuitem = gtk_menu_item_new_with_label (mime_app->name);
- gtk_menu_append (menu, menuitem);
+ mime_app = (GAppInfo *)(node->data);
+ if (g_app_info_should_show (mime_app))
+ {
+ menuitem = gtk_menu_item_new_with_label (
+ g_app_info_get_name (mime_app));
+ gtk_menu_append (menu, menuitem);
+ }
node = g_list_next (node);
}
@@ -304,20 +319,26 @@
else
{
GList *uris = NULL;
- GnomeVFSResult res;
+ GError *error = NULL;
option -= (g_list_length (plugin_descs) + 2);
mime_app = g_list_nth_data (mime_apps, option);
uris = g_list_prepend (uris, (gpointer)uri);
- res = gnome_vfs_mime_application_launch (mime_app, uris);
- if (res != GNOME_VFS_OK)
- launch_application_failure (plugin, uri, res);
+ g_app_info_launch_uris(mime_app, uris, NULL, &error);
+ if (error)
+ {
+ launch_application_failure (plugin, uri, error->message);
+ g_error_free (error);
+ }
else
+ {
set_recent_file (plugin, uri, mime_type);
+ }
g_list_free (uris);
}
}
- gnome_vfs_mime_application_list_free (mime_apps);
+ g_list_foreach (mime_apps, (GFunc) g_object_unref, NULL);
+ g_list_free (mime_apps);
if (plugin_descs)
g_list_free (plugin_descs);
gtk_widget_destroy (dialog);
@@ -327,48 +348,38 @@
launch_in_default_application (AnjutaFileLoaderPlugin *plugin,
const gchar *mime_type, const gchar *uri)
{
- GnomeVFSMimeAction *action;
+ GAppInfo *appinfo;
GList *uris = NULL;
- gboolean ret;
-
+
uris = g_list_prepend (uris, (gpointer)uri);
-
- ret = TRUE;
- action = gnome_vfs_mime_get_default_action (mime_type);
- if (!action || gnome_vfs_mime_action_launch (action, uris) != GNOME_VFS_OK)
- {
- GnomeVFSMimeApplication *app;
- GnomeVFSResult res;
- app = gnome_vfs_mime_get_default_application (mime_type);
- if (!app ||
- (res =
- gnome_vfs_mime_application_launch (app, uris)) != GNOME_VFS_OK)
+
+ appinfo = g_app_info_get_default_for_type (mime_type, TRUE);
+ if (appinfo)
+ {
+ if (!g_app_info_launch_uris (appinfo, uris, NULL, NULL))
{
open_with_dialog (plugin, uri, mime_type);
}
- if (app)
- gnome_vfs_mime_application_free (app);
+ g_object_unref (G_OBJECT (appinfo));
}
- if (action)
- gnome_vfs_mime_action_free (action);
g_list_free (uris);
- return ret;
+ return TRUE;
}
static void
open_file (AnjutaFileLoaderPlugin *plugin, const gchar *uri)
{
- GnomeVFSURI *vfs_uri;
gchar *dirname;
+ gchar *path;
GFile* file;
- vfs_uri = gnome_vfs_uri_new (uri);
- dirname = gnome_vfs_uri_extract_dirname (vfs_uri);
- gnome_vfs_uri_unref (vfs_uri);
+ file = g_file_new_for_uri (uri);
+ path = g_file_get_path (file);
+ dirname = g_path_get_dirname (uri);
chdir (dirname);
+ g_free (path);
g_free (dirname);
- file = g_file_new_for_uri (uri);
/* FIXME: We have to manage the error to know if we have to remove the recent file
*/
@@ -382,14 +393,14 @@
{
AnjutaFileLoaderPlugin *plugin;
const gchar *uri;
-} RecentIdelOpenData;
+} RecentIdleOpenData;
static gboolean
on_open_recent_file_idle (gpointer data)
{
- RecentIdelOpenData *rdata;
+ RecentIdleOpenData *rdata;
- rdata = (RecentIdelOpenData*)data;
+ rdata = (RecentIdleOpenData*)data;
open_file (rdata->plugin, rdata->uri);
g_free (rdata);
return FALSE;
@@ -399,17 +410,14 @@
on_open_recent_file (GtkRecentChooser *chooser, AnjutaFileLoaderPlugin *plugin)
{
const gchar *uri;
- GnomeVFSURI *vfs_uri;
gboolean ret = TRUE;
- RecentIdelOpenData *rdata;
+ RecentIdleOpenData *rdata;
uri = gtk_recent_chooser_get_current_uri (chooser);
- vfs_uri = gnome_vfs_uri_new (uri);
- rdata = g_new0 (RecentIdelOpenData, 1);
+ rdata = g_new0 (RecentIdleOpenData, 1);
rdata->plugin = plugin;
rdata->uri = uri;
g_idle_add (on_open_recent_file_idle, rdata);
- gnome_vfs_uri_unref (vfs_uri);
return ret;
}
@@ -704,7 +712,7 @@
const gchar *uri)
{
GList *mime_apps;
- GnomeVFSMimeApplication *mime_app;
+ GAppInfo *mime_app;
gchar *mime_type;
gint idx;
AnjutaPluginDescription *desc;
@@ -716,7 +724,7 @@
plugin_manager = anjuta_shell_get_plugin_manager (ANJUTA_PLUGIN (plugin)->shell,
NULL);
mime_type = anjuta_util_get_uri_mime_type (uri);
- mime_apps = gnome_vfs_mime_get_all_applications (mime_type);
+ mime_apps = g_app_info_get_all_for_type (mime_type);
/* Open with plugin */
if (desc)
@@ -752,18 +760,21 @@
else
{
GList *uris = NULL;
- GnomeVFSResult res;
+ GError *error = NULL;
mime_app = g_list_nth_data (mime_apps, idx);
uris = g_list_prepend (uris, (gpointer)uri);
- res = gnome_vfs_mime_application_launch (mime_app, uris);
- if (res != GNOME_VFS_OK)
- launch_application_failure (plugin, uri, res);
+ g_app_info_launch_uris (mime_app, uris, NULL, &error);
+ if (error)
+ {
+ launch_application_failure (plugin, uri, error->message);
+ g_error_free (error);
+ }
else
set_recent_file (plugin, uri, mime_type);
g_list_free (uris);
}
- gnome_vfs_mime_application_list_free (mime_apps);
+ g_list_free (mime_apps);
g_free (mime_type);
}
@@ -849,7 +860,7 @@
gpointer callback_data)
{
GList *mime_apps, *node;
- GnomeVFSMimeApplication *mime_app;
+ GAppInfo *mime_app;
GList *plugin_descs, *snode;
GtkWidget *menu, *menuitem;
gchar *mime_type;
@@ -902,7 +913,7 @@
}
/* Open with applications */
- mime_apps = gnome_vfs_mime_get_all_applications (mime_type);
+ mime_apps = g_app_info_get_all_for_type (mime_type);
if (idx > 0 && mime_apps)
{
menuitem = gtk_menu_item_new ();
@@ -914,12 +925,15 @@
node = mime_apps;
while (node)
{
- mime_app = (GnomeVFSMimeApplication *)(node->data);
- menuitem = gtk_menu_item_new_with_label (mime_app->name);
- g_object_set_data (G_OBJECT (menuitem), "index", GINT_TO_POINTER (idx));
- g_signal_connect (G_OBJECT (menuitem), "activate",
- G_CALLBACK (callback), callback_data);
- gtk_menu_append (menu, menuitem);
+ mime_app = (GAppInfo *)(node->data);
+ if (g_app_info_should_show (mime_app))
+ {
+ menuitem = gtk_menu_item_new_with_label ( g_app_info_get_name (mime_app));
+ g_object_set_data (G_OBJECT (menuitem), "index", GINT_TO_POINTER (idx));
+ g_signal_connect (G_OBJECT (menuitem), "activate",
+ G_CALLBACK (callback), callback_data);
+ gtk_menu_append (menu, menuitem);
+ }
node = g_list_next (node);
idx++;
}
@@ -930,7 +944,8 @@
else
ret = TRUE;
- gnome_vfs_mime_application_list_free (mime_apps);
+ g_list_foreach (mime_apps, (GFunc) g_object_unref, NULL);
+ g_list_free (mime_apps);
if (plugin_descs)
g_list_free (plugin_descs);
@@ -1323,39 +1338,51 @@
klass->finalize = finalize;
}
+static gchar*
+hide_fragment_identifier (const gchar *uri)
+{
+ gchar *new_uri;
+
+ new_uri = g_strdup (uri);
+ if (strchr (new_uri, '#'))
+ *(strchr (new_uri, '#')) = '\0';
+
+ return new_uri;
+}
+
static GObject*
iloader_load (IAnjutaFileLoader *loader, GFile* file,
gboolean read_only, GError **err)
{
gchar *mime_type;
gchar *new_uri;
- GnomeVFSURI* vfs_uri;
AnjutaStatus *status;
AnjutaPluginManager *plugin_manager;
GList *plugin_descs = NULL;
GObject *plugin = NULL;
- gchar* uri = g_file_get_uri (file);
+ gchar *uri = g_file_get_uri (file);
g_return_val_if_fail (uri != NULL, NULL);
- vfs_uri = gnome_vfs_uri_new (uri);
+
+ new_uri = hide_fragment_identifier (uri);
+ GFile *file2 = g_file_new_for_uri (new_uri);
- if (!gnome_vfs_uri_exists (vfs_uri))
+ if (!g_file_query_exists (file2, NULL))
{
launch_application_failure (ANJUTA_PLUGIN_FILE_LOADER (loader),
- uri, GNOME_VFS_ERROR_NOT_FOUND);
- gnome_vfs_uri_unref (vfs_uri);
+ uri, _("File not found"));
+ g_object_unref (G_OBJECT (file2));
return NULL;
}
+ g_object_unref (G_OBJECT (file2));
- new_uri = gnome_vfs_uri_to_string (vfs_uri,
- GNOME_VFS_URI_HIDE_FRAGMENT_IDENTIFIER);
+ new_uri = hide_fragment_identifier (uri);
mime_type = anjuta_util_get_uri_mime_type (new_uri);
- gnome_vfs_uri_unref (vfs_uri);
if (mime_type == NULL)
{
launch_application_failure (ANJUTA_PLUGIN_FILE_LOADER (loader),
- new_uri, GNOME_VFS_ERROR_NOT_FOUND);
+ new_uri, _("File not found"));
g_free (new_uri);
return NULL;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]