From: Po Lu Date: Thu, 17 Mar 2022 08:51:32 +0000 (+0000) Subject: Fix creating frames with an initial value of `fullscreen' on Haiku X-Git-Tag: emacs-29.0.90~1931^2~1076 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=bc17a10708337cbe853ea153bd82ad159d959924;p=emacs.git Fix creating frames with an initial value of `fullscreen' on Haiku * src/haikufns.c (haiku_create_frame): Set configury_done and do pending fullscreen change if any. * src/haikuterm.c (haiku_fullscreen): Defer actually setting fullscreen until configury_done is set. * src/haikuterm.h (struct haiku_output): New field `configury_done'. --- diff --git a/src/haikufns.c b/src/haikufns.c index 24e4613e3ee..7bb613af6e2 100644 --- a/src/haikufns.c +++ b/src/haikufns.c @@ -902,6 +902,11 @@ haiku_create_frame (Lisp_Object parms) BWindow_center_on_screen (FRAME_HAIKU_WINDOW (f)); unblock_input (); + FRAME_OUTPUT_DATA (f)->configury_done = true; + + if (f->want_fullscreen != FULLSCREEN_NONE) + FRAME_TERMINAL (f)->fullscreen_hook (f); + /* Make sure windows on this frame appear in calls to next-window and similar functions. */ Vwindow_list = Qnil; diff --git a/src/haikuterm.c b/src/haikuterm.c index 9844a09a024..4ae64129ef1 100644 --- a/src/haikuterm.c +++ b/src/haikuterm.c @@ -3779,6 +3779,13 @@ haiku_toggle_invisible_pointer (struct frame *f, bool invisible_p) static void haiku_fullscreen (struct frame *f) { + /* When FRAME_OUTPUT_DATA (f)->configury_done is false, the frame is + being created, and its regular width and height have not yet been + set. This function will be called again by haiku_create_frame, + so do nothing. */ + if (!FRAME_OUTPUT_DATA (f)->configury_done) + return; + if (f->want_fullscreen == FULLSCREEN_MAXIMIZED) { EmacsWindow_make_fullscreen (FRAME_HAIKU_WINDOW (f), 0); diff --git a/src/haikuterm.h b/src/haikuterm.h index 8d0af8dc679..65fd51e237c 100644 --- a/src/haikuterm.h +++ b/src/haikuterm.h @@ -165,6 +165,10 @@ struct haiku_output /* The pending position we're waiting for. */ int pending_top, pending_left; + + /* Whether or not adjust_frame_size and haiku_set_offset have yet + been called by haiku_create_frame. */ + bool configury_done; }; struct x_output