[nautilus/wip/csoriano/search-popover: 11/13] search: export mime types utilities



commit ac955a26247cd6f0a909f3abe19fb9e362adeae1
Author: Carlos Soriano <csoriano gnome org>
Date:   Wed Feb 3 13:59:30 2016 +0100

    search: export mime types utilities
    
    Use the same mimetypes utilities and extract the functions to
    mime-actions to clean it up and being able to be used outside of
    the search popover class.

 src/nautilus-mime-actions.c   |  180 ++++++++++++++++++++++++++++++++++-
 src/nautilus-mime-actions.h   |    4 +
 src/nautilus-query-editor.c   |   14 +++-
 src/nautilus-search-popover.c |  214 ++++++-----------------------------------
 4 files changed, 225 insertions(+), 187 deletions(-)
---
diff --git a/src/nautilus-mime-actions.c b/src/nautilus-mime-actions.c
index 6b47d4e..982dd6f 100644
--- a/src/nautilus-mime-actions.c
+++ b/src/nautilus-mime-actions.c
@@ -1,4 +1,4 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */
 
 /* nautilus-mime-actions.c - uri-specific versions of mime action functions
 
@@ -31,6 +31,7 @@
 #include <eel/eel-glib-extensions.h>
 #include <eel/eel-stock-dialogs.h>
 #include <eel/eel-string.h>
+#include <glib.h>
 #include <glib/gi18n.h>
 #include <glib/gstdio.h>
 #include <string.h>
@@ -86,6 +87,150 @@ typedef struct {
        gboolean user_confirmation;
 } ActivateParameters;
 
+struct {
+  char *name;
+  char *mimetypes[20];
+} mimetype_groups[] = {
+  {
+    N_("Anything"),
+    { NULL }
+  },
+  {
+    N_("Files"),
+    { "application/octet-stream",
+      "text/plain",
+      NULL
+    }
+  },
+  {
+    N_("Folders"),
+    { "inode/directory",
+      NULL
+    }
+  },
+  { N_("Documents"),
+    { "application/rtf",
+      "application/msword",
+      "application/vnd.sun.xml.writer",
+      "application/vnd.sun.xml.writer.global",
+      "application/vnd.sun.xml.writer.template",
+      "application/vnd.oasis.opendocument.text",
+      "application/vnd.oasis.opendocument.text-template",
+      "application/x-abiword",
+      "application/x-applix-word",
+      "application/x-mswrite",
+      "application/docbook+xml",
+      "application/x-kword",
+      "application/x-kword-crypt",
+      "application/x-lyx",
+      NULL
+    }
+  },
+  { N_("Illustration"),
+    { "application/illustrator",
+      "application/vnd.corel-draw",
+      "application/vnd.stardivision.draw",
+      "application/vnd.oasis.opendocument.graphics",
+      "application/x-dia-diagram",
+      "application/x-karbon",
+      "application/x-killustrator",
+      "application/x-kivio",
+      "application/x-kontour",
+      "application/x-wpg",
+      NULL
+    }
+  },
+  { N_("Music"),
+    { "application/ogg",
+      "audio/x-vorbis+ogg",
+      "audio/ac3",
+      "audio/basic",
+      "audio/midi",
+      "audio/x-flac",
+      "audio/mp4",
+      "audio/mpeg",
+      "audio/x-mpeg",
+      "audio/x-ms-asx",
+      "audio/x-pn-realaudio",
+      NULL
+    }
+  },
+  { N_("PDF / Postscript"),
+    { "application/pdf",
+      "application/postscript",
+      "application/x-dvi",
+      "image/x-eps",
+      NULL
+    }
+  },
+  { N_("Picture"),
+    { "application/vnd.oasis.opendocument.image",
+      "application/x-krita",
+      "image/bmp",
+      "image/cgm",
+      "image/gif",
+      "image/jpeg",
+      "image/jpeg2000",
+      "image/png",
+      "image/svg+xml",
+      "image/tiff",
+      "image/x-compressed-xcf",
+      "image/x-pcx",
+      "image/x-photo-cd",
+      "image/x-psd",
+      "image/x-tga",
+      "image/x-xcf",
+      NULL
+    }
+  },
+  { N_("Presentation"),
+    { "application/vnd.ms-powerpoint",
+      "application/vnd.sun.xml.impress",
+      "application/vnd.oasis.opendocument.presentation",
+      "application/x-magicpoint",
+      "application/x-kpresenter",
+      NULL
+    }
+  },
+  { N_("Spreadsheet"),
+    { "application/vnd.lotus-1-2-3",
+      "application/vnd.ms-excel",
+      "application/vnd.stardivision.calc",
+      "application/vnd.sun.xml.calc",
+      "application/vnd.oasis.opendocument.spreadsheet",
+      "application/x-applix-spreadsheet",
+      "application/x-gnumeric",
+      "application/x-kspread",
+      "application/x-kspread-crypt",
+      "application/x-quattropro",
+      "application/x-sc",
+      "application/x-siag",
+      NULL
+    }
+  },
+  { N_("Text File"),
+    { "text/plain",
+      NULL
+    }
+  },
+  { N_("Video"),
+    { "video/mp4",
+      "video/3gpp",
+      "video/mpeg",
+      "video/quicktime",
+      "video/vivo",
+      "video/x-avi",
+      "video/x-mng",
+      "video/x-ms-asf",
+      "video/x-ms-wmv",
+      "video/x-msvideo",
+      "video/x-nsv",
+      "video/x-real-video",
+      NULL
+    }
+  }
+};
+
 /* Number of seconds until cancel dialog shows up */
 #define DELAY_UNTIL_CANCEL_MSECS 5000
 
