Part fix #1159: Continuous zoom with mouse button
authorColin Clark <colin.clark@cclark.uk>
Thu, 10 Aug 2023 14:27:50 +0000 (15:27 +0100)
committerColin Clark <colin.clark@cclark.uk>
Thu, 10 Aug 2023 14:27:50 +0000 (15:27 +0100)
https://github.com/BestImageViewer/geeqie/issues/1159

Mouse buttons 8 and 9 (labelled as back/forward in Preferences/Behavior)
now work in fullscreen.

src/image.cc
src/layout.cc

index ce7bba3..36e5333 100644 (file)
@@ -33,6 +33,7 @@
 #include "pixbuf-renderer.h"
 #include "pixbuf-util.h"
 #include "ui-fileops.h"
+#include "ui-misc.h"
 #include "filecache.h"
 
 #include <cmath>
@@ -186,6 +187,20 @@ static void image_press_cb(PixbufRenderer *pr, GdkEventButton *event, gpointer d
                }
 }
 
+static void image_release_cb(PixbufRenderer *, GdkEventButton *event, gpointer data)
+{
+       auto imd = static_cast<ImageWindow *>(data);
+       LayoutWindow *lw;
+
+       lw = layout_find_by_image(imd);
+       if (!lw)
+               {
+               layout_valid(&lw);
+               }
+
+       defined_mouse_buttons(NULL, event, lw);
+}
+
 static void image_drag_cb(PixbufRenderer *pr, GdkEventMotion *event, gpointer data)
 {
        auto imd = static_cast<ImageWindow *>(data);
@@ -2200,6 +2215,8 @@ ImageWindow *image_new(gboolean frame)
                         G_CALLBACK(image_click_cb), imd);
        g_signal_connect(G_OBJECT(imd->pr), "button_press_event",
                         G_CALLBACK(image_press_cb), imd);
+       g_signal_connect(G_OBJECT(imd->pr), "button_release_event",
+                        G_CALLBACK(image_release_cb), imd);
        g_signal_connect(G_OBJECT(imd->pr), "scroll_notify",
                         G_CALLBACK(image_scroll_notify_cb), imd);
 
index 8bfc72c..e419d07 100644 (file)
@@ -2515,11 +2515,6 @@ LayoutWindow *layout_new(FileData *dir_fd, LayoutOptions *lop)
        return layout_new_with_geometry(dir_fd, lop, nullptr);
 }
 
-gboolean release_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
-{
-       return defined_mouse_buttons(widget, event, data);
-}
-
 static gboolean move_window_to_workspace_cb(gpointer data)
 {
 #ifdef GDK_WINDOWING_X11
@@ -2594,8 +2589,6 @@ LayoutWindow *layout_new_with_geometry(FileData *dir_fd, LayoutOptions *lop,
        gtk_window_set_resizable(GTK_WINDOW(lw->window), TRUE);
        gtk_container_set_border_width(GTK_CONTAINER(lw->window), 0);
 
-       g_signal_connect(G_OBJECT(lw->window), "button_release_event", G_CALLBACK(release_cb), lw);
-
        if (options->save_window_positions)
                {
                hint_mask = GDK_HINT_USER_POS;