Author: matt
Date: 2008-02-20 09:59:13 -0800 (Wed, 20 Feb 2008)
New Revision: 6031
Log:
STR 1719: fixed inconsistencies with FL_WHEN_NOT_CHANGED
Modified:
branches/branch-1.1/CHANGES
branches/branch-1.1/FL/Fl_Input_Choice.H
branches/branch-1.1/src/Fl_Button.cxx
branches/branch-1.1/src/Fl_Input.cxx
branches/branch-1.1/src/Fl_Input_.cxx
Modified: branches/branch-1.1/CHANGES
===================================================================
--- branches/branch-1.1/CHANGES 2008-02-20 17:42:08 UTC (rev 6030)
+++ branches/branch-1.1/CHANGES 2008-02-20 17:59:13 UTC (rev 6031)
@@ -6,6 +6,7 @@
STR #1742, STR #1777, STR #1794, STR #1827, STR #1843,
STR #1796, STR #1815, STR #1726, STR #1753, STR #1855,
STR #1862, STR #1867, STR #1874)
+ - Fixed inconsistencies with CHANGED flags (STR #1719)
- Fixed message sent to hidden widgets (STR #1849)
- Fixed width calculation in Fl_Help_ViewA (STR #1868)
- Fixed offset bug in OS X pixmap code (STR #1856)
Modified: branches/branch-1.1/FL/Fl_Input_Choice.H
===================================================================
--- branches/branch-1.1/FL/Fl_Input_Choice.H 2008-02-20 17:42:08 UTC (rev
6030)
+++ branches/branch-1.1/FL/Fl_Input_Choice.H 2008-02-20 17:59:13 UTC (rev
6031)
@@ -38,6 +38,7 @@
#include <FL/Fl_Input.H>
#include <FL/Fl_Menu_Button.H>
#include <FL/fl_draw.H>
+#include <string.h>
class Fl_Input_Choice : public Fl_Group {
// Private class to handle slightly 'special' behavior of menu button
@@ -60,19 +61,41 @@
static void menu_cb(Fl_Widget*, void *data) {
Fl_Input_Choice *o=(Fl_Input_Choice *)data;
const Fl_Menu_Item *item = o->menubutton()->mvalue();
- if ( item && item->flags & (FL_SUBMENU|FL_SUBMENU_POINTER) ) return;
// ignore submenus
- o->inp_->value(o->menu_->text());
- o->inp_->set_changed();
- o->do_callback();
+ if (item && item->flags & (FL_SUBMENU|FL_SUBMENU_POINTER)) return; //
ignore submenus
+ if (!strcmp(o->inp_->value(), o->menu_->text()))
+ {
+ o->Fl_Widget::clear_changed();
+ if (o->when() & FL_WHEN_NOT_CHANGED)
+ o->do_callback();
+ }
+ else
+ {
+ o->inp_->value(o->menu_->text());
+ o->inp_->set_changed();
+ o->Fl_Widget::set_changed();
+ if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE))
+ o->do_callback();
+ }
+
+ if (o->callback() != default_callback)
+ {
+ o->Fl_Widget::clear_changed();
+ o->inp_->clear_changed();
+ }
}
static void inp_cb(Fl_Widget*, void *data) {
Fl_Input_Choice *o=(Fl_Input_Choice *)data;
- if (o->inp_->changed())
+ if (o->inp_->changed()) {
o->Fl_Widget::set_changed();
- else
+ if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE))
+ o->do_callback();
+ } else {
o->Fl_Widget::clear_changed();
- o->do_callback();
+ if (o->when() & FL_WHEN_NOT_CHANGED)
+ o->do_callback();
+ }
+
if (o->callback() != default_callback)
o->Fl_Widget::clear_changed();
}
@@ -96,6 +119,7 @@
inp_w(), inp_h());
inp_->callback(inp_cb, (void*)this);
inp_->box(FL_FLAT_BOX); // cosmetic
+ inp_->when(FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED);
menu_ = new InputMenuButton(menu_x(), menu_y(),
menu_w(), menu_h());
menu_->callback(menu_cb, (void*)this);
Modified: branches/branch-1.1/src/Fl_Button.cxx
===================================================================
--- branches/branch-1.1/src/Fl_Button.cxx 2008-02-20 17:42:08 UTC (rev
6030)
+++ branches/branch-1.1/src/Fl_Button.cxx 2008-02-20 17:59:13 UTC (rev
6031)
@@ -85,7 +85,10 @@
if (type() == FL_RADIO_BUTTON) newval = 1;
else newval = !oldval;
} else
+ {
+ clear_changed();
newval = oldval;
+ }
if (newval != value_) {
value_ = newval;
set_changed();
@@ -103,6 +106,7 @@
else if (type() == FL_TOGGLE_BUTTON) oldval = value_;
else {
value(oldval);
+ set_changed();
if (when() & FL_WHEN_CHANGED) do_callback();
}
if (when() & FL_WHEN_RELEASE) do_callback();
Modified: branches/branch-1.1/src/Fl_Input.cxx
===================================================================
--- branches/branch-1.1/src/Fl_Input.cxx 2008-02-20 17:42:08 UTC (rev
6030)
+++ branches/branch-1.1/src/Fl_Input.cxx 2008-02-20 17:59:13 UTC (rev
6031)
@@ -409,9 +409,10 @@
// user double or triple clicked to select word or whole text
copy(0);
}
- // For output widgets, do the callback so the app knows the user
- // did something with the mouse...
- if (readonly()) do_callback();
+
+ // perform the RELEASE callback
+ if (when() & FL_WHEN_RELEASE)
+ maybe_do_callback();
return 1;
case FL_DND_ENTER:
Modified: branches/branch-1.1/src/Fl_Input_.cxx
===================================================================
--- branches/branch-1.1/src/Fl_Input_.cxx 2008-02-20 17:42:08 UTC (rev
6030)
+++ branches/branch-1.1/src/Fl_Input_.cxx 2008-02-20 17:59:13 UTC (rev
6031)
@@ -715,7 +715,9 @@
} else //if (Fl::selection_owner() != this)
minimal_update(mark_, position_);
case FL_HIDE:
- if (when() & FL_WHEN_RELEASE) maybe_do_callback();
+ if (!readonly() &&
+ (when() & (FL_WHEN_RELEASE | FL_WHEN_NOT_CHANGED)))
+ maybe_do_callback();
return 1;
case FL_PUSH:
_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit