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

View File

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

View File

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