]> Dogcows Code - chaz/openbox/blobdiff - src/Screen.cc
save the window-to-window snapping right
[chaz/openbox] / src / Screen.cc
index d11894cebe70c6c340110d602b22977f6123df98..8512b3dc3cc05dce8eb5d3e5534bff377679681e 100644 (file)
@@ -417,10 +417,29 @@ 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::saveWindowToEdgeSnap(int s) {
+  resource.snap_to_edges = s;
+
+  const char *snap;
+  switch (resource.snap_to_edges) {
+  case WindowNoSnap: snap = "NoSnap"; break;
+  case WindowResistance: snap = "Resistance"; break;
+  case WindowSnap: default: snap = "Snap"; break;
+  }
+  config->setValue(screenstr + "windowToEdgeSnap", snap);
+}
+
+
+void BScreen::saveWindowToWindowSnap(int s) {
+  resource.snap_to_windows = s;
+  
+  const char *snap;
+  switch (resource.snap_to_windows) {
+  case WindowNoSnap: snap = "NoSnap"; break;
+  case WindowResistance: snap = "Resistance"; break;
+  case WindowSnap: default: snap = "Snap"; break;
+  }
+  config->setValue(screenstr + "windowToWindowSnap", snap);
 }
 
 
@@ -457,10 +476,17 @@ void BScreen::savePlacementPolicy(int p) {
 }
 
 
-void BScreen::saveEdgeSnapThreshold(int t) {
-  resource.edge_snap_threshold = t;
+void BScreen::saveResistanceSize(int s) {
+  resource.resistance_size = s;
+  config->setValue(screenstr + "resistanceSize",
+                   resource.resistance_size);
+}
+
+
+void BScreen::saveSnapThreshold(int t) {
+  resource.snap_threshold = t;
   config->setValue(screenstr + "edgeSnapThreshold",
-                   resource.edge_snap_threshold);
+                   resource.snap_threshold);
 }
 
 
@@ -544,6 +570,18 @@ void BScreen::saveWorkspaceWarping(bool w) {
 }
 
 
