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