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
This commit is contained in:
Mike Gelfand
2022-10-08 15:50:03 -07:00
committed by GitHub
parent e3b871216f
commit c75c6bf5c8
63 changed files with 6329 additions and 849 deletions

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface domain="transmission-gtk">
<requires lib="gtk" version="4.0"/>
<object class="GtkDialog" id="AddTrackerDialog">
<property name="modal">1</property>
<child internal-child="content_area">
<object class="GtkBox" id="dialog_layout">
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<property name="css-classes">tr-dialog-content</property>
<property name="vexpand">1</property>
<child>
<object class="GtkBox" id="dialog_content_layout">
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkLabel" id="url_section_label">
<property name="label" translatable="1">Tracker</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
<child>
<object class="GtkGrid" id="url_section_layout">
<property name="margin-start">18</property>
<property name="row-spacing">6</property>
<property name="column-spacing">12</property>
<child>
<object class="GtkLabel" id="url_label">
<property name="label" translatable="1">_Announce URL:</property>
<property name="use-underline">1</property>
<property name="mnemonic-widget">url_entry</property>
<layout>
<property name="column">0</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="GtkEntry" id="url_entry">
<property name="width-request">400</property>
<property name="focusable">1</property>
<property name="hexpand">1</property>
<layout>
<property name="column">1</property>
<property name="row">0</property>
</layout>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child internal-child="action_area">
<object class="GtkBox" id="dialog_buttons">
<property name="css-classes">tr-button-box</property>
<property name="spacing">6</property>
<child>
<object class="GtkButton" id="cancel_button">
<property name="label" translatable="1">_Cancel</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
<child>
<object class="GtkButton" id="open_button">
<property name="label" translatable="1">_Add</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
</object>
</child>
<action-widgets>
<action-widget response="-6">cancel_button</action-widget>
<action-widget response="-3">open_button</action-widget>
</action-widgets>
</object>
</interface>

View File

