From: Dana Jansens Date: Sat, 11 Jan 2003 11:16:36 +0000 (+0000) Subject: valgrind fixes, and fixes for writing shit all over the environment. yay~!!!!!!! X-Git-Url: https://git.brokenzipper.com/gitweb?a=commitdiff_plain;h=e8f5cf2940667a60698d28fe0cae208792357676;p=chaz%2Fopenbox valgrind fixes, and fixes for writing shit all over the environment. yay~!!!!!!! --- diff --git a/otk/display.cc b/otk/display.cc index 33dca01b..98288bd0 100644 --- a/otk/display.cc +++ b/otk/display.cc @@ -7,6 +7,7 @@ #include "display.hh" #include "screeninfo.hh" #include "gccache.hh" +#include "util.hh" extern "C" { #include @@ -27,10 +28,6 @@ extern "C" { # include #endif // HAVE_STDIO_H -#ifdef HAVE_STDLIB_H -# include -#endif // HAVE_STDLIB_H - #ifdef HAVE_SIGNAL_H # include #endif // HAVE_SIGNAL_H @@ -110,11 +107,7 @@ line argument.\n\n")); // set the DISPLAY environment variable for any lauched children, to the // display we're using, so they open in the right place. // XXX rm -> std::string dtmp = "DISPLAY=" + DisplayString(display); - if (putenv(const_cast((std::string("DISPLAY=") + - DisplayString(display)).c_str()))) { - printf(_("warning: couldn't set environment variable 'DISPLAY'\n")); - perror("putenv()"); - } + putenv(std::string("DISPLAY=") + DisplayString(display)); // find the availability of X extensions we like to use #ifdef XKB diff --git a/otk/util.cc b/otk/util.cc index ebca51d5..a3ec0034 100644 --- a/otk/util.cc +++ b/otk/util.cc @@ -23,6 +23,9 @@ extern "C" { # include #endif // HAVE_PROCESS_H __EMX__ +#include "gettext.h" +#define _(str) gettext(str) + #include } @@ -48,9 +51,8 @@ void bexec(const string& command, const string& displaystring) { #ifndef __EMX__ if (! fork()) { setsid(); - int ret = putenv(const_cast(displaystring.c_str())); - assert(ret != -1); - ret = execl("/bin/sh", "/bin/sh", "-c", command.c_str(), NULL); + putenv(displaystring); + int ret = execl("/bin/sh", "/bin/sh", "-c", command.c_str(), NULL); exit(ret); } #else // __EMX__ @@ -101,6 +103,19 @@ string itostring(long i) { return tmp; } +void putenv(const std::string &data) +{ + char *c = new char[data.size() + 1]; + std::string::size_type i, max; + for (i = 0, max = data.size(); i < max; ++i) + c[i] = data[i]; + c[i] = 0; + if (::putenv(c)) { + printf(_("warning: couldn't set environment variable\n")); + perror("putenv()"); + } +} + string basename (const string& path) { string::size_type slash = path.rfind('/'); if (slash == string::npos) diff --git a/otk/util.hh b/otk/util.hh index 2664c1fa..2325ebf0 100644 --- a/otk/util.hh +++ b/otk/util.hh @@ -40,6 +40,7 @@ inline std::string itostring(unsigned int i) inline std::string itostring(int i) { return itostring((long) i); } +void putenv(const std::string &data); std::string basename(const std::string& path); diff --git a/src/actions.cc b/src/actions.cc index 15a3e6c2..96290bdd 100644 --- a/src/actions.cc +++ b/src/actions.cc @@ -37,8 +37,10 @@ OBActions::~OBActions() void OBActions::insertPress(const XButtonEvent &e) { ButtonPressAction *a = _posqueue[BUTTONS - 1]; - for (int i=BUTTONS-1; i>0;) - _posqueue[i] = _posqueue[--i]; + // rm'd the last one, shift them all down one + for (int i = BUTTONS-1; i > 0; --i) { + _posqueue[i] = _posqueue[i-1]; + } _posqueue[0] = a; a->button = e.button; a->pos.setPoint(e.x_root, e.y_root); @@ -49,17 +51,19 @@ void OBActions::insertPress(const XButtonEvent &e) void OBActions::removePress(const XButtonEvent &e) { + int i; ButtonPressAction *a = 0; - for (int i=0; ibutton == e.button) + for (i=0; ibutton == e.button) { a = _posqueue[i]; - if (a) // found one and removed it + break; + } + if (a) { // found one, remove it and shift the rest up one + for (; i < BUTTONS-1; ++i) _posqueue[i] = _posqueue[i+1]; - } - if (a) { // found one _posqueue[BUTTONS-1] = a; - a->button = 0; } + _posqueue[BUTTONS-1]->button = 0; } void OBActions::buttonPressHandler(const XButtonEvent &e) diff --git a/src/bindings.cc b/src/bindings.cc index 7c13ca64..90bac388 100644 --- a/src/bindings.cc +++ b/src/bindings.cc @@ -158,7 +158,7 @@ OBBindings::~OBBindings() { grabKeys(false); removeAllKeys(); - removeAllButtons(); +// removeAllButtons(); XXX removeAllEvents(); } @@ -456,7 +456,7 @@ bool OBBindings::addButton(const std::string &but, MouseContext context, void OBBindings::removeAllButtons() { - for (int i = i; i < NUM_MOUSE_CONTEXT; ++i) { + for (int i = 0; i < NUM_MOUSE_CONTEXT; ++i) { ButtonBindingList::iterator it, end = _buttons[i].end(); for (it = _buttons[i].begin(); it != end; ++it) { for (int a = 0; a < NUM_MOUSE_ACTION; ++a) { diff --git a/src/client.cc b/src/client.cc index a427a21e..c69d576a 100644 --- a/src/client.cc +++ b/src/client.cc @@ -43,6 +43,8 @@ OBClient::OBClient(int screen, Window window) _focused = false; // not a transient by default of course _transient_for = 0; + // pick a layer to start from + _layer = Layer_Normal; getArea(); getDesktop(); diff --git a/src/openbox.cc b/src/openbox.cc index 42cc1fef..600c9d8d 100644 --- a/src/openbox.cc +++ b/src/openbox.cc @@ -13,7 +13,7 @@ #include "otk/property.hh" #include "otk/display.hh" #include "otk/assassin.hh" -#include "otk/util.hh" // TEMPORARY +#include "otk/util.hh" extern "C" { #include @@ -202,7 +202,7 @@ Openbox::~Openbox() if (!_restart_prog.empty()) { const std::string &dstr = otk::OBDisplay::screenInfo(first_screen)->displayString(); - putenv(const_cast(dstr.c_str())); + otk::putenv(const_cast(dstr.c_str())); execlp(_restart_prog.c_str(), _restart_prog.c_str(), NULL); perror(_restart_prog.c_str()); } @@ -381,23 +381,9 @@ void Openbox::setFocusedClient(OBClient *c) void Openbox::execute(int screen, const std::string &bin) { -#ifdef __EMX__ - // XXX: whats this for? windows? - spawnlp(P_NOWAIT, "cmd.exe", "cmd.exe", "/c", bin.c_str(), NULL); -#else // __EMX__ if (screen >= ScreenCount(otk::OBDisplay::display)) screen = 0; - const std::string &dstr = - otk::OBDisplay::screenInfo(screen)->displayString(); - - if (! fork()) { - setsid(); - int ret = putenv(const_cast(dstr.c_str())); - assert(ret != -1); - ret = execl("/bin/sh", "/bin/sh", "-c", bin.c_str(), NULL); - exit(ret); - } -#endif // __EMX__ + otk::bexec(bin, otk::OBDisplay::screenInfo(screen)->displayString()); } } diff --git a/src/python.cc b/src/python.cc index 2c71b018..891d1120 100644 --- a/src/python.cc +++ b/src/python.cc @@ -19,28 +19,17 @@ static PyObject *obdict = NULL; void python_init(char *argv0) { - std::string path; - // start the python engine - //Py_SetProgramName(argv0); - //Py_Initialize(); + Py_SetProgramName(argv0); + Py_Initialize(); // initialize the C python module - //init_openbox(); + init_openbox(); // include the openbox directories for python scripts in the sys path -// PyRun_SimpleString("import sys"); -printf("SCRIPTDIR=%s\n", SCRIPTDIR); -printf("1 getenv(DISPLAY)=%s\n", getenv("DISPLAY")); - path = "sys.path"; -printf("2 getenv(DISPLAY)=%s\n", getenv("DISPLAY")); - path = "sys.path.append('"; -printf("3 getenv(DISPLAY)=%s\n", getenv("DISPLAY")); - path += SCRIPTDIR; - path += "')"; - PyRun_SimpleString(const_cast(path.c_str())); - path = "sys.path.append('"; - path += otk::expandTilde("~/.openbox/python"); - path += "')"; - PyRun_SimpleString(const_cast(path.c_str())); + PyRun_SimpleString("import sys"); + PyRun_SimpleString("sys.path.append('" SCRIPTDIR "')"); + PyRun_SimpleString(const_cast(("sys.path.append('" + + otk::expandTilde("~/.openbox/python") + + "')").c_str())); // import the otk and openbox modules into the main namespace PyRun_SimpleString("from openbox import *;"); // set up convenience global variables