Trim trailing white spaces on empty lines.
[geeqie.git] / src / layout_util.c
index 7707ad5..a954019 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
  *
@@ -64,10 +64,10 @@ static void layout_util_sync_views(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)
@@ -85,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);
                        }
@@ -104,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))
                {
@@ -116,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:
@@ -151,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:
@@ -609,7 +605,7 @@ static void layout_menu_thumb_cb(GtkToggleAction *action, gpointer data)
 static void layout_menu_list_cb(GtkRadioAction *action, GtkRadioAction *current, gpointer data)
 {
        LayoutWindow *lw = data;
-       
+
        layout_exit_fullscreen(lw);
        layout_views_set(lw, lw->options.dir_view_type, (FileViewType) gtk_radio_action_get_current_value(action));
 }
@@ -642,11 +638,6 @@ 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_toggle_cb(GtkAction *action, gpointer data)
@@ -661,17 +652,18 @@ static void layout_menu_overlay_toggle_cb(GtkAction *action, gpointer data)
 static void layout_menu_overlay_cb(GtkToggleAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
-       GtkToggleAction *histogram_action = GTK_TOGGLE_ACTION(gtk_action_group_get_action(lw->action_group, "ImageHistogram"));
 
        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 */
                }
@@ -680,7 +672,6 @@ static void layout_menu_overlay_cb(GtkToggleAction *action, gpointer data)
 static void layout_menu_histogram_cb(GtkToggleAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
-       GtkToggleAction *overlay_action = GTK_TOGGLE_ACTION(gtk_action_group_get_action(lw->action_group, "ImageOverlay"));
 
        if (gtk_toggle_action_get_active(action))
                {
@@ -718,7 +709,7 @@ static void layout_menu_histogram_channel_cb(GtkRadioAction *action, GtkRadioAct
        GtkToggleAction *histogram_action = GTK_TOGGLE_ACTION(gtk_action_group_get_action(lw->action_group, "ImageHistogram"));
 
        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);
 }
@@ -730,7 +721,7 @@ static void layout_menu_histogram_mode_cb(GtkRadioAction *action, GtkRadioAction
        GtkToggleAction *histogram_action = GTK_TOGGLE_ACTION(gtk_action_group_get_action(lw->action_group, "ImageHistogram"));
 
        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);
 }
@@ -745,7 +736,7 @@ static void layout_menu_refresh_cb(GtkAction *action, gpointer data)
 static void layout_menu_bar_exif_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
-       
+
        layout_exit_fullscreen(lw);
        layout_exif_window_new(lw);
 }
@@ -824,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;
@@ -843,7 +860,7 @@ static void layout_menu_help_keys_cb(GtkAction *action, gpointer data)
 static void layout_menu_notes_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
-       
+
        layout_exit_fullscreen(lw);
        help_window_show("release_notes");
 }
@@ -1024,9 +1041,9 @@ 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);
 }
@@ -1035,7 +1052,7 @@ static void layout_menu_home_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
        const gchar *path;
-       
+
        if (lw->options.home_path && *lw->options.home_path)
                path = lw->options.home_path;
        else
@@ -1043,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);
                }
@@ -1060,7 +1077,7 @@ static void layout_menu_edit_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
        const gchar *key = gtk_action_get_name(action);
-       
+
        if (!editor_window_flag_set(key))
                layout_exit_fullscreen(lw);
 
