* 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
Previously `bandwidth.allocate()` was called twice in a row, once for
upload bandwidth and once for download bandwidth.
It has some semi-expensive housekeeping though, so avoid doing that work
twice by having a single call to `bandwidth.allocate()` operate on both
up and down bandwidth.
* Move jsonsl to third-party
This treats it as proper 3rd-party code to which our warning and style
settings don't extend.
* Move wildmat to third-party
This treats it as proper 3rd-party code to which our warning and style
settings don't extend.
* Fixup Xcode project to match new project structure
Its two calls to evbuffer_peek() used 3.5% of CPU use (measured with perf
when built with RelWithDebInfo). I added vecs() so that libtransmsision
could send noncontiguous buffers via utp_writev(); but in my testing, all
the buffers being sent are contiguous and so this is unnecessary work.
Make it behave [almost] the same way port test works: display update
status and final result in the label below the URL entry. The only
difference is that label returns to its usual mode showing total number
of rules after a while once update is finished; could probably have
done it differently but decided against it to avoid affecting
translations.
This regressed with the switch to `Gtk::Builder` because the dialog was
non-modal before.
This is the cause of the issue with blocklist update status dialog: it
seems that if there's a modal dialog running, showing another non-modal
dialog will make it inaccessible to the user until the first dialog is
closed thus leaving the modal mode.
* refactor: group related functions together in the source
* refactor: make tr_peerIo::decrypt() private
* refactor: make tr_peerIo::is_seed() private
* refactor: remove unused tr_isPeerIo()
Defaults to `OFF`. Downstream packagers are advised against enabling it
as we can't guarantee it working on every possible configuration.
Added the actual compile flag in the GTK client subdirectory and not
the top-level CMakeLists.txt file due to other subprojects not being
ready.
Fixed the only GTK client warning reported by Clang on Mac.
This is applicable to any signals where emitter's lifetime isn't
controlled by the receiver.
There're still about 7 `Glib::signal_idle()` connections which aren't
tracked but I see the possibility of it leading to major issues as quite
low.