diff options
| author | Carl Hetherington <cth@carlh.net> | 2024-11-17 14:38:20 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2024-11-17 14:46:52 +0100 |
| commit | d51d330f78f11160509a764060ecc17a731e97cf (patch) | |
| tree | cc40490776f66d57960ed9057fd799076e4fa019 /src | |
| parent | 4a57f54fe4f0039439c54a86d175859764c70578 (diff) | |
Fix multi-selection of content.v2.16.98
In order to add ellipsizing of text we're using this "mode" of wxListCtrl where
`OnGetItemAttr` is called to get information about an item. This was intended
to support very long lists, so that the whole list does not have to be given
to wxListCtrl.
However, in this mode, multiple selections (e.g. shift-click) are just not
reported. There's a 13-year-old wxWidgets bug to fix this:
https://github.com/wxWidgets/wxWidgets/issues/4541
and there is mentioned the workaround applied here - listen to the focused
event. We have to delay it because on macOS (at least) the selection state
is not updated until after the focused event.
Diffstat (limited to 'src')
| -rw-r--r-- | src/wx/content_panel.cc | 8 | ||||
| -rw-r--r-- | src/wx/content_panel.h | 1 |
2 files changed, 9 insertions, 0 deletions
diff --git a/src/wx/content_panel.cc b/src/wx/content_panel.cc index 9e73900fc..31dd56151 100644 --- a/src/wx/content_panel.cc +++ b/src/wx/content_panel.cc @@ -300,6 +300,7 @@ ContentPanel::ContentPanel(wxNotebook* n, shared_ptr<Film> film, FilmViewer& vie _content->Bind (wxEVT_LIST_ITEM_SELECTED, boost::bind (&ContentPanel::item_selected, this)); _content->Bind (wxEVT_LIST_ITEM_DESELECTED, boost::bind (&ContentPanel::item_deselected, this)); + _content->Bind (wxEVT_LIST_ITEM_FOCUSED, boost::bind (&ContentPanel::item_focused, this)); _content->Bind (wxEVT_LIST_ITEM_RIGHT_CLICK, boost::bind (&ContentPanel::right_click, this, _1)); _content->Bind (wxEVT_DROP_FILES, boost::bind (&ContentPanel::files_dropped, this, _1)); _add_file->Bind (wxEVT_BUTTON, boost::bind (&ContentPanel::add_file_clicked, this)); @@ -450,6 +451,13 @@ ContentPanel::item_selected () void +ContentPanel::item_focused() +{ + signal_manager->when_idle(boost::bind(&ContentPanel::check_selection, this)); +} + + +void ContentPanel::check_selection () { if (_no_check_selection) { diff --git a/src/wx/content_panel.h b/src/wx/content_panel.h index ca0d49719..45478a699 100644 --- a/src/wx/content_panel.h +++ b/src/wx/content_panel.h @@ -102,6 +102,7 @@ private: void item_selected (); void item_deselected (); void item_deselected_idle (); + void item_focused (); void check_selection (); void add_folder_clicked (); void add_dcp_clicked (); |
