Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

ob Namespace Reference


Detailed Description

The namespace containing the Openbox window manager application


Compounds

class  Actions
 The action interface for user-available actions. More...

struct  ButtonReleaseAction
struct  ButtonPressAction
class  BackgroundWidget
struct  Binding
class  Bindings
struct  ButtonBinding
class  ButtonWidget
class  Client
 Maintains the state of a client window. More...

struct  Cursors
 Mouse cursors used throughout Openbox. More...

struct  EventAction
class  EventData
class  Frame
 Holds and decorates a frame around an Client (client window). More...

struct  KeyAction
struct  KeyBindingTree
struct  KeyContext
class  KeyData
class  LabelWidget
struct  MouseAction
struct  MouseContext
class  MouseData
struct  MwmHints
 The MWM Hints as retrieved from the window property. More...

class  Openbox
 The main class for the Openbox window manager. More...

class  Screen
 Manages a single screen. More...

class  WidgetBase

Typedefs

typedef std::list< PyObject * > CallbackList
typedef ob::Binding Binding
typedef ob::KeyBindingTree KeyBindingTree

Functions

bool buttonvalue (const std::string &button, unsigned int *val)
bool modvalue (const std::string &mod, unsigned int *val)
void destroytree (KeyBindingTree *tree)
void remove_branch (KeyBindingTree *first)
void python_init (char *argv0)
void python_destroy ()
bool python_exec (const std::string &path)
bool python_get_long (const char *name, long *value)
bool python_get_string (const char *name, otk::ustring *value)
bool python_get_stringlist (const char *name, std::vector< otk::ustring > *value)
PyObject * mbind (const std::string &button, ob::MouseContext::MC context, ob::MouseAction::MA action, PyObject *func)
PyObject * ebind (ob::EventAction::EA action, PyObject *func)
PyObject * kgrab (int screen, PyObject *func)
PyObject * kungrab ()
PyObject * mgrab (int screen)
PyObject * mungrab ()
PyObject * kbind (PyObject *keylist, ob::KeyContext::KC context, PyObject *func)
void kunbind_all ()
void set_reset_key (const std::string &key)
PyObject * send_client_msg (Window target, Atom type, Window about, long data, long data1, long data2, long data3, long data4)
void execute (const std::string &bin, int screen)
void python_callback (PyObject *func, MouseData *data)
void python_callback (PyObject *func, EventData *data)
void python_callback (PyObject *func, KeyData *data)

Variables

Openboxopenbox = (Openbox *) 0
 The single instance of the Openbox class for the application.

PyObject * obdict = NULL


Typedef Documentation

typedef struct ob::Binding ob::Binding
 

typedef std::list<PyObject *> ob::CallbackList
 

Definition at line 25 of file bindings.hh.

typedef struct ob::KeyBindingTree ob::KeyBindingTree
 

Referenced by ob::Bindings::buildtree().


Function Documentation

bool buttonvalue const std::string &    button,
unsigned int *    val
[static]
 

Definition at line 26 of file bindings.cc.

Referenced by ob::Bindings::translate().

00027 {
00028   if (button == "Left" || button == "1" || button == "Button1") {
00029     *val |= Button1;
00030   } else if (button == "Middle" || button == "2" || button == "Button2") {
00031     *val |= Button2;
00032   } else if (button == "Right" || button == "3" || button == "Button3") {
00033     *val |= Button3;
00034   } else if (button == "Up" || button == "4" || button == "Button4") {
00035     *val |= Button4;
00036   } else if (button == "Down" || button == "5" || button == "Button5") {
00037     *val |= Button5;
00038   } else
00039     return false;
00040   return true;
00041 }

void destroytree KeyBindingTree   tree [static]
 

Definition at line 111 of file bindings.cc.

References ob::KeyBindingTree::first_child.

Referenced by ob::Bindings::addKey(), and ob::Bindings::buildtree().

00112 {
00113   while (tree) {
00114     KeyBindingTree *c = tree->first_child;
00115     delete tree;
00116     tree = c;
00117   }
00118 }

PyObject * ob::ebind ob::EventAction::EA    action,
PyObject *    func
 

Definition at line 121 of file python.cc.

00122 {
00123   if (!PyCallable_Check(func)) {
00124     PyErr_SetString(PyExc_TypeError, "Invalid callback function.");
00125     return NULL;
00126   }
00127   
00128   if (!ob::openbox->bindings()->addEvent(action, func)) {
00129     PyErr_SetString(PyExc_RuntimeError,"Unable to add binding.");
00130     return NULL;
00131   }
00132   Py_INCREF(Py_None); return Py_None;
00133 }

