diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index e4d46492e..83bd9e1be 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -3185,22 +3185,39 @@ QMenu *OBSBasic::CreateAddSourcePopupMenu() QMenu *popup = new QMenu(QTStr("Add"), this); - auto addSource = [this, popup] (const char *type, const char *name) { - QAction *popupItem = new QAction(QT_UTF8(name), this); + auto getActionAfter = [] (QMenu *menu, const QString &name) + { + QList actions = menu->actions(); + + for (QAction *menuAction : actions) { + if (menuAction->text().compare(name) >= 0) + return menuAction; + } + + return (QAction*)nullptr; + }; + + auto addSource = [this, getActionAfter] (QMenu *popup, + const char *type, const char *name) + { + QString qname = QT_UTF8(name); + QAction *popupItem = new QAction(qname, this); popupItem->setData(QT_UTF8(type)); connect(popupItem, SIGNAL(triggered(bool)), this, SLOT(AddSourceFromAction())); - popup->addAction(popupItem); + + QAction *after = getActionAfter(popup, qname); + popup->insertAction(after, popupItem); }; while (obs_enum_input_types(idx++, &type)) { const char *name = obs_source_get_display_name(type); - addSource(type, name); + addSource(popup, type, name); foundValues = true; } - addSource("scene", Str("Basic.Scene")); + addSource(popup, "scene", Str("Basic.Scene")); if (!foundValues) { delete popup;