aboutsummaryrefslogtreecommitdiff
path: root/dw
diff options
context:
space:
mode:
authorJorge Arellano Cid <jcid@dillo.org>2008-12-19 16:44:00 -0300
committerJorge Arellano Cid <jcid@dillo.org>2008-12-19 16:44:00 -0300
commit88649e033a26be4ab3f337c856d6098e05adcd0d (patch)
tree4595192ffe427982b199213400b3cc8830afca8e /dw
parent3322961a176a1c0933cf4d525a9ed8e03b7f2d5a (diff)
Moved clicked from ButtonResource to Resource.
Diffstat (limited to 'dw')
-rw-r--r--dw/fltkcomplexbutton.cc2
-rw-r--r--dw/ui.cc29
-rw-r--r--dw/ui.hh59
3 files changed, 46 insertions, 44 deletions
diff --git a/dw/fltkcomplexbutton.cc b/dw/fltkcomplexbutton.cc
index 6c15cee3..9c73f97f 100644
--- a/dw/fltkcomplexbutton.cc
+++ b/dw/fltkcomplexbutton.cc
@@ -87,7 +87,7 @@ int ComplexButton::handle(int event, const Rectangle& rectangle) {
if (pushed()) return 1; // ignore extra pushes on currently-pushed button
initial_state = state();
clear_flag(PUSHED);
- do_callback();
+ /* do_callback(); */
case DRAG: {
bool inside = event_inside(rectangle);
if (inside) {
diff --git a/dw/ui.cc b/dw/ui.cc
index 6f9a692f..ef7298bf 100644
--- a/dw/ui.cc
+++ b/dw/ui.cc
@@ -69,6 +69,19 @@ void Embed::leaveNotifyImpl (core::EventCrossing *event)
resource->emitLeave();
}
+bool Embed::buttonPressImpl (core::EventButton *event)
+{
+ bool handled;
+
+ if (event->button == 3) {
+ resource->emitClicked(event);
+ handled = true;
+ } else {
+ handled = false;
+ }
+ return handled;
+}
+
void Embed::setWidth (int width)
{
resource->setWidth (width);
@@ -201,22 +214,18 @@ void Resource::emitLeave ()
activateEmitter.emitLeave(this);
}
-// ----------------------------------------------------------------------
-
-bool ButtonResource::ClickedEmitter::emitToReceiver (lout::signal::Receiver
- *receiver,
- int signalNo,
- int argc,
- Object **argv)
+bool Resource::ClickedEmitter::emitToReceiver(lout::signal::Receiver *receiver,
+ int signalNo, int argc,
+ Object **argv)
{
((ClickedReceiver*)receiver)
- ->clicked ((ButtonResource*)((Pointer*)argv[0])->getValue (),
+ ->clicked ((Resource*)((Pointer*)argv[0])->getValue (),
(EventButton*)((Pointer*)argv[1])->getValue());
return false;
}
-void ButtonResource::ClickedEmitter::emitClicked (ButtonResource *resource,
- EventButton *event)
+void Resource::ClickedEmitter::emitClicked (Resource *resource,
+ EventButton *event)
{
Pointer p1 (resource);
Pointer p2 (event);
diff --git a/dw/ui.hh b/dw/ui.hh
index 3449e8b7..ea8fd4c4 100644
--- a/dw/ui.hh
+++ b/dw/ui.hh
@@ -232,6 +232,7 @@ protected:
void sizeAllocateImpl (Allocation *allocation);
void enterNotifyImpl (core::EventCrossing *event);
void leaveNotifyImpl (core::EventCrossing *event);
+ bool buttonPressImpl (core::EventButton *event);
public:
static int CLASS_ID;
@@ -271,6 +272,14 @@ public:
virtual void enter (Resource *resource) = 0;
virtual void leave (Resource *resource) = 0;
};
+ /**
+ * \brief Receiver interface for the "clicked" signal.
+ */
+ class ClickedReceiver: public lout::signal::Receiver
+ {
+ public:
+ virtual void clicked (Resource *resource, EventButton *event) = 0;
+ };
private:
class ActivateEmitter: public lout::signal::Emitter
@@ -286,8 +295,20 @@ private:
void emitLeave (Resource *resource);
};
+ class ClickedEmitter: public lout::signal::Emitter
+ {
+ protected:
+ bool emitToReceiver (lout::signal::Receiver *receiver, int signalNo,
+ int argc, Object **argv);
+ public:
+ inline void connectClicked (ClickedReceiver *receiver) {
+ connect (receiver); }
+ void emitClicked (Resource *resource, EventButton *event);
+ };
+
Embed *embed;
ActivateEmitter activateEmitter;
+ ClickedEmitter clickedEmitter;
void emitEnter ();
void emitLeave ();
@@ -301,6 +322,8 @@ protected:
inline void emitActivate () {
return activateEmitter.emitActivate (this); }
+ inline void emitClicked (EventButton *event) {
+ clickedEmitter.emitClicked (this, event); }
public:
inline Resource () { embed = NULL; }
@@ -322,43 +345,13 @@ public:
inline void connectActivate (ActivateReceiver *receiver) {
activateEmitter.connectActivate (receiver); }
+ inline void connectClicked (ClickedReceiver *receiver) {
+ clickedEmitter.connectClicked (receiver); }
};
class ButtonResource: public Resource
-{
-public:
- /**
- * \brief Receiver interface for the "clicked" signal.
- */
- class ClickedReceiver: public lout::signal::Receiver
- {
- public:
- virtual void clicked (ButtonResource *resource, EventButton *event) = 0;
- };
-
-private:
- class ClickedEmitter: public lout::signal::Emitter
- {
- protected:
- bool emitToReceiver (lout::signal::Receiver *receiver, int signalNo,
- int argc, Object **argv);
- public:
- inline void connectClicked (ClickedReceiver *receiver) {
- connect (receiver); }
- void emitClicked (ButtonResource *resource, EventButton *event);
- };
-
- ClickedEmitter clickedEmitter;
-
-protected:
- inline void emitClicked (EventButton *event) {
- clickedEmitter.emitClicked (this, event); }
-
-public:
- inline void connectClicked (ClickedReceiver *receiver) {
- clickedEmitter.connectClicked (receiver); }
-};
+{};
/**
* \brief Interface for labelled buttons resources.