@@ -292,7 +292,7 @@ QMenu *QuickAccessItem::_CreateSceneMenu()
292
292
});
293
293
wa->setDefaultWidget (t);
294
294
popup->addAction (wa);
295
-
295
+ popup-> setStyleSheet ( " QMenu { menu-scrollable: 1; } " );
296
296
auto getActionAfter = [](QMenu *menu, const QString &name) {
297
297
QList<QAction *> actions = menu->actions ();
298
298
@@ -315,6 +315,15 @@ QMenu *QuickAccessItem::_CreateSceneMenu()
315
315
QWidgetAction *popupItem = new QWidgetAction (this );
316
316
QWidget *itemWidget = new QuickAccessSceneItem (this , sceneItem);
317
317
popupItem->setDefaultWidget (itemWidget);
318
+ popupItem->setParent (pop);
319
+
320
+ connect (popupItem, &QWidgetAction::triggered, this ,
321
+ [this , name]() {
322
+ obs_source_t *sceneClicked =
323
+ obs_get_source_by_name (name);
324
+ obs_frontend_set_current_scene (sceneClicked);
325
+ obs_source_release (sceneClicked);
326
+ });
318
327
319
328
QAction *after = getActionAfter (pop, qname);
320
329
pop->insertAction (after, popupItem);
@@ -324,6 +333,16 @@ QMenu *QuickAccessItem::_CreateSceneMenu()
324
333
addSource (popup, src);
325
334
}
326
335
336
+ connect (popup, &QMenu::hovered, this , [popup](QAction *act) {
337
+ QList<QWidgetAction *> menuActions =
338
+ popup->findChildren <QWidgetAction *>();
339
+ for (auto menuAction : menuActions) {
340
+ auto widget = static_cast <QuickAccessSceneItem *>(
341
+ menuAction->defaultWidget ());
342
+ widget->setHighlight (menuAction == act);
343
+ }
344
+ });
345
+
327
346
return popup;
328
347
}
329
348
@@ -351,6 +370,7 @@ void QuickAccessItem::on_actionScenes_triggered()
351
370
}
352
371
_getSceneItems ();
353
372
_AddScenePopupMenu (QCursor::pos ());
373
+ obs_source_release (source);
354
374
}
355
375
356
376
void QuickAccessItem::SwitchToScene ()
@@ -1281,7 +1301,7 @@ QuickAccessSceneItem::QuickAccessSceneItem(QWidget *parent,
1281
1301
1282
1302
setAttribute (Qt::WA_TranslucentBackground);
1283
1303
setMouseTracking (true );
1284
- setStyleSheet (" background: none" );
1304
+ // setStyleSheet("background: none");
1285
1305
1286
1306
QIcon icon;
1287
1307
@@ -1349,34 +1369,6 @@ QuickAccessSceneItem::QuickAccessSceneItem(QWidget *parent,
1349
1369
}
1350
1370
1351
1371
auto setItemVisible = [this ](bool val) {
1352
- // obs_scene_t *scene = obs_sceneitem_get_scene(_sceneItem);
1353
- // obs_source_t *scenesource = obs_scene_get_source(scene);
1354
- // int64_t id = obs_sceneitem_get_id(_sceneItem);
1355
- // const char *name = obs_source_get_name(scenesource);
1356
- // const char *uuid = obs_source_get_uuid(scenesource);
1357
- // obs_source_t *source = obs_sceneitem_get_source(_sceneItem);
1358
-
1359
- // auto undo_redo = [](const std::string &uuid, int64_t id,
1360
- // bool val) {
1361
- // auto s = obs_get_source_by_uuid(uuid.c_str());
1362
- // obs_scene_t *sc = obs_group_or_scene_from_source(s);
1363
- // obs_sceneitem_t *si =
1364
- // obs_scene_find_sceneitem_by_id(sc, id);
1365
- // if (si)
1366
- // obs_sceneitem_set_visible(si, val);
1367
- // };
1368
-
1369
- // QString str = QTStr(val ? "Undo.ShowSceneItem"
1370
- // : "Undo.HideSceneItem");
1371
-
1372
- // OBSBasic *main = OBSBasic::Get();
1373
- // main->undo_s.add_action(
1374
- // str.arg(obs_source_get_name(source), name),
1375
- // std::bind(undo_redo, std::placeholders::_1, id, !val),
1376
- // std::bind(undo_redo, std::placeholders::_1, id, val),
1377
- // uuid, uuid);
1378
-
1379
- // QSignalBlocker sourcesSignalBlocker(this);
1380
1372
obs_sceneitem_set_visible (_sceneItem, val);
1381
1373
};
1382
1374
connect (_vis, &QAbstractButton::clicked, setItemVisible);
@@ -1392,11 +1384,17 @@ void QuickAccessSceneItem::on_actionTransform_triggered()
1392
1384
obs_frontend_open_sceneitem_edit_transform (_sceneItem);
1393
1385
}
1394
1386
1395
- void QuickAccessSceneItem::mouseReleaseEvent (QMouseEvent *e)
1387
+ // void QuickAccessSceneItem::mouseReleaseEvent(QMouseEvent *e)
1388
+ // {
1389
+ // // This is to suppress mouse event propegating down
1390
+ // // to QMenu.
1391
+ // UNUSED_PARAMETER(e);
1392
+ // }
1393
+
1394
+ void QuickAccessSceneItem::setHighlight (bool h)
1396
1395
{
1397
- // This is to suppress mouse event propegating down
1398
- // to QMenu.
1399
- UNUSED_PARAMETER (e);
1396
+ setBackgroundRole (h ? QPalette::Highlight : QPalette::Window);
1397
+ setAutoFillBackground (h);
1400
1398
}
1401
1399
1402
1400
bool AddSourceToWidget (void *data, obs_source_t *source)
0 commit comments