From: Po Lu Date: Sat, 1 Jan 2022 07:09:38 +0000 (+0000) Subject: Fix child frame synchronization order on Haiku X-Git-Tag: emacs-29.0.90~3317 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=cbc77dcf033aed0a595f31437c92f1981503ab88;p=emacs.git Fix child frame synchronization order on Haiku * src/haiku_support.cc (DoMove): (FrameMoved): Fix locking and sync order semantics. --- diff --git a/src/haiku_support.cc b/src/haiku_support.cc index 32e61d96604..2a74d0bd515 100644 --- a/src/haiku_support.cc +++ b/src/haiku_support.cc @@ -414,11 +414,8 @@ public: DoMove (struct child_frame *f) { BRect frame = this->Frame (); - if (!f->window->LockLooper ()) - gui_abort ("Failed to lock child frame window for move"); f->window->MoveTo (frame.left + f->xoff, frame.top + f->yoff); - f->window->UnlockLooper (); } void @@ -652,21 +649,24 @@ public: if (!child_frame_lock.Lock ()) gui_abort ("Failed to lock child frame state lock"); - for (struct child_frame *f = subset_windows; f; f = f->next) DoMove (f); - child_frame_lock.Unlock (); + + Sync (); BWindow::FrameMoved (newPosition); } void WorkspacesChanged (uint32_t old, uint32_t n) { + if (!child_frame_lock.Lock ()) + gui_abort ("Failed to lock child frames for changing workspaces"); for (struct child_frame *f = subset_windows; f; f = f->next) DoUpdateWorkspace (f); + child_frame_lock.Unlock (); } void