[nautilus-sendto] Plugin API cleanup
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus-sendto] Plugin API cleanup
- Date: Wed, 22 Sep 2010 10:04:55 +0000 (UTC)
commit 2577cef482a3b2dcc3b921b796e7f0f438adf2f1
Author: Salomon Sickert <sickert in tum de>
Date: Tue Sep 21 12:56:00 2010 +0200
Plugin API cleanup
Rename supports_mime_type to create_widgets, and simply don't
create widgets when the mime-types are not supported.
src/nautilus-sendto-command.c | 13 ++-----
src/plugins/evolution/evolution.c | 13 +++----
src/plugins/nautilus-sendto-plugin.c | 23 +++++-------
src/plugins/nautilus-sendto-plugin.h | 39 ++++++++++++---------
src/plugins/removable-devices/removable-devices.c | 14 +++----
src/plugins/socialweb/socialweb.c | 22 +++++-------
6 files changed, 56 insertions(+), 68 deletions(-)
---
diff --git a/src/nautilus-sendto-command.c b/src/nautilus-sendto-command.c
index ddcc194..dda6bfc 100644
--- a/src/nautilus-sendto-command.c
+++ b/src/nautilus-sendto-command.c
@@ -237,11 +237,11 @@ separator_func (GtkTreeModel *model,
static void
add_widget_cb (NautilusSendtoPlugin *plugin,
+ const char *id,
const char *name,
const char *icon_name,
- const char *id,
GtkWidget *widget,
- NautilusSendto *nst)
+ NautilusSendto *nst)
{
GdkPixbuf *pixbuf;
GtkWidget *label;
@@ -324,7 +324,6 @@ set_model_for_options_treeview (NautilusSendto *nst)
PeasPluginInfo *info;
PeasExtension *ext;
const char *id;
- gboolean supported;
GObject *object;
info = peas_engine_get_plugin_info (engine, list[i]);
@@ -342,13 +341,7 @@ set_model_for_options_treeview (NautilusSendto *nst)
G_CALLBACK (add_widget_cb), nst);
g_signal_connect (object, "can-send",
G_CALLBACK (can_send_cb), nst);
-
- /* Check if the plugin supports the mime-types of the files we have */
- if (peas_extension_call (ext, "supports_mime_types",
- nst->file_list, nst->mime_types, &supported) == FALSE ||
- supported == FALSE) {
- g_message ("'%s' does not support mime-types", id);
- }
+ peas_extension_call (ext, "create_widgets", nst->file_list, nst->mime_types);
}
g_strfreev (list);
diff --git a/src/plugins/evolution/evolution.c b/src/plugins/evolution/evolution.c
index bf6a206..ac4d6aa 100644
--- a/src/plugins/evolution/evolution.c
+++ b/src/plugins/evolution/evolution.c
@@ -284,10 +284,10 @@ evolution_plugin_get_widget (NautilusSendtoPlugin *plugin,
return p->vbox;
}
-static gboolean
-evolution_plugin_supports_mime_types (NautilusSendtoPlugin *plugin,
- GList *file_list,
- const char **mime_types)
+static void
+evolution_plugin_create_widgets (NautilusSendtoPlugin *plugin,
+ GList *file_list,
+ const char **mime_types)
{
EvolutionPlugin *p;
guint i;
@@ -295,7 +295,7 @@ evolution_plugin_supports_mime_types (NautilusSendtoPlugin *plugin,
p = EVOLUTION_PLUGIN (plugin);
if (p->mail_cmd == NULL)
- return FALSE;
+ return;
for (i = 0; mime_types[i] != NULL; i++) {
if (g_str_equal (mime_types[i], "inode/directory"))
@@ -304,16 +304,15 @@ evolution_plugin_supports_mime_types (NautilusSendtoPlugin *plugin,
g_signal_emit_by_name (G_OBJECT (plugin),
"add-widget",
+ "evolution",
_("Mail"),
"emblem-mail",
- "evolution",
evolution_plugin_get_widget (plugin, file_list));
g_signal_emit_by_name (G_OBJECT (p),
"can-send",
"evolution",
TRUE);
- return TRUE;
}
static void
diff --git a/src/plugins/nautilus-sendto-plugin.c b/src/plugins/nautilus-sendto-plugin.c
index 8d43e1d..2c66e2c 100644
--- a/src/plugins/nautilus-sendto-plugin.c
+++ b/src/plugins/nautilus-sendto-plugin.c
@@ -60,30 +60,27 @@ nautilus_sendto_plugin_get_object (NautilusSendtoPlugin *plugin)
}
/**
- * nautilus_sendto_plugin_supports_mime_types:
+ * nautilus_sendto_plugin_create_widgets:
* @plugin: a #NautilusSendtoPlugin instance
* @file_list: (element-type utf8): a #GList of strings representing the files to send
* @mime_types: a list of mime-types for the file types to send.
*
- * Returns a #gboolean.
- *
- * Return value: %FALSE if one or more of the mime_types cannot be sent through that plugin.
+ * Causes the plugin to create its widgets, if all mime types are supported.
+ * The new widgets are returned via add-widget signal.
*/
-gboolean
-nautilus_sendto_plugin_supports_mime_types (NautilusSendtoPlugin *plugin,
- GList *file_list,
- const char **mime_types)
+void
+nautilus_sendto_plugin_create_widgets (NautilusSendtoPlugin *plugin,
+ GList *file_list,
+ const char **mime_types)
{
NautilusSendtoPluginInterface *iface;
- g_return_val_if_fail (NAUTILUS_SENDTO_IS_PLUGIN (plugin), FALSE);
+ g_return_if_fail (NAUTILUS_SENDTO_IS_PLUGIN (plugin));
iface = NAUTILUS_SENDTO_PLUGIN_GET_IFACE (plugin);
- if (G_LIKELY (iface->supports_mime_types != NULL))
- return iface->supports_mime_types (plugin, file_list, mime_types);
-
- return FALSE;
+ if (G_LIKELY (iface->create_widgets != NULL))
+ iface->create_widgets (plugin, file_list, mime_types);
}
/**
diff --git a/src/plugins/nautilus-sendto-plugin.h b/src/plugins/nautilus-sendto-plugin.h
index 00a74e8..6cd673d 100644
--- a/src/plugins/nautilus-sendto-plugin.h
+++ b/src/plugins/nautilus-sendto-plugin.h
@@ -46,36 +46,41 @@ struct _NautilusSendtoPluginInterface
{
GTypeInterface g_iface;
- gboolean (*supports_mime_types) (NautilusSendtoPlugin *plugin,
- GList *file_list,
- const char **mime_types);
+ void (*create_widgets) (NautilusSendtoPlugin *plugin,
+ GList *file_list,
+ const char **mime_types);
+
void (*send_files) (NautilusSendtoPlugin *plugin,
- const char *id,
+ const char *id,
GList *file_list,
GAsyncReadyCallback callback,
gpointer user_data);
/* signals */
void (*add_widget) (NautilusSendtoPlugin *plugin,
+ const char *id,
const char *name,
const char *icon_name,
- const char *id,
GtkWidget *widget);
+
void (*can_send) (NautilusSendtoPlugin *plugin,
const char *id,
gboolean can_send);
};
-GType nautilus_sendto_plugin_get_type (void);
-GObject *nautilus_sendto_plugin_get_object (NautilusSendtoPlugin *plugin);
-gboolean nautilus_sendto_plugin_supports_mime_types (NautilusSendtoPlugin *plugin,
- GList *file_list,
- const char **mime_types);
-void nautilus_sendto_plugin_send_files (NautilusSendtoPlugin *plugin,
- const char *id,
- GList *file_list,
- GAsyncReadyCallback callback,
- gpointer user_data);
+GType nautilus_sendto_plugin_get_type (void);
+GObject *nautilus_sendto_plugin_get_object (NautilusSendtoPlugin *plugin);
+
+void nautilus_sendto_plugin_create_widgets (NautilusSendtoPlugin *plugin,
+ GList *file_list,
+ const char **mime_types);
+
+void nautilus_sendto_plugin_send_files (NautilusSendtoPlugin *plugin,
+ const char *id,
+ GList *file_list,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
NautilusSendtoSendStatus nautilus_sendto_plugin_send_files_finish (NautilusSendtoPlugin *plugin,
GAsyncResult *res,
GError **error);
@@ -84,7 +89,7 @@ NautilusSendtoSendStatus nautilus_sendto_plugin_send_files_finish (NautilusSendt
GType type_name##_get_type (void) G_GNUC_CONST; \
G_MODULE_EXPORT void peas_register_types (PeasObjectModule *module); \
static void type_name##_send_files (NautilusSendtoPlugin *plugin, const char *id, GList *file_list, GAsyncReadyCallback callback, gpointer user_data); \
- static gboolean type_name##_supports_mime_types (NautilusSendtoPlugin *plugin, GList *file_list, const char **mime_types); \
+ static void type_name##_create_widgets (NautilusSendtoPlugin *plugin, GList *file_list, const char **mime_types); \
static void nautilus_sendto_plugin_iface_init (NautilusSendtoPluginInterface *iface); \
static void type_name##_finalize (GObject *object); \
G_DEFINE_DYNAMIC_TYPE_EXTENDED (TypeName, \
@@ -97,7 +102,7 @@ NautilusSendtoSendStatus nautilus_sendto_plugin_send_files_finish (NautilusSendt
nautilus_sendto_plugin_iface_init (NautilusSendtoPluginInterface *iface) \
{ \
iface->send_files = type_name##_send_files; \
- iface->supports_mime_types = type_name##_supports_mime_types; \
+ iface->create_widgets = type_name##_create_widgets; \
} \
static void \
type_name##_class_init (TypeName##Class *klass) \
diff --git a/src/plugins/removable-devices/removable-devices.c b/src/plugins/removable-devices/removable-devices.c
index 184a46c..1e011a9 100644
--- a/src/plugins/removable-devices/removable-devices.c
+++ b/src/plugins/removable-devices/removable-devices.c
@@ -262,20 +262,18 @@ removable_devices_plugin_get_widget (NautilusSendtoPlugin *plugin,
return box;
}
-static gboolean
-removable_devices_plugin_supports_mime_types (NautilusSendtoPlugin *plugin,
- GList *file_list,
- const char **mime_types)
+static void
+removable_devices_plugin_create_widgets (NautilusSendtoPlugin *plugin,
+ GList *file_list,
+ const char **mime_types)
{
+ /* All the mime-types are supported */
g_signal_emit_by_name (G_OBJECT (plugin),
"add-widget",
+ "removable-devices",
_("Removable disks and shares"),
"folder-remote",
- "removable-devices",
removable_devices_plugin_get_widget (plugin, file_list));
-
- /* All the mime-types are supported */
- return TRUE;
}
static void
diff --git a/src/plugins/socialweb/socialweb.c b/src/plugins/socialweb/socialweb.c
index d15754c..917e454 100644
--- a/src/plugins/socialweb/socialweb.c
+++ b/src/plugins/socialweb/socialweb.c
@@ -232,9 +232,9 @@ got_dynamic_caps_cb (SwClientService *service,
g_signal_emit_by_name (G_OBJECT (plugin),
"add-widget",
+ sw_client_service_get_name (service),
sw_client_service_get_display_name (service),
NULL, /* FIXME, icon name, see http://bugs.meego.com/show_bug.cgi?id=5944 */
- sw_client_service_get_name (service),
page->page);
g_signal_emit_by_name (G_OBJECT (plugin),
@@ -301,33 +301,29 @@ get_services_cb (SwClient *client,
}
}
-static gboolean
-socialweb_plugin_supports_mime_types (NautilusSendtoPlugin *plugin,
- GList *file_list,
- const char **mime_types)
+static void
+socialweb_plugin_create_widgets (NautilusSendtoPlugin *plugin,
+ GList *file_list,
+ const char **mime_types)
{
SocialwebPlugin *p = (SocialwebPlugin *) plugin;
- gboolean retval = FALSE;
if (g_strv_length ((char **) mime_types) != 1) {
- g_message ("more than one mime type");
- return FALSE;
+ /* FIXME: Handle mixed image types */
+ return;
} else if (g_str_equal (mime_types[0], "image/jpeg")) {
- retval = TRUE;
+ /* Do nothing */
} else if (g_content_type_is_a (mime_types[0], "image/*")) {
/* Some of the plugins, such as Facebook,
* don't support sending non-JPEG images */
p->has_non_photos = TRUE;
- retval = TRUE;
} else {
- return FALSE;
+ return;
}
sw_client_get_services (p->client,
(SwClientGetServicesCallback) get_services_cb,
plugin);
-
- return retval;
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]