Handle the case of reduction of the number of view directory types.
authorLaurent Monin <geeqie@norz.org>
Fri, 25 Apr 2008 08:07:22 +0000 (08:07 +0000)
committerLaurent Monin <geeqie@norz.org>
Fri, 25 Apr 2008 08:07:22 +0000 (08:07 +0000)
Previously it was leading to a segfault.

src/layout.c
src/layout_util.c
src/view_dir.c
src/view_dir.h

index 9cde656..7aca2d0 100644 (file)
@@ -1913,7 +1913,7 @@ LayoutWindow *layout_new_with_geometry(const gchar *path, gint popped, gint hidd
 
        layout_config_parse(options->layout.style, options->layout.order,
                            &lw->dir_location,  &lw->file_location, &lw->image_location);
-       lw->dir_view_type = options->layout.dir_view_type;
+       lw->dir_view_type = CLAMP(options->layout.dir_view_type, 0, VIEW_DIR_TYPES_COUNT - 1);
        lw->icon_view = options->layout.view_as_icons;
 
        /* divider positions */
index f9615a2..a7d09bc 100644 (file)
@@ -1414,7 +1414,7 @@ void layout_actions_setup(LayoutWindow *lw)
                                           menu_split_radio_entries, G_N_ELEMENTS(menu_split_radio_entries),
                                           0, G_CALLBACK(layout_menu_split_cb), lw);
        gtk_action_group_add_radio_actions(lw->action_group,
-                                          menu_view_dir_radio_entries, G_N_ELEMENTS(menu_view_dir_radio_entries),
+                                          menu_view_dir_radio_entries, VIEW_DIR_TYPES_COUNT,
                                           0, G_CALLBACK(layout_menu_view_dir_as_cb), lw);
 
        lw->ui_manager = gtk_ui_manager_new();
index 49571aa..2104579 100644 (file)
@@ -58,6 +58,8 @@ static void vd_destroy_cb(GtkWidget *widget, gpointer data)
 
 ViewDir *vd_new(DirViewType type, const gchar *path)
 {
+       g_assert(VIEW_DIR_TYPES_COUNT <= G_N_ELEMENTS(menu_view_dir_radio_entries));
+
        ViewDir *vd = g_new0(ViewDir, 1);
 
        vd->path = NULL;
@@ -618,7 +620,7 @@ GtkWidget *vd_pop_menu(ViewDir *vd, FileData *fd)
        submenu = gtk_menu_new();
        gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);
 
-       for (i = 0; i < G_N_ELEMENTS(menu_view_dir_radio_entries); i++)
+       for (i = 0; i < VIEW_DIR_TYPES_COUNT; i++)
                {
                item = menu_item_add_check(submenu, _(menu_view_dir_radio_entries[i].label),
                                           (vd->type == menu_view_dir_radio_entries[i].value),
index 70b6c5c..700f343 100644 (file)
@@ -20,7 +20,8 @@ enum {
        DIR_COLUMN_COUNT
 };
 
-extern GtkRadioActionEntry menu_view_dir_radio_entries[2];
+#define VIEW_DIR_TYPES_COUNT 1
+extern GtkRadioActionEntry menu_view_dir_radio_entries[VIEW_DIR_TYPES_COUNT];
 
 ViewDir *vd_new(DirViewType type, const gchar *path);