use otk objects in the ob scripts by importing otk
This commit is contained in:
parent
5168a8add5
commit
5face4c6f3
12 changed files with 106 additions and 148 deletions
|
@ -1,4 +1,5 @@
|
|||
buttonsdir = $(pkgdatadir)/buttons
|
||||
scriptdir = $(libdir)/openbox/python
|
||||
|
||||
CXXFLAGS=$(XFT_CFLAGS) $(PYTHON_CFLAGS) @CXXFLAGS@ \
|
||||
-DBUTTONSDIR=\"$(buttonsdir)\"
|
||||
|
@ -6,7 +7,7 @@ CXXFLAGS=$(XFT_CFLAGS) $(PYTHON_CFLAGS) @CXXFLAGS@ \
|
|||
INCLUDES= -I../src
|
||||
|
||||
#noinst_LIBRARIES=libotk.a
|
||||
noinst_LTLIBRARIES=libotk.la
|
||||
lib_LTLIBRARIES=libotk.la
|
||||
|
||||
libotk_la_SOURCES=rendercontrol.cc truerendercontrol.cc surface.cc \
|
||||
renderstyle.cc rendercolor.cc \
|
||||
|
@ -15,13 +16,17 @@ libotk_la_SOURCES=rendercontrol.cc truerendercontrol.cc surface.cc \
|
|||
timer.cc \
|
||||
configuration.cc util.cc widget.cc focuswidget.cc \
|
||||
button.cc eventhandler.cc eventdispatcher.cc ustring.cc \
|
||||
label.cc focuslabel.cc application.cc appwidget.cc
|
||||
# otk_wrap.cc
|
||||
label.cc focuslabel.cc application.cc appwidget.cc \
|
||||
otk_wrap.cc
|
||||
|
||||
libotk_la_LDFLAGS = $(XFT_LIBS) $(PYTHON_LIBS) @LIBS@
|
||||
|
||||
MAINTAINERCLEANFILES= Makefile.in
|
||||
|
||||
script_DATA = otk.py
|
||||
|
||||
EXTRA_DIST = $(script_DATA)
|
||||
|
||||
distclean-local:
|
||||
rm -f *\~ *.orig *.rej .\#*
|
||||
|
||||
|
@ -31,68 +36,10 @@ otk_test: libotk.la otk_test.cc
|
|||
rendertest: libotk.la rendertest.cc
|
||||
$(CXX) $(CXXFLAGS) -DHAVE_CONFIG_H -I. -I. -I.. -I../src $(XFT_CFLAGS) -Wall -W -pedantic -DNDEBUG -g -O2 -o $@ rendertest.cc $(XFT_LIBS) .libs/libotk.al @LIBS@
|
||||
|
||||
#otk.i: $(wildcard *.hh)
|
||||
# touch $@
|
||||
otk.i: $(wildcard *.hh)
|
||||
touch $@
|
||||
|
||||
#otk_wrap.cc: otk.i
|
||||
# swig $(filter -I%,$(CXXFLAGS)) -python -shadow -c++ -o $@ $<
|
||||
%_wrap.cc: %.i
|
||||
swig -c $(filter -I%,$(CXXFLAGS)) -python -shadow -c++ -nodefault -o $@ $<
|
||||
|
||||
# local dependencies
|
||||
application.o: application.cc application.hh eventdispatcher.hh \
|
||||
eventhandler.hh display.hh configuration.hh \
|
||||
timer.hh image.hh color.hh screeninfo.hh rect.hh \
|
||||
point.hh style.hh font.hh texture.hh util.hh widget.hh
|
||||
appwidget.o: appwidget.cc appwidget.hh widget.hh rect.hh point.hh \
|
||||
texture.hh color.hh util.hh style.hh font.hh image.hh screeninfo.hh \
|
||||
timer.hh configuration.hh eventdispatcher.hh eventhandler.hh \
|
||||
application.hh display.hh
|
||||
button.o: button.cc button.hh focuslabel.hh focuswidget.hh widget.hh \
|
||||
rect.hh point.hh texture.hh color.hh util.hh style.hh font.hh \
|
||||
image.hh screeninfo.hh timer.hh configuration.hh eventdispatcher.hh \
|
||||
eventhandler.hh application.hh display.hh
|
||||
color.o: color.cc color.hh display.hh screeninfo.hh rect.hh point.hh
|
||||
configuration.o: configuration.cc configuration.hh util.hh
|
||||
eventdispatcher.o: eventdispatcher.cc eventdispatcher.hh \
|
||||
eventhandler.hh display.hh
|
||||
eventhandler.o: eventhandler.cc eventhandler.hh
|
||||
focuslabel.o: focuslabel.cc focuslabel.hh focuswidget.hh widget.hh \
|
||||
rect.hh point.hh texture.hh color.hh util.hh style.hh font.hh \
|
||||
image.hh screeninfo.hh timer.hh configuration.hh eventdispatcher.hh \
|
||||
eventhandler.hh application.hh display.hh
|
||||
focuswidget.o: focuswidget.cc focuswidget.hh widget.hh rect.hh \
|
||||
point.hh texture.hh color.hh util.hh style.hh font.hh image.hh \
|
||||
screeninfo.hh timer.hh configuration.hh eventdispatcher.hh \
|
||||
eventhandler.hh application.hh display.hh
|
||||
font.o: font.cc font.hh util.hh display.hh color.hh screeninfo.hh \
|
||||
rect.hh point.hh
|
||||
gccache.o: gccache.cc gccache.hh display.hh color.hh assassin.hh \
|
||||
screeninfo.hh rect.hh point.hh
|
||||
image.o: image.cc display.hh gccache.hh color.hh image.hh \
|
||||
screeninfo.hh rect.hh point.hh timer.hh texture.hh util.hh
|
||||
imagecontrol.o: imagecontrol.cc display.hh color.hh image.hh \
|
||||
screeninfo.hh rect.hh point.hh timer.hh texture.hh util.hh
|
||||
label.o: label.cc label.hh widget.hh rect.hh point.hh texture.hh \
|
||||
color.hh util.hh style.hh font.hh image.hh screeninfo.hh timer.hh \
|
||||
configuration.hh eventdispatcher.hh eventhandler.hh application.hh \
|
||||
display.hh
|
||||
otk_test.o: otk_test.cc application.hh eventdispatcher.hh \
|
||||
eventhandler.hh display.hh configuration.hh \
|
||||
timer.hh image.hh color.hh screeninfo.hh rect.hh \
|
||||
point.hh style.hh font.hh texture.hh util.hh focuswidget.hh widget.hh \
|
||||
appwidget.hh button.hh focuslabel.hh
|
||||
property.o: property.cc property.hh screeninfo.hh rect.hh point.hh \
|
||||
display.hh
|
||||
rect.o: rect.cc rect.hh point.hh
|
||||
screeninfo.o: screeninfo.cc screeninfo.hh rect.hh point.hh display.hh \
|
||||
util.hh
|
||||
style.o: style.cc display.hh util.hh style.hh color.hh font.hh \
|
||||
texture.hh image.hh screeninfo.hh rect.hh point.hh timer.hh \
|
||||
configuration.hh
|
||||
texture.o: texture.cc texture.hh color.hh util.hh display.hh image.hh \
|
||||
screeninfo.hh rect.hh point.hh timer.hh
|
||||
timer.o: timer.cc timer.hh
|
||||
util.o: util.cc util.hh
|
||||
widget.o: widget.cc widget.hh rect.hh point.hh texture.hh color.hh \
|
||||
util.hh style.hh font.hh image.hh screeninfo.hh timer.hh \
|
||||
configuration.hh eventdispatcher.hh eventhandler.hh application.hh \
|
||||
display.hh assassin.hh
|
||||
|
|
43
otk/otk.i
43
otk/otk.i
|
@ -14,35 +14,40 @@
|
|||
//%include std_list.i
|
||||
%include "ustring.i"
|
||||
|
||||
%ignore otk::OBDisplay::display;
|
||||
%ignore otk::display;
|
||||
%inline %{
|
||||
Display *OBDisplay_display() { return otk::OBDisplay::display; }
|
||||
otk::Display *Display_instance() { return otk::display; }
|
||||
%};
|
||||
|
||||
%ignore otk::Property::atoms;
|
||||
%inline %{
|
||||
const otk::Atoms& Property_atoms() { return otk::Property::atoms; }
|
||||
%};
|
||||
|
||||
namespace otk {
|
||||
%rename(setValue_bool) Configuration::setValue(std::string const &,bool);
|
||||
/*%rename(setValue_bool) Configuration::setValue(std::string const &,bool);
|
||||
%rename(setValue_unsigned) Configuration::setValue(const std::string &, unsigned int);
|
||||
%rename(setValue_long) Configuration::setValue(const std::string &, long);
|
||||
%rename(setValue_unsignedlong) Configuration::setValue(const std::string &, unsigned long);
|
||||
%rename(setValue_string) Configuration::setValue(const std::string &, const std::string &);
|
||||
%rename(setValue_charptr) Configuration::setValue(const std::string &, const char *);
|
||||
%rename(setValue_charptr) Configuration::setValue(const std::string &, const char *);*/
|
||||
|
||||
%rename(itostring_unsigned) itostring(unsigned int);
|
||||
%rename(itostring_long) itostring(long);
|
||||
%rename(itostring_unsigned_long) itostring(unsigned long);
|
||||
|
||||
// these are needed for guile, but not needed for python!
|
||||
%rename(equals) BColor::operator==;
|
||||
%rename(equals) Rect::operator==;
|
||||
%rename(equals) BTexture::operator==;
|
||||
%ignore BColor::operator!=;
|
||||
%ignore BTexture::operator!=;
|
||||
//%rename(equals) BColor::operator==;
|
||||
//%rename(equals) Rect::operator==;
|
||||
//%rename(equals) BTexture::operator==;
|
||||
//%ignore BColor::operator!=;
|
||||
//%ignore BTexture::operator!=;
|
||||
%ignore Rect::operator!=;
|
||||
%ignore Rect::operator|;
|
||||
%ignore Rect::operator|=;
|
||||
%ignore Rect::operator&;
|
||||
%ignore Rect::operator&=;
|
||||
%ignore OBTimer::operator<;
|
||||
//%ignore OBTimer::operator<;
|
||||
%ignore TimerLessThan;
|
||||
|
||||
/*
|
||||
|
@ -52,8 +57,13 @@ namespace otk {
|
|||
*/
|
||||
}
|
||||
|
||||
%include "eventdispatcher.hh"
|
||||
%include "eventhandler.hh"
|
||||
%include "eventdispatcher.hh"
|
||||
%include "point.hh"
|
||||
%include "rect.hh"
|
||||
%include "rendercolor.hh"
|
||||
%include "rendertexture.hh"
|
||||
%include "renderstyle.hh"
|
||||
%include "widget.hh"
|
||||
%include "focuswidget.hh"
|
||||
%include "focuslabel.hh"
|
||||
|
@ -61,23 +71,16 @@ namespace otk {
|
|||
%include "application.hh"
|
||||
%include "assassin.hh"
|
||||
%include "button.hh"
|
||||
%include "color.hh"
|
||||
%include "configuration.hh"
|
||||
//%include "configuration.hh"
|
||||
%include "display.hh"
|
||||
%include "font.hh"
|
||||
%include "gccache.hh"
|
||||
%include "image.hh"
|
||||
%include "rendercontrol.hh"
|
||||
%include "label.hh"
|
||||
%include "point.hh"
|
||||
%include "property.hh"
|
||||
%include "rect.hh"
|
||||
%include "screeninfo.hh"
|
||||
%include "strut.hh"
|
||||
%include "style.hh"
|
||||
%include "texture.hh"
|
||||
%include "timer.hh"
|
||||
%include "util.hh"
|
||||
%include "widget.hh"
|
||||
|
||||
// for Mod1Mask etc
|
||||
%include "X11/X.h"
|
||||
|
|
|
@ -10,8 +10,6 @@ extern "C" {
|
|||
|
||||
namespace otk {
|
||||
|
||||
class RenderColor {
|
||||
public:
|
||||
struct RGB {
|
||||
int r;
|
||||
int g;
|
||||
|
@ -24,6 +22,7 @@ public:
|
|||
b((color) & 0xff) {}
|
||||
};
|
||||
|
||||
class RenderColor {
|
||||
private:
|
||||
struct CacheItem {
|
||||
GC gc;
|
||||
|
|
|
@ -70,10 +70,10 @@ public:
|
|||
RenderTexture(int screen,
|
||||
bool parent_relative, ReliefType relief, BevelType bevel,
|
||||
bool border, GradientType gradient, bool interlaced,
|
||||
const RenderColor::RGB &color,
|
||||
const RenderColor::RGB &secondary_color,
|
||||
const RenderColor::RGB &border_color,
|
||||
const RenderColor::RGB &interlace_color)
|
||||
const RGB &color,
|
||||
const RGB &secondary_color,
|
||||
const RGB &border_color,
|
||||
const RGB &interlace_color)
|
||||
: _screen(screen),
|
||||
_parent_relative(parent_relative),
|
||||
_relief(relief),
|
||||
|
|
|
@ -1,35 +1,45 @@
|
|||
###########################################################################
|
||||
############################################################################
|
||||
### Functions that can be used as callbacks for mouse/keyboard bindings ###
|
||||
###########################################################################
|
||||
############################################################################
|
||||
|
||||
#############################################################################
|
||||
### Options that can be modified to change the default hooks' behaviors. ###
|
||||
### ###
|
||||
# resize_nearest - 1 to resize from the corner nearest where the mouse ###
|
||||
### is, 0 to resize always from the bottom right corner. ###
|
||||
resize_nearest = 1 ###
|
||||
### ###
|
||||
#############################################################################
|
||||
|
||||
import ob
|
||||
import otk
|
||||
|
||||
def state_above(data, add=2):
|
||||
"""Toggles, adds or removes the 'above' state on a window."""
|
||||
if not data.client: return
|
||||
ob.send_client_msg(ob.display.screenInfo(data.screen).rootWindow(),
|
||||
ob.Property_atoms().net_wm_state, data.client.window(),
|
||||
add, ob.Property_atoms().net_wm_state_above)
|
||||
ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(),
|
||||
otk.Property_atoms().net_wm_state, data.client.window(),
|
||||
add, otk.Property_atoms().net_wm_state_above)
|
||||
|
||||
def state_below(data, add=2):
|
||||
"""Toggles, adds or removes the 'below' state on a window."""
|
||||
if not data.client: return
|
||||
ob.send_client_msg(ob.display.screenInfo(data.screen).rootWindow(),
|
||||
ob.Property_atoms().net_wm_state, data.client.window(),
|
||||
add, ob.Property_atoms().net_wm_state_below)
|
||||
ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(),
|
||||
otk.Property_atoms().net_wm_state, data.client.window(),
|
||||
add, otk.Property_atoms().net_wm_state_below)
|
||||
|
||||
def state_shaded(data, add=2):
|
||||
"""Toggles, adds or removes the 'shaded' state on a window."""
|
||||
if not data.client: return
|
||||
ob.send_client_msg(ob.display.screenInfo(data.screen).rootWindow(),
|
||||
ob.Property_atoms().net_wm_state, data.client.window(),
|
||||
add, ob.Property_atoms().net_wm_state_shaded)
|
||||
ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(),
|
||||
otk.Property_atoms().net_wm_state, data.client.window(),
|
||||
add, otk.Property_atoms().net_wm_state_shaded)
|
||||
|
||||
def iconify(data):
|
||||
"""Iconifies the window on which the event occured"""
|
||||
if not data.client: return
|
||||
ob.send_client_msg(ob.display.screenInfo(data.screen).rootWindow(),
|
||||
ob.Property_atoms().wm_change_state,
|
||||
ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(),
|
||||
otk.Property_atoms().wm_change_state,
|
||||
data.client.window(), 3) # IconicState
|
||||
|
||||
def restore(data):
|
||||
|
@ -37,15 +47,15 @@ def restore(data):
|
|||
if. If you want to focus the window too, it is recommended that you
|
||||
use the activate() function."""
|
||||
if not data.client: return
|
||||
ob.send_client_msg(ob.display.screenInfo(data.screen).rootWindow(),
|
||||
ob.Property_atoms().wm_change_state,
|
||||
ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(),
|
||||
otk.Property_atoms().wm_change_state,
|
||||
data.client.window(), 1) # NormalState
|
||||
|
||||
def close(data):
|
||||
"""Closes the window on which the event occured"""
|
||||
if not data.client: return
|
||||
ob.send_client_msg(ob.display.screenInfo(data.screen).rootWindow(),
|
||||
ob.Property_atoms().net_close_window,
|
||||
ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(),
|
||||
otk.Property_atoms().net_close_window,
|
||||
data.client.window(), 0)
|
||||
|
||||
def focus(data):
|
||||
|
@ -83,23 +93,23 @@ def resize(data):
|
|||
|
||||
# pick a corner to anchor
|
||||
if not (resize_nearest or data.context == MC_Grip):
|
||||
corner = Client.TopLeft
|
||||
corner = ob.Client.TopLeft
|
||||
else:
|
||||
x = px - data.press_clientx
|
||||
y = py - data.press_clienty
|
||||
if y < data.press_clientheight / 2:
|
||||
if x < data.press_clientwidth / 2:
|
||||
corner = Client.BottomRight
|
||||
corner = ob.Client.BottomRight
|
||||
dx *= -1
|
||||
else:
|
||||
corner = Client.BottomLeft
|
||||
corner = ob.Client.BottomLeft
|
||||
dy *= -1
|
||||
else:
|
||||
if x < data.press_clientwidth / 2:
|
||||
corner = Client.TopRight
|
||||
corner = ob.Client.TopRight
|
||||
dx *= -1
|
||||
else:
|
||||
corner = Client.TopLeft
|
||||
corner = ob.Client.TopLeft
|
||||
|
||||
data.client.resize(corner,
|
||||
data.press_clientwidth + dx,
|
||||
|
@ -133,8 +143,8 @@ def unshade(data):
|
|||
|
||||
def change_desktop(data, num):
|
||||
"""Switches to a specified desktop"""
|
||||
root = ob.display.screenInfo(data.screen).rootWindow()
|
||||
ob.send_client_msg(root, ob.Property_atoms().net_current_desktop,
|
||||
root = otk.display.screenInfo(data.screen).rootWindow()
|
||||
ob.send_client_msg(root, otk.Property_atoms().net_current_desktop,
|
||||
root, num)
|
||||
|
||||
def next_desktop(data, no_wrap=0):
|
||||
|
@ -164,8 +174,8 @@ def prev_desktop(data, no_wrap=0):
|
|||
def send_to_desktop(data, num):
|
||||
"""Sends a client to a specified desktop"""
|
||||
if not data.client: return
|
||||
ob.send_client_msg(ob.display.screenInfo(data.screen).rootWindow(),
|
||||
ob.Property_atoms().net_wm_desktop,
|
||||
ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(),
|
||||
otk.Property_atoms().net_wm_desktop,
|
||||
data.client.window(),num)
|
||||
|
||||
def toggle_all_desktops(data):
|
||||
|
|
|
@ -30,15 +30,5 @@ desktop_names = ["one", "two", "three", "four", "five", "six", "seven", \
|
|||
# between.
|
||||
number_of_desktops = 4
|
||||
|
||||
#############################################################################
|
||||
### Options that can be modified by the user to change the default hooks' ###
|
||||
### behaviors. ###
|
||||
#############################################################################
|
||||
|
||||
# resize_nearest - 1 to resize from the corner nearest where the mouse is, 0
|
||||
# to resize always from the bottom right corner.
|
||||
resize_nearest = 1
|
||||
|
||||
|
||||
|
||||
print "Loaded config.py"
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
### ob.EventAction.PlaceWindow event. ###
|
||||
############################################################################
|
||||
|
||||
import otk
|
||||
import ob
|
||||
import random
|
||||
|
||||
|
@ -13,6 +14,8 @@ def random(data):
|
|||
client_area = data.client.area()
|
||||
frame_size = data.client.frame.size()
|
||||
screen_area = ob.openbox.screen(data.screen).area()
|
||||
print str(screen_area.x()) + " " + str(screen_area.y()) + " " + \
|
||||
str(screen_area.width()) + " " + str(screen_area.height())
|
||||
width = screen_area.width() - (client_area.width() +
|
||||
frame_size.left + frame_size.right)
|
||||
height = screen_area.height() - (client_area.height() +
|
||||
|
|
|
@ -15,7 +15,7 @@ INCLUDES= -I..
|
|||
|
||||
bin_PROGRAMS= openbox3
|
||||
|
||||
openbox3_LDADD=-L../otk -lotk @LIBINTL@
|
||||
openbox3_LDADD=-L../otk -lotk -lswigpy @LIBINTL@
|
||||
|
||||
openbox3_SOURCES= actions.cc client.cc frame.cc openbox.cc screen.cc \
|
||||
main.cc backgroundwidget.cc labelwidget.cc \
|
||||
|
@ -35,7 +35,7 @@ distclean-local:
|
|||
openbox.i: openbox.hh screen.hh client.hh python.hh frame.hh
|
||||
touch $@
|
||||
|
||||
openbox_wrap.cc: openbox.i
|
||||
swig -I../otk $(filter -I%,$(CXXFLAGS)) -python -shadow -c++ -nodefault -o $@ $<
|
||||
%_wrap.cc: %.i
|
||||
swig -c -I../otk $(filter -I%,$(CXXFLAGS)) -python -shadow -c++ -nodefault -o $@ $<
|
||||
|
||||
# local dependencies
|
||||
|
|
|
@ -110,6 +110,7 @@ void python_callback(PyObject *func, KeyData *data)
|
|||
}
|
||||
};
|
||||
|
||||
/*
|
||||
%include "../otk/ustring.i"
|
||||
|
||||
%ignore otk::display;
|
||||
|
@ -133,6 +134,9 @@ void python_callback(PyObject *func, KeyData *data)
|
|||
%include "../otk/eventdispatcher.hh"
|
||||
|
||||
%import "../otk/widget.hh"
|
||||
*/
|
||||
%import "../otk/otk.i"
|
||||
|
||||
%import "widgetbase.hh"
|
||||
%import "actions.hh"
|
||||
|
||||
|
|
|
@ -9,8 +9,9 @@
|
|||
#include "otk/util.hh"
|
||||
|
||||
extern "C" {
|
||||
// The initializer in openbox_wrap.cc
|
||||
// The initializer in openbox_wrap.cc / otk_wrap.cc
|
||||
extern void init_ob(void);
|
||||
extern void init_otk(void);
|
||||
}
|
||||
|
||||
namespace ob {
|
||||
|
@ -23,6 +24,7 @@ void python_init(char *argv0)
|
|||
Py_SetProgramName(argv0);
|
||||
Py_Initialize();
|
||||
// initialize the C python module
|
||||
init_otk();
|
||||
init_ob();
|
||||
// include the openbox directories for python scripts in the sys path
|
||||
PyRun_SimpleString("import sys");
|
||||
|
@ -30,10 +32,10 @@ void python_init(char *argv0)
|
|||
otk::expandTilde("~/.openbox/python") +
|
||||
"')").c_str()));
|
||||
PyRun_SimpleString("sys.path.append('" SCRIPTDIR "')");
|
||||
PyRun_SimpleString("import ob;");
|
||||
PyRun_SimpleString("import ob; import otk;");
|
||||
// set up convenience global variables
|
||||
PyRun_SimpleString("ob.openbox = ob.Openbox_instance()");
|
||||
PyRun_SimpleString("ob.display = ob.Display_instance()");
|
||||
PyRun_SimpleString("otk.display = otk.Display_instance()");
|
||||
|
||||
// set up access to the python global variables
|
||||
PyObject *obmodule = PyImport_AddModule("config");
|
||||
|
|
|
@ -261,7 +261,7 @@ void Screen::calcArea()
|
|||
#endif // XINERAMA
|
||||
*/
|
||||
|
||||
if (old_area != _area)
|
||||
//if (old_area != _area)
|
||||
// XXX: re-maximize windows
|
||||
|
||||
changeWorkArea();
|
||||
|
|
Loading…
Reference in a new issue