]> uap-core.de Git - mizunara.git/commitdiff
handle bookmark list activation events
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Sat, 1 Feb 2025 21:24:14 +0000 (22:24 +0100)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Sat, 1 Feb 2025 21:24:14 +0000 (22:24 +0100)
mizunara/window.c
mizunara/window.h
ui/gtk/list.c
ui/ui/tree.h

index 2c31eda769c32dd4d3c842a8137788c941cd66f1..6d996ccb83096314377f8cf58abf8a837c46a725 100644 (file)
@@ -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);
+}
index d803d17579fbce27ca8f32c4ae94662abb098bb3..3df92201703d7375fc2e09a27f5e7748f86773a9 100644 (file)
@@ -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
 }
index eb411cf295cbfb6fcbec7a14aa9a42bfb06e861b..a4347910e02a9d867ed7915ea9f18698906ec2bd 100644 (file)
@@ -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) {
index 28c9f311df015dd0bff7efe815275d66fcdcef3c..a81b3afe56814b574c200d6b41a6ab760bb9b5c1 100644 (file)
@@ -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