@brief The main class for the Openbox window manager
*/
+/*
+ cuz girls look soooo goood.. on the end of my DICK
+*/
+
extern "C" {
#include <X11/Xlib.h>
}
#include <string>
#include <vector>
+#include "python.hh"
#include "otk/screeninfo.hh"
#include "otk/timerqueuemanager.hh"
#include "otk/property.hh"
-#include "xeventhandler.hh"
+#include "otk/configuration.hh"
+#include "otk/eventdispatcher.hh"
+#include "otk/eventhandler.hh"
namespace ob {
-//! The main class for the Openbox window manager.
+class OBScreen;
+class OBClient;
+class OBActions;
+
+//! The main class for the Openbox window manager
/*!
Only a single instance of the Openbox class may be used in the application. A
pointer to this instance is held in the Openbox::instance static member
not exit until the window manager is ready to be destroyed. Destruction of
the Openbox class instance will shutdown the window manager.
*/
-class Openbox
+class Openbox : public otk::OtkEventDispatcher, public otk::OtkEventHandler
{
public:
- //! The single instance of the Openbox class for the application.
+ //! 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.
State_Normal, //!< The window manager is running in its normal state
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 list of OBScreen classes
+ typedef std::vector<OBScreen *> ScreenList;
private:
// stuff that can be passed on the command line
//! The value of argv[0], i.e. how this application was executed
char *_argv0;
+ //! A list of all managed clients
+ PyDictObject *_clients;
+
+ //! A list of all the managed screens
+ ScreenList _screens;
+
//! Manages all timers for the application
/*!
Use of the otk::OBTimerQueueManager::fire funtion in this object ensures
*/
otk::OBTimerQueueManager _timermanager;
- //! The class which will handle raw XEvents
- OBXEventHandler _xeventhandler;
-
//! Cached atoms on the display
/*!
This is a pointer because the OBProperty class uses otk::OBDisplay::display
*/
otk::OBProperty *_property;
+ //! The action interface through which all user-available actions occur
+ OBActions *_actions;
+
//! The running state of the window manager
RunState _state;
+ //! Mouse cursors used throughout Openbox
+ Cursors _cursors;
+
//! When set to true, the Openbox::eventLoop function will stop and return
bool _doshutdown;
+ //! The configuration of the application. TEMPORARY
+ otk::Configuration _config;
+
//! Parses the command line used when executing this application
void parseCommandLine(int argv, char **argv);
//! Displays the version string to stdout
*/
inline otk::OBTimerQueueManager *timerManager() { return &_timermanager; }
+ //! Returns the otk::OBProperty instance for the window manager
inline const otk::OBProperty *property() const { return _property; }
+ //! Returns a managed screen
+ inline OBScreen *screen(int num) {
+ assert(num >= 0); assert(num < (signed)_screens.size());
+ return _screens[num];
+ }
+
+ //! Returns the mouse cursors used throughout Openbox
+ inline const Cursors &cursors() const { return _cursors; }
+
+ inline PyDictObject *clients() const { return _clients; }
+
//! The main function of the Openbox class
/*!
This function should be called after instantiating the Openbox class.
*/
void eventLoop();
+ //! Adds an OBClient to the client list for lookups
+ void addClient(Window window, OBClient *client);
+
+ //! Removes an OBClient from the client list for lookups
+ void removeClient(Window window);
+
+ //! Finds an OBClient based on its window id
+ OBClient *findClient(Window window);
+
//! Requests that the window manager exit
/*!
Causes the Openbox::eventLoop function to stop looping, so that the window