diff options
| author | Matthias Melcher <fltk@matthiasm.com> | 2007-10-07 18:39:23 +0000 |
|---|---|---|
| committer | Matthias Melcher <fltk@matthiasm.com> | 2007-10-07 18:39:23 +0000 |
| commit | a965dff1759c1d14d7afd6aa8d05abc106a867f9 (patch) | |
| tree | 66b8316951ae61fafdfd291a84f9a364e88f45d4 /src/Fl_Browser_.cxx | |
| parent | eda8af507ee9e5dba1e3a1c77225f249321e6928 (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_.cxx | 80 |
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; |
