summaryrefslogtreecommitdiff
path: root/libnautilus-extension/nautilus-menu-provider.c
diff options
context:
space:
mode:
Diffstat (limited to 'libnautilus-extension/nautilus-menu-provider.c')
-rw-r--r--libnautilus-extension/nautilus-menu-provider.c98
1 files changed, 37 insertions, 61 deletions
diff --git a/libnautilus-extension/nautilus-menu-provider.c b/libnautilus-extension/nautilus-menu-provider.c
index 05eb28a67..ead742bd7 100644
--- a/libnautilus-extension/nautilus-menu-provider.c
+++ b/libnautilus-extension/nautilus-menu-provider.c
@@ -25,64 +25,36 @@
#include <config.h>
#include "nautilus-menu-provider.h"
-#include <glib-object.h>
+G_DEFINE_INTERFACE (NautilusMenuProvider, nautilus_menu_provider, G_TYPE_OBJECT)
+
+enum
+{
+ ITEMS_UPDATED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
/**
* SECTION:nautilus-menu-provider
* @title: NautilusMenuProvider
* @short_description: Interface to provide additional menu items
- * @include: libnautilus-extension/nautilus-menu-provider.h
*
* #NautilusMenuProvider allows extension to provide additional menu items
* in the file manager menus.
*/
static void
-nautilus_menu_provider_base_init (gpointer g_class)
+nautilus_menu_provider_default_init (NautilusMenuProviderInterface *klass)
{
- static gboolean initialized = FALSE;
-
- if (!initialized)
- {
- /* This signal should be emited each time the extension modify the list of menu items */
- g_signal_new ("items-updated",
- NAUTILUS_TYPE_MENU_PROVIDER,
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
- initialized = TRUE;
- }
-}
-
-GType
-nautilus_menu_provider_get_type (void)
-{
- static GType type = 0;
-
- if (!type)
- {
- const GTypeInfo info =
- {
- sizeof (NautilusMenuProviderIface),
- nautilus_menu_provider_base_init,
- NULL,
- NULL,
- NULL,
- NULL,
- 0,
- 0,
- NULL
- };
-
- type = g_type_register_static (G_TYPE_INTERFACE,
- "NautilusMenuProvider",
- &info, 0);
- g_type_interface_add_prerequisite (type, G_TYPE_OBJECT);
- }
-
- return type;
+ /* This signal should be emited each time the extension modify the list of menu items */
+ signals[ITEMS_UPDATED] = g_signal_new ("items-updated",
+ NAUTILUS_TYPE_MENU_PROVIDER,
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
}
/**
@@ -98,17 +70,19 @@ nautilus_menu_provider_get_file_items (NautilusMenuProvider *provider,
GtkWidget *window,
GList *files)
{
+ NautilusMenuProviderInterface *iface;
+
+ iface = NAUTILUS_MENU_PROVIDER_GET_IFACE (provider);
+
g_return_val_if_fail (NAUTILUS_IS_MENU_PROVIDER (provider), NULL);
+ g_return_val_if_fail (GTK_IS_WIDGET (window), NULL);
- if (NAUTILUS_MENU_PROVIDER_GET_IFACE (provider)->get_file_items)
+ if (iface->get_file_items != NULL)
{
- return NAUTILUS_MENU_PROVIDER_GET_IFACE (provider)->get_file_items
- (provider, window, files);
- }
- else
- {
- return NULL;
+ return iface->get_file_items (provider, window, files);
}
+
+ return NULL;
}
/**
@@ -124,18 +98,20 @@ nautilus_menu_provider_get_background_items (NautilusMenuProvider *provider,
GtkWidget *window,
NautilusFileInfo *current_folder)
{
+ NautilusMenuProviderInterface *iface;
+
+ iface = NAUTILUS_MENU_PROVIDER_GET_IFACE (provider);
+
g_return_val_if_fail (NAUTILUS_IS_MENU_PROVIDER (provider), NULL);
+ g_return_val_if_fail (GTK_IS_WIDGET (window), NULL);
g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (current_folder), NULL);
- if (NAUTILUS_MENU_PROVIDER_GET_IFACE (provider)->get_background_items)
+ if (iface->get_background_items != NULL)
{
- return NAUTILUS_MENU_PROVIDER_GET_IFACE (provider)->get_background_items
- (provider, window, current_folder);
- }
- else
- {
- return NULL;
+ return iface->get_background_items (provider, window, current_folder);
}
+
+ return NULL;
}
/* This function emit a signal to inform nautilus that its item list has changed */
@@ -144,5 +120,5 @@ nautilus_menu_provider_emit_items_updated_signal (NautilusMenuProvider *provider
{
g_return_if_fail (NAUTILUS_IS_MENU_PROVIDER (provider));
- g_signal_emit_by_name (provider, "items-updated");
+ g_signal_emit (provider, ITEMS_UPDATED, 0);
}