[nautilus-sendto] Plugin API cleanup



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]