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;
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 ();
}
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)
{
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);
}