summaryrefslogtreecommitdiff
path: root/src/haiku_support.cc
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2022-01-01 05:32:42 +0000
committerPo Lu <luangruo@yahoo.com>2022-01-01 05:32:42 +0000
commitd7e1ed17d9d60ab0fe306d1216f695fd96d51956 (patch)
tree123185586180d438c4773f311e42942d15527132 /src/haiku_support.cc
parent4521a3a19c123c43f4bb7ad21a94456434ef81f4 (diff)
downloademacs-d7e1ed17d9d60ab0fe306d1216f695fd96d51956.tar.gz
emacs-d7e1ed17d9d60ab0fe306d1216f695fd96d51956.tar.bz2
emacs-d7e1ed17d9d60ab0fe306d1216f695fd96d51956.zip
Flush frames after mouse face is cleared on a child frame in Haiku
* src/haiku_support.cc (~EmacsWindow): (UpwardsSubsetChildren): (UpwardsUnSubsetChildren): Fix locking semantics. * src/haikuterm.c (haiku_read_socket): Flush dirty back buffers after clearing mouse face because the pointer was moved out of a frame.
Diffstat (limited to 'src/haiku_support.cc')
-rw-r--r--src/haiku_support.cc9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/haiku_support.cc b/src/haiku_support.cc
index dae0825bd29..32e61d96604 100644
--- a/src/haiku_support.cc
+++ b/src/haiku_support.cc
@@ -259,7 +259,10 @@ public:
struct child_frame *next;
for (struct child_frame *f = subset_windows; f; f = next)
{
+ if (f->window->LockLooper ())
+ gui_abort ("Failed to lock looper for unparent");
f->window->Unparent ();
+ f->window->UnlockLooper ();
next = f->next;
delete f;
}
@@ -279,6 +282,8 @@ public:
void
UpwardsSubsetChildren (EmacsWindow *w)
{
+ if (!LockLooper ())
+ gui_abort ("Failed to lock looper for subset");
if (!child_frame_lock.Lock ())
gui_abort ("Failed to lock child frame state lock");
UpwardsSubset (w);
@@ -286,6 +291,7 @@ public:
f = f->next)
f->window->UpwardsSubsetChildren (w);
child_frame_lock.Unlock ();
+ UnlockLooper ();
}
void
@@ -298,6 +304,8 @@ public:
void
UpwardsUnSubsetChildren (EmacsWindow *w)
{
+ if (!LockLooper ())
+ gui_abort ("Failed to lock looper for unsubset");
if (!child_frame_lock.Lock ())
gui_abort ("Failed to lock child frame state lock");
UpwardsUnSubset (w);
@@ -305,6 +313,7 @@ public:
f = f->next)
f->window->UpwardsUnSubsetChildren (w);
child_frame_lock.Unlock ();
+ UnlockLooper ();
}
void