@@ -2131,3 +2276,36 @@ nautilus_mime_activate_file (GtkWindow *parent_window,
        nautilus_mime_activate_files (parent_window, slot, files, launch_directory, flags, FALSE);
        g_list_free (files);
 }
+
+gint
+nautilus_mime_types_get_number_of_groups (void)
+{
+  return G_N_ELEMENTS (mimetype_groups);
+}
+
+const gchar*
+nautilus_mime_types_group_get_name (gint group_index)
+{
+  g_return_val_if_fail (group_index < G_N_ELEMENTS (mimetype_groups), NULL);
+
+  return gettext (mimetype_groups[group_index].name);
+}
+
+GList*
+nautilus_mime_types_group_get_mimetypes (gint group_index)
+{
+  GList *mimetypes;
+  gint i;
+
+  g_return_val_if_fail (group_index < G_N_ELEMENTS (mimetype_groups), NULL);
+
+  mimetypes = NULL;
+
+  /* Setup the new mimetypes set */
+  for (i = 0; mimetype_groups[group_index].mimetypes[i]; i++)
+  {
+    mimetypes = g_list_append (mimetypes, mimetype_groups[group_index].mimetypes[i]);
+  }
+
+  return mimetypes;
+}
diff --git a/src/nautilus-mime-actions.h b/src/nautilus-mime-actions.h
index c4e21ea..f1439e0 100644
--- a/src/nautilus-mime-actions.h
+++ b/src/nautilus-mime-actions.h
@@ -25,6 +25,7 @@
 #define NAUTILUS_MIME_ACTIONS_H
 
 #include <gio/gio.h>
+#include <glib/gi18n.h>
 
 #include <libnautilus-private/nautilus-file.h>
 
@@ -51,6 +52,9 @@ void                   nautilus_mime_activate_file                        (GtkWi
                                                                           NautilusFile            *file,
                                                                           const char              
*launch_directory,
                                                                           NautilusWindowOpenFlags  flags);
+gint                   nautilus_mime_types_get_number_of_groups           (void);
+const gchar*           nautilus_mime_types_group_get_name                 (gint                     
group_index);
+GList*                 nautilus_mime_types_group_get_mimetypes            (gint                     
group_index);
 
 
 #endif /* NAUTILUS_MIME_ACTIONS_H */
diff --git a/src/nautilus-query-editor.c b/src/nautilus-query-editor.c
index a31a697..41430d0 100644
--- a/src/nautilus-query-editor.c
+++ b/src/nautilus-query-editor.c
@@ -24,6 +24,7 @@
 #include <config.h>
 #include "nautilus-query-editor.h"
 #include "nautilus-search-popover.h"
+#include "nautilus-mime-actions.h"
 
 #include <string.h>
 #include <glib/gi18n.h>
