]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix child frame synchronization order on Haiku
authorPo Lu <luangruo@yahoo.com>
Sat, 1 Jan 2022 07:09:38 +0000 (07:09 +0000)
committerPo Lu <luangruo@yahoo.com>
Sat, 1 Jan 2022 07:10:39 +0000 (07:10 +0000)
* src/haiku_support.cc (DoMove):
(FrameMoved): Fix locking and sync order semantics.

src/haiku_support.cc

index 32e61d96604768e4d872f983061ce6613cc4f046..2a74d0bd515ea4c50e264b9df42b78ad2d8f69fd 100644 (file)
@@ -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