void ob::execute const std::string &    bin,
int    screen = 0
 

Definition at line 262 of file python.cc.

References otk::bexec().

00263 {
00264   if (screen >= ScreenCount(**otk::display))
00265     screen = 0;
00266   otk::bexec(bin, otk::display->screenInfo(screen)->displayString());
00267 }

PyObject * ob::kbind PyObject *    keylist,
ob::KeyContext::KC    context,
PyObject *    func
 

Definition at line 170 of file python.cc.

References ob::Bindings::StringVect.

00171 {
00172   if (!PyCallable_Check(func)) {
00173     PyErr_SetString(PyExc_TypeError, "Invalid callback function.");
00174     return NULL;
00175   }
00176   if (!PyList_Check(keylist)) {
00177     PyErr_SetString(PyExc_TypeError, "Invalid keylist. Not a list.");
00178     return NULL;
00179   }
00180 
00181   ob::Bindings::StringVect vectkeylist;
00182   for (int i = 0, end = PyList_Size(keylist); i < end; ++i) {
00183     PyObject *str = PyList_GetItem(keylist, i);
00184     if (!PyString_Check(str)) {
00185       PyErr_SetString(PyExc_TypeError,
00186                      "Invalid keylist. It must contain only strings.");
00187       return NULL;
00188     }
00189     vectkeylist.push_back(PyString_AsString(str));
00190   }
00191 
00192   (void)context; // XXX use this sometime!
00193   if (!ob::openbox->bindings()->addKey(vectkeylist, func)) {
00194     PyErr_SetString(PyExc_RuntimeError,"Unable to add binding.");
00195     return NULL;
00196   }
00197   Py_INCREF(Py_None); return Py_None;
00198 }

PyObject * ob::kgrab int    screen,
PyObject *    func
 

Definition at line 135 of file python.cc.

00136 {
00137   if (!PyCallable_Check(func)) {
00138     PyErr_SetString(PyExc_TypeError, "Invalid callback function.");
00139     return NULL;
00140   }
00141 
00142   if (!ob::openbox->bindings()->grabKeyboard(screen, func)) {
00143     PyErr_SetString(PyExc_RuntimeError,"Unable to grab keybaord.");
00144     return NULL;
00145   }
00146   Py_INCREF(Py_None); return Py_None;
00147 }

void kunbind_all  
 

Definition at line 231 of file python.cc.

00232 {
00233   ob::openbox->bindings()->removeAllKeys();
00234 }

PyObject * ob::kungrab  
 

Definition at line 149 of file python.cc.

00150 {
00151   ob::openbox->bindings()->ungrabKeyboard();
00152   Py_INCREF(Py_None); return Py_None;
00153 }

PyObject * ob::mbind const std::string &    button,
ob::MouseContext::MC    context,
ob::MouseAction::MA    action,
PyObject *    func
 

Definition at line 97 of file python.cc.

00099 {
00100   if (!PyCallable_Check(func)) {
00101     PyErr_SetString(PyExc_TypeError, "Invalid callback function.");
00102     return NULL;
00103   }
00104   if(context < 0 || context >= MouseContext::NUM_MOUSE_CONTEXT) {
00105     PyErr_SetString(PyExc_ValueError, "Invalid MouseContext");
00106     return NULL;
00107   }
00108   if(action < 0 || action >= MouseAction::NUM_MOUSE_ACTION) {
00109     PyErr_SetString(PyExc_ValueError, "Invalid MouseAction");
00110     return NULL;
00111   }
00112   
00113   if (!ob::openbox->bindings()->addButton(button, context,
00114                                           action, func)) {
00115     PyErr_SetString(PyExc_RuntimeError,"Unable to add binding.");
00116     return NULL;
00117   }
00118   Py_INCREF(Py_None); return Py_None;
00119 }

PyObject * ob::mgrab int    screen
 

Definition at line 155 of file python.cc.

00156 {
00157   if (!ob::openbox->bindings()->grabPointer(screen)) {
00158     PyErr_SetString(PyExc_RuntimeError,"Unable to grab pointer.");
00159     return NULL;
00160   }
00161   Py_INCREF(Py_None); return Py_None;
00162 }

bool modvalue const std::string &    mod,
unsigned int *    val
[static]
 

Definition at line 43 of file bindings.cc.

