aboutsummaryrefslogtreecommitdiff
path: root/dw
diff options
context:
space:
mode:
authorJorge Arellano Cid <jcid@dillo.org>2008-11-30 10:48:35 -0300
committerJorge Arellano Cid <jcid@dillo.org>2008-11-30 10:48:35 -0300
commit58aaa5c9ee0a674a1a29f95c9fe047540fc44df1 (patch)
treea253ea845c2c905bffb9220175f14e880c9cb6f5 /dw
parent163277cb82fa38a5e7a5b1728f5d9535efb2c921 (diff)
- Set middle click to submit in a new TAB. (Helps to keep form data!)
Diffstat (limited to 'dw')
-rw-r--r--dw/fltkui.cc51
-rw-r--r--dw/ui.cc16
-rw-r--r--dw/ui.hh9
3 files changed, 55 insertions, 21 deletions
diff --git a/dw/fltkui.cc b/dw/fltkui.cc
index d3136090..9d9b8107 100644
--- a/dw/fltkui.cc
+++ b/dw/fltkui.cc
@@ -286,11 +286,47 @@ void FltkLabelButtonResource::sizeRequest (core::Requisition *requisition)
}
}
+/*
+ * Get FLTK state and translate to dw
+ *
+ * TODO: find a good home for this and the fltkviewbase.cc original.
+ */
+static core::ButtonState getDwButtonState ()
+{
+ int s1 = ::fltk::event_state ();
+ int s2 = (core::ButtonState)0;
+
+ if(s1 & ::fltk::SHIFT) s2 |= core::SHIFT_MASK;
+ if(s1 & ::fltk::CTRL) s2 |= core::CONTROL_MASK;
+ if(s1 & ::fltk::ALT) s2 |= core::META_MASK;
+ if(s1 & ::fltk::BUTTON1) s2 |= core::BUTTON1_MASK;
+ if(s1 & ::fltk::BUTTON2) s2 |= core::BUTTON2_MASK;
+ if(s1 & ::fltk::BUTTON3) s2 |= core::BUTTON3_MASK;
+
+ return (core::ButtonState)s2;
+}
+
+static void setButtonEvent(dw::core::EventButton *event)
+{
+ event->xCanvas = ::fltk::event_x();
+ event->yCanvas = ::fltk::event_y();
+ event->state = getDwButtonState();
+ event->button = ::fltk::event_button();
+ event->numPressed = ::fltk::event_clicks() + 1;
+}
+
void FltkLabelButtonResource::widgetCallback (::fltk::Widget *widget,
void *data)
{
- if (widget->when () & ::fltk::WHEN_RELEASE)
- ((FltkLabelButtonResource*)data)->emitActivate ();
+ if ((widget->when () & ::fltk::WHEN_RELEASE) &&
+ ((::fltk::event_key() == ::fltk::ReturnKey) ||
+ (::fltk::event_button() == ::fltk::LeftButton ||
+ ::fltk::event_button() == ::fltk::MiddleButton))) {
+ FltkLabelButtonResource *lbr = (FltkLabelButtonResource*) data;
+ dw::core::EventButton event;
+ setButtonEvent(&event);
+ lbr->emitClicked(&event);
+ }
}
const char *FltkLabelButtonResource::getLabel ()
@@ -336,12 +372,15 @@ void FltkComplexButtonResource::widgetCallback (::fltk::Widget *widget,
{
FltkComplexButtonResource *res = (FltkComplexButtonResource*)data;
- /* would be best not to send click pos. if the image could not be loaded */
- if (::fltk::event() == ::fltk::RELEASE &&
- ::fltk::event_button() == ::fltk::LeftButton) {
+ if (widget->when() == ::fltk::WHEN_RELEASE &&
+ ((::fltk::event_key() == ::fltk::ReturnKey) ||
+ (::fltk::event_button() == ::fltk::LeftButton ||
+ ::fltk::event_button() == ::fltk::MiddleButton))) {
res->click_x = ::fltk::event_x();
res->click_y = ::fltk::event_y();
- res->emitActivate ();
+ dw::core::EventButton event;
+ setButtonEvent(&event);
+ res->emitClicked(&event);
} else {
((FltkViewBase*)res->lastFlatView)->handle(::fltk::event());
}
diff --git a/dw/ui.cc b/dw/ui.cc
index f857e387..6f9a692f 100644
--- a/dw/ui.cc
+++ b/dw/ui.cc
@@ -211,21 +211,17 @@ bool ButtonResource::ClickedEmitter::emitToReceiver (lout::signal::Receiver
{
((ClickedReceiver*)receiver)
->clicked ((ButtonResource*)((Pointer*)argv[0])->getValue (),
- ((Integer*)argv[1])->getValue (),
- ((Integer*)argv[2])->getValue (),
- ((Integer*)argv[3])->getValue ());
+ (EventButton*)((Pointer*)argv[1])->getValue());
return false;
}
void ButtonResource::ClickedEmitter::emitClicked (ButtonResource *resource,
- int buttonNo, int x, int y)
+ EventButton *event)
{
- Integer i1 (buttonNo);
- Integer i2 (x);
- Integer i3 (y);
- Pointer p (resource);
- Object *argv[4] = { &p, &i1, &i2, &i3 };
- emitVoid (0, 4, argv);
+ Pointer p1 (resource);
+ Pointer p2 (event);
+ Object *argv[2] = { &p1, &p2 };
+ emitVoid (0, 2, argv);
}
// ----------------------------------------------------------------------
diff --git a/dw/ui.hh b/dw/ui.hh
index de3e1b2b..3449e8b7 100644
--- a/dw/ui.hh
+++ b/dw/ui.hh
@@ -334,8 +334,7 @@ public:
class ClickedReceiver: public lout::signal::Receiver
{
public:
- virtual void clicked (ButtonResource *resource, int buttonNo, int x,
- int y) = 0;
+ virtual void clicked (ButtonResource *resource, EventButton *event) = 0;
};
private:
@@ -347,14 +346,14 @@ private:
public:
inline void connectClicked (ClickedReceiver *receiver) {
connect (receiver); }
- void emitClicked (ButtonResource *resource, int buttonNo, int x, int y);
+ void emitClicked (ButtonResource *resource, EventButton *event);
};
ClickedEmitter clickedEmitter;
protected:
- inline void emitClicked (int buttonNo, int x, int y) {
- return clickedEmitter.emitClicked (this, buttonNo, x, y); }
+ inline void emitClicked (EventButton *event) {
+ clickedEmitter.emitClicked (this, event); }
public:
inline void connectClicked (ClickedReceiver *receiver) {