From f093028d7aee9a064f0a3733a712a314ec0fe360 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Tue, 16 May 2017 18:03:34 -0700 Subject: [PATCH] UI: Sort filter names when adding filters --- UI/window-basic-filters.cpp | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/UI/window-basic-filters.cpp b/UI/window-basic-filters.cpp index 09680fb1c..744e3f7ee 100644 --- a/UI/window-basic-filters.cpp +++ b/UI/window-basic-filters.cpp @@ -26,6 +26,7 @@ #include #include +#include #include #include #include @@ -322,20 +323,43 @@ static bool filter_compatible(bool async, uint32_t sourceFlags, QMenu *OBSBasicFilters::CreateAddFilterPopupMenu(bool async) { uint32_t sourceFlags = obs_source_get_output_flags(source); - const char *type; + const char *type_str; bool foundValues = false; size_t idx = 0; + struct FilterInfo { + string type; + string name; + + inline FilterInfo(const char *type_, const char *name_) + : type(type_), name(name_) + {} + }; + + vector types; + while (obs_enum_filter_types(idx++, &type_str)) { + const char *name = obs_source_get_display_name(type_str); + + auto it = types.begin(); + for (; it != types.end(); ++it) { + if (it->name >= name) + break; + } + + types.emplace(it, type_str, name); + } + QMenu *popup = new QMenu(QTStr("Add"), this); - while (obs_enum_filter_types(idx++, &type)) { - const char *name = obs_source_get_display_name(type); - uint32_t filterFlags = obs_get_source_output_flags(type); + for (FilterInfo &type : types) { + uint32_t filterFlags = obs_get_source_output_flags( + type.type.c_str()); if (!filter_compatible(async, sourceFlags, filterFlags)) continue; - QAction *popupItem = new QAction(QT_UTF8(name), this); - popupItem->setData(QT_UTF8(type)); + QAction *popupItem = new QAction(QT_UTF8(type.name.c_str()), + this); + popupItem->setData(QT_UTF8(type.type.c_str())); connect(popupItem, SIGNAL(triggered(bool)), this, SLOT(AddFilterFromAction())); popup->addAction(popupItem); -- GitLab