@@ -0,0 +1,880 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface domain="transmission-gtk">
<requires lib="gtk" version="4.0"/>
<object class="GtkDialog" id="DetailsDialog">
<child internal-child="content_area">
<object class="GtkBox" id="dialog_layout">
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<property name="css-classes">tr-dialog-content</property>
<property name="vexpand">1</property>
<child>
<object class="GtkNotebook" id="dialog_pages">
<property name="vexpand">1</property>
<property name="focusable">1</property>
<child>
<object class="GtkNotebookPage">
<property name="child">
<object class="GtkBox" id="info_page_layout">
<property name="css-classes">tr-pad-large</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkLabel" id="activity_section_label">
<property name="hexpand">1</property>
<property name="label" translatable="1">Activity</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
<child>
<object class="GtkGrid" id="activity_section_layout">
<property name="margin-start">18</property>
<property name="row-spacing">6</property>
<property name="column-spacing">12</property>
<child>
<object class="GtkLabel" id="torrent_size_label">
<property name="label" translatable="1">Torrent size:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="have_label">
<property name="label" translatable="1">Have:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">1</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="uploaded_label">
<property name="label" translatable="1">Uploaded:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="downloaded_label">
<property name="label" translatable="1">Downloaded:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">3</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="state_label">
<property name="label" translatable="1">State:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">4</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="running_time_label">
<property name="label" translatable="1">Running time:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">5</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="remaining_time_label">
<property name="label" translatable="1">Remaining time:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">6</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="last_activity_label">
<property name="label" translatable="1">Last activity:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">7</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="error_label">
<property name="label" translatable="1">Error:</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">8</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="torrent_size_value_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="have_value_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">1</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="uploaded_value_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="downloaded_value_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">3</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="state_value_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">4</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="running_time_value_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">5</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="remaining_time_value_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">6</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="last_activity_value_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">7</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="error_value_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="wrap">1</property>
<property name="max-width-chars">1</property>
<property name="selectable">1</property>
<property name="ellipsize">end</property>
<property name="lines">10</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">8</property>
</layout>
</object>
</child>
</object>
</child>
<child>
<object class="GtkFixed">
<property name="height-request">6</property>
</object>
</child>
<child>
<object class="GtkLabel" id="details_section_label">
<property name="hexpand">1</property>
<property name="label" translatable="1">Details</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
<child>
<object class="GtkGrid" id="details_section_layout">
<property name="margin-start">18</property>
<property name="row-spacing">6</property>
<property name="column-spacing">12</property>
<child>
<object class="GtkLabel" id="location_label">
<property name="label" translatable="1">Location:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="hash_label">
<property name="label" translatable="1">Hash:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">1</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="privacy_label">
<property name="label" translatable="1">Privacy:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="origin_label">
<property name="label" translatable="1">Origin:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">3</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="added_label">
<property name="label" translatable="1">Added:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">4</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="comment_label">
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="label" translatable="1">Comment:</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">5</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="location_value_label">
<property name="label">...</property>
<property name="selectable">1</property>
<property name="ellipsize">end</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="hash_value_label">
<property name="label">...</property>
<property name="selectable">1</property>
<property name="ellipsize">end</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">1</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="privacy_value_label">
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="origin_value_label">
<property name="label">...</property>
<property name="selectable">1</property>
<property name="ellipsize">end</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">3</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="added_value_label">
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">4</property>
</layout>
</object>
</child>
<child>
<object class="GtkScrolledWindow" id="comment_value_view_scroll">
<property name="width-request">350</property>
<property name="height-request">36</property>
<property name="focusable">1</property>
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<property name="has-frame">1</property>
<property name="child">
<object class="GtkTextView" id="comment_value_view">
<property name="focusable">1</property>
<property name="editable">0</property>
<property name="wrap-mode">word</property>
</object>
</property>
<layout>
<property name="column">1</property>
<property name="row">5</property>
</layout>
</object>
</child>
</object>
</child>
</object>
</property>
<property name="tab">
<object class="GtkLabel" id="info_page_label">
<property name="label" translatable="1">Information</property>
</object>
</property>
</object>
</child>
<child>
<object class="GtkNotebookPage">
<property name="position">1</property>
<property name="child">
<object class="GtkBox" id="peers_page_layout">
<property name="css-classes">tr-pad-large</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkPaned" id="peers_page_panes">
<property name="vexpand">1</property>
<property name="resize-start-child">0</property>
<property name="focusable">1</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow" id="webseeds_view_scroll">
<property name="focusable">1</property>
<property name="has-frame">1</property>
<property name="child">
<object class="GtkTreeView" id="webseeds_view">
<property name="focusable">1</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="webseeds_view_selection"/>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkScrolledWindow" id="peers_view_scroll">
<property name="focusable">1</property>
<property name="has-frame">1</property>
<property name="child">
<object class="GtkTreeView" id="peers_view">
<property name="focusable">1</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="peers_view_selection"/>
</child>
</object>
</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkCheckButton" id="more_peer_details_check">
<property name="label" translatable="1">Show _more details</property>
<property name="focusable">1</property>
<property name="valign">center</property>
<property name="use-underline">1</property>
</object>
</child>
</object>
</property>
<property name="tab">
<object class="GtkLabel" id="peers_page_label">
<property name="label" translatable="1">Peers</property>
</object>
</property>
</object>
</child>
<child>
<object class="GtkNotebookPage">
<property name="position">2</property>
<property name="child">
<object class="GtkBox" id="trackers_page_layout">
<property name="css-classes">tr-pad-large</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkBox" id="trackers_layout">
<property name="vexpand">1</property>
<property name="spacing">12</property>
<child>
<object class="GtkScrolledWindow" id="trackers_view_scroll">
<property name="hexpand">1</property>
<property name="focusable">1</property>
<property name="has-frame">1</property>
<property name="child">
<object class="GtkTreeView" id="trackers_view">
<property name="focusable">1</property>
<property name="headers-visible">0</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkBox" id="tracker_buttons_layout">
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkButton" id="add_tracker_button">
<property name="label" translatable="1">_Add</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
<child>
<object class="GtkButton" id="edit_tracker_button">
<property name="label" translatable="1">_Edit</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
<child>
<object class="GtkButton" id="remove_tracker_button">
<property name="label" translatable="1">_Remove</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkCheckButton" id="more_tracker_details_check">
<property name="label" translatable="1">Show _more details</property>
<property name="focusable">1</property>
<property name="valign">center</property>
<property name="use-underline">1</property>
</object>
</child>
<child>
<object class="GtkCheckButton" id="backup_trackers_check">
<property name="label" translatable="1">Show _backup trackers</property>
<property name="focusable">1</property>
<property name="valign">center</property>
<property name="use-underline">1</property>
</object>
</child>
</object>
</property>
<property name="tab">
<object class="GtkLabel" id="trackers_page_label">
<property name="label" translatable="1">Trackers</property>
</object>
</property>
</object>
</child>
<child>
<object class="GtkNotebookPage">
<property name="position">3</property>
<property name="child">
<object class="GtkBox" id="files_page_layout">
<property name="css-classes">tr-pad-large</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow" id="files_view_scroll">
<property name="vexpand">1</property>
<property name="focusable">1</property>
<property name="has-frame">1</property>
<property name="child">
<object class="GtkTreeView" id="files_view">
<property name="focusable">1</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkLabel" id="files_label">
<property name="vexpand">1</property>
<property name="label" translatable="1">File listing not available for combined torrent properties</property>
</object>
</child>
</object>
</property>
<property name="tab">
<object class="GtkLabel" id="files_page_label">
<property name="label" translatable="1">Files</property>
</object>
</property>
</object>
</child>
<child>
<object class="GtkNotebookPage">
<property name="position">4</property>
<property name="child">
<object class="GtkBox" id="options_page_layout">
<property name="css-classes">tr-pad-large</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkLabel" id="speed_section_label">
<property name="hexpand">1</property>
<property name="label" translatable="1">Speed</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
<child>
<object class="GtkGrid" id="speed_section_layout">
<property name="margin-start">18</property>
<property name="row-spacing">6</property>
<property name="column-spacing">12</property>
<child>
<object class="GtkCheckButton" id="honor_limits_check">
<property name="label" translatable="1">Honor global _limits</property>
<property name="focusable">1</property>
<property name="valign">center</property>
<property name="use-underline">1</property>
<layout>
<property name="column">0</property>
<property name="row">0</property>
<property name="column-span">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkCheckButton" id="download_limit_check">
<property name="label" translatable="1">Limit _download speed ({speed_units}):</property>
<property name="focusable">1</property>
<property name="valign">center</property>
<property name="use-underline">1</property>
<layout>
<property name="column">0</property>
<property name="row">1</property>
</layout>
</object>
</child>
<child>
<object class="GtkCheckButton" id="upload_limit_check">
<property name="label" translatable="1">Limit _upload speed ({speed_units}):</property>
<property name="focusable">1</property>
<property name="valign">center</property>
<property name="use-underline">1</property>
<layout>
<property name="column">0</property>
<property name="row">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="priority_label">
<property name="label" translatable="1">Torrent _priority:</property>
<property name="use-underline">1</property>
<property name="mnemonic-widget">priority_combo</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">3</property>
</layout>
</object>
</child>
<child>
<object class="GtkSpinButton" id="download_limit_spin">
<property name="focusable">1</property>
<property name="hexpand">1</property>
<layout>
<property name="column">1</property>
<property name="row">1</property>
</layout>
</object>
</child>
<child>
<object class="GtkSpinButton" id="upload_limit_spin">
<property name="focusable">1</property>
<property name="hexpand">1</property>
<layout>
<property name="column">1</property>
<property name="row">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkComboBox" id="priority_combo">
<property name="hexpand">1</property>
<layout>
<property name="column">1</property>
<property name="row">3</property>
</layout>
</object>
</child>
</object>
</child>
<child>
<object class="GtkFixed">
<property name="height-request">6</property>
</object>
</child>
<child>
<object class="GtkLabel" id="seeding_limits_section_label">
<property name="hexpand">1</property>
<property name="label" translatable="1">Seeding Limits</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
<child>
<object class="GtkGrid" id="seeding_limits_section_layout">
<property name="margin-start">18</property>
<property name="row-spacing">6</property>
<property name="column-spacing">12</property>
<child>
<object class="GtkLabel" id="ratio_limit_label">
<property name="label" translatable="1">_Ratio:</property>
<property name="use-underline">1</property>
<property name="mnemonic-widget">ratio_limit_combo</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="idle_limit_label">
<property name="label" translatable="1">_Idle:</property>
<property name="use-underline">1</property>
<property name="mnemonic-widget">idle_limit_combo</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">1</property>
</layout>
</object>
</child>
<child>
<object class="GtkBox" id="ratio_limit_value_layout">
<property name="hexpand">1</property>
<property name="spacing">6</property>
<child>
<object class="GtkComboBox" id="ratio_limit_combo">
<property name="hexpand">1</property>
</object>
</child>
<child>
<object class="GtkSpinButton" id="ratio_limit_spin">
<property name="focusable">1</property>
</object>
</child>
<layout>
<property name="column">1</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="GtkBox" id="idle_limit_value_layout">
<property name="hexpand">1</property>
<property name="spacing">6</property>
<child>
<object class="GtkComboBox" id="idle_limit_combo">
<property name="hexpand">1</property>
</object>
</child>
<child>
<object class="GtkSpinButton" id="idle_limit_spin">
<property name="focusable">1</property>
</object>
</child>
<layout>
<property name="column">1</property>
<property name="row">1</property>
</layout>
</object>
</child>
</object>
</child>
<child>
<object class="GtkFixed">
<property name="height-request">6</property>
</object>
</child>
<child>
<object class="GtkLabel" id="peer_connections_section_label">
<property name="hexpand">1</property>
<property name="label" translatable="1">Peer Connections</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
<child>
<object class="GtkGrid" id="peer_connections_section_layout">
<property name="margin-start">18</property>
<property name="row-spacing">6</property>
<property name="column-spacing">12</property>
<child>
<object class="GtkLabel" id="max_peers_label">
<property name="label" translatable="1">_Maximum peers:</property>
<property name="use-underline">1</property>
<property name="mnemonic-widget">max_peers_spin</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="GtkSpinButton" id="max_peers_spin">
<property name="focusable">1</property>
<property name="hexpand">1</property>
<layout>
<property name="column">1</property>
<property name="row">0</property>
</layout>
</object>
</child>
</object>
</child>
</object>
</property>
<property name="tab">
<object class="GtkLabel" id="options_page_label">
<property name="label" translatable="1">Options</property>
</object>
</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child internal-child="action_area">
<object class="GtkBox" id="dialog_buttons">
<property name="css-classes">tr-button-box</property>
<property name="spacing">6</property>
<child>
<object class="GtkButton" id="close_button">
<property name="label" translatable="1">_Close</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
</object>
</child>
<action-widgets>
<action-widget response="-7">close_button</action-widget>
</action-widgets>
</object>
<object class="GtkSizeGroup" id="info_page_labels_width_group">
<widgets>
<widget name="torrent_size_label"/>
<widget name="have_label"/>
<widget name="uploaded_label"/>
<widget name="downloaded_label"/>
<widget name="state_label"/>
<widget name="running_time_label"/>
<widget name="remaining_time_label"/>
<widget name="last_activity_label"/>
<widget name="error_label"/>
<widget name="location_label"/>
<widget name="hash_label"/>
<widget name="privacy_label"/>
<widget name="origin_label"/>
<widget name="added_label"/>
<widget name="comment_label"/>
</widgets>
</object>
<object class="GtkSizeGroup" id="options_page_labels_width_group">
<widgets>
<widget name="download_limit_check"/>
<widget name="upload_limit_check"/>
<widget name="ratio_limit_label"/>
<widget name="idle_limit_label"/>
<widget name="max_peers_label"/>
</widgets>
</object>
</interface>

