add support for actions in imageviewer events (GTK) default tip

Wed, 02 Sep 2026 16:57:28 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Wed, 02 Sep 2026 16:57:28 +0200
changeset 1240
3e2516e7a957
parent 1239
b0962e5fc125

add support for actions in imageviewer events (GTK)

ui/common/args.c file | annotate | diff | comparison | revisions
ui/common/args.h file | annotate | diff | comparison | revisions
ui/gtk/image.c file | annotate | diff | comparison | revisions
ui/gtk/image.h file | annotate | diff | comparison | revisions
ui/ui/image.h file | annotate | diff | comparison | revisions
--- a/ui/common/args.c	Tue Sep 01 19:41:45 2026 +0200
+++ b/ui/common/args.c	Wed Sep 02 16:57:28 2026 +0200
@@ -3124,6 +3124,10 @@
     args->onbuttonpressdata = onbuttonpressdata;
 }
 
+void ui_imageviewer_args_set_onbuttonpress_action(UiImageViewerArgs *args, const char *action) {
+    args->onbuttonpress_action = strdup(action);
+}
+
 void ui_imageviewer_args_set_onbuttonrelease(UiImageViewerArgs *args, ui_callback callback) {
     args->onbuttonrelease = callback;
 }
@@ -3132,11 +3136,17 @@
     args->onbuttonreleasedata = onbuttonreleasedata;
 }
 
+void ui_imageviewer_args_set_onbuttonrelease_action(UiImageViewerArgs *args, const char *action) {
+    args->onbuttonrelease_action = strdup(action);
+}
+
 void ui_imageviewer_args_free(UiImageViewerArgs *args) {
     free((void*)args->name);
     free((void*)args->style_class);
     free((void*)args->varname);
     free((void*)args->visibility_states);
+    free((void*)args->onbuttonpress_action);
+    free((void*)args->onbuttonrelease_action);
     free(args);
 }
 
--- a/ui/common/args.h	Tue Sep 01 19:41:45 2026 +0200
+++ b/ui/common/args.h	Wed Sep 02 16:57:28 2026 +0200
@@ -723,8 +723,10 @@
 UIEXPORT void ui_imageviewer_args_set_contextmenu(UiImageViewerArgs *args, UiMenuBuilder *menubuilder);
 UIEXPORT void ui_imageviewer_args_set_onbuttonpress(UiImageViewerArgs *args, ui_callback callback);
 UIEXPORT void ui_imageviewer_args_set_onbuttonpressdata(UiImageViewerArgs *args, void *onbuttonpressdata);
+UIEXPORT void ui_imageviewer_args_set_onbuttonpress_action(UiImageViewerArgs *args, const char *action);
 UIEXPORT void ui_imageviewer_args_set_onbuttonrelease(UiImageViewerArgs *args, ui_callback callback);
 UIEXPORT void ui_imageviewer_args_set_onbuttonreleasedata(UiImageViewerArgs *args, void *onbuttonreleasedata);
+UIEXPORT void ui_imageviewer_args_set_onbuttonrelease_action(UiImageViewerArgs *args, const char *action);
 UIEXPORT void ui_imageviewer_args_free(UiImageViewerArgs *args);
 
 UIEXPORT UiWebviewArgs* ui_webview_args_new(void);
--- a/ui/gtk/image.c	Tue Sep 01 19:41:45 2026 +0200
+++ b/ui/gtk/image.c	Wed Sep 02 16:57:28 2026 +0200
@@ -33,11 +33,14 @@
 #include "widget.h"
 #include "../common/context.h"
 #include "../common/object.h"
+#include "../common/action.h"
 
 static void imageviewer_destroy(UiImageViewer *iv) {
     if(iv->pixbuf) {
         g_object_unref(iv->pixbuf);
     }
+    free(iv->onbuttonpress_action);
+    free(iv->onbuttonrelease_action);
     free(iv);
 }
 
@@ -96,8 +99,10 @@
     imgviewer->obj = obj;
     imgviewer->onbuttonpress = args->onbuttonpress;
     imgviewer->onbuttonpressdata = args->onbuttonpressdata;
+    imgviewer->onbuttonpress_action = args->onbuttonpress_action ? strdup(args->onbuttonpress_action) : NULL;
     imgviewer->onbuttonrelease = args->onbuttonrelease;
     imgviewer->onbuttonreleasedata = args->onbuttonreleasedata;
+    imgviewer->onbuttonrelease_action = args->onbuttonrelease_action ? strdup(args->onbuttonrelease_action) : NULL;
     if(args->image_padding > 0) {
         imgviewer->padding_left = args->image_padding;
         imgviewer->padding_right = args->image_padding;
@@ -464,7 +469,8 @@
         GtkGestureClick *gesture,
         UiImageViewer *imgviewer,
         ui_callback callback,
-        void *userdata)
+        void *userdata,
+        const char *action)
 {
     UiEvent event;
     event.obj = imgviewer->obj;
@@ -474,7 +480,13 @@
     event.eventdatatype = 0;
     event.intval = gtk_gesture_single_get_current_button(GTK_GESTURE_SINGLE(gesture));
     event.set = 0;
-    callback(&event, userdata);
+    
+    if(callback) {
+        callback(&event, userdata);
+    }
+    if(action) {
+        uic_action_callback(&event, action);
+    }
 }
 
 void ui_imageviewer_pressed_cb(
@@ -485,9 +497,7 @@
         gpointer userdata)
 {
     UiImageViewer *imgviewer = userdata;
-    if(imgviewer->onbuttonpress) {
-        imgviewer_button_event(self, imgviewer, imgviewer->onbuttonpress, imgviewer->onbuttonpressdata);
-    }
+    imgviewer_button_event(self, imgviewer, imgviewer->onbuttonpress, imgviewer->onbuttonpressdata, imgviewer->onbuttonpress_action);
 }
 
 void ui_imageviewer_released_cb(
@@ -498,9 +508,7 @@
         gpointer userdata)
 {
     UiImageViewer *imgviewer = userdata;
-    if(imgviewer->onbuttonrelease) {
-        imgviewer_button_event(self, imgviewer, imgviewer->onbuttonrelease, imgviewer->onbuttonreleasedata);
-    }
+    imgviewer_button_event(self, imgviewer, imgviewer->onbuttonrelease, imgviewer->onbuttonreleasedata, imgviewer->onbuttonrelease_action);
 }
 
 #else
--- a/ui/gtk/image.h	Tue Sep 01 19:41:45 2026 +0200
+++ b/ui/gtk/image.h	Wed Sep 02 16:57:28 2026 +0200
@@ -60,8 +60,10 @@
     
     ui_callback onbuttonpress;
     void *onbuttonpressdata;
+    char *onbuttonpress_action;
     ui_callback onbuttonrelease;
     void *onbuttonreleasedata;
+    char *onbuttonrelease_action;
 } UiImageViewer;
 
 void ui_cairo_draw_image(UiImageViewer *imgviewer, cairo_t *cr, int width, int height);
--- a/ui/ui/image.h	Tue Sep 01 19:41:45 2026 +0200
+++ b/ui/ui/image.h	Wed Sep 02 16:57:28 2026 +0200
@@ -78,8 +78,10 @@
     
     ui_callback onbuttonpress;
     void *onbuttonpressdata;
+    const char *onbuttonpress_action;
     ui_callback onbuttonrelease;
     void *onbuttonreleasedata;
+    const char *onbuttonrelease_action;
     
     const int *visibility_states;
 } UiImageViewerArgs;

mercurial