]> Dogcows Code - chaz/openbox/blobdiff - src/openbox.cc
BScreen (ScreenInfo) now contains a size() instead of a getWidth/getHeight
[chaz/openbox] / src / openbox.cc
index 2f41fcbb89a346cd75327f5da20e224354799e1d..8e01a466590194a6b11f7aa6527078be460c5a1e 100644 (file)
@@ -55,6 +55,7 @@
 #include "Window.h"
 #include "Workspace.h"
 #include "Workspacemenu.h"
+#include "Util.h"
 
 #include <string>
 #include <algorithm>
@@ -174,6 +175,7 @@ Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc)
   } else {
     rc_file = bstrdup(rc);
   }
+  symlink_rc(rc_file);
   config.setFile(rc_file);
 
   no_focus = False;
@@ -197,7 +199,6 @@ Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc)
 
   menuTimestamps = new LinkedList<MenuTimestamp>;
 
-  XrmInitialize();
   load_rc();
 
 #ifdef    HAVE_GETPID
@@ -206,7 +207,7 @@ Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc)
 
   screenList = new LinkedList<BScreen>;
   for (int i = 0; i < getNumberOfScreens(); i++) {
-    BScreen *screen = new BScreen(this, i);
+    BScreen *screen = new BScreen(*this, i);
 
     if (! screen->isScreenManaged()) {
       delete screen;
@@ -228,7 +229,7 @@ Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc)
 
   reconfigure_wait = reread_menu_wait = False;
 
-  timer = new BTimer(this, this);
+  timer = new BTimer(*this, *this);
   timer->setTimeout(0);
   timer->fireOnce(True);
 
@@ -337,14 +338,14 @@ void Openbox::process_event(XEvent *e) {
            if (my < 0) my = 0;
 
            if (mx + screen->getWorkspacemenu()->getWidth() >
-               screen->getWidth())
-             mx = screen->getWidth() -
+               screen->size().w())
+             mx = screen->size().w() -
                screen->getWorkspacemenu()->getWidth() -
                screen->getBorderWidth();
 
            if (my + screen->getWorkspacemenu()->getHeight() >
-               screen->getHeight())
-             my = screen->getHeight() -
+               screen->size().h())
+             my = screen->size().h() -
                screen->getWorkspacemenu()->getHeight() -
                screen->getBorderWidth();
 
@@ -363,13 +364,13 @@ void Openbox::process_event(XEvent *e) {
            if (mx < 0) mx = 0;
            if (my < 0) my = 0;
 
-           if (mx + screen->getRootmenu()->getWidth() > screen->getWidth())
-             mx = screen->getWidth() -
+           if (mx + screen->getRootmenu()->getWidth() > screen->size().w())
+             mx = screen->size().w() -
                screen->getRootmenu()->getWidth() -
                screen->getBorderWidth();
 
-           if (my + screen->getRootmenu()->getHeight() > screen->getHeight())
-               my = screen->getHeight() -
+           if (my + screen->getRootmenu()->getHeight() > screen->size().h())
+               my = screen->size().h() -
                  screen->getRootmenu()->getHeight() -
                  screen->getBorderWidth();
 
@@ -467,7 +468,7 @@ void Openbox::process_event(XEvent *e) {
     OpenboxWindow *win = searchWindow(e->xmaprequest.window);
 
     if (! win)
-      win = new OpenboxWindow(this, e->xmaprequest.window);
+      win = new OpenboxWindow(*this, e->xmaprequest.window);
 
     if ((win = searchWindow(e->xmaprequest.window)))
       win->mapRequestEvent(&e->xmaprequest);
@@ -1043,6 +1044,7 @@ void Openbox::save_rc(void) {
 
     switch (screen->getPlacementPolicy()) {
     case BScreen::CascadePlacement: placement = "CascadePlacement"; break;
+    case BScreen::BestFitPlacement: placement = "BestFitPlacement"; break;
     case BScreen::ColSmartPlacement: placement = "ColSmartPlacement"; break;
     default:
     case BScreen::RowSmartPlacement: placement = "RowSmartPlacement"; break;
@@ -1208,9 +1210,9 @@ void Openbox::load_rc(void) {
 
 
 void Openbox::load_rc(BScreen *screen) {
-  assert (screen != NULL);
+  ASSERT (screen != NULL);
   const int screen_number = screen->getScreenNumber();
-  assert (screen_number >= 0);
+  ASSERT (screen_number >= 0);
 
   if (!config.load())
     return;
@@ -1333,7 +1335,6 @@ void Openbox::load_rc(BScreen *screen) {
   sprintf(name_lookup,  "session.screen%d.focusModel", screen_number);
   sprintf(class_lookup, "Session.Screen%d.FocusModel", screen_number);
   if (config.getValue(name_lookup, class_lookup, s)) {
-    cout << s << endl;
     if (0 == strncasecmp(s.c_str(), "clicktofocus", s.length())) {
       screen->saveAutoRaise(False);
       screen->saveSloppyFocus(False);
@@ -1364,6 +1365,8 @@ void Openbox::load_rc(BScreen *screen) {
       screen->savePlacementPolicy(BScreen::RowSmartPlacement);
     else if (0 == strncasecmp(s.c_str(), "ColSmartPlacement", s.length()))
       screen->savePlacementPolicy(BScreen::ColSmartPlacement);
+    else if (0 == strncasecmp(s.c_str(), "BestFitPlacement", s.length()))
+      screen->savePlacementPolicy(BScreen::BestFitPlacement);
     else
       screen->savePlacementPolicy(BScreen::CascadePlacement);
   } else
@@ -1491,18 +1494,9 @@ void Openbox::reconfigure(void) {
 void Openbox::real_reconfigure(void) {
   grab();
 
-  XrmDatabase new_openboxrc = (XrmDatabase) 0;
-  char style[MAXPATHLEN + 64];
-
-  sprintf(style, "session.styleFile: %s", resource.style_file);
-  XrmPutLineResource(&new_openboxrc, style);
-
-  XrmDatabase old_openboxrc = XrmGetFileDatabase(rc_file);
-
-  XrmMergeDatabases(new_openboxrc, &old_openboxrc);
-  XrmPutFileDatabase(old_openboxrc, rc_file);
-  if (old_openboxrc) XrmDestroyDatabase(old_openboxrc);
-
+  config.load();
+  config.setValue("session.styleFile", resource.style_file);    // autosave's
+  
   for (int i = 0, n = menuTimestamps->count(); i < n; i++) {
     MenuTimestamp *ts = menuTimestamps->remove(0);
 
@@ -1648,3 +1642,15 @@ void Openbox::setFocusedWindow(OpenboxWindow *win) {
   if (old_screen && old_screen != screen)
     old_screen->updateNetizenWindowFocus();
 }
+
+#warning TODO: wrap in appropriate #ifdefs.
+
+void Openbox::symlink_rc(const char*rcfile)const{
+  char *homedir = getenv("HOME");
+  
+  char *link_file = new char[strlen(homedir) + strlen("/.blackoxrc") + 1];
+  sprintf(link_file, "%s/.blackboxrc", homedir);
+  if(symlink(rcfile, link_file) == -1){
+    perror("Cannot create symlink");
+  }
+}
This page took 0.025222 seconds and 4 git commands to generate.