diff --git a/CHANGES b/CHANGES index a6a0b1474..c7e2863ec 100644 --- a/CHANGES +++ b/CHANGES @@ -2,7 +2,8 @@ CHANGES IN FLTK 1.1.8 - Documentation fixes (STR #1454, STR #1455, STR #1456, STR #1457, STR #1458, STR #1460, STR #1481, STR #1578, - STR #1639, STR #1645, STR #1644, STR #1792, STR #1793) + STR #1639, STR #1645, STR #1644, STR #1792, STR #1793, + STR #1742) - Changing the window size in FLUID would not mark the project as modified (STR #1751) - Fixed fl_filename_isdir for "/"-path (STR #1761) diff --git a/documentation/Fl_Browser_.html b/documentation/Fl_Browser_.html index 99ff5b479..2183d61c7 100644 --- a/documentation/Fl_Browser_.html +++ b/documentation/Fl_Browser_.html @@ -376,8 +376,11 @@ callback function for the widget.

void *Fl_Browser_::selection() const

Returns the item currently selected, or NULL if there is no selection. -For multiple selection browsers this call returns the last item that was -selected. + +

For multiple selection browsers this call returns the currently focused item, +even if it is not selected. To find all selected items, call + +Fl_Multi_Browser::selected() for every item in question.

Fl_Color Fl_Browser_::textcolor() const diff --git a/documentation/Fl_Multi_Browser.html b/documentation/Fl_Multi_Browser.html index 071f004da..5140bf67e 100644 --- a/documentation/Fl_Multi_Browser.html +++ b/documentation/Fl_Multi_Browser.html @@ -38,23 +38,41 @@ methods to add and remove lines from the browser.

  • select
  • value
  • +

    Fl_Multi_Browser::Fl_Multi_Browser(int x, int y, int w, int h, const char *label = 0)

    - Creates a new Fl_Multi_Browser widget using the given + +Creates a new Fl_Multi_Browser widget using the given position, size, and label string. The default boxtype is FL_DOWN_BOX . + +

    virtual Fl_Multi_Browser::~Fl_Multi_Browser()

    - The destructor also deletes all the items in the list. + +The destructor also deletes all the items in the list. + +

    int Fl_Browser::deselect()

    - Deselects all lines. + +Deselects all lines. + +

    int Fl_Browser::select(int,int=1)
    int Fl_Browser::selected(int) const

    - Selects one or more lines or gets the current selection state of a + +Selects one or more lines or gets the current selection state of a line. -

    int Fl_Browser::value() const -
    void Fl_Browser::value(int)

    - Selects a single line or gets the last toggled line. This returns zero -if no line has been toggled, so be aware that this can happen in a -callback. + + +

    void Fl_Browser::value(int) +
    int Fl_Browser::value() const

    + +The first version of this call selects a single line. The second version returns +the currently focused item, even if it is not selected. To find all +selected items, call + +Fl_Multi_Browser::selected() for every item in question. + + 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;