all repos — openbox @ d94e8c506850bc8a74ebc7b2c63e8ad242242faa

openbox fork - make it a bit more like ryudo

stab #3. window-to-window works. window-to-screen doesnt
Dana Jansens danakj@orodu.net
commit

d94e8c506850bc8a74ebc7b2c63e8ad242242faa

parent

6fd25435889c33a627c181afca82361f1e901a8f

1 files changed, 18 insertions(+), 7 deletions(-)

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

@@ -3129,22 +3129,33 @@ for (it = rectlist.begin(); it != end; ++it) {

bool snapped = False; const Rect &winrect = *it; + + // if the window is already over top of this snap target, then + // resistance is futile, so just ignore it + if (screen->doOpaqueMove()) { + if (winrect.intersects(frame.rect)) + continue; + } else { + if (winrect.intersects(frame.changing)) + continue; + } + int dleft = wright - winrect.left(), - dright = wleft - winrect.right(), + dright = winrect.right() - wleft, dtop = wbottom - winrect.top(), - dbottom = wtop - winrect.bottom(); + dbottom = winrect.bottom() - wtop; // if the windows are in the same plane vertically if (wtop >= (signed)(winrect.y() - frame.rect.height() + 1) && wtop < (signed)(winrect.y() + winrect.height() - 1)) { // snap left of other window? - if (dleft > 0 && dleft < resistance_size && dleft < dright) { + if (dleft >= 0 && dleft < resistance_size) { dx = winrect.left() - frame.rect.width(); snapped = True; } // snap right of other window? - else if (dright > 0 && dright < resistance_size) { + else if (dright >= 0 && dright < resistance_size) { dx = winrect.right() + 1; snapped = True; }

@@ -3169,7 +3180,7 @@ if (wleft >= (signed)(winrect.x() - frame.rect.width() + 1) &&

wleft < (signed)(winrect.x() + winrect.width() - 1)) { // snap top of other window? - if (dtop > 0 && dtop < resistance_size && dtop < dbottom) { + if (dtop >= 0 && dtop < resistance_size) { dy = winrect.top() - frame.rect.height(); snapped = True; }

@@ -3223,14 +3234,14 @@ dtop = wtop - srect.top(),

dbottom = wbottom - srect.bottom(); // snap left? - if (dleft > 0 && dleft < resistance_size && dleft > dright) + if (dleft > 0 && dleft < resistance_size) dx = srect.left(); // snap right? else if (dright > 0 && dright < resistance_size) dx = srect.right() - frame.rect.width() + 1; // snap top? - if (dtop > 0 && dtop < resistance_size && dtop > dbottom) + if (dtop > 0 && dtop < resistance_size) dy = srect.top(); // snap bottom? else if (dbottom > 0 && dbottom < resistance_size)