]> uap-core.de Git - note.git/commitdiff
show go back/forward buttons, when the notelist is hidden
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 21 Oct 2025 18:28:27 +0000 (20:28 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 21 Oct 2025 18:28:27 +0000 (20:28 +0200)
22 files changed:
application/application.h
application/menu.c
application/window.c
ui/cocoa/ListDataSource.m
ui/cocoa/appdelegate.m
ui/cocoa/container.m
ui/cocoa/label.m
ui/cocoa/list.m
ui/cocoa/objs.mk
ui/cocoa/toolkit.h
ui/cocoa/toolkit.m
ui/cocoa/widget.h
ui/cocoa/widget.m
ui/cocoa/window.m
ui/common/object.c
ui/common/toolbar.c
ui/common/toolbar.h
ui/gtk/headerbar.c
ui/gtk/toolkit.c
ui/gtk/toolkit.h
ui/gtk/window.c
ui/ui/toolbar.h

index 1fdd9f9a1e921ce88b7150166f65ae06d565de44..3ef47d4b2038c3ac91bbd1ee882baa5daad2a447 100644 (file)
@@ -38,6 +38,7 @@
 extern "C" {
 #endif
 
+#define APP_STATE_HIDE_NOTELIST         80
 #define APP_STATE_NOTEBOOK_SELECTED    100
 #define APP_STATE_NOTE_SELECTED        110
 #define APP_STATE_NOTE_HAS_ATTACHMENTS 201
index 3bbd536796c03cfec38cd7de8d33210638671ee6..9a590d655cd09b689c57de956a0e907696cf95d7 100644 (file)
@@ -46,9 +46,15 @@ void toolbar_init() {
     ui_toolbar_item("GoForward", .icon = UI_ICON_GO_FORWARD, .onclick = action_go_forward);
     ui_toolbar_item("AddNote", .icon = UI_ICON_ADD, .onclick = action_note_new, .groups = UI_GROUPS(APP_STATE_NOTEBOOK_SELECTED));
     
+    ui_toolbar_item("GoBack2", .icon = UI_ICON_GO_BACK, .onclick = action_go_back, .visibility_states = UI_GROUPS(APP_STATE_HIDE_NOTELIST));
+    ui_toolbar_item("GoForward2", .icon = UI_ICON_GO_FORWARD, .onclick = action_go_forward, .visibility_states = UI_GROUPS(APP_STATE_HIDE_NOTELIST));
+    
     ui_toolbar_add_default("GoBack", UI_TOOLBAR_LEFT);
     ui_toolbar_add_default("GoForward", UI_TOOLBAR_LEFT);
     ui_toolbar_add_default("AddNote", UI_TOOLBAR_LEFT);
+    
+    ui_toolbar_add_default("GoBack2", UI_TOOLBAR_RIGHTPANEL_LEFT);
+    ui_toolbar_add_default("GoForward2", UI_TOOLBAR_RIGHTPANEL_LEFT);
 }
 
 
index b68801b309b7efa623d0555a6869db27a22b3ca4..8276839c9cccdd83f8fccedcf5032f10b3bdecab 100644 (file)
@@ -143,6 +143,11 @@ MainWindow* window_init_data(UiObject *obj) {
 void window_notelist_setvisible(MainWindow *window, UiBool visible) {
     ui_splitview_window_set_visible(window->obj, 0, visible);
     window->notelist_isvisible = visible;
+    if(visible) {
+        ui_unset_group(window->obj->ctx, APP_STATE_HIDE_NOTELIST);
+    } else {
+        ui_set_group(window->obj->ctx, APP_STATE_HIDE_NOTELIST);
+    }
 }
 
 void window_sidebar_getvalue(UiList *list, void *sublist_userdata, void *rowdata, int index, UiSubListItem *item, void *userdata) {
index 3be08f7e808914abfbbd7c3fbfdf535d488eb060..8894b207ba5a42e3d11ceb72680ed00744468983 100644 (file)
@@ -98,6 +98,12 @@ objectValueForTableColumn:(NSTableColumn *) tableColumn
             case UI_ICON_TEXT_FREE: {
                 break;
             }
+            case UI_STRING_EDITABLE: {
+                break;
+            }
+            case UI_BOOL_EDITABLE: {
+                break;
+            }
         }
         
         if(freeResult) {
index ae4d3fca891094d3276dc6afcf3faeac5ffbd3d2..f0967edf57f54307e9062f8e330255c7e1d69101 100644 (file)
@@ -35,6 +35,7 @@
 
 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
     ui_menu_init();
+    NSLog(@"toolkit applicationDidFinishLaunching");
     ui_cocoa_onstartup();
 }
 
index e7bcf0c49593be59fadf7073f2aa085d24b5bab1..d9b2e2d8cfd4d2c35312669161a2b13793da912b 100644 (file)
@@ -185,6 +185,22 @@ UiObject* ui_tabview_add(UIWIDGET tabview, const char *name, int tab_index) {
 }
 
 
+UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs *args) {
+    return NULL; // TODO
+}
+
+UIWIDGET ui_itemlist_create(UiObject *obj, UiItemListContainerArgs *args) {
+    return NULL; // TODO
+}
+
+UIWIDGET ui_hsplitpane_create(UiObject *obj, UiSplitPaneArgs *args) {
+    return NULL; // TODO
+}
+
+UIWIDGET ui_vsplitpane_create(UiObject *obj, UiSplitPaneArgs *args) {
+    return NULL; // TODO
+}
+
 
 
 void ui_container_begin_close(UiObject *obj) {
index 44e90451f7437c5b53c797a8e9e7e88765a84acb..4e75e01d57bbdf6e49e87b862a413666e2d5d553 100644 (file)
@@ -27,7 +27,7 @@
  */
 
 #import "label.h"
-#import "container.h"
+#import "Container.h"
 
 #import <string.h>
 
index de2e98ecaaa0db903ccb1db4164b1c67b9dc9ea3..e776eeb4067abac359f7fcedbee117843d7acfd4 100644 (file)
@@ -363,6 +363,18 @@ void ui_dropdown_setselection(UiList *list, UiListSelection selection) {
 
 /* --------------------------- SourceList --------------------------- */
 
+static ui_sourcelist_update_func sclist_update_callback = NULL;
+
+void ui_sourcelist_set_update_callback(ui_sourcelist_update_func cb) {
+    sclist_update_callback = cb;
+}
+
+void ui_sourcelist_updated(void) {
+    if(sclist_update_callback) {
+        sclist_update_callback();
+    }
+}
+
 static void sublist_free(const CxAllocator *a, UiSubList *sl) {
     cxFree(a, (char*)sl->varname);
     cxFree(a, (char*)sl->header);
index b0326be9867be55e72bd1c00972ee480dae2a5ec..d4d0e61143ba9925294bb13ee39451a671d65d3a 100644 (file)
@@ -50,6 +50,7 @@ COCOAOBJ += list.o
 COCOAOBJ += widget.o
 COCOAOBJ += image.o
 COCOAOBJ += entry.o
+COCOAOBJ += TabView.o
 
 TOOLKITOBJS += $(COCOAOBJ:%=$(COCOA_OBJPRE)%)
 TOOLKITSOURCE += $(COCOAOBJ:%.o=cocoa/%.m)
index da755d3634db876bd32b4b435cb4ad44f9f9c68e..9a377b35343359056fbe034648f9c8b35cc6d1f9 100644 (file)
 #include "../common/context.h"
 #include "../common/object.h"
 
-@interface UiAppCallback : NSObject {
-    ui_threadfunc callback;
-    void          *userdata;
-}
+@interface UiAppCallback : NSObject
+
+@property    ui_threadfunc callback;
+@property    void          *userdata;
 
 - (id) initWithCallback:(ui_threadfunc)func userdata:(void*)userdata;
 
index 33332a55e2823a2dad540793ad33013afa9f53a8..fd97b2c2fa787a49132f247c6aa2e719ad5eb269 100644 (file)
@@ -57,6 +57,7 @@ static UiBool        exit_on_shutdown;
 
 /* ------------------- App Init / Event Loop functions ------------------- */
 
+
 void ui_init(const char *appname, int argc, char **argv) {
     application_name = appname;
     app_argc = argc;
@@ -69,7 +70,9 @@ void ui_init(const char *appname, int argc, char **argv) {
 
     uic_load_app_properties();
 
-    [NSApplication sharedApplication];
+    NSApplication *app = [NSApplication sharedApplication];
+    //[app setActivationPolicy:NSApplicationActivationPolicyRegular];
+    
     //[NSBundle loadNibNamed:@"MainMenu" owner:NSApp ];
     //[[NSBundle mainBundle] loadNibNamed:@"MainMenu" owner:NSApp topLevelObjects:&topLevelObjects];
     
@@ -178,8 +181,8 @@ void ui_job(UiObject *obj, ui_threadfunc tf, void *td, ui_callback f, void *fd)
 @implementation UiAppCallback
 
 - (id) initWithCallback:(ui_threadfunc)func userdata:(void*)userdata {
-    self->callback = func;
-    self->userdata = userdata;
+    _callback = func;
+    _userdata = userdata;
     return self;
 }
 
@@ -190,7 +193,9 @@ void ui_job(UiObject *obj, ui_threadfunc tf, void *td, ui_callback f, void *fd)
 }
 
 - (void) mainThread:(id)n {
-    callback(userdata);
+    if(_callback) {
+        _callback(_userdata);
+    }
 }
 
 @end
index 5857c86b6242ae4ebe869f92bfe59d829d1339da..772bf88d718e4fe68cc0dfade47684ee1f870de2 100644 (file)
@@ -27,5 +27,5 @@
  */
 
 #import "toolkit.h"
-#import "container.h"
+#import "Container.h"
 #import "../ui/widget.h"
index 1c2e90ac1e6f4a56adca61a433e836243bf63880..edc78c138240336a56b4662839db032d1bd07c8e 100644 (file)
@@ -45,6 +45,11 @@ void ui_set_visible(UIWIDGET widget, int visible) {
 }
 
 
+UIWIDGET ui_separator_create(UiObject *obj, UiWidgetArgs *args) {
+    // TODO
+    return NULL;
+}
+
 
 /* custom widget */
 
index 811226e685986481d43f06620f365dcf9de4dd1f..c4efb6b40cdcf12272b758a72d0747736d2032c6 100644 (file)
 
 #include <cx/mempool.h>
 
+static int window_default_width = 650;
+static int window_default_height = 550;
+
+static int splitview_window_default_pos = -1;
+static UiBool splitview_window_use_prop = TRUE;
 
 static UiObject* create_window(const char *title, BOOL simple, BOOL sidebar, BOOL splitview) {
     UiObject *obj = uic_object_new_toplevel();
@@ -81,9 +86,19 @@ UiObject* ui_sidebar_window(const char *title, void *window_data) {
 }
 
 UiObject* ui_splitview_window(const char *title, UiBool sidebar) {
+    sleep(1);
     return create_window(title, FALSE, sidebar, TRUE);
 }
 
+void ui_window_size(UiObject *obj, int width, int height) {
+    // TODO
+}
+
+void ui_window_default_size(int width, int height) {
+    window_default_width = width;
+    window_default_height = height;
+}
+
 /* --------------------------------- File Dialogs --------------------------------- */
 
 void ui_openfiledialog(UiObject *obj, unsigned int mode, ui_callback file_selected_callback, void *cbdata) {
index 6d6b54788b2c98393e934b2a436091cd42032a91..4c41e28ea2d2630af32cc74bc5a267bc8c78e8e0 100644 (file)
@@ -28,7 +28,6 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-
 #include "object.h"
 #include "context.h"
 
@@ -107,11 +106,15 @@ void uic_object_destroy(UiObject *obj) {
 }
 
 UiObject* uic_object_new_toplevel(void) {
+    fflush(stdout);
     CxMempool *mp = cxMempoolCreateSimple(256);
     UiObject *obj = cxCalloc(mp->allocator, 1, sizeof(UiObject));
+    fflush(stdout);
     obj->ctx = uic_context(obj, mp);
     obj->ctx->parent = ui_global_context();
+    fflush(stdout);
     uic_object_created(obj);
+    fflush(stdout);
     return obj;
 }
 
index 5164f0cfc03a967ff64e597a9e18dca3f6497343..f237290dd0419275d0cd8bf78458b8c08fc95e17 100644 (file)
@@ -50,7 +50,7 @@ static char* nl_strdup(const char* str) {
     return str ? strdup(str) : NULL;\r
 }\r
 \r
-static UiToolbarItemArgs itemargs_copy(UiToolbarItemArgs *args, size_t *ngroups) {\r
+static UiToolbarItemArgs itemargs_copy(UiToolbarItemArgs *args, size_t *ngroups, size_t *nvstates) {\r
     UiToolbarItemArgs newargs;\r
     newargs.label = nl_strdup(args->label);\r
     newargs.icon = nl_strdup(args->icon);\r
@@ -58,18 +58,19 @@ static UiToolbarItemArgs itemargs_copy(UiToolbarItemArgs *args, size_t *ngroups)
     newargs.onclick = args->onclick;\r
     newargs.onclickdata = args->onclickdata;\r
     newargs.groups = uic_copy_groups(args->groups, ngroups);\r
+    newargs.visibility_states = uic_copy_groups(args->visibility_states, nvstates);\r
     return newargs;\r
 }\r
 \r
 void ui_toolbar_item_create(const char* name, UiToolbarItemArgs *args) {\r
     UiToolbarItem* item = malloc(sizeof(UiToolbarItem));\r
     item->item.type = UI_TOOLBAR_ITEM;\r
-    item->args = itemargs_copy(args, &item->ngroups);\r
+    item->args = itemargs_copy(args, &item->ngroups, &item->nvstates);\r
     cxMapPut(toolbar_items, name, item);\r
 }\r
 \r
 \r
-static UiToolbarToggleItemArgs toggleitemargs_copy(UiToolbarToggleItemArgs *args, size_t *ngroups) {\r
+static UiToolbarToggleItemArgs toggleitemargs_copy(UiToolbarToggleItemArgs *args, size_t *ngroups, size_t *nvstates) {\r
     UiToolbarToggleItemArgs newargs;\r
     newargs.label = nl_strdup(args->label);\r
     newargs.icon = nl_strdup(args->icon);\r
@@ -78,21 +79,23 @@ static UiToolbarToggleItemArgs toggleitemargs_copy(UiToolbarToggleItemArgs *args
     newargs.onchange = args->onchange;\r
     newargs.onchangedata = args->onchangedata;\r
     newargs.groups = uic_copy_groups(args->groups, ngroups);\r
+    newargs.visibility_states = uic_copy_groups(args->visibility_states, nvstates);\r
     return newargs;\r
 }\r
 \r
 void ui_toolbar_toggleitem_create(const char* name, UiToolbarToggleItemArgs *args) {\r
     UiToolbarToggleItem* item = malloc(sizeof(UiToolbarToggleItem));\r
     item->item.type = UI_TOOLBAR_TOGGLEITEM;\r
-    item->args = toggleitemargs_copy(args, &item->ngroups);\r
+    item->args = toggleitemargs_copy(args, &item->ngroups, &item->nvstates);\r
     cxMapPut(toolbar_items, name, item);\r
 }\r
 \r
-static UiToolbarMenuArgs menuargs_copy(UiToolbarMenuArgs *args) {\r
+static UiToolbarMenuArgs menuargs_copy(UiToolbarMenuArgs *args, size_t *nvstates) {\r
     UiToolbarMenuArgs newargs;\r
     newargs.label = nl_strdup(args->label);\r
     newargs.icon = nl_strdup(args->icon);\r
     newargs.tooltip = nl_strdup(args->tooltip);\r
+    newargs.visibility_states = uic_copy_groups(args->visibility_states, nvstates);\r
     return newargs;\r
 }\r
 \r
@@ -100,7 +103,7 @@ UIEXPORT void ui_toolbar_menu_create(const char* name, UiToolbarMenuArgs *args)
     UiToolbarMenuItem* item = malloc(sizeof(UiToolbarMenuItem));\r
     item->item.type = UI_TOOLBAR_MENU;\r
     memset(&item->menu, 0, sizeof(UiMenu));\r
-    item->args = menuargs_copy(args);\r
+    item->args = menuargs_copy(args, &item->nvstates);\r
 \r
     item->end = 0;\r
 \r
index a13828e032a031944ca397d80363c4bf3c6649d0..1ac1d553759fa14936bb1751429d81584a188462 100644 (file)
@@ -63,18 +63,21 @@ struct UiToolbarItem {
     UiToolbarItemI item;\r
     UiToolbarItemArgs args;\r
     size_t ngroups;\r
+    size_t nvstates;\r
 };\r
 \r
 struct UiToolbarToggleItem {\r
     UiToolbarItemI item;\r
     UiToolbarToggleItemArgs args;\r
     size_t ngroups;\r
+    size_t nvstates;\r
 };\r
 \r
 struct UiToolbarMenuItem {\r
     UiToolbarItemI item;\r
     UiMenu menu;\r
     UiToolbarMenuArgs args;\r
+    size_t nvstates;\r
     int end;\r
 };\r
 \r
index 3cd76d0b41cd2ba4bd85b44ecb3b67a9c35e7f77..0a9bd3e7adc51de04a44ad02a61f2979f6b826f9 100644 (file)
@@ -165,6 +165,7 @@ void ui_add_headerbar_item(
 {
     GtkWidget *button = ui_create_button(obj, item->args.label, item->args.icon, item->args.tooltip, item->args.onclick, item->args.onclickdata, 0, FALSE);
     ui_set_widget_groups(obj->ctx, button, item->args.groups);
+    ui_set_widget_visibility_states(obj->ctx, button, item->args.visibility_states);
     WIDGET_ADD_CSS_CLASS(button, "flat");
     headerbar_add(headerbar, box, button, pos);
 }
@@ -178,6 +179,7 @@ void ui_add_headerbar_toggleitem(
 {
     GtkWidget *button = gtk_toggle_button_new();
     ui_set_widget_groups(obj->ctx, button, item->args.groups);
+    ui_set_widget_visibility_states(obj->ctx, button, item->args.visibility_states);
     WIDGET_ADD_CSS_CLASS(button, "flat");
     ui_setup_togglebutton(obj, button, item->args.label, item->args.icon, item->args.tooltip, item->args.varname, NULL, item->args.onchange, item->args.onchangedata, 0);
     headerbar_add(headerbar, box, button, pos);
@@ -194,6 +196,7 @@ void ui_add_headerbar_menu(
     
 #if GTK_MAJOR_VERSION >= 4
     GtkWidget *menubutton = gtk_menu_button_new();
+    ui_set_widget_visibility_states(obj->ctx, menubutton, item->args.visibility_states);
     if(item->args.label) {
         gtk_menu_button_set_label(GTK_MENU_BUTTON(menubutton), item->args.label);
     }
index 3596c5ef1166b6a5f26d67d9d74151335f4ae54c..b22b66c2d91730240655f1391fececfd3df5b156 100644 (file)
@@ -544,3 +544,19 @@ void ui_set_widget_ngroups(UiContext *ctx, GtkWidget *widget, const int *groups,
         ui_set_enabled(widget, FALSE);
     }
 }
+
+void ui_set_widget_visibility_states(UiContext *ctx, GtkWidget *widget, const int *states) {
+    if(!states) {
+        return;
+    }
+    size_t nstates = uic_group_array_size(states);
+    ui_set_widget_nvisibility_states(ctx, widget, states, nstates);
+}
+
+
+void ui_set_widget_nvisibility_states(UiContext *ctx, GtkWidget *widget, const int *states, size_t ngroups) {
+    if(ngroups > 0) {
+        uic_add_group_widget_i(ctx, widget, (ui_enablefunc)ui_set_visible, states, ngroups);
+        ui_set_visible(widget, FALSE);
+    }
+}
index 7d9777295e63add73f67510d86d9b29219fb14e0..cfa25bb34e23fbb5e282e8abdd8fe7cf2dee1ac9 100644 (file)
@@ -180,6 +180,8 @@ int ui_get_scalefactor();
 void ui_set_name_and_style(GtkWidget *widget, const char *name, const char *style);
 void ui_set_widget_groups(UiContext *ctx, GtkWidget *widget, const int *groups);
 void ui_set_widget_ngroups(UiContext *ctx, GtkWidget *widget, const int *groups, size_t ngroups);
+void ui_set_widget_visibility_states(UiContext *ctx, GtkWidget *widget, const int *states);
+void ui_set_widget_nvisibility_states(UiContext *ctx, GtkWidget *widget, const int *states, size_t ngroups);
 
 void ui_destroy_userdata(GtkWidget *object, void *userdata);
 void ui_destroy_vardata(GtkWidget *object, UiVarEventData *data);
index 152b4e5b84c7583b91fdee122efb73d24d6cf045..f90997f32e39ba9f380bf021389de9ee05fe7820 100644 (file)
@@ -448,11 +448,7 @@ UIEXPORT void ui_splitview_window_set_visible(UiObject *obj, int pane, UiBool vi
         return;
     }
     
-#ifdef UI_LIBADWAITA
-    gtk_widget_set_visible(gtk_widget_get_parent(panel), visible);
-#else
     gtk_widget_set_visible(panel, visible);
-#endif
 }
 
 #ifdef UI_LIBADWAITA
index 066cee26ae8058846a1e87bde1518fdb073aa539..26a79e68e38a7a85265452fa7ca330b0f115d144 100644 (file)
@@ -45,6 +45,7 @@ typedef struct UiToolbarItemArgs {
     void* onclickdata;
 
     const int *groups;
+    const int *visibility_states;
 } UiToolbarItemArgs;
 
 typedef struct UiToolbarToggleItemArgs {
@@ -57,12 +58,14 @@ typedef struct UiToolbarToggleItemArgs {
     void *onchangedata;
 
     const int *groups;
+    const int *visibility_states;
 } UiToolbarToggleItemArgs;
 
 typedef struct UiToolbarMenuArgs {
     const char *label;
     const char *icon;
     const char *tooltip;
+    const int  *visibility_states;
 } UiToolbarMenuArgs;
 
 enum UiToolbarPos {