sync with bb. mostly cleanups in Window.cc

This commit is contained in:
Dana Jansens 2002-06-30 09:53:52 +00:00
parent 18064df19f
commit ffa4c7f341
8 changed files with 218 additions and 118 deletions

View file

@ -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;

View file

@ -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;

View file

@ -70,6 +70,8 @@ public:
Iconify, Iconify,
Close, Close,
ShowWindowMenu, ShowWindowMenu,
NextWorkspace,
PrevWorkspace,
BeginMove, BeginMove,
BeginResizeUL, BeginResizeUL,

View file

@ -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) {
ret = (char *) text_prop.value; if (text_prop.encoding == XA_STRING) {
if (text_prop.encoding != XA_STRING) { ret = (char *) text_prop.value;
} else {
text_prop.nitems = strlen((char *) text_prop.value); text_prop.nitems = strlen((char *) text_prop.value);
char **list; char **list;

View file

@ -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()))
@ -315,7 +314,7 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
if (flags.shaded) { if (flags.shaded) {
flags.shaded = False; flags.shaded = False;
shade(); shade();
/* /*
Because the iconic'ness of shaded windows is lost, we need to set the Because the iconic'ness of shaded windows is lost, we need to set the
state to NormalState so that shaded windows on other workspaces will not state to NormalState so that shaded windows on other workspaces will not
@ -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 & CWY) if (cr->value_mask & (CWX | CWY)) {
cy = cr->y - frame.margin.top; if (cr->value_mask & CWX)
client.rect.setX(cr->x);
if (cr->value_mask & CWY)
client.rect.setY(cr->y);
if (cr->value_mask & CWWidth) applyGravity(req);
cw = cr->width + frame.margin.left + frame.margin.right; }
if (cr->value_mask & CWHeight) if (cr->value_mask & CWWidth)
ch = cr->height + frame.margin.top + frame.margin.bottom; req.setWidth(cr->width + frame.margin.left + frame.margin.right);
if (frame.rect != Rect(cx, cy, cw, ch)) if (cr->value_mask & CWHeight)
configure(cx, cy, cw, ch); req.setHeight(cr->height + frame.margin.top + frame.margin.bottom);
configure(req.x(), req.y(), req.width(), req.height());
}
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;

View file

@ -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);

View file

@ -92,7 +92,7 @@ void Windowmenu::show(void) {
void Windowmenu::itemSelected(int button, unsigned int index) { void Windowmenu::itemSelected(int button, unsigned int index) {
if (button != 1) if (button != 1)
return; return;
BasemenuItem *item = find(index); BasemenuItem *item = find(index);
hide(); hide();
@ -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;

View file

@ -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);
} }