sync with bb. mostly cleanups in Window.cc
This commit is contained in:
parent
18064df19f
commit
ffa4c7f341
8 changed files with 218 additions and 118 deletions
|
@ -417,7 +417,7 @@ ScreenInfo::ScreenInfo(BaseDisplay *d, unsigned int num) {
|
|||
HeightOfScreen(ScreenOfDisplay(basedisplay->getXDisplay(),
|
||||
screen_number)));
|
||||
/*
|
||||
If the default depth is at least 15 we will use that,
|
||||
If the default depth is at least 8 we will use that,
|
||||
otherwise we try to find the largest TrueColor visual.
|
||||
Preference is given to 24 bit over larger depths if 24 bit is an option.
|
||||
*/
|
||||
|
@ -426,7 +426,7 @@ ScreenInfo::ScreenInfo(BaseDisplay *d, unsigned int num) {
|
|||
visual = DefaultVisual(basedisplay->getXDisplay(), screen_number);
|
||||
colormap = DefaultColormap(basedisplay->getXDisplay(), screen_number);
|
||||
|
||||
if (depth < 15) {
|
||||
if (depth < 8) {
|
||||
// search for a TrueColor Visual... if we can't find one...
|
||||
// we will use the default visual for the screen
|
||||
XVisualInfo vinfo_template, *vinfo_return;
|
||||
|
|
26
src/Input.cc
26
src/Input.cc
|
@ -253,6 +253,32 @@ void BInput::doAction(BlackboxWindow *window, Action action) const {
|
|||
if (window && window->isClosable()) window->close();
|
||||
return;
|
||||
|
||||
case NextWorkspace: {
|
||||
BScreen *s;
|
||||
unsigned int w;
|
||||
s = _blackbox->getFocusedScreen();
|
||||
if (s) {
|
||||
w = s->getCurrentWorkspaceID();
|
||||
if (++w >= s->getWorkspaceCount())
|
||||
w = 0;
|
||||
s->changeWorkspaceID(w);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
case PrevWorkspace: {
|
||||
BScreen *s;
|
||||
int w;
|
||||
s = _blackbox->getFocusedScreen();
|
||||
if (s) {
|
||||
w = s->getCurrentWorkspaceID();
|
||||
if (w-- == 0)
|
||||
w = s->getWorkspaceCount() - 1;
|
||||
s->changeWorkspaceID(w);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
case BeginMove:
|
||||
if (window && window->isMovable()) {
|
||||
Window root_return, child_return;
|
||||
|
|
|
@ -70,6 +70,8 @@ public:
|
|||
Iconify,
|
||||
Close,
|
||||
ShowWindowMenu,
|
||||
NextWorkspace,
|
||||
PrevWorkspace,
|
||||
|
||||
BeginMove,
|
||||
BeginResizeUL,
|
||||
|
|
|
@ -188,8 +188,9 @@ string textPropertyToString(Display *display, XTextProperty& text_prop) {
|
|||
string ret;
|
||||
|
||||
if (text_prop.value && text_prop.nitems > 0) {
|
||||
if (text_prop.encoding == XA_STRING) {
|
||||
ret = (char *) text_prop.value;
|
||||
if (text_prop.encoding != XA_STRING) {
|
||||
} else {
|
||||
text_prop.nitems = strlen((char *) text_prop.value);
|
||||
|
||||
char **list;
|
||||
|
|
265
src/Window.cc
265
src/Window.cc
|
@ -254,8 +254,7 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
|
|||
bool place_window = True;
|
||||
if (blackbox->isStartup() || isTransient() ||
|
||||
client.normal_hint_flags & (PPosition|USPosition)) {
|
||||
setGravityOffsets();
|
||||
|
||||
applyGravity(frame.rect);
|
||||
|
||||
if (blackbox->isStartup() ||
|
||||
client.rect.intersects(screen->availableArea()))
|
||||
|
@ -345,7 +344,7 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
|
|||
window was iconified previously.
|
||||
*/
|
||||
|
||||
setFocusFlag(False);
|
||||
redrawWindowFrame();
|
||||
}
|
||||
|
||||
|
||||
|
@ -829,8 +828,7 @@ void BlackboxWindow::reconfigure(void) {
|
|||
positionWindows();
|
||||
decorate();
|
||||
|
||||
XClearWindow(blackbox->getXDisplay(), frame.window);
|
||||
setFocusFlag(flags.focused);
|
||||
redrawWindowFrame();
|
||||
|
||||
configure(frame.rect.x(), frame.rect.y(),
|
||||
frame.rect.width(), frame.rect.height());
|
||||
|
@ -846,7 +844,8 @@ void BlackboxWindow::positionWindows(void) {
|
|||
XMoveResizeWindow(blackbox->getXDisplay(), frame.window,
|
||||
frame.rect.x(), frame.rect.y(), frame.inside_w,
|
||||
(flags.shaded) ? frame.title_h : frame.inside_h);
|
||||
XSetWindowBorderWidth(blackbox->getXDisplay(), frame.window, frame.border_w);
|
||||
XSetWindowBorderWidth(blackbox->getXDisplay(), frame.window,
|
||||
frame.border_w);
|
||||
XSetWindowBorderWidth(blackbox->getXDisplay(), frame.plate,
|
||||
frame.mwm_border_w);
|
||||
XMoveResizeWindow(blackbox->getXDisplay(), frame.plate,
|
||||
|
@ -1405,9 +1404,9 @@ BlackboxWindow *BlackboxWindow::getTransientFor(void) const {
|
|||
|
||||
void BlackboxWindow::configure(int dx, int dy,
|
||||
unsigned int dw, unsigned int dh) {
|
||||
bool send_event = (frame.rect.x() != dx || frame.rect.y() != dy);
|
||||
bool send_event = False;
|
||||
|
||||
if ((dw != frame.rect.width()) || (dh != frame.rect.height())) {
|
||||
if (dw != frame.rect.width() || dh != frame.rect.height()) {
|
||||
frame.rect.setRect(dx, dy, dw, dh);
|
||||
frame.inside_w = frame.rect.width() - (frame.border_w * 2);
|
||||
frame.inside_h = frame.rect.height() - (frame.border_w * 2);
|
||||
|
@ -1428,15 +1427,14 @@ void BlackboxWindow::configure(int dx, int dy,
|
|||
|
||||
positionWindows();
|
||||
decorate();
|
||||
setFocusFlag(flags.focused);
|
||||
redrawAllButtons();
|
||||
} else {
|
||||
redrawWindowFrame();
|
||||
} else if (frame.rect.x() != dx || frame.rect.y() != dy) {
|
||||
send_event = True;
|
||||
|
||||
frame.rect.setPos(dx, dy);
|
||||
|
||||
XMoveWindow(blackbox->getXDisplay(), frame.window,
|
||||
frame.rect.x(), frame.rect.y());
|
||||
|
||||
if (! flags.moving) send_event = True;
|
||||
}
|
||||
|
||||
if (send_event && ! flags.moving) {
|
||||
|
@ -1457,8 +1455,8 @@ void BlackboxWindow::configure(int dx, int dy,
|
|||
event.xconfigure.above = frame.window;
|
||||
event.xconfigure.override_redirect = False;
|
||||
|
||||
XSendEvent(blackbox->getXDisplay(), client.window, True,
|
||||
NoEventMask, &event);
|
||||
XSendEvent(blackbox->getXDisplay(), client.window, False,
|
||||
StructureNotifyMask, &event);
|
||||
|
||||
screen->updateNetizenConfigNotify(&event);
|
||||
}
|
||||
|
@ -1511,7 +1509,7 @@ bool BlackboxWindow::setInputFocus(void) {
|
|||
return True;
|
||||
}
|
||||
|
||||
if (! client.rect.intersects(screen->getRect())) {
|
||||
if (! frame.rect.intersects(screen->getRect())) {
|
||||
// client is outside the screen, move it to the center
|
||||
configure((screen->getWidth() - frame.rect.width()) / 2,
|
||||
(screen->getHeight() - frame.rect.height()) / 2,
|
||||
|
@ -1725,7 +1723,7 @@ void BlackboxWindow::maximize(unsigned int button) {
|
|||
blackbox_attrib.premax_x = blackbox_attrib.premax_y = 0;
|
||||
blackbox_attrib.premax_w = blackbox_attrib.premax_h = 0;
|
||||
|
||||
redrawAllButtons();
|
||||
redrawAllButtons(); // in case it is not called in configure()
|
||||
setState(current_state);
|
||||
return;
|
||||
}
|
||||
|
@ -1739,7 +1737,6 @@ void BlackboxWindow::maximize(unsigned int button) {
|
|||
|
||||
const Rect &screen_area = screen->availableArea();
|
||||
frame.changing = screen_area;
|
||||
constrain(TopLeft);
|
||||
|
||||
switch(button) {
|
||||
case 1:
|
||||
|
@ -1764,6 +1761,8 @@ void BlackboxWindow::maximize(unsigned int button) {
|
|||
break;
|
||||
}
|
||||
|
||||
constrain(TopLeft);
|
||||
|
||||
if (flags.shaded) {
|
||||
blackbox_attrib.flags ^= AttribShaded;
|
||||
blackbox_attrib.attrib ^= AttribShaded;
|
||||
|
@ -1776,7 +1775,7 @@ void BlackboxWindow::maximize(unsigned int button) {
|
|||
frame.changing.width(), frame.changing.height());
|
||||
if (flags.focused)
|
||||
raise();
|
||||
redrawAllButtons();
|
||||
redrawAllButtons(); // in case it is not called in configure()
|
||||
setState(current_state);
|
||||
}
|
||||
|
||||
|
@ -1823,7 +1822,7 @@ void BlackboxWindow::shade(void) {
|
|||
frame.margin.bottom);
|
||||
} else {
|
||||
if (! (decorations & Decor_Titlebar))
|
||||
return;
|
||||
return; // can't shade it without a titlebar!
|
||||
|
||||
XResizeWindow(blackbox->getXDisplay(), frame.window,
|
||||
frame.inside_w, frame.title_h);
|
||||
|
@ -1884,13 +1883,7 @@ void BlackboxWindow::stick(void) {
|
|||
}
|
||||
|
||||
|
||||
void BlackboxWindow::setFocusFlag(bool focus) {
|
||||
// only focus a window if it is visible
|
||||
if (focus && !flags.visible)
|
||||
return;
|
||||
|
||||
flags.focused = focus;
|
||||
|
||||
void BlackboxWindow::redrawWindowFrame(void) const {
|
||||
if (decorations & Decor_Titlebar) {
|
||||
if (flags.focused) {
|
||||
if (frame.ftitle)
|
||||
|
@ -1966,6 +1959,17 @@ void BlackboxWindow::setFocusFlag(bool focus) {
|
|||
XSetWindowBorder(blackbox->getXDisplay(),
|
||||
frame.plate, frame.uborder_pixel);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void BlackboxWindow::setFocusFlag(bool focus) {
|
||||
// only focus a window if it is visible
|
||||
if (focus && !flags.visible)
|
||||
return;
|
||||
|
||||
flags.focused = focus;
|
||||
|
||||
redrawWindowFrame();
|
||||
|
||||
if (screen->isSloppyFocus() && screen->doAutoRaise()) {
|
||||
if (isFocused()) timer->start();
|
||||
|
@ -1981,8 +1985,8 @@ void BlackboxWindow::installColormap(bool install) {
|
|||
int i = 0, ncmap = 0;
|
||||
Colormap *cmaps = XListInstalledColormaps(blackbox->getXDisplay(),
|
||||
client.window, &ncmap);
|
||||
XWindowAttributes wattrib;
|
||||
if (cmaps) {
|
||||
XWindowAttributes wattrib;
|
||||
if (XGetWindowAttributes(blackbox->getXDisplay(),
|
||||
client.window, &wattrib)) {
|
||||
if (install) {
|
||||
|
@ -2146,88 +2150,138 @@ void BlackboxWindow::restoreAttributes(void) {
|
|||
blackbox_attrib.premax_h = h;
|
||||
}
|
||||
|
||||
// with the state set it will then be the map events job to read the window's
|
||||
// state and behave accordingly
|
||||
// with the state set it will then be the map event's job to read the
|
||||
// window's state and behave accordingly
|
||||
|
||||
delete net;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Positions the frame according the the client window position and window
|
||||
* gravity.
|
||||
* Positions the Rect r according the the client window position and
|
||||
* window gravity.
|
||||
*/
|
||||
void BlackboxWindow::setGravityOffsets(void) {
|
||||
// x coordinates for each gravity type
|
||||
const int x_west = client.rect.x();
|
||||
const int x_east = client.rect.right() - frame.inside_w + 1;
|
||||
const int x_center = client.rect.left() +
|
||||
((client.rect.width() - frame.rect.width()) / 2);
|
||||
// y coordinates for each gravity type
|
||||
const int y_north = client.rect.y();
|
||||
const int y_south = client.rect.bottom() - frame.inside_h + 1;
|
||||
const int y_center = client.rect.top() +
|
||||
((client.rect.height() - frame.rect.height()) / 2);
|
||||
|
||||
void BlackboxWindow::applyGravity(Rect &r) {
|
||||
// apply horizontal window gravity
|
||||
switch (client.win_gravity) {
|
||||
default:
|
||||
case NorthWestGravity: frame.rect.setPos(x_west, y_north); break;
|
||||
case NorthGravity: frame.rect.setPos(x_center, y_north); break;
|
||||
case NorthEastGravity: frame.rect.setPos(x_east, y_north); break;
|
||||
case SouthWestGravity: frame.rect.setPos(x_west, y_south); break;
|
||||
case SouthGravity: frame.rect.setPos(x_center, y_south); break;
|
||||
case SouthEastGravity: frame.rect.setPos(x_east, y_south); break;
|
||||
case WestGravity: frame.rect.setPos(x_west, y_center); break;
|
||||
case CenterGravity: frame.rect.setPos(x_center, y_center); break;
|
||||
case EastGravity: frame.rect.setPos(x_east, y_center); break;
|
||||
case NorthWestGravity:
|
||||
case SouthWestGravity:
|
||||
case WestGravity:
|
||||
r.setX(client.rect.x());
|
||||
break;
|
||||
|
||||
case NorthGravity:
|
||||
case SouthGravity:
|
||||
case CenterGravity:
|
||||
r.setX(client.rect.x() - (frame.margin.left + frame.margin.right) / 2);
|
||||
break;
|
||||
|
||||
case NorthEastGravity:
|
||||
case SouthEastGravity:
|
||||
case EastGravity:
|
||||
r.setX(client.rect.x() - frame.margin.left - frame.margin.right);
|
||||
break;
|
||||
|
||||
case ForgetGravity:
|
||||
case StaticGravity:
|
||||
frame.rect.setPos(client.rect.x() - frame.margin.left,
|
||||
client.rect.y() - frame.margin.top);
|
||||
r.setX(client.rect.x() - frame.margin.left);
|
||||
break;
|
||||
}
|
||||
|
||||
// apply vertical window gravity
|
||||
switch (client.win_gravity) {
|
||||
default:
|
||||
case NorthWestGravity:
|
||||
case NorthEastGravity:
|
||||
case NorthGravity:
|
||||
r.setY(client.rect.y());
|
||||
break;
|
||||
|
||||
case CenterGravity:
|
||||
case EastGravity:
|
||||
case WestGravity:
|
||||
r.setY(client.rect.y() - (frame.margin.top + frame.margin.bottom) / 2);
|
||||
break;
|
||||
|
||||
case SouthWestGravity:
|
||||
case SouthEastGravity:
|
||||
case SouthGravity:
|
||||
r.setY(client.rect.y() - frame.margin.top - frame.margin.bottom);
|
||||
break;
|
||||
|
||||
case ForgetGravity:
|
||||
case StaticGravity:
|
||||
r.setY(client.rect.y() - frame.margin.top);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* The reverse of the setGravityOffsets function. Uses the frame window's
|
||||
* position to find the window's reference point.
|
||||
* The reverse of the applyGravity function.
|
||||
*
|
||||
* Positions the Rect r according to the frame window position and
|
||||
* window gravity.
|
||||
*/
|
||||
void BlackboxWindow::restoreGravity(void) {
|
||||
// x coordinates for each gravity type
|
||||
const int x_west = frame.rect.x();
|
||||
const int x_east = frame.rect.x() + frame.inside_w - client.rect.width();
|
||||
const int x_center = frame.rect.x() -
|
||||
((client.rect.width() - frame.rect.width()) / 2);
|
||||
// y coordinates for each gravity type
|
||||
const int y_north = frame.rect.y();
|
||||
const int y_south = frame.rect.y() + frame.inside_h - client.rect.height();
|
||||
const int y_center = frame.rect.y() -
|
||||
((client.rect.height() - frame.rect.height()) / 2);
|
||||
|
||||
void BlackboxWindow::restoreGravity(Rect &r) {
|
||||
// restore horizontal window gravity
|
||||
switch (client.win_gravity) {
|
||||
default:
|
||||
case NorthWestGravity: client.rect.setPos(x_west, y_north); break;
|
||||
case NorthGravity: client.rect.setPos(x_center, y_north); break;
|
||||
case NorthEastGravity: client.rect.setPos(x_east, y_north); break;
|
||||
case SouthWestGravity: client.rect.setPos(x_west, y_south); break;
|
||||
case SouthGravity: client.rect.setPos(x_center, y_south); break;
|
||||
case SouthEastGravity: client.rect.setPos(x_east, y_south); break;
|
||||
case WestGravity: client.rect.setPos(x_west, y_center); break;
|
||||
case CenterGravity: client.rect.setPos(x_center, y_center); break;
|
||||
case EastGravity: client.rect.setPos(x_east, y_center); break;
|
||||
case NorthWestGravity:
|
||||
case SouthWestGravity:
|
||||
case WestGravity:
|
||||
r.setX(frame.rect.x());
|
||||
break;
|
||||
|
||||
case NorthGravity:
|
||||
case SouthGravity:
|
||||
case CenterGravity:
|
||||
r.setX(frame.rect.x() + (frame.margin.left + frame.margin.right) / 2);
|
||||
break;
|
||||
|
||||
case NorthEastGravity:
|
||||
case SouthEastGravity:
|
||||
case EastGravity:
|
||||
r.setX(frame.rect.x() + frame.margin.left + frame.margin.right);
|
||||
break;
|
||||
|
||||
case ForgetGravity:
|
||||
case StaticGravity:
|
||||
client.rect.setPos(frame.rect.left() + frame.margin.left,
|
||||
frame.rect.top() + frame.margin.top);
|
||||
r.setX(frame.rect.x() + frame.margin.left);
|
||||
break;
|
||||
}
|
||||
|
||||
// restore vertical window gravity
|
||||
switch (client.win_gravity) {
|
||||
default:
|
||||
case NorthWestGravity:
|
||||
case NorthEastGravity:
|
||||
case NorthGravity:
|
||||
r.setY(frame.rect.y());
|
||||
break;
|
||||
|
||||
case CenterGravity:
|
||||
case EastGravity:
|
||||
case WestGravity:
|
||||
r.setY(frame.rect.y() + (frame.margin.top + frame.margin.bottom) / 2);
|
||||
break;
|
||||
|
||||
case SouthWestGravity:
|
||||
case SouthEastGravity:
|
||||
case SouthGravity:
|
||||
r.setY(frame.rect.y() + frame.margin.top + frame.margin.bottom);
|
||||
break;
|
||||
|
||||
case ForgetGravity:
|
||||
case StaticGravity:
|
||||
r.setY(frame.rect.y() + frame.margin.top);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void BlackboxWindow::redrawLabel(void) {
|
||||
void BlackboxWindow::redrawLabel(void) const {
|
||||
if (flags.focused) {
|
||||
if (frame.flabel)
|
||||
XSetWindowBackgroundPixmap(blackbox->getXDisplay(),
|
||||
|
@ -2264,14 +2318,14 @@ void BlackboxWindow::redrawLabel(void) {
|
|||
}
|
||||
|
||||
|
||||
void BlackboxWindow::redrawAllButtons(void) {
|
||||
void BlackboxWindow::redrawAllButtons(void) const {
|
||||
if (frame.iconify_button) redrawIconifyButton(False);
|
||||
if (frame.maximize_button) redrawMaximizeButton(flags.maximized);
|
||||
if (frame.close_button) redrawCloseButton(False);
|
||||
}
|
||||
|
||||
|
||||
void BlackboxWindow::redrawIconifyButton(bool pressed) {
|
||||
void BlackboxWindow::redrawIconifyButton(bool pressed) const {
|
||||
if (! pressed) {
|
||||
if (flags.focused) {
|
||||
if (frame.fbutton)
|
||||
|
@ -2305,7 +2359,7 @@ void BlackboxWindow::redrawIconifyButton(bool pressed) {
|
|||
}
|
||||
|
||||
|
||||
void BlackboxWindow::redrawMaximizeButton(bool pressed) {
|
||||
void BlackboxWindow::redrawMaximizeButton(bool pressed) const {
|
||||
if (! pressed) {
|
||||
if (flags.focused) {
|
||||
if (frame.fbutton)
|
||||
|
@ -2341,7 +2395,7 @@ void BlackboxWindow::redrawMaximizeButton(bool pressed) {
|
|||
}
|
||||
|
||||
|
||||
void BlackboxWindow::redrawCloseButton(bool pressed) {
|
||||
void BlackboxWindow::redrawCloseButton(bool pressed) const {
|
||||
if (! pressed) {
|
||||
if (flags.focused) {
|
||||
if (frame.fbutton)
|
||||
|
@ -2556,26 +2610,29 @@ void BlackboxWindow::configureRequestEvent(const XConfigureRequestEvent *cr) {
|
|||
if (cr->window != client.window || flags.iconic)
|
||||
return;
|
||||
|
||||
int cx = frame.rect.x(), cy = frame.rect.y();
|
||||
unsigned int cw = frame.rect.width(), ch = frame.rect.height();
|
||||
|
||||
if (cr->value_mask & CWBorderWidth)
|
||||
client.old_bw = cr->border_width;
|
||||
|
||||
if (cr->value_mask & CWX)
|
||||
cx = cr->x - frame.margin.left;
|
||||
if (cr->value_mask & (CWX | CWY | CWWidth | CWHeight)) {
|
||||
Rect req = frame.rect;
|
||||
|
||||
if (cr->value_mask & (CWX | CWY)) {
|
||||
if (cr->value_mask & CWX)
|
||||
client.rect.setX(cr->x);
|
||||
if (cr->value_mask & CWY)
|
||||
cy = cr->y - frame.margin.top;
|
||||
client.rect.setY(cr->y);
|
||||
|
||||
applyGravity(req);
|
||||
}
|
||||
|
||||
if (cr->value_mask & CWWidth)
|
||||
cw = cr->width + frame.margin.left + frame.margin.right;
|
||||
req.setWidth(cr->width + frame.margin.left + frame.margin.right);
|
||||
|
||||
if (cr->value_mask & CWHeight)
|
||||
ch = cr->height + frame.margin.top + frame.margin.bottom;
|
||||
req.setHeight(cr->height + frame.margin.top + frame.margin.bottom);
|
||||
|
||||
if (frame.rect != Rect(cx, cy, cw, ch))
|
||||
configure(cx, cy, cw, ch);
|
||||
configure(req.x(), req.y(), req.width(), req.height());
|
||||
}
|
||||
|
||||
if (cr->value_mask & CWStackMode) {
|
||||
switch (cr->detail) {
|
||||
|
@ -3226,7 +3283,7 @@ void BlackboxWindow::restore(bool remap) {
|
|||
XSelectInput(blackbox->getXDisplay(), client.window, NoEventMask);
|
||||
XSelectInput(blackbox->getXDisplay(), frame.plate, NoEventMask);
|
||||
|
||||
restoreGravity();
|
||||
restoreGravity(client.rect);
|
||||
|
||||
XUnmapWindow(blackbox->getXDisplay(), frame.window);
|
||||
XUnmapWindow(blackbox->getXDisplay(), client.window);
|
||||
|
@ -3347,7 +3404,7 @@ void BlackboxWindow::changeBlackboxHints(BlackboxHints *net) {
|
|||
if (flags.shaded && ! (decorations & Decor_Titlebar))
|
||||
shade();
|
||||
|
||||
if (frame.window) {
|
||||
if (flags.visible && frame.window) {
|
||||
XMapSubwindows(blackbox->getXDisplay(), frame.window);
|
||||
XMapWindow(blackbox->getXDisplay(), frame.window);
|
||||
}
|
||||
|
@ -3476,8 +3533,18 @@ void BlackboxWindow::constrain(Corner anchor, int *pw, int *ph) {
|
|||
dh -= base_height;
|
||||
dh /= client.height_inc;
|
||||
|
||||
if (pw) *pw = dw;
|
||||
if (ph) *ph = dh;
|
||||
if (pw) {
|
||||
if (client.width_inc == 1)
|
||||
*pw = dw + base_width;
|
||||
else
|
||||
*pw = dw;
|
||||
}
|
||||
if (ph) {
|
||||
if (client.height_inc == 1)
|
||||
*ph = dh + base_height;
|
||||
else
|
||||
*ph = dh;
|
||||
}
|
||||
|
||||
dw *= client.width_inc;
|
||||
dw += base_width;
|
||||
|
|
|
@ -288,13 +288,14 @@ private:
|
|||
void destroyIconifyButton(void);
|
||||
void createMaximizeButton(void);
|
||||
void destroyMaximizeButton(void);
|
||||
void redrawLabel(void);
|
||||
void redrawAllButtons(void);
|
||||
void redrawCloseButton(bool pressed);
|
||||
void redrawIconifyButton(bool pressed);
|
||||
void redrawMaximizeButton(bool pressed);
|
||||
void restoreGravity(void);
|
||||
void setGravityOffsets(void);
|
||||
void redrawWindowFrame(void) const;
|
||||
void redrawLabel(void) const;
|
||||
void redrawAllButtons(void) const;
|
||||
void redrawCloseButton(bool pressed) const;
|
||||
void redrawIconifyButton(bool pressed) const;
|
||||
void redrawMaximizeButton(bool pressed) const;
|
||||
void applyGravity(Rect &r);
|
||||
void restoreGravity(Rect &r);
|
||||
void setAllowedActions(void);
|
||||
void setState(unsigned long new_state);
|
||||
void upsize(void);
|
||||
|
|
|
@ -114,13 +114,15 @@ void Windowmenu::itemSelected(int button, unsigned int index) {
|
|||
break;
|
||||
|
||||
case BScreen::WindowRaise: {
|
||||
Workspace *wkspc = getScreen()->getWorkspace(window->getWorkspaceNumber());
|
||||
Workspace *wkspc =
|
||||
getScreen()->getWorkspace(window->getWorkspaceNumber());
|
||||
wkspc->raiseWindow(window);
|
||||
}
|
||||
break;
|
||||
|
||||
case BScreen::WindowLower: {
|
||||
Workspace *wkspc = getScreen()->getWorkspace(window->getWorkspaceNumber());
|
||||
Workspace *wkspc =
|
||||
getScreen()->getWorkspace(window->getWorkspaceNumber());
|
||||
wkspc->lowerWindow(window);
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -1145,6 +1145,7 @@ void Blackbox::restart(const char *prog) {
|
|||
shutdown();
|
||||
|
||||
if (prog) {
|
||||
putenv(const_cast<char *>(screenList.front()->displayString().c_str()));
|
||||
execlp(prog, prog, NULL);
|
||||
perror(prog);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue