aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPo Lu2021-12-31 13:03:07 +0000
committerPo Lu2021-12-31 13:03:07 +0000
commit7dd4dc6ace22aab91939176cb623d54cdb1788e4 (patch)
treed5e0cf406ab2784d09e4c48942d2546365b29f17 /src
parenta8c3e8e2a6efa77b38110a9c1fee1ece8d8da4d5 (diff)
downloademacs-7dd4dc6ace22aab91939176cb623d54cdb1788e4.tar.gz
emacs-7dd4dc6ace22aab91939176cb623d54cdb1788e4.zip
On Haiku, sync a frames's connection to the app sever after raising
* src/haiku_support.h: (BWindow_sync) * src/haiku_support.cc (BWindow_sync): New function. * src/haikuterm.c (haiku_frame_raise_lower): Synchronize window after raising it to avoid situations where raising windows is done out-of-order, such as when ediff raises a frame.
Diffstat (limited to 'src')
-rw-r--r--src/haiku_support.cc12
-rw-r--r--src/haiku_support.h3
-rw-r--r--src/haikuterm.c2
3 files changed, 16 insertions, 1 deletions
diff --git a/src/haiku_support.cc b/src/haiku_support.cc
index fea0684b1b4..dae0825bd29 100644
--- a/src/haiku_support.cc
+++ b/src/haiku_support.cc
@@ -2901,6 +2901,18 @@ BWindow_set_min_size (void *window, int width, int height)
2901 w->UnlockLooper (); 2901 w->UnlockLooper ();
2902} 2902}
2903 2903
2904/* Synchronize WINDOW's connection to the App Server. */
2905void
2906BWindow_sync (void *window)
2907{
2908 BWindow *w = (BWindow *) window;
2909
2910 if (!w->LockLooper ())
2911 gui_abort ("Failed to lock window looper for sync");
2912 w->Sync ();
2913 w->UnlockLooper ();
2914}
2915
2904/* Set the alignment of WINDOW's dimensions. */ 2916/* Set the alignment of WINDOW's dimensions. */
2905void 2917void
2906BWindow_set_size_alignment (void *window, int align_width, int align_height) 2918BWindow_set_size_alignment (void *window, int align_width, int align_height)
diff --git a/src/haiku_support.h b/src/haiku_support.h
index 9f5f3c77e3d..b08a561def3 100644
--- a/src/haiku_support.h
+++ b/src/haiku_support.h
@@ -819,6 +819,9 @@ extern "C"
819 extern void 819 extern void
820 BWindow_set_size_alignment (void *window, int align_width, int align_height); 820 BWindow_set_size_alignment (void *window, int align_width, int align_height);
821 821
822 extern void
823 BWindow_sync (void *window);
824
822#ifdef __cplusplus 825#ifdef __cplusplus
823 extern void * 826 extern void *
824 find_appropriate_view_for_draw (void *vw); 827 find_appropriate_view_for_draw (void *vw);
diff --git a/src/haikuterm.c b/src/haikuterm.c
index 24fa44b01d0..9b54e50b617 100644
--- a/src/haikuterm.c
+++ b/src/haikuterm.c
@@ -346,7 +346,7 @@ haiku_frame_raise_lower (struct frame *f, bool raise_p)
346 { 346 {
347 block_input (); 347 block_input ();
348 BWindow_activate (FRAME_HAIKU_WINDOW (f)); 348 BWindow_activate (FRAME_HAIKU_WINDOW (f));
349 flush_frame (f); 349 BWindow_sync (FRAME_HAIKU_WINDOW (f));
350 unblock_input (); 350 unblock_input ();
351 } 351 }
352} 352}