[easytag] Use type definition macro for Nautilus extension



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]