diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj
index dc09c27b25..fbe424d154 100644
--- a/rpcs3/rpcs3.vcxproj
+++ b/rpcs3/rpcs3.vcxproj
@@ -1374,6 +1374,7 @@
.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\rtmidi\rtmidi" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
+
Moc%27ing %(Identity)...
@@ -2178,4 +2179,4 @@
-
+
\ No newline at end of file
diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters
index ea8a978c8a..2ffaca09b5 100644
--- a/rpcs3/rpcs3.vcxproj.filters
+++ b/rpcs3/rpcs3.vcxproj.filters
@@ -1439,6 +1439,9 @@
rpcs3
+
+ Gui\widgets
+
diff --git a/rpcs3/rpcs3qt/custom_tree_widget.h b/rpcs3/rpcs3qt/custom_tree_widget.h
new file mode 100644
index 0000000000..5f7a6cb01f
--- /dev/null
+++ b/rpcs3/rpcs3qt/custom_tree_widget.h
@@ -0,0 +1,48 @@
+#pragma once
+
+#include
+#include
+
+// Allows to double click the items in order to de/select them
+class custom_tree_widget : public QTreeWidget
+{
+ using QTreeWidget::QTreeWidget;
+
+public:
+ void set_checkable_by_double_click_callback(std::function cb)
+ {
+ m_checkable_by_dc_cb = std::move(cb);
+ }
+
+ void mouseDoubleClickEvent(QMouseEvent* event)
+ {
+ QTreeWidget::mouseDoubleClickEvent(event);
+
+ if (!event || !m_checkable_by_dc_cb) return;
+
+ const QPoint pos = event->pos();
+ QTreeWidgetItem* item = itemAt(pos);
+
+ if (!item || !(item->flags() & Qt::ItemIsUserCheckable)) return;
+
+ const int column = columnAt(pos.x());
+ if (!m_checkable_by_dc_cb(item, column)) return;
+
+ const QModelIndex index = indexFromItem(item, column);
+ if (!index.isValid()) return;
+
+ QStyleOptionViewItem option;
+ option.initFrom(this);
+ option.rect = visualRect(index);
+ option.features = QStyleOptionViewItem::HasCheckIndicator;
+
+ const QRect checkbox_region = style()->subElementRect(QStyle::SE_ItemViewItemCheckIndicator, &option, this);
+ if (checkbox_region.contains(pos)) return;
+
+ const Qt::CheckState current_state = item->checkState(column);
+ item->setCheckState(column, (current_state == Qt::CheckState::Checked) ? Qt::CheckState::Unchecked : Qt::CheckState::Checked);
+ }
+
+private:
+ std::function m_checkable_by_dc_cb;
+};
diff --git a/rpcs3/rpcs3qt/patch_manager_dialog.cpp b/rpcs3/rpcs3qt/patch_manager_dialog.cpp
index 930c999e9e..a58c4b8662 100644
--- a/rpcs3/rpcs3qt/patch_manager_dialog.cpp
+++ b/rpcs3/rpcs3qt/patch_manager_dialog.cpp
@@ -95,6 +95,12 @@ patch_manager_dialog::patch_manager_dialog(std::shared_ptr gui_set
ui->configurable_double_spin_box->setEnabled(false);
ui->configurable_double_spin_box->setVisible(false);
+ // Allow to double click the patches in order to de/select them
+ ui->patch_tree->set_checkable_by_double_click_callback([](QTreeWidgetItem* item, int column)
+ {
+ return item && !item->isDisabled() && (item->flags() & Qt::ItemIsUserCheckable) && static_cast(item->data(column, node_level_role).toInt()) == node_level::patch_level;
+ });
+
// Create connects
connect(ui->patch_filter, &QLineEdit::textChanged, this, &patch_manager_dialog::filter_patches);
connect(ui->patch_tree, &QTreeWidget::currentItemChanged, this, &patch_manager_dialog::handle_item_selected);
diff --git a/rpcs3/rpcs3qt/patch_manager_dialog.ui b/rpcs3/rpcs3qt/patch_manager_dialog.ui
index 6daeea160c..a9b224a0a7 100644
--- a/rpcs3/rpcs3qt/patch_manager_dialog.ui
+++ b/rpcs3/rpcs3qt/patch_manager_dialog.ui
@@ -20,7 +20,7 @@
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
@@ -49,9 +49,9 @@
-
-
+
- Qt::CustomContextMenu
+ Qt::ContextMenuPolicy::CustomContextMenu
20
@@ -70,10 +70,10 @@
- QFrame::NoFrame
+ QFrame::Shape::NoFrame
- QAbstractScrollArea::AdjustToContents
+ QAbstractScrollArea::SizeAdjustPolicy::AdjustToContents
true
@@ -121,7 +121,7 @@
true
- Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse
+ Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByMouse
@@ -143,7 +143,7 @@
true
- Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse
+ Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByMouse
@@ -162,7 +162,7 @@
- Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse
+ Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByMouse
@@ -184,7 +184,7 @@
true
- Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse
+ Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByMouse
@@ -206,7 +206,7 @@
true
- Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse
+ Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByMouse
@@ -228,7 +228,7 @@
true
- Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse
+ Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByMouse
@@ -250,7 +250,7 @@
true
- Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse
+ Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByMouse
@@ -269,13 +269,13 @@
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
+ Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop
true
- Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse
+ Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByMouse
@@ -324,10 +324,10 @@
-
- Qt::Vertical
+ Qt::Orientation::Vertical
- QSizePolicy::MinimumExpanding
+ QSizePolicy::Policy::MinimumExpanding
@@ -348,12 +348,19 @@
-
- QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::RestoreDefaults|QDialogButtonBox::Save
+ QDialogButtonBox::StandardButton::Apply|QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::RestoreDefaults|QDialogButtonBox::StandardButton::Save
+
+
+ custom_tree_widget
+ QTreeWidget
+ rpcs3qt/custom_tree_widget.h
+
+