diff options
author | Carlos Soriano <csoriano@gnome.org> | 2016-02-03 13:59:30 +0100 |
---|---|---|
committer | Carlos Soriano <csoriano@gnome.org> | 2016-02-03 16:33:55 +0100 |
commit | ac955a26247cd6f0a909f3abe19fb9e362adeae1 (patch) | |
tree | 18f2a2e6150ab0edb5079c447de562ca0f801d68 | |
parent | 1e447d8d7400cc459f914820dc77396dfee5c34c (diff) | |
download | nautilus-ac955a26247cd6f0a909f3abe19fb9e362adeae1.tar.gz |
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.
-rw-r--r-- | src/nautilus-mime-actions.c | 180 | ||||
-rw-r--r-- | src/nautilus-mime-actions.h | 4 | ||||
-rw-r--r-- | src/nautilus-query-editor.c | 14 | ||||
-rw-r--r-- | 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 6b47d4e53..982dd6f1c 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 c4e21ea31..f1439e0a4 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 a31a69750..41430d034 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 17e825f08..2e3d9cb33 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: |