@@ -1244,6 +1261,7 @@ static GtkActionEntry menu_entries[] = {
   { "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 },
 
@@ -1343,6 +1361,7 @@ static GtkActionEntry menu_entries[] = {
   { "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_("_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) },
 
 };
 
@@ -1401,6 +1420,13 @@ static GtkRadioActionEntry menu_histogram_mode[] = {
   { "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
 
@@ -1539,6 +1565,14 @@ static const gchar *menu_ui_description =
 "        <menuitem action='SplitQuad'/>"
 "        <menuitem action='SplitSingle'/>"
 "      </menu>"
+"      <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'/>"
@@ -1637,7 +1671,7 @@ static void layout_actions_setup_mark(LayoutWindow *lw, gint mark, gchar *name_t
 
        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
@@ -1647,7 +1681,7 @@ static void layout_actions_setup_mark(LayoutWindow *lw, gint mark, gchar *name_t
                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));
@@ -1719,23 +1753,23 @@ static GList *layout_actions_editor_menu_path(EditorDescription *editor)
        gchar **split = g_strsplit(editor->menu_path, "/", 0);
        gint i = 0;
        GList *ret = NULL;
-       
-       if (split[0] == NULL) 
+
+       if (split[0] == NULL)
                {
                g_strfreev(split);
                return NULL;
                }
-       
+
        while (split[i])
                {
                ret = g_list_prepend(ret, g_strdup(split[i]));
                i++;
                }
-       
+
        g_strfreev(split);
-       
+
        ret = g_list_prepend(ret, g_strdup(editor->key));
-       
+
        return g_list_reverse(ret);
 }
 
@@ -1749,13 +1783,13 @@ static void layout_actions_editor_add(GString *desc, GList *path, GList *old_pat
                }
        to_open = g_list_length(path) - 1;
        to_close = g_list_length(old_path) - 1;
-       
+
        if (to_close > 0)
                {
                old_path = g_list_last(old_path);
                old_path = old_path->prev;
                }
-       
+
        for (i =  0; i < to_close; i++)
                {
                gchar *name = old_path->data;
@@ -1791,7 +1825,7 @@ static void layout_actions_editor_add(GString *desc, GList *path, GList *old_pat
                        }
                path = path->next;
                }
-       
+
        if (path)
                g_string_append_printf(desc, "      <menuitem action='%s'/>", (gchar *)path->data);
 }
@@ -1803,7 +1837,12 @@ static void layout_actions_setup_editors(LayoutWindow *lw)
        GList *work;
        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);
@@ -1818,29 +1857,29 @@ static void layout_actions_setup_editors(LayoutWindow *lw)
                                "  <menubar name='MainMenu'>");
 
        editors_list = editor_list_get();
-       
+
        old_path = NULL;
        work = editors_list;
        while (work)
                {
                GList *path;
                EditorDescription *editor = work->data;
-               GtkActionEntry entry = { editor->key, 
+               GtkActionEntry entry = { editor->key,
                                         NULL,
                                         editor->name,
-                                        editor->hotkey, 
+                                        editor->hotkey,
                                         editor->comment ? editor->comment : editor->name,
                                         G_CALLBACK(layout_menu_edit_cb) };
-               
+
                if (editor->icon)
                        {
                        entry.stock_id = editor->key;
                        }
                gtk_action_group_add_actions(lw->action_group_editors, &entry, 1, lw);
-               
+
                path = layout_actions_editor_menu_path(editor);
                layout_actions_editor_add(desc, path, old_path);
-               
+
                string_list_free(old_path);
                old_path = path;
                work = work->next;
@@ -1853,7 +1892,7 @@ static void layout_actions_setup_editors(LayoutWindow *lw)
                                "</ui>" );
 
        error = NULL;
-       
+
        lw->ui_editors_id = gtk_ui_manager_add_ui_from_string(lw->ui_manager, desc->str, -1, &error);
        if (!lw->ui_editors_id)
                {
@@ -1898,6 +1937,9 @@ void layout_actions_setup(LayoutWindow *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();
@@ -1912,14 +1954,14 @@ void layout_actions_setup(LayoutWindow *lw)
                g_error_free(error);
                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);
@@ -1929,7 +1971,7 @@ void layout_actions_setup(LayoutWindow *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());
@@ -1946,12 +1988,12 @@ static gboolean layout_editors_reload_idle_cb(gpointer data)
                layout_editors_desktop_files = editor_get_desktop_files();
                return TRUE;
                }
-       
+
        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);
-       
-       
+
+
        if (!layout_editors_desktop_files)
                {
                GList *work;
@@ -1967,7 +2009,7 @@ static gboolean layout_editors_reload_idle_cb(gpointer data)
                        }
 
                DEBUG_1("%s layout_editors_reload_idle_cb: setup_editors done", get_exec_time());
-               
+
                layout_editors_reload_idle_id = -1;
                return FALSE;
                }
@@ -1976,8 +2018,6 @@ static gboolean layout_editors_reload_idle_cb(gpointer data)
 
 void layout_editors_reload_start(void)
 {
-       GList *work;
-
        DEBUG_1("%s layout_editors_reload_start", get_exec_time());
 
        if (layout_editors_reload_idle_id != -1)
@@ -1986,21 +2026,10 @@ void layout_editors_reload_start(void)
                string_list_free(layout_editors_desktop_files);
                }
 
-       work = layout_window_list;
-       while (work)
-               {
-               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);
-               lw->action_group_editors = NULL;
-               }
        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)
@@ -2057,23 +2086,23 @@ 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);
                }
        string_list_free(lw->toolbar_actions[type]);
        lw->toolbar_actions[type] = NULL;
-       
+
        lw->toolbar_merge_id[type] = gtk_ui_manager_new_merge_id(lw->ui_manager);
 }
