From 71174a16da43260a5a7c773719d2baffcd939597 Mon Sep 17 00:00:00 2001 From: Po Lu <luangruo@yahoo.com> Date: Sun, 30 Jan 2022 13:23:52 +0000 Subject: [PATCH] Handle correctly errors during frame creation on Haiku * src/haikufns.c (haiku_create_frame): Only block input where required. * src/haiku_support.cc (BCursor_delete): Accept NULL values of `cursor'. --- src/haiku_support.cc | 3 ++- src/haikufns.c | 11 +++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/haiku_support.cc b/src/haiku_support.cc index 794023c98e4..8ab82170916 100644 --- a/src/haiku_support.cc +++ b/src/haiku_support.cc @@ -2028,7 +2028,8 @@ BCursor_create_grab (void) void BCursor_delete (void *cursor) { - delete (BCursor *) cursor; + if (cursor) + delete (BCursor *) cursor; } void diff --git a/src/haikufns.c b/src/haikufns.c index 0e0cffea72d..3b22f7bb379 100644 --- a/src/haikufns.c +++ b/src/haikufns.c @@ -592,8 +592,6 @@ haiku_create_frame (Lisp_Object parms) if (STRINGP (name)) Vx_resource_name = name; - block_input (); - /* make_frame_without_minibuffer can run Lisp code and garbage collect. */ /* No need to protect DISPLAY because that's not used after passing it to make_frame_without_minibuffer. */ @@ -668,8 +666,6 @@ haiku_create_frame (Lisp_Object parms) FRAME_RIF (f)->default_font_parameter (f, parms); - unblock_input (); - gui_default_parameter (f, parms, Qborder_width, make_fixnum (0), "borderwidth", "BorderWidth", RES_TYPE_NUMBER); gui_default_parameter (f, parms, Qinternal_border_width, make_fixnum (2), @@ -749,6 +745,7 @@ haiku_create_frame (Lisp_Object parms) RES_TYPE_BOOLEAN); f->no_split = minibuffer_only || (!EQ (tem, Qunbound) && !NILP (tem)); + block_input (); #define ASSIGN_CURSOR(cursor, be_cursor) \ (FRAME_OUTPUT_DATA (f)->cursor = be_cursor) @@ -786,11 +783,15 @@ haiku_create_frame (Lisp_Object parms) f->terminal->reference_count++; FRAME_OUTPUT_DATA (f)->window = BWindow_new (&FRAME_OUTPUT_DATA (f)->view); + unblock_input (); + if (!FRAME_OUTPUT_DATA (f)->window) xsignal1 (Qerror, build_unibyte_string ("Could not create window")); + block_input (); if (!minibuffer_only && FRAME_EXTERNAL_MENU_BAR (f)) initialize_frame_menubar (f); + unblock_input (); FRAME_OUTPUT_DATA (f)->window_desc = FRAME_OUTPUT_DATA (f)->window; @@ -871,10 +872,12 @@ haiku_create_frame (Lisp_Object parms) if (CONSP (XCAR (tem)) && !NILP (XCAR (XCAR (tem)))) fset_param_alist (f, Fcons (XCAR (tem), f->param_alist)); + block_input (); if (window_prompting & (USPosition | PPosition)) haiku_set_offset (f, f->left_pos, f->top_pos, 1); else BWindow_center_on_screen (FRAME_HAIKU_WINDOW (f)); + unblock_input (); /* Make sure windows on this frame appear in calls to next-window and similar functions. */ -- 2.39.5