View File

@@ -0,0 +1,105 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface domain="transmission-gtk">
<requires lib="gtk" version="4.0"/>
<object class="GtkDialog" id="EditTrackersDialog">
<property name="modal">1</property>
<child internal-child="content_area">
<object class="GtkBox" id="dialog_layout">
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<property name="css-classes">tr-dialog-content</property>
<property name="vexpand">1</property>
<child>
<object class="GtkBox" id="dialog_content_layout">
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkLabel" id="urls_section_title">
<property name="label" translatable="1">Tracker Announce URLs</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
<child>
<object class="GtkGrid" id="urls_section_layout">
<property name="margin-start">18</property>
<property name="row-spacing">6</property>
<property name="column-spacing">12</property>
<child>
<object class="GtkLabel" id="urls_section_top_comment_label">
<property name="label" translatable="1">To add a backup URL, add it on the next line after a primary URL.
To add a new primary URL, add it after a blank line.</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">0</property>
<property name="column-span">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkScrolledWindow" id="urls_view_scroll">
<property name="width-request">500</property>
<property name="height-request">166</property>
<property name="focusable">1</property>
<property name="has-frame">1</property>
<property name="child">
<object class="GtkTextView" id="urls_view">
<property name="focusable">1</property>
<property name="accepts-tab">0</property>
</object>
</property>
<layout>
<property name="column">0</property>
<property name="row">1</property>
<property name="column-span">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="urls_section_bottom_comment_label">
<property name="label" translatable="1">Also see Default Public Trackers in Edit &gt; Preferences &gt; Network</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">2</property>
<property name="column-span">2</property>
</layout>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child internal-child="action_area">
<object class="GtkBox" id="dialog_buttons">
<property name="css-classes">tr-button-box</property>
<property name="spacing">6</property>
<child>
<object class="GtkButton" id="cancel_button">
<property name="label" translatable="1">_Cancel</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
<child>
<object class="GtkButton" id="save_button">
<property name="label" translatable="1">_Save</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
</object>
</child>
<action-widgets>
<action-widget response="-6">cancel_button</action-widget>
<action-widget response="-3">save_button</action-widget>
</action-widgets>
</object>
</interface>

34
gtk/ui/gtk4/FilterBar.ui Normal file
View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface domain="transmission-gtk">
<requires lib="gtk" version="4.0"/>
<template class="gtkmm__CustomObject_9FilterBar" parent="GtkBox">
<property name="spacing">3</property>
<child>
<object class="GtkLabel" id="show_label">
<property name="label" translatable="1">_Show:</property>
<property name="use-underline">1</property>
<property name="mnemonic-widget">activity_combo</property>
</object>
</child>
<child>
<object class="GtkComboBox" id="activity_combo">
<property name="hexpand">1</property>
<property name="margin-end">6</property>
</object>
</child>
<child>
<object class="GtkComboBox" id="tracker_combo">
<property name="hexpand">1</property>
<property name="width-request">170</property>
<property name="margin-end">6</property>
</object>
</child>
<child>
<object class="GtkEntry" id="text_entry">
<property name="hexpand">1</property>
<property name="focusable">1</property>
<property name="secondary-icon-name">edit-clear</property>
</object>
</child>
</template>
</interface>

219
gtk/ui/gtk4/MainWindow.ui Normal file
View File

