summaryrefslogtreecommitdiff
path: root/src/haikufns.c
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2022-05-17 13:13:18 +0000
committerPo Lu <luangruo@yahoo.com>2022-05-17 13:13:41 +0000
commit5c656182ce30372873ea2e3f1ffb555f52df9d95 (patch)
treec211ea0d2bef6c7b79bc77c70c074accf8f41291 /src/haikufns.c
parent2414fa360354f4cd245c869813f131108ca1072a (diff)
downloademacs-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.c21
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