]> git.eshelyaron.com Git - emacs.git/commitdiff
Handle correctly errors during frame creation on Haiku
authorPo Lu <luangruo@yahoo.com>
Sun, 30 Jan 2022 13:23:52 +0000 (13:23 +0000)
committerPo Lu <luangruo@yahoo.com>
Sun, 30 Jan 2022 13:23:52 +0000 (13:23 +0000)
* 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
src/haikufns.c

index 794023c98e4bf46af2dddd89f1520f28a4bdbe9a..8ab821709161a92c88a280104020db98cee7aeab 100644 (file)
@@ -2028,7 +2028,8 @@ BCursor_create_grab (void)
 void
 BCursor_delete (void *cursor)
 {
-  delete (BCursor *) cursor;
+  if (cursor)
+    delete (BCursor *) cursor;
 }
 
 void
index 0e0cffea72dd04aa97f926b778106904f0c6a108..3b22f7bb379964f3e2e4839ac377db19b2fd1123 100644 (file)
@@ -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.  */