all repos — openbox @ 0d00827947ef02749d44802613ca13df284e544f

openbox fork - make it a bit more like ryudo

src/openbox.i (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-

%module openbox

%{
#ifdef HAVE_CONFIG_H
#  include "../config.h"
#endif

#include "openbox.hh"
#include "screen.hh"
#include "client.hh"
#include "bindings.hh"
#include "actions.hh"
#include "python.hh"
#include "otk/display.hh"
%}

%include "stl.i"
//%include std_list.i
//%template(ClientList) std::list<OBClient*>;

%ignore ob::Openbox::instance;
%inline %{
  ob::Openbox *Openbox_instance() { return ob::Openbox::instance; }
%};

%{
namespace ob {
void python_callback(PyObject *func, MouseData *data)
{
  PyObject *arglist;
  PyObject *result;

  arglist = Py_BuildValue("(O)", SWIG_NewPointerObj((void *) data,
                                                    SWIGTYPE_p_ob__MouseData,
                                                    0));
  
  // call the callback
  result = PyEval_CallObject(func, arglist);
  if (!result || PyErr_Occurred()) {
    // an exception occured in the script, display it
    PyErr_Print();
  }

  Py_XDECREF(result);
  Py_DECREF(arglist);
}

void python_callback(PyObject *func, EventData *data)
{
  PyObject *arglist;
  PyObject *result;

  arglist = Py_BuildValue("(O)", SWIG_NewPointerObj((void *) data,
                                                    SWIGTYPE_p_ob__EventData,
                                                    0));
  
  // call the callback
  result = PyEval_CallObject(func, arglist);
  if (!result || PyErr_Occurred()) {
    // an exception occured in the script, display it
    PyErr_Print();
  }

  Py_XDECREF(result);
  Py_DECREF(arglist);
}

void python_callback(PyObject *func, KeyData *data)
{
  PyObject *arglist;
  PyObject *result;

  arglist = Py_BuildValue("(O)", SWIG_NewPointerObj((void *) data,
                                                    SWIGTYPE_p_ob__KeyData,
                                                    0));
  
  // call the callback
  result = PyEval_CallObject(func, arglist);
  if (!result || PyErr_Occurred()) {
    // an exception occured in the script, display it
    PyErr_Print();
  }

  Py_XDECREF(result);
  Py_DECREF(arglist);
}

}
%}

%ignore ob::OBScreen::clients;
%{
  #include <iterator>
%}
%extend ob::OBScreen {
  OBClient *client(int i) {
    if (i >= (int)self->clients.size())
      return NULL;
    ob::OBClient::List::iterator it = self->clients.begin();
    std::advance(it,i);
    return *it;
  }
  int clientCount() const {
    return (int) self->clients.size();
  }
};

%import "../otk/eventdispatcher.hh"
%import "../otk/eventhandler.hh"
%import "widget.hh"
%import "actions.hh"

%include "../otk/point.hh"
%include "../otk/rect.hh"

%include "openbox.hh"
%include "screen.hh"
%include "client.hh"
%include "python.hh"

// for Mod1Mask etc
%include "X11/X.h"