// X error handler to handle any and all X errors while the application is
// running
static bool internal_error = False;
-static Window last_bad_window = None;
BaseDisplay *base_display;
-#ifdef DEBUG
static int handleXErrors(Display *d, XErrorEvent *e) {
+#ifdef DEBUG
char errtxt[128];
XGetErrorText(d, e->error_code, errtxt, 128);
base_display->getApplicationName(), errtxt, e->error_code,
e->request_code, e->minor_code, e->resourceid);
#else
-static int handleXErrors(Display *, XErrorEvent *e) {
+ // shutup gcc
+ (void) d;
+ (void) e;
#endif // DEBUG
- if (e->error_code == BadWindow) last_bad_window = e->resourceid;
if (internal_error) abort();
return(False);
application_name = app_name;
run_state = STARTUP;
- last_bad_window = None;
::base_display = this;
if (XPending(display)) {
XEvent e;
XNextEvent(display, &e);
-
- if (last_bad_window != None && e.xany.window == last_bad_window)
- continue;
-
- last_bad_window = None;
process_event(&e);
} else {
fd_set rfds;
// 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.right() - (frame.rect.width()/2) + 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.bottom() - (frame.rect.height()/2) + 1;
+ const int y_center = client.rect.top() +
+ ((client.rect.height() - frame.rect.height()) / 2);
switch (client.win_gravity) {
default:
// 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() + (frame.rect.width()/2) -
- 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() + (frame.rect.height()/2) -
- client.rect.height();
+ const int y_center = frame.rect.y() -
+ ((client.rect.height() - frame.rect.height()) / 2);
switch(client.win_gravity) {
default:
// snap the window menu into a corner if necessary - we check the
// position of the menu with the coordinates of the client to
// make the comparisions easier.
- // ### this needs some work!
+ // XXX: this needs some work!
if (mx > client.rect.right() -
static_cast<signed>(windowmenu->getWidth()))
mx = frame.rect.right() - windowmenu->getWidth() - frame.border_w + 1;
++r;
} else {
changeItemLabel(i, getScreen()->getWorkspace(i)->getName());
+ setItemEnabled(i, i != getScreen()->getCurrentWorkspaceID());
}
- setItemEnabled(i, i != getScreen()->getCurrentWorkspaceID());
}
Basemenu::update();
spaces.push_back(availableArea); //initially the entire screen is free
//Find Free Spaces
- BlackboxWindowList::iterator wit = windowList.begin(),
- end = windowList.end();
+ BlackboxWindowList::const_iterator wit = windowList.begin(),
+ end = windowList.end();
Rect tmp;
for (; wit != end; ++wit) {
const BlackboxWindow* const curr = *wit;
+
+ if (curr->isShaded()) continue;
+
tmp.setRect(curr->frameRect().x(), curr->frameRect().y(),
curr->frameRect().width() + screen->getBorderWidth(),
curr->frameRect().height() + screen->getBorderWidth());