functions = Func_Resize | Func_Move | Func_Iconify | Func_Maximize;
mwm_decorations = Decor_Titlebar | Decor_Handle | Decor_Border |
- Decor_Iconify | Decor_Maximize | Decor_Close;
+ Decor_Iconify | Decor_Maximize;
client.normal_hint_flags = 0;
client.window_group = None;
void BlackboxWindow::setupDecor() {
if (blackbox_attrib.decoration != DecorNone) {
// start with everything on
- decorations =
+ decorations = Decor_Close |
(mwm_decorations & Decor_Titlebar ? Decor_Titlebar : 0) |
(mwm_decorations & Decor_Border ? Decor_Border : 0) |
(mwm_decorations & Decor_Handle ? Decor_Handle : 0) |
(mwm_decorations & Decor_Iconify ? Decor_Iconify : 0) |
- (mwm_decorations & Decor_Maximize ? Decor_Maximize : 0) |
- (mwm_decorations & Decor_Close ? Decor_Close : 0);
+ (mwm_decorations & Decor_Maximize ? Decor_Maximize : 0);
if (! (functions & Func_Close)) decorations &= ~Decor_Close;
if (! (functions & Func_Maximize)) decorations &= ~Decor_Maximize;
if (mwm_hint->flags & MwmHintsDecorations) {
if (mwm_hint->decorations & MwmDecorAll) {
mwm_decorations = Decor_Titlebar | Decor_Handle | Decor_Border |
- Decor_Iconify | Decor_Maximize | Decor_Close;
+ Decor_Iconify | Decor_Maximize;
} else {
mwm_decorations = 0;
client.window);
#endif // DEBUG
+ /*
+ Even thought the window wants to be shown, if it is not on the current
+ workspace, then it isn't going to be shown right now.
+ */
+ if (blackbox_attrib.workspace != screen->getCurrentWorkspaceID())
+ current_state = WithdrawnState;
+
switch (current_state) {
case IconicState:
iconify();
if (isNormal()) {
if (! blackbox->isStartup()) {
XSync(blackbox->getXDisplay(), False); // make sure the frame is mapped
- if (screen->doFocusNew()|| (isTransient() && getTransientFor() &&
- getTransientFor()->isFocused())) {
+ if (screen->doFocusNew() || (isTransient() && getTransientFor() &&
+ getTransientFor()->isFocused())) {
setInputFocus();
}
if (screen->getPlacementPolicy() == BScreen::ClickMousePlacement) {
break;
case XA_WM_TRANSIENT_FOR: {
+ bool s = flags.stuck;
+
// determine if this is a transient window
getTransientInfo();
functions &= ~Func_Maximize;
setAllowedActions();
setupDecor();
+ if (flags.stuck != s) stick();
}
reconfigure();
} else if (flags.resizing) {
doResize(me->x_root, me->y_root);
} else {
- if (!flags.resizing && me->state & Button1Mask && (functions & Func_Move) &&
+ if ((functions & Func_Move) &&
+ (me->state & Button1Mask) &&
(frame.title == me->window || frame.label == me->window ||
frame.handle == me->window || frame.window == me->window)) {
beginMove(me->x_root, me->y_root);
} else if ((functions & Func_Resize) &&
- (me->state & Button1Mask && (me->window == frame.right_grip ||
- me->window == frame.left_grip)) ||
- (me->state & Button3Mask && me->state & mod_mask &&
- me->window == frame.window)) {
+ ((me->state & Button1Mask) && (me->window == frame.right_grip ||
+ me->window == frame.left_grip)) ||
+ ((me->state & Button3Mask) && (me->state & mod_mask) &&
+ (frame.title == me->window || frame.label == me->window ||
+ frame.handle == me->window || frame.window == me->window))) {
unsigned int zones = screen->getResizeZones();
Corner corner;