all repos — openbox @ 578a5cc980dd39430fe803a4ca9719075e78e986

openbox fork - make it a bit more like ryudo

make fully max'd windows properly snap
Dana Jansens danakj@orodu.net
commit

578a5cc980dd39430fe803a4ca9719075e78e986

parent

b2e9af88862bc2c084c542fdf5cbfb5049cca1fd

2 files changed, 18 insertions(+), 14 deletions(-)

jump to
M src/Window.ccsrc/Window.cc

@@ -2891,17 +2891,17 @@ dtop = std::abs(wtop - srect.top()),

dbottom = std::abs(wbottom - srect.bottom()); // snap left? - if (dleft < snap_distance && dleft < dright) + if (dleft < snap_distance && dleft <= dright) dx = srect.left(); // snap right? - else if (dright < snap_distance && dright < dleft) + else if (dright < snap_distance) dx = srect.right() - frame.rect.width() + 1; // snap top? - if (dtop < snap_distance && dtop < dbottom) + if (dtop < snap_distance && dtop <= dbottom) dy = srect.top(); // snap bottom? - else if (dbottom < snap_distance && dbottom < dtop) + else if (dbottom < snap_distance) dy = srect.bottom() - frame.rect.height() + 1; srect = screen->getRect(); // now get the full screen

@@ -2912,17 +2912,17 @@ dtop = std::abs(wtop - srect.top()),

dbottom = std::abs(wbottom - srect.bottom()); // snap left? - if (dleft < snap_distance && dleft < dright) + if (dleft < snap_distance && dleft <= dright) dx = srect.left(); // snap right? - else if (dright < snap_distance && dright < dleft) + else if (dright < snap_distance) dx = srect.right() - frame.rect.width() + 1; // snap top? - if (dtop < snap_distance && dtop < dbottom) + if (dtop < snap_distance && dtop <= dbottom) dy = srect.top(); // snap bottom? - else if (dbottom < snap_distance && dbottom < dtop) + else if (dbottom < snap_distance) dy = srect.bottom() - frame.rect.height() + 1; }
M src/XAtom.ccsrc/XAtom.cc

@@ -357,12 +357,14 @@ unsigned char *c_val; // value alloc'd with c malloc

Atom ret_type; int ret_size; unsigned long ret_bytes; + int result; const unsigned long maxread = nelements; // try get the first element - XGetWindowProperty(_display, win, atom, 0l, 1l, False, AnyPropertyType, - &ret_type, &ret_size, &nelements, &ret_bytes, &c_val); - if (ret_type == None || nelements < 1) - // the property does not exist on the window or is empty + result = XGetWindowProperty(_display, win, atom, 0l, 1l, False, + AnyPropertyType, &ret_type, &ret_size, + &nelements, &ret_bytes, &c_val); + if (result != Success || ret_type == None || nelements < 1) + // an error occured, the property does not exist on the window, or is empty return false; if (ret_type != type || ret_size != size) { // wrong data in property

@@ -384,8 +386,10 @@ // value. The last + 1 is the first long that we retrieved above.

int remain = (ret_bytes - 1)/sizeof(long) + 1 + 1; if (remain > size/8 * (signed)maxread) // dont get more than the max remain = size/8 * (signed)maxread; - XGetWindowProperty(_display, win, atom, 0l, remain, False, type, &ret_type, - &ret_size, &nelements, &ret_bytes, &c_val); + result = XGetWindowProperty(_display, win, atom, 0l, remain, False, type, + &ret_type, &ret_size, &nelements, &ret_bytes, + &c_val); + assert(result == Success); assert(ret_bytes == 0); *value = new unsigned char[nelements * size/8 + 1]; memcpy(*value, c_val, nelements * size/8 + 1);