@@ -0,0 +1,219 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface domain="transmission-gtk">
<requires lib="gtk" version="4.0"/>
<object class="GtkApplicationWindow" id="MainWindow">
<child>
<object class="GtkBox" id="window_layout">
<property name="orientation">vertical</property>
<child>
<object class="GtkBox" id="toolbar">
<property name="css-classes">toolbar
horizontal</property>
<property name="can-focus">1</property>
<child>
<object class="GtkButton" id="open_file_button">
<property name="focusable">1</property>
<property name="tooltip-text" translatable="1">Open a torrent</property>
<property name="action-name">win.open-torrent</property>
<child>
<object class="GtkBox">
<property name="halign">center</property>
<property name="spacing">5</property>
<child>
<object class="GtkImage">
<property name="icon-name">document-open</property>
<property name="icon_size">normal</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="1">_Open</property>
<property name="single-line-mode">1</property>
<property name="use-underline">1</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="start_torrent_button">
<property name="focusable">1</property>
<property name="tooltip-text" translatable="1">Start torrent</property>
<property name="action-name">win.torrent-start</property>
<property name="label" translatable="1">_Start</property>
<property name="use-underline">1</property>
<property name="icon-name">media-playback-start</property>
</object>
</child>
<child>
<object class="GtkButton" id="pause_torrent_button">
<property name="focusable">1</property>
<property name="tooltip-text" translatable="1">Pause torrent</property>
<property name="action-name">win.torrent-stop</property>
<property name="label" translatable="1">_Pause</property>
<property name="use-underline">1</property>
<property name="icon-name">media-playback-pause</property>
</object>
</child>
<child>
<object class="GtkButton" id="remove_torrent_button">
<property name="focusable">1</property>
<property name="action-name">win.remove-torrent</property>
<property name="label" translatable="1">Remove torrent</property>
<property name="use-underline">1</property>
<property name="icon-name">list-remove</property>
</object>
</child>
<child>
<object class="GtkSeparator">
<property name="orientation">vertical</property>
<property name="can-focus">0</property>
</object>
</child>
<child>
<object class="GtkButton" id="torrent_properties_button">
<property name="focusable">1</property>
<property name="tooltip-text" translatable="1">Torrent properties</property>
<property name="action-name">win.show-torrent-properties</property>
<child>
<object class="GtkBox">
<property name="halign">center</property>
<property name="spacing">5</property>
<child>
<object class="GtkImage">
<property name="icon-name">document-properties</property>
<property name="icon_size">normal</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="1">_Properties</property>
<property name="single-line-mode">1</property>
<property name="use-underline">1</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="gtkmm__CustomObject_9FilterBar" id="filterbar">
<property name="can-focus">1</property>
<style>
<class name="tr-pad-small"/>
</style>
</object>
</child>
<child>
<object class="GtkScrolledWindow" id="torrents_view_scroll">
<property name="vexpand">1</property>
<property name="focusable">1</property>
<property name="hscrollbar-policy">never</property>
<property name="has-frame">1</property>
<property name="child">
<object class="GtkTreeView" id="torrents_view">
<property name="focusable">1</property>
<property name="headers-visible">0</property>
<property name="fixed-height-mode">1</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="torrents_view_selection">
<property name="mode">multiple</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="torrent_column">
<property name="resizable">1</property>
<property name="sizing">fixed</property>
<property name="title" translatable="1">Torrent</property>
</object>
</child>
</object>
</property>
<style>
<class name="tr-workarea"/>
</style>
</object>
</child>
<child>
<object class="GtkBox" id="statusbar">
<property name="spacing">3</property>
<child>
<object class="GtkMenuButton" id="gear_button">
<property name="focusable">1</property>
<property name="has-frame">0</property>
<property name="receives-default">1</property>
<property name="tooltip-text" translatable="1">Options</property>
<child>
<object class="GtkImage" id="gear_button_image">
<property name="icon-name">options-symbolic</property>
<property name="icon_size">normal</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkToggleButton" id="alt_speed_button">
<property name="focusable">1</property>
<property name="has-frame">0</property>
<property name="receives-default">1</property>
<child>
<object class="GtkImage" id="alt_speed_button_image">
<property name="icon-name">turtle-symbolic</property>
<property name="icon_size">normal</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkFixed">
<property name="hexpand">1</property>
</object>
</child>
<child>
<object class="GtkLabel" id="download_speed_label">
<property name="margin-start">3</property>
<property name="label">...</property>
<property name="single-line-mode">1</property>
</object>
</child>
<child>
<object class="GtkLabel" id="upload_speed_label">
<property name="margin-start">3</property>
<property name="label">...</property>
<property name="single-line-mode">1</property>
</object>
</child>
<child>
<object class="GtkLabel" id="statistics_label">
<property name="margin-start">9</property>
<property name="margin-end">3</property>
<property name="label">...</property>
<property name="single-line-mode">1</property>
</object>
</child>
<child>
<object class="GtkMenuButton" id="ratio_button">
<property name="focusable">1</property>
<property name="has-frame">0</property>
<property name="receives-default">1</property>
<property name="tooltip-text" translatable="1">Statistics</property>
<child>
<object class="GtkImage" id="ratio_button_image">
<property name="icon-name">ratio-symbolic</property>
<property name="icon_size">normal</property>
</object>
</child>
</object>
</child>
<style>
<class name="tr-pad-small"/>
</style>
</object>
</child>
</object>
</child>
</object>
</interface>

View File

