From 8ed670c58c96708218339487f4f2611823a38aaf Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Sat, 1 Feb 2025 22:24:14 +0100 Subject: [PATCH] handle bookmark list activation events --- mizunara/window.c | 11 ++++++++++- mizunara/window.h | 2 ++ ui/gtk/list.c | 10 +++++++++- ui/ui/tree.h | 9 +++++++++ 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/mizunara/window.c b/mizunara/window.c index 2c31eda..6d996cc 100644 --- a/mizunara/window.c +++ b/mizunara/window.c @@ -81,7 +81,7 @@ UiObject* window_create(const char *url) { { .value = wdata->default_dirs, .userdata = window_sidebar_user_dirs_item }, { .value = wdata->user_dirs, .userdata = window_sidebar_user_dirs_item, .separator = TRUE } }; - ui_sourcelist(obj, .sublists = sublists, .numsublists = 2, .getvalue = window_sidebar_getvalue); + ui_sourcelist(obj, .sublists = sublists, .numsublists = 2, .getvalue = window_sidebar_getvalue, .onactivate = action_sourcelist_activate); } ui_hbox(obj, .spacing = 4, .fill = UI_OFF) { @@ -172,3 +172,12 @@ void action_pathbar_activate(UiEvent *event, void *userdata) { FileBrowser *browser = event->document; filebrowser_load(browser, path); } + +void action_sourcelist_activate(UiEvent *event, void *userdata) { + FileBrowser *browser = event->document; + UiSubListEventData *eventdata = event->eventdata; + + MZBookmark *bookmark = eventdata->row_data; + ui_set(browser->path, bookmark->path); + filebrowser_load(browser, bookmark->path); +} diff --git a/mizunara/window.h b/mizunara/window.h index d803d17..3df9220 100644 --- a/mizunara/window.h +++ b/mizunara/window.h @@ -47,6 +47,8 @@ void window_sidebar_user_dirs_item(void *sublist_userdata, void *rowdata, int in void action_pathbar_activate(UiEvent *event, void *userdata); +void action_sourcelist_activate(UiEvent *event, void *userdata); + #ifdef __cplusplus } diff --git a/ui/gtk/list.c b/ui/gtk/list.c index eb411cf..a434791 100644 --- a/ui/gtk/list.c +++ b/ui/gtk/list.c @@ -1784,11 +1784,19 @@ void ui_listbox_row_activate(GtkListBox *self, GtkListBoxRow *row, gpointer user } UiListBoxSubList *sublist = data->customdata0; + UiSubListEventData eventdata; + eventdata.list = sublist->var->value; + eventdata.sublist_index = sublist->index; + eventdata.row_index = data->value0; + eventdata.sublist_userdata = sublist->userdata; + eventdata.row_data = ui_list_get(eventdata.list, eventdata.row_index); + eventdata.event_data = data->customdata2; + UiEvent event; event.obj = data->obj; event.window = event.obj->window; event.document = event.obj->ctx->document; - event.eventdata = data->customdata2; + event.eventdata = &eventdata; event.intval = data->value0; if(data->callback) { diff --git a/ui/ui/tree.h b/ui/ui/tree.h index 28c9f31..a81b3af 100644 --- a/ui/ui/tree.h +++ b/ui/ui/tree.h @@ -144,6 +144,15 @@ struct UiSubList { void *userdata; }; +typedef struct UiSubListEventData { + UiList *list; + int sublist_index; + int row_index; + void *row_data; + void *sublist_userdata; + void *event_data; +} UiSubListEventData; + /* * list item members must be filled by the sublist getvalue func * all members must be allocated (by malloc, strdup, ...) the pointer -- 2.43.5