# HG changeset patch # User Olaf Wintermann # Date 1788361048 -7200 # Node ID 3e2516e7a957b0770ef7e7ea21d5f1c1c8679c0a # Parent b0962e5fc125e721ed09de270fea26d563f8e5a7 add support for actions in imageviewer events (GTK) diff -r b0962e5fc125 -r 3e2516e7a957 ui/common/args.c --- 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); } diff -r b0962e5fc125 -r 3e2516e7a957 ui/common/args.h --- 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); diff -r b0962e5fc125 -r 3e2516e7a957 ui/gtk/image.c --- 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 diff -r b0962e5fc125 -r 3e2516e7a957 ui/gtk/image.h --- 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); diff -r b0962e5fc125 -r 3e2516e7a957 ui/ui/image.h --- 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;