@@ -443,18 +444,27 @@ search_popover_date_range_changed_cb (NautilusSearchPopover *popover,
 
 static void
 search_popover_mime_type_changed_cb (NautilusSearchPopover *popover,
-                                     GList                 *data,
+                                     gint                   mimetype_group,
+                                     const gchar           *mimetype,
                                      NautilusQueryEditor   *editor)
 {
         NautilusQueryEditorPrivate *priv;
+        GList *mimetypes;
 
         priv = nautilus_query_editor_get_instance_private (NAUTILUS_QUERY_EDITOR (editor));
         if (!priv->query)
                 create_query (editor);
 
-        nautilus_query_set_mime_types (priv->query, data);
+        if (mimetype_group >= 0) {
+                mimetypes = nautilus_mime_types_group_get_mimetypes (mimetype_group);
+        } else {
+                mimetypes = g_list_append (NULL, (gpointer) mimetype);
+        }
+        nautilus_query_set_mime_types (priv->query, mimetypes);
 
         nautilus_query_editor_changed (editor);
+
+        g_list_free (mimetypes);
 }
 
 static void
diff --git a/src/nautilus-search-popover.c b/src/nautilus-search-popover.c
index 17e825f..2e3d9cb 100644
--- a/src/nautilus-search-popover.c
+++ b/src/nautilus-search-popover.c
@@ -18,6 +18,7 @@
 
 #include "nautilus-enum-types.h"
 #include "nautilus-search-popover.h"
+#include "nautilus-mime-actions.h"
 
 #include <glib/gi18n.h>
 #include <libnautilus-private/nautilus-file.h>
@@ -74,150 +75,6 @@ enum {
 
 static guint signals[LAST_SIGNAL];
 
-struct {
-  char *name;
-  char *mimetypes[20];
-} mimetype_groups[] = {
-  {
-    N_("Anything"),
-    { NULL }
-  },
-  {
-    N_("Files"),
-    { "application/octet-stream",
-      "text/plain",
-      NULL
-    }
-  },
-  {
-    N_("Folders"),
-    { "inode/directory",
-      NULL
-    }
-  },
-  { N_("Documents"),
-    { "application/rtf",
-      "application/msword",
-      "application/vnd.sun.xml.writer",
-      "application/vnd.sun.xml.writer.global",
-      "application/vnd.sun.xml.writer.template",
-      "application/vnd.oasis.opendocument.text",
-      "application/vnd.oasis.opendocument.text-template",
-      "application/x-abiword",
-      "application/x-applix-word",
-      "application/x-mswrite",
-      "application/docbook+xml",
-      "application/x-kword",
-      "application/x-kword-crypt",
-      "application/x-lyx",
-      NULL
-    }
-  },
-  { N_("Illustration"),
-    { "application/illustrator",
-      "application/vnd.corel-draw",
-      "application/vnd.stardivision.draw",
-      "application/vnd.oasis.opendocument.graphics",
-      "application/x-dia-diagram",
-      "application/x-karbon",
-      "application/x-killustrator",
-      "application/x-kivio",
-      "application/x-kontour",
-      "application/x-wpg",
-      NULL
-    }
-  },
-  { N_("Music"),
-    { "application/ogg",
-      "audio/x-vorbis+ogg",
-      "audio/ac3",
-      "audio/basic",
-      "audio/midi",
-      "audio/x-flac",
-      "audio/mp4",
-      "audio/mpeg",
-      "audio/x-mpeg",
-      "audio/x-ms-asx",
-      "audio/x-pn-realaudio",
-      NULL
-    }
-  },
-  { N_("PDF / Postscript"),
-    { "application/pdf",
-      "application/postscript",
-      "application/x-dvi",
-      "image/x-eps",
-      NULL
-    }
-  },
-  { N_("Picture"),
-    { "application/vnd.oasis.opendocument.image",
-      "application/x-krita",
-      "image/bmp",
-      "image/cgm",
-      "image/gif",
-      "image/jpeg",
-      "image/jpeg2000",
-      "image/png",
-      "image/svg+xml",
-      "image/tiff",
-      "image/x-compressed-xcf",
-      "image/x-pcx",
-      "image/x-photo-cd",
-      "image/x-psd",
-      "image/x-tga",
-      "image/x-xcf",
-      NULL
-    }
-  },
-  { N_("Presentation"),
-    { "application/vnd.ms-powerpoint",
-      "application/vnd.sun.xml.impress",
-      "application/vnd.oasis.opendocument.presentation",
-      "application/x-magicpoint",
-      "application/x-kpresenter",
-      NULL
-    }
-  },
-  { N_("Spreadsheet"),
-    { "application/vnd.lotus-1-2-3",
-      "application/vnd.ms-excel",
-      "application/vnd.stardivision.calc",
-      "application/vnd.sun.xml.calc",
-      "application/vnd.oasis.opendocument.spreadsheet",
-      "application/x-applix-spreadsheet",
-      "application/x-gnumeric",
-      "application/x-kspread",
-      "application/x-kspread-crypt",
-      "application/x-quattropro",
-      "application/x-sc",
-      "application/x-siag",
-      NULL
-    }
-  },
-  { N_("Text File"),
-    { "text/plain",
-      NULL
-    }
-  },
-  { N_("Video"),
-    { "video/mp4",
-      "video/3gpp",
-      "video/mpeg",
-      "video/quicktime",
-      "video/vivo",
-      "video/x-avi",
-      "video/x-mng",
-      "video/x-ms-asf",
-      "video/x-ms-wmv",
-      "video/x-msvideo",
-      "video/x-nsv",
-      "video/x-real-video",
-      NULL
-    }
-  }
-};
-
 
 /* Callbacks */
 
@@ -459,22 +316,10 @@ types_listbox_row_activated (GtkListBox            *listbox,
     }
   else
     {
-      GList *mimetypes;
-      gint i;
-
-      mimetypes = NULL;
-
-      /* Setup the new mimetypes set */
-      for (i = 0; mimetype_groups[group].mimetypes[i]; i++)
-        {
-          mimetypes = g_list_append (mimetypes, mimetype_groups[group].mimetypes[i]);
-        }
-
-      gtk_label_set_label (GTK_LABEL (popover->type_label), gettext (mimetype_groups[group].name));
-
-      g_signal_emit_by_name (popover, "mime-type", mimetypes, NULL);
+      gtk_label_set_label (GTK_LABEL (popover->type_label),
+                           nautilus_mime_types_group_get_name (group));
 
-      g_list_free (mimetypes);
+      g_signal_emit_by_name (popover, "mime-type", group, NULL);
     }
 
   gtk_stack_set_visible_child_name (GTK_STACK (popover->type_stack), "type-button");
@@ -619,15 +464,17 @@ fill_types_listbox (NautilusSearchPopover *popover)
 {
   GtkWidget *row;
   int i;
+  gint n_groups;
 
+  n_groups = nautilus_mime_types_get_number_of_groups ();
   /* Mimetypes */
-  for (i = 0; i < G_N_ELEMENTS (mimetype_groups); i++)
+  for (i = 0; i < n_groups; i++)
     {
 
       /* On the third row, which is right below "Folders", there should be an
        * separator to logically group the types.
        */
-      row = create_row_for_label (gettext (mimetype_groups[i].name), i == 3);
+      row = create_row_for_label (nautilus_mime_types_group_get_name (i), i == 3);
       g_object_set_data (G_OBJECT (row), "mimetype-group", GINT_TO_POINTER (i));
 
       gtk_container_add (GTK_CONTAINER (popover->type_listbox), row);
@@ -734,8 +581,8 @@ show_other_types_dialog (NautilusSearchPopover *popover)
   if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
     {
       GtkTreeIter iter;
-      GList *mimetypes;
-      char *mimetype, *description;
+      char *mimetype;
+      char *description;
 
       gtk_tree_selection_get_selected (selection, NULL, &iter);
       gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
@@ -743,11 +590,9 @@ show_other_types_dialog (NautilusSearchPopover *popover)
               1, &mimetype,
               -1);
 
-      mimetypes = g_list_append (NULL, mimetype);
-
       gtk_label_set_label (GTK_LABEL (popover->type_label), description);
 
-      g_signal_emit_by_name (popover, "mime-type", mimetypes, NULL);
+      g_signal_emit_by_name (popover, "mime-type", -1, mimetype);
 
       gtk_stack_set_visible_child_name (GTK_STACK (popover->type_stack), "type-button");
     }
@@ -889,26 +734,27 @@ nautilus_search_popover_class_init (NautilusSearchPopoverClass *klass)
                                       G_TYPE_POINTER);
 
   signals[MIME_TYPE] = g_signal_new ("mime-type",
-                                      NAUTILUS_TYPE_SEARCH_POPOVER,
-                                      G_SIGNAL_RUN_LAST,
-                                      0,
-                                      NULL,
-                                      NULL,
-                                      g_cclosure_marshal_generic,
-                                      G_TYPE_NONE,
-                                      1,
-                                      G_TYPE_POINTER);
+                                     NAUTILUS_TYPE_SEARCH_POPOVER,
+                                     G_SIGNAL_RUN_LAST,
+                                     0,
+                                     NULL,
+                                     NULL,
+                                     g_cclosure_marshal_generic,
+                                     G_TYPE_NONE,
+                                     2,
+                                     G_TYPE_INT,
+                                     G_TYPE_POINTER);
 
   signals[TIME_TYPE] = g_signal_new ("time-type",
-                                      NAUTILUS_TYPE_SEARCH_POPOVER,
-                                      G_SIGNAL_RUN_LAST,
-                                      0,
-                                      NULL,
-                                      NULL,
-                                      g_cclosure_marshal_generic,
-                                      G_TYPE_NONE,
-                                      1,
-                                      G_TYPE_INT);
+                                     NAUTILUS_TYPE_SEARCH_POPOVER,
+                                     G_SIGNAL_RUN_LAST,
+                                     0,
+                                     NULL,
+                                     NULL,
+                                     g_cclosure_marshal_generic,
+                                     G_TYPE_NONE,
+                                     1,
+                                     G_TYPE_INT);
 
   /**
    * NautilusSearchPopover::query:


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]