@@ -0,0 +1,850 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface domain="transmission-gtk">
<requires lib="gtk+" version="3.24"/>
<object class="GtkApplicationWindow" id="MainWindow">
<property name="can-focus">False</property>
<property name="role">tr-main</property>
<child>
<object class="GtkBox" id="window_layout">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkMenuBar" id="main_menu">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkMenuItem" id="file_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">_File</property>
<property name="use-underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="file_menu">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkMenuItem" id="open_file_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">open-torrent-menu</property>
<property name="label" translatable="yes">_Open</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="open_url_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">open-torrent-from-url</property>
<property name="label" translatable="yes">Open _URL...</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="new_torrent_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">new-torrent</property>
<property name="label" translatable="yes">_New...</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="start_all_torrents_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">start-all-torrents</property>
<property name="label" translatable="yes">_Start All</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="pause_all_torrents_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">pause-all-torrents</property>
<property name="label" translatable="yes">_Pause All</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="quit_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">quit</property>
<property name="label" translatable="yes">_Quit</property>
<property name="use-underline">True</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuItem" id="edit_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">_Edit</property>
<property name="use-underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="edit_menu">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkMenuItem" id="select_all_torrents_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">select-all</property>
<property name="label" translatable="yes">Select _All</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="deselect_all_torrents_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">deselect-all</property>
<property name="label" translatable="yes">Dese_lect All</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="preferences_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">edit-preferences</property>
<property name="label" translatable="yes">_Preferences</property>
<property name="use-underline">True</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuItem" id="torrent_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">_Torrent</property>
<property name="use-underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="torrent_menu">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkMenuItem" id="torrent_properties_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">show-torrent-properties</property>
<property name="label" translatable="yes">_Properties</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="open_torrent_folder_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">open-torrent-folder</property>
<property name="label" translatable="yes">Open Fold_er</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="start_torrent_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">torrent-start</property>
<property name="label" translatable="yes">_Start</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="start_torrent_now_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">torrent-start-now</property>
<property name="label" translatable="yes">Start _Now</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="ask_tracker_for_peers_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">torrent-reannounce</property>
<property name="label" translatable="yes">Ask Tracker for _Mode Peers</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="torrent_queue_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">_Queue</property>
<property name="use-underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="torrent_queue_menu">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkMenuItem" id="move_torrent_to_queue_top_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">queue-move-top</property>
<property name="label" translatable="yes">Move to _Top</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="move_torrent_up_in_queue_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">queue-move-up</property>
<property name="label" translatable="yes">Move _Up</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="move_torrent_down_in_queue_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">queue-move-down</property>
<property name="label" translatable="yes">Move _Down</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="move_torrent_to_queue_bottom_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">queue-move-bottom</property>
<property name="label" translatable="yes">Move to _Bottom</property>
<property name="use-underline">True</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuItem" id="pause_torrent_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">torrent-stop</property>
<property name="label" translatable="yes">_Pause</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="set_torrent_data_location_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">relocate-torrent</property>
<property name="label" translatable="yes">Set _Location...</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="verify_local_torrent_data_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">torrent-verify</property>
<property name="label" translatable="yes">_Verify Local Data</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="copy_magnet_link_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">copy-magnet-link-to-clipboard</property>
<property name="label" translatable="yes">Copy _Magnet Link to Clipboard</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="remove_torrent_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">remove-torrent</property>
<property name="label" translatable="yes">Remove torrent</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="delete_torrent_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">delete-torrent</property>
<property name="label" translatable="yes">_Delete Files and Remove</property>
<property name="use-underline">True</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuItem" id="view_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">_View</property>
<property name="use-underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="view_menu">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkCheckMenuItem" id="compact_view_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">compact-view</property>
<property name="label" translatable="yes">_Compact View</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkCheckMenuItem" id="toggle_toolbar_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">show-toolbar</property>
<property name="label" translatable="yes">_Toolbar</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkCheckMenuItem" id="toggle_filterbar_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">show-filterbar</property>
<property name="label" translatable="yes">_Filterbar</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkCheckMenuItem" id="toggle_statusbar_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">show-statusbar</property>
<property name="label" translatable="yes">_Statusbar</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="sort_by_activity_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">sort-by-activity</property>
<property name="label" translatable="yes">Sort by _Activity</property>
<property name="use-underline">True</property>
<property name="draw-as-radio">True</property>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="sort_by_age_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">sort-by-age</property>
<property name="label" translatable="yes">Sort by A_ge</property>
<property name="use-underline">True</property>
<property name="draw-as-radio">True</property>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="sort_by_name_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">sort-by-name</property>
<property name="label" translatable="yes">Sort by _Name</property>
<property name="use-underline">True</property>
<property name="draw-as-radio">True</property>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="sort_by_progress_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">sort-by-progress</property>
<property name="label" translatable="yes">Sort by _Progress</property>
<property name="use-underline">True</property>
<property name="draw-as-radio">True</property>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="sort_by_queue_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">sort-by-queue</property>
<property name="label" translatable="yes">Sort by _Queue</property>
<property name="use-underline">True</property>
<property name="draw-as-radio">True</property>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="sort_by_ratio_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">sort-by-ratio</property>
<property name="label" translatable="yes">Sort by Rati_o</property>
<property name="use-underline">True</property>
<property name="draw-as-radio">True</property>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="sort_by_size_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">sort-by-size</property>
<property name="label" translatable="yes">Sort by Si_ze</property>
<property name="use-underline">True</property>
<property name="draw-as-radio">True</property>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="sort_by_state_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">sort-by-state</property>
<property name="label" translatable="yes">Sort by Stat_e</property>
<property name="use-underline">True</property>
<property name="draw-as-radio">True</property>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="sort_by_time_left_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">sort-by-time-left</property>
<property name="label" translatable="yes">Sort by Time _Left</property>
<property name="use-underline">True</property>
<property name="draw-as-radio">True</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkCheckMenuItem" id="reverse_sort_order_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">sort-reversed</property>
<property name="label" translatable="yes">Re_verse Sort Order</property>
<property name="use-underline">True</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuItem" id="help_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">_Help</property>
<property name="use-underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="help_menu">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkCheckMenuItem" id="toggle_message_log_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">toggle-message-log</property>
<property name="label" translatable="yes">Message _Log</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="statistics_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">show-stats</property>
<property name="label" translatable="yes">_Statistics</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="donate_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">donate</property>
<property name="label" translatable="yes">_Donate</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="help_contents_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">help</property>
<property name="label" translatable="yes">_Contents</property>
<property name="use-underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="about_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">show-about-dialog</property>
<property name="label" translatable="yes">_About</property>
<property name="use-underline">True</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkToolbar" id="toolbar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkToolButton" id="open_file_button">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="tooltip-text" translatable="yes">Open a torrent</property>
<property name="is-important">True</property>
<property name="action-name">open-torrent-toolbar</property>
<property name="label" translatable="yes">_Open</property>
<property name="use-underline">True</property>
<property name="icon-name">document-open</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="start_torrent_button">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="tooltip-text" translatable="yes">Start torrent</property>
<property name="action-name">torrent-start</property>
<property name="label" translatable="yes">_Start</property>
<property name="use-underline">True</property>
<property name="icon-name">media-playback-start</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="pause_torrent_button">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="tooltip-text" translatable="yes">Pause torrent</property>
<property name="action-name">torrent-stop</property>
<property name="label" translatable="yes">_Pause</property>
<property name="use-underline">True</property>
<property name="icon-name">media-playback-pause</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="remove_torrent_button">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="action-name">remove-torrent</property>
<property name="label" translatable="yes">Remove torrent</property>
<property name="use-underline">True</property>
<property name="icon-name">list-remove</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="torrent_properties_button">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="tooltip-text" translatable="yes">Torrent properties</property>
<property name="is-important">True</property>
<property name="action-name">show-torrent-properties</property>
<property name="label" translatable="yes">_Properties</property>
<property name="use-underline">True</property>
<property name="icon-name">document-properties</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="gtkmm__CustomObject_9FilterBar" id="filterbar">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="torrents_view_scroll">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="hscrollbar-policy">never</property>
<property name="shadow-type">out</property>
<child>
<object class="GtkTreeView" id="torrents_view">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="headers-visible">False</property>
<property name="fixed-height-mode">True</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="torrents_view_selection">
<property name="mode">multiple</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="torrent_column">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="title" translatable="yes">Torrent</property>
</object>
</child>
</object>
</child>
<style>
<class name="tr-workarea"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkBox" id="statusbar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="border-width">3</property>
<property name="spacing">3</property>
<child>
<object class="GtkButton" id="gear_button">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Options</property>
<property name="relief">none</property>
<child>
<object class="GtkImage" id="gear_button_image">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">options-symbolic</property>
<property name="icon_size">1</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkToggleButton" id="alt_speed_button">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="relief">none</property>
<child>
<object class="GtkImage" id="alt_speed_button_image">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">turtle-symbolic</property>
<property name="icon_size">1</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkFixed">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="download_speed_label">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">3</property>
<property name="label">...</property>
<property name="single-line-mode">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="upload_speed_label">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">3</property>
<property name="label">...</property>
<property name="single-line-mode">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkButton" id="ratio_button">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Statistics</property>
<property name="relief">none</property>
<child>
<object class="GtkImage" id="ratio_button_image">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">ratio-symbolic</property>
<property name="icon_size">1</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">5</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="statistics_label">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">9</property>
<property name="margin-end">3</property>
<property name="label">...</property>
<property name="single-line-mode">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">6</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
</child>
</object>
</interface>

309
gtk/ui/gtk4/MakeDialog.ui Normal file
View File

