valgrind fixes, and fixes for writing shit all over the environment. yay~!!!!!!!

This commit is contained in:
Dana Jansens 2003-01-11 11:16:36 +00:00
parent bc88d310fe
commit e8f5cf2940
8 changed files with 48 additions and 58 deletions

View file

@ -7,6 +7,7 @@
#include "display.hh" #include "display.hh"
#include "screeninfo.hh" #include "screeninfo.hh"
#include "gccache.hh" #include "gccache.hh"
#include "util.hh"
extern "C" { extern "C" {
#include <X11/keysym.h> #include <X11/keysym.h>
@ -27,10 +28,6 @@ extern "C" {
# include <stdio.h> # include <stdio.h>
#endif // HAVE_STDIO_H #endif // HAVE_STDIO_H
#ifdef HAVE_STDLIB_H
# include <stdlib.h>
#endif // HAVE_STDLIB_H
#ifdef HAVE_SIGNAL_H #ifdef HAVE_SIGNAL_H
# include <signal.h> # include <signal.h>
#endif // HAVE_SIGNAL_H #endif // HAVE_SIGNAL_H
@ -110,11 +107,7 @@ line argument.\n\n"));
// set the DISPLAY environment variable for any lauched children, to the // set the DISPLAY environment variable for any lauched children, to the
// display we're using, so they open in the right place. // display we're using, so they open in the right place.
// XXX rm -> std::string dtmp = "DISPLAY=" + DisplayString(display); // XXX rm -> std::string dtmp = "DISPLAY=" + DisplayString(display);
if (putenv(const_cast<char*>((std::string("DISPLAY=") + putenv(std::string("DISPLAY=") + DisplayString(display));
DisplayString(display)).c_str()))) {
printf(_("warning: couldn't set environment variable 'DISPLAY'\n"));
perror("putenv()");
}
// find the availability of X extensions we like to use // find the availability of X extensions we like to use
#ifdef XKB #ifdef XKB

View file

@ -23,6 +23,9 @@ extern "C" {
# include <process.h> # include <process.h>
#endif // HAVE_PROCESS_H __EMX__ #endif // HAVE_PROCESS_H __EMX__
#include "gettext.h"
#define _(str) gettext(str)
#include <assert.h> #include <assert.h>
} }
@ -48,9 +51,8 @@ void bexec(const string& command, const string& displaystring) {
#ifndef __EMX__ #ifndef __EMX__
if (! fork()) { if (! fork()) {
setsid(); setsid();
int ret = putenv(const_cast<char *>(displaystring.c_str())); putenv(displaystring);
assert(ret != -1); int ret = execl("/bin/sh", "/bin/sh", "-c", command.c_str(), NULL);
ret = execl("/bin/sh", "/bin/sh", "-c", command.c_str(), NULL);
exit(ret); exit(ret);
} }
#else // __EMX__ #else // __EMX__
@ -101,6 +103,19 @@ string itostring(long i) {
return tmp; 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 basename (const string& path) {
string::size_type slash = path.rfind('/'); string::size_type slash = path.rfind('/');
if (slash == string::npos) if (slash == string::npos)

View file

@ -40,6 +40,7 @@ inline std::string itostring(unsigned int i)
inline std::string itostring(int i) inline std::string itostring(int i)
{ return itostring((long) i); } { return itostring((long) i); }
void putenv(const std::string &data);
std::string basename(const std::string& path); std::string basename(const std::string& path);

View file

@ -37,8 +37,10 @@ OBActions::~OBActions()
void OBActions::insertPress(const XButtonEvent &e) void OBActions::insertPress(const XButtonEvent &e)
{ {
ButtonPressAction *a = _posqueue[BUTTONS - 1]; ButtonPressAction *a = _posqueue[BUTTONS - 1];
for (int i=BUTTONS-1; i>0;) // rm'd the last one, shift them all down one
_posqueue[i] = _posqueue[--i]; for (int i = BUTTONS-1; i > 0; --i) {
_posqueue[i] = _posqueue[i-1];
}
_posqueue[0] = a; _posqueue[0] = a;
a->button = e.button; a->button = e.button;
a->pos.setPoint(e.x_root, e.y_root); 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) void OBActions::removePress(const XButtonEvent &e)
{ {
int i;
ButtonPressAction *a = 0; ButtonPressAction *a = 0;
for (int i=0; i<BUTTONS; ++i) { for (i=0; i<BUTTONS-1; ++i)
if (_posqueue[i]->button == e.button) if (_posqueue[i]->button == e.button) {
a = _posqueue[i]; 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]; _posqueue[i] = _posqueue[i+1];
}
if (a) { // found one
_posqueue[BUTTONS-1] = a; _posqueue[BUTTONS-1] = a;
a->button = 0;
} }
_posqueue[BUTTONS-1]->button = 0;
} }
void OBActions::buttonPressHandler(const XButtonEvent &e) void OBActions::buttonPressHandler(const XButtonEvent &e)

View file

@ -158,7 +158,7 @@ OBBindings::~OBBindings()
{ {
grabKeys(false); grabKeys(false);
removeAllKeys(); removeAllKeys();
removeAllButtons(); // removeAllButtons(); XXX
removeAllEvents(); removeAllEvents();
} }
@ -456,7 +456,7 @@ bool OBBindings::addButton(const std::string &but, MouseContext context,
void OBBindings::removeAllButtons() 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(); ButtonBindingList::iterator it, end = _buttons[i].end();
for (it = _buttons[i].begin(); it != end; ++it) { for (it = _buttons[i].begin(); it != end; ++it) {
for (int a = 0; a < NUM_MOUSE_ACTION; ++a) { for (int a = 0; a < NUM_MOUSE_ACTION; ++a) {

View file

@ -43,6 +43,8 @@ OBClient::OBClient(int screen, Window window)
_focused = false; _focused = false;
// not a transient by default of course // not a transient by default of course
_transient_for = 0; _transient_for = 0;
// pick a layer to start from
_layer = Layer_Normal;
getArea(); getArea();
getDesktop(); getDesktop();

View file

@ -13,7 +13,7 @@
#include "otk/property.hh" #include "otk/property.hh"
#include "otk/display.hh" #include "otk/display.hh"
#include "otk/assassin.hh" #include "otk/assassin.hh"
#include "otk/util.hh" // TEMPORARY #include "otk/util.hh"
extern "C" { extern "C" {
#include <X11/cursorfont.h> #include <X11/cursorfont.h>
@ -202,7 +202,7 @@ Openbox::~Openbox()
if (!_restart_prog.empty()) { if (!_restart_prog.empty()) {
const std::string &dstr = const std::string &dstr =
otk::OBDisplay::screenInfo(first_screen)->displayString(); 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); execlp(_restart_prog.c_str(), _restart_prog.c_str(), NULL);
perror(_restart_prog.c_str()); perror(_restart_prog.c_str());
} }
@ -381,23 +381,9 @@ void Openbox::setFocusedClient(OBClient *c)
void Openbox::execute(int screen, const std::string &bin) 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)) if (screen >= ScreenCount(otk::OBDisplay::display))
screen = 0; screen = 0;
const std::string &dstr = otk::bexec(bin, otk::OBDisplay::screenInfo(screen)->displayString());
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__
} }
} }

View file

@ -19,28 +19,17 @@ static PyObject *obdict = NULL;
void python_init(char *argv0) void python_init(char *argv0)
{ {
std::string path;
// start the python engine // start the python engine
//Py_SetProgramName(argv0); Py_SetProgramName(argv0);
//Py_Initialize(); Py_Initialize();
// initialize the C python module // initialize the C python module
//init_openbox(); init_openbox();
// include the openbox directories for python scripts in the sys path // include the openbox directories for python scripts in the sys path
// PyRun_SimpleString("import sys"); PyRun_SimpleString("import sys");
printf("SCRIPTDIR=%s\n", SCRIPTDIR); PyRun_SimpleString("sys.path.append('" SCRIPTDIR "')");
printf("1 getenv(DISPLAY)=%s\n", getenv("DISPLAY")); PyRun_SimpleString(const_cast<char*>(("sys.path.append('" +
path = "sys.path"; otk::expandTilde("~/.openbox/python") +
printf("2 getenv(DISPLAY)=%s\n", getenv("DISPLAY")); "')").c_str()));
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()));
// import the otk and openbox modules into the main namespace // import the otk and openbox modules into the main namespace
PyRun_SimpleString("from openbox import *;"); PyRun_SimpleString("from openbox import *;");
// set up convenience global variables // set up convenience global variables