From: Olaf Wintermann Date: Wed, 2 Sep 2026 15:00:20 +0000 (+0200) Subject: add support for actions for imageviewer events X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;ds=sidebyside;p=note.git add support for actions for imageviewer events --- diff --git a/ui-rs/src/ui/image.rs b/ui-rs/src/ui/image.rs index 35fe534..0ca2b55 100644 --- a/ui-rs/src/ui/image.rs +++ b/ui-rs/src/ui/image.rs @@ -349,6 +349,14 @@ impl<'a, T> ImageViewerBuilder<'a, T> { self } + pub fn onbuttonpress_action(&mut self, action: &str) -> &mut Self { + let cstr = CString::new(action).unwrap(); + unsafe { + ui_imageviewer_args_set_onbuttonpress_action(self.args, cstr.as_ptr()); + } + self + } + pub fn onbuttonrelease(&mut self, f: F) -> &mut Self where F: FnMut(&mut event::Event) + 'static { let wrapper = Box::new(EventWrapper::new(f) ); @@ -360,6 +368,14 @@ impl<'a, T> ImageViewerBuilder<'a, T> { self } + pub fn onbuttonrelease_action(&mut self, action: &str) -> &mut Self { + let cstr = CString::new(action).unwrap(); + unsafe { + ui_imageviewer_args_set_onbuttonrelease_action(self.args, cstr.as_ptr()); + } + self + } + pub fn visibility_states>(&mut self, states: &[S]) -> &mut Self { let states: Vec = states.iter().copied().map(Into::into).collect(); unsafe { @@ -428,8 +444,10 @@ unsafe extern "C" { fn ui_imageviewer_args_set_image_padding_bottom(args: *mut UiImageViewerArgs, value: c_int); fn ui_imageviewer_args_set_onbuttonpress(args: *mut UiImageViewerArgs, callback: UiCallback); fn ui_imageviewer_args_set_onbuttonpressdata(args: *mut UiImageViewerArgs, data: *const c_void); + fn ui_imageviewer_args_set_onbuttonpress_action(args: *mut UiImageViewerArgs, action: *const c_char); fn ui_imageviewer_args_set_onbuttonrelease(args: *mut UiImageViewerArgs, callback: UiCallback); fn ui_imageviewer_args_set_onbuttonreleasedata(args: *mut UiImageViewerArgs, data: *const c_void); + fn ui_imageviewer_args_set_onbuttonrelease_action(args: *mut UiImageViewerArgs, action: *const c_char); fn ui_imageviewer_args_set_visibility_states(args: *mut UiImageViewerArgs, states: *const c_int, numstates: c_int); fn ui_imageviewer_args_free(args: *mut UiImageViewerArgs); diff --git a/ui/common/args.c b/ui/common/args.c index 8053d82..8f1f1fe 100644 --- a/ui/common/args.c +++ b/ui/common/args.c @@ -191,6 +191,98 @@ void ui_dialogwindow_args_free(UiDialogWindowArgs *args) { } +/* ---------------------------- UiHeaderbarArgs ---------------------------- */ + +UiHeaderbarArgs* ui_headerbar_args_new(void) { + UiHeaderbarArgs *args = malloc(sizeof(UiHeaderbarArgs)); + memset(args, 0, sizeof(UiHeaderbarArgs)); + return args; +} + +void ui_headerbar_args_set_fill(UiHeaderbarArgs *args, UiBool fill) { + args->fill = fill; +} + +void ui_headerbar_args_set_hexpand(UiHeaderbarArgs *args, UiBool value) { + args->hexpand = value; +} + +void ui_headerbar_args_set_vexpand(UiHeaderbarArgs *args, UiBool value) { + args->vexpand = value; +} + +void ui_headerbar_args_set_hfill(UiHeaderbarArgs *args, UiBool value) { + args->hfill = value; +} + +void ui_headerbar_args_set_vfill(UiHeaderbarArgs *args, UiBool value) { + args->vfill = value; +} + +void ui_headerbar_args_set_override_defaults(UiHeaderbarArgs *args, UiBool value) { + args->override_defaults = value; +} + +void ui_headerbar_args_set_margin(UiHeaderbarArgs *args, int value) { + args->margin = value; +} + +void ui_headerbar_args_set_margin_left(UiHeaderbarArgs *args, int value) { + args->margin_left = value; +} + +void ui_headerbar_args_set_margin_right(UiHeaderbarArgs *args, int value) { + args->margin_right = value; +} + +void ui_headerbar_args_set_margin_top(UiHeaderbarArgs *args, int value) { + args->margin_top = value; +} + +void ui_headerbar_args_set_margin_bottom(UiHeaderbarArgs *args, int value) { + args->margin_bottom = value; +} + +void ui_headerbar_args_set_colspan(UiHeaderbarArgs *args, int colspan) { + args->colspan = colspan; +} + +void ui_headerbar_args_set_rowspan(UiHeaderbarArgs *args, int rowspan) { + args->rowspan = rowspan; +} + +void ui_headerbar_args_set_name(UiHeaderbarArgs *args, const char *name) { + args->name = strdup(name); +} + +void ui_headerbar_args_set_style_class(UiHeaderbarArgs *args, const char *classname) { + args->style_class = strdup(classname); +} + +void ui_headerbar_args_set_showtitle(UiHeaderbarArgs *args, UiBool value) { + args->showtitle = value; +} + +void ui_headerbar_args_set_showwindowbuttons(UiHeaderbarArgs *args, UiBool value) { + args->showwindowbuttons = value; +} + +void ui_headerbar_args_set_alternative(UiHeaderbarArgs *args, UiHeaderbarAlternative alt) { + args->alternative = alt; +} + +void ui_headerbar_args_set_alt_spacing(UiHeaderbarArgs *args, int spacing) { + args->alt_spacing = spacing; +} + +void ui_headerbar_args_free(UiHeaderbarArgs *args) { + free((void*)args->name); + free((void*)args->style_class); + free(args); +} + + + /* ---------------------------- UiMenuItemArgs ---------------------------- */ UiMenuItemArgs* ui_menuitem_args_new(void) { @@ -3032,6 +3124,10 @@ void ui_imageviewer_args_set_onbuttonpressdata(UiImageViewerArgs *args, void *on 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; } @@ -3040,11 +3136,17 @@ void ui_imageviewer_args_set_onbuttonreleasedata(UiImageViewerArgs *args, void * 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 --git a/ui/common/args.h b/ui/common/args.h index ec13c64..fc4b859 100644 --- a/ui/common/args.h +++ b/ui/common/args.h @@ -78,6 +78,28 @@ UIEXPORT void ui_dialogwindow_args_set_height(UiDialogWindowArgs *args, int heig UIEXPORT void ui_dialogwindow_args_set_onclick(UiDialogWindowArgs *args, ui_callback cb); UIEXPORT void ui_dialogwindow_args_set_onclickdata(UiDialogWindowArgs *args, void *userdata); UIEXPORT void ui_dialogwindow_args_free(UiDialogWindowArgs *args); + +UIEXPORT UiHeaderbarArgs* ui_headerbar_args_new(void); +UIEXPORT void ui_headerbar_args_set_fill(UiHeaderbarArgs *args, UiBool fill); +UIEXPORT void ui_headerbar_args_set_hexpand(UiHeaderbarArgs *args, UiBool value); +UIEXPORT void ui_headerbar_args_set_vexpand(UiHeaderbarArgs *args, UiBool value); +UIEXPORT void ui_headerbar_args_set_hfill(UiHeaderbarArgs *args, UiBool value); +UIEXPORT void ui_headerbar_args_set_vfill(UiHeaderbarArgs *args, UiBool value); +UIEXPORT void ui_headerbar_args_set_override_defaults(UiHeaderbarArgs *args, UiBool value); +UIEXPORT void ui_headerbar_args_set_margin(UiHeaderbarArgs *args, int value); +UIEXPORT void ui_headerbar_args_set_margin_left(UiHeaderbarArgs *args, int value); +UIEXPORT void ui_headerbar_args_set_margin_right(UiHeaderbarArgs *args, int value); +UIEXPORT void ui_headerbar_args_set_margin_top(UiHeaderbarArgs *args, int value); +UIEXPORT void ui_headerbar_args_set_margin_bottom(UiHeaderbarArgs *args, int value); +UIEXPORT void ui_headerbar_args_set_colspan(UiHeaderbarArgs *args, int colspan); +UIEXPORT void ui_headerbar_args_set_rowspan(UiHeaderbarArgs *args, int rowspan); +UIEXPORT void ui_headerbar_args_set_name(UiHeaderbarArgs *args, const char *name); +UIEXPORT void ui_headerbar_args_set_style_class(UiHeaderbarArgs *args, const char *classname); +UIEXPORT void ui_headerbar_args_set_showtitle(UiHeaderbarArgs *args, UiBool value); +UIEXPORT void ui_headerbar_args_set_showwindowbuttons(UiHeaderbarArgs *args, UiBool value); +UIEXPORT void ui_headerbar_args_set_alternative(UiHeaderbarArgs *args, UiHeaderbarAlternative alt); +UIEXPORT void ui_headerbar_args_set_alt_spacing(UiHeaderbarArgs *args, int spacing); +UIEXPORT void ui_headerbar_args_free(UiHeaderbarArgs *args); UIEXPORT UiMenuItemArgs* ui_menuitem_args_new(void); UIEXPORT void ui_menuitem_args_set_label(UiMenuItemArgs *args, const char *label); @@ -701,8 +723,10 @@ UIEXPORT void ui_imageviewer_args_set_image_padding_bottom(UiImageViewerArgs *ar 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 --git a/ui/gtk/image.c b/ui/gtk/image.c index 5fcb048..0ed45c7 100644 --- a/ui/gtk/image.c +++ b/ui/gtk/image.c @@ -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 @@ UIWIDGET ui_imageviewer_create(UiObject *obj, UiImageViewerArgs *args) { 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 @@ static void imgviewer_button_event( GtkGestureClick *gesture, UiImageViewer *imgviewer, ui_callback callback, - void *userdata) + void *userdata, + const char *action) { UiEvent event; event.obj = imgviewer->obj; @@ -474,7 +480,13 @@ static void imgviewer_button_event( 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 @@ void ui_imageviewer_pressed_cb( 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 @@ void ui_imageviewer_released_cb( 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 --git a/ui/gtk/image.h b/ui/gtk/image.h index 987c73b..0721032 100644 --- a/ui/gtk/image.h +++ b/ui/gtk/image.h @@ -60,8 +60,10 @@ typedef struct UiImageViewer { 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 --git a/ui/ui/image.h b/ui/ui/image.h index e4eee59..2395ea7 100644 --- a/ui/ui/image.h +++ b/ui/ui/image.h @@ -78,8 +78,10 @@ typedef struct UiImageViewerArgs { ui_callback onbuttonpress; void *onbuttonpressdata; + const char *onbuttonpress_action; ui_callback onbuttonrelease; void *onbuttonreleasedata; + const char *onbuttonrelease_action; const int *visibility_states; } UiImageViewerArgs;