+void BScreen::saveRootScrollDirection(int d) {
+  resource.root_scroll = d;
+  const char *dir;
+  switch (resource.root_scroll) {
+  case NoScroll: dir = "None"; break;
+  case ReverseScroll: dir = "Reverse"; break;
+  case NormalScroll: default: dir = "Normal"; break;
+  }
+  config->setValue(screenstr + "rootScrollDirection", dir);
+}
+
+
 void BScreen::save_rc(void) {
   saveSloppyFocus(resource.sloppy_focus);
   saveAutoRaise(resource.auto_raise);
@@ -555,11 +593,13 @@ void BScreen::save_rc(void) {
   saveFocusNew(resource.focus_new);
   saveFocusLast(resource.focus_last);
   saveHideToolbar(resource.hide_toolbar);
-  saveWindowToWindowSnap(resource.window_to_window_snap);
+  saveWindowToWindowSnap(resource.snap_to_windows);
+  saveWindowToEdgeSnap(resource.snap_to_edges);
   saveWindowCornerSnap(resource.window_corner_snap);
   saveWorkspaces(resource.workspaces);
   savePlacementPolicy(resource.placement_policy);
-  saveEdgeSnapThreshold(resource.edge_snap_threshold);
+  saveSnapThreshold(resource.snap_threshold);
+  saveResistanceSize(resource.resistance_size);
   saveRowPlacementDirection(resource.row_direction);
   saveColPlacementDirection(resource.col_direction);
 #ifdef    HAVE_STRFTIME
@@ -572,6 +612,7 @@ void BScreen::save_rc(void) {
   savePlaceIgnoreMaximized(resource.ignore_maximized);
   saveAllowScrollLock(resource.allow_scroll_lock);
   saveWorkspaceWarping(resource.workspace_warping);
+  saveRootScrollDirection(resource.root_scroll);
 
   toolbar->save_rc();
   slit->save_rc();
@@ -608,9 +649,21 @@ 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;
+  resource.snap_to_windows = WindowResistance;
+  if (config->getValue(screenstr + "windowToWindowSnap", s)) {
+    if (s == "NoSnap")
+      resource.snap_to_windows = WindowNoSnap;
+    else if (s == "Snap")
+      resource.snap_to_windows = WindowSnap;
+  }
+
+  resource.snap_to_edges = WindowResistance;
+  if (config->getValue(screenstr + "windowToEdgeSnap", s)) {
+    if (s == "NoSnap")
+      resource.snap_to_edges = WindowNoSnap;
+    else if (s == "Snap")
+      resource.snap_to_edges = WindowSnap;
+  }
 
   if (! config->getValue(screenstr + "windowCornerSnap",
                          resource.window_corner_snap))
@@ -621,8 +674,12 @@ void BScreen::load_rc(void) {
   image_control->setDither(b);
 
   if (! config->getValue(screenstr + "edgeSnapThreshold",
-                        resource.edge_snap_threshold))
-    resource.edge_snap_threshold = 4;
+                        resource.snap_threshold))
+    resource.snap_threshold = 4;
+  
+  if (! config->getValue(screenstr + "resistanceSize",
+                        resource.resistance_size))
+    resource.resistance_size = 12;
   
   if (config->getValue(screenstr + "rowPlacementDirection", s) &&
       s == "RightToLeft")
@@ -707,13 +764,21 @@ void BScreen::load_rc(void) {
                          resource.ignore_maximized))
     resource.ignore_maximized = true;
 
-if (! config->getValue(screenstr + "disableBindingsWithScrollLock",
+  if (! config->getValue(screenstr + "disableBindingsWithScrollLock",
                        resource.allow_scroll_lock))
-  resource.allow_scroll_lock = false;
+    resource.allow_scroll_lock = false;
 
   if (! config->getValue(screenstr + "workspaceWarping",
                          resource.workspace_warping))
     resource.workspace_warping = false;
+
+  resource.root_scroll = NormalScroll;
+  if (config->getValue(screenstr + "rootScrollDirection", s)) {
+    if (s == "None")
+      resource.root_scroll = NoScroll;
+    else if (s == "Reverse")
+      resource.root_scroll = ReverseScroll;
+  }
 }
 
 
@@ -1427,7 +1492,7 @@ void BScreen::updateNetizenConfigNotify(XEvent *e) {
 
 void BScreen::raiseWindows(Window *workspace_stack, unsigned int num) {
   // the 13 represents the number of blackbox windows such as menus
-  int bbwins = 13;
+  int bbwins = 15;
 #ifdef    XINERAMA
   ++bbwins;
 #endif // XINERAMA
@@ -1448,6 +1513,8 @@ void BScreen::raiseWindows(Window *workspace_stack, unsigned int num) {
 
   *(session_stack + i++) = configmenu->getFocusmenu()->getWindowID();
   *(session_stack + i++) = configmenu->getPlacementmenu()->getWindowID();
+  *(session_stack + i++) = configmenu->getWindowSnapmenu()->getWindowID();
+  *(session_stack + i++) = configmenu->getEdgeSnapmenu()->getWindowID();
 #ifdef    XINERAMA
   *(session_stack + i++) = configmenu->getXineramamenu()->getWindowID();
 #endif // XINERAMA
@@ -2242,13 +2309,15 @@ void BScreen::buttonPressEvent(const XButtonEvent *xbutton) {
       rootmenu->show();
     }
   // mouse wheel up
-  } else if (xbutton->button == 4) {
+  } else if ((xbutton->button == 4 && resource.root_scroll == NormalScroll) ||
+             (xbutton->button == 5 && resource.root_scroll == ReverseScroll)) {
     if (getCurrentWorkspaceID() >= getWorkspaceCount() - 1)
       changeWorkspaceID(0);
     else
       changeWorkspaceID(getCurrentWorkspaceID() + 1);
   // mouse wheel down
-  } else if (xbutton->button == 5) {
+  } else if ((xbutton->button == 5 && resource.root_scroll == NormalScroll) ||
+             (xbutton->button == 4 && resource.root_scroll == ReverseScroll)) {
     if (getCurrentWorkspaceID() == 0)
       changeWorkspaceID(getWorkspaceCount() - 1);
     else
This page took 0.026676 seconds and 4 git commands to generate.