X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FWindow.cc;h=47809ea900240747bb6411324ab9526f77b08965;hb=c5c5a80c7e9146e0c53f866c1ddbc2c352f4dcea;hp=be1ddb20b5eaf183450e9031a743cb3a8950e18c;hpb=734a96739d92c772fa48e2fb09e3fda0e3a8c606;p=chaz%2Fopenbox diff --git a/src/Window.cc b/src/Window.cc index be1ddb20..47809ea9 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -75,6 +75,7 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) { blackbox = b; client.window = w; screen = s; + xatom = blackbox->getXAtom(); if (! validateClient()) { delete this; @@ -1758,14 +1759,10 @@ void BlackboxWindow::setState(unsigned long new_state) { unsigned long state[2]; state[0] = current_state; state[1] = None; - XChangeProperty(blackbox->getXDisplay(), client.window, - blackbox->getWMStateAtom(), blackbox->getWMStateAtom(), 32, - PropModeReplace, (unsigned char *) state, 2); - - XChangeProperty(blackbox->getXDisplay(), client.window, - blackbox->getBlackboxAttributesAtom(), - blackbox->getBlackboxAttributesAtom(), 32, PropModeReplace, - (unsigned char *) &blackbox_attrib, + xatom->setValue(client.window, XAtom::wm_state, XAtom::wm_state, state, 2); + + xatom->setValue(client.window, XAtom::blackbox_attributes, + XAtom::blackbox_attributes, (unsigned long *)&blackbox_attrib, PropBlackboxAttributesElements); } @@ -1775,27 +1772,16 @@ bool BlackboxWindow::getState(void) { Atom atom_return; bool ret = False; - int foo; - unsigned long *state, ulfoo, nitems; - - if ((XGetWindowProperty(blackbox->getXDisplay(), client.window, - blackbox->getWMStateAtom(), - 0l, 2l, False, blackbox->getWMStateAtom(), - &atom_return, &foo, &nitems, &ulfoo, - (unsigned char **) &state) != Success) || - (! state)) { - return False; - } - - if (nitems >= 1) { - current_state = static_cast(state[0]); + unsigned long *state, nitems; - ret = True; - } + if (! xatom->getValue(client.window, XAtom::wm_state, XAtom::wm_state, nitems, + &state)) + return False; - XFree((void *) state); + current_state = static_cast(state[0]); + delete state; - return ret; + return True; } @@ -1881,11 +1867,13 @@ 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.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: @@ -1916,13 +1904,13 @@ 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() + (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: @@ -2381,7 +2369,7 @@ void BlackboxWindow::buttonPressEvent(XButtonEvent *be) { // 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(windowmenu->getWidth())) mx = frame.rect.right() - windowmenu->getWidth() - frame.border_w + 1; @@ -2552,23 +2540,23 @@ void BlackboxWindow::motionNotifyEvent(XMotionEvent *me) { // snap left? if (dleft < snap_distance && dleft <= dright) { dx = winrect.left() - frame.rect.width(); - break; + continue; } // snap right? else if (dright < snap_distance) { dx = winrect.right() + 1; - break; + continue; } // snap top? if (dtop < snap_distance && dtop <= dbottom) { dy = winrect.top() - frame.rect.height(); - break; + continue; } // snap bottom? else if (dbottom < snap_distance) { dy = winrect.bottom() + 1; - break; + continue; } }