]> Dogcows Code - chaz/openbox/blobdiff - src/openbox.cc
code reorganize
[chaz/openbox] / src / openbox.cc
index 24ea9b2e07c75a7749b4c4f3df8d7f7d38f64b0a..6c7bfdb8b5ce4c57757cb8e021b7733bce5697e5 100644 (file)
@@ -51,7 +51,6 @@ extern "C" {
 namespace ob {
 
 Openbox *Openbox::instance  = (Openbox *) 0;
-OBActions *Openbox::actions = (OBActions *) 0;
 
 
 void Openbox::signalHandler(int signal)
@@ -91,6 +90,9 @@ Openbox::Openbox(int argc, char **argv)
   _doshutdown = false;
   _rcfilepath = otk::expandTilde("~/.openbox/rc3");
 
+  _clients = (PyDictObject*) PyDict_New();
+  assert(_clients);
+
   parseCommandLine(argc, argv);
 
   // TEMPORARY: using the xrdb rc3
@@ -124,9 +126,9 @@ Openbox::Openbox(int argc, char **argv)
 
   _property = new otk::OBProperty();
 
-  Openbox::actions = new OBActions();
+  _actions = new OBActions();
 
-  setMasterHandler(Openbox::actions); // set as the master event handler
+  setMasterHandler(_actions); // set as the master event handler
 
   // create the mouse cursors we'll use
   _cursors.session = XCreateFontCursor(otk::OBDisplay::display, XC_left_ptr);
@@ -150,7 +152,19 @@ Openbox::Openbox(int argc, char **argv)
     printf(_("No screens were found without a window manager. Exiting.\n"));
     ::exit(1);
   }
-  
+
+  // initialize the python interface
+  Py_SetProgramName(argv[0]);
+  Py_Initialize();
+  initopenbox(); // initialize the static 'openbox' module
+  FILE *rcpyfd = fopen("/home/natas/.openbox/user.py", "r");
+  if (!rcpyfd) {
+    printf("failed to load python file /home/natas/.openbox/user.py\n");
+  } else {
+    PyRun_SimpleFile(rcpyfd, "/home/natas/.openbox/user.py");
+    fclose(rcpyfd);
+  }
+
   _state = State_Normal; // done starting
 }
 
@@ -261,28 +275,25 @@ void Openbox::eventLoop()
 
 void Openbox::addClient(Window window, OBClient *client)
 {
-  _clients[window] = client;
+  // maintain the python list here too
+  PyDict_SetItem((PyObject*)_clients, PyLong_FromLong(window),
+                 (PyObject*)client);
 }
 
 
 void Openbox::removeClient(Window window)
 {
-  _clients.erase(window);
+  PyDict_DelItem((PyObject*)_clients, PyLong_FromLong(window));
 }
 
 
 OBClient *Openbox::findClient(Window window)
 {
-  /*
-    NOTE: we dont use _clients[] to find the value because that will insert
-    a new null into the hash, which really sucks when we want to clean up the
-    hash at shutdown!
-  */
-  ClientMap::iterator it = _clients.find(window);
-  if (it != _clients.end())
-    return it->second;
-  else
-    return (OBClient*) 0;
+  PyClientObject *client = PyDist_GetItem((PyObject*)_clients,
+                                          PyLong_FromLong(window));
+  if (client)
+    return client->client;
+  return 0;
 }
 
 }
This page took 0.026371 seconds and 4 git commands to generate.