summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2002-06-07 00:24:02 +0000
committerDana Jansens <danakj@orodu.net>2002-06-07 00:24:02 +0000
commite90fafd2fd907a81bdc60ad8b6de35fc1595cdff (patch)
tree38e3e6394d5aab654ad283e2d7351000c57263af /src
parentaad50046de0b1971f869ee95a0f80267c74a1fd3 (diff)
fix off-by-ones in window-to-window snapping. move the property from the blackbox class to the screen class.
Diffstat (limited to 'src')
-rw-r--r--src/Configmenu.cc45
-rw-r--r--src/Screen.cc24
-rw-r--r--src/Screen.hh10
-rw-r--r--src/Window.cc76
-rw-r--r--src/blackbox.cc22
-rw-r--r--src/blackbox.hh9
6 files changed, 87 insertions, 99 deletions
diff --git a/src/Configmenu.cc b/src/Configmenu.cc
index 7bd90ef2..3a8a6e45 100644
--- a/src/Configmenu.cc
+++ b/src/Configmenu.cc
@@ -70,10 +70,10 @@ void Configmenu::setValues(void) {
setItemSelected(4, getScreen()->doFullMax());
setItemSelected(5, getScreen()->doFocusNew());
setItemSelected(6, getScreen()->doFocusLast());
- setItemSelected(7, getScreen()->getBlackbox()->getWindowToWindowSnap());
+ setItemSelected(7, getScreen()->getWindowToWindowSnap());
- setItemSelected(8, getScreen()->getBlackbox()->getWindowCornerSnap());
- setItemEnabled(8, getScreen()->getBlackbox()->getWindowToWindowSnap());
+ setItemSelected(8, getScreen()->getWindowCornerSnap());
+ setItemEnabled(8, getScreen()->getWindowToWindowSnap());
setItemSelected(9, getScreen()->doHideToolbar());
}
@@ -94,58 +94,47 @@ void Configmenu::itemSelected(int button, unsigned int index) {
return;
switch(item->function()) {
- case 1: { // dither
+ case 1: // dither
getScreen()->saveImageDither(! getScreen()->doImageDither());
setItemSelected(index, getScreen()->doImageDither());
break;
- }
- case 2: { // opaque move
+ case 2: // opaque move
getScreen()->saveOpaqueMove(! getScreen()->doOpaqueMove());
setItemSelected(index, getScreen()->doOpaqueMove());
break;
- }
- case 3: { // full maximization
+ case 3: // full maximization
getScreen()->saveFullMax(! getScreen()->doFullMax());
setItemSelected(index, getScreen()->doFullMax());
break;
- }
- case 4: { // focus new windows
+
+ case 4: // focus new windows
getScreen()->saveFocusNew(! getScreen()->doFocusNew());
setItemSelected(index, getScreen()->doFocusNew());
break;
- }
- case 5: { // focus last window on workspace
+ case 5: // focus last window on workspace
getScreen()->saveFocusLast(! getScreen()->doFocusLast());
setItemSelected(index, getScreen()->doFocusLast());
break;
- }
- case 6: { // window-to-window snapping
- getScreen()->getBlackbox()->
- saveWindowToWindowSnap(! getScreen()->getBlackbox()->
- getWindowToWindowSnap());
- setItemSelected(index, getScreen()->getBlackbox()->getWindowToWindowSnap());
- setItemEnabled(index + 1,
- getScreen()->getBlackbox()->getWindowToWindowSnap());
+ case 6: // window-to-window snapping
+ getScreen()->saveWindowToWindowSnap(! getScreen()->getWindowToWindowSnap());
+ setItemSelected(index, getScreen()->getWindowToWindowSnap());
+ setItemEnabled(index + 1, getScreen()->getWindowToWindowSnap());
break;
- }
- case 7: { // window corner snapping
- getScreen()->getBlackbox()->
- saveWindowCornerSnap(! getScreen()->getBlackbox()->getWindowCornerSnap());
- setItemSelected(index, getScreen()->getBlackbox()->getWindowCornerSnap());
+ case 7: // window corner snapping
+ getScreen()->saveWindowCornerSnap(! getScreen()->getWindowCornerSnap());
+ setItemSelected(index, getScreen()->getWindowCornerSnap());
break;
- }
- case 8: { // hide toolbar
+ case 8: // hide toolbar
getScreen()->saveHideToolbar(! getScreen()->doHideToolbar());
setItemSelected(index, getScreen()->doHideToolbar());
break;
}
- } // switch
}
diff --git a/src/Screen.cc b/src/Screen.cc
index 512475c8..ba394bc9 100644
--- a/src/Screen.cc
+++ b/src/Screen.cc
@@ -424,6 +424,20 @@ void BScreen::saveHideToolbar(bool h) {
}
+void BScreen::saveWindowToWindowSnap(bool s) {
+ resource.window_to_window_snap = s;
+ config->setValue(screenstr + "windowToWindowSnap",
+ resource.window_to_window_snap);
+}
+
+
+void BScreen::saveWindowCornerSnap(bool s) {
+ resource.window_corner_snap = s;
+ config->setValue(screenstr + "windowCornerSnap",
+ resource.window_corner_snap);
+}
+
+
void BScreen::saveWorkspaces(unsigned int w) {
resource.workspaces = w;
config->setValue(screenstr + "workspaces", resource.workspaces);
@@ -510,6 +524,8 @@ void BScreen::save_rc(void) {
saveFocusNew(resource.focus_new);
saveFocusLast(resource.focus_last);
saveHideToolbar(resource.hide_toolbar);
+ saveWindowToWindowSnap(resource.window_to_window_snap);
+ saveWindowCornerSnap(resource.window_corner_snap);
saveWorkspaces(resource.workspaces);
savePlacementPolicy(resource.placement_policy);
saveEdgeSnapThreshold(resource.edge_snap_threshold);
@@ -549,6 +565,14 @@ void BScreen::load_rc(void) {
if (! config->getValue(screenstr + "hideToolbar", resource.hide_toolbar))
resource.hide_toolbar = false;
+ if (! config->getValue(screenstr + "windowToWindowSnap",
+ resource.window_to_window_snap))
+ resource.window_to_window_snap = true;
+
+ if (! config->getValue(screenstr + "windowCornerSnap",
+ resource.window_corner_snap))
+ resource.window_corner_snap = true;
+
if (! config->getValue(screenstr + "imageDither", b))
b = true;
image_control->setDither(b);
diff --git a/src/Screen.hh b/src/Screen.hh
index c044200c..44199b34 100644
--- a/src/Screen.hh
+++ b/src/Screen.hh
@@ -152,8 +152,8 @@ private:
MenuStyle mstyle;
bool sloppy_focus, auto_raise, auto_edge_balance, ordered_dither,
- opaque_move, full_max, focus_new, focus_last, click_raise,
- hide_toolbar;
+ opaque_move, full_max, focus_new, focus_last, click_raise,
+ hide_toolbar, window_to_window_snap, window_corner_snap;
BColor border_color;
unsigned int workspaces;
@@ -216,6 +216,10 @@ public:
inline bool doFocusNew(void) const { return resource.focus_new; }
inline bool doFocusLast(void) const { return resource.focus_last; }
inline bool doHideToolbar(void) const { return resource.hide_toolbar; }
+ inline bool getWindowToWindowSnap(void) const
+ { return resource.window_to_window_snap; }
+ inline bool getWindowCornerSnap(void) const
+ { return resource.window_corner_snap; }
inline const GC &getOpGC(void) const { return opGC; }
@@ -273,6 +277,8 @@ public:
void saveFocusNew(bool f);
void saveFocusLast(bool f);
void saveHideToolbar(bool h);
+ void saveWindowToWindowSnap(bool s);
+ void saveWindowCornerSnap(bool s);
inline void iconUpdate(void) { iconmenu->update(); }
#ifdef HAVE_STRFTIME
diff --git a/src/Window.cc b/src/Window.cc
index 2fe0928f..417e15ac 100644
--- a/src/Window.cc
+++ b/src/Window.cc
@@ -2524,7 +2524,7 @@ void BlackboxWindow::motionNotifyEvent(XMotionEvent *me) {
Workspace *w = screen->getWorkspace(getWorkspaceNumber());
assert(w);
- if (blackbox->getWindowToWindowSnap()) {
+ if (screen->getWindowToWindowSnap()) {
// try snap to another window
for (unsigned int i = 0, c = w->getCount(); i < c; ++i) {
BlackboxWindow *snapwin = w->getWindow(i);
@@ -2537,51 +2537,18 @@ void BlackboxWindow::motionNotifyEvent(XMotionEvent *me) {
dtop = std::abs(wbottom - winrect.top()),
dbottom = std::abs(wtop - winrect.bottom());
- // snap left of other window?
- if (dleft < snap_distance && dleft <= dright) {
- dx = winrect.left() - frame.rect.width();
-
- if (blackbox->getWindowCornerSnap()) {
- // try corner-snap to its other sides
- dtop = std::abs(wtop - winrect.top());
- dbottom = std::abs(wbottom - winrect.bottom());
- if (dtop < snap_distance && dtop <= dbottom)
- dy = winrect.top();
- else if (dbottom < snap_distance)
- dy = winrect.bottom() - frame.rect.height();
- }
-
- continue;
- }
- // snap right of other window?
- else if (dright < snap_distance) {
- dx = winrect.right() + 1;
-
- if (blackbox->getWindowCornerSnap()) {
- // try corner-snap to its other sides
- dtop = std::abs(wtop - winrect.top());
- dbottom = std::abs(wbottom - winrect.bottom());
- if (dtop < snap_distance && dtop <= dbottom)
- dy = winrect.top();
- else if (dbottom < snap_distance)
- dy = winrect.bottom() - frame.rect.height();
- }
-
- continue;
- }
-
// snap top of other window?
if (dtop < snap_distance && dtop <= dbottom) {
dy = winrect.top() - frame.rect.height();
- if (blackbox->getWindowCornerSnap()) {
+ if (screen->getWindowCornerSnap()) {
// try corner-snap to its other sides
dleft = std::abs(wleft - winrect.left());
dright = std::abs(wright - winrect.right());
if (dleft < snap_distance && dleft <= dright)
dx = winrect.left();
else if (dright < snap_distance)
- dx = winrect.right() - frame.rect.width();
+ dx = winrect.right() - frame.rect.width() + 1;
}
continue;
@@ -2590,14 +2557,47 @@ void BlackboxWindow::motionNotifyEvent(XMotionEvent *me) {
else if (dbottom < snap_distance) {
dy = winrect.bottom() + 1;
- if (blackbox->getWindowCornerSnap()) {
+ if (screen->getWindowCornerSnap()) {
// try corner-snap to its other sides
dleft = std::abs(wleft - winrect.left());
dright = std::abs(wright - winrect.right());
if (dleft < snap_distance && dleft <= dright)
dx = winrect.left();
else if (dright < snap_distance)
- dx = winrect.right() - frame.rect.width();
+ dx = winrect.right() - frame.rect.width() + 1;
+ }
+
+ continue;
+ }
+
+ // snap left of other window?
+ if (dleft < snap_distance && dleft <= dright) {
+ dx = winrect.left() - frame.rect.width();
+
+ if (screen->getWindowCornerSnap()) {
+ // try corner-snap to its other sides
+ dtop = std::abs(wtop - winrect.top());
+ dbottom = std::abs(wbottom - winrect.bottom());
+ if (dtop < snap_distance && dtop <= dbottom)
+ dy = winrect.top();
+ else if (dbottom < snap_distance)
+ dy = winrect.bottom() - frame.rect.height() + 1;
+ }
+
+ continue;
+ }
+ // snap right of other window?
+ else if (dright < snap_distance) {
+ dx = winrect.right() + 1;
+
+ if (screen->getWindowCornerSnap()) {
+ // try corner-snap to its other sides
+ dtop = std::abs(wtop - winrect.top());
+ dbottom = std::abs(wbottom - winrect.bottom());
+ if (dtop < snap_distance && dtop <= dbottom)
+ dy = winrect.top();
+ else if (dbottom < snap_distance)
+ dy = winrect.bottom() - frame.rect.height() + 1;
}
continue;
diff --git a/src/blackbox.cc b/src/blackbox.cc
index 118a17bc..56782248 100644
--- a/src/blackbox.cc
+++ b/src/blackbox.cc
@@ -895,18 +895,6 @@ void Blackbox::shutdown(void) {
}
-void Blackbox::saveWindowToWindowSnap(bool s) {
- resource.window_to_window_snap = s;
- config.setValue("session.windowToWindowSnap", resource.window_to_window_snap);
-}
-
-
-void Blackbox::saveWindowCornerSnap(bool s) {
- resource.window_corner_snap = s;
- config.setValue("session.windowCornerSnap", resource.window_corner_snap);
-}
-
-
/*
* Save all values as they are so that the defaults will be written to the rc
* file
@@ -924,8 +912,6 @@ void Blackbox::save_rc(void) {
config.setValue("session.cacheMax", resource.cache_max);
config.setValue("session.styleFile", resource.style_file);
config.setValue("session.titlebarLayout", resource.titlebar_layout);
- saveWindowToWindowSnap(resource.window_to_window_snap);
- saveWindowCornerSnap(resource.window_corner_snap);
std::for_each(screenList.begin(), screenList.end(),
std::mem_fun(&BScreen::save_rc));
@@ -973,14 +959,6 @@ void Blackbox::load_rc(void) {
if (! config.getValue("session.titlebarLayout", resource.titlebar_layout))
resource.titlebar_layout = "ILMC";
-
- if (! config.getValue("session.windowToWindowSnap",
- resource.window_to_window_snap))
- resource.window_to_window_snap = true;
-
- if (! config.getValue("session.windowCornerSnap",
- resource.window_corner_snap))
- resource.window_corner_snap = true;
}
diff --git a/src/blackbox.hh b/src/blackbox.hh
index 48fda8c5..cb38dc34 100644
--- a/src/blackbox.hh
+++ b/src/blackbox.hh
@@ -115,8 +115,6 @@ private:
timeval auto_raise_delay;
unsigned long cache_life, cache_max;
std::string titlebar_layout;
- bool window_to_window_snap;
- bool window_corner_snap;
} resource;
typedef std::map<Window, BlackboxWindow*> WindowLookup;
@@ -217,11 +215,6 @@ public:
inline unsigned long getCacheMax(void) const
{ return resource.cache_max; }
- inline bool getWindowToWindowSnap(void) const
- { return resource.window_to_window_snap; }
- inline bool getWindowCornerSnap(void) const
- { return resource.window_corner_snap; }
-
inline void setNoFocus(bool f) { no_focus = f; }
inline Cursor getSessionCursor(void) const
@@ -236,8 +229,6 @@ public:
void setFocusedWindow(BlackboxWindow *w);
void shutdown(void);
void saveStyleFilename(const std::string& filename);
- void saveWindowToWindowSnap(bool);
- void saveWindowCornerSnap(bool);
void addMenuTimestamp(const std::string& filename);
void restart(const char *prog = 0);
void reconfigure(void);