Referenced by ob::Bindings::translate().

00044 {
00045   if (mod == "C") {           // control
00046     *val |= ControlMask;
00047   } else if (mod == "S") {    // shift
00048     *val |= ShiftMask;
00049   } else if (mod == "A" ||    // alt/mod1
00050              mod == "M" ||
00051              mod == "Mod1" ||
00052              mod == "M1") {
00053     *val |= Mod1Mask;
00054   } else if (mod == "Mod2" ||   // mod2
00055              mod == "M2") {
00056     *val |= Mod2Mask;
00057   } else if (mod == "Mod3" ||   // mod3
00058              mod == "M3") {
00059     *val |= Mod3Mask;
00060   } else if (mod == "W" ||    // windows/mod4
00061              mod == "Mod4" ||
00062              mod == "M4") {
00063     *val |= Mod4Mask;
00064   } else if (mod == "Mod5" ||   // mod5
00065              mod == "M5") {
00066     *val |= Mod5Mask;
00067   } else {                    // invalid
00068     return false;
00069   }
00070   return true;
00071 }

PyObject * ob::mungrab  
 

Definition at line 164 of file python.cc.

00165 {
00166   ob::openbox->bindings()->ungrabPointer();
00167   Py_INCREF(Py_None); return Py_None;
00168 }

void python_callback PyObject *    func,
KeyData   data
 

void python_callback PyObject *    func,
EventData   data
 

void python_callback PyObject *    func,
MouseData   data
 

Referenced by ob::Bindings::fireButton(), ob::Bindings::fireEvent(), and ob::Bindings::fireKey().

void ob::python_destroy  
 

Definition at line 45 of file python.cc.

Referenced by ob::Openbox::~Openbox().

00046 {
00047   Py_Finalize();
00048 }

bool ob::python_exec const std::string &    path
 

Definition at line 50 of file python.cc.

Referenced by ob::Openbox::Openbox().

00051 {
00052   FILE *rcpyfd = fopen(path.c_str(), "r");
00053   if (!rcpyfd) {
00054     printf("Failed to load python file %s\n", path.c_str());
00055     return false;
00056   }
00057   PyRun_SimpleFile(rcpyfd, const_cast<char*>(path.c_str()));
00058   fclose(rcpyfd);
00059   return true;
00060 }

bool ob::python_get_long const char *    name,
long *    value
 

Definition at line 62 of file python.cc.

Referenced by ob::Actions::buttonReleaseHandler(), ob::Actions::motionHandler(), and ob::Screen::Screen().

00063 {
00064   PyObject *val = PyDict_GetItemString(obdict, const_cast<char*>(name));
00065   if (!(val && PyInt_Check(val))) return false;
00066   
00067   *value = PyInt_AsLong(val);
00068   return true;
00069 }

bool ob::python_get_string const char *    name,
otk::ustring   value
 

Definition at line 71 of file python.cc.

Referenced by ob::Frame::adjustSize().

00072 {
00073   PyObject *val = PyDict_GetItemString(obdict, const_cast<char*>(name));
00074   if (!(val && PyString_Check(val))) return false;
00075   
00076   *value = PyString_AsString(val);
00077   return true;
00078 }

bool ob::python_get_stringlist const char *    name,
std::vector< otk::ustring > *    value
 

Definition at line 80 of file python.cc.

Referenced by ob::Screen::Screen().

00081 {
00082   PyObject *val = PyDict_GetItemString(obdict, const_cast<char*>(name));
00083   if (!(val && PyList_Check(val))) return false;
00084 
00085   for (int i = 0, end = PyList_Size(val); i < end; ++i) {
00086     PyObject *str = PyList_GetItem(val, i);
00087     if (PyString_Check(str))
00088       value->push_back(PyString_AsString(str));
00089   }
00090   return true;
00091 }

void ob::python_init char *    argv0
 

Definition at line 21 of file python.cc.

References init_ob(), init_otk(), and obdict.

Referenced by ob::Openbox::Openbox().

