Trim trailing white spaces.
[geeqie.git] / src / layout_util.c
index d0283ca..79193b0 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2009 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -27,6 +27,7 @@
 #include "filedata.h"
 #include "history_list.h"
 #include "image-overlay.h"
+#include "histogram.h"
 #include "img-view.h"
 #include "layout_image.h"
 #include "logwindow.h"
@@ -54,6 +55,7 @@
 
 static gboolean layout_bar_enabled(LayoutWindow *lw);
 static gboolean layout_bar_sort_enabled(LayoutWindow *lw);
+static void layout_util_sync_views(LayoutWindow *lw);
 
 /*
  *-----------------------------------------------------------------------------
@@ -62,10 +64,10 @@ static gboolean layout_bar_sort_enabled(LayoutWindow *lw);
  */
 
 static guint tree_key_overrides[] = {
-       GDK_Page_Up,    GDK_KP_Page_Up,
-       GDK_Page_Down,  GDK_KP_Page_Down,
-       GDK_Home,       GDK_KP_Home,
-       GDK_End,        GDK_KP_End
+       GDK_KEY_Page_Up,        GDK_KEY_KP_Page_Up,
+       GDK_KEY_Page_Down,      GDK_KEY_KP_Page_Down,
+       GDK_KEY_Home,   GDK_KEY_KP_Home,
+       GDK_KEY_End,    GDK_KEY_KP_End
 };
 
 static gboolean layout_key_match(guint keyval)
@@ -83,13 +85,14 @@ static gboolean layout_key_match(guint keyval)
 gboolean layout_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
 {
        LayoutWindow *lw = data;
+       GtkWidget *focused;
        gboolean stop_signal = FALSE;
        gint x = 0;
        gint y = 0;
 
-       if (lw->path_entry && GTK_WIDGET_HAS_FOCUS(lw->path_entry))
+       if (lw->path_entry && gtk_widget_has_focus(lw->path_entry))
                {
-               if (event->keyval == GDK_Escape && lw->dir_fd)
+               if (event->keyval == GDK_KEY_Escape && lw->dir_fd)
                        {
                        gtk_entry_set_text(GTK_ENTRY(lw->path_entry), lw->dir_fd->path);
                        }
@@ -102,7 +105,7 @@ gboolean layout_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
                        return TRUE;
                        }
                }
-       if (lw->vd && lw->options.dir_view_type == DIRVIEW_TREE && GTK_WIDGET_HAS_FOCUS(lw->vd->view) &&
+       if (lw->vd && lw->options.dir_view_type == DIRVIEW_TREE && gtk_widget_has_focus(lw->vd->view) &&
            !layout_key_match(event->keyval) &&
            gtk_widget_event(lw->vd->view, (GdkEvent *)event))
                {
@@ -114,28 +117,23 @@ gboolean layout_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
                return TRUE;
                }
 
-/*
-       if (event->type == GDK_KEY_PRESS && lw->full_screen &&
-           gtk_accel_groups_activate(G_OBJECT(lw->window), event->keyval, event->state))
-               return TRUE;
-*/
-
+       focused = gtk_container_get_focus_child(GTK_CONTAINER(lw->image->widget));
        if (lw->image &&
-           (GTK_WIDGET_HAS_FOCUS(lw->image->widget) || (lw->tools && widget == lw->window) || lw->full_screen) )
+           ((focused && gtk_widget_has_focus(focused)) || (lw->tools && widget == lw->window) || lw->full_screen) )
                {
                stop_signal = TRUE;
                switch (event->keyval)
                        {
-                       case GDK_Left: case GDK_KP_Left:
+                       case GDK_KEY_Left: case GDK_KEY_KP_Left:
                                x -= 1;
                                break;
-                       case GDK_Right: case GDK_KP_Right:
+                       case GDK_KEY_Right: case GDK_KEY_KP_Right:
                                x += 1;
                                break;
-                       case GDK_Up: case GDK_KP_Up:
+                       case GDK_KEY_Up: case GDK_KEY_KP_Up:
                                y -= 1;
                                break;
-                       case GDK_Down: case GDK_KP_Down:
+                       case GDK_KEY_Down: case GDK_KEY_KP_Down:
                                y += 1;
                                break;
                        default:
@@ -149,7 +147,7 @@ gboolean layout_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
                        stop_signal = TRUE;
                        switch (event->keyval)
                                {
-                               case GDK_Menu:
+                               case GDK_KEY_Menu:
                                        layout_image_menu_popup(lw);
                                        break;
                                default:
@@ -263,7 +261,7 @@ static void layout_menu_dir_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
 
-       file_util_create_dir(lw->dir_fd, layout_window(lw), NULL, NULL);
+       if (lw->vd) vd_new_folder(lw->vd, lw->dir_fd);
 }
 
 static void layout_menu_copy_cb(GtkAction *action, gpointer data)
@@ -301,6 +299,20 @@ static void layout_menu_delete_cb(GtkAction *action, gpointer data)
        file_util_delete(NULL, layout_selection_list(lw), layout_window(lw));
 }
 
+static void layout_menu_disable_grouping_cb(GtkAction *action, gpointer data)
+{
+       LayoutWindow *lw = data;
+
+       file_data_disable_grouping_list(layout_selection_list(lw), TRUE);
+}
+
+static void layout_menu_enable_grouping_cb(GtkAction *action, gpointer data)
+{
+       LayoutWindow *lw = data;
+
+       file_data_disable_grouping_list(layout_selection_list(lw), FALSE);
+}
+
 static void layout_menu_close_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
@@ -595,7 +607,7 @@ static void layout_menu_list_cb(GtkRadioAction *action, GtkRadioAction *current,
        LayoutWindow *lw = data;
        
        layout_exit_fullscreen(lw);
-       layout_views_set(lw, lw->options.dir_view_type, (gtk_radio_action_get_current_value(action) == 1) ? FILEVIEW_ICON : FILEVIEW_LIST);
+       layout_views_set(lw, lw->options.dir_view_type, (FileViewType) gtk_radio_action_get_current_value(action));
 }
 
 static void layout_menu_view_dir_as_cb(GtkRadioAction *action, GtkRadioAction *current, gpointer data)
@@ -626,32 +638,92 @@ static void layout_menu_escape_cb(GtkAction *action, gpointer data)
        LayoutWindow *lw = data;
 
        layout_exit_fullscreen(lw);
-
-       /* FIXME:interrupting thumbs no longer allowed */
-#if 0
-       interrupt_thumbs();
-#endif
 }
 
-static void layout_menu_overlay_cb(GtkAction *action, gpointer data)
+static void layout_menu_overlay_toggle_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
 
        image_osd_toggle(lw->image);
+       layout_util_sync_views(lw);
+}
+
+
+static void layout_menu_overlay_cb(GtkToggleAction *action, gpointer data)
+{
+       LayoutWindow *lw = data;
+       
+       if (gtk_toggle_action_get_active(action))
+               {
+               OsdShowFlags flags = image_osd_get(lw->image);
+               
+               if ((flags | OSD_SHOW_INFO | OSD_SHOW_STATUS) != flags)
+                       image_osd_set(lw->image, flags | OSD_SHOW_INFO | OSD_SHOW_STATUS);
+               }
+       else
+               {
+               GtkToggleAction *histogram_action = GTK_TOGGLE_ACTION(gtk_action_group_get_action(lw->action_group, "ImageHistogram"));
+               
+               image_osd_set(lw->image, OSD_SHOW_NOTHING);
+               gtk_toggle_action_set_active(histogram_action, FALSE); /* this calls layout_menu_histogram_cb */
+               }
+}
+
+static void layout_menu_histogram_cb(GtkToggleAction *action, gpointer data)
+{
+       LayoutWindow *lw = data;
+
+       if (gtk_toggle_action_get_active(action))
+               {
+               image_osd_set(lw->image, OSD_SHOW_INFO | OSD_SHOW_STATUS | OSD_SHOW_HISTOGRAM);
+               layout_util_sync_views(lw); /* show the overlay state, default channel and mode in the menu */
+               }
+       else
+               {
+               OsdShowFlags flags = image_osd_get(lw->image);
+               if (flags & OSD_SHOW_HISTOGRAM)
+                       image_osd_set(lw->image, flags & ~OSD_SHOW_HISTOGRAM);
+               }
+}
+
+static void layout_menu_histogram_toggle_channel_cb(GtkAction *action, gpointer data)
+{
+       LayoutWindow *lw = data;
+
+       image_osd_histogram_toggle_channel(lw->image);
+       layout_util_sync_views(lw);
+}
+
+static void layout_menu_histogram_toggle_mode_cb(GtkAction *action, gpointer data)
+{
+       LayoutWindow *lw = data;
+
+       image_osd_histogram_toggle_mode(lw->image);
+       layout_util_sync_views(lw);
 }
 
-static void layout_menu_histogram_chan_cb(GtkAction *action, gpointer data)
+static void layout_menu_histogram_channel_cb(GtkRadioAction *action, GtkRadioAction *current, gpointer data)
 {
        LayoutWindow *lw = data;
+       gint channel = gtk_radio_action_get_current_value(action);
+       GtkToggleAction *histogram_action = GTK_TOGGLE_ACTION(gtk_action_group_get_action(lw->action_group, "ImageHistogram"));
 
-       image_osd_histogram_chan_toggle(lw->image);
+       if (channel < 0 || channel >= HCHAN_COUNT) return;
+       
+       gtk_toggle_action_set_active(histogram_action, TRUE); /* this calls layout_menu_histogram_cb */
+       image_osd_histogram_set_channel(lw->image, channel);
 }
 
