2002-11-03 11:46:05 +00:00
|
|
|
// -*- mode: C++; indent-tabs-mode: nil; -*-
|
|
|
|
#ifndef __openbox_hh
|
|
|
|
#define __openbox_hh
|
|
|
|
|
|
|
|
extern "C" {
|
|
|
|
#include <X11/Xlib.h>
|
|
|
|
}
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
#include "otk/screeninfo.hh"
|
2002-11-04 05:35:04 +00:00
|
|
|
#include "otk/timerqueuemanager.hh"
|
2002-11-03 11:46:05 +00:00
|
|
|
|
|
|
|
namespace ob {
|
|
|
|
|
2002-11-04 03:37:17 +00:00
|
|
|
//! 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
|
|
|
|
variable.
|
|
|
|
Instantiation of this class begins the window manager. After instantiation,
|
|
|
|
the Openbox::eventLoop function should be called. The eventLoop method does
|
|
|
|
not exit until the window manager is ready to be destroyed. Destruction of
|
|
|
|
the Openbox class instance will shutdown the window manager.
|
|
|
|
*/
|
2002-11-03 11:46:05 +00:00
|
|
|
class Openbox
|
|
|
|
{
|
|
|
|
public:
|
2002-11-04 03:37:17 +00:00
|
|
|
//! 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.
|
|
|
|
*/
|
|
|
|
static Openbox *instance;
|
2002-11-03 11:46:05 +00:00
|
|
|
|
2002-11-04 03:37:17 +00:00
|
|
|
//! The posible running states of the window manager
|
2002-11-03 11:46:05 +00:00
|
|
|
enum RunState {
|
2002-11-04 03:37:17 +00:00
|
|
|
//! The window manager is starting up (being created)
|
2002-11-03 11:46:05 +00:00
|
|
|
State_Starting,
|
2002-11-04 03:37:17 +00:00
|
|
|
//! The window manager is running in its normal state
|
2002-11-03 11:46:05 +00:00
|
|
|
State_Normal,
|
2002-11-04 03:37:17 +00:00
|
|
|
//! The window manager is exiting (being destroyed)
|
2002-11-03 11:46:05 +00:00
|
|
|
State_Exiting
|
|
|
|
};
|
|
|
|
|
|
|
|
private:
|
2002-11-03 12:06:44 +00:00
|
|
|
// stuff that can be passed on the command line
|
2002-11-04 03:37:17 +00:00
|
|
|
//! Path to the config file to use/in use
|
|
|
|
/*!
|
|
|
|
Defaults to $(HOME)/.openbox/rc3
|
|
|
|
*/
|
|
|
|
std::string _rcfilepath;
|
|
|
|
//! Path to the menu file to use/in use
|
|
|
|
/*!
|
|
|
|
Defaults to $(HOME)/.openbox/menu3
|
|
|
|
*/
|
|
|
|
std::string _menufilepath;
|
|
|
|
//! The display requested by the user, or null to use the DISPLAY env var
|
|
|
|
char *_displayreq;
|
|
|
|
//! The value of argv[0], i.e. how this application was executed
|
|
|
|
char *_argv0;
|
2002-11-03 11:46:05 +00:00
|
|
|
|
2002-11-04 03:37:17 +00:00
|
|
|
//! Manages all timers for the application
|
|
|
|
/*!
|
|
|
|
Use of the otk::OBTimerQueueManager::fire funtion in this object ensures
|
|
|
|
that all timers fire when their times elapse.
|
|
|
|
*/
|
|
|
|
otk::OBTimerQueueManager _timermanager;
|
2002-11-03 12:48:10 +00:00
|
|
|
|
2002-11-04 03:37:17 +00:00
|
|
|
//! The running state of the window manager
|
|
|
|
RunState _state;
|
2002-11-03 11:46:05 +00:00
|
|
|
|
2002-11-04 03:37:17 +00:00
|
|
|
//! When set to true, the Openbox::eventLoop function will stop and return
|
|
|
|
bool _doshutdown;
|
2002-11-03 11:46:05 +00:00
|
|
|
|
2002-11-04 03:37:17 +00:00
|
|
|
//! Parses the command line used when executing this application
|
2002-11-03 11:46:05 +00:00
|
|
|
void parseCommandLine(int argv, char **argv);
|
2002-11-04 03:37:17 +00:00
|
|
|
//! Displays the version string to stdout
|
2002-11-03 11:46:05 +00:00
|
|
|
void showVersion();
|
2002-11-04 03:37:17 +00:00
|
|
|
//! Displays usage information and help to stdout
|
2002-11-03 11:46:05 +00:00
|
|
|
void showHelp();
|
|
|
|
|
2002-11-04 03:37:17 +00:00
|
|
|
//! Handles signal events for the application
|
2002-11-03 11:46:05 +00:00
|
|
|
static void signalHandler(int signal);
|
|
|
|
|
|
|
|
public:
|
|
|
|
//! Openbox constructor.
|
|
|
|
/*!
|
|
|
|
\param argc Number of command line arguments, as received in main()
|
|
|
|
\param argv The command line arguments, as received in main()
|
|
|
|
*/
|
|
|
|
Openbox(int argc, char **argv);
|
|
|
|
//! Openbox destructor.
|
|
|
|
virtual ~Openbox();
|
|
|
|
|
2002-11-04 03:37:17 +00:00
|
|
|
//! Returns the state of the window manager (starting, exiting, etc)
|
2002-11-03 11:46:05 +00:00
|
|
|
inline RunState state() const { return _state; }
|
|
|
|
|
2002-11-04 03:37:17 +00:00
|
|
|
//! Returns the otk::OBTimerQueueManager for the application
|
|
|
|
/*!
|
|
|
|
All otk::OBTimer objects used in the application should be made to use this
|
|
|
|
otk::OBTimerQueueManager.
|
|
|
|
*/
|
2002-11-03 14:29:34 +00:00
|
|
|
inline otk::OBTimerQueueManager *timerManager() { return &_timermanager; }
|
2002-11-03 12:48:10 +00:00
|
|
|
|
2002-11-04 03:37:17 +00:00
|
|
|
//! The main function of the Openbox class
|
|
|
|
/*!
|
|
|
|
This function should be called after instantiating the Openbox class.
|
|
|
|
Loops indefinately while handling all events in the application.
|
|
|
|
The Openbox::shutdown method will cause this function to exit.
|
|
|
|
*/
|
2002-11-03 11:46:05 +00:00
|
|
|
void eventLoop();
|
|
|
|
|
|
|
|
// XXX: TEMPORARY!#!@%*!^#*!#!#!
|
|
|
|
virtual void process_event(XEvent *) = 0;
|
|
|
|
|
2002-11-04 03:37:17 +00:00
|
|
|
//! Requests that the window manager exit
|
|
|
|
/*!
|
|
|
|
Causes the Openbox::eventLoop function to stop looping, so that the window
|
|
|
|
manager can be destroyed.
|
|
|
|
*/
|
|
|
|
inline void shutdown() { _doshutdown = true; }
|
2002-11-03 11:46:05 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // __openbox_hh
|