@@ -0,0 +1,309 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface domain="transmission-gtk">
<requires lib="gtk" version="4.0"/>
<object class="GtkDialog" id="MakeDialog">
<property name="title" translatable="1">New Torrent</property>
<child internal-child="content_area">
<object class="GtkBox" id="dialog_layout">
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<property name="css-classes">tr-dialog-content</property>
<property name="vexpand">1</property>
<child>
<object class="GtkBox" id="dialog_content_layout">
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkLabel" id="files_section_label">
<property name="hexpand">1</property>
<property name="label" translatable="1">Files</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
<child>
<object class="GtkGrid" id="files_section_layout">
<property name="margin-start">18</property>
<property name="row-spacing">6</property>
<property name="column-spacing">12</property>
<child>
<object class="GtkLabel" id="destination_label">
<property name="label" translatable="1">Sa_ve to:</property>
<property name="use-underline">1</property>
<property name="mnemonic-widget">destination_button</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="gtkmm__CustomObject_10PathButton" id="destination_button">
<property name="hexpand">1</property>
<property name="action">select-folder</property>
<layout>
<property name="column">1</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="GtkCheckButton" id="source_folder_radio">
<property name="label" translatable="1">Source F_older:</property>
<property name="valign">center</property>
<property name="use-underline">1</property>
<layout>
<property name="column">0</property>
<property name="row">1</property>
</layout>
</object>
</child>
<child>
<object class="gtkmm__CustomObject_10PathButton" id="source_folder_button">
<property name="hexpand">1</property>
<property name="action">select-folder</property>
<layout>
<property name="column">1</property>
<property name="row">1</property>
</layout>
</object>
</child>
<child>
<object class="GtkCheckButton" id="source_file_radio">
<property name="label" translatable="1">Source _File:</property>
<property name="valign">center</property>
<property name="use-underline">1</property>
<property name="active">1</property>
<property name="group">source_folder_radio</property>
<layout>
<property name="column">0</property>
<property name="row">2</property>
</layout>
</object>
</child>
<child>
<object class="gtkmm__CustomObject_10PathButton" id="source_file_button">
<property name="hexpand">1</property>
<property name="title" translatable="1"></property>
<layout>
<property name="column">1</property>
<property name="row">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="source_size_label">
<property name="hexpand">1</property>
<property name="label" translatable="1">No source selected</property>
<property name="xalign">0</property>
<attributes>
<attribute name="style" value="italic"></attribute>
</attributes>
<layout>
<property name="column">1</property>
<property name="row">3</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="piece_size_label">
<property name="label" translatable="1">Piece size:</property>
<property name="use-underline">1</property>
<property name="mnemonic-widget">piece_size_scale</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">4</property>
</layout>
</object>
</child>
<child>
<object class="GtkScale" id="piece_size_scale">
<property name="focusable">1</property>
<property name="hexpand">1</property>
<property name="digits">0</property>
<property name="value-pos">left</property>
<layout>
<property name="column">1</property>
<property name="row">4</property>
</layout>
</object>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
<child>
<object class="GtkFixed" id="properties_section_spacer">
<property name="height-request">6</property>
</object>
</child>
<child>
<object class="GtkLabel" id="properties_section_label">
<property name="hexpand">1</property>
<property name="label" translatable="1">Properties</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
<child>
<object class="GtkGrid" id="properties_section_layout">
<property name="margin-start">18</property>
<property name="row-spacing">6</property>
<property name="column-spacing">12</property>
<child>
<object class="GtkLabel" id="trackers_label">
<property name="valign">start</property>
<property name="label" translatable="1">_Trackers:</property>
<property name="use-underline">1</property>
<property name="mnemonic-widget">trackers_view</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="GtkBox" id="trackers_layout">
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<property name="orientation">vertical</property>
<property name="spacing">3</property>
<child>
<object class="GtkScrolledWindow" id="trackers_view_scroll">
<property name="height-request">80</property>
<property name="focusable">1</property>
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<property name="has-frame">1</property>
<property name="child">
<object class="GtkTextView" id="trackers_view">
<property name="focusable">1</property>
<property name="accepts-tab">0</property>
</object>
</property>
</object>
</child>
<child>
<object class="GtkLabel" id="trackers_description_label">
<property name="hexpand">1</property>
<property name="label" translatable="1">To add a backup URL, add it on the next line after a primary URL.
To add a new primary URL, add it after a blank line.</property>
<property name="xalign">0</property>
</object>
</child>
<layout>
<property name="column">1</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="GtkCheckButton" id="comment_check">
<property name="label" translatable="1">Co_mment:</property>
<property name="focusable">1</property>
<property name="valign">center</property>
<property name="use-underline">1</property>
<layout>
<property name="column">0</property>
<property name="row">1</property>
</layout>
</object>
</child>
<child>
<object class="GtkEntry" id="comment_entry">
<property name="focusable">1</property>
<property name="hexpand">1</property>
<layout>
<property name="column">1</property>
<property name="row">1</property>
</layout>
</object>
</child>
<child>
<object class="GtkCheckButton" id="source_check">
<property name="label" translatable="1">_Source:</property>
<property name="focusable">1</property>
<property name="valign">center</property>
<property name="use-underline">1</property>
<layout>
<property name="column">0</property>
<property name="row">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkEntry" id="source_entry">
<property name="focusable">1</property>
<property name="hexpand">1</property>
<layout>
<property name="column">1</property>
<property name="row">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkCheckButton" id="private_check">
<property name="label" translatable="1">_Private torrent</property>
<property name="focusable">1</property>
<property name="valign">center</property>
<property name="use-underline">1</property>
<layout>
<property name="column">0</property>
<property name="row">3</property>
<property name="column-span">2</property>
</layout>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child internal-child="action_area">
<object class="GtkBox" id="dialog_buttons">
<property name="css-classes">tr-button-box</property>
<property name="spacing">6</property>
<child>
<object class="GtkButton" id="close_button">
<property name="label" translatable="1">_Close</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
<child>
<object class="GtkButton" id="new_button">
<property name="label" translatable="1">_New</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
</object>
</child>
<action-widgets>
<action-widget response="-7">close_button</action-widget>
<action-widget response="-3">new_button</action-widget>
</action-widgets>
</object>
<object class="GtkSizeGroup" id="labels_width_group">
<widgets>
<widget name="destination_label"/>
<widget name="source_folder_radio"/>
<widget name="source_file_radio"/>
<widget name="piece_size_label"/>
<widget name="trackers_label"/>
<widget name="comment_check"/>
<widget name="source_check"/>
</widgets>
</object>
</interface>

View File

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface domain="transmission-gtk">
<requires lib="gtk" version="4.0"/>
<object class="GtkDialog" id="MakeProgressDialog">
<property name="title" translatable="1">New Torrent</property>
<property name="modal">1</property>
<child internal-child="content_area">
<object class="GtkBox" id="dialog_layout">
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<property name="css-classes">tr-dialog-content</property>
<property name="vexpand">1</property>
<child>
<object class="GtkBox" id="dialog_content_layout">
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkLabel" id="progress_label">
<property name="label" translatable="1">Creating torrent…</property>
<property name="xalign">0</property>
</object>
</child>
<child>
<object class="GtkProgressBar" id="progress_bar"/>
</child>
</object>
</child>
</object>
</child>
<child internal-child="action_area">
<object class="GtkBox" id="dialog_buttons">
<property name="css-classes">tr-button-box</property>
<property name="spacing">6</property>
<child>
<object class="GtkButton" id="cancel_button">
<property name="label" translatable="1">_Cancel</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
<child>
<object class="GtkButton" id="close_button">
<property name="label" translatable="1">_Close</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
<child>
<object class="GtkButton" id="add_button">
<property name="label" translatable="1">_Add</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
</object>
</child>
<action-widgets>
<action-widget response="-6">cancel_button</action-widget>
<action-widget response="-7">close_button</action-widget>
<action-widget response="-3">add_button</action-widget>
</action-widgets>
</object>
</interface>

View File