-static void layout_menu_histogram_log_cb(GtkAction *action, gpointer data)
+static void layout_menu_histogram_mode_cb(GtkRadioAction *action, GtkRadioAction *current, gpointer data)
 {
        LayoutWindow *lw = data;
+       gint mode = gtk_radio_action_get_current_value(action);
+       GtkToggleAction *histogram_action = GTK_TOGGLE_ACTION(gtk_action_group_get_action(lw->action_group, "ImageHistogram"));
 
-       image_osd_histogram_log_toggle(lw->image);
+       if (mode < 0 || mode > 1) return;
+       
+       gtk_toggle_action_set_active(histogram_action, TRUE); /* this calls layout_menu_histogram_cb */
+       image_osd_histogram_set_mode(lw->image, mode);
 }
 
 static void layout_menu_refresh_cb(GtkAction *action, gpointer data)
@@ -728,10 +800,11 @@ static void layout_menu_bar_sort_cb(GtkToggleAction *action, gpointer data)
        layout_bar_sort_toggle(lw);
 }
 
-static void layout_menu_slideshow_cb(GtkAction *action, gpointer data)
+static void layout_menu_slideshow_cb(GtkToggleAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
 
+       if (layout_image_slideshow_active(lw) == gtk_toggle_action_get_active(action)) return;
        layout_image_slideshow_toggle(lw);
 }
 
@@ -742,6 +815,32 @@ static void layout_menu_slideshow_pause_cb(GtkAction *action, gpointer data)
        layout_image_slideshow_pause_toggle(lw);
 }
 
+
+static void layout_menu_stereo_mode_next_cb(GtkAction *action, gpointer data)
+{
+       LayoutWindow *lw = data;
+       gint mode = layout_image_stereo_pixbuf_get(lw);
+       
+       /* 0->1, 1->2, 2->3, 3->1 - disable auto, then cycle */
+       mode = mode % 3 + 1;
+       
+       GtkAction *radio = gtk_action_group_get_action(lw->action_group, "StereoAuto");
+       gtk_radio_action_set_current_value(GTK_RADIO_ACTION(radio), mode);
+       
+       /*
+       this is called via fallback in layout_menu_stereo_mode_cb
+       layout_image_stereo_pixbuf_set(lw, mode);
+       */
+
+}
+
+static void layout_menu_stereo_mode_cb(GtkRadioAction *action, GtkRadioAction *current, gpointer data)
+{
+       LayoutWindow *lw = data;
+       gint mode = gtk_radio_action_get_current_value(action);
+       layout_image_stereo_pixbuf_set(lw, mode);
+}
+
 static void layout_menu_help_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
@@ -881,6 +980,16 @@ static void layout_menu_sel_mark_minus_cb(GtkAction *action, gpointer data)
        layout_mark_to_selection(lw, mark, MTS_MODE_MINUS);
 }
 
+static void layout_menu_mark_filter_toggle_cb(GtkAction *action, gpointer data)
+{
+       LayoutWindow *lw = data;
+       gint mark = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(action), "mark_num"));
+       g_assert(mark >= 1 && mark <= FILEDATA_MARKS_SIZE);
+
+       layout_marks_set(lw, TRUE);
+       layout_mark_filter_toggle(lw, mark);
+}
+
 
 /*
  *-----------------------------------------------------------------------------
@@ -934,7 +1043,7 @@ static void layout_menu_back_cb(GtkAction *action, gpointer data)
        if (!path) return;
        
        /* Open previous path */
-       dir_fd = file_data_new_simple(path);
+       dir_fd = file_data_new_dir(path);
        layout_set_fd(lw, dir_fd);
        file_data_unref(dir_fd);
 }
@@ -951,7 +1060,7 @@ static void layout_menu_home_cb(GtkAction *action, gpointer data)
 
        if (path)
                {
-               FileData *dir_fd = file_data_new_simple(path);
+               FileData *dir_fd = file_data_new_dir(path);
                layout_set_fd(lw, dir_fd);
                file_data_unref(dir_fd);
                }
@@ -967,74 +1076,14 @@ static void layout_menu_home_cb(GtkAction *action, gpointer data)
 static void layout_menu_edit_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
-       GList *list;
        const gchar *key = gtk_action_get_name(action);
        
        if (!editor_window_flag_set(key))
                layout_exit_fullscreen(lw);
 
-       list = layout_selection_list(lw);
-       file_util_start_editor_from_filelist(key, list, lw->window);
-       filelist_free(list);
-}
-
-#if 0
-static void layout_menu_edit_update(LayoutWindow *lw)
-{
-       gint i;
-
-       /* main edit menu */
-
-       if (!lw->action_group) return;
-
-       for (i = 0; i < GQ_EDITOR_GENERIC_SLOTS; i++)
-               {
-               gchar *key;
-               GtkAction *action;
-               const gchar *name;
-       
-               key = g_strdup_printf("Editor%d", i);
-
-               action = gtk_action_group_get_action(lw->action_group, key);
-               g_object_set_data(G_OBJECT(action), "edit_index", GINT_TO_POINTER(i));
-
-               name = editor_get_name(i);
-               if (name)
-                       {
-                       gchar *text = g_strdup_printf(_("_%d %s..."), i, name);
-
-                       g_object_set(action, "label", text,
-                                            "sensitive", TRUE, NULL);
-                       g_free(text);
-                       }
-               else
-                       {
-                       gchar *text;
-
-                       text = g_strdup_printf(_("_%d empty"), i);
-                       g_object_set(action, "label", text, "sensitive", FALSE, NULL);
-                       g_free(text);
-                       }
-
-               g_free(key);
-               }
-}
-
-void layout_edit_update_all(void)
-{
-       GList *work;
-
-       work = layout_window_list;
-       while (work)
-               {
-               LayoutWindow *lw = work->data;
-               work = work->next;
-
-               layout_menu_edit_update(lw);
-               }
+       file_util_start_editor_from_filelist(key, layout_selection_list(lw), layout_get_path(lw), lw->window);
 }
 
