fixed bugs, got otkapp to select on a fd, modded widget to make use of otkapp, press/release events on buttons

This commit is contained in:
Marius Nita 2002-11-16 09:59:37 +00:00
parent 0680daeef5
commit 6f5e60f033
10 changed files with 131 additions and 84 deletions

View file

@ -1,6 +1,8 @@
#include "application.hh"
#include "eventhandler.hh"
#include <iostream>
namespace otk {
OtkApplication::OtkApplication(int argc, char **argv)
@ -35,12 +37,23 @@ void OtkApplication::loadStyle(void)
// 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);
}
}
}

View file

@ -1,3 +1,4 @@
#include <iostream>
#include "button.hh"
namespace otk {
@ -66,6 +67,22 @@ void OtkButton::update(void)
_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;

View file

@ -39,6 +39,8 @@ public:
void update(void);
int exposeHandler(const XExposeEvent &e);
int configureHandler(const XConfigureEvent &e);
int buttonPressHandler(const XButtonEvent &e);
int buttonReleaseHandler(const XButtonEvent &e);
private:

View file

@ -1,9 +1,11 @@
#include "eventdispatcher.hh"
#include "display.hh"
#include <iostream>
namespace otk {
OtkEventDispatcher::OtkEventDispatcher()
: _fallback(0)
{
}

View file

@ -1,4 +1,5 @@
#include "eventhandler.hh"
#include <iostream>
namespace otk {
@ -14,71 +15,71 @@ OtkEventHandler::~OtkEventHandler()
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;
}
}

View file

@ -10,7 +10,7 @@ namespace otk {
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;}

View file

@ -3,8 +3,9 @@
#endif // HAVE_CONFIG_H
#include <assert.h>
#include "display.hh"
#include <iostream>
#include "display.hh"
#include "util.hh"
#include "style.hh"
@ -256,7 +257,7 @@ BColor Style::readDatabaseColor(const std::string &rname,
BFont *Style::readDatabaseFont(const std::string &rbasename,
const Configuration &style) {
const Configuration &style) {
std::string fontname;
std::string s;

View file

@ -123,6 +123,11 @@ public:
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; }

View file

@ -17,10 +17,11 @@ OtkWidget::OtkWidget(OtkWidget *parent, Direction direction)
_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,
@ -31,11 +32,12 @@ 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,
@ -413,6 +415,14 @@ void OtkWidget::removeChild(OtkWidget *child)
_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);
@ -420,11 +430,6 @@ int OtkWidget::exposeHandler(const XExposeEvent &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;
}
@ -436,7 +441,6 @@ int OtkWidget::configureHandler(const XConfigureEvent &e)
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);
@ -444,12 +448,8 @@ int OtkWidget::configureHandler(const XConfigureEvent &e)
update();
}
return true;
} else {
OtkWidgetList::iterator it = _children.begin(), end = _children.end();
for (; it != end; ++it)
if ((*it)->configureHandler(e))
return true;
}
return false;
}

View file

@ -96,6 +96,10 @@ public:
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);
@ -136,6 +140,8 @@ private:
bool _fixed_height;
bool _dirty;
OtkEventDispatcher *_event_dispatcher;
};
}