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:
parent
0680daeef5
commit
6f5e60f033
10 changed files with 131 additions and 84 deletions
|
@ -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)
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
#include "eventdispatcher.hh"
|
||||
#include "display.hh"
|
||||
#include <iostream>
|
||||
|
||||
namespace otk {
|
||||
|
||||
OtkEventDispatcher::OtkEventDispatcher()
|
||||
: _fallback(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "eventhandler.hh"
|
||||
#include <iostream>
|
||||
|
||||
namespace otk {
|
||||
|
||||
|
|
|
@ -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;}
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue