[easytag] Use type definition macro for Nautilus extension
- From: David King <davidk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [easytag] Use type definition macro for Nautilus extension
- Date: Wed, 11 Jun 2014 19:50:10 +0000 (UTC)
commit 0b38bdc30c4cd8ece99d4893d63b60dfcc3e204e
Author: David King <amigadave amigadave com>
Date: Wed Jun 11 19:56:54 2014 +0100
Use type definition macro for Nautilus extension
Use G_DEFINE_DYNAMIC_TYPE_EXTENDED for the Nautilus extension, and move
all the code into a single file as a consequence.
Makefile.am | 4 +-
nautilus-extension/easytag-module.c | 42 ------
nautilus-extension/nautilus-easytag.c | 242 +++++++++++++++++----------------
nautilus-extension/nautilus-easytag.h | 48 -------
4 files changed, 128 insertions(+), 208 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index 66b47ae..3d00450 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -162,9 +162,7 @@ nautilus_extension_LTLIBRARIES = \
libnautilus-easytag.la
libnautilus_easytag_la_SOURCES = \
- nautilus-extension/easytag-module.c \
- nautilus-extension/nautilus-easytag.c \
- nautilus-extension/nautilus-easytag.h
+ nautilus-extension/nautilus-easytag.c
libnautilus_easytag_la_CPPFLAGS = \
-I$(top_srcdir) \
diff --git a/nautilus-extension/nautilus-easytag.c b/nautilus-extension/nautilus-easytag.c
index 0583613..6625bde 100644
--- a/nautilus-extension/nautilus-easytag.c
+++ b/nautilus-extension/nautilus-easytag.c
@@ -17,8 +17,6 @@
#include "config.h"
-#include "nautilus-easytag.h"
-
#include <string.h>
#include <gio/gio.h>
#include <gio/gdesktopappinfo.h>
@@ -27,61 +25,30 @@
#include <libnautilus-extension/nautilus-file-info.h>
#include <libnautilus-extension/nautilus-menu-provider.h>
-static GObjectClass *parent_class;
+#define NAUTILUS_TYPE_EASYTAG (nautilus_easytag_get_type ())
+#define NAUTILUS_EASYTAG(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NAUTILUS_TYPE_EASYTAG, NautilusEasytag))
+#define NAUTILUS_IS_EASYTAG(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NAUTILUS_TYPE_EASYTAG))
-void
-on_open_in_easytag (NautilusMenuItem *item,
- gpointer data)
-{
- NautilusFileInfo *dir;
- GList *uris = NULL;
- GdkDisplay *display = gdk_display_get_default ();
- GDesktopAppInfo *appinfo;
- GdkAppLaunchContext *context;
-
- dir = g_object_get_data (G_OBJECT (item), "dir");
-
- appinfo = g_desktop_app_info_new ("easytag.desktop");
-
- if (appinfo)
- {
- uris = g_list_append (uris, nautilus_file_info_get_uri (dir));
-
- context = gdk_display_get_app_launch_context (display);
-
- g_app_info_launch_uris (G_APP_INFO (appinfo), uris,
- G_APP_LAUNCH_CONTEXT (context), NULL);
- }
-}
+typedef struct _NautilusEasytag NautilusEasytag;
+typedef struct _NautilusEasytagClass NautilusEasytagClass;
-void
-on_open_with_easytag (NautilusMenuItem *item,
- gpointer data)
+struct _NautilusEasytag
{
- GList *files, *scan;
- GList *uris = NULL;
- GdkDisplay *display = gdk_display_get_default ();
- GDesktopAppInfo *appinfo;
- GdkAppLaunchContext *context;
-
- files = g_object_get_data (G_OBJECT (item), "files");
-
- appinfo = g_desktop_app_info_new ("easytag.desktop");
+ GObject parent;
+};
- if (appinfo)
- {
- for (scan = files; scan; scan = scan->next)
- {
- uris = g_list_append (uris,
- nautilus_file_info_get_uri (scan->data));
- }
+struct _NautilusEasytagClass
+{
+ GObjectClass parent_class;
+};
- context = gdk_display_get_app_launch_context (display);
+GType nautilus_easytag_get_type (void);
- g_app_info_launch_uris (G_APP_INFO (appinfo), uris,
- G_APP_LAUNCH_CONTEXT (context), NULL);
- }
-}
+typedef struct
+{
+ gboolean is_directory;
+ gboolean is_file;
+} FileMimeInfo;
static struct
{
@@ -104,11 +71,35 @@ static struct
{ NULL, FALSE }
};
-typedef struct
+static gboolean
+unsupported_scheme (NautilusFileInfo *file)
{
- gboolean is_directory;
- gboolean is_file;
-} FileMimeInfo;
+ gboolean result = FALSE;
+ GFile *location;
+ gchar *scheme;
+
+ location = nautilus_file_info_get_location (file);
+ scheme = g_file_get_uri_scheme (location);
+
+ if (scheme != NULL)
+ {
+ const gchar *unsupported[] = { "trash", "computer", NULL };
+ gsize i;
+
+ for (i = 0; unsupported[i] != NULL; i++)
+ {
+ if (strcmp (scheme, unsupported[i]) == 0)
+ {
+ result = TRUE;
+ }
+ }
+ }
+
+ g_free (scheme);
+ g_object_unref (location);
+
+ return result;
+}
static FileMimeInfo
get_file_mime_info (NautilusFileInfo *file)
@@ -134,34 +125,58 @@ get_file_mime_info (NautilusFileInfo *file)
return file_mime_info;
}
-static gboolean
-unsupported_scheme (NautilusFileInfo *file)
+static void
+on_open_in_easytag (NautilusMenuItem *item,
+ gpointer data)
{
- gboolean result = FALSE;
- GFile *location;
- gchar *scheme;
+ NautilusFileInfo *dir;
+ GDesktopAppInfo *appinfo;
- location = nautilus_file_info_get_location (file);
- scheme = g_file_get_uri_scheme (location);
+ dir = g_object_get_data (G_OBJECT (item), "dir");
- if (scheme != NULL)
+ appinfo = g_desktop_app_info_new ("easytag.desktop");
+
+ if (appinfo)
{
- const gchar *unsupported[] = { "trash", "computer", NULL };
- gsize i;
+ GdkAppLaunchContext *context;
+ GList *uris = NULL;
- for (i = 0; unsupported[i] != NULL; i++)
+ uris = g_list_append (uris, nautilus_file_info_get_uri (dir));
+ context = gdk_display_get_app_launch_context (gdk_display_get_default ());
+
+ g_app_info_launch_uris (G_APP_INFO (appinfo), uris,
+ G_APP_LAUNCH_CONTEXT (context), NULL);
+ }
+}
+
+static void
+on_open_with_easytag (NautilusMenuItem *item,
+ gpointer data)
+{
+ GList *files, *scan;
+ GDesktopAppInfo *appinfo;
+
+ files = g_object_get_data (G_OBJECT (item), "files");
+
+ appinfo = g_desktop_app_info_new ("easytag.desktop");
+
+ if (appinfo)
+ {
+ GdkAppLaunchContext *context;
+ GList *l;
+ GList *uris = NULL;
+
+ for (l = files; l != NULL; l = g_list_next (l))
{
- if (strcmp (scheme, unsupported[i]) == 0)
- {
- result = TRUE;
- }
+ uris = g_list_append (uris,
+ nautilus_file_info_get_uri (l->data));
}
- }
- g_free (scheme);
- g_object_unref (location);
+ context = gdk_display_get_app_launch_context (gdk_display_get_default ());
- return result;
+ g_app_info_launch_uris (G_APP_INFO (appinfo), uris,
+ G_APP_LAUNCH_CONTEXT (context), NULL);
+ }
}
static GList *
@@ -170,10 +185,10 @@ nautilus_easytag_get_file_items (NautilusMenuProvider *provider,
GList *files)
{
GList *items = NULL;
- GList *scan;
+ GList *l;
gboolean one_item;
- gboolean one_directory = TRUE;
- gboolean all_files = TRUE;
+ gboolean one_directory = TRUE;
+ gboolean all_files = TRUE;
if (files == NULL)
{
@@ -185,10 +200,10 @@ nautilus_easytag_get_file_items (NautilusMenuProvider *provider,
return NULL;
}
- for (scan = files; scan; scan = scan->next)
+ for (l = files; l != NULL; l = g_list_next (l))
{
- NautilusFileInfo *file = scan->data;
FileMimeInfo file_mime_info;
+ NautilusFileInfo *file = l->data;
file_mime_info = get_file_mime_info (file);
@@ -209,7 +224,7 @@ nautilus_easytag_get_file_items (NautilusMenuProvider *provider,
{
NautilusMenuItem *item;
- item = nautilus_menu_item_new ("NautilusEasyTag::open_directory",
+ item = nautilus_menu_item_new ("NautilusEasytag::open_directory",
_("Open in EasyTAG"),
_("Open the current selected directory in EasyTAG"),
"easytag");
@@ -227,7 +242,7 @@ nautilus_easytag_get_file_items (NautilusMenuProvider *provider,
{
NautilusMenuItem *item;
- item = nautilus_menu_item_new ("NautilusEasyTag::open_files",
+ item = nautilus_menu_item_new ("NautilusEasytag::open_files",
_("Open with EasyTAG"),
_("Open selected files in EasyTAG"),
"easytag");
@@ -252,51 +267,48 @@ nautilus_easytag_menu_provider_iface_init (NautilusMenuProviderIface *iface)
iface->get_file_items = nautilus_easytag_get_file_items;
}
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (NautilusEasytag,
+ nautilus_easytag,
+ G_TYPE_OBJECT,
+ 0,
+ G_IMPLEMENT_INTERFACE_DYNAMIC (NAUTILUS_TYPE_MENU_PROVIDER,
+ nautilus_easytag_menu_provider_iface_init));
+
static void
-nautilus_easytag_instance_init (NautilusEasyTag *fr)
+nautilus_easytag_init (NautilusEasytag *self)
{
}
static void
-nautilus_easytag_class_init (NautilusEasyTagClass *class)
+nautilus_easytag_class_init (NautilusEasytagClass *class)
{
- parent_class = g_type_class_peek_parent (class);
}
-GType easytag_type = 0;
+static void
+nautilus_easytag_class_finalize (NautilusEasytagClass *class)
+{
+}
-GType nautilus_easytag_get_type ()
+/* Nautilus extension module. */
+static GType type_list[1];
+
+void
+nautilus_module_initialize (GTypeModule *module)
+{
+ nautilus_easytag_register_type (module);
+
+ type_list[0] = NAUTILUS_TYPE_EASYTAG;
+}
+
+void
+nautilus_module_shutdown (void)
{
- return easytag_type;
}
-void nautilus_easytag_register_type (GTypeModule *module)
+void
+nautilus_module_list_types (const GType **types,
+ int *num_types)
{
- static const GTypeInfo info = {
- sizeof (NautilusEasyTagClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) nautilus_easytag_class_init,
- NULL,
- NULL,
- sizeof (NautilusEasyTag),
- 0,
- (GInstanceInitFunc) nautilus_easytag_instance_init,
- };
-
- static const GInterfaceInfo menu_provider_iface_info = {
- (GInterfaceInitFunc) nautilus_easytag_menu_provider_iface_init,
- NULL,
- NULL
- };
-
- easytag_type = g_type_module_register_type (module,
- G_TYPE_OBJECT,
- "NautilusEasyTag",
- &info, 0);
-
- g_type_module_add_interface (module,
- easytag_type,
- NAUTILUS_TYPE_MENU_PROVIDER,
- &menu_provider_iface_info);
+ *types = type_list;
+ *num_types = G_N_ELEMENTS (type_list);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]