mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-12-16 04:09:07 +00:00
Qt: Check if movie item changed and is valid before calling the callbacks
This commit is contained in:
parent
25925f2680
commit
1a7d702e4e
@ -8,9 +8,9 @@
|
|||||||
|
|
||||||
game_list::game_list() : QTableWidget(), game_list_base()
|
game_list::game_list() : QTableWidget(), game_list_base()
|
||||||
{
|
{
|
||||||
m_icon_ready_callback = [this](const movie_item_base* item)
|
m_icon_ready_callback = [this](const game_info& game, const movie_item_base* item)
|
||||||
{
|
{
|
||||||
Q_EMIT IconReady(item);
|
Q_EMIT IconReady(game, item);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -36,7 +36,7 @@ public Q_SLOTS:
|
|||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void FocusToSearchBar();
|
void FocusToSearchBar();
|
||||||
void IconReady(const movie_item_base* item);
|
void IconReady(const game_info& game, const movie_item_base* item);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
movie_item* m_last_hover_item = nullptr;
|
movie_item* m_last_hover_item = nullptr;
|
||||||
|
|||||||
@ -79,7 +79,7 @@ void game_list_base::IconLoadFunction(game_info game, qreal device_pixel_ratio,
|
|||||||
if (!cancel || !cancel->load())
|
if (!cancel || !cancel->load())
|
||||||
{
|
{
|
||||||
if (m_icon_ready_callback)
|
if (m_icon_ready_callback)
|
||||||
m_icon_ready_callback(game->item);
|
m_icon_ready_callback(game, game->item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -32,7 +32,7 @@ protected:
|
|||||||
QPixmap PaintedPixmap(const QPixmap& icon, qreal device_pixel_ratio, bool paint_config_icon = false, bool paint_pad_config_icon = false, const QColor& compatibility_color = {}) const;
|
QPixmap PaintedPixmap(const QPixmap& icon, qreal device_pixel_ratio, bool paint_config_icon = false, bool paint_pad_config_icon = false, const QColor& compatibility_color = {}) const;
|
||||||
QColor GetGridCompatibilityColor(const QString& string) const;
|
QColor GetGridCompatibilityColor(const QString& string) const;
|
||||||
|
|
||||||
std::function<void(const movie_item_base*)> m_icon_ready_callback{};
|
std::function<void(const game_info&, const movie_item_base*)> m_icon_ready_callback{};
|
||||||
bool m_draw_compat_status_to_grid{};
|
bool m_draw_compat_status_to_grid{};
|
||||||
bool m_is_list_layout{};
|
bool m_is_list_layout{};
|
||||||
QSize m_icon_size{};
|
QSize m_icon_size{};
|
||||||
|
|||||||
@ -14,14 +14,14 @@ game_list_grid::game_list_grid()
|
|||||||
setObjectName("game_list_grid");
|
setObjectName("game_list_grid");
|
||||||
setContextMenuPolicy(Qt::CustomContextMenu);
|
setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
|
|
||||||
m_icon_ready_callback = [this](const movie_item_base* item)
|
m_icon_ready_callback = [this](const game_info& game, const movie_item_base* item)
|
||||||
{
|
{
|
||||||
Q_EMIT IconReady(item);
|
Q_EMIT IconReady(game, item);
|
||||||
};
|
};
|
||||||
|
|
||||||
connect(this, &game_list_grid::IconReady, this, [this](const movie_item_base* item)
|
connect(this, &game_list_grid::IconReady, this, [this](const game_info& game, const movie_item_base* item)
|
||||||
{
|
{
|
||||||
if (item) item->image_change_callback();
|
if (game && item && game->item == item) item->image_change_callback();
|
||||||
}, Qt::QueuedConnection); // The default 'AutoConnection' doesn't seem to work in this specific case...
|
}, Qt::QueuedConnection); // The default 'AutoConnection' doesn't seem to work in this specific case...
|
||||||
|
|
||||||
connect(this, &flow_widget::ItemSelectionChanged, this, [this](int index)
|
connect(this, &flow_widget::ItemSelectionChanged, this, [this](int index)
|
||||||
|
|||||||
@ -33,5 +33,5 @@ Q_SIGNALS:
|
|||||||
void FocusToSearchBar();
|
void FocusToSearchBar();
|
||||||
void ItemDoubleClicked(const game_info& game);
|
void ItemDoubleClicked(const game_info& game);
|
||||||
void ItemSelectionChanged(const game_info& game);
|
void ItemSelectionChanged(const game_info& game);
|
||||||
void IconReady(const movie_item_base* item);
|
void IconReady(const game_info& game, const movie_item_base* item);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -41,10 +41,10 @@ game_list_table::game_list_table(game_list_frame* frame, std::shared_ptr<persist
|
|||||||
setColumnCount(static_cast<int>(gui::game_list_columns::count));
|
setColumnCount(static_cast<int>(gui::game_list_columns::count));
|
||||||
setMouseTracking(true);
|
setMouseTracking(true);
|
||||||
|
|
||||||
connect(this, &game_list_table::size_on_disk_ready, this, [this](const game_info& game)
|
connect(this, &game_list_table::size_on_disk_ready, this, [this](const game_info& game, movie_item_base* item)
|
||||||
{
|
{
|
||||||
if (!game || !game->item) return;
|
if (!game || !game->item || game->item != item) return;
|
||||||
if (QTableWidgetItem* size_item = item(static_cast<movie_item*>(game->item)->row(), static_cast<int>(gui::game_list_columns::dir_size)))
|
if (QTableWidgetItem* size_item = this->item(static_cast<movie_item*>(game->item)->row(), static_cast<int>(gui::game_list_columns::dir_size)))
|
||||||
{
|
{
|
||||||
const u64& game_size = game->info.size_on_disk;
|
const u64& game_size = game->info.size_on_disk;
|
||||||
size_item->setText(game_size != umax ? gui::utils::format_byte_size(game_size) : tr("Unknown"));
|
size_item->setText(game_size != umax ? gui::utils::format_byte_size(game_size) : tr("Unknown"));
|
||||||
@ -52,9 +52,9 @@ game_list_table::game_list_table(game_list_frame* frame, std::shared_ptr<persist
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(this, &game_list::IconReady, this, [this](const movie_item_base* item)
|
connect(this, &game_list::IconReady, this, [this](const game_info& game, const movie_item_base* item)
|
||||||
{
|
{
|
||||||
if (item) item->image_change_callback();
|
if (game && item && game->item == item) item->image_change_callback();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -284,7 +284,7 @@ void game_list_table::populate(
|
|||||||
|
|
||||||
if (!cancel || !cancel->load())
|
if (!cancel || !cancel->load())
|
||||||
{
|
{
|
||||||
Q_EMIT size_on_disk_ready(game);
|
Q_EMIT size_on_disk_ready(game, game->item);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,7 +34,7 @@ public:
|
|||||||
void repaint_icons(std::vector<game_info>& game_data, const QColor& icon_color, const QSize& icon_size, qreal device_pixel_ratio) override;
|
void repaint_icons(std::vector<game_info>& game_data, const QColor& icon_color, const QSize& icon_size, qreal device_pixel_ratio) override;
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void size_on_disk_ready(const game_info& game);
|
void size_on_disk_ready(const game_info& game, movie_item_base* item);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
game_list_frame* m_game_list_frame{};
|
game_list_frame* m_game_list_frame{};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user