Fix #609: Crash on "View in New Window" if no image active
authorColin Clark <colin.clark@cclark.uk>
Tue, 15 May 2018 08:37:55 +0000 (09:37 +0100)
committerColin Clark <colin.clark@cclark.uk>
Tue, 15 May 2018 08:37:55 +0000 (09:37 +0100)
https://github.com/BestImageViewer/geeqie/issues/609

src/img-view.c

index efd3e2c..7e6bb9d 100644 (file)
@@ -940,41 +940,44 @@ void view_window_new(FileData *fd)
 {
        GList *list;
 
-       if (file_extension_match(fd->path, GQ_COLLECTION_EXT))
+       if (fd)
                {
-               ViewWindow *vw;
-               CollectionData *cd;
-               CollectInfo *info;
-
-               cd = collection_new(fd->path);
-               if (collection_load(cd, fd->path, COLLECTION_LOAD_NONE))
+               if (file_extension_match(fd->path, GQ_COLLECTION_EXT))
                        {
-                       info = collection_get_first(cd);
+                       ViewWindow *vw;
+                       CollectionData *cd;
+                       CollectInfo *info;
+
+                       cd = collection_new(fd->path);
+                       if (collection_load(cd, fd->path, COLLECTION_LOAD_NONE))
+                               {
+                               info = collection_get_first(cd);
+                               }
+                       else
+                               {
+                               collection_unref(cd);
+                               cd = NULL;
+                               info = NULL;
+                               }
+                       vw = real_view_window_new(NULL, NULL, cd, info);
+                       if (vw && cd)
+                               {
+                               g_signal_connect(G_OBJECT(vw->window), "destroy",
+                                                G_CALLBACK(view_window_collection_unref_cb), cd);
+                               }
                        }
-               else
+               else if (isdir(fd->path) && filelist_read(fd, &list, NULL))
                        {
-                       collection_unref(cd);
-                       cd = NULL;
-                       info = NULL;
+                       list = filelist_sort_path(list);
+                       list = filelist_filter(list, FALSE);
+                       real_view_window_new(NULL, list, NULL, NULL);
+                       filelist_free(list);
                        }
-               vw = real_view_window_new(NULL, NULL, cd, info);
-               if (vw && cd)
+               else
                        {
-                       g_signal_connect(G_OBJECT(vw->window), "destroy",
-                                        G_CALLBACK(view_window_collection_unref_cb), cd);
+                       real_view_window_new(fd, NULL, NULL, NULL);
                        }
                }
-       else if (isdir(fd->path) && filelist_read(fd, &list, NULL))
-               {
-               list = filelist_sort_path(list);
-               list = filelist_filter(list, FALSE);
-               real_view_window_new(NULL, list, NULL, NULL);
-               filelist_free(list);
-               }
-       else
-               {
-               real_view_window_new(fd, NULL, NULL, NULL);
-               }
 }
 
 void view_window_new_from_list(GList *list)