using python and swig for now.
This commit is contained in:
parent
3cf5a8b6dd
commit
5f78b51429
8 changed files with 118 additions and 40 deletions
|
@ -80,12 +80,18 @@ AC_CHECK_HEADER([python2.2/Python.h],
|
||||||
See http://www.python.org
|
See http://www.python.org
|
||||||
]))
|
]))
|
||||||
AC_CHECK_LIB([python2.2], [Py_Initialize],
|
AC_CHECK_LIB([python2.2], [Py_Initialize],
|
||||||
PYTHON_LDFLAGS="-lpython2.2 -Xlinker -export-dynamic",
|
PYTHON_LDFLAGS="-lpython2.2",
|
||||||
|
dnl -Xlinker -export-dynamic",
|
||||||
AC_MSG_ERROR([Openbox requires the use of Python 2.2. This is its secret special formula for extreme sexiness.
|
AC_MSG_ERROR([Openbox requires the use of Python 2.2. This is its secret special formula for extreme sexiness.
|
||||||
See http://www.python.org
|
See http://www.python.org
|
||||||
]))
|
]))
|
||||||
|
PYTHON_CFLAGS="-I/usr/include/python2.2 -I/usr/gwar/include/python2.2"
|
||||||
|
AC_SUBST([PYTHON_CFLAGS])
|
||||||
AC_SUBST([PYTHON_LDFLAGS])
|
AC_SUBST([PYTHON_LDFLAGS])
|
||||||
|
|
||||||
|
dnl Check for guile
|
||||||
|
GUILE_FLAGS
|
||||||
|
|
||||||
dnl Check for X headers and libraries
|
dnl Check for X headers and libraries
|
||||||
AC_PATH_X
|
AC_PATH_X
|
||||||
AC_PATH_XTRA
|
AC_PATH_XTRA
|
||||||
|
|
|
@ -2,12 +2,12 @@ localedir=$(datadir)/locale
|
||||||
DEFAULT_MENU=$(pkgdatadir)/menu
|
DEFAULT_MENU=$(pkgdatadir)/menu
|
||||||
DEFAULT_STYLE=$(pkgdatadir)/styles/mbdtex
|
DEFAULT_STYLE=$(pkgdatadir)/styles/mbdtex
|
||||||
|
|
||||||
CPPFLAGS=$(XFT_CFLAGS) @CPPFLAGS@ \
|
CPPFLAGS=$(XFT_CFLAGS) $(GUILE_CFLAGS) $(PYTHON_CFLAGS) @CPPFLAGS@ \
|
||||||
-DDEFAULTMENU=\"$(DEFAULT_MENU)\" \
|
-DDEFAULTMENU=\"$(DEFAULT_MENU)\" \
|
||||||
-DDEFAULTSTYLE=\"$(DEFAULT_STYLE)\" \
|
-DDEFAULTSTYLE=\"$(DEFAULT_STYLE)\" \
|
||||||
-DLOCALEDIR=\"$(localedir)\"
|
-DLOCALEDIR=\"$(localedir)\"
|
||||||
|
|
||||||
LIBS=$(XFT_LIBS) $(PYTHON_LDFLAGS) @LIBS@
|
LIBS=$(XFT_LIBS) $(GUILE_LDFLAGS) $(PYTHON_LDFLAGS) @LIBS@
|
||||||
|
|
||||||
INCLUDES= -I../otk
|
INCLUDES= -I../otk
|
||||||
|
|
||||||
|
@ -17,11 +17,19 @@ openbox3_LDADD=../otk/libotk.a @LIBINTL@
|
||||||
|
|
||||||
openbox3_SOURCES= actions.cc client.cc frame.cc openbox.cc screen.cc \
|
openbox3_SOURCES= actions.cc client.cc frame.cc openbox.cc screen.cc \
|
||||||
main.cc rootwindow.cc backgroundwidget.cc labelwidget.cc \
|
main.cc rootwindow.cc backgroundwidget.cc labelwidget.cc \
|
||||||
buttonwidget.cc python.cc
|
buttonwidget.cc openbox_wrap.cc
|
||||||
|
# guile.cc
|
||||||
|
|
||||||
MAINTAINERCLEANFILES= Makefile.in
|
MAINTAINERCLEANFILES= Makefile.in
|
||||||
|
|
||||||
distclean-local:
|
distclean-local:
|
||||||
rm -f *\~ *.orig *.rej .\#*
|
rm -f *\~ *.orig *.rej .\#*
|
||||||
|
|
||||||
|
openbox.i: openbox.hh screen.hh client.hh
|
||||||
|
touch openbox.i
|
||||||
|
|
||||||
|
openbox_wrap.cc: openbox.i
|
||||||
|
swig -python -c++ -nodefault -module openbox -o openbox_wrap.cc openbox.i
|
||||||
|
# swig -guile -c++ -nodefault -o openbox_wrap.cc openbox.i
|
||||||
|
|
||||||
# local dependencies
|
# local dependencies
|
||||||
|
|
|
@ -27,6 +27,20 @@ namespace ob {
|
||||||
|
|
||||||
class OBFrame;
|
class OBFrame;
|
||||||
|
|
||||||
|
//! The MWM Hints as retrieved from the window property
|
||||||
|
/*!
|
||||||
|
This structure only contains 3 elements, even though the Motif 2.0
|
||||||
|
structure contains 5. We only use the first 3, so that is all gets defined.
|
||||||
|
*/
|
||||||
|
struct MwmHints {
|
||||||
|
//! The number of elements in the OBClient::MwmHints struct
|
||||||
|
static const unsigned int elements = 3;
|
||||||
|
unsigned long flags; //!< A bitmask of OBClient::MwmFlags values
|
||||||
|
unsigned long functions; //!< A bitmask of OBClient::MwmFunctions values
|
||||||
|
unsigned long decorations;//!< A bitmask of OBClient::MwmDecorations values
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
//! Maintains the state of a client window.
|
//! Maintains the state of a client window.
|
||||||
/*!
|
/*!
|
||||||
OBClient maintains the state of a client window. The state consists of the
|
OBClient maintains the state of a client window. The state consists of the
|
||||||
|
@ -111,19 +125,6 @@ public:
|
||||||
//! Holds a bitmask of OBClient::Decoration values
|
//! Holds a bitmask of OBClient::Decoration values
|
||||||
typedef unsigned char DecorationFlags;
|
typedef unsigned char DecorationFlags;
|
||||||
|
|
||||||
//! The MWM Hints as retrieved from the window property
|
|
||||||
/*!
|
|
||||||
This structure only contains 3 elements, even though the Motif 2.0
|
|
||||||
structure contains 5. We only use the first 3, so that is all gets defined.
|
|
||||||
*/
|
|
||||||
typedef struct MwmHints {
|
|
||||||
//! The number of elements in the OBClient::MwmHints struct
|
|
||||||
static const unsigned int elements = 3;
|
|
||||||
unsigned long flags; //!< A bitmask of OBClient::MwmFlags values
|
|
||||||
unsigned long functions; //!< A bitmask of OBClient::MwmFunctions values
|
|
||||||
unsigned long decorations;//!< A bitmask of OBClient::MwmDecorations values
|
|
||||||
};
|
|
||||||
|
|
||||||
//! Possible actions that can be made with the _NET_WM_STATE client message
|
//! Possible actions that can be made with the _NET_WM_STATE client message
|
||||||
enum StateAction { State_Remove = 0, //!< _NET_WM_STATE_REMOVE
|
enum StateAction { State_Remove = 0, //!< _NET_WM_STATE_REMOVE
|
||||||
State_Add, //!< _NET_WM_STATE_ADD
|
State_Add, //!< _NET_WM_STATE_ADD
|
||||||
|
@ -306,6 +307,7 @@ private:
|
||||||
// XXX: updateTransientFor();
|
// XXX: updateTransientFor();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
#ifndef SWIG
|
||||||
//! Constructs a new OBClient object around a specified window id
|
//! Constructs a new OBClient object around a specified window id
|
||||||
/*!
|
/*!
|
||||||
@param window The window id that the OBClient class should handle
|
@param window The window id that the OBClient class should handle
|
||||||
|
@ -314,6 +316,7 @@ public:
|
||||||
OBClient(int screen, Window window);
|
OBClient(int screen, Window window);
|
||||||
//! Destroys the OBClient object
|
//! Destroys the OBClient object
|
||||||
virtual ~OBClient();
|
virtual ~OBClient();
|
||||||
|
#endif
|
||||||
|
|
||||||
//! Returns the screen on which the clien resides
|
//! Returns the screen on which the clien resides
|
||||||
inline int screen() const { return _screen; }
|
inline int screen() const { return _screen; }
|
||||||
|
|
20
src/main.cc
20
src/main.cc
|
@ -13,6 +13,8 @@ extern "C" {
|
||||||
# include <locale.h>
|
# include <locale.h>
|
||||||
#endif // HAVE_LOCALE_H
|
#endif // HAVE_LOCALE_H
|
||||||
|
|
||||||
|
#include <guile/gh.h>
|
||||||
|
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,17 +24,21 @@ using std::string;
|
||||||
#include "blackbox.hh"
|
#include "blackbox.hh"
|
||||||
#include "openbox.hh"
|
#include "openbox.hh"
|
||||||
|
|
||||||
|
void main_prog(int argc, char **argv) {
|
||||||
|
ob::Openbox openbox(argc, argv);
|
||||||
|
//ob::Blackbox blackbox(argc, argv, 0);
|
||||||
|
|
||||||
|
//Blackbox blackbox(argv, session_display, rc_file);
|
||||||
|
openbox.eventLoop();
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
// initialize the locale
|
// initialize the locale
|
||||||
setlocale(LC_ALL, "");
|
setlocale(LC_ALL, "");
|
||||||
bindtextdomain(PACKAGE, LOCALEDIR);
|
bindtextdomain(PACKAGE, LOCALEDIR);
|
||||||
textdomain(PACKAGE);
|
textdomain(PACKAGE);
|
||||||
|
|
||||||
ob::Openbox openbox(argc, argv);
|
// start up guile
|
||||||
//ob::Blackbox blackbox(argc, argv, 0);
|
//gh_enter(argc, argv, main_prog);
|
||||||
|
main_prog(argc, argv);
|
||||||
//Blackbox blackbox(argv, session_display, rc_file);
|
|
||||||
openbox.eventLoop();
|
|
||||||
|
|
||||||
return(0);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// -*- mode: C++; indent-tabs-mode: nil; -*-
|
// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include "../config.h"
|
# include "../config.h"
|
||||||
|
@ -9,7 +9,6 @@
|
||||||
#include "client.hh"
|
#include "client.hh"
|
||||||
#include "screen.hh"
|
#include "screen.hh"
|
||||||
#include "actions.hh"
|
#include "actions.hh"
|
||||||
#include "python.hh"
|
|
||||||
#include "otk/property.hh"
|
#include "otk/property.hh"
|
||||||
#include "otk/display.hh"
|
#include "otk/display.hh"
|
||||||
#include "otk/assassin.hh"
|
#include "otk/assassin.hh"
|
||||||
|
@ -43,7 +42,12 @@ extern "C" {
|
||||||
# include <sys/select.h>
|
# include <sys/select.h>
|
||||||
#endif // HAVE_SYS_SELECT_H
|
#endif // HAVE_SYS_SELECT_H
|
||||||
|
|
||||||
#include <python2.2/Python.h>
|
//#include <guile/gh.h>
|
||||||
|
|
||||||
|
#include <Python.h>
|
||||||
|
|
||||||
|
// The initializer in openbox_wrap.cc
|
||||||
|
extern void init_openbox(void);
|
||||||
|
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
#define _(str) gettext(str)
|
#define _(str) gettext(str)
|
||||||
|
@ -153,10 +157,24 @@ Openbox::Openbox(int argc, char **argv)
|
||||||
::exit(1);
|
::exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// initialize the python interface
|
/*
|
||||||
|
// make our guile interfaces exist
|
||||||
|
SWIG_init();
|
||||||
|
|
||||||
|
// run the guile of d3th
|
||||||
|
FILE *rcpyfd = fopen("/home/natas/.openbox/user.scm", "r");
|
||||||
|
if (!rcpyfd) {
|
||||||
|
printf("failed to load guile script /home/natas/.openbox/user.scm\n");
|
||||||
|
} else {
|
||||||
|
fclose(rcpyfd);
|
||||||
|
gh_load("/home/natas/.openbox/user.scm");
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
Py_SetProgramName(argv[0]);
|
Py_SetProgramName(argv[0]);
|
||||||
Py_Initialize();
|
Py_Initialize();
|
||||||
initopenbox(); // initialize the static 'openbox' module
|
//initopenbox(); // initialize the static 'openbox' module
|
||||||
|
init_openbox();
|
||||||
FILE *rcpyfd = fopen("/home/natas/.openbox/user.py", "r");
|
FILE *rcpyfd = fopen("/home/natas/.openbox/user.py", "r");
|
||||||
if (!rcpyfd) {
|
if (!rcpyfd) {
|
||||||
printf("failed to load python file /home/natas/.openbox/user.py\n");
|
printf("failed to load python file /home/natas/.openbox/user.py\n");
|
||||||
|
@ -165,6 +183,7 @@ Openbox::Openbox(int argc, char **argv)
|
||||||
fclose(rcpyfd);
|
fclose(rcpyfd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
_state = State_Normal; // done starting
|
_state = State_Normal; // done starting
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// -*- mode: C++; indent-tabs-mode: nil; -*-
|
// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
|
||||||
#ifndef __openbox_hh
|
#ifndef __openbox_hh
|
||||||
#define __openbox_hh
|
#define __openbox_hh
|
||||||
|
|
||||||
|
@ -31,6 +31,17 @@ class OBScreen;
|
||||||
class OBClient;
|
class OBClient;
|
||||||
class OBActions;
|
class OBActions;
|
||||||
|
|
||||||
|
//! Mouse cursors used throughout Openbox
|
||||||
|
struct Cursors {
|
||||||
|
Cursor session; //!< The default mouse cursor
|
||||||
|
Cursor move; //!< For moving a window
|
||||||
|
Cursor ll_angle; //!< For resizing the bottom left corner of a window
|
||||||
|
Cursor lr_angle; //!< For resizing the bottom right corner of a window
|
||||||
|
Cursor ul_angle; //!< For resizing the top left corner of a window
|
||||||
|
Cursor ur_angle; //!< For resizing the right corner of a window
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
//! The main class for the Openbox window manager
|
//! The main class for the Openbox window manager
|
||||||
/*!
|
/*!
|
||||||
Only a single instance of the Openbox class may be used in the application. A
|
Only a single instance of the Openbox class may be used in the application. A
|
||||||
|
@ -58,16 +69,6 @@ public:
|
||||||
State_Exiting //!< The window manager is exiting (being destroyed)
|
State_Exiting //!< The window manager is exiting (being destroyed)
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Mouse cursors used throughout Openbox
|
|
||||||
struct Cursors {
|
|
||||||
Cursor session; //!< The default mouse cursor
|
|
||||||
Cursor move; //!< For moving a window
|
|
||||||
Cursor ll_angle; //!< For resizing the bottom left corner of a window
|
|
||||||
Cursor lr_angle; //!< For resizing the bottom right corner of a window
|
|
||||||
Cursor ul_angle; //!< For resizing the top left corner of a window
|
|
||||||
Cursor ur_angle; //!< For resizing the right corner of a window
|
|
||||||
};
|
|
||||||
|
|
||||||
//! A map for looking up a specific client class from the window id
|
//! A map for looking up a specific client class from the window id
|
||||||
typedef std::map<Window, OBClient *> ClientMap;
|
typedef std::map<Window, OBClient *> ClientMap;
|
||||||
|
|
||||||
|
@ -138,6 +139,7 @@ private:
|
||||||
static void signalHandler(int signal);
|
static void signalHandler(int signal);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
#ifndef SWIG
|
||||||
//! Openbox constructor.
|
//! Openbox constructor.
|
||||||
/*!
|
/*!
|
||||||
\param argc Number of command line arguments, as received in main()
|
\param argc Number of command line arguments, as received in main()
|
||||||
|
@ -146,6 +148,7 @@ public:
|
||||||
Openbox(int argc, char **argv);
|
Openbox(int argc, char **argv);
|
||||||
//! Openbox destructor.
|
//! Openbox destructor.
|
||||||
virtual ~Openbox();
|
virtual ~Openbox();
|
||||||
|
#endif
|
||||||
|
|
||||||
//! Returns the state of the window manager (starting, exiting, etc)
|
//! Returns the state of the window manager (starting, exiting, etc)
|
||||||
inline RunState state() const { return _state; }
|
inline RunState state() const { return _state; }
|
||||||
|
@ -169,6 +172,7 @@ public:
|
||||||
//! Returns the mouse cursors used throughout Openbox
|
//! Returns the mouse cursors used throughout Openbox
|
||||||
inline const Cursors &cursors() const { return _cursors; }
|
inline const Cursors &cursors() const { return _cursors; }
|
||||||
|
|
||||||
|
#ifndef SWIG
|
||||||
//! The main function of the Openbox class
|
//! The main function of the Openbox class
|
||||||
/*!
|
/*!
|
||||||
This function should be called after instantiating the Openbox class.
|
This function should be called after instantiating the Openbox class.
|
||||||
|
@ -176,6 +180,7 @@ public:
|
||||||
The Openbox::shutdown method will cause this function to exit.
|
The Openbox::shutdown method will cause this function to exit.
|
||||||
*/
|
*/
|
||||||
void eventLoop();
|
void eventLoop();
|
||||||
|
#endif
|
||||||
|
|
||||||
//! Adds an OBClient to the client list for lookups
|
//! Adds an OBClient to the client list for lookups
|
||||||
void addClient(Window window, OBClient *client);
|
void addClient(Window window, OBClient *client);
|
||||||
|
|
28
src/openbox.i
Normal file
28
src/openbox.i
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
// -*- 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"
|
||||||
|
%}
|
||||||
|
|
||||||
|
%immutable ob::Openbox::instance;
|
||||||
|
|
||||||
|
%include "openbox.hh"
|
||||||
|
%include "screen.hh"
|
||||||
|
%include "client.hh"
|
||||||
|
|
||||||
|
|
||||||
|
%include stl.i
|
||||||
|
%include std_list.i
|
||||||
|
|
||||||
|
%{
|
||||||
|
class OBClient;
|
||||||
|
%}
|
||||||
|
%template(ClientList) std::list<OBClient*>;
|
|
@ -94,10 +94,12 @@ private:
|
||||||
void setWorkArea();
|
void setWorkArea();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
#ifndef SWIG
|
||||||
//! Constructs a new OBScreen object
|
//! Constructs a new OBScreen object
|
||||||
OBScreen(int screen, const otk::Configuration &config);
|
OBScreen(int screen, const otk::Configuration &config);
|
||||||
//! Destroys the OBScreen object
|
//! Destroys the OBScreen object
|
||||||
virtual ~OBScreen();
|
virtual ~OBScreen();
|
||||||
|
#endif
|
||||||
|
|
||||||
//! Returns if the screen was successfully managed
|
//! Returns if the screen was successfully managed
|
||||||
/*!
|
/*!
|
||||||
|
@ -112,6 +114,7 @@ public:
|
||||||
//! Returns the style in use on the screen
|
//! Returns the style in use on the screen
|
||||||
inline const otk::Style *style() const { return &_style; }
|
inline const otk::Style *style() const { return &_style; }
|
||||||
|
|
||||||
|
inline ClientList clients() { return _clients; }
|
||||||
|
|
||||||
//! Adds a window's strut to the screen's list of reserved spaces
|
//! Adds a window's strut to the screen's list of reserved spaces
|
||||||
void addStrut(otk::Strut *strut);
|
void addStrut(otk::Strut *strut);
|
||||||
|
|
Loading…
Reference in a new issue