summaryrefslogtreecommitdiffstats
path: root/extensions/image-properties/nautilus-image-properties-page-provider.c
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/image-properties/nautilus-image-properties-page-provider.c')
-rw-r--r--extensions/image-properties/nautilus-image-properties-page-provider.c136
1 files changed, 136 insertions, 0 deletions
diff --git a/extensions/image-properties/nautilus-image-properties-page-provider.c b/extensions/image-properties/nautilus-image-properties-page-provider.c
new file mode 100644
index 0000000..b270ea9
--- /dev/null
+++ b/extensions/image-properties/nautilus-image-properties-page-provider.c
@@ -0,0 +1,136 @@
+/* Copyright (C) 2004 Red Hat, Inc
+ * Copyright (c) 2007 Novell, Inc.
+ * Copyright (c) 2017 Thomas Bechtold <thomasbechtold@jpberlin.de>
+ * Copyright (c) 2018 Ernestas Kulik <ernestask@gnome.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ * XMP support by Hubert Figuiere <hfiguiere@novell.com>
+ */
+
+#include "nautilus-image-properties-page-provider.h"
+
+#include "nautilus-image-properties-page.h"
+
+#include <glib/gi18n.h>
+
+#include <nautilus-extension.h>
+
+#define NAUTILUS_IMAGE_PROPERTIES_PAGE_NAME "NautilusImagePropertiesPage::property_page"
+
+struct _NautilusImagesPropertiesPageProvider
+{
+ GObject parent_instance;
+};
+
+static void property_page_provider_iface_init (NautilusPropertyPageProviderInterface *iface);
+
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (NautilusImagesPropertiesPageProvider,
+ nautilus_image_properties_page_provider,
+ G_TYPE_OBJECT,
+ 0,
+ G_IMPLEMENT_INTERFACE_DYNAMIC (NAUTILUS_TYPE_PROPERTY_PAGE_PROVIDER,
+ property_page_provider_iface_init))
+
+static gboolean
+is_mime_type_supported (const char *mime_type)
+{
+ g_autoptr (GSList) formats = NULL;
+
+ if (mime_type == NULL)
+ {
+ return FALSE;
+ }
+
+ formats = gdk_pixbuf_get_formats ();
+
+ for (GSList *l = formats; l != NULL; l = l->next)
+ {
+ g_auto (GStrv) mime_types = NULL;
+
+ mime_types = gdk_pixbuf_format_get_mime_types (l->data);
+ if (mime_types == NULL)
+ {
+ continue;
+ }
+
+ if (g_strv_contains ((const char * const *) mime_types, mime_type))
+ {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static GList *
+get_pages (NautilusPropertyPageProvider *provider,
+ GList *files)
+{
+ NautilusFileInfo *file_info;
+ g_autofree char *mime_type = NULL;
+ NautilusImagesPropertiesPage *image_properties_page;
+ NautilusPropertyPage *property_page;
+
+ if (files == NULL || files->next != NULL)
+ {
+ return NULL;
+ }
+
+ file_info = NAUTILUS_FILE_INFO (files->data);
+ mime_type = nautilus_file_info_get_mime_type (file_info);
+ if (!is_mime_type_supported (mime_type))
+ {
+ return NULL;
+ }
+ image_properties_page = nautilus_image_properties_page_new ();
+ property_page = nautilus_property_page_new (NAUTILUS_IMAGE_PROPERTIES_PAGE_NAME,
+ gtk_label_new (_("Image")),
+ GTK_WIDGET (image_properties_page));
+
+ nautilus_image_properties_page_load_from_file_info (image_properties_page, file_info);
+
+ return g_list_prepend (NULL, property_page);
+}
+
+static void
+property_page_provider_iface_init (NautilusPropertyPageProviderInterface *iface)
+{
+ iface->get_pages = get_pages;
+}
+
+static void
+nautilus_image_properties_page_provider_init (NautilusImagesPropertiesPageProvider *self)
+{
+ (void) self;
+}
+
+static void
+nautilus_image_properties_page_provider_class_init (NautilusImagesPropertiesPageProviderClass *klass)
+{
+ (void) klass;
+}
+
+static void
+nautilus_image_properties_page_provider_class_finalize (NautilusImagesPropertiesPageProviderClass *klass)
+{
+ (void) klass;
+}
+
+void
+nautilus_image_properties_page_provider_load (GTypeModule *module)
+{
+ nautilus_image_properties_page_provider_register_type (module);
+}