#include "application.hh"
#include "eventhandler.hh"
+#include <iostream>
+
namespace otk {
OtkApplication::OtkApplication(int argc, char **argv)
// find the style name as a property
_style_conf->setFile("/usr/local/share/openbox/styles/artwiz");
_style_conf->load();
- _style->load(_style_conf);
+ _style->load(*_style_conf);
}
void OtkApplication::exec(void)
{
- dispatchEvents();
+ const int xfd = ConnectionNumber(OBDisplay::display);
+ fd_set rfds;
+ timeval *timeout = 0;
+
+ while (1) {
+ dispatchEvents();
+
+ FD_ZERO(&rfds);
+ FD_SET(xfd, &rfds);
+
+ select(xfd + 1, &rfds, 0, 0, timeout);
+ }
}
}
+#include <iostream>
#include "button.hh"
namespace otk {
_dirty = false;
}
+int OtkButton::buttonPressHandler(const XButtonEvent &e)
+{
+ press();
+ _dirty = true;
+ update();
+ return OtkFocusWidget::buttonPressHandler(e);
+}
+
+int OtkButton::buttonReleaseHandler(const XButtonEvent &e)
+{
+ release();
+ _dirty = true;
+ update();
+ return OtkFocusWidget::buttonReleaseHandler(e);
+}
+
int OtkButton::exposeHandler(const XExposeEvent &e)
{
_dirty = true;
void update(void);
int exposeHandler(const XExposeEvent &e);
int configureHandler(const XConfigureEvent &e);
+ int buttonPressHandler(const XButtonEvent &e);
+ int buttonReleaseHandler(const XButtonEvent &e);
private:
#include "eventdispatcher.hh"
#include "display.hh"
+#include <iostream>
namespace otk {
OtkEventDispatcher::OtkEventDispatcher()
+ : _fallback(0)
{
}
#include "eventhandler.hh"
+#include <iostream>
namespace otk {
int OtkEventHandler::handle(const XEvent &e)
{
- switch(e.type){
- case KeyPress:
- return keyPressHandler(e.xkey);
- case KeyRelease:
- return keyReleaseHandler(e.xkey);
- case ButtonPress:
- return buttonPressHandler(e.xbutton);
- case ButtonRelease:
- return buttonReleaseHandler(e.xbutton);
- case EnterNotify:
- return enterHandler(e.xcrossing);
- case LeaveNotify:
- return leaveHandler(e.xcrossing);
- case FocusIn:
- return focusHandler(e.xfocus);
- case FocusOut:
- return unfocusHandler(e.xfocus);
- case Expose:
- return exposeHandler(e.xexpose);
- case GraphicsExpose:
- return graphicsExposeHandler(e.xgraphicsexpose);
- case NoExpose:
- return noExposeEventHandler(e.xnoexpose);
- case CirculateRequest:
- return circulateRequestHandler(e.xcirculaterequest);
- case ConfigureRequest:
- return configureRequestHandler(e.xconfigurerequest);
- case MapRequest:
- return mapRequestHandler(e.xmaprequest);
- case ResizeRequest:
- return resizeRequestHandler(e.xresizerequest);
- case CirculateNotify:
- return circulateHandler(e.xcirculate);
- case ConfigureNotify:
- return configureHandler(e.xconfigure);
- case CreateNotify:
- return createHandler(e.xcreatewindow);
- case DestroyNotify:
- return destroyHandler(e.xdestroywindow);
- case GravityNotify:
- return gravityHandler(e.xgravity);
- case MapNotify:
- return mapHandler(e.xmap);
- case MappingNotify:
- return mappingHandler(e.xmapping);
- case ReparentNotify:
- return reparentHandler(e.xreparent);
- case UnmapNotify:
- return unmapHandler(e.xunmap);
- case VisibilityNotify:
- return visibilityHandler(e.xvisibility);
- case ColormapNotify:
- return colorMapHandler(e.xcolormap);
- case ClientMessage:
- return clientMessageHandler(e.xclient);
- case PropertyNotify:
- return propertyHandler(e.xproperty);
- case SelectionClear:
- return selectionClearHandler(e.xselectionclear);
- case SelectionNotify:
- return selectionHandler(e.xselection);
- case SelectionRequest:
- return selectionRequestHandler(e.xselectionrequest);
- };
- return 0;
+ switch(e.type){
+ case KeyPress:
+ return keyPressHandler(e.xkey);
+ case KeyRelease:
+ return keyReleaseHandler(e.xkey);
+ case ButtonPress:
+ return buttonPressHandler(e.xbutton);
+ case ButtonRelease:
+ return buttonReleaseHandler(e.xbutton);
+ case EnterNotify:
+ return enterHandler(e.xcrossing);
+ case LeaveNotify:
+ return leaveHandler(e.xcrossing);
+ case FocusIn:
+ return focusHandler(e.xfocus);
+ case FocusOut:
+ return unfocusHandler(e.xfocus);
+ case Expose:
+ return exposeHandler(e.xexpose);
+ case GraphicsExpose:
+ return graphicsExposeHandler(e.xgraphicsexpose);
+ case NoExpose:
+ return noExposeEventHandler(e.xnoexpose);
+ case CirculateRequest:
+ return circulateRequestHandler(e.xcirculaterequest);
+ case ConfigureRequest:
+ return configureRequestHandler(e.xconfigurerequest);
+ case MapRequest:
+ return mapRequestHandler(e.xmaprequest);
+ case ResizeRequest:
+ return resizeRequestHandler(e.xresizerequest);
+ case CirculateNotify:
+ return circulateHandler(e.xcirculate);
+ case ConfigureNotify:
+ return configureHandler(e.xconfigure);
+ case CreateNotify:
+ return createHandler(e.xcreatewindow);
+ case DestroyNotify:
+ return destroyHandler(e.xdestroywindow);
+ case GravityNotify:
+ return gravityHandler(e.xgravity);
+ case MapNotify:
+ return mapHandler(e.xmap);
+ case MappingNotify:
+ return mappingHandler(e.xmapping);
+ case ReparentNotify:
+ return reparentHandler(e.xreparent);
+ case UnmapNotify:
+ return unmapHandler(e.xunmap);
+ case VisibilityNotify:
+ return visibilityHandler(e.xvisibility);
+ case ColormapNotify:
+ return colorMapHandler(e.xcolormap);
+ case ClientMessage:
+ return clientMessageHandler(e.xclient);
+ case PropertyNotify:
+ return propertyHandler(e.xproperty);
+ case SelectionClear:
+ return selectionClearHandler(e.xselectionclear);
+ case SelectionNotify:
+ return selectionHandler(e.xselection);
+ case SelectionRequest:
+ return selectionRequestHandler(e.xselectionrequest);
+ };
+ return 0;
}
}
class OtkEventHandler{
public:
//! Dispatches events to one of the other handlers based on their type.
- int handle(const XEvent &e);
+ virtual int handle(const XEvent &e);
//! Called whenever any key is pressed.
virtual int keyPressHandler(const XKeyEvent &) {return 1;}
#endif // HAVE_CONFIG_H
#include <assert.h>
-#include "display.hh"
+#include <iostream>
+#include "display.hh"
#include "util.hh"
#include "style.hh"
BFont *Style::readDatabaseFont(const std::string &rbasename,
- const Configuration &style) {
+ const Configuration &style) {
std::string fontname;
std::string s;
inline unsigned int getBorderWidth(void) const { return border_width; }
inline const BFont &getFont() const { return *font; }
+
+ inline void setShadowFonts(bool fonts) { shadow_fonts = fonts; }
+ inline bool hasShadowFonts(void) const { return shadow_fonts; }
+
+ inline void setAAFonts(bool fonts) { aa_fonts = fonts; }
inline bool hasAAFonts(void) const { return aa_fonts; }
inline TextJustify textJustify(void) { return justify; }
_grabbed_keyboard(false), _stretchable_vert(false),
_stretchable_horz(false), _texture(0), _bg_pixmap(0), _bg_pixel(0),
_screen(parent->getScreen()), _fixed_width(false), _fixed_height(false),
- _dirty(false)
+ _dirty(false), _event_dispatcher(parent->getEventDispatcher())
{
parent->addChild(this);
create();
+ _event_dispatcher->registerHandler(_window, this);
}
OtkWidget::OtkWidget(OtkApplication *app, Direction direction,
_focused(false), _grabbed_mouse(false), _grabbed_keyboard(false),
_stretchable_vert(false), _stretchable_horz(false), _texture(0),
_bg_pixmap(0), _bg_pixel(0), _screen(app->getStyle()->getScreen()),
- _fixed_width(false), _fixed_height(false), _dirty(false)
+ _fixed_width(false), _fixed_height(false), _dirty(false),
+ _event_dispatcher(app)
{
assert(app);
create();
- app->registerHandler(_window, this);
+ _event_dispatcher->registerHandler(_window, this);
}
OtkWidget::OtkWidget(Style *style, Direction direction,
_children.erase(it);
}
+void OtkWidget::setEventDispatcher(OtkEventDispatcher *disp)
+{
+ if (_event_dispatcher)
+ _event_dispatcher->clearHandler(_window);
+ _event_dispatcher = disp;
+ _event_dispatcher->registerHandler(_window, this);
+}
+
int OtkWidget::exposeHandler(const XExposeEvent &e)
{
OtkEventHandler::exposeHandler(e);
_dirty = true;
update();
return true;
- } else {
- OtkWidgetList::iterator it = _children.begin(), end = _children.end();
- for (; it != end; ++it)
- if ((*it)->exposeHandler(e))
- return true;
}
return false;
}
if (_ignore_config) {
_ignore_config--;
} else {
- std::cout << "configure\n";
if (!(e.width == _rect.width() && e.height == _rect.height())) {
_dirty = true;
_rect.setSize(e.width, e.height);
update();
}
return true;
- } else {
- OtkWidgetList::iterator it = _children.begin(), end = _children.end();
- for (; it != end; ++it)
- if ((*it)->configureHandler(e))
- return true;
}
+
return false;
}
inline Style *getStyle(void) const { return _style; }
void setStyle(Style *style) { _style = style; }
+ inline OtkEventDispatcher *getEventDispatcher(void)
+ { return _event_dispatcher; }
+ void setEventDispatcher(OtkEventDispatcher *disp);
+
private:
void create(void);
bool _fixed_height;
bool _dirty;
+
+ OtkEventDispatcher *_event_dispatcher;
};
}