@@ -0,0 +1,139 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface domain="transmission-gtk">
<requires lib="gtk" version="4.0"/>
<object class="GtkWindow" id="MessageLogWindow">
<property name="title" translatable="1">Message Log</property>
<property name="default-width">560</property>
<property name="default-height">350</property>
<property name="child">
<object class="GtkBox" id="window_layout">
<property name="orientation">vertical</property>
<child>
<object class="GtkBox" id="toolbar">
<property name="valign">center</property>
<property name="css-classes">toolbar
horizontal</property>
<child>
<object class="GtkButton" id="save_as_button">
<property name="action-name">win.save-message-log</property>
<child>
<object class="GtkBox">
<property name="halign">center</property>
<property name="spacing">5</property>
<child>
<object class="GtkImage">
<property name="icon-name">document-save-as</property>
<property name="icon_size">normal</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="1">Save _As</property>
<property name="single-line-mode">1</property>
<property name="use-underline">1</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="clear_button">
<property name="action-name">win.clear-message-log</property>
<child>
<object class="GtkBox">
<property name="halign">center</property>
<property name="spacing">5</property>
<child>
<object class="GtkImage">
<property name="icon-name">edit-clear</property>
<property name="icon_size">normal</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="1">Clear</property>
<property name="single-line-mode">1</property>
<property name="use-underline">1</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkSeparator">
<property name="orientation">vertical</property>
</object>
</child>
<child>
<object class="GtkToggleButton" id="pause_button">
<property name="action-name">win.pause-message-log</property>
<child>
<object class="GtkBox">
<property name="halign">center</property>
<property name="spacing">5</property>
<child>
<object class="GtkImage">
<property name="icon-name">media-playback-pause</property>
<property name="icon_size">normal</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="1">P_ause</property>
<property name="single-line-mode">1</property>
<property name="use-underline">1</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkSeparator">
<property name="orientation">vertical</property>
</object>
</child>
<child>
<object class="GtkLabel" id="level_label">
<property name="label" translatable="1">Level</property>
<property name="use-underline">1</property>
<property name="mnemonic-widget">level_combo</property>
<property name="css-classes">tr-pad-normal</property>
</object>
</child>
<child>
<object class="GtkComboBox" id="level_combo">
<child>
<object class="GtkCellRendererText" id="level_combo_renderer"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkScrolledWindow" id="messages_view_scroll">
<property name="vexpand">1</property>
<property name="focusable">1</property>
<property name="has-frame">1</property>
<property name="child">
<object class="GtkTreeView" id="messages_view">
<property name="focusable">1</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="messages_view_selection"/>
</child>
</object>
</property>
<style>
<class name="tr-message-log"/>
</style>
</object>
</child>
</object>
</property>
</object>
</interface>

View File

@@ -0,0 +1,197 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface domain="transmission-gtk">
<requires lib="gtk" version="4.0"/>
<object class="GtkDialog" id="OptionsDialog">
<property name="title" translatable="1">Torrent Options</property>
<child internal-child="content_area">
<object class="GtkBox" id="dialog_layout">
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<property name="css-classes">tr-dialog-content</property>
<property name="vexpand">1</property>
<child>
<object class="GtkGrid" id="dialog_content_layout">
<property name="vexpand">1</property>
<property name="row-spacing">6</property>
<property name="column-spacing">12</property>
<child>
<object class="GtkLabel" id="source_label">
<property name="label" translatable="1">_Torrent file:</property>
<property name="use-underline">1</property>
<property name="mnemonic-widget">source_button</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="gtkmm__CustomObject_10PathButton" id="source_button">
<property name="hexpand">1</property>
<property name="title" translatable="1">Select Source File</property>
<layout>
<property name="column">1</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="destination_label">
<property name="label" translatable="1">_Destination folder:</property>
<property name="use-underline">1</property>
<property name="mnemonic-widget">destination_button</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">1</property>
</layout>
</object>
</child>
<child>
<object class="gtkmm__CustomObject_10PathButton" id="destination_button">
<property name="hexpand">1</property>
<property name="action">select-folder</property>
<property name="title" translatable="1">Select Destination Folder</property>
<layout>
<property name="column">1</property>
<property name="row">1</property>
</layout>
</object>
</child>
<child>
<object class="GtkScrolledWindow" id="files_view_scroll">
<property name="width-request">466</property>
<property name="height-request">300</property>
<property name="focusable">1</property>
<property name="has-frame">1</property>
<property name="child">
<object class="GtkTreeView" id="files_view">
<property name="focusable">1</property>
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="files_view_selection"/>
</child>
</object>
</property>
<layout>
<property name="column">0</property>
<property name="row">4</property>
<property name="column-span">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="priority_label">
<property name="label" translatable="1">Torrent _priority:</property>
<property name="use-underline">1</property>
<property name="mnemonic-widget">priority_combo</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">5</property>
</layout>
</object>
</child>
<child>
<object class="GtkComboBox" id="priority_combo">
<property name="hexpand">1</property>
<layout>
<property name="column">1</property>
<property name="row">5</property>
</layout>
</object>
</child>
<child>
<object class="GtkCheckButton" id="start_check">
<property name="label" translatable="1">_Start when added</property>
<property name="focusable">1</property>
<property name="valign">center</property>
<property name="use-underline">1</property>
<layout>
<property name="column">0</property>
<property name="row">6</property>
<property name="column-span">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkCheckButton" id="trash_check">
<property name="label" translatable="1">Mo_ve torrent file to the trash</property>
<property name="focusable">1</property>
<property name="valign">center</property>
<property name="use-underline">1</property>
<layout>
<property name="column">0</property>
<property name="row">7</property>
<property name="column-span">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="free_space_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="xalign">0</property>
<attributes>
<attribute name="style" value="italic"></attribute>
</attributes>
<layout>
<property name="column">1</property>
<property name="row">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkFixed">
<property name="width-request">0</property>
<property name="height-request">0</property>
<layout>
<property name="column">0</property>
<property name="row">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkFixed">
<property name="height-request">6</property>
<layout>
<property name="column">0</property>
<property name="row">3</property>
<property name="column-span">2</property>
</layout>
</object>
</child>
</object>
</child>
</object>
</child>
<child internal-child="action_area">
<object class="GtkBox" id="dialog_buttons">
<property name="css-classes">tr-button-box</property>
<property name="spacing">6</property>
<child>
<object class="GtkButton" id="cancel_button">
<property name="label" translatable="1">_Cancel</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
<child>
<object class="GtkButton" id="open_button">
<property name="label" translatable="1">_Open</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
</object>
</child>
<action-widgets>
<action-widget response="-6">cancel_button</action-widget>
<action-widget response="-3">open_button</action-widget>
</action-widgets>
</object>
</interface>

1516
gtk/ui/gtk4/PrefsDialog.ui Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,114 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface domain="transmission-gtk">
<requires lib="gtk" version="4.0"/>
<object class="GtkDialog" id="RelocateDialog">
<property name="title" translatable="1">Set Torrent Location</property>
<child internal-child="content_area">
<object class="GtkBox" id="dialog_layout">
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<property name="css-classes">tr-dialog-content</property>
<property name="vexpand">1</property>
<child>
<object class="GtkBox" id="dialog_content_layout">
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkLabel" id="set_location_section_label">
<property name="hexpand">1</property>
<property name="label" translatable="1">Location</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
<child>
<object class="GtkGrid" id="set_location_section_layout">
<property name="margin-start">18</property>
<property name="row-spacing">6</property>
<property name="column-spacing">12</property>
<child>
<object class="GtkLabel" id="new_location_label">
<property name="halign">start</property>
<property name="label" translatable="1">Torrent _location:</property>
<property name="use-underline">1</property>
<property name="mnemonic-widget">new_location_button</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="gtkmm__CustomObject_10PathButton" id="new_location_button">
<property name="hexpand">1</property>
<property name="action">select-folder</property>
<property name="title" translatable="1"></property>
<layout>
<property name="column">1</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="GtkCheckButton" id="move_data_radio">
<property name="label" translatable="1">_Move from the current folder</property>
<property name="valign">center</property>
<property name="use-underline">1</property>
<property name="active">1</property>
<layout>
<property name="column">0</property>
<property name="row">1</property>
<property name="column-span">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkCheckButton" id="find_data_radio">
<property name="label" translatable="1">Local data is _already there</property>
<property name="valign">center</property>
<property name="use-underline">1</property>
<property name="group">move_data_radio</property>
<layout>
<property name="column">0</property>
<property name="row">2</property>
<property name="column-span">2</property>
</layout>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child internal-child="action_area">
<object class="GtkBox" id="dialog_buttons">
<property name="css-classes">tr-button-box</property>
<property name="spacing">6</property>
<child>
<object class="GtkButton" id="cancel_button">
<property name="label" translatable="1">_Cancel</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
<child>
<object class="GtkButton" id="apply_button">
<property name="label" translatable="1">_Apply</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
</object>
</child>
<action-widgets>
<action-widget response="-6">cancel_button</action-widget>
<action-widget response="-10">apply_button</action-widget>
</action-widgets>
</object>
</interface>

