summaryrefslogtreecommitdiff
path: root/libview/ev-stock-icons.c
diff options
context:
space:
mode:
Diffstat (limited to 'libview/ev-stock-icons.c')
-rw-r--r--libview/ev-stock-icons.c143
1 files changed, 143 insertions, 0 deletions
diff --git a/libview/ev-stock-icons.c b/libview/ev-stock-icons.c
new file mode 100644
index 00000000..47b3943e
--- /dev/null
+++ b/libview/ev-stock-icons.c
@@ -0,0 +1,143 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* Stock icons for Evince
+ *
+ * Copyright (C) 2003 Martin Kretzschmar
+ *
+ * Author:
+ * Martin Kretzschmar <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include <config.h>
+
+#include <gtk/gtk.h>
+
+#include "ev-stock-icons.h"
+
+typedef struct {
+ char *stock_id;
+ char *icon;
+} EvStockIcon;
+
+/* Evince stock icons */
+static const EvStockIcon stock_icons [] = {
+ { EV_STOCK_ZOOM, "zoom" },
+ { EV_STOCK_ZOOM_PAGE, "zoom-fit-height" },
+ { EV_STOCK_ZOOM_WIDTH, "zoom-fit-width" },
+ { EV_STOCK_VIEW_DUAL, "view-page-facing" },
+ { EV_STOCK_VIEW_CONTINUOUS, "view-page-continuous" },
+ { EV_STOCK_ROTATE_LEFT, "object-rotate-left"},
+ { EV_STOCK_ROTATE_RIGHT, "object-rotate-right"},
+ { EV_STOCK_RUN_PRESENTATION, "x-office-presentation"},
+ { EV_STOCK_VISIBLE, "eye"},
+ { EV_STOCK_RESIZE_SE, "resize-se"},
+ { EV_STOCK_RESIZE_SW, "resize-sw"},
+ { EV_STOCK_CLOSE, "close"},
+ { EV_STOCK_INVERTED_COLORS, "stock_filters-invert"},
+ { EV_STOCK_ATTACHMENT, "mail-attachment"}
+};
+
+static gchar *ev_icons_path;
+
+static void
+ev_stock_icons_add_icons_path_for_screen (GdkScreen *screen)
+{
+ GtkIconTheme *icon_theme;
+
+ g_return_if_fail (ev_icons_path != NULL);
+
+ icon_theme = screen ? gtk_icon_theme_get_for_screen (screen) : gtk_icon_theme_get_default ();
+ if (icon_theme) {
+ gchar **path = NULL;
+ gint n_paths;
+ gint i;
+
+ /* GtkIconTheme will then look in Evince custom hicolor dir
+ * for icons as well as the standard search paths
+ */
+ gtk_icon_theme_get_search_path (icon_theme, &path, &n_paths);
+ for (i = n_paths - 1; i >= 0; i--) {
+ if (g_ascii_strcasecmp (ev_icons_path, path[i]) == 0)
+ break;
+ }
+
+ if (i < 0)
+ gtk_icon_theme_append_search_path (icon_theme,
+ ev_icons_path);
+
+ g_strfreev (path);
+ }
+}
+
+/**
+ * ev_stock_icons_init:
+ *
+ * Creates a new icon factory, adding the base stock icons to it.
+ */
+void
+ev_stock_icons_init (void)
+{
+ GtkIconFactory *factory;
+ GtkIconSource *source;
+ gint i;
+#ifdef G_OS_WIN32
+ gchar *dir;
+
+ dir = g_win32_get_package_installation_directory_of_module (NULL);
+ ev_icons_path = g_build_filename (dir, "share", "evince", "icons", NULL);
+ g_free (dir);
+#else
+ ev_icons_path = g_build_filename (EVINCEDATADIR, "icons", NULL);
+#endif
+
+ factory = gtk_icon_factory_new ();
+ gtk_icon_factory_add_default (factory);
+
+ source = gtk_icon_source_new ();
+
+ for (i = 0; i < G_N_ELEMENTS (stock_icons); i++) {
+ GtkIconSet *set;
+
+ gtk_icon_source_set_icon_name (source, stock_icons [i].icon);
+
+ set = gtk_icon_set_new ();
+ gtk_icon_set_add_source (set, source);
+
+ gtk_icon_factory_add (factory, stock_icons [i].stock_id, set);
+ gtk_icon_set_unref (set);
+ }
+
+ gtk_icon_source_free (source);
+
+ g_object_unref (G_OBJECT (factory));
+
+ ev_stock_icons_add_icons_path_for_screen (gdk_screen_get_default ());
+}
+
+void
+ev_stock_icons_set_screen (GdkScreen *screen)
+{
+ g_return_if_fail (GDK_IS_SCREEN (screen));
+
+ ev_stock_icons_add_icons_path_for_screen (screen);
+}
+
+void
+ev_stock_icons_shutdown (void)
+{
+ g_free (ev_icons_path);
+}
+