From eb7e8f22ac30923c02d4e2dc978a0d7c78351a8a Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Thu, 11 Jun 2026 20:40:42 +0200 Subject: [PATCH] only focus the note textarea, when a new note is created --- application/src/main.rs | 5 ++--- application/src/notebook.rs | 5 ++++- ui-rs/src/ui/application.rs | 8 -------- ui/cocoa/AppDelegate.m | 7 +++++-- ui/cocoa/menu.m | 12 ++++++++++-- ui/cocoa/window.m | 2 ++ ui/common/app.c | 13 ------------- ui/common/app.h | 1 - 8 files changed, 23 insertions(+), 30 deletions(-) diff --git a/application/src/main.rs b/application/src/main.rs index f6ad38c..fa0a17d 100644 --- a/application/src/main.rs +++ b/application/src/main.rs @@ -113,11 +113,10 @@ struct App { impl Application for App { - fn on_init(&mut self, app: &AppContext) { + fn on_startup(&mut self, app: &AppContext) { create_menubar(app); create_toolbar(app); - } - fn on_startup(&mut self, app: &AppContext) { + self.on_new_window(app); } diff --git a/application/src/notebook.rs b/application/src/notebook.rs index e7b0bf5..8b8cbf3 100644 --- a/application/src/notebook.rs +++ b/application/src/notebook.rs @@ -99,6 +99,7 @@ impl Notebook { } }; self.selected_index = Some(selected_index); + let is_new = note.is_new(); let nav = NavigationItem { collection_id: self.collection_id, note_id: Some(note.id.clone()) }; let doc = if let Some(doc) = ¬e.model { @@ -121,7 +122,9 @@ impl Notebook { if let Some(mut nb) = self.doc_ref.get_doc() { nb.ctx.attach(&doc); - nb.ctx.call_action("textarea_focus"); + if is_new { + nb.ctx.call_action("textarea_focus"); + } self.selected_note = Some(doc); if add_to_nav { diff --git a/ui-rs/src/ui/application.rs b/ui-rs/src/ui/application.rs index 14cbe3e..88df641 100644 --- a/ui-rs/src/ui/application.rs +++ b/ui-rs/src/ui/application.rs @@ -39,7 +39,6 @@ pub trait AppActions { } pub trait Application: AppActions { - fn on_init(&mut self, _app: &AppContext) {} fn on_startup(&mut self, app: &AppContext); fn on_new_window(&mut self, _app: &AppContext) {} @@ -66,7 +65,6 @@ impl UiActions for NoAppData { extern "C" { fn ui_main(); - fn ui_oninit(callback: UiCallback, userdata: *mut c_void); fn ui_onstartup(callback: UiCallback, userdata: *mut c_void); fn ui_onnewwindow(callback: UiCallback, userdata: *mut c_void); fn ui_onexit(callback: UiCallback, userdata: *mut c_void); @@ -88,11 +86,6 @@ where F: FnOnce(&mut A, &AppContext) { } } -extern "C" fn app_init>(event: *const UiEvent, data: *mut c_void) { - app_callback(event, data, |app: &mut A, ctx| { - app.on_init(ctx); - }); -} extern "C" fn app_startup>(event: *const UiEvent, data: *mut c_void) { app_callback(event, data, |app: &mut A, ctx| { @@ -123,7 +116,6 @@ where app.init_actions(&ctx); let ptr: *mut A = app; let c_ptr: *mut c_void = ptr as *mut c_void; - ui_oninit(Some(app_init::), c_ptr); ui_onstartup(Some(app_startup::), c_ptr); ui_onnewwindow(Some(app_new_window::), c_ptr); ui_onexit(Some(app_exit::), c_ptr); diff --git a/ui/cocoa/AppDelegate.m b/ui/cocoa/AppDelegate.m index d2415c2..b28df42 100644 --- a/ui/cocoa/AppDelegate.m +++ b/ui/cocoa/AppDelegate.m @@ -38,9 +38,12 @@ - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { NSLog(@"toolkit applicationDidFinishLaunching"); - uic_application_init(NULL); - ui_menu_init(); uic_application_startup(NULL); + // The menu init func can be called multiple times and is also called + // when a new window is created + // The only usecase for calling init here is, that an application might not + // open a window on startup, but wants a working menubar + ui_menu_init(); } - (void)applicationWillTerminate:(NSNotification *)aNotification { diff --git a/ui/cocoa/menu.m b/ui/cocoa/menu.m index 100fb56..971f342 100644 --- a/ui/cocoa/menu.m +++ b/ui/cocoa/menu.m @@ -186,11 +186,19 @@ void add_menuitem_list_widget(UiObject *obj, NSMenu *parent, int i, UiMenuItemI } +static BOOL menu_is_initialized = NO; + void ui_menu_init(void) { - bindingItems = [[NSMutableArray alloc] init]; - UiMenu *menus_begin = uic_get_menu_list(); UiMenu *ls = menus_begin; + + if(menu_is_initialized || !ls) { + return; + } + menu_is_initialized = YES; + + bindingItems = [[NSMutableArray alloc] init]; + int index = 1; while(ls) { if(ls->item.type == UI_MENU) { diff --git a/ui/cocoa/window.m b/ui/cocoa/window.m index 459b649..c027867 100644 --- a/ui/cocoa/window.m +++ b/ui/cocoa/window.m @@ -32,6 +32,7 @@ #import "WindowManager.h" #import "BoxContainer.h" #import "EventData.h" +#import "menu.h" #import @@ -58,6 +59,7 @@ static void main_window_destroy(UiObject *obj) { } static UiObject* create_window(const char *title, BOOL simple, BOOL sidebar, BOOL splitview) { + ui_menu_init(); UiObject *obj = uic_object_new_toplevel(); int width = window_default_width; diff --git a/ui/common/app.c b/ui/common/app.c index c1440ad..c7f80de 100644 --- a/ui/common/app.c +++ b/ui/common/app.c @@ -28,8 +28,6 @@ #include "app.h" -static ui_callback init_func; -static void *init_data; static ui_callback startup_func; static void *startup_data; static ui_callback newwindow_func; @@ -40,11 +38,6 @@ static ui_callback exit_func; void *exit_data; -void ui_oninit(ui_callback f, void *userdata) { - init_func = f; - init_data = userdata; -} - void ui_onstartup(ui_callback f, void *userdata) { startup_func = f; startup_data = userdata; @@ -65,12 +58,6 @@ void ui_onexit(ui_callback f, void *userdata) { exit_data = userdata; } -void uic_application_init(UiEvent *event) { - if(init_func) { - init_func(event, init_data); - } -} - void uic_application_startup(UiEvent *event) { if(startup_func) { startup_func(event, startup_data); diff --git a/ui/common/app.h b/ui/common/app.h index 14e55cf..9176e85 100644 --- a/ui/common/app.h +++ b/ui/common/app.h @@ -35,7 +35,6 @@ extern "C" { #endif -void uic_application_init(UiEvent *event); void uic_application_startup(UiEvent *event); void uic_application_newwindow(UiEvent *event); void uic_application_open(UiEvent *event); -- 2.52.0