278
gtk/ui/gtk4/StatsDialog.ui Normal file
View File

@@ -0,0 +1,278 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface domain="transmission-gtk">
<requires lib="gtk" version="4.0"/>
<object class="GtkDialog" id="StatsDialog">
<property name="title" translatable="1">Statistics</property>
<child internal-child="content_area">
<object class="GtkBox" id="dialog_layout">
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<property name="css-classes">tr-dialog-content</property>
<property name="vexpand">1</property>
<child>
<object class="GtkBox" id="dialog_content_layout">
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkLabel" id="current_session_section_label">
<property name="hexpand">1</property>
<property name="label" translatable="1">Current Session</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
<child>
<object class="GtkGrid" id="current_session_section_layout">
<property name="margin-start">18</property>
<property name="row-spacing">6</property>
<property name="column-spacing">12</property>
<child>
<object class="GtkLabel" id="current_uploaded_label">
<property name="label" translatable="1">Uploaded:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="current_uploaded_value_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="current_downloaded_label">
<property name="label" translatable="1">Downloaded:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">1</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="current_downloaded_value_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">1</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="current_ratio_label">
<property name="label" translatable="1">Ratio:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="current_ratio_value_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="current_duration_label">
<property name="label" translatable="1">Duration:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">3</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="current_duration_value_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">3</property>
</layout>
</object>
</child>
</object>
</child>
<child>
<object class="GtkFixed" id="total_section_spacer">
<property name="height-request">6</property>
</object>
</child>
<child>
<object class="GtkLabel" id="total_section_label">
<property name="hexpand">1</property>
<property name="label" translatable="1">Total</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
<child>
<object class="GtkGrid" id="total_section_layout">
<property name="margin-start">18</property>
<property name="row-spacing">6</property>
<property name="column-spacing">12</property>
<child>
<object class="GtkLabel" id="start_count_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">0</property>
<property name="column-span">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="total_uploaded_label">
<property name="label" translatable="1">Uploaded:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">1</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="total_uploaded_value_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">1</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="total_downloaded_label">
<property name="label" translatable="1">Downloaded:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="total_downloaded_value_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">2</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="total_ratio_label">
<property name="label" translatable="1">Ratio:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">3</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="total_ratio_value_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">3</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="total_duration_label">
<property name="label" translatable="1">Duration:</property>
<property name="xalign">0</property>
<layout>
<property name="column">0</property>
<property name="row">4</property>
</layout>
</object>
</child>
<child>
<object class="GtkLabel" id="total_duration_value_label">
<property name="hexpand">1</property>
<property name="label">...</property>
<property name="xalign">0</property>
<layout>
<property name="column">1</property>
<property name="row">4</property>
</layout>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child internal-child="action_area">
<object class="GtkBox" id="dialog_buttons">
<property name="css-classes">tr-button-box</property>
<property name="spacing">6</property>
<child>
<object class="GtkButton" id="reset_button">
<property name="label" translatable="1">_Reset</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
<child>
<object class="GtkButton" id="close_button">
<property name="label" translatable="1">_Close</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
</object>
</child>
<action-widgets>
<action-widget response="1">reset_button</action-widget>
<action-widget response="-7">close_button</action-widget>
</action-widgets>
</object>
<object class="GtkSizeGroup" id="labels_width_group">
<widgets>
<widget name="current_uploaded_label"/>
<widget name="current_downloaded_label"/>
<widget name="current_ratio_label"/>
<widget name="current_duration_label"/>
<widget name="total_uploaded_label"/>
<widget name="total_downloaded_label"/>
<widget name="total_ratio_label"/>
<widget name="total_duration_label"/>
</widgets>
</object>
</interface>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface domain="transmission-gtk">
<requires lib="gtk" version="4.0"/>
<object class="GtkDialog" id="TorrentUrlChooserDialog">
<property name="title" translatable="1">Open URL</property>
<child internal-child="content_area">
<object class="GtkBox" id="dialog_layout">
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<property name="css-classes">tr-dialog-content</property>
<property name="vexpand">1</property>
<child>
<object class="GtkBox" id="dialog_content_layout">
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkLabel" id="url_section_label">
<property name="label" translatable="1">Open torrent from URL</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
<child>
<object class="GtkGrid" id="url_section_layout">
<property name="margin-start">18</property>
<property name="row-spacing">6</property>
<property name="column-spacing">12</property>
<child>
<object class="GtkLabel" id="url_label">
<property name="label" translatable="1">_URL</property>
<property name="use-underline">1</property>
<property name="mnemonic-widget">url_entry</property>
<layout>
<property name="column">0</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="GtkEntry" id="url_entry">
<property name="width-request">400</property>
<property name="focusable">1</property>
<property name="hexpand">1</property>
<layout>
<property name="column">1</property>
<property name="row">0</property>
</layout>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child internal-child="action_area">
<object class="GtkBox" id="dialog_buttons">
<property name="css-classes">tr-button-box</property>
<property name="spacing">6</property>
<child>
<object class="GtkButton" id="cancel_button">
<property name="label" translatable="1">_Cancel</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
<child>
<object class="GtkButton" id="open_button">
<property name="label" translatable="1">_Open</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="use-underline">1</property>
</object>
</child>
</object>
</child>
<action-widgets>
<action-widget response="-6">cancel_button</action-widget>
<action-widget response="-3">open_button</action-widget>
</action-widgets>
</object>
</interface>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/com/transmissionbt/transmission">
<file compressed="true" preprocess="xml-stripblanks">AddTrackerDialog.ui</file>
<file compressed="true" preprocess="xml-stripblanks">DetailsDialog.ui</file>
<file compressed="true" preprocess="xml-stripblanks">EditTrackersDialog.ui</file>
<file compressed="true" preprocess="xml-stripblanks">FilterBar.ui</file>
<file compressed="true" preprocess="xml-stripblanks">MainWindow.ui</file>
<file compressed="true" preprocess="xml-stripblanks">MakeDialog.ui</file>
<file compressed="true" preprocess="xml-stripblanks">MakeProgressDialog.ui</file>
<file compressed="true" preprocess="xml-stripblanks">MessageLogWindow.ui</file>
<file compressed="true" preprocess="xml-stripblanks">OptionsDialog.ui</file>
<file compressed="true" preprocess="xml-stripblanks">PrefsDialog.ui</file>
<file compressed="true" preprocess="xml-stripblanks">RelocateDialog.ui</file>
<file compressed="true" preprocess="xml-stripblanks">StatsDialog.ui</file>
<file compressed="true" preprocess="xml-stripblanks">TorrentUrlChooserDialog.ui</file>
</gresource>
</gresources>