summaryrefslogtreecommitdiff
path: root/otk/application.cc
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2002-11-16 14:30:18 +0000
committerDana Jansens <danakj@orodu.net>2002-11-16 14:30:18 +0000
commit12a95bfdb31595ec53d72adef4e0fd6bf1ccf218 (patch)
tree5a7fd6a4b2a56e6849ef0fe87b67b5dcc03807ab /otk/application.cc
parent3bc1f37469a4933966f049cc57093fb564b721a3 (diff)
add an OtkAppWidget which are "root windows", i.e. the managed child of root, to be shown on the display.
Exit when all the "root windows" are hidden. Support the WM_DELETE protocol to hide a "root window".
Diffstat (limited to 'otk/application.cc')
-rw-r--r--otk/application.cc38
1 files changed, 10 insertions, 28 deletions
diff --git a/otk/application.cc b/otk/application.cc
index 2530fdd1..886b0033 100644
--- a/otk/application.cc
+++ b/otk/application.cc
@@ -3,8 +3,6 @@
#include "widget.hh"
extern "C" {
-#include <X11/Xlib.h>
-
#ifdef HAVE_STDLIB_H
# include <stdlib.h>
#endif
@@ -15,13 +13,16 @@ extern "C" {
namespace otk {
OtkApplication::OtkApplication(int argc, char **argv)
- : OtkEventDispatcher(), _main_widget(0), _dockable(false)
+ : OtkEventDispatcher(),
+ _dockable(false),
+ _appwidget_count(0)
{
argc = argc;
argv = argv;
OBDisplay::initialize(0);
- const ScreenInfo *s_info = OBDisplay::screenInfo(DefaultScreen(OBDisplay::display));
+ const ScreenInfo *s_info =
+ OBDisplay::screenInfo(DefaultScreen(OBDisplay::display));
_timer_manager = new OBTimerQueueManager();
_img_ctrl = new BImageControl(_timer_manager, s_info, True, 4, 5, 200);
@@ -55,36 +56,17 @@ void OtkApplication::loadStyle(void)
void OtkApplication::exec(void)
{
- if (!_main_widget) {
- std::cerr << "ERROR: No main widget set. You must create a main " <<
- "OtkWidget for the OtkApplication before calling " <<
+ if (_appwidget_count <= 0) {
+ std::cerr << "ERROR: No main widgets exist. You must create and show() " <<
+ "an OtkAppWidget for the OtkApplication before calling " <<
"OtkApplication::exec().\n";
::exit(1);
}
- while (1) {
+
+ while (_appwidget_count > 0) {
dispatchEvents();
_timer_manager->fire(); // fire pending events
}
}
-bool OtkApplication::setMainWidget(const OtkWidget *main_widget)
-{
- // ignore it if it has already been set
- if (_main_widget) {
- std::cerr << "WARNING: More than one main OtkWidget being created for " <<
- "the OtkApplication!\n";
- return false;
- }
-
- _main_widget = main_widget;
-
- // set WM Protocols on the window
- Atom protocols[2];
- protocols[0] = XInternAtom(OBDisplay::display, "WM_PROTOCOLS", false);
- protocols[1] = XInternAtom(OBDisplay::display, "WM_DELETE_WINDOW", false);
- XSetWMProtocols(OBDisplay::display, _main_widget->getWindow(), protocols, 2);
-
- return true;
-}
-
}