00022 {
00023   // start the python engine
00024   Py_SetProgramName(argv0);
00025   Py_Initialize();
00026   // initialize the C python module
00027   init_otk();
00028   init_ob();
00029   // prepend the openbox directories for python scripts to the sys path
00030   PyRun_SimpleString("import sys");
00031   PyRun_SimpleString("sys.path.insert(0, '" SCRIPTDIR "')");
00032   PyRun_SimpleString(const_cast<char*>(("sys.path.insert(0, '" +
00033                                         otk::expandTilde("~/.openbox/python") +
00034                                         "')").c_str()));
00035   PyRun_SimpleString("import ob; import otk; import config;");
00036   // set up convenience global variables
00037   PyRun_SimpleString("ob.openbox = ob.Openbox_instance()");
00038   PyRun_SimpleString("otk.display = otk.Display_instance()");
00039 
00040   // set up access to the python global variables
00041   PyObject *obmodule = PyImport_AddModule("config");
00042   obdict = PyModule_GetDict(obmodule);
00043 }

void remove_branch KeyBindingTree   first [static]
 

Definition at line 314 of file bindings.cc.

References ob::KeyBindingTree::callbacks, ob::KeyBindingTree::first_child, and ob::KeyBindingTree::next_sibling.

Referenced by ob::Bindings::removeAllKeys().

00315 {
00316   KeyBindingTree *p = first;
00317 
00318   while (p) {
00319     if (p->first_child)
00320       remove_branch(p->first_child);
00321     KeyBindingTree *s = p->next_sibling;
00322     while(!p->callbacks.empty()) {
00323       Py_XDECREF(p->callbacks.front());
00324       p->callbacks.pop_front();
00325     }
00326     delete p;
00327     p = s;
00328   }
00329 }

PyObject * ob::send_client_msg Window    target,
Atom    type,
Window    about,
long    data,
long    data1 = 0,
long    data2 = 0,
long    data3 = 0,
long    data4 = 0
 

Definition at line 241 of file python.cc.

00244 {
00245   XEvent e;
00246   e.xclient.type = ClientMessage;
00247   e.xclient.format = 32;
00248   e.xclient.message_type = type;
00249   e.xclient.window = about;
00250   e.xclient.data.l[0] = data;
00251   e.xclient.data.l[1] = data1;
00252   e.xclient.data.l[2] = data2;
00253   e.xclient.data.l[3] = data3;
00254   e.xclient.data.l[4] = data4;
00255 
00256   XSendEvent(**otk::display, target, false,
00257              SubstructureRedirectMask | SubstructureNotifyMask,
00258              &e);
00259   Py_INCREF(Py_None); return Py_None;
00260 }

void ob::set_reset_key const std::string &    key
 

Definition at line 236 of file python.cc.

00237 {
00238   ob::openbox->bindings()->setResetKey(key);
00239 }


Variable Documentation

PyObject* ob::obdict = NULL [static]
 

Definition at line 19 of file python.cc.

Referenced by python_init().

Openbox * ob::openbox = (Openbox *) 0
 

The single instance of the Openbox class for the application.

Since this variable is globally available in the application, the Openbox class does not need to be passed around to any of the other classes.

Definition at line 50 of file openbox.cc.

Referenced by ob::Bindings::addButton(), ob::Actions::buttonPressHandler(), ob::Actions::buttonReleaseHandler(), ob::Client::calcLayer(), ob::Screen::changeDesktop(), ob::Client::Client(), ob::Client::clientMessageHandler(), ob::Client::configureRequestHandler(), ob::Client::destroyHandler(), ob::Actions::enterHandler(), ob::Bindings::fireKey(), ob::Client::fireUrgent(), ob::Client::focus(), ob::Client::focusHandler(), ob::Frame::Frame(), ob::Client::fullscreen(), ob::Client::getDesktop(), ob::Frame::grabClient(), ob::Bindings::grabKeyboard(), ob::Bindings::grabKeys(), ob::Bindings::grabPointer(), ob::Actions::insertPress(), ob::Actions::keyPressHandler(), ob::Actions::keyReleaseHandler(), ob::Actions::leaveHandler(), main(), ob::Screen::manageWindow(), ob::Screen::mapRequestHandler(), ob::Client::mapRequestHandler(), ob::Client::maximize(), ob::Actions::motionHandler(), ob::Openbox::Openbox(), ob::Bindings::removeAllButtons(), ob::Client::reparentHandler(), ob::Screen::Screen(), ob::Client::setDesktop(), ob::Client::setWMState(), ob::Openbox::signalHandler(), ob::Client::unfocus(), ob::Client::unfocusHandler(), ob::Screen::unmanageWindow(), ob::Client::unmapHandler(), ob::Client::updateStrut(), ob::Client::updateTransientFor(), ob::Client::~Client(), and ob::Screen::~Screen().


Generated on Tue Feb 4 23:00:11 2003 for Openbox by doxygen1.3-rc2