Wed, 02 Sep 2026 16:57:28 +0200
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;