-       
+
 
 void layout_toolbar_add(LayoutWindow *lw, ToolbarType type, const gchar *action)
 {
        const gchar *path = NULL;
        if (!action || !lw->ui_manager) return;
-       
+
        if (g_list_find_custom(lw->toolbar_actions[type], action, (GCompareFunc)strcmp)) return;
 
        switch (type)
@@ -2087,13 +2116,13 @@ void layout_toolbar_add(LayoutWindow *lw, ToolbarType type, const gchar *action)
                default:
                        break;
                }
-       
-       
+
+
        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");
@@ -2101,17 +2130,17 @@ void layout_toolbar_add(LayoutWindow *lw, ToolbarType type, const gchar *action)
                        }
                if (!gtk_action_group_get_action(lw->action_group_editors, action))
                        {
-                       GtkActionEntry entry = { action, 
+                       GtkActionEntry entry = { action,
                                                 GTK_STOCK_MISSING_IMAGE,
                                                 action,
-                                                NULL, 
+                                                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); 
+       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));
 }
 
@@ -2177,7 +2206,7 @@ void layout_toolbar_write_config(LayoutWindow *lw, ToolbarType type, GString *ou
 void layout_toolbar_add_from_config(LayoutWindow *lw, ToolbarType type, const gchar **attribute_names, const gchar **attribute_values)
 {
        gchar *action = NULL;
-       
+
        while (*attribute_names)
                {
                const gchar *option = *attribute_names++;
@@ -2189,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);
 }
 
 /*
@@ -2250,7 +2279,7 @@ void layout_util_sync_color(LayoutWindow *lw)
 
        if (!lw->action_group) return;
        if (!layout_image_color_profile_get(lw, &input, &use_image)) return;
-       
+
        use_color = layout_image_color_profile_get_use(lw);
 
        action = gtk_action_group_get_action(lw->action_group, "UseColorProfiles");
@@ -2283,7 +2312,7 @@ void layout_util_sync_color(LayoutWindow *lw)
                {
                sprintf(action_name, "ColorProfile%d", i);
                action = gtk_action_group_get_action(lw->action_group, action_name);
-               
+
                if (i >= COLOR_PROFILE_FILE)
                        {
                        const gchar *name = options->color_profile.input_name[i - COLOR_PROFILE_FILE];
@@ -2319,13 +2348,13 @@ static void layout_util_sync_views(LayoutWindow *lw)
        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");
-       radio_action_set_current_value(GTK_RADIO_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);
@@ -2338,7 +2367,7 @@ static void layout_util_sync_views(LayoutWindow *lw)
 
        action = gtk_action_group_get_action(lw->action_group, "HideToolbar");
        gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->options.toolbar_hidden);
-       
+
        action = gtk_action_group_get_action(lw->action_group, "ShowInfoPixel");
        gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->options.show_info_pixel);
 
@@ -2357,15 +2386,18 @@ static void layout_util_sync_views(LayoutWindow *lw)
        if (osd_flags & OSD_SHOW_HISTOGRAM)
                {
                action = gtk_action_group_get_action(lw->action_group, "HistogramChanR");
-               radio_action_set_current_value(GTK_RADIO_ACTION(action), image_osd_histogram_get_channel(lw->image));
+               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");
-               radio_action_set_current_value(GTK_RADIO_ACTION(action), image_osd_histogram_get_mode(lw->image));
+               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);
 }
 
@@ -2397,7 +2429,7 @@ void layout_util_sync(LayoutWindow *lw)
 
 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)
@@ -2405,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
@@ -2416,13 +2448,13 @@ static void layout_bar_destroyed(GtkWidget *widget, gpointer data)
 static void layout_bar_set_default(LayoutWindow *lw)
 {
        GtkWidget *bar;
-       
+
        if (!lw->utility_box) return;
 
        bar = bar_new(lw);
-       
+
        layout_bar_set(lw, bar);
-       
+
        bar_populate_default(bar);
 }
 
@@ -2450,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));
 }
@@ -2490,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);
 }
 
 
@@ -2500,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
@@ -2511,11 +2543,11 @@ static void layout_bar_sort_destroyed(GtkWidget *widget, gpointer data)
 static void layout_bar_sort_set_default(LayoutWindow *lw)
 {
        GtkWidget *bar;
-       
+
        if (!lw->utility_box) return;
 
        bar = bar_sort_new_default(lw);
-       
+
        layout_bar_sort_set(lw, bar);
 }
 
@@ -2583,9 +2615,9 @@ 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);
 
        g_object_ref(lw->utility_box);
@@ -2606,8 +2638,8 @@ 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;
        g_signal_connect(G_OBJECT(lw->exif_window), "destroy",