fix gravity

This commit is contained in:
simonb 2006-07-03 17:18:17 +00:00
parent 7d2f7740d1
commit 12e80f3faf
6 changed files with 130 additions and 111 deletions

View file

@ -1,6 +1,11 @@
(Format: Year/Month/Day) (Format: Year/Month/Day)
Changes for 1.0rc3: Changes for 1.0rc3:
*06/07/03: *06/07/03:
* fix+improve handling of window gravity, was very broken (Simon)
- caused (among others) windows with gravity set to get relocated
on close.
- gravity is now taken into account on style change
FbWinFrame.hh/cc Window.hh/cc Ewmh.cc
* make our default locale, init, menu, and style paths properly * make our default locale, init, menu, and style paths properly
expand PREFIX in the make install stage, so that make prefix=elsewhere expand PREFIX in the make install stage, so that make prefix=elsewhere
works properly (Simon) works properly (Simon)

View file

@ -838,7 +838,7 @@ bool Ewmh::checkClientMessage(const XClientMessageEvent &ce,
// TODO: flags // TODO: flags
int win_gravity=ce.data.l[0] & 0xFF; int win_gravity=ce.data.l[0] & 0xFF;
winclient->fbwindow()->moveResizeForClient(ce.data.l[1], ce.data.l[2], winclient->fbwindow()->moveResizeForClient(ce.data.l[1], ce.data.l[2],
ce.data.l[3], ce.data.l[4], win_gravity); ce.data.l[3], ce.data.l[4], win_gravity, winclient->old_bw);
return true; return true;
} else if (ce.message_type == m_net_restack_window) { } else if (ce.message_type == m_net_restack_window) {
#ifndef DEBUG #ifndef DEBUG

View file

@ -232,39 +232,31 @@ void FbWinFrame::shade() {
} }
void FbWinFrame::move(int x, int y, int win_gravity) { void FbWinFrame::move(int x, int y) {
moveResize(x, y, 0, 0, true, false, win_gravity); moveResize(x, y, 0, 0, true, false);
} }
void FbWinFrame::resize(unsigned int width, unsigned int height, int win_gravity) { void FbWinFrame::resize(unsigned int width, unsigned int height) {
moveResize(0, 0, width, height, false, true, win_gravity); moveResize(0, 0, width, height, false, true);
} }
// need an atomic moveresize where possible // need an atomic moveresize where possible
void FbWinFrame::moveResizeForClient(int x, int y, unsigned int width, unsigned int height, bool move, bool resize, int win_gravity) { void FbWinFrame::moveResizeForClient(int x, int y, unsigned int width, unsigned int height, bool move, bool resize, int win_gravity, unsigned int client_bw) {
// total height for frame // total height for frame
unsigned int total_height = height; if (resize) // these fns check if the elements are "on"
height += titlebarHeight() + handleHeight();
if (resize) { gravityTranslate(x, y, win_gravity, client_bw, false);
// having a titlebar = 1 extra border + titlebar height setActiveGravity(win_gravity, client_bw);
if (m_use_titlebar) moveResize(x, y, width, height, move, resize);
total_height += m_titlebar.height() + m_titlebar.borderWidth();
// having a handle = 1 extra border + handle height
if (m_use_handle)
total_height += m_handle.height() + m_handle.borderWidth();
}
moveResize(x, y, width, total_height, move, resize, win_gravity);
} }
void FbWinFrame::resizeForClient(unsigned int width, unsigned int height, int win_gravity) { void FbWinFrame::resizeForClient(unsigned int width, unsigned int height, int win_gravity, unsigned int client_bw) {
moveResizeForClient(0, 0, width, height, false, true, win_gravity); moveResizeForClient(0, 0, width, height, false, true, win_gravity, client_bw);
} }
void FbWinFrame::moveResize(int x, int y, unsigned int width, unsigned int height, bool move, bool resize, int win_gravity) { void FbWinFrame::moveResize(int x, int y, unsigned int width, unsigned int height, bool move, bool resize) {
if(win_gravity!=ForgetGravity) {
gravityTranslate(x, y, width + m_window.borderWidth()*2, height + m_window.borderWidth()*2, win_gravity, false);
}
if (move && x == window().x() && y == window().y()) if (move && x == window().x() && y == window().y())
move = false; move = false;
@ -946,6 +938,10 @@ void FbWinFrame::reconfigure() {
if (m_tab_container.empty()) if (m_tab_container.empty())
return; return;
int grav_x=0, grav_y=0;
// negate gravity
gravityTranslate(grav_x, grav_y, -m_active_gravity, m_active_orig_client_bw, false);
m_bevel = theme().bevelWidth(); m_bevel = theme().bevelWidth();
// reconfigure can't set borderwidth, as it doesn't know // reconfigure can't set borderwidth, as it doesn't know
// if it's meant to be borderless or not // if it's meant to be borderless or not
@ -1035,6 +1031,10 @@ void FbWinFrame::reconfigure() {
m_window.width(), client_height); m_window.width(), client_height);
} }
gravityTranslate(grav_x, grav_y, m_active_gravity, m_active_orig_client_bw, false);
// if the location changes, shift it
if (grav_x != 0 || grav_y != 0)
move(grav_x + x(), grav_y + y());
// render the theme // render the theme
if (isVisible()) { if (isVisible()) {
@ -1532,6 +1532,12 @@ void FbWinFrame::applyTabContainer() {
void FbWinFrame::setBorderWidth(unsigned int border_width) { void FbWinFrame::setBorderWidth(unsigned int border_width) {
int bw_changes = 0; int bw_changes = 0;
int grav_x=0, grav_y=0;
// negate gravity
gravityTranslate(grav_x, grav_y, -m_active_gravity, m_active_orig_client_bw, false);
// we need to change the size of the window // we need to change the size of the window
// if the border width changes... // if the border width changes...
if (m_use_titlebar) if (m_use_titlebar)
@ -1570,6 +1576,12 @@ void FbWinFrame::setBorderWidth(unsigned int border_width) {
if (m_tabmode == EXTERNAL) if (m_tabmode == EXTERNAL)
alignTabs(); alignTabs();
gravityTranslate(grav_x, grav_y, m_active_gravity, m_active_orig_client_bw, false);
// if the location changes, shift it
if (grav_x != 0 || grav_y != 0)
move(grav_x + x(), grav_y + y());
} }
void FbWinFrame::applyFocusLabel(FbTk::TextButton &button) { void FbWinFrame::applyFocusLabel(FbTk::TextButton &button) {
@ -1635,11 +1647,7 @@ private:
// this function translates its arguments according to win_gravity // this function translates its arguments according to win_gravity
// if win_gravity is negative, it does an inverse translation // if win_gravity is negative, it does an inverse translation
// This function should be used when a window is mapped/unmapped/pos configured // This function should be used when a window is mapped/unmapped/pos configured
void FbWinFrame::gravityTranslate(int &x, int &y, int win_gravity, bool move_frame) { void FbWinFrame::gravityTranslate(int &x, int &y, int win_gravity, unsigned int client_bw, bool move_frame) {
gravityTranslate(x, y, m_window.width(), m_window.height(), win_gravity, move_frame);
}
//use width and height given instead of the real values, allows figuring out where to place a window before doing a moveResize
void FbWinFrame::gravityTranslate(int &x, int &y, unsigned int width, unsigned int height, int win_gravity, bool move_frame) {
bool invert = false; bool invert = false;
if (win_gravity < 0) { if (win_gravity < 0) {
invert = true; invert = true;
@ -1657,6 +1665,9 @@ void FbWinFrame::gravityTranslate(int &x, int &y, unsigned int width, unsigned i
* have been if there was no frame. * have been if there was no frame.
* Hope that makes enough sense. * Hope that makes enough sense.
* *
* NOTE: the gravity calculations are INDEPENDENT of the client
* window width/height.
*
* If you get confused with the calculations, draw a picture. * If you get confused with the calculations, draw a picture.
* *
*/ */
@ -1664,60 +1675,54 @@ void FbWinFrame::gravityTranslate(int &x, int &y, unsigned int width, unsigned i
// We calculate offsets based on the gravity and frame aspects // We calculate offsets based on the gravity and frame aspects
// and at the end apply those offsets +ve or -ve depending on 'invert' // and at the end apply those offsets +ve or -ve depending on 'invert'
// These will be set to the resulting offsets for adjusting the frame position
int x_offset = 0; int x_offset = 0;
int y_offset = 0; int y_offset = 0;
/* win_gravity: placed at the reference point // These are the amount that the frame is larger than the client window
* StaticGravity the left top corner of the client window // Note that the client window's x,y is offset by it's borderWidth, which
* NorthWestGravity the left top corner of the frame window // is removed by fluxbox, so the gravity needs to account for this change
* NorthGravity the center of the frame window's top side
* NorthEastGravity the right top corner of the frame window
* EastGravity the center of the frame window's right side
* SouthEastGravity the right bottom corner of the frame window
* SouthGravity the center of the frame window's bottom side
* SouthWestGravity the left bottom corner of the frame window
* WestGravity the center of the frame window's left side
* CenterGravity the center of the frame window
*/
//vertical offset // unsigned int width_offset = 0; // no side decorations
//North Gravities don't require a vertical offset
//South Gravities
if (win_gravity==SouthWestGravity || win_gravity==SouthGravity ||
win_gravity==SouthEastGravity) {
//We start on the frame so going the full height would take us one pixel past the edge of the frame
y_offset-=height-1;
}
//vertical centering // these functions already check if the title/handle is used
if (win_gravity==WestGravity || win_gravity==CenterGravity || int height_offset = - titlebarHeight() - handleHeight();
win_gravity==EastGravity) {
y_offset-=height/2;
}
//horizontal offset int bw_diff = client_bw - m_window.borderWidth();
//West Gravities don't require a horizontal offset
//East Gravities
if (win_gravity==NorthEastGravity || win_gravity==EastGravity ||
win_gravity==SouthEastGravity ) {
//Starting on the frame so offset of one width would end up one pixel beyond the border
x_offset-=width-1;
}
//horizontal centering
if (win_gravity==NorthGravity || win_gravity==CenterGravity ||
win_gravity==SouthGravity ) {
x_offset-=width/2;
}
if( win_gravity==StaticGravity ) { // mostly no X offset, since we don't have extra frame on the sides
if (m_use_titlebar) switch (win_gravity) {
y_offset -= m_titlebar.height() + m_titlebar.borderWidth(); case NorthEastGravity:
x_offset -= m_window.borderWidth(); x_offset += bw_diff;
y_offset -= m_window.borderWidth(); case NorthGravity:
x_offset += bw_diff;
case NorthWestGravity:
// no offset, since the top point is still the same
break;
case SouthEastGravity:
x_offset += bw_diff;
case SouthGravity:
x_offset += bw_diff;
case SouthWestGravity:
// window shifted down by height of titlebar, and the handle
// since that's necessary to get the bottom of the frame
// all the way up
y_offset += 2*bw_diff + height_offset;
break;
case EastGravity:
x_offset += bw_diff;
case CenterGravity:
x_offset += bw_diff;
case WestGravity:
// these centered ones are a little more interesting
y_offset += bw_diff + height_offset/2;
break;
case StaticGravity:
x_offset += bw_diff;
y_offset += -titlebarHeight() + bw_diff;
break;
} }
if (invert) { if (invert) {
x_offset = -x_offset; x_offset = -x_offset;
y_offset = -y_offset; y_offset = -y_offset;
@ -1725,6 +1730,7 @@ void FbWinFrame::gravityTranslate(int &x, int &y, unsigned int width, unsigned i
x += x_offset; x += x_offset;
y += y_offset; y += y_offset;
if (move_frame && (x_offset != 0 || y_offset != 0)) { if (move_frame && (x_offset != 0 || y_offset != 0)) {
move(x, y); move(x, y);
} }

View file

@ -96,20 +96,20 @@ public:
inline bool isVisible() const { return m_visible; } inline bool isVisible() const { return m_visible; }
/// shade frame (ie resize to titlebar size) /// shade frame (ie resize to titlebar size)
void shade(); void shade();
void move(int x, int y, int win_gravity=ForgetGravity); void move(int x, int y);
void resize(unsigned int width, unsigned int height, int win_gravity=ForgetGravity); void resize(unsigned int width, unsigned int height);
/// resize client to specified size and resize frame to it /// resize client to specified size and resize frame to it
void resizeForClient(unsigned int width, unsigned int height, int win_gravity=ForgetGravity); void resizeForClient(unsigned int width, unsigned int height, int win_gravity=ForgetGravity, unsigned int client_bw = 0);
// for when there needs to be an atomic move+resize operation // for when there needs to be an atomic move+resize operation
void moveResizeForClient(int x, int y, void moveResizeForClient(int x, int y,
unsigned int width, unsigned int height, unsigned int width, unsigned int height,
bool move = true, bool resize = true, int win_gravity=ForgetGravity); bool move = true, bool resize = true, int win_gravity=ForgetGravity, unsigned int client_bw = 0);
// can elect to ignore move or resize (mainly for use of move/resize individual functions // can elect to ignore move or resize (mainly for use of move/resize individual functions
void moveResize(int x, int y, void moveResize(int x, int y,
unsigned int width, unsigned int height, unsigned int width, unsigned int height,
bool move = true, bool resize = true, int win_gravity=ForgetGravity); bool move = true, bool resize = true);
// move without transparency or special effects (generally when dragging) // move without transparency or special effects (generally when dragging)
void quietMoveResize(int x, int y, void quietMoveResize(int x, int y,
@ -173,9 +173,8 @@ public:
// this function translates its arguments according to win_gravity // this function translates its arguments according to win_gravity
// if win_gravity is negative, it does an inverse translation // if win_gravity is negative, it does an inverse translation
void gravityTranslate(int &x, int &y, int win_gravity, bool move_frame = false); void gravityTranslate(int &x, int &y, int win_gravity, unsigned int client_bw, bool move_frame = false);
//use width and height given instead of the real values, allows figuring out where to place a window before doing a moveResize void setActiveGravity(int gravity, unsigned int orig_client_bw) { m_active_gravity = gravity; m_active_orig_client_bw = orig_client_bw; }
void gravityTranslate(int &x, int &y, unsigned int width, unsigned int height, int win_gravity, bool move_frame = false);
void setBorderWidth(unsigned int borderW); void setBorderWidth(unsigned int borderW);
/** /**
@ -369,6 +368,10 @@ private:
TabMode m_tabmode; TabMode m_tabmode;
// last gravity that this window was *actively* placed with
int m_active_gravity;
unsigned int m_active_orig_client_bw;
bool m_need_render; bool m_need_render;
int m_button_size; ///< size for all titlebar buttons int m_button_size; ///< size for all titlebar buttons
unsigned int m_width_before_shade, ///< width before shade, so we can restore it when we unshade unsigned int m_width_before_shade, ///< width before shade, so we can restore it when we unshade

View file

@ -495,15 +495,18 @@ void FluxboxWindow::init() {
decorations.tab = false; //no tab for this window decorations.tab = false; //no tab for this window
} }
associateClientWindow(true, wattrib.x, wattrib.y, wattrib.width, wattrib.height);
if (m_client->normal_hint_flags & (PPosition|USPosition)) {
frame().gravityTranslate(wattrib.x, wattrib.y, m_client->gravity(), m_client->old_bw, false);
}
associateClientWindow(true, wattrib.x, wattrib.y, wattrib.width, wattrib.height, m_client->gravity(), m_client->old_bw);
Fluxbox::instance()->attachSignals(*this); Fluxbox::instance()->attachSignals(*this);
// this window is managed, we are now allowed to modify actual state // this window is managed, we are now allowed to modify actual state
m_initialized = true; m_initialized = true;
applyDecorations(true); applyDecorations(true);
grabButtons(); grabButtons();
@ -514,10 +517,9 @@ void FluxboxWindow::init() {
m_workspace_number = screen().currentWorkspaceID(); m_workspace_number = screen().currentWorkspaceID();
bool place_window = (m_old_pos_x == 0); bool place_window = (m_old_pos_x == 0);
if (fluxbox.isStartup() || m_client->isTransient() ||
m_client->normal_hint_flags & (PPosition|USPosition)) {
frame().gravityTranslate(wattrib.x, wattrib.y, m_client->gravity(), false); if (fluxbox.isStartup() || m_client->isTransient() ||
m_client->normal_hint_flags & (PPosition|USPosition)) {
if (! fluxbox.isStartup()) { if (! fluxbox.isStartup()) {
@ -534,10 +536,12 @@ void FluxboxWindow::init() {
place_window = false; place_window = false;
} }
/*
if (wattrib.width <= 0) if (wattrib.width <= 0)
wattrib.width = 1; wattrib.width = 1;
if (wattrib.height <= 0) if (wattrib.height <= 0)
wattrib.height = 1; wattrib.height = 1;
*/
@ -1109,17 +1113,18 @@ bool FluxboxWindow::isGroupable() const {
void FluxboxWindow::associateClientWindow(bool use_attrs, void FluxboxWindow::associateClientWindow(bool use_attrs,
int x, int y, int x, int y,
unsigned int width, unsigned int height) { unsigned int width, unsigned int height,
m_client->setBorderWidth(0); int gravity, unsigned int client_bw) {
updateTitleFromClient(*m_client); updateTitleFromClient(*m_client);
updateIconNameFromClient(*m_client); updateIconNameFromClient(*m_client);
if (use_attrs) if (use_attrs)
frame().moveResizeForClient(x, y, frame().moveResizeForClient(x, y,
width, height); width, height, gravity, client_bw);
else else
frame().resizeForClient(m_client->width(), m_client->height()); frame().resizeForClient(m_client->width(), m_client->height());
frame().setActiveGravity(m_client->gravity(), m_client->old_bw);
frame().setClientWindow(*m_client); frame().setClientWindow(*m_client);
} }
@ -1308,8 +1313,8 @@ void FluxboxWindow::updateBlackboxHintsFromClient(const WinClient &client) {
} }
} }
void FluxboxWindow::move(int x, int y, int gravity) { void FluxboxWindow::move(int x, int y) {
moveResize(x, y, frame().width(), frame().height(), gravity); moveResize(x, y, frame().width(), frame().height());
} }
void FluxboxWindow::resize(unsigned int width, unsigned int height) { void FluxboxWindow::resize(unsigned int width, unsigned int height) {
@ -1325,16 +1330,12 @@ void FluxboxWindow::resize(unsigned int width, unsigned int height) {
// send_event is just an override // send_event is just an override
void FluxboxWindow::moveResize(int new_x, int new_y, void FluxboxWindow::moveResize(int new_x, int new_y,
unsigned int new_width, unsigned int new_height, int gravity, bool send_event) { unsigned int new_width, unsigned int new_height, bool send_event) {
// magic to detect if moved during initialisation // magic to detect if moved during initialisation
if (!isInitialized()) if (!isInitialized())
m_old_pos_x = 1; m_old_pos_x = 1;
if (gravity != ForgetGravity) {
frame().gravityTranslate(new_x, new_y, gravity, false);
}
send_event = send_event || (frame().x() != new_x || frame().y() != new_y); send_event = send_event || (frame().x() != new_x || frame().y() != new_y);
if (new_width != frame().width() || new_height != frame().height()) { if (new_width != frame().width() || new_height != frame().height()) {
@ -1370,12 +1371,12 @@ void FluxboxWindow::moveResize(int new_x, int new_y,
} }
void FluxboxWindow::moveResizeForClient(int new_x, int new_y, void FluxboxWindow::moveResizeForClient(int new_x, int new_y,
unsigned int new_width, unsigned int new_height, int gravity) { unsigned int new_width, unsigned int new_height, int gravity, unsigned int client_bw) {
// magic to detect if moved during initialisation // magic to detect if moved during initialisation
if (!isInitialized()) if (!isInitialized())
m_old_pos_x = 1; m_old_pos_x = 1;
frame().moveResizeForClient(new_x, new_y, new_width, new_height, true, true, gravity); frame().moveResizeForClient(new_x, new_y, new_width, new_height, true, true, gravity, client_bw);
setFocusFlag(focused); setFocusFlag(focused);
shaded = false; shaded = false;
sendConfigureNotify(); sendConfigureNotify();
@ -2660,13 +2661,16 @@ void FluxboxWindow::configureRequestEvent(XConfigureRequestEvent &cr) {
(cr.value_mask & CWY)) { (cr.value_mask & CWY)) {
cx = cr.x; cx = cr.x;
cy = cr.y; cy = cr.y;
frame().gravityTranslate(cx, cy, client->gravity(), false); frame().gravityTranslate(cx, cy, client->gravity(), client->old_bw, false);
frame().setActiveGravity(client->gravity(), client->old_bw);
} else if (cr.value_mask & CWX) { } else if (cr.value_mask & CWX) {
cx = cr.x; cx = cr.x;
frame().gravityTranslate(cx, ignore, client->gravity(), false); frame().gravityTranslate(cx, ignore, client->gravity(), client->old_bw, false);
frame().setActiveGravity(client->gravity(), client->old_bw);
} else if (cr.value_mask & CWY) { } else if (cr.value_mask & CWY) {
cy = cr.y; cy = cr.y;
frame().gravityTranslate(ignore, cy, client->gravity(), false); frame().gravityTranslate(ignore, cy, client->gravity(), client->old_bw, false);
frame().setActiveGravity(client->gravity(), client->old_bw);
} }
if (cr.value_mask & CWWidth) if (cr.value_mask & CWWidth)
@ -3160,21 +3164,22 @@ void FluxboxWindow::setDecoration(Decoration decoration, bool apply) {
void FluxboxWindow::applyDecorations(bool initial) { void FluxboxWindow::applyDecorations(bool initial) {
frame().clientArea().setBorderWidth(0); // client area bordered by other things frame().clientArea().setBorderWidth(0); // client area bordered by other things
int grav_x=0, grav_y=0;
// negate gravity
frame().gravityTranslate(grav_x, grav_y, -m_client->gravity(), false);
unsigned int border_width = 0; unsigned int border_width = 0;
if (decorations.border) if (decorations.border)
border_width = frame().theme().border().width(); border_width = frame().theme().border().width();
bool client_move = false; bool client_move = false;
// borderWidth setting handles its own gravity
if (initial || frame().window().borderWidth() != border_width) { if (initial || frame().window().borderWidth() != border_width) {
client_move = true; client_move = true;
frame().setBorderWidth(border_width); frame().setBorderWidth(border_width);
} }
int grav_x=0, grav_y=0;
// negate gravity
frame().gravityTranslate(grav_x, grav_y, -m_client->gravity(), m_client->old_bw, false);
// tab deocration only affects if we're external // tab deocration only affects if we're external
// must do before the setTabMode in case it goes // must do before the setTabMode in case it goes
// to external and is meant to be hidden // to external and is meant to be hidden
@ -3202,7 +3207,7 @@ void FluxboxWindow::applyDecorations(bool initial) {
client_move |= frame().hideHandle(); client_move |= frame().hideHandle();
// apply gravity once more // apply gravity once more
frame().gravityTranslate(grav_x, grav_y, m_client->gravity(), false); frame().gravityTranslate(grav_x, grav_y, m_client->gravity(), m_client->old_bw, false);
// if the location changes, shift it // if the location changes, shift it
if (grav_x != 0 || grav_y != 0) { if (grav_x != 0 || grav_y != 0) {
@ -3337,7 +3342,7 @@ void FluxboxWindow::stopMoving(bool interrupted) {
} }
fluxbox->ungrab(); fluxbox->ungrab();
} else if (!interrupted) { } else if (!interrupted) {
moveResize(frame().x(), frame().y(), frame().width(), frame().height(), ForgetGravity, true); moveResize(frame().x(), frame().y(), frame().width(), frame().height(), true);
frame().notifyMoved(true); frame().notifyMoved(true);
} }
@ -3680,7 +3685,7 @@ void FluxboxWindow::restore(WinClient *client, bool remap) {
client->setEventMask(NoEventMask); client->setEventMask(NoEventMask);
int wx = frame().x(), wy = frame().y(); // not actually used here int wx = frame().x(), wy = frame().y(); // not actually used here
frame().gravityTranslate(wx, wy, -client->gravity(), true); // negative to invert frame().gravityTranslate(wx, wy, -client->gravity(), client->old_bw, true); // negative to invert
// Why was this hide done? It broke vncviewer (and mplayer?), // Why was this hide done? It broke vncviewer (and mplayer?),
// since it would reparent when going fullscreen. // since it would reparent when going fullscreen.

View file

@ -240,13 +240,13 @@ public:
void restore(WinClient *client, bool remap); void restore(WinClient *client, bool remap);
void restore(bool remap); void restore(bool remap);
/// move frame to x, y /// move frame to x, y
void move(int x, int y, int gravity = ForgetGravity); void move(int x, int y);
/// resize frame to width, height /// resize frame to width, height
void resize(unsigned int width, unsigned int height); void resize(unsigned int width, unsigned int height);
/// move and resize frame to pox x,y and size width, height /// move and resize frame to pox x,y and size width, height
void moveResize(int x, int y, unsigned int width, unsigned int height, int gravity = ForgetGravity, bool send_event = false); void moveResize(int x, int y, unsigned int width, unsigned int height, bool send_event = false);
/// move to pos x,y and resize client window to size width, height /// move to pos x,y and resize client window to size width, height
void moveResizeForClient(int x, int y, unsigned int width, unsigned int height, int gravity = ForgetGravity); void moveResizeForClient(int x, int y, unsigned int width, unsigned int height, int gravity = ForgetGravity, unsigned int client_bw = 0);
void setWorkspace(int n); void setWorkspace(int n);
void changeBlackboxHints(const BlackboxHints &bh); void changeBlackboxHints(const BlackboxHints &bh);
void updateFunctions(); void updateFunctions();
@ -448,7 +448,7 @@ private:
void updateBlackboxHintsFromClient(const WinClient &client); void updateBlackboxHintsFromClient(const WinClient &client);
void updateRememberStateFromClient(WinClient &client); void updateRememberStateFromClient(WinClient &client);
void saveBlackboxAttribs(); void saveBlackboxAttribs();
void associateClientWindow(bool use_attrs = false, int x = 0, int y = 0, unsigned int width = 1, unsigned int height = 1); void associateClientWindow(bool use_attrs = false, int x = 0, int y = 0, unsigned int width = 1, unsigned int height = 1, int gravity = ForgetGravity, unsigned int client_bw = 0);
void setState(unsigned long stateval, bool setting_up); void setState(unsigned long stateval, bool setting_up);