fix widebar action removal

Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
Trial97 2024-08-08 19:39:32 +03:00
parent c9809fff6d
commit a9c7e95c66
No known key found for this signature in database
GPG Key ID: 55EF5DA53DB36318
3 changed files with 18 additions and 12 deletions

View File

@ -113,6 +113,11 @@ void WorldListPage::openedImpl()
{
m_worlds->startWatching();
auto mInst = std::dynamic_pointer_cast<MinecraftInstance>(m_inst);
if (!mInst || !mInst->traits().contains("feature:is_quick_play_singleplayer")) {
ui->toolBar->removeAction(ui->actionJoin);
}
auto const setting_name = QString("WideBarVisibility_%1").arg(id());
if (!APPLICATION->settings()->contains(setting_name))
m_wide_bar_setting = APPLICATION->settings()->registerSetting(setting_name);
@ -120,8 +125,6 @@ void WorldListPage::openedImpl()
m_wide_bar_setting = APPLICATION->settings()->getSetting(setting_name);
ui->toolBar->setVisibilityState(m_wide_bar_setting->get().toByteArray());
auto mInst = std::dynamic_pointer_cast<MinecraftInstance>(m_inst);
ui->toolBar->setActionVisible(ui->actionJoin, mInst && mInst->traits().contains("feature:is_quick_play_singleplayer"));
}
void WorldListPage::closedImpl()
@ -341,9 +344,14 @@ void WorldListPage::worldChanged([[maybe_unused]] const QModelIndex& current, [[
ui->actionDatapacks->setEnabled(enable);
bool hasIcon = !index.data(WorldList::IconFileRole).isNull();
ui->actionReset_Icon->setEnabled(enable && hasIcon);
auto mInst = std::dynamic_pointer_cast<MinecraftInstance>(m_inst);
ui->actionJoin->setEnabled(enable);
ui->toolBar->setActionVisible(ui->actionJoin, mInst && mInst->traits().contains("feature:is_quick_play_singleplayer"));
auto supportsJoin = mInst && mInst->traits().contains("feature:is_quick_play_singleplayer");
ui->actionJoin->setEnabled(enable && supportsJoin);
if (!supportsJoin) {
ui->toolBar->removeAction(ui->actionJoin);
}
}
void WorldListPage::on_actionAdd_triggered()

View File

@ -309,17 +309,15 @@ bool WideBar::checkHash(QByteArray const& old_hash) const
return old_hash == getHash();
}
void WideBar::setActionVisible(QAction* action, bool visible)
void WideBar::removeAction(QAction* action)
{
auto iter = getMatching(action);
if (iter == m_entries.end()) {
if (iter == m_entries.end())
return;
}
iter->bar_action->setVisible(visible);
// NOTE: This is needed so that disabled actions get reflected on the button when it is made visible.
static_cast<ActionButton*>(widgetForAction(iter->bar_action))->actionChanged();
iter->bar_action->setVisible(false);
removeAction(iter->bar_action);
m_entries.erase(iter);
}
#include "WideBar.moc"

View File

@ -38,7 +38,7 @@ class WideBar : public QToolBar {
[[nodiscard]] QByteArray getVisibilityState() const;
void setVisibilityState(QByteArray&&);
void setActionVisible(QAction* action, bool visible);
void removeAction(QAction* action);
private:
struct BarEntry {