diff options
author | Po Lu <luangruo@yahoo.com> | 2022-05-17 13:13:18 +0000 |
---|---|---|
committer | Po Lu <luangruo@yahoo.com> | 2022-05-17 13:13:41 +0000 |
commit | 5c656182ce30372873ea2e3f1ffb555f52df9d95 (patch) | |
tree | c211ea0d2bef6c7b79bc77c70c074accf8f41291 /src/haikufns.c | |
parent | 2414fa360354f4cd245c869813f131108ca1072a (diff) | |
download | emacs-5c656182ce30372873ea2e3f1ffb555f52df9d95.tar.gz |
Avoid race conditions when computing real frame positions on Haiku
* src/haiku_support.cc (DispatchMessage): Accept
SEND_MOVE_FRAME_EVENT.
(class EmacsWindow, FrameMoved): Include decorator frame in
MOVE_EVENT events.
(be_send_move_frame_event): New function.
* src/haiku_support.h (struct haiku_move_event): Include
decorator dimensions. Update prototypes.
* src/haikufns.c (haiku_update_after_decoration_change): Ask for
a move frame event and don't do anything if configury is not yet
complete.
* src/haikuterm.c (haiku_read_socket): Adjust accordingly.
Diffstat (limited to 'src/haikufns.c')
-rw-r--r-- | src/haikufns.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/src/haikufns.c b/src/haikufns.c index e8e303fd279..fa47da73d2c 100644 --- a/src/haikufns.c +++ b/src/haikufns.c @@ -109,22 +109,15 @@ get_geometry_from_preferences (struct haiku_display_info *dpyinfo, static void haiku_update_after_decoration_change (struct frame *f) { - int x, y, width, height; - struct frame *parent; + /* Don't reset offsets during initial frame creation, since the + contents of f->left_pos and f->top_pos won't be applied to the + window until `x-create-frame' finishes, so setting them here will + overwrite the offsets that the window should be moved to. */ - be_get_window_decorator_frame (FRAME_HAIKU_WINDOW (f), - &x, &y, &width, &height); - - parent = FRAME_PARENT_FRAME (f); - - if (parent) - { - x = x - FRAME_OUTPUT_DATA (f)->frame_x; - y = y - FRAME_OUTPUT_DATA (f)->frame_x; - } + if (!FRAME_OUTPUT_DATA (f)->configury_done) + return; - f->left_pos = x; - f->top_pos = y; + be_send_move_frame_event (FRAME_HAIKU_WINDOW (f)); } void |