]> uap-core.de Git - note.git/commitdiff
only focus the note textarea, when a new note is created
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 11 Jun 2026 18:40:42 +0000 (20:40 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 11 Jun 2026 18:40:42 +0000 (20:40 +0200)
application/src/main.rs
application/src/notebook.rs
ui-rs/src/ui/application.rs
ui/cocoa/AppDelegate.m
ui/cocoa/menu.m
ui/cocoa/window.m
ui/common/app.c
ui/common/app.h

index f6ad38c775bbedf7e221d73a583950f2ec36c5c7..fa0a17d59d8e976d74ff83006535123ef4dbb779 100644 (file)
@@ -113,11 +113,10 @@ struct App {
 
 
 impl Application<MainWindow> for App {
-    fn on_init(&mut self, app: &AppContext<MainWindow>) {
+    fn on_startup(&mut self, app: &AppContext<MainWindow>) {
         create_menubar(app);
         create_toolbar(app);
-    }
-    fn on_startup(&mut self, app: &AppContext<MainWindow>) {
+        
         self.on_new_window(app);
     }
 
index e7b0bf54bbaa0d94df9d69e07b6dd3d3f0edea05..8b8cbf3fca9339872efb18e1aa91a77453c16e75 100644 (file)
@@ -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) = &note.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 {
index 14cbe3e2f0404a6010692b734d7d110bd1f97a75..88df6417f761f85c0a4393ec62658e73a229f46b 100644 (file)
@@ -39,7 +39,6 @@ pub trait AppActions<T: UiModel + UiActions> {
 }
 
 pub trait Application<T: UiModel + UiActions>: AppActions<T> {
-    fn on_init(&mut self, _app: &AppContext<T>) {}
     fn on_startup(&mut self, app: &AppContext<T>);
 
     fn on_new_window(&mut self, _app: &AppContext<T>) {}
@@ -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<T>) {
     }
 }
 
-extern "C" fn app_init<T: UiModel + UiActions, A: Application<T>>(event: *const UiEvent, data: *mut c_void) {
-    app_callback(event, data, |app: &mut A, ctx| {
-        app.on_init(ctx);
-    });
-}
 
 extern "C" fn app_startup<T: UiModel + UiActions, A: Application<T>>(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::<T, A>), c_ptr);
         ui_onstartup(Some(app_startup::<T, A>), c_ptr);
         ui_onnewwindow(Some(app_new_window::<T, A>), c_ptr);
         ui_onexit(Some(app_exit::<T, A>), c_ptr);
index d2415c24a3badf68871959725b9e8ddebd162e7a..b28df42f1192f7e9ed7f9458875353177ec23e6e 100644 (file)
 
 - (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 {
index 100fb562b75a4dd5f4e073cc6c07d3dee9f4528e..971f342dd528d6825f84b0032c9d8df050c73d9b 100644 (file)
@@ -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) {
index 459b64986fb352f43b174d185887bede60ff50ee..c027867e3ccfffd7c718cf1b595197aeed97e115 100644 (file)
@@ -32,6 +32,7 @@
 #import "WindowManager.h"
 #import "BoxContainer.h"
 #import "EventData.h"
+#import "menu.h"
 
 #import <objc/runtime.h>
 
@@ -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;
index c1440adf4bfc75ffcd34e5f70c5101277debb55c..c7f80decaa2438a7c40533e382c8f0697036e81c 100644 (file)
@@ -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);
index 14e55cf1fd44b8a4742a6892304d3055d6a0f64d..9176e85f8f99e2466e9c8a068835cf41accea6d8 100644 (file)
@@ -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);