summaryrefslogtreecommitdiff
path: root/src/Fl_Browser_.cxx
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2007-10-07 18:39:23 +0000
committerMatthias Melcher <fltk@matthiasm.com>2007-10-07 18:39:23 +0000
commita965dff1759c1d14d7afd6aa8d05abc106a867f9 (patch)
tree66b8316951ae61fafdfd291a84f9a364e88f45d4 /src/Fl_Browser_.cxx
parenteda8af507ee9e5dba1e3a1c77225f249321e6928 (diff)
STR #1742: Updated documentation to reflect the true nature of "selection()" and "value()" for Fl_Multi_Browser which can be quite surprisin for unsuspecting customers.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@5952 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/Fl_Browser_.cxx')
-rw-r--r--src/Fl_Browser_.cxx80
1 files changed, 42 insertions, 38 deletions
diff --git a/src/Fl_Browser_.cxx b/src/Fl_Browser_.cxx
index b64968055..183ccaf62 100644
--- a/src/Fl_Browser_.cxx
+++ b/src/Fl_Browser_.cxx
@@ -575,47 +575,51 @@ int Fl_Browser_::handle(int event) {
void* l1 = selection_;
void* l = l1; if (!l) l = top_; if (!l) l = item_first();
if (l) {
- if (type()==FL_HOLD_BROWSER) switch (Fl::event_key()) {
- case FL_Down:
- while ((l = item_next(l)))
- if (item_height(l)>0) {select_only(l, when()); break;}
- return 1;
- case FL_Up:
- while ((l = item_prev(l))) if (item_height(l)>0) {
- select_only(l, when()); break;}
- return 1;
- } else switch (Fl::event_key()) {
- case FL_Enter:
- case FL_KP_Enter:
- select_only(l, when());
- return 1;
- case ' ':
- selection_ = l;
- select(l, !item_selected(l), when());
- return 1;
- case FL_Down:
- while ((l = item_next(l))) {
- if (Fl::event_state(FL_SHIFT|FL_CTRL))
- select(l, l1 ? item_selected(l1) : 1, when());
- if (item_height(l)>0) goto J1;
- }
- return 1;
- case FL_Up:
- while ((l = item_prev(l))) {
- if (Fl::event_state(FL_SHIFT|FL_CTRL))
- select(l, l1 ? item_selected(l1) : 1, when());
- if (item_height(l)>0) goto J1;
- }
- return 1;
- J1:
- if (selection_) redraw_line(selection_);
- selection_ = l; redraw_line(l);
- display(l);
- return 1;
+ if (type()==FL_HOLD_BROWSER) {
+ switch (Fl::event_key()) {
+ case FL_Down:
+ while ((l = item_next(l)))
+ if (item_height(l)>0) {select_only(l, when()); break;}
+ return 1;
+ case FL_Up:
+ while ((l = item_prev(l))) if (item_height(l)>0) {
+ select_only(l, when()); break;}
+ return 1;
+ }
+ } else {
+ switch (Fl::event_key()) {
+ case FL_Enter:
+ case FL_KP_Enter:
+ select_only(l, when());
+ return 1;
+ case ' ':
+ selection_ = l;
+ select(l, !item_selected(l), when());
+ return 1;
+ case FL_Down:
+ while ((l = item_next(l))) {
+ if (Fl::event_state(FL_SHIFT|FL_CTRL))
+ select(l, l1 ? item_selected(l1) : 1, when());
+ if (item_height(l)>0) goto J1;
+ }
+ return 1;
+ case FL_Up:
+ while ((l = item_prev(l))) {
+ if (Fl::event_state(FL_SHIFT|FL_CTRL))
+ select(l, l1 ? item_selected(l1) : 1, when());
+ if (item_height(l)>0) goto J1;
+ }
+ return 1;
+J1:
+ if (selection_) redraw_line(selection_);
+ selection_ = l; redraw_line(l);
+ display(l);
+ return 1;
+ }
}
}
}
-
+
if (Fl_Group::handle(event)) return 1;
int X, Y, W, H; bbox(X, Y, W, H);
int my;