Trim trailing white spaces on empty lines.
[geeqie.git] / src / menu.c
index c7dafe8..7d493a8 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
 #include "collect.h"
 #include "collect-dlg.h"
 #include "dupe.h"
+#include "editors.h"
 #include "filedata.h"
 #include "img-view.h"
+#include "pixbuf_util.h"
 #include "preferences.h"
 #include "slideshow.h"
 #include "utilops.h"
@@ -52,9 +54,9 @@ static GtkWidget *add_menu_item(GtkWidget *menu, gchar *label, GtkAccelGroup *ac
 
 gpointer submenu_item_get_data(GtkWidget *menu)
 {
-       if (!menu->parent || !GTK_IS_MENU(menu->parent)) return NULL;
+       if (!gtk_widget_get_parent(menu) || !GTK_IS_MENU(gtk_widget_get_parent(menu))) return NULL;
 
-       return g_object_get_data(G_OBJECT(menu->parent), "submenu_data");
+       return g_object_get_data(G_OBJECT(gtk_widget_get_parent(menu)), "submenu_data");
 }
 
 /*
@@ -62,30 +64,44 @@ gpointer submenu_item_get_data(GtkWidget *menu)
  * edit menu
  *-----------------------------------------------------------------------------
  */
+static void edit_item_destroy_cb(GtkWidget *widget, gpointer data)
+{
+       g_free(data);
+}
 
-static void add_edit_items(GtkWidget *menu, GCallback func, GtkAccelGroup *accel_grp)
+static void add_edit_items(GtkWidget *menu, GCallback func, GList *fd_list)
 {
-       gint i;
+       GList *editors_list = editor_list_get();
+       GList *work = editors_list;
 
-       for (i = 0; i < GQ_EDITOR_GENERIC_SLOTS; i++)
+       while (work)
                {
-               if (options->editor_command[i] && strlen(options->editor_command[i]) > 0)
+               const EditorDescription *editor = work->data;
+               work = work->next;
+               gboolean active = TRUE;
+
+               if (fd_list && EDITOR_ERRORS(editor_command_parse(editor, fd_list, FALSE, NULL)))
+                       active = FALSE;
+
+               if (active)
                        {
-                       gchar *text;
-                       if (options->editor_name[i] && strlen(options->editor_name[i]) > 0)
-                               text = g_strdup_printf(_("_%d %s..."), i, options->editor_name[i]);
-                       else
-                               text = g_strdup_printf(_("_%d (unknown)..."), i);
-                       if (accel_grp)
-                               add_menu_item(menu, text, accel_grp, i + 49, GDK_CONTROL_MASK, func, GINT_TO_POINTER(i));
-                       else
-                               menu_item_add(menu, text, func, GINT_TO_POINTER(i));
-                       g_free(text);
+                       GtkWidget *item;
+                       const gchar *stock_id = NULL;
+                       gchar *key = g_strdup(editor->key);
+
+                       if (editor->icon && register_theme_icon_as_stock(key, editor->icon))
+                               stock_id = key;
+
+                       item = menu_item_add_stock(menu, editor->name, stock_id, func, key);
+                       g_signal_connect(G_OBJECT(item), "destroy", G_CALLBACK(edit_item_destroy_cb), key);
                        }
                }
+
+       g_list_free(editors_list);
 }
 
-GtkWidget *submenu_add_edit(GtkWidget *menu, GtkWidget **menu_item, GCallback func, gpointer data)
+
+GtkWidget *submenu_add_edit(GtkWidget *menu, GtkWidget **menu_item, GCallback func, gpointer data, GList *fd_list)
 {
        GtkWidget *item;
        GtkWidget *submenu;
@@ -94,7 +110,7 @@ GtkWidget *submenu_add_edit(GtkWidget *menu, GtkWidget **menu_item, GCallback fu
 
        submenu = gtk_menu_new();
        g_object_set_data(G_OBJECT(submenu), "submenu_data", data);
-       add_edit_items(submenu, func, NULL);
+       add_edit_items(submenu, func, fd_list);
 
        gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);
 
@@ -119,6 +135,9 @@ gchar *sort_type_get_text(SortType method)
                case SORT_TIME:
                        return _("Sort by date");
                        break;
+               case SORT_EXIFTIME:
+                       return _("Sort by Exif-date");
+                       break;
                case SORT_NONE:
                        return _("Unsorted");
                        break;
@@ -137,16 +156,16 @@ gchar *sort_type_get_text(SortType method)
        return "";
 }
 
-static GtkWidget *submenu_add_sort_item(GtkWidget *menu, GtkWidget *parent,
+static GtkWidget *submenu_add_sort_item(GtkWidget *menu,
                                        GCallback func, SortType type,
-                                       gint show_current, SortType show_type)
+                                       gboolean show_current, SortType show_type)
 {
        GtkWidget *item;
 
        if (show_current)
                {
-               item = menu_item_add_radio(menu, parent,
-                                          sort_type_get_text(type), (type == show_type),
+               item = menu_item_add_radio(menu,
+                                          sort_type_get_text(type), GINT_TO_POINTER((gint)type), (type == show_type),
                                           func, GINT_TO_POINTER((gint)type));
                }
        else
@@ -159,23 +178,23 @@ static GtkWidget *submenu_add_sort_item(GtkWidget *menu, GtkWidget *parent,
 }
 
 GtkWidget *submenu_add_sort(GtkWidget *menu, GCallback func, gpointer data,
-                           gint include_none, gint include_path,
-                           gint show_current, SortType type)
+                           gboolean include_none, gboolean include_path,
+                           gboolean show_current, SortType type)
 {
        GtkWidget *submenu;
-       GtkWidget *parent;
 
        submenu = gtk_menu_new();
        g_object_set_data(G_OBJECT(submenu), "submenu_data", data);
 
-       parent = submenu_add_sort_item(submenu, NULL, func, SORT_NAME, show_current, type);
+       submenu_add_sort_item(submenu, func, SORT_NAME, show_current, type);
 #ifdef HAVE_STRVERSCMP
-       submenu_add_sort_item(submenu, parent, func, SORT_NUMBER, show_current, type);
+       submenu_add_sort_item(submenu, func, SORT_NUMBER, show_current, type);
 #endif
-       submenu_add_sort_item(submenu, parent, func, SORT_TIME, show_current, type);
-       submenu_add_sort_item(submenu, parent, func, SORT_SIZE, show_current, type);
-       if (include_path) submenu_add_sort_item(submenu, parent, func, SORT_PATH, show_current, type);
-       if (include_none) submenu_add_sort_item(submenu, parent, func, SORT_NONE, show_current, type);
+       submenu_add_sort_item(submenu, func, SORT_TIME, show_current, type);
+       submenu_add_sort_item(submenu, func, SORT_EXIFTIME, show_current, type);
+       submenu_add_sort_item(submenu, func, SORT_SIZE, show_current, type);
+       if (include_path) submenu_add_sort_item(submenu, func, SORT_PATH, show_current, type);
+       if (include_none) submenu_add_sort_item(submenu, func, SORT_NONE, show_current, type);
 
        if (menu)
                {
@@ -214,9 +233,6 @@ gchar *alter_type_get_text(AlterType type)
                case ALTER_FLIP:
                        return _("_Flip");
                        break;
-               case ALTER_DESATURATE:
-                       return _("Toggle _grayscale");
-                       break;
                case ALTER_NONE:
                        return _("_Original state");
                        break;
@@ -255,14 +271,13 @@ static GtkWidget *real_submenu_add_alter(GtkWidget *menu, GCallback func, gpoint
        submenu_add_alter_item(submenu, func, ALTER_ROTATE_180, accel_group, 'R', GDK_SHIFT_MASK);
        submenu_add_alter_item(submenu, func, ALTER_MIRROR, accel_group, 'M', GDK_SHIFT_MASK);
        submenu_add_alter_item(submenu, func, ALTER_FLIP, accel_group, 'F', GDK_SHIFT_MASK);
-       submenu_add_alter_item(submenu, func, ALTER_DESATURATE, accel_group, 'G', GDK_SHIFT_MASK);
        submenu_add_alter_item(submenu, func, ALTER_NONE, accel_group, 'O', GDK_SHIFT_MASK);
 
        if (menu)
                {
                GtkWidget *item;
 
-               item = menu_item_add(menu, _("_Adjust"), NULL, NULL);
+               item = menu_item_add(menu, _("_Orientation"), NULL, NULL);
                gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);
                return item;
                }
@@ -274,3 +289,4 @@ GtkWidget *submenu_add_alter(GtkWidget *menu, GCallback func, gpointer data)
 {
        return real_submenu_add_alter(menu, func, data, NULL);
 }
+/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */