diff --git a/modules/gui/qt/network/qml/BrowseDeviceView.qml b/modules/gui/qt/network/qml/BrowseDeviceView.qml
index e6eda2a80e5058959e9b4a5949e85bd3a2dda972..8b57a7c7cb4b5a718f8d2b3c0d14e1074d3413a0 100644
--- a/modules/gui/qt/network/qml/BrowseDeviceView.qml
+++ b/modules/gui/qt/network/qml/BrowseDeviceView.qml
@@ -71,6 +71,13 @@ FocusScope {
 
     property string title
 
+    property bool interactive: true
+
+    property bool enableBeginningFade: true
+    property bool enableEndFade: true
+
+    property bool reuseItems: true
+
     // Aliases
 
     property alias leftPadding: view.leftPadding
@@ -202,6 +209,10 @@ FocusScope {
 
             selectionModel: modelSelect
 
+            interactive: root.interactive
+
+            reuseItems: root.reuseItems
+
             Navigation.parentItem: root
 
             Navigation.upItem: headerItem
@@ -303,6 +314,13 @@ FocusScope {
 
             selectionModel: modelSelect
 
+            interactive: root.interactive
+
+            reuseItems: root.reuseItems
+
+            fadingEdge.enableBeginningFade: root.enableBeginningFade
+            fadingEdge.enableEndFade: root.enableEndFade
+
             Navigation.parentItem: root
 
             Navigation.upItem: headerItem
diff --git a/modules/gui/qt/network/qml/BrowseHomeDisplay.qml b/modules/gui/qt/network/qml/BrowseHomeDisplay.qml
index 2e291be893610c58eabea71d24805a7db59368b7..7d99f69e65b521e3789dc975f31c8915f47af6dd 100644
--- a/modules/gui/qt/network/qml/BrowseHomeDisplay.qml
+++ b/modules/gui/qt/network/qml/BrowseHomeDisplay.qml
@@ -174,8 +174,7 @@ FocusScope {
             width: flickable.width
             height: implicitHeight
 
-            spacing: (MainCtx.gridView ? VLCStyle.gridView_spacing : VLCStyle.tableView_spacing) -
-                     VLCStyle.layoutTitle_top_padding
+            spacing: 0 // relied on the generous padding of ViewHeader instead
 
             Navigation.parentItem: root
 
@@ -282,6 +281,14 @@ FocusScope {
 
         visible: (model.count !== 0)
 
+        interactive: false
+
+        enableBeginningFade: false
+        enableEndFade: false
+
+        // FIXME: ExpandGridView makes this page completely unusable when `reuseItems` is set (#29084):
+        reuseItems: !MainCtx.gridView
+
         onBrowse: (tree, reason) => root.browse(tree, reason)
         onSeeAll: (reason) => root.seeAllDevices(title, model.sd_source, reason)
 
diff --git a/modules/gui/qt/widgets/qml/ExpandGridView.qml b/modules/gui/qt/widgets/qml/ExpandGridView.qml
index c285143f53ac063a09976417cb69ffdf373f7be6..f4ad58c5dd518a201aaf8cf85df3401fb8f1c1f3 100644
--- a/modules/gui/qt/widgets/qml/ExpandGridView.qml
+++ b/modules/gui/qt/widgets/qml/ExpandGridView.qml
@@ -136,6 +136,7 @@ FocusScope {
     property alias contentWidth: flickable.contentWidth
     property alias contentX: flickable.contentX
     property alias gridScrollBar: flickableScrollBar
+    property alias interactive: flickable.interactive
 
     property alias expandDelegate: expandItemLoader.sourceComponent
     property alias expandItem: expandItemLoader.item
@@ -164,7 +165,8 @@ FocusScope {
     }
 
     contentHeight: {
-        const size = getItemPos(_count - 1)[1] + rowHeight + _expandItemVerticalSpace
+        // the trailing row spacing should not be accounted when calculating the content height:
+        const size = getItemPos(_count - 1)[1] + rowHeight + _expandItemVerticalSpace - verticalSpacing
 
         // NOTE: topMargin and headerHeight are included in root.getItemPos.
         if (footerItem)
diff --git a/modules/gui/qt/widgets/qml/TableViewExt.qml b/modules/gui/qt/widgets/qml/TableViewExt.qml
index fbc6a5d8faf9a1296d9e0a20cf690c47f8a711c3..7972468549629f63b3d2f7945fb1b55b4c4300f3 100644
--- a/modules/gui/qt/widgets/qml/TableViewExt.qml
+++ b/modules/gui/qt/widgets/qml/TableViewExt.qml
@@ -177,6 +177,8 @@ FocusScope {
 
     property alias colorContext: view.colorContext
 
+    property alias reuseItems: view.reuseItems
+
     // Signals
 
     //forwarded from subview