[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master e37ffc379e: Improve robustness of override-redirect on Haiku
From: |
Po Lu |
Subject: |
master e37ffc379e: Improve robustness of override-redirect on Haiku |
Date: |
Tue, 8 Feb 2022 07:21:24 -0500 (EST) |
branch: master
commit e37ffc379e66d45745e037b3a483460d25609e62
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
Improve robustness of override-redirect on Haiku
* src/haiku_support.cc (class EmacsWindow): New field
`override_redirect_p'.
(BWindow_change_decoration, BWindow_set_override_redirect): Set
and restore from the saved pre-override redirect state fields if
appropriate.
---
src/haiku_support.cc | 35 +++++++++++++++++++++++------------
1 file changed, 23 insertions(+), 12 deletions(-)
diff --git a/src/haiku_support.cc b/src/haiku_support.cc
index 0aeff104da..71aa323b07 100644
--- a/src/haiku_support.cc
+++ b/src/haiku_support.cc
@@ -433,7 +433,8 @@ public:
int shown_flag = 0;
volatile int was_shown_p = 0;
bool menu_bar_active_p = false;
- window_look pre_override_redirect_style;
+ bool override_redirect_p = false;
+ window_look pre_override_redirect_look;
window_feel pre_override_redirect_feel;
uint32 pre_override_redirect_workspaces;
pthread_mutex_t menu_update_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -2305,13 +2306,24 @@ BView_convert_from_screen (void *view, int *x, int *y)
void
BWindow_change_decoration (void *window, int decorate_p)
{
- BWindow *w = (BWindow *) window;
+ EmacsWindow *w = (EmacsWindow *) window;
if (!w->LockLooper ())
gui_abort ("Failed to lock window while changing its decorations");
- if (decorate_p)
- w->SetLook (B_TITLED_WINDOW_LOOK);
+
+ if (!w->override_redirect_p)
+ {
+ if (decorate_p)
+ w->SetLook (B_TITLED_WINDOW_LOOK);
+ else
+ w->SetLook (B_NO_BORDER_WINDOW_LOOK);
+ }
else
- w->SetLook (B_NO_BORDER_WINDOW_LOOK);
+ {
+ if (decorate_p)
+ w->pre_override_redirect_look = B_TITLED_WINDOW_LOOK;
+ else
+ w->pre_override_redirect_look = B_NO_BORDER_WINDOW_LOOK;
+ }
w->UnlockLooper ();
}
@@ -3339,9 +3351,6 @@ be_use_subpixel_antialiasing (void)
return current_subpixel_antialiasing;
}
-/* This isn't implemented very properly (for example: what if
- decorations are changed while the window is under override
- redirect?) but it works well enough for most use cases. */
void
BWindow_set_override_redirect (void *window, bool override_redirect_p)
{
@@ -3349,19 +3358,21 @@ BWindow_set_override_redirect (void *window, bool
override_redirect_p)
if (w->LockLooper ())
{
- if (override_redirect_p)
+ if (override_redirect_p && !w->override_redirect_p)
{
+ w->override_redirect_p = true;
w->pre_override_redirect_feel = w->Feel ();
- w->pre_override_redirect_style = w->Look ();
+ w->pre_override_redirect_look = w->Look ();
w->SetFeel (kMenuWindowFeel);
w->SetLook (B_NO_BORDER_WINDOW_LOOK);
w->pre_override_redirect_workspaces = w->Workspaces ();
w->SetWorkspaces (B_ALL_WORKSPACES);
}
- else
+ else if (w->override_redirect_p)
{
+ w->override_redirect_p = false;
w->SetFeel (w->pre_override_redirect_feel);
- w->SetLook (w->pre_override_redirect_style);
+ w->SetLook (w->pre_override_redirect_look);
w->SetWorkspaces (w->pre_override_redirect_workspaces);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master e37ffc379e: Improve robustness of override-redirect on Haiku,
Po Lu <=