]> Dogcows Code - chaz/openbox/blobdiff - src/Screen.cc
add capability to stick a window from input, and make close buttons work.
[chaz/openbox] / src / Screen.cc
index 73dfeaf1bd71d91d4adac0490657c83e7fe5cd85..88cba6733fbc24e2df1fabfc56c6e2294dbf7ff7 100644 (file)
@@ -88,6 +88,7 @@ using std::string;
 #include "Workspace.hh"
 #include "Workspacemenu.hh"
 #include "XAtom.hh"
+#include "Input.hh"
 
 #ifndef   FONT_ELEMENT_SIZE
 #define   FONT_ELEMENT_SIZE 50
@@ -313,6 +314,7 @@ BScreen::BScreen(Blackbox *bb, unsigned int scrn) : ScreenInfo(bb, scrn) {
 
   // call this again just in case a window we found updates the Strut list
   updateAvailableArea();
+  updateFocusModel();
 }
 
 
@@ -2170,9 +2172,10 @@ void BScreen::toggleFocusModel(FocusModel model) {
   if (model == SloppyFocus) {
     saveSloppyFocus(True);
   } else {
+    // we're cheating here to save writing the config file 3 times
+    resource.auto_raise = False;
+    resource.click_raise = False;
     saveSloppyFocus(False);
-    saveAutoRaise(False);
-    saveClickRaise(False);
   }
 
   updateFocusModel();
@@ -2181,8 +2184,31 @@ void BScreen::toggleFocusModel(FocusModel model) {
 
 void BScreen::updateFocusModel()
 {
-  std::for_each(workspacesList.begin(), workspacesList.end(),
-                std::mem_fun(&Workspace::updateFocusModel));
+  std::for_each(iconList.begin(), iconList.end(),
+                std::mem_fun(&BlackboxWindow::ungrabButtons));
+  std::for_each(windowList.begin(), windowList.end(),
+                std::mem_fun(&BlackboxWindow::ungrabButtons));
+  
+  if (! resource.sloppy_focus) {
+    blackbox->getInput()->add(Button1, 0, BInput::WindowClientPress,
+                              BInput::Raise);
+    blackbox->getInput()->add(Button1, 0, BInput::WindowClientPress,
+                              BInput::Focus);
+  } else {
+    if (resource.click_raise)
+      blackbox->getInput()->add(Button1, 0, BInput::WindowClientPress,
+                                BInput::Raise);
+    else
+      blackbox->getInput()->remove(Button1, 0, BInput::WindowClientPress,
+                                   BInput::Raise);
+    blackbox->getInput()->remove(Button1, 0, BInput::WindowClientPress,
+                                 BInput::Focus);
+  }
+  
+  std::for_each(iconList.begin(), iconList.end(),
+                std::mem_fun(&BlackboxWindow::grabButtons));
+  std::for_each(windowList.begin(), windowList.end(),
+                std::mem_fun(&BlackboxWindow::grabButtons));
 }
 
 
This page took 0.022274 seconds and 4 git commands to generate.