* chore: do not include <set> unless we use it
* chore: do not include <map> unless we use it
* chore: do not include <string> unless we use it
* chore: do not include <list> unless we use it
* chore: do not include <memory> unless we use it
* chore: do not include <optional> unless we use it
* chore: do not include <functional> unless we use it
* Add compat operator* for RefPtr
* Rename `*_tree_view_*` button handling helpers to `*_item_view_*`
* Move torrent item colors to CSS
* Switch to list view for torrents list (GTK 4)
* Bump Fedora image to 39 (current rawhide) for GTK 4.11
Enable deprecations as there're lots of them in 4.11 and I'm not keen on
fixing them all right now. Disable warnings as errors due to
-Warray-bounds issue somewhere in libfmt.
* Refactor sorting and filtering compatibility code
Factor out parts of `TorrentFilter` and `TorrentSorter` classes into
reusable `FilterBase<>` and `SorterBase<>` templates.
Factor out filter and sort models setup from `FilterBar` and `Session`
classes into reusable `FilterListModel<>` and `SortListModel<>`
templates.
* Remove unused lambda capture (Clang build failure)
* Automatically (re)order include directives (GTK client)
Include our headers first to ease IWYU enforcement.
* Fix includes missing from headers (GTK client)
* Fix build on Mac after includes reordering
* Use `Gio::List{Model,Store}` for torrents
Switch from `Gtk::{TreeModel,ListStore}` in preparation for cell
renderers deprecation in GTK 4.10. That will require switching to the
new view classes (`Gtk::{Column,List}View`) which only work with `Gio`
models. Implement an adapter to support GTK+ 3 where the old view class
(`Gtk::TreeView`) only works with `Gtk` models; it is effective enough
but requires a signal connection per item to notify on row changes.
Refactor filtering and sorting (which now happen over the new model) to
use compatible `Gtk::Filter` and `Gtk::Sorter` classes. Although these
classes are only present in GTK 4, the abstraction is suitable for GTK+
3 as well so make our subclasses work for both versions.
Since items (of `Torrent` class) of the new model provide only a very
limited (by design) layer of compatibility with GTK+ 3 way of doing
things, refactor selection handling to do it the new way. Move selection
helpers into `MainWindow` to abstract them away since new view classes
handle it differently.
* Improve session load performance based on profiling results
* Fix `readability-container-data-pointer` clang-tidy issues
* Fix `readability-container-size-empty` clang-tidy issues
* Fix `readability-isolate-declaration` clang-tidy issues
* Fix `readability-convert-member-functions-to-static` clang-tidy issues
* Fix `readability-else-after-return` clang-tidy issues
* Fix `readability-redundant-member-init` clang-tidy issues
* Fix `readability-uppercase-literal-suffix` clang-tidy issues
* Fix `readability-make-member-function-const` clang-tidy issues
* Fix `readability-simplify-boolean-expr` clang-tidy issues
* Fix `readability-qualified-auto` clang-tidy issues
* Fix `readability-avoid-const-params-in-decls` clang-tidy issues
* Fix `readability-implicit-bool-conversion` clang-tidy issues
* Fix `readability-inconsistent-declaration-parameter-name` clang-tidy issues
* Add initial .clang-tidy configuration
Currently enabling readability checks only, others to follow. Of the
four disabled readability checks, three (function-cognitive-complexity,
identifier-length, magic-numbers) require extensive refactoring and were
left for later, and one (redundant-access-specifiers) is not planned to
be fixed due to the current coding style - using extra sections to
separate methods from variables of the same visibility.
* Make compact mode switch work for both GTK 3 and 4
* Implement GTK 4-specific view gesture handling
* Fix torrents view context menu on GTK 4
* Explicitly show/hide menubar on startup/teardown
* Switch from `Gtk::Pixbuf` to `Gio::Icon` for views
* Support GTK 4 exceptions based on `std::exception`
* Fix options menu setup with GTK 4
* Use `delete-event` (GTK 3) and `close-request` (GTK 4) signals to handle window clousure
* Add custom file chooser button implementation
GTK 4 drops FileChooserButton widget and suggests implementing it using
Button.
* Add helpers to set X11 hints with GTK 4
* Remove `HigWorkarea` class that's no longer used
* Make main menu shortcuts work with GTK 4
* Make drops work in main window and make dialog with GTK 4
* Remove unused `gtr_action_get_widget()` helper
* Fix text direction mark setup with GTK 4 (due to switch to enum class)
* Fix file tree font size calculation with GTK 4
* Fix crash during shutdown with GTK 4
* Switch from `RadioButton` to `CheckButton` for compatibility with GTK 4
* Fix opening files with GTK 4
* Rework torrent cell renderer to support both GTK 3 and 4
* Disable system tray icon support with GTK 4
* Fix windows positioning with GTK 4
* Fix focus event handling with GTK 4
* Adapt to tree model row/iterator changes in GTK 4
* Adapt to toplevel/root window changes in GTK 4
* Adapt to clipboard changes in GTK 4
* Adapt to icon/theme changes in GTK 4
* Adapt to file/path changes in GTK 4
* Random leftover fixes for GTK 4 compatibility
* Clean up unused code
* Move GTK 3 *.ui files into a subdirectory
* Add GTK 4 *.ui files
* Search for both GTK 3 and 4 during configuration
* build: rename GTK_MINIMUM, etc as GTKMM_MINIMUM in CMakeLists
* build: bump glibmm depdency min version to 2.60.0
https://github.com/transmission/transmission/issues/3846\#issuecomment-1263782526
for extraclassinit.h
* build: fix duplicated version number for deflate dependency
* build: sort dependency list in CMakeLists.txt
no functional changes, just housekeeping
* refactor: remove gtr_get_ptr()
* Move CSS definitions to resources
* Add Gtk::Builder helpers
* Switch StatsDialog to Gtk::Builder
* Switch RelocateDialog to Gtk::Builder
* Switch OptionsDialog to Gtk::Builder
* Switch MakeDialog to Gtk::Builder
* Switch FilterBar to Gtk::Builder
* Switch MainWindow to Gtk::Builder
* Switch MessageLogWindow to Gtk::Builder
* Switch DetailsDialog to Gtk::Builder
* Switch PrefsDialog to Gtk::Builder
* Fixup translatable strings
Since this branch was brewing for a while, changes happened in the meantime.
* refactor: include <memory> when using shared_ptr or unique_ptr
* refactor: include <cstdio> iff we use it
* refactor: include <cstring> iff we use it
* refactor: include <cstdlib> iff we use it
* refactor: include <string_view> or <string> iff we use it
* refactor: include <array> iff we use it
* refactor: include <ctime> iff we use it
* refactor: include <cctype> iff we use it
* refactor: misc #include cleanups in libtransmission
* (C++) Macros should not be used to define constants
* (C++) Memory should not be managed manually
* (C++) "void*" should not be used in typedefs, member variables, function parameters or return type
* (C++) When the "Rule-of-Zero" is not applicable, the "Rule-of-Five" should be followed
* (C++) "switch" statements should have "default" clauses
* (C++) "explicit" should be used on single-parameter constructors and conversiosn operators
* (C++) Non-const global variables should not be used
For non-C locales, empty string is translated into a multi-line text
containing descriptive translation headers, which then affects cell size
(and in turn, combo widget size) even though that cell is considered a
separator.