feat: remember tab selection in Details dialog (#2506)

This commit is contained in:
Charles Kerr 2022-01-24 23:16:33 -06:00 committed by GitHub
parent 064ad6a436
commit 4c4b2714f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 0 deletions

View File

@ -156,8 +156,13 @@ private:
Glib::Quark const TORRENT_ID_KEY = Glib::Quark("tr-torrent-id-key");
Glib::Quark const TEXT_BUFFER_KEY = Glib::Quark("tr-text-buffer-key");
Glib::Quark const URL_ENTRY_KEY = Glib::Quark("tr-url-entry-key");
static guint last_page_;
sigc::connection last_page_tag_;
};
guint DetailsDialog::Impl::last_page_ = 0;
std::vector<tr_torrent*> DetailsDialog::Impl::getTorrents() const
{
std::vector<tr_torrent*> torrents;
@ -2572,6 +2577,7 @@ void DetailsDialog::Impl::on_details_window_size_allocated(Gtk::Allocation& /*al
DetailsDialog::Impl::~Impl()
{
periodic_refresh_tag_.disconnect();
last_page_tag_.disconnect();
}
std::unique_ptr<DetailsDialog> DetailsDialog::create(Gtk::Window& parent, Glib::RefPtr<Session> const& core)
@ -2623,6 +2629,9 @@ DetailsDialog::Impl::Impl(DetailsDialog& dialog, Glib::RefPtr<Session> const& co
periodic_refresh_tag_ = Glib::signal_timeout().connect_seconds(
[this]() { return refresh(), true; },
SECONDARY_WINDOW_REFRESH_INTERVAL_SECONDS);
n->set_current_page(last_page_);
last_page_tag_ = n->signal_switch_page().connect([](Widget*, guint page) { DetailsDialog::Impl::last_page_ = page; });
}
void DetailsDialog::set_torrents(std::vector<int> const& ids)

View File

@ -196,6 +196,8 @@ private:
****
***/
int DetailsDialog::prev_tab_index_ = 0;
DetailsDialog::DetailsDialog(Session& session, Prefs& prefs, TorrentModel const& model, QWidget* parent)
: BaseDialog(parent)
, session_(session)
@ -212,6 +214,7 @@ DetailsDialog::DetailsDialog(Session& session, Prefs& prefs, TorrentModel const&
adjustSize();
ui_.commentBrowser->setMaximumHeight(QWIDGETSIZE_MAX);
ui_.tabs->setCurrentIndex(prev_tab_index_);
static std::array<int, 2> constexpr InitKeys = {
Prefs::SHOW_TRACKER_SCRAPES,
@ -238,6 +241,11 @@ DetailsDialog::DetailsDialog(Session& session, Prefs& prefs, TorrentModel const&
ui_debounce_timer_.setSingleShot(true);
}
DetailsDialog::~DetailsDialog()
{
prev_tab_index_ = ui_.tabs->currentIndex();
}
void DetailsDialog::setIds(torrent_ids_t const& ids)
{
if (ids != ids_)

View File

@ -37,6 +37,7 @@ class DetailsDialog : public BaseDialog
public:
DetailsDialog(Session&, Prefs&, TorrentModel const&, QWidget* parent = nullptr);
~DetailsDialog() override;
void setIds(torrent_ids_t const& ids);
@ -136,4 +137,6 @@ private:
QIcon const icon_encrypted_ = QIcon(QStringLiteral(":/icons/encrypted.png"));
QIcon const icon_unencrypted_ = {};
static int prev_tab_index_;
};