-#endif
 
 static void layout_menu_metadata_write_cb(GtkAction *action, gpointer data)
 {
@@ -1053,6 +1102,8 @@ static void layout_color_menu_enable_cb(GtkToggleAction *action, gpointer data)
 #ifdef HAVE_LCMS
        LayoutWindow *lw = data;
 
+       if (layout_image_color_profile_get_use(lw) == gtk_toggle_action_get_active(action)) return;
+
        layout_image_color_profile_set_use(lw, gtk_toggle_action_get_active(action));
        layout_util_sync_color(lw);
        layout_image_refresh(lw);
@@ -1067,6 +1118,7 @@ static void layout_color_menu_use_image_cb(GtkToggleAction *action, gpointer dat
        gboolean use_image;
 
        if (!layout_image_color_profile_get(lw, &input, &use_image)) return;
+       if (use_image == gtk_toggle_action_get_active(action)) return;
        layout_image_color_profile_set(lw, input, gtk_toggle_action_get_active(action));
        layout_util_sync_color(lw);
        layout_image_refresh(lw);
@@ -1196,19 +1248,22 @@ void layout_recent_add_path(const gchar *path)
 #define CB G_CALLBACK
 
 static GtkActionEntry menu_entries[] = {
-  { "FileMenu",                NULL,                   N_("_File"),                            NULL,                   N_("File"),                             NULL },
-  { "GoMenu",          NULL,                   N_("_Go"),                              NULL,                   N_("Go"),                               NULL },
-  { "EditMenu",                NULL,                   N_("_Edit"),                            NULL,                   N_("Edit"),                             NULL },
-  { "SelectMenu",      NULL,                   N_("_Select"),                          NULL,                   N_("Select"),                           NULL },
-  { "OrientationMenu", NULL,                   N_("_Orientation"),                     NULL,                   N_("Orientation"),                      NULL },
-  { "ExternalMenu",    NULL,                   N_("E_xternal Editors"),                NULL,                   N_("External Editors"),                 NULL },
-  { "ViewMenu",                NULL,                   N_("_View"),                            NULL,                   N_("View"),                             NULL },
-  { "DirMenu",          NULL,                  N_("_View Directory as"),               NULL,                   N_("View Directory as"),                NULL },
-  { "ZoomMenu",                NULL,                   N_("_Zoom"),                            NULL,                   N_("Zoom"),                             NULL },
-  { "ColorMenu",       NULL,                   N_("Color _Management"),                NULL,                   N_("Color _Management"),                NULL },
-  { "ConnectZoomMenu", NULL,                   N_("_Connected Zoom"),                  NULL,                   N_("Connected Zoom"),                   NULL },
-  { "SplitMenu",       NULL,                   N_("_Split"),                           NULL,                   N_("Split"),                            NULL },
-  { "HelpMenu",                NULL,                   N_("_Help"),                            NULL,                   N_("Help"),                             NULL },
+  { "FileMenu",                NULL,                   N_("_File"),                            NULL,                   NULL,                                   NULL },
+  { "GoMenu",          NULL,                   N_("_Go"),                              NULL,                   NULL,                                   NULL },
+  { "EditMenu",                NULL,                   N_("_Edit"),                            NULL,                   NULL,                                   NULL },
+  { "SelectMenu",      NULL,                   N_("_Select"),                          NULL,                   NULL,                                   NULL },
+  { "OrientationMenu", NULL,                   N_("_Orientation"),                     NULL,                   NULL,                                   NULL },
+  { "ExternalMenu",    NULL,                   N_("E_xternal Editors"),                NULL,                   NULL,                                   NULL },
+  { "PreferencesMenu", NULL,                   N_("P_references"),                     NULL,                   NULL,                                   NULL },
+  { "ViewMenu",                NULL,                   N_("_View"),                            NULL,                   NULL,                                   NULL },
+  { "FileDirMenu",     NULL,                   N_("_Files and Folders"),               NULL,                   NULL,                                   NULL },
+  { "ZoomMenu",                NULL,                   N_("_Zoom"),                            NULL,                   NULL,                                   NULL },
+  { "ColorMenu",       NULL,                   N_("_Color Management"),                NULL,                   NULL,                                   NULL },
+  { "ConnectZoomMenu", NULL,                   N_("_Connected Zoom"),                  NULL,                   NULL,                                   NULL },
+  { "SplitMenu",       NULL,                   N_("Spli_t"),                           NULL,                   NULL,                                   NULL },
+  { "StereoMenu",      NULL,                   N_("Stere_o"),                          NULL,                   NULL,                                   NULL },
+  { "OverlayMenu",     NULL,                   N_("Image _Overlay"),                   NULL,                   NULL,                                   NULL },
+  { "HelpMenu",                NULL,                   N_("_Help"),                            NULL,                   NULL,                                   NULL },
 
   { "FirstImage",      GTK_STOCK_GOTO_TOP,     N_("_First Image"),                     "Home",                 N_("First Image"),                      CB(layout_menu_image_first_cb) },
   { "PrevImage",       GTK_STOCK_GO_UP,        N_("_Previous Image"),                  "BackSpace",            N_("Previous Image"),                   CB(layout_menu_image_prev_cb) },
@@ -1224,10 +1279,10 @@ static GtkActionEntry menu_entries[] = {
   { "NewWindow",       GTK_STOCK_NEW,          N_("New _window"),                      "<control>N",           N_("New window"),                       CB(layout_menu_new_window_cb) },
   { "NewCollection",   GTK_STOCK_INDEX,        N_("_New collection"),                  "C",                    N_("New collection"),                   CB(layout_menu_new_cb) },
   { "OpenCollection",  GTK_STOCK_OPEN,         N_("_Open collection..."),              "O",                    N_("Open collection..."),               CB(layout_menu_open_cb) },
-  { "OpenRecent",      NULL,                   N_("Open _recent"),                     NULL,                   N_("Open recent"),                      NULL },
+  { "OpenRecent",      NULL,                   N_("Open recen_t"),                     NULL,                   N_("Open recent"),                      NULL },
   { "Search",          GTK_STOCK_FIND,         N_("_Search..."),                       "F3",                   N_("Search..."),                        CB(layout_menu_search_cb) },
   { "FindDupes",       GTK_STOCK_FIND,         N_("_Find duplicates..."),              "D",                    N_("Find duplicates..."),               CB(layout_menu_dupes_cb) },
-  { "PanView",         NULL,                   N_("Pan _view"),                        "<control>J",           N_("Pan view"),                         CB(layout_menu_pan_cb) },
+  { "PanView",         NULL,                   N_("Pa_n view"),                        "<control>J",           N_("Pan view"),                         CB(layout_menu_pan_cb) },
   { "Print",           GTK_STOCK_PRINT,        N_("_Print..."),                        "<shift>P",             N_("Print..."),                         CB(layout_menu_print_cb) },
   { "NewFolder",       GTK_STOCK_DIRECTORY,    N_("N_ew folder..."),                   "<control>F",           N_("New folder..."),                    CB(layout_menu_dir_cb) },
   { "Copy",            GTK_STOCK_COPY,         N_("_Copy..."),                         "<control>C",           N_("Copy..."),                          CB(layout_menu_copy_cb) },
@@ -1236,6 +1291,8 @@ static GtkActionEntry menu_entries[] = {
   { "Delete",          GTK_STOCK_DELETE,       N_("_Delete..."),                       "<control>D",           N_("Delete..."),                        CB(layout_menu_delete_cb) },
   { "DeleteAlt1",      GTK_STOCK_DELETE,       N_("_Delete..."),                       "Delete",               N_("Delete..."),                        CB(layout_menu_delete_cb) },
   { "DeleteAlt2",      GTK_STOCK_DELETE,       N_("_Delete..."),                       "KP_Delete",            N_("Delete..."),                        CB(layout_menu_delete_cb) },
+  { "EnableGrouping",  NULL,                   N_("Enable file _grouping"),            NULL,                   N_("Enable file grouping"),             CB(layout_menu_enable_grouping_cb) },
+  { "DisableGrouping", NULL,                   N_("Disable file groupi_ng"),           NULL,                   N_("Disable file grouping"),            CB(layout_menu_disable_grouping_cb) },
   { "CopyPath",                NULL,                   N_("_Copy path to clipboard"),          NULL,                   N_("Copy path to clipboard"),           CB(layout_menu_copy_path_cb) },
   { "CloseWindow",     GTK_STOCK_CLOSE,        N_("C_lose window"),                    "<control>W",           N_("Close window"),                     CB(layout_menu_close_cb) },
   { "Quit",            GTK_STOCK_QUIT,         N_("_Quit"),                            "<control>Q",           N_("Quit"),                             CB(layout_menu_exit_cb) },
@@ -1270,67 +1327,75 @@ static GtkActionEntry menu_entries[] = {
   { "Zoom50",          NULL,                   N_("Zoom 1:2"),                         NULL,                   N_("Zoom 1:2"),                         CB(layout_menu_zoom_1_2_cb) },
   { "Zoom33",          NULL,                   N_("Zoom 1:3"),                         NULL,                   N_("Zoom 1:3"),                         CB(layout_menu_zoom_1_3_cb) },
   { "Zoom25",          NULL,                   N_("Zoom 1:4"),                         NULL,                   N_("Zoom 1:4"),                         CB(layout_menu_zoom_1_4_cb) },
-  { "ConnectZoomIn",   GTK_STOCK_ZOOM_IN,      N_("Zoom _in"),                         "plus",                 N_("Zoom in"),                          CB(layout_menu_connect_zoom_in_cb) },
-  { "ConnectZoomInAlt1",GTK_STOCK_ZOOM_IN,     N_("Zoom _in"),                         "<shift>KP_Add",        N_("Zoom in"),                          CB(layout_menu_connect_zoom_in_cb) },
-  { "ConnectZoomOut",  GTK_STOCK_ZOOM_OUT,     N_("Zoom _out"),                        "underscore",           N_("Zoom out"),                         CB(layout_menu_connect_zoom_out_cb) },
-  { "ConnectZoomOutAlt1",GTK_STOCK_ZOOM_OUT,   N_("Zoom _out"),                        "<shift>KP_Subtract",   N_("Zoom out"),                         CB(layout_menu_connect_zoom_out_cb) },
-  { "ConnectZoom100",  GTK_STOCK_ZOOM_100,     N_("Zoom _1:1"),                        "<shift>Z",             N_("Zoom 1:1"),                         CB(layout_menu_connect_zoom_1_1_cb) },
-  { "ConnectZoom100Alt1",GTK_STOCK_ZOOM_100,   N_("Zoom _1:1"),                        "<shift>KP_Divide",     N_("Zoom 1:1"),                         CB(layout_menu_connect_zoom_1_1_cb) },
-  { "ConnectZoomFit",  GTK_STOCK_ZOOM_FIT,     N_("_Zoom to fit"),                     "<shift>X",             N_("Zoom to fit"),                      CB(layout_menu_connect_zoom_fit_cb) },
-  { "ConnectZoomFitAlt1",GTK_STOCK_ZOOM_FIT,   N_("_Zoom to fit"),                     "<shift>KP_Multiply",   N_("Zoom to fit"),                      CB(layout_menu_connect_zoom_fit_cb) },
-  { "ConnectZoomFillHor",NULL,                 N_("Fit _Horizontally"),                "<shift>H",             N_("Fit Horizontally"),                 CB(layout_menu_connect_zoom_fit_hor_cb) },
-  { "ConnectZoomFillVert",NULL,                        N_("Fit _Vertically"),                  "<shift>W",             N_("Fit Vertically"),                   CB(layout_menu_connect_zoom_fit_vert_cb) },
-  { "ConnectZoom200",  NULL,                   N_("Zoom _2:1"),                        NULL,                   N_("Zoom 2:1"),                         CB(layout_menu_connect_zoom_2_1_cb) },
-  { "ConnectZoom300",  NULL,                   N_("Zoom _3:1"),                        NULL,                   N_("Zoom 3:1"),                         CB(layout_menu_connect_zoom_3_1_cb) },
-  { "ConnectZoom400",  NULL,                   N_("Zoom _4:1"),                        NULL,                   N_("Zoom 4:1"),                         CB(layout_menu_connect_zoom_4_1_cb) },
-  { "ConnectZoom50",   NULL,                   N_("Zoom 1:2"),                         NULL,                   N_("Zoom 1:2"),                         CB(layout_menu_connect_zoom_1_2_cb) },
-  { "ConnectZoom33",   NULL,                   N_("Zoom 1:3"),                         NULL,                   N_("Zoom 1:3"),                         CB(layout_menu_connect_zoom_1_3_cb) },
-  { "ConnectZoom25",   NULL,                   N_("Zoom 1:4"),                         NULL,                   N_("Zoom 1:4"),                         CB(layout_menu_connect_zoom_1_4_cb) },
+  { "ConnectZoomIn",   GTK_STOCK_ZOOM_IN,      N_("Zoom _in"),                         "plus",                 N_("Connected Zoom in"),                CB(layout_menu_connect_zoom_in_cb) },
+  { "ConnectZoomInAlt1",GTK_STOCK_ZOOM_IN,     N_("Zoom _in"),                         "<shift>KP_Add",        N_("Connected Zoom in"),                CB(layout_menu_connect_zoom_in_cb) },
+  { "ConnectZoomOut",  GTK_STOCK_ZOOM_OUT,     N_("Zoom _out"),                        "underscore",           N_("Connected Zoom out"),               CB(layout_menu_connect_zoom_out_cb) },
+  { "ConnectZoomOutAlt1",GTK_STOCK_ZOOM_OUT,   N_("Zoom _out"),                        "<shift>KP_Subtract",   N_("Connected Zoom out"),               CB(layout_menu_connect_zoom_out_cb) },
+  { "ConnectZoom100",  GTK_STOCK_ZOOM_100,     N_("Zoom _1:1"),                        "<shift>Z",             N_("Connected Zoom 1:1"),               CB(layout_menu_connect_zoom_1_1_cb) },
+  { "ConnectZoom100Alt1",GTK_STOCK_ZOOM_100,   N_("Zoom _1:1"),                        "<shift>KP_Divide",     N_("Connected Zoom 1:1"),               CB(layout_menu_connect_zoom_1_1_cb) },
+  { "ConnectZoomFit",  GTK_STOCK_ZOOM_FIT,     N_("_Zoom to fit"),                     "<shift>X",             N_("Connected Zoom to fit"),            CB(layout_menu_connect_zoom_fit_cb) },
+  { "ConnectZoomFitAlt1",GTK_STOCK_ZOOM_FIT,   N_("_Zoom to fit"),                     "<shift>KP_Multiply",   N_("Connected Zoom to fit"),            CB(layout_menu_connect_zoom_fit_cb) },
+  { "ConnectZoomFillHor",NULL,                 N_("Fit _Horizontally"),                "<shift>H",             N_("Connected Fit Horizontally"),       CB(layout_menu_connect_zoom_fit_hor_cb) },
+  { "ConnectZoomFillVert",NULL,                        N_("Fit _Vertically"),                  "<shift>W",             N_("Connected Fit Vertically"),         CB(layout_menu_connect_zoom_fit_vert_cb) },
+  { "ConnectZoom200",  NULL,                   N_("Zoom _2:1"),                        NULL,                   N_("Connected Zoom 2:1"),               CB(layout_menu_connect_zoom_2_1_cb) },
+  { "ConnectZoom300",  NULL,                   N_("Zoom _3:1"),                        NULL,                   N_("Connected Zoom 3:1"),               CB(layout_menu_connect_zoom_3_1_cb) },
+  { "ConnectZoom400",  NULL,                   N_("Zoom _4:1"),                        NULL,                   N_("Connected Zoom 4:1"),               CB(layout_menu_connect_zoom_4_1_cb) },
+  { "ConnectZoom50",   NULL,                   N_("Zoom 1:2"),                         NULL,                   N_("Connected Zoom 1:2"),               CB(layout_menu_connect_zoom_1_2_cb) },
+  { "ConnectZoom33",   NULL,                   N_("Zoom 1:3"),                         NULL,                   N_("Connected Zoom 1:3"),               CB(layout_menu_connect_zoom_1_3_cb) },
+  { "ConnectZoom25",   NULL,                   N_("Zoom 1:4"),                         NULL,                   N_("Connected Zoom 1:4"),               CB(layout_menu_connect_zoom_1_4_cb) },
   { "ViewInNewWindow", NULL,                   N_("_View in new window"),              "<control>V",           N_("View in new window"),               CB(layout_menu_view_in_new_window_cb) },
   { "FullScreen",      GTK_STOCK_FULLSCREEN,   N_("F_ull screen"),                     "F",                    N_("Full screen"),                      CB(layout_menu_fullscreen_cb) },
   { "FullScreenAlt1",  GTK_STOCK_FULLSCREEN,   N_("F_ull screen"),                     "V",                    N_("Full screen"),                      CB(layout_menu_fullscreen_cb) },
   { "FullScreenAlt2",  GTK_STOCK_FULLSCREEN,   N_("F_ull screen"),                     "F11",                  N_("Full screen"),                      CB(layout_menu_fullscreen_cb) },
-  { "Escape",          GTK_STOCK_LEAVE_FULLSCREEN,N_("_Leave full screen"),            "Escape",               N_("Leave full screen"),                                CB(layout_menu_escape_cb) },
-  { "EscapeAlt1",      GTK_STOCK_LEAVE_FULLSCREEN,N_("_Leave full screen"),            "Q",                    N_("Leave full screen"),                                CB(layout_menu_escape_cb) },
-  { "ImageOverlay",    NULL,                   N_("_Image Overlay"),                   "I",                    N_("Image Overlay"),                    CB(layout_menu_overlay_cb) },
-  { "HistogramChan",   NULL,                   N_("Histogram _channels"),              "K",                    N_("Histogram channels"),               CB(layout_menu_histogram_chan_cb) },
-  { "HistogramLog",    NULL,                   N_("Histogram _log mode"),              "J",                    N_("Histogram log mode"),               CB(layout_menu_histogram_log_cb) },
+  { "Escape",          GTK_STOCK_LEAVE_FULLSCREEN,N_("_Leave full screen"),            "Escape",               N_("Leave full screen"),                CB(layout_menu_escape_cb) },
+  { "EscapeAlt1",      GTK_STOCK_LEAVE_FULLSCREEN,N_("_Leave full screen"),            "Q",                    N_("Leave full screen"),                CB(layout_menu_escape_cb) },
+  { "ImageOverlayCycle",NULL,                  N_("_Cycle through overlay modes"),     "I",                    N_("Cycle through Overlay modes"),      CB(layout_menu_overlay_toggle_cb) },
+  { "HistogramChanCycle",NULL,                 N_("Cycle through histogram ch_annels"),"K",                    N_("Cycle through histogram channels"), CB(layout_menu_histogram_toggle_channel_cb) },
+  { "HistogramModeCycle",NULL,                 N_("Cycle through histogram mo_des"),   "J",                    N_("Cycle through histogram modes"),    CB(layout_menu_histogram_toggle_mode_cb) },
   { "HideTools",       NULL,                   N_("_Hide file list"),                  "<control>H",           N_("Hide file list"),                   CB(layout_menu_hide_cb) },
-  { "SlideShowPause",  NULL,                   N_("_Pause slideshow"),                 "P",                    N_("Pause slideshow"),                  CB(layout_menu_slideshow_pause_cb) },
+  { "SlideShowPause",  GTK_STOCK_MEDIA_PAUSE,  N_("_Pause slideshow"),                 "P",                    N_("Pause slideshow"),                  CB(layout_menu_slideshow_pause_cb) },
   { "Refresh",         GTK_STOCK_REFRESH,      N_("_Refresh"),                         "R",                    N_("Refresh"),                          CB(layout_menu_refresh_cb) },
   { "HelpContents",    GTK_STOCK_HELP,         N_("_Contents"),                        "F1",                   N_("Contents"),                         CB(layout_menu_help_cb) },
   { "HelpShortcuts",   NULL,                   N_("_Keyboard shortcuts"),              NULL,                   N_("Keyboard shortcuts"),               CB(layout_menu_help_keys_cb) },
   { "HelpNotes",       NULL,                   N_("_Release notes"),                   NULL,                   N_("Release notes"),                    CB(layout_menu_notes_cb) },
   { "About",           GTK_STOCK_ABOUT,        N_("_About"),                           NULL,                   N_("About"),                            CB(layout_menu_about_cb) },
   { "LogWindow",       NULL,                   N_("_Log Window"),                      NULL,                   N_("Log Window"),                       CB(layout_menu_log_window_cb) },
-  { "ExifWin",         NULL,                   N_("E_xif window"),                     "<control>E",           N_("Exif window"),                      CB(layout_menu_bar_exif_cb) },
+  { "ExifWin",         NULL,                   N_("_Exif window"),                     "<control>E",           N_("Exif window"),                      CB(layout_menu_bar_exif_cb) },
+  { "StereoCycle",     NULL,                   N_("_Cycle through stereo modes"),      NULL,                   N_("Cycle through stereo modes"),       CB(layout_menu_stereo_mode_next_cb) },
 
 };
 
 static GtkToggleActionEntry menu_toggle_entries[] = {
   { "Thumbnails",      PIXBUF_INLINE_ICON_THUMB,N_("Show _Thumbnails"),                "T",                    N_("Show Thumbnails"),                  CB(layout_menu_thumb_cb),        FALSE },
   { "ShowMarks",        NULL,                  N_("Show _Marks"),                      "M",                    N_("Show Marks"),                       CB(layout_menu_marks_cb),        FALSE  },
-  { "ShowInfoPixel",   GTK_STOCK_COLOR_PICKER, N_("Show Pi_xel Info"),                 NULL,                   N_("Show Pixel Info"),                  CB(layout_menu_info_pixel_cb),   FALSE  },
+  { "ShowInfoPixel",   GTK_STOCK_COLOR_PICKER, N_("Pi_xel Info"),                      NULL,                   N_("Show Pixel Info"),                  CB(layout_menu_info_pixel_cb),   FALSE  },
   { "FloatTools",      PIXBUF_INLINE_ICON_FLOAT,N_("_Float file list"),                "L",                    N_("Float file list"),                  CB(layout_menu_float_cb),        FALSE  },
   { "HideToolbar",     NULL,                   N_("Hide tool_bar"),                    NULL,                   N_("Hide toolbar"),                     CB(layout_menu_toolbar_cb),      FALSE  },
-  { "SBar",            NULL,                   N_("_Info"),                            "<control>K",           N_("Info"),                             CB(layout_menu_bar_cb),          FALSE  },
+  { "SBar",            NULL,                   N_("_Info sidebar"),                    "<control>K",           N_("Info sidebar"),                     CB(layout_menu_bar_cb),          FALSE  },
   { "SBarSort",                NULL,                   N_("Sort _manager"),                    "<shift>S",             N_("Sort manager"),                     CB(layout_menu_bar_sort_cb),     FALSE  },
-  { "SlideShow",       NULL,                   N_("Toggle _slideshow"),                "S",                    N_("Toggle slideshow"),                 CB(layout_menu_slideshow_cb),    FALSE  },
+  { "SlideShow",       GTK_STOCK_MEDIA_PLAY,   N_("Toggle _slideshow"),                "S",                    N_("Toggle slideshow"),                 CB(layout_menu_slideshow_cb),    FALSE  },
   { "UseColorProfiles",        GTK_STOCK_SELECT_COLOR, N_("Use _color profiles"),              NULL,                   N_("Use color profiles"),               CB(layout_color_menu_enable_cb), FALSE},
   { "UseImageProfile", NULL,                   N_("Use profile from _image"),          NULL,                   N_("Use profile from image"),           CB(layout_color_menu_use_image_cb), FALSE},
   { "Grayscale",       NULL,                   N_("Toggle _grayscale"),                "<shift>G",             N_("Toggle grayscale"),                 CB(layout_menu_alter_desaturate_cb), FALSE},
+  { "ImageOverlay",    NULL,                   N_("Image _Overlay"),                   NULL,                   N_("Image Overlay"),                    CB(layout_menu_overlay_cb),      FALSE },
+  { "ImageHistogram",  NULL,                   N_("_Show Histogram"),                  NULL,                   N_("Show Histogram"),                   CB(layout_menu_histogram_cb),    FALSE },
 };
 
 static GtkRadioActionEntry menu_radio_entries[] = {
-  { "ViewList",                NULL,                   N_("View Images as _List"),             "<control>L",           N_("View Images as List"),              0 },
-  { "ViewIcons",       NULL,                   N_("View Images as I_cons"),            "<control>I",           N_("View Images as Icons"),             1 }
+  { "ViewList",                NULL,                   N_("Image _List"),                      "<control>L",           N_("View Images as List"),              FILEVIEW_LIST },
+  { "ViewIcons",       NULL,                   N_("I_cons"),                           "<control>I",           N_("View Images as Icons"),             FILEVIEW_ICON }
+};
+
+static GtkRadioActionEntry menu_view_dir_radio_entries[] = {
+  { "FolderList",      NULL,                   N_("Folder Li_st"),                     "<meta>L",              N_("View Folders as List"),             DIRVIEW_LIST },
+  { "FolderTree",      NULL,                   N_("Folder T_ree"),                     "<control>T",           N_("View Folders as Tree"),             DIRVIEW_TREE },
 };
 
 static GtkRadioActionEntry menu_split_radio_entries[] = {
-  { "SplitHorizontal", NULL,                   N_("_Horizontal"),                      "E",                    N_("Horizontal"),                       SPLIT_HOR },
-  { "SplitVertical",   NULL,                   N_("_Vertical"),                        "U",                    N_("Vertical"),                         SPLIT_VERT },
-  { "SplitQuad",       NULL,                   N_("_Quad"),                            NULL,                   N_("Quad"),                             SPLIT_QUAD },
-  { "SplitSingle",     NULL,                   N_("_Single"),                          "Y",                    N_("Single"),                           SPLIT_NONE }
+  { "SplitHorizontal", NULL,                   N_("_Horizontal"),                      "E",                    N_("Split Horizontal"),                 SPLIT_HOR },
+  { "SplitVertical",   NULL,                   N_("_Vertical"),                        "U",                    N_("Split Vertical"),                           SPLIT_VERT },
+  { "SplitQuad",       NULL,                   N_("_Quad"),                            NULL,                   N_("Split Quad"),                               SPLIT_QUAD },
+  { "SplitSingle",     NULL,                   N_("_Single"),                          "Y",                    N_("Split Single"),                             SPLIT_NONE }
 };
 
 static GtkRadioActionEntry menu_color_radio_entries[] = {
@@ -1342,6 +1407,27 @@ static GtkRadioActionEntry menu_color_radio_entries[] = {
   { "ColorProfile5",   NULL,                   N_("Input _5"),                         NULL,                   N_("Input 5"),                          COLOR_PROFILE_FILE + 3 }
 };
 
+static GtkRadioActionEntry menu_histogram_channel[] = {
+  { "HistogramChanR",  NULL,                   N_("Histogram on _Red"),                NULL,                   N_("Histogram on Red"),         HCHAN_R },
+  { "HistogramChanG",  NULL,                   N_("Histogram on _Green"),              NULL,                   N_("Histogram on Green"),       HCHAN_G },
+  { "HistogramChanB",  NULL,                   N_("Histogram on _Blue"),               NULL,                   N_("Histogram on Blue"),        HCHAN_B },
+  { "HistogramChanRGB",        NULL,                   N_("_Histogram on RGB"),                        NULL,                   N_("Histogram on RGB"),         HCHAN_RGB },
+  { "HistogramChanV",  NULL,                   N_("Histogram on _Value"),              NULL,                   N_("Histogram on Value"),       HCHAN_MAX }
+};
+
+static GtkRadioActionEntry menu_histogram_mode[] = {
+  { "HistogramModeLin",        NULL,                   N_("Li_near Histogram"),                NULL,                   N_("Linear Histogram"),         0 },
+  { "HistogramModeLog",        NULL,                   N_("_Log Histogram"),                   NULL,                   N_("Log Histogram"),            1 },
+};
+
+static GtkRadioActionEntry menu_stereo_mode_entries[] = {
+  { "StereoAuto",      NULL,                   N_("_Auto"),                            NULL,                   N_("Stereo Auto"),              STEREO_PIXBUF_DEFAULT },
+  { "StereoSBS",       NULL,                   N_("_Side by Side"),                    NULL,                   N_("Stereo Side by Side"),      STEREO_PIXBUF_SBS },
+  { "StereoCross",     NULL,                   N_("_Cross"),                           NULL,                   N_("Stereo Cross"),             STEREO_PIXBUF_CROSS },
+  { "StereoOff",       NULL,                   N_("_Off"),                             NULL,                   N_("Stereo Off"),               STEREO_PIXBUF_NONE }
+};
+
+
 #undef CB
 
 static const gchar *menu_ui_description =
@@ -1412,10 +1498,12 @@ static const gchar *menu_ui_description =
 "      <menuitem action='SaveMetadata'/>"
 "      <placeholder name='PropertiesSection'/>"
 "      <separator/>"
-"      <menuitem action='Preferences'/>"
-"      <menuitem action='Editors'/>"
-"      <menuitem action='LayoutConfig'/>"
-"      <menuitem action='Maintenance'/>"
+"        <menu action='PreferencesMenu'>"
+"        <menuitem action='Preferences'/>"
+"        <menuitem action='Editors'/>"
+"        <menuitem action='LayoutConfig'/>"
+"        <menuitem action='Maintenance'/>"
+"      </menu>"
 "      <placeholder name='PreferencesSection'/>"
 "      <separator/>"
 "      <menuitem action='Wallpaper'/>"
@@ -1424,21 +1512,40 @@ static const gchar *menu_ui_description =
 "    <menu action='ViewMenu'>"
 "      <menuitem action='ViewInNewWindow'/>"
 "      <menuitem action='PanView'/>"
+"      <menuitem action='ExifWin'/>"
 "      <placeholder name='WindowSection'/>"
 "      <separator/>"
-"      <menu action='ColorMenu'>"
-"        <menuitem action='UseColorProfiles'/>"
-"        <menuitem action='UseImageProfile'/>"
-"        <menuitem action='ColorProfile0'/>"
-"        <menuitem action='ColorProfile1'/>"
-"        <menuitem action='ColorProfile2'/>"
-"        <menuitem action='ColorProfile3'/>"
-"        <menuitem action='ColorProfile4'/>"
-"        <menuitem action='ColorProfile5'/>"
+"      <menu action='FileDirMenu'>"
+"        <menuitem action='FolderList'/>"
+"        <menuitem action='FolderTree'/>"
+"        <placeholder name='FolderSection'/>"
 "        <separator/>"
-"        <menuitem action='Grayscale'/>"
+"        <menuitem action='ViewList'/>"
+"        <menuitem action='ViewIcons'/>"
+"        <menuitem action='Thumbnails'/>"
+"        <placeholder name='ListSection'/>"
+"        <separator/>"
+"        <menuitem action='FloatTools'/>"
+"        <menuitem action='HideTools'/>"
+"        <menuitem action='HideToolbar'/>"
 "      </menu>"
+"      <placeholder name='DirSection'/>"
+"      <separator/>"
 "      <menu action='ZoomMenu'>"
+"        <menu action='ConnectZoomMenu'>"
+"          <menuitem action='ConnectZoomIn'/>"
+"          <menuitem action='ConnectZoomOut'/>"
+"          <menuitem action='ConnectZoomFit'/>"
+"          <menuitem action='ConnectZoomFillHor'/>"
+"          <menuitem action='ConnectZoomFillVert'/>"
+"          <menuitem action='ConnectZoom100'/>"
+"          <menuitem action='ConnectZoom200'/>"
+"          <menuitem action='ConnectZoom300'/>"
+"          <menuitem action='ConnectZoom400'/>"
+"          <menuitem action='ConnectZoom50'/>"
+"          <menuitem action='ConnectZoom33'/>"
+"          <menuitem action='ConnectZoom25'/>"
+"        </menu>"
 "        <menuitem action='ZoomIn'/>"
 "        <menuitem action='ZoomOut'/>"
 "        <menuitem action='ZoomFit'/>"
@@ -1452,56 +1559,55 @@ static const gchar *menu_ui_description =
 "        <menuitem action='Zoom33'/>"
 "        <menuitem action='Zoom25'/>"
 "      </menu>"
-"      <menu action='ConnectZoomMenu'>"
-"        <menuitem action='ConnectZoomIn'/>"
-"        <menuitem action='ConnectZoomOut'/>"
-"        <menuitem action='ConnectZoomFit'/>"
-"        <menuitem action='ConnectZoomFillHor'/>"
-"        <menuitem action='ConnectZoomFillVert'/>"
-"        <menuitem action='ConnectZoom100'/>"
-"        <menuitem action='ConnectZoom200'/>"
-"        <menuitem action='ConnectZoom300'/>"
-"        <menuitem action='ConnectZoom400'/>"
-"        <menuitem action='ConnectZoom50'/>"
-"        <menuitem action='ConnectZoom33'/>"
-"        <menuitem action='ConnectZoom25'/>"
-"      </menu>"
-"      <placeholder name='ZoomSection'/>"
-"      <separator/>"
 "      <menu action='SplitMenu'>"
 "        <menuitem action='SplitHorizontal'/>"
 "        <menuitem action='SplitVertical'/>"
 "        <menuitem action='SplitQuad'/>"
 "        <menuitem action='SplitSingle'/>"
 "      </menu>"
-"      <separator/>"
-"      <menuitem action='ViewList'/>"
-"      <menuitem action='ViewIcons'/>"
-"      <menuitem action='Thumbnails'/>"
-"      <placeholder name='ListSection'/>"
-"      <separator/>"
-"      <menu action='DirMenu'>"
-"        <menuitem action='FolderList'/>"
-"        <menuitem action='FolderTree'/>"
+"      <menu action='StereoMenu'>"
+"        <menuitem action='StereoAuto'/>"
+"        <menuitem action='StereoSBS'/>"
+"        <menuitem action='StereoCross'/>"
+"        <menuitem action='StereoOff'/>"
+"        <separator/>"
+"        <menuitem action='StereoCycle'/>"
+"      </menu>"
+"      <menu action='ColorMenu'>"
+"        <menuitem action='UseColorProfiles'/>"
+"        <menuitem action='UseImageProfile'/>"
+"        <menuitem action='ColorProfile0'/>"
+"        <menuitem action='ColorProfile1'/>"
+"        <menuitem action='ColorProfile2'/>"
+"        <menuitem action='ColorProfile3'/>"
+"        <menuitem action='ColorProfile4'/>"
+"        <menuitem action='ColorProfile5'/>"
+"        <separator/>"
+"        <menuitem action='Grayscale'/>"
+"      </menu>"
+"      <menu action='OverlayMenu'>"
+"        <menuitem action='ImageOverlay'/>"
+"        <menuitem action='ImageHistogram'/>"
+"        <menuitem action='ImageOverlayCycle'/>"
+"        <separator/>"
+"        <menuitem action='HistogramChanR'/>"
+"        <menuitem action='HistogramChanG'/>"
+"        <menuitem action='HistogramChanB'/>"
+"        <menuitem action='HistogramChanRGB'/>"
+"        <menuitem action='HistogramChanV'/>"
+"        <menuitem action='HistogramChanCycle'/>"
+"        <separator/>"
+"        <menuitem action='HistogramModeLin'/>"
+"        <menuitem action='HistogramModeLog'/>"
+"        <menuitem action='HistogramModeCycle'/>"
 "      </menu>"
-"      <placeholder name='DirSection'/>"
-"      <separator/>"
-"      <menuitem action='ImageOverlay'/>"
-"      <menuitem action='HistogramChan'/>"
-"      <menuitem action='HistogramLog'/>"
 "      <menuitem action='FullScreen'/>"
-"      <placeholder name='OverlaySection'/>"
-"      <separator/>"
-"      <menuitem action='FloatTools'/>"
-"      <menuitem action='HideTools'/>"
-"      <menuitem action='HideToolbar'/>"
-"      <menuitem action='ShowInfoPixel'/>"
-"      <placeholder name='ToolsSection'/>"
+"      <placeholder name='ViewSection'/>"
 "      <separator/>"
 "      <menuitem action='SBar'/>"
-"      <menuitem action='ExifWin'/>"
 "      <menuitem action='SBarSort'/>"
-"      <placeholder name='SideBarSection'/>"
+"      <menuitem action='ShowInfoPixel'/>"
+"      <placeholder name='ToolsSection'/>"
 "      <separator/>"
 "      <menuitem action='SlideShow'/>"
 "      <menuitem action='SlideShowPause'/>"
@@ -1554,20 +1660,28 @@ static gchar *menu_translate(const gchar *path, gpointer data)
 }
 
 static void layout_actions_setup_mark(LayoutWindow *lw, gint mark, gchar *name_tmpl,
-                                     gchar *label_tmpl, gchar *accel_tmpl, GCallback cb)
+                                     gchar *label_tmpl, gchar *accel_tmpl, gchar *tooltip_tmpl, GCallback cb)
 {
        gchar name[50];
        gchar label[100];
        gchar accel[50];
-       GtkActionEntry entry = { name, NULL, label, accel, NULL, cb };
+       gchar tooltip[100];
+       GtkActionEntry entry = { name, NULL, label, accel, tooltip, cb };
        GtkAction *action;
 
        g_snprintf(name, sizeof(name), name_tmpl, mark);
        g_snprintf(label, sizeof(label), label_tmpl, mark);
+               
        if (accel_tmpl)
                g_snprintf(accel, sizeof(accel), accel_tmpl, mark % 10);
        else
-               accel[0] = 0;
+               entry.accelerator = NULL;
+
+       if (tooltip_tmpl)
+               g_snprintf(tooltip, sizeof(tooltip), tooltip_tmpl, mark);
+       else
+               entry.tooltip = NULL;
+               
        gtk_action_group_add_actions(lw->action_group, &entry, 1, lw);
        action = gtk_action_group_get_action(lw->action_group, name);
        g_object_set_data(G_OBJECT(action), "mark_num", GINT_TO_POINTER(mark));
@@ -1584,16 +1698,17 @@ static void layout_actions_setup_marks(LayoutWindow *lw)
 
        for (mark = 1; mark <= FILEDATA_MARKS_SIZE; mark++)
                {
-               layout_actions_setup_mark(lw, mark, "Mark%d",           _("Mark _%d"), NULL, NULL);
-               layout_actions_setup_mark(lw, mark, "SetMark%d",        _("_Set mark %d"),                      NULL, G_CALLBACK(layout_menu_set_mark_sel_cb));
-               layout_actions_setup_mark(lw, mark, "ResetMark%d",      _("_Reset mark %d"),                    NULL, G_CALLBACK(layout_menu_res_mark_sel_cb));
-               layout_actions_setup_mark(lw, mark, "ToggleMark%d",     _("_Toggle mark %d"),                   "%d", G_CALLBACK(layout_menu_toggle_mark_sel_cb));
-               layout_actions_setup_mark(lw, mark, "ToggleMark%dAlt1", _("_Toggle mark %d"),                   "KP_%d", G_CALLBACK(layout_menu_toggle_mark_sel_cb));
-               layout_actions_setup_mark(lw, mark, "SelectMark%d",     _("_Select mark %d"),                   "<control>%d", G_CALLBACK(layout_menu_sel_mark_cb));
-               layout_actions_setup_mark(lw, mark, "SelectMark%dAlt1", _("_Select mark %d"),                   "<control>KP_%d", G_CALLBACK(layout_menu_sel_mark_cb));
-               layout_actions_setup_mark(lw, mark, "AddMark%d",        _("_Add mark %d"),                      NULL, G_CALLBACK(layout_menu_sel_mark_or_cb));
-               layout_actions_setup_mark(lw, mark, "IntMark%d",        _("_Intersection with mark %d"),        NULL, G_CALLBACK(layout_menu_sel_mark_and_cb));
-               layout_actions_setup_mark(lw, mark, "UnselMark%d",      _("_Unselect mark %d"),                 NULL, G_CALLBACK(layout_menu_sel_mark_minus_cb));
+               layout_actions_setup_mark(lw, mark, "Mark%d",           _("Mark _%d"), NULL, NULL, NULL);
+               layout_actions_setup_mark(lw, mark, "SetMark%d",        _("_Set mark %d"),                      NULL,           _("Set mark %d"), G_CALLBACK(layout_menu_set_mark_sel_cb));
+               layout_actions_setup_mark(lw, mark, "ResetMark%d",      _("_Reset mark %d"),                    NULL,           _("Reset mark %d"), G_CALLBACK(layout_menu_res_mark_sel_cb));
+               layout_actions_setup_mark(lw, mark, "ToggleMark%d",     _("_Toggle mark %d"),                   "%d",           _("Toggle mark %d"), G_CALLBACK(layout_menu_toggle_mark_sel_cb));
+               layout_actions_setup_mark(lw, mark, "ToggleMark%dAlt1", _("_Toggle mark %d"),                   "KP_%d",        _("Toggle mark %d"), G_CALLBACK(layout_menu_toggle_mark_sel_cb));
+               layout_actions_setup_mark(lw, mark, "SelectMark%d",     _("Se_lect mark %d"),                   "<control>%d",  _("Select mark %d"), G_CALLBACK(layout_menu_sel_mark_cb));
+               layout_actions_setup_mark(lw, mark, "SelectMark%dAlt1", _("_Select mark %d"),                   "<control>KP_%d", _("Select mark %d"), G_CALLBACK(layout_menu_sel_mark_cb));
+               layout_actions_setup_mark(lw, mark, "AddMark%d",        _("_Add mark %d"),                      NULL,           _("Add mark %d"), G_CALLBACK(layout_menu_sel_mark_or_cb));
+               layout_actions_setup_mark(lw, mark, "IntMark%d",        _("_Intersection with mark %d"),        NULL,           _("Intersection with mark %d"), G_CALLBACK(layout_menu_sel_mark_and_cb));
+               layout_actions_setup_mark(lw, mark, "UnselMark%d",      _("_Unselect mark %d"),                 NULL,           _("Unselect mark %d"), G_CALLBACK(layout_menu_sel_mark_minus_cb));
+               layout_actions_setup_mark(lw, mark, "FilterMark%d",     _("_Filter mark %d"),                   NULL,           _("Filter mark %d"), G_CALLBACK(layout_menu_mark_filter_toggle_cb));
 
                g_string_append_printf(desc,
                                "      <menu action='Mark%d'>"
@@ -1605,8 +1720,10 @@ static void layout_actions_setup_marks(LayoutWindow *lw)
                                "        <menuitem action='AddMark%d'/>"
                                "        <menuitem action='IntMark%d'/>"
                                "        <menuitem action='UnselMark%d'/>"
+                               "        <separator/>"
+                               "        <menuitem action='FilterMark%d'/>"
                                "      </menu>",
-                               mark, mark, mark, mark, mark, mark, mark, mark);
+                               mark, mark, mark, mark, mark, mark, mark, mark, mark);
                }
 
        g_string_append(desc,
@@ -1637,7 +1754,7 @@ static GList *layout_actions_editor_menu_path(EditorDescription *editor)
        gint i = 0;
        GList *ret = NULL;
        
-       if (split[0] == NULL) 
+       if (split[0] == NULL)
                {
                g_strfreev(split);
                return NULL;
@@ -1721,6 +1838,16 @@ static void layout_actions_setup_editors(LayoutWindow *lw)
        GList *old_path;
        GString *desc;
        
+       if (lw->ui_editors_id)
+               {
+               gtk_ui_manager_remove_ui(lw->ui_manager, lw->ui_editors_id);
+               }
+
+       if (lw->action_group_editors)
+               {
+               gtk_ui_manager_remove_action_group(lw->ui_manager, lw->action_group_editors);
+               g_object_unref(lw->action_group_editors);
+               }
        lw->action_group_editors = gtk_action_group_new("MenuActionsExternal");
        gtk_ui_manager_insert_action_group(lw->ui_manager, lw->action_group_editors, 1);
 
@@ -1737,9 +1864,14 @@ static void layout_actions_setup_editors(LayoutWindow *lw)
                {
                GList *path;
                EditorDescription *editor = work->data;
-               GtkActionEntry entry = { editor->key, NULL, editor->name, editor->hotkey, editor->comment, G_CALLBACK(layout_menu_edit_cb) };
+               GtkActionEntry entry = { editor->key,
+                                        NULL,
+                                        editor->name,
+                                        editor->hotkey,
+                                        editor->comment ? editor->comment : editor->name,
+                                        G_CALLBACK(layout_menu_edit_cb) };
                
-               if (editor->icon && register_theme_icon_as_stock(editor->key, editor->icon))
+               if (editor->icon)
                        {
                        entry.stock_id = editor->key;
                        }
@@ -1777,6 +1909,7 @@ void layout_actions_setup(LayoutWindow *lw)
        GError *error;
        gint i;
 
+       DEBUG_1("%s layout_actions_setup: start", get_exec_time());
        if (lw->ui_manager) return;
 
        lw->action_group = gtk_action_group_new("MenuActions");
@@ -1798,12 +1931,22 @@ void layout_actions_setup(LayoutWindow *lw)
        gtk_action_group_add_radio_actions(lw->action_group,
                                           menu_color_radio_entries, COLOR_PROFILE_FILE + COLOR_PROFILE_INPUTS,
                                           0, G_CALLBACK(layout_color_menu_input_cb), lw);
+       gtk_action_group_add_radio_actions(lw->action_group,
+                                          menu_histogram_channel, G_N_ELEMENTS(menu_histogram_channel),
+                                          0, G_CALLBACK(layout_menu_histogram_channel_cb), lw);
+       gtk_action_group_add_radio_actions(lw->action_group,
+                                          menu_histogram_mode, G_N_ELEMENTS(menu_histogram_mode),
+                                          0, G_CALLBACK(layout_menu_histogram_mode_cb), lw);
+       gtk_action_group_add_radio_actions(lw->action_group,
+                                          menu_stereo_mode_entries, G_N_ELEMENTS(menu_stereo_mode_entries),
+                                          0, G_CALLBACK(layout_menu_stereo_mode_cb), lw);
 
 
        lw->ui_manager = gtk_ui_manager_new();
        gtk_ui_manager_set_add_tearoffs(lw->ui_manager, TRUE);
        gtk_ui_manager_insert_action_group(lw->ui_manager, lw->action_group, 0);
 
+       DEBUG_1("%s layout_actions_setup: add menu", get_exec_time());
        error = NULL;
        if (!gtk_ui_manager_add_ui_from_string(lw->ui_manager, menu_ui_description, -1, &error))
                {
@@ -1812,43 +1955,91 @@ void layout_actions_setup(LayoutWindow *lw)
                exit(EXIT_FAILURE);
                }
        
+       DEBUG_1("%s layout_actions_setup: add toolbar", get_exec_time());
        for (i = 0; i < TOOLBAR_COUNT; i++)
                {
                layout_toolbar_clear(lw, i);
                layout_toolbar_add_default(lw, i);
                }
        
+
+       DEBUG_1("%s layout_actions_setup: marks", get_exec_time());
        layout_actions_setup_marks(lw);
+
+       DEBUG_1("%s layout_actions_setup: editors", get_exec_time());
        layout_actions_setup_editors(lw);
 
+       DEBUG_1("%s layout_actions_setup: status_update_write", get_exec_time());
        layout_util_status_update_write(lw);
        
+       DEBUG_1("%s layout_actions_setup: actions_add_window", get_exec_time());
        layout_actions_add_window(lw, lw->window);
+       DEBUG_1("%s layout_actions_setup: end", get_exec_time());
 }
 
-void layout_editors_reload_all(void)
-{
-       GList *work;
+static gint layout_editors_reload_idle_id = -1;
+static GList *layout_editors_desktop_files = NULL;
 
-       work = layout_window_list;
-       while (work)
+static gboolean layout_editors_reload_idle_cb(gpointer data)
+{
+       if (!layout_editors_desktop_files)
                {
-               LayoutWindow *lw = work->data;
-               work = work->next;
-
-               gtk_ui_manager_remove_ui(lw->ui_manager, lw->ui_editors_id);
-               gtk_ui_manager_remove_action_group(lw->ui_manager, lw->action_group_editors);
-               g_object_unref(lw->action_group_editors);
+               DEBUG_1("%s layout_editors_reload_idle_cb: get_desktop_files", get_exec_time());
+               layout_editors_desktop_files = editor_get_desktop_files();
+               return TRUE;
                }
        
-       editor_load_descriptions();
+       editor_read_desktop_file(layout_editors_desktop_files->data);
+       g_free(layout_editors_desktop_files->data);
+       layout_editors_desktop_files = g_list_delete_link(layout_editors_desktop_files, layout_editors_desktop_files);
        
-       work = layout_window_list;
-       while (work)
+       
+       if (!layout_editors_desktop_files)
                {
-               LayoutWindow *lw = work->data;
-               work = work->next;
-               layout_actions_setup_editors(lw);
+               GList *work;
+               DEBUG_1("%s layout_editors_reload_idle_cb: setup_editors", get_exec_time());
+               editor_table_finish();
+
+               work = layout_window_list;
+               while (work)
+                       {
+                       LayoutWindow *lw = work->data;
+                       work = work->next;
+                       layout_actions_setup_editors(lw);
+                       }
+
+               DEBUG_1("%s layout_editors_reload_idle_cb: setup_editors done", get_exec_time());
+               
+               layout_editors_reload_idle_id = -1;
+               return FALSE;
+               }
+       return TRUE;
+}
+
+void layout_editors_reload_start(void)
+{
+       DEBUG_1("%s layout_editors_reload_start", get_exec_time());
+
+       if (layout_editors_reload_idle_id != -1)
+               {
+               g_source_remove(layout_editors_reload_idle_id);
+               string_list_free(layout_editors_desktop_files);
+               }
+
+       editor_table_clear();
+       layout_editors_reload_idle_id = g_idle_add(layout_editors_reload_idle_cb, NULL);
+}
+       
+void layout_editors_reload_finish(void)
+{
+       if (layout_editors_reload_idle_id != -1)
+               {
+               DEBUG_1("%s layout_editors_reload_finish", get_exec_time());
+               g_source_remove(layout_editors_reload_idle_id);
+               while (layout_editors_reload_idle_id != -1)
+                       {
+                       layout_editors_reload_idle_cb(NULL);
+                       }
                }
 }
 
@@ -1895,7 +2086,7 @@ GtkWidget *layout_actions_toolbar(LayoutWindow *lw, ToolbarType type)
 
 void layout_toolbar_clear(LayoutWindow *lw, ToolbarType type)
 {
-       if (lw->toolbar_merge_id[type]) 
+       if (lw->toolbar_merge_id[type])
                {
                gtk_ui_manager_remove_ui(lw->ui_manager, lw->toolbar_merge_id[type]);
                gtk_ui_manager_ensure_update(lw->ui_manager);
@@ -1926,7 +2117,30 @@ void layout_toolbar_add(LayoutWindow *lw, ToolbarType type, const gchar *action)
                        break;
                }
        
-       gtk_ui_manager_add_ui(lw->ui_manager, lw->toolbar_merge_id[type], path, action, action, GTK_UI_MANAGER_TOOLITEM, FALSE); 
+       
+       if (g_str_has_suffix(action, ".desktop"))
+               {
+               /* this may be called before the external editors are read
+                  create a dummy action for now */
+                 
+               if (!lw->action_group_editors)
+                       {
+                       lw->action_group_editors = gtk_action_group_new("MenuActionsExternal");
+                       gtk_ui_manager_insert_action_group(lw->ui_manager, lw->action_group_editors, 1);
+                       }
+               if (!gtk_action_group_get_action(lw->action_group_editors, action))
+                       {
+                       GtkActionEntry entry = { action,
+                                                GTK_STOCK_MISSING_IMAGE,
+                                                action,
+                                                NULL,
+                                                NULL,
+                                                NULL };
+                       DEBUG_1("Creating temporary action %s", action);
+                       gtk_action_group_add_actions(lw->action_group_editors, &entry, 1, lw);
+                       }
+               }
+       gtk_ui_manager_add_ui(lw->ui_manager, lw->toolbar_merge_id[type], path, action, action, GTK_UI_MANAGER_TOOLITEM, FALSE);
        lw->toolbar_actions[type] = g_list_append(lw->toolbar_actions[type], g_strdup(action));
 }
 
@@ -2004,7 +2218,7 @@ void layout_toolbar_add_from_config(LayoutWindow *lw, ToolbarType type, const gc
                }
 
        layout_toolbar_add(lw, type, action);
-       g_free(action); 
+       g_free(action);
 }
 
 /*
@@ -2069,8 +2283,8 @@ void layout_util_sync_color(LayoutWindow *lw)
        use_color = layout_image_color_profile_get_use(lw);
 
        action = gtk_action_group_get_action(lw->action_group, "UseColorProfiles");
+#ifdef HAVE_LCMS
        gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), use_color);
-       
        if (layout_image_color_profile_get_status(lw, &image_profile, &screen_profile))
                {
                gchar *buf;
@@ -2084,6 +2298,11 @@ void layout_util_sync_color(LayoutWindow *lw)
                {
                g_object_set(G_OBJECT(action), "tooltip", _("Click to enable color management"), NULL);
                }
+#else
+       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), FALSE);
+       gtk_action_set_sensitive(action, FALSE);
+       g_object_set(G_OBJECT(action), "tooltip", _("Color profiles not supported"), NULL);
+#endif
 
        action = gtk_action_group_get_action(lw->action_group, "UseImageProfile");
        gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), use_image);
@@ -2124,17 +2343,18 @@ void layout_util_sync_color(LayoutWindow *lw)
 static void layout_util_sync_views(LayoutWindow *lw)
 {
        GtkAction *action;
+       OsdShowFlags osd_flags = image_osd_get(lw->image);
 
        if (!lw->action_group) return;
 
        action = gtk_action_group_get_action(lw->action_group, "FolderTree");
-       radio_action_set_current_value(GTK_RADIO_ACTION(action), lw->options.dir_view_type);
+       gtk_radio_action_set_current_value(GTK_RADIO_ACTION(action), lw->options.dir_view_type);
 
        action = gtk_action_group_get_action(lw->action_group, "SplitSingle");
-       radio_action_set_current_value(GTK_RADIO_ACTION(action), lw->split_mode);
+       gtk_radio_action_set_current_value(GTK_RADIO_ACTION(action), lw->split_mode);
 
        action = gtk_action_group_get_action(lw->action_group, "ViewIcons");
-       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->options.file_view_type);
+       gtk_radio_action_set_current_value(GTK_RADIO_ACTION(action), lw->options.file_view_type);
 
        action = gtk_action_group_get_action(lw->action_group, "FloatTools");
        gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->options.tools_float);
@@ -2157,6 +2377,27 @@ static void layout_util_sync_views(LayoutWindow *lw)
        action = gtk_action_group_get_action(lw->action_group, "SlideShow");
        gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), layout_image_slideshow_active(lw));
 
+       action = gtk_action_group_get_action(lw->action_group, "ImageOverlay");
+       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), osd_flags != OSD_SHOW_NOTHING);
+
+       action = gtk_action_group_get_action(lw->action_group, "ImageHistogram");
+       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), osd_flags & OSD_SHOW_HISTOGRAM);
+
+       if (osd_flags & OSD_SHOW_HISTOGRAM)
+               {
+               action = gtk_action_group_get_action(lw->action_group, "HistogramChanR");
+               gtk_radio_action_set_current_value(GTK_RADIO_ACTION(action), image_osd_histogram_get_channel(lw->image));
+
+               action = gtk_action_group_get_action(lw->action_group, "HistogramModeLin");
+               gtk_radio_action_set_current_value(GTK_RADIO_ACTION(action), image_osd_histogram_get_mode(lw->image));
+               }
+
+       action = gtk_action_group_get_action(lw->action_group, "ConnectZoomMenu");
+       gtk_action_set_sensitive(action, lw->split_mode != SPLIT_NONE);
+
+       action = gtk_action_group_get_action(lw->action_group, "StereoAuto");
+       gtk_radio_action_set_current_value(GTK_RADIO_ACTION(action), layout_image_stereo_pixbuf_get(lw));
+
        layout_util_sync_color(lw);
 }
 
@@ -2179,37 +2420,6 @@ void layout_util_sync(LayoutWindow *lw)
 //     layout_menu_edit_update(lw);
 }
 
-/*
- *-----------------------------------------------------------------------------
- * icons (since all the toolbar icons are included here, best place as any)
- *-----------------------------------------------------------------------------
- */
-
-PixmapFolders *folder_icons_new(void)
-{
-       PixmapFolders *pf;
-
-       pf = g_new0(PixmapFolders, 1);
-
-       pf->close = pixbuf_inline(PIXBUF_INLINE_FOLDER_CLOSED);
-       pf->open = pixbuf_inline(PIXBUF_INLINE_FOLDER_OPEN);
-       pf->deny = pixbuf_inline(PIXBUF_INLINE_FOLDER_LOCKED);
-       pf->parent = pixbuf_inline(PIXBUF_INLINE_FOLDER_UP);
-
-       return pf;
-}
-
-void folder_icons_free(PixmapFolders *pf)
-{
-       if (!pf) return;
-
-       g_object_unref(pf->close);
-       g_object_unref(pf->open);
-       g_object_unref(pf->deny);
-       g_object_unref(pf->parent);
-
-       g_free(pf);
-}
 
 /*
  *-----------------------------------------------------------------------------
@@ -2219,7 +2429,7 @@ void folder_icons_free(PixmapFolders *pf)
 
 static gboolean layout_bar_enabled(LayoutWindow *lw)
 {
-       return lw->bar && GTK_WIDGET_VISIBLE(lw->bar);
+       return lw->bar && gtk_widget_get_visible(lw->bar);
 }
 
 static void layout_bar_destroyed(GtkWidget *widget, gpointer data)
@@ -2227,7 +2437,7 @@ static void layout_bar_destroyed(GtkWidget *widget, gpointer data)
        LayoutWindow *lw = data;
 
        lw->bar = NULL;
-/* 
+/*
     do not call layout_util_sync_views(lw) here
     this is called either when whole layout is destroyed - no need for update
     or when the bar is replaced - sync is called by upper function at the end of whole operation
@@ -2272,7 +2482,7 @@ void layout_bar_set(LayoutWindow *lw, GtkWidget *bar)
 
 
 //     gtk_box_pack_start(GTK_BOX(lw->utility_box), lw->bar, FALSE, FALSE, 0);
-       gtk_paned_pack2(GTK_PANED(lw->utility_paned), lw->bar, FALSE, TRUE); 
+       gtk_paned_pack2(GTK_PANED(lw->utility_paned), lw->bar, FALSE, TRUE);
 
        bar_set_fd(lw->bar, layout_image_get_fd(lw));
 }
@@ -2312,7 +2522,7 @@ static void layout_bar_new_selection(LayoutWindow *lw, gint count)
 
 static gboolean layout_bar_sort_enabled(LayoutWindow *lw)
 {
-       return lw->bar_sort && GTK_WIDGET_VISIBLE(lw->bar_sort);
+       return lw->bar_sort && gtk_widget_get_visible(lw->bar_sort);
 }
 
 
@@ -2322,7 +2532,7 @@ static void layout_bar_sort_destroyed(GtkWidget *widget, gpointer data)
 
        lw->bar_sort = NULL;
 
-/* 
+/*
     do not call layout_util_sync_views(lw) here
     this is called either when whole layout is destroyed - no need for update
     or when the bar is replaced - sync is called by upper function at the end of whole operation
@@ -2405,7 +2615,7 @@ GtkWidget *layout_bars_prepare(LayoutWindow *lw, GtkWidget *image)
        lw->utility_paned = gtk_hpaned_new();
        gtk_box_pack_start(GTK_BOX(lw->utility_box), lw->utility_paned, TRUE, TRUE, 0);
 
-       gtk_paned_pack1(GTK_PANED(lw->utility_paned), image, TRUE, FALSE); 
+       gtk_paned_pack1(GTK_PANED(lw->utility_paned), image, TRUE, FALSE);
        gtk_widget_show(lw->utility_paned);
        
        gtk_widget_show(image);
@@ -2428,7 +2638,7 @@ static void layout_exif_window_destroy(GtkWidget *widget, gpointer data)
 
 void layout_exif_window_new(LayoutWindow *lw)
 {
-       if (lw->exif_window) return; 
+       if (lw->exif_window) return;
        
        lw->exif_window = advanced_exif_new();
        if (!lw->exif_window) return;