all repos — openbox @ e8f5cf2940667a60698d28fe0cae208792357676

openbox fork - make it a bit more like ryudo

valgrind fixes, and fixes for writing shit all over the environment. yay~!!!!!!!
Dana Jansens danakj@orodu.net
commit

e8f5cf2940667a60698d28fe0cae208792357676

parent

bc88d310fea71823fb2c61d071ff499579bffaba

M otk/display.ccotk/display.cc

@@ -7,6 +7,7 @@

#include "display.hh" #include "screeninfo.hh" #include "gccache.hh" +#include "util.hh" extern "C" { #include <X11/keysym.h>

@@ -26,10 +27,6 @@

#ifdef HAVE_STDIO_H # include <stdio.h> #endif // HAVE_STDIO_H - -#ifdef HAVE_STDLIB_H -# include <stdlib.h> -#endif // HAVE_STDLIB_H #ifdef HAVE_SIGNAL_H # include <signal.h>

@@ -110,11 +107,7 @@

// 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<char*>((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
M otk/util.ccotk/util.cc

@@ -23,6 +23,9 @@ #if defined(HAVE_PROCESS_H) && defined(__EMX__)

# include <process.h> #endif // HAVE_PROCESS_H __EMX__ +#include "gettext.h" +#define _(str) gettext(str) + #include <assert.h> }

@@ -48,9 +51,8 @@ void bexec(const string& command, const string& displaystring) {

#ifndef __EMX__ if (! fork()) { setsid(); - int ret = putenv(const_cast<char *>(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__

@@ -99,6 +101,19 @@ std::string tmp = itostring( (unsigned long) std::abs(i));

if (i < 0) tmp.insert(tmp.begin(), '-'); 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) {
M otk/util.hhotk/util.hh

@@ -40,6 +40,7 @@ { return itostring((unsigned long) i); }

inline std::string itostring(int i) { return itostring((long) i); } +void putenv(const std::string &data); std::string basename(const std::string& path);
M src/actions.ccsrc/actions.cc

@@ -37,8 +37,10 @@

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::removePress(const XButtonEvent &e) { + int i; ButtonPressAction *a = 0; - for (int i=0; i<BUTTONS; ++i) { - if (_posqueue[i]->button == e.button) + for (i=0; i<BUTTONS-1; ++i) + if (_posqueue[i]->button == 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)
M src/bindings.ccsrc/bindings.cc

@@ -158,7 +158,7 @@ OBBindings::~OBBindings()

{ grabKeys(false); removeAllKeys(); - removeAllButtons(); +// removeAllButtons(); XXX removeAllEvents(); }

@@ -456,7 +456,7 @@ }

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) {
M src/client.ccsrc/client.cc

@@ -43,6 +43,8 @@ // start unfocused

_focused = false; // not a transient by default of course _transient_for = 0; + // pick a layer to start from + _layer = Layer_Normal; getArea(); getDesktop();
M src/openbox.ccsrc/openbox.cc

@@ -13,7 +13,7 @@ #include "python.hh"

#include "otk/property.hh" #include "otk/display.hh" #include "otk/assassin.hh" -#include "otk/util.hh" // TEMPORARY +#include "otk/util.hh" extern "C" { #include <X11/cursorfont.h>

@@ -202,7 +202,7 @@ if (_restart) {

if (!_restart_prog.empty()) { const std::string &dstr = otk::OBDisplay::screenInfo(first_screen)->displayString(); - putenv(const_cast<char *>(dstr.c_str())); + otk::putenv(const_cast<char *>(dstr.c_str())); execlp(_restart_prog.c_str(), _restart_prog.c_str(), NULL); perror(_restart_prog.c_str()); }

@@ -381,23 +381,9 @@ }

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<char *>(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()); } }
M src/python.ccsrc/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<char*>(path.c_str())); - path = "sys.path.append('"; - path += otk::expandTilde("~/.openbox/python"); - path += "')"; - PyRun_SimpleString(const_cast<char*>(path.c_str())); + PyRun_SimpleString("import sys"); + PyRun_SimpleString("sys.path.append('" SCRIPTDIR "')"); + PyRun_SimpleString(const_cast<char*>(("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