Commit Graph

34 Commits

Author SHA1 Message Date
Mike Gelfand bc380511db
Modernize CMake code (ongoing refactoring) (#4507)
* Reformat CMake code

* Bump minimum CMake version to 3.12

* Add target sources separately via `target_source()`

* Make `tr_win32_app_info()` add target sources on its own

* Don't use `include_directories()`

* Don't use `add_definitions()`

* Limit use of `add_compile_options()`

* Move VDKQueue target declaration to a subdirectory

* Add `tr_disable_source_files_compile()` helper

* Add `tr_target_glib_resources()` helper

* Add `tr_gettext_msgfmt()` helper

* Enable AUTOUIC for Qt client

* Enable AUTORCC for Qt client

* Remove AUTO{MOC,RCC,UIC} source group overrides

* Add `tr_target_idl_files()` helper

* Move source group setup to `tr_qt_add_translation()`

* Add `tr_target_xib_files()` helper

* Prefer `target_sources()` to intermediate variables

* Use explicit visibility versions of `target_*()` commands

* Prefer genexes to conditions in `target_*()` commands

* Add `tr_allow_compile_if()` helper

* Leave only top-level `project()`, remove the rest

* Minor fixups

* Fixup Mac QL plugin install

* Fixup IDE target folders and source groups
2023-01-01 19:49:48 +00:00
Mike Gelfand 192a76b621
Move GTK compatibility definitions into a separate header (#4493)
* Move GTK compatibility macros into a separate header

* Fix Cairo compatibility checks

* Move Glib-namespaced definitions to GtkCompat header

* Remove unused stringify definitions since we're using fmtlib
2022-12-29 02:42:20 +00:00
Mike Gelfand 32531fe5ef
Use `Gio::List{Model,Store}` for torrents (#4430)
* 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
2022-12-21 21:26:25 +00:00
Mike Gelfand e694c3e3a0
Use C++ (not C) warning flags for GTK client (#4395)
Use the opportunity to reduce duplication.
2022-12-18 01:02:03 +00:00
Mike Gelfand 67c4e4081c
Add `ENABLE_WERROR` option for use on CI (#4381)
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.
2022-12-16 22:38:30 +00:00
Mike Gelfand f58c238d4a
Show "Enable uTP" checkbox in preferences if supported (GTK client) (#4349)
Broken with switch to CMake. Ideally, need an API/RPC method to request
core capabilities to support remote sessions.
2022-12-11 21:58:17 +00:00
Mike Gelfand 43acd7e3e4
Remove Xcode project in favor of CMake (#4147)
* Compile images into an assets catalog

* Optionally sign resulting Mac bundle

* Move 3rd-party/utility/test targets to their own folders

* Enable ARC via compile options unconditionally

* Install base and localized resources into correct directory

This seems like a Xcode quirk: if subdirectory containing the resource file
matches the destination directory name (and probably if there's more than one
resource file being installed there), the resulting folder structure then
contains an extra subdirectory, i.e. Resources/dirname/dirname/resname.

* Group source files for better structure in IDEs (Xcode, VS)

* Remove Xcode project

Using Xcode is still possible via "Xcode" CMake generator.

* Use ad-hoc signature if one is not specified

* Always use ad-hoc signature on link, leave proper signing to CPack

* Install localized resources into correct directory (QL plugin)

* Don't include CTest (we don't use additional targets it provides)

* Revert "Remove Xcode project"

This reverts commit dc069f654f.
2022-11-12 20:01:57 +00:00
Mike Gelfand da27c3d18d
Prefer ayatana-appindicator over appindicator, if present (#4001) 2022-10-20 18:15:13 +01:00
Mike Gelfand b0de4b7a89
Add build job based on Fedora 37 (#3921)
This allows to test against GTK 4 and Qt 6.

Changes to CMakeLists.txt files are non-functional and are meant to
trigger the components rebuild, nothing more.
2022-10-09 12:13:02 +03:00
Mike Gelfand 8712db3b4c
Support switching between GTK 3 and 4 within the same build directory (#3918) 2022-10-09 10:29:47 +03:00
Mike Gelfand c75c6bf5c8
Add support for GTK 4 (#3916)
* 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
2022-10-09 01:50:03 +03:00
Mike Gelfand b41501eeb8
Switch to Gtk::Builder for all UI in GTK client (#3781)
* 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.
2022-09-08 01:25:04 +03:00
lucaxvi 74d2f1a2d6
refactor(gtk): use symbolic icons in status bar (#3655) 2022-08-18 11:15:27 -05:00
Charles Kerr 36b70ed137
refactor: use svg icons in GTK client (#3395) 2022-07-03 17:14:13 -05:00
Charles Kerr 6e8f9f3ff0
feat: add tr_strbuf (#2810)
* feat: add tr_strbuf class for building tmp strings

Based on fmt::basic_memory_buf, this is a growable string buffer that
has an initial size that's large enough to build most filenames or URLs
without needing heap allocations.

Adds a couple of extra helpers such as a `c_str()` method to make dealing
with old zero-terminated string APIs easier.
2022-03-24 16:41:29 -05:00
Charles Kerr a942c67199
refactor: use fmt (#2758)
* deps: use fmt (8.1.1 tag) to build log strings

Co-authored-by: Mike Gelfand <mikedld@mikedld.com>
2022-03-13 23:43:35 -05:00
Charles Kerr 0a27346efb
use metainfo folder instead of appdata (#2624)
* use metainfo folder instead of appdata

Co-authored-by: David Heidelberg <david@ixit.cz>
2022-02-14 09:41:19 -06:00
Charles Kerr 47d41f51bf
build: disable exit-time-destructor warnings in GTK client (#2154)
* build: disable exit-time-destructor warnings in GTK client

* build: re-enable deprecation warnings (fixed by #2129)
2021-11-14 10:12:29 -06:00
Mike Gelfand 82b3da0a54
Don't use deprecated GTK APIs (#2129)
* Don't use deprecated Glib::Thread

* Don't use deprecated stock ID APIs

* Don't use deprecated operator const void* in IconInfo

* Don't use deprecated Gtk::TreeView::set_rules_hint()

* Don't use deprecated Gtk::Widget::set_margin_left()

* Don't use deprecated Gtk::UIManager

* Don't use deprecated sigc::mem_ptr accepting object pointer

* Enable {GDK,GIO,GLIB,GTK,PANGO,SIGCXX}MM deprecation guards

* Enable GTK deprecation guard

Co-authored-by: Charles Kerr <charles@charleskerr.com>
2021-11-12 12:12:50 +03:00
Mike Gelfand eaeed301fa
Rename GTK client files to match the classes they contain (#2073)
This also brings naming closer to Qt client which simplifies things a
bit.
2021-11-01 03:11:23 +03:00
Mike Gelfand 63ad19fb5a
Move Application class to a separate file (#2072) 2021-11-01 00:04:31 +03:00
Mike Gelfand 4ac1c601f5
Port GTK client to C++ (#1833)
* Rename GTK client .c files to .cc

* Fix GTK client build errors after C to C++ switch

* Remove `G_{BEGIN,END}_DECLS`

Co-authored-by: Charles Kerr <charles@charleskerr.com>
2021-09-25 13:47:09 +03:00
Charles Kerr 677dc73eac
refactor: use GTest for running tests (#1383)
* refactor: use google-test on libtransmission tests
2020-08-11 13:11:55 -05:00
Charles Kerr 6da4a4dfad
Fix or silence gtk warnings (#1380)
* chore: disable deprecation warnings in GTK client

Yes, updating the GTK codebase is still a goal. (help welcomed!)
But there's a deluge of deprecation warnings that drown out other more
important warnings, so turn off deprecation warnings for now.

* fixup! chore: disable deprecation warnings in GTK client

* fix: gtk_tree_sortable_set_sort_column_id caller.

* fix: gtk_window_resize caller.
2020-07-30 14:45:11 -05:00
Jakub Steiner 7b53f4238d
icon: update application icon (#1141)
Fixes https://github.com/transmission/transmission/issues/1140

Co-authored-by: Charles Kerr <ckerr@github.com>
2020-04-25 20:01:49 -05:00
userwithuid 8c160aad2d cmake: replace intltool with gettext
requires gettext 0.19.7 or higher
2018-04-18 09:25:13 +00:00
Will Thompson 01ffcd5dcf
gtk: add symbolic icon
The -symbolic icon variant (if available) is used in the GNOME top bar,
and when the high contrast theme is in use.  This icon was created by
Jakub Steiner, and comes from the gnome-icons repository:

https://github.com/gnome-design-team/gnome-icons/blob/master/apps-symbolic/Adwaita/scalable/apps/transmission-symbolic.svg
https://bugzilla.redhat.com/show_bug.cgi?id=1221292

There is some confusion over whether symbolic app icons should be
installed to icons/hicolor/scalable/apps (alongside the regular scalable
icon) or to icons/hicolor/symbolic/apps. On the one hand,
https://wiki.gnome.org/Initiatives/GnomeGoals/HighContrastAppIcons has
this to say:

> […] obtain a suitable symbolic style icon […] and install it to the
> hicolor prefix, the same way you would for the full color variant.
>
> cp myapp-symbolic.svg /usr/share/icons/hicolor/scalable/apps/myapp-symbolic.svg

On the other hand, the Fedora package at
https://src.fedoraproject.org/rpms/transmission/blob/master/f/transmission.spec
ships this icon in icons/hicolor/symbolic/apps:

> # Install the symbolic icon
> mkdir -p  %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps
> cp %{SOURCE1} %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps/transmission-symbolic.svg

Anecdotally, icons in scalable/ have minimum size 64×64 on openSUSE, so
symbolic/ is the safer location (given the GNOME top bar uses 32×32
icons). This has the advantage of matching the location used in the
distribution which already ships this file.

https://github.com/transmission/transmission/issues/414
2017-11-30 17:38:34 +00:00
Will Thompson 23d61b6457
gtk: add AppData file
This file was originally written by Richard Hughes, for Fedora, who
proposed it on the Transmission forum here:
https://forum.transmissionbt.com/viewtopic.php?f=3&t=16443

It's used to display a nice description and screenshot in GNOME
Software. The format is documented here:
https://www.freedesktop.org/software/appstream/docs/chap-Quickstart.html

The <_name/> and <_summary/> fields match the Name= and Comment= fields
in the .desktop file so are already translated.

The screenshot is taken with Transmission 2.92 (14714) on Fedora 25.
It's at one of the sizes recommended by the GNOME Shell Screenshot
Window Sizer extension.

The <update_contact/> is based on the Git history.
2017-05-03 17:43:23 +01:00
Mike Gelfand 495e9b2fa0 Load icons with GResource, remove deprecated inline pixbufs 2016-02-23 04:34:57 +00:00
Mike Gelfand bfc336614e Add libevent include directories to GTK+ client 2015-12-12 18:46:39 +00:00
Jordan Lee f3cebc6663 link transmission-gtk against libappindicator if necessary 2015-12-06 16:12:27 +00:00
Mike Gelfand 829cbffaf7 Add version info to executables (on Windows). Group projects into folders (CMake). 2015-04-14 22:46:40 +00:00
Mike Gelfand c43a10ab9d Mark GTK and Qt clients as GUI programs on Windows (detach from console) 2015-01-04 10:57:09 +00:00
Mike Gelfand 83c4edb008 #5828: Initial CMake build system support 2014-12-01 19:55:22 +00:00