Bug fix: View in new window wrong size
authorColin Clark <colin.clark@cclark.uk>
Sun, 14 Oct 2018 09:39:17 +0000 (10:39 +0100)
committerColin Clark <colin.clark@cclark.uk>
Sun, 14 Oct 2018 09:39:17 +0000 (10:39 +0100)
Opening an image in "View in new window" was displayed in a window of
minimum size.
The window was opened before the image was completely loaded, and so the
window size was not known.

src/image.c
src/img-view.c

index ffe36cf..ac57bb4 100644 (file)
@@ -1121,6 +1121,8 @@ static gboolean image_scroll_cb(GtkWidget *widget, GdkEventScroll *event, gpoint
 void image_attach_window(ImageWindow *imd, GtkWidget *window,
                         const gchar *title, const gchar *title_right, gboolean show_zoom)
 {
+       LayoutWindow *lw;
+
        imd->top_window = window;
        g_free(imd->title);
        imd->title = g_strdup(title);
@@ -1128,7 +1130,9 @@ void image_attach_window(ImageWindow *imd, GtkWidget *window,
        imd->title_right = g_strdup(title_right);
        imd->title_show_zoom = show_zoom;
 
-       if (!options->image.fit_window_to_image) window = NULL;
+       lw = layout_find_by_image(imd);
+
+       if (!(options->image.fit_window_to_image && lw && lw->options.tools_float)) window = NULL;
 
        pixbuf_renderer_set_parent((PixbufRenderer *)imd->pr, (GtkWindow *)window);
 
index 7e6bb9d..75486f4 100644 (file)
@@ -29,6 +29,7 @@
 #include "filedata.h"
 #include "fullscreen.h"
 #include "image.h"
+#include "image-load.h"
 #include "image-overlay.h"
 #include "layout.h"
 #include "layout_image.h"
@@ -886,21 +887,8 @@ static ViewWindow *real_view_window_new(FileData *fd, GList *list, CollectionDat
                }
 
        /* Wait until image is loaded otherwise size is not defined */
-       int count;
-       for (count = 10; count && !w && !h; count++)
-               {
-               image_get_image_size(vw->imd, &w, &h);
-               usleep(100000);
-               }
+       image_load_dimensions(fd, &w, &h);
 
-       if (image_zoom_get(vw->imd) == 0.0)
-               {
-               image_get_image_size(vw->imd, &w, &h);
-               }
-       else
-               {
-               pixbuf_renderer_get_scaled_size(PIXBUF_RENDERER(vw->imd->pr), &w, &h);
-               }
        if (options->image.limit_window_size)
                {
                gint mw = gdk_screen_width() * options->image.max_window_size / 100;