Browse Source

UI,shared: Move OBSPropertiesView to its own directory

tytan652 1 year ago
parent
commit
f051fdd75e

+ 6 - 8
UI/cmake/legacy.cmake

@@ -71,6 +71,10 @@ find_package(CURL REQUIRED)
 add_subdirectory(frontend-plugins)
 add_subdirectory(frontend-plugins)
 add_executable(obs)
 add_executable(obs)
 
 
+if(NOT TARGET OBS::properties-view)
+  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/properties-view" "${CMAKE_BINARY_DIR}/shared/properties-view")
+endif()
+
 if(NOT TARGET OBS::qt-plain-text-edit)
 if(NOT TARGET OBS::qt-plain-text-edit)
   add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/plain-text-edit" "${CMAKE_BINARY_DIR}/shared/qt/plain-text-edit")
   add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/plain-text-edit" "${CMAKE_BINARY_DIR}/shared/qt/plain-text-edit")
 endif()
 endif()
@@ -187,8 +191,6 @@ target_sources(
           basic-controls.cpp
           basic-controls.cpp
           basic-controls.hpp
           basic-controls.hpp
           clickable-label.hpp
           clickable-label.hpp
-          double-slider.cpp
-          double-slider.hpp
           horizontal-scroll-area.cpp
           horizontal-scroll-area.cpp
           horizontal-scroll-area.hpp
           horizontal-scroll-area.hpp
           item-widget-helpers.cpp
           item-widget-helpers.cpp
@@ -209,9 +211,6 @@ target_sources(
           menu-button.hpp
           menu-button.hpp
           mute-checkbox.hpp
           mute-checkbox.hpp
           noncheckable-button.hpp
           noncheckable-button.hpp
-          properties-view.cpp
-          properties-view.hpp
-          properties-view.moc.hpp
           remote-text.cpp
           remote-text.cpp
           remote-text.hpp
           remote-text.hpp
           scene-tree.cpp
           scene-tree.cpp
@@ -219,8 +218,6 @@ target_sources(
           screenshot-obj.hpp
           screenshot-obj.hpp
           source-label.cpp
           source-label.cpp
           source-label.hpp
           source-label.hpp
-          spinbox-ignorewheel.cpp
-          spinbox-ignorewheel.hpp
           source-tree.cpp
           source-tree.cpp
           source-tree.hpp
           source-tree.hpp
           url-push-button.cpp
           url-push-button.cpp
@@ -325,7 +322,8 @@ target_link_libraries(
           OBS::qt-wrappers
           OBS::qt-wrappers
           OBS::qt-plain-text-edit
           OBS::qt-plain-text-edit
           OBS::qt-vertical-scroll-area
           OBS::qt-vertical-scroll-area
-          OBS::qt-slider-ignorewheel)
+          OBS::qt-slider-ignorewheel
+          OBS::properties-view)
 
 
 set_target_properties(obs PROPERTIES FOLDER "frontend")
 set_target_properties(obs PROPERTIES FOLDER "frontend")
 
 

+ 7 - 14
UI/cmake/ui-elements.cmake

@@ -1,25 +1,18 @@
 add_library(obs-ui-support INTERFACE)
 add_library(obs-ui-support INTERFACE)
 add_library(OBS::ui-support ALIAS obs-ui-support)
 add_library(OBS::ui-support ALIAS obs-ui-support)
 
 
-target_sources(
-  obs-ui-support
-  INTERFACE # cmake-format: sortable
-            clickable-label.hpp
-            double-slider.cpp
-            double-slider.hpp
-            horizontal-scroll-area.cpp
-            horizontal-scroll-area.hpp
-            properties-view.cpp
-            properties-view.hpp
-            properties-view.moc.hpp
-            spinbox-ignorewheel.cpp
-            spinbox-ignorewheel.hpp)
+target_sources(obs-ui-support INTERFACE # cmake-format: sortable
+                                        clickable-label.hpp horizontal-scroll-area.cpp horizontal-scroll-area.hpp)
 
 
 target_include_directories(obs-ui-support INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")
 target_include_directories(obs-ui-support INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")
 target_compile_options(obs-ui-support INTERFACE $<$<PLATFORM_ID:Linux>:-Wno-error=enum-conversion>)
 target_compile_options(obs-ui-support INTERFACE $<$<PLATFORM_ID:Linux>:-Wno-error=enum-conversion>)
 
 
 target_link_libraries(obs-studio PRIVATE OBS::ui-support)
 target_link_libraries(obs-studio PRIVATE OBS::ui-support)
 
 
+if(NOT TARGET OBS::properties-view)
+  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/properties-view" "${CMAKE_BINARY_DIR}/shared/properties-view")
+endif()
+
 if(NOT TARGET OBS::qt-plain-text-edit)
 if(NOT TARGET OBS::qt-plain-text-edit)
   add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/plain-text-edit" "${CMAKE_BINARY_DIR}/shared/qt/plain-text-edit")
   add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/plain-text-edit" "${CMAKE_BINARY_DIR}/shared/qt/plain-text-edit")
 endif()
 endif()
@@ -34,7 +27,7 @@ if(NOT TARGET OBS::qt-vertical-scroll-area)
                    "${CMAKE_BINARY_DIR}/shared/qt/vertical-scroll-area")
                    "${CMAKE_BINARY_DIR}/shared/qt/vertical-scroll-area")
 endif()
 endif()
 
 
-target_link_libraries(obs-studio PRIVATE OBS::qt-plain-text-edit OBS::qt-slider-ignorewheel
+target_link_libraries(obs-studio PRIVATE OBS::properties-view OBS::qt-plain-text-edit OBS::qt-slider-ignorewheel
                                          OBS::qt-vertical-scroll-area)
                                          OBS::qt-vertical-scroll-area)
 
 
 target_sources(
 target_sources(

+ 1 - 1
UI/frontend-plugins/aja-output-ui/AJAOutputUI.h

@@ -1,9 +1,9 @@
 #pragma once
 #pragma once
 
 
 #include <QDialog>
 #include <QDialog>
+#include <properties-view.hpp>
 
 
 #include "ui_output.h"
 #include "ui_output.h"
-#include "../../UI/properties-view.hpp"
 
 
 namespace aja {
 namespace aja {
 class CardManager;
 class CardManager;

+ 3 - 21
UI/frontend-plugins/aja-output-ui/CMakeLists.txt

@@ -23,22 +23,8 @@ if(NOT TARGET OBS::aja-support)
   add_subdirectory("${CMAKE_SOURCE_DIR}/plugins/aja" "${CMAKE_BINARY_DIR}/plugins/aja")
   add_subdirectory("${CMAKE_SOURCE_DIR}/plugins/aja" "${CMAKE_BINARY_DIR}/plugins/aja")
 endif()
 endif()
 
 
-if(NOT TARGET OBS::qt-plain-text-edit)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/plain-text-edit" "${CMAKE_BINARY_DIR}/shared/qt/plain-text-edit")
-endif()
-
-if(NOT TARGET OBS::qt-slider-ignorewheel)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/slider-ignorewheel"
-                   "${CMAKE_BINARY_DIR}/shared/qt/slider-ignorewheel")
-endif()
-
-if(NOT TARGET OBS::qt-vertical-scroll-area)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/vertical-scroll-area"
-                   "${CMAKE_BINARY_DIR}/shared/qt/vertical-scroll-area")
-endif()
-
-if(NOT TARGET OBS::qt-wrappers)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/wrappers" "${CMAKE_BINARY_DIR}/shared/qt/wrappers")
+if(NOT TARGET OBS::properties-view)
+  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/properties-view" "${CMAKE_BINARY_DIR}/shared/properties-view")
 endif()
 endif()
 
 
 add_library(aja-output-ui MODULE)
 add_library(aja-output-ui MODULE)
@@ -58,11 +44,7 @@ target_link_libraries(
   PRIVATE OBS::libobs
   PRIVATE OBS::libobs
           OBS::aja-support
           OBS::aja-support
           OBS::frontend-api
           OBS::frontend-api
-          OBS::qt-plain-text-edit
-          OBS::qt-slider-ignorewheel
-          OBS::qt-vertical-scroll-area
-          OBS::qt-wrappers
-          OBS::ui-support
+          OBS::properties-view
           Qt::Widgets
           Qt::Widgets
           AJA::LibAJANTV2
           AJA::LibAJANTV2
           $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:X11::X11>
           $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:X11::X11>

+ 6 - 35
UI/frontend-plugins/aja-output-ui/cmake/legacy.cmake

@@ -9,22 +9,8 @@ find_package(LibAJANTV2 REQUIRED)
 add_library(aja-output-ui MODULE)
 add_library(aja-output-ui MODULE)
 add_library(OBS::aja-output-ui ALIAS aja-output-ui)
 add_library(OBS::aja-output-ui ALIAS aja-output-ui)
 
 
-if(NOT TARGET OBS::qt-plain-text-edit)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/plain-text-edit" "${CMAKE_BINARY_DIR}/shared/qt/plain-text-edit")
-endif()
-
-if(NOT TARGET OBS::qt-slider-ignorewheel)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/slider-ignorewheel"
-                   "${CMAKE_BINARY_DIR}/shared/qt/slider-ignorewheel")
-endif()
-
-if(NOT TARGET OBS::qt-vertical-scroll-area)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/vertical-scroll-area"
-                   "${CMAKE_BINARY_DIR}/shared/qt/vertical-scroll-area")
-endif()
-
-if(NOT TARGET OBS::qt-wrappers)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/wrappers" "${CMAKE_BINARY_DIR}/shared/qt/wrappers")
+if(NOT TARGET OBS::properties-view)
+  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/properties-view" "${CMAKE_BINARY_DIR}/shared/properties-view")
 endif()
 endif()
 
 
 find_qt(COMPONENTS Widgets COMPONENTS_LINUX Gui)
 find_qt(COMPONENTS Widgets COMPONENTS_LINUX Gui)
@@ -63,25 +49,10 @@ target_sources(
           ${CMAKE_SOURCE_DIR}/plugins/aja/aja-vpid-data.cpp
           ${CMAKE_SOURCE_DIR}/plugins/aja/aja-vpid-data.cpp
           ${CMAKE_SOURCE_DIR}/plugins/aja/aja-vpid-data.hpp
           ${CMAKE_SOURCE_DIR}/plugins/aja/aja-vpid-data.hpp
           ${CMAKE_SOURCE_DIR}/plugins/aja/aja-widget-io.cpp
           ${CMAKE_SOURCE_DIR}/plugins/aja/aja-widget-io.cpp
-          ${CMAKE_SOURCE_DIR}/plugins/aja/aja-widget-io.hpp
-          ${CMAKE_SOURCE_DIR}/UI/double-slider.cpp
-          ${CMAKE_SOURCE_DIR}/UI/double-slider.hpp
-          ${CMAKE_SOURCE_DIR}/UI/properties-view.hpp
-          ${CMAKE_SOURCE_DIR}/UI/properties-view.cpp
-          ${CMAKE_SOURCE_DIR}/UI/properties-view.moc.hpp
-          ${CMAKE_SOURCE_DIR}/UI/spinbox-ignorewheel.cpp
-          ${CMAKE_SOURCE_DIR}/UI/spinbox-ignorewheel.hpp)
-
-target_link_libraries(
-  aja-output-ui
-  PRIVATE OBS::libobs
-          OBS::frontend-api
-          OBS::qt-wrappers
-          OBS::qt-plain-text-edit
-          OBS::qt-vertical-scroll-area
-          OBS::qt-slider-ignorewheel
-          Qt::Widgets
-          AJA::LibAJANTV2)
+          ${CMAKE_SOURCE_DIR}/plugins/aja/aja-widget-io.hpp)
+
+target_link_libraries(aja-output-ui PRIVATE OBS::libobs OBS::frontend-api OBS::properties-view Qt::Widgets
+                                            AJA::LibAJANTV2)
 
 
 if(OS_MACOS)
 if(OS_MACOS)
   find_library(IOKIT_FRAMEWORK Iokit)
   find_library(IOKIT_FRAMEWORK Iokit)

+ 3 - 21
UI/frontend-plugins/decklink-output-ui/CMakeLists.txt

@@ -20,22 +20,8 @@ endif()
 add_library(decklink-output-ui MODULE)
 add_library(decklink-output-ui MODULE)
 add_library(OBS::decklink-output-ui ALIAS decklink-output-ui)
 add_library(OBS::decklink-output-ui ALIAS decklink-output-ui)
 
 
-if(NOT TARGET OBS::qt-plain-text-edit)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/plain-text-edit" "${CMAKE_BINARY_DIR}/shared/qt/plain-text-edit")
-endif()
-
-if(NOT TARGET OBS::qt-vertical-scroll-area)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/vertical-scroll-area"
-                   "${CMAKE_BINARY_DIR}/shared/qt/vertical-scroll-area")
-endif()
-
-if(NOT TARGET OBS::qt-slider-ignorewheel)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/slider-ignorewheel"
-                   "${CMAKE_BINARY_DIR}/shared/qt/slider-ignorewheel")
-endif()
-
-if(NOT TARGET OBS::qt-wrappers)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/wrappers" "${CMAKE_BINARY_DIR}/shared/qt/wrappers")
+if(NOT TARGET OBS::properties-view)
+  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/properties-view" "${CMAKE_BINARY_DIR}/shared/properties-view")
 endif()
 endif()
 
 
 target_sources(decklink-output-ui PRIVATE forms/output.ui)
 target_sources(decklink-output-ui PRIVATE forms/output.ui)
@@ -49,11 +35,7 @@ target_link_libraries(
   decklink-output-ui
   decklink-output-ui
   PRIVATE OBS::libobs
   PRIVATE OBS::libobs
           OBS::frontend-api
           OBS::frontend-api
-          OBS::qt-plain-text-edit
-          OBS::qt-slider-ignorewheel
-          OBS::qt-vertical-scroll-area
-          OBS::qt-wrappers
-          OBS::ui-support
+          OBS::properties-view
           Qt::Widgets
           Qt::Widgets
           "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,Cocoa.framework>>"
           "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,Cocoa.framework>>"
           $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:X11::X11>
           $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:X11::X11>

+ 1 - 1
UI/frontend-plugins/decklink-output-ui/DecklinkOutputUI.h

@@ -1,9 +1,9 @@
 #pragma once
 #pragma once
 
 
 #include <QDialog>
 #include <QDialog>
+#include <properties-view.hpp>
 
 
 #include "ui_output.h"
 #include "ui_output.h"
-#include "../../UI/properties-view.hpp"
 
 
 class DecklinkOutputUI : public QDialog {
 class DecklinkOutputUI : public QDialog {
 	Q_OBJECT
 	Q_OBJECT

+ 6 - 39
UI/frontend-plugins/decklink-output-ui/cmake/legacy.cmake

@@ -7,22 +7,8 @@ endif()
 add_library(decklink-output-ui MODULE)
 add_library(decklink-output-ui MODULE)
 add_library(OBS::decklink-output-ui ALIAS decklink-output-ui)
 add_library(OBS::decklink-output-ui ALIAS decklink-output-ui)
 
 
-if(NOT TARGET OBS::qt-plain-text-edit)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/plain-text-edit" "${CMAKE_BINARY_DIR}/shared/qt/plain-text-edit")
-endif()
-
-if(NOT TARGET OBS::qt-slider-ignorewheel)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/slider-ignorewheel"
-                   "${CMAKE_BINARY_DIR}/shared/qt/slider-ignorewheel")
-endif()
-
-if(NOT TARGET OBS::qt-vertical-scroll-area)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/vertical-scroll-area"
-                   "${CMAKE_BINARY_DIR}/shared/qt/vertical-scroll-area")
-endif()
-
-if(NOT TARGET OBS::qt-wrappers)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/wrappers" "${CMAKE_BINARY_DIR}/shared/qt/wrappers")
+if(NOT TARGET OBS::properties-view)
+  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/properties-view" "${CMAKE_BINARY_DIR}/shared/properties-view")
 endif()
 endif()
 
 
 find_qt(COMPONENTS Widgets COMPONENTS_LINUX Gui)
 find_qt(COMPONENTS Widgets COMPONENTS_LINUX Gui)
@@ -40,29 +26,10 @@ endif()
 
 
 target_sources(decklink-output-ui PRIVATE forms/output.ui)
 target_sources(decklink-output-ui PRIVATE forms/output.ui)
 
 
-target_sources(
-  decklink-output-ui
-  PRIVATE DecklinkOutputUI.cpp
-          DecklinkOutputUI.h
-          decklink-ui-main.cpp
-          decklink-ui-main.h
-          ${CMAKE_SOURCE_DIR}/UI/double-slider.cpp
-          ${CMAKE_SOURCE_DIR}/UI/double-slider.hpp
-          ${CMAKE_SOURCE_DIR}/UI/properties-view.hpp
-          ${CMAKE_SOURCE_DIR}/UI/properties-view.cpp
-          ${CMAKE_SOURCE_DIR}/UI/properties-view.moc.hpp
-          ${CMAKE_SOURCE_DIR}/UI/spinbox-ignorewheel.cpp
-          ${CMAKE_SOURCE_DIR}/UI/spinbox-ignorewheel.hpp)
-
-target_link_libraries(
-  decklink-output-ui
-  PRIVATE OBS::libobs
-          OBS::frontend-api
-          OBS::qt-wrappers
-          OBS::qt-plain-text-edit
-          OBS::qt-vertical-scroll-area
-          OBS::qt-slider-ignorewheel
-          Qt::Widgets)
+target_sources(decklink-output-ui PRIVATE DecklinkOutputUI.cpp DecklinkOutputUI.h decklink-ui-main.cpp
+                                          decklink-ui-main.h)
+
+target_link_libraries(decklink-output-ui PRIVATE OBS::libobs OBS::frontend-api OBS::properties-view Qt::Widgets)
 
 
 target_compile_features(decklink-output-ui PRIVATE cxx_std_17)
 target_compile_features(decklink-output-ui PRIVATE cxx_std_17)
 
 

+ 5 - 13
UI/frontend-plugins/frontend-tools/CMakeLists.txt

@@ -14,18 +14,12 @@ endif()
 add_library(frontend-tools MODULE)
 add_library(frontend-tools MODULE)
 add_library(OBS::frontend-tools ALIAS frontend-tools)
 add_library(OBS::frontend-tools ALIAS frontend-tools)
 
 
-if(NOT TARGET OBS::qt-plain-text-edit)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/plain-text-edit" "${CMAKE_BINARY_DIR}/shared/qt/plain-text-edit")
-endif()
-
-if(NOT TARGET OBS::qt-vertical-scroll-area)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/vertical-scroll-area"
-                   "${CMAKE_BINARY_DIR}/shared/qt/vertical-scroll-area")
+if(NOT TARGET OBS::properties-view)
+  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/properties-view" "${CMAKE_BINARY_DIR}/shared/properties-view")
 endif()
 endif()
 
 
-if(NOT TARGET OBS::qt-slider-ignorewheel)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/slider-ignorewheel"
-                   "${CMAKE_BINARY_DIR}/shared/qt/slider-ignorewheel")
+if(NOT TARGET OBS::qt-plain-text-edit)
+  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/plain-text-edit" "${CMAKE_BINARY_DIR}/shared/qt/plain-text-edit")
 endif()
 endif()
 
 
 if(NOT TARGET OBS::qt-wrappers)
 if(NOT TARGET OBS::qt-wrappers)
@@ -63,11 +57,9 @@ target_link_libraries(
   frontend-tools
   frontend-tools
   PRIVATE OBS::frontend-api
   PRIVATE OBS::frontend-api
           OBS::libobs
           OBS::libobs
+          OBS::properties-view
           OBS::qt-plain-text-edit
           OBS::qt-plain-text-edit
-          OBS::qt-slider-ignorewheel
-          OBS::qt-vertical-scroll-area
           OBS::qt-wrappers
           OBS::qt-wrappers
-          OBS::ui-support
           Qt::Widgets
           Qt::Widgets
           "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,Cocoa>>"
           "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,Cocoa>>"
           $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:X11::X11>
           $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:X11::X11>

+ 8 - 34
UI/frontend-plugins/frontend-tools/cmake/legacy.cmake

@@ -3,18 +3,12 @@ project(frontend-tools)
 add_library(frontend-tools MODULE)
 add_library(frontend-tools MODULE)
 add_library(OBS::frontend-tools ALIAS frontend-tools)
 add_library(OBS::frontend-tools ALIAS frontend-tools)
 
 
-if(NOT TARGET OBS::qt-plain-text-edit)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/plain-text-edit" "${CMAKE_BINARY_DIR}/shared/qt/plain-text-edit")
-endif()
-
-if(NOT TARGET OBS::qt-slider-ignorewheel)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/slider-ignorewheel"
-                   "${CMAKE_BINARY_DIR}/shared/qt/slider-ignorewheel")
+if(NOT TARGET OBS::properties-view)
+  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/properties-view" "${CMAKE_BINARY_DIR}/shared/properties-view")
 endif()
 endif()
 
 
-if(NOT TARGET OBS::qt-vertical-scroll-area)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/vertical-scroll-area"
-                   "${CMAKE_BINARY_DIR}/shared/qt/vertical-scroll-area")
+if(NOT TARGET OBS::qt-plain-text-edit)
+  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/plain-text-edit" "${CMAKE_BINARY_DIR}/shared/qt/plain-text-edit")
 endif()
 endif()
 
 
 if(NOT TARGET OBS::qt-wrappers)
 if(NOT TARGET OBS::qt-wrappers)
@@ -37,33 +31,13 @@ endif()
 target_sources(frontend-tools PRIVATE forms/auto-scene-switcher.ui forms/captions.ui forms/output-timer.ui
 target_sources(frontend-tools PRIVATE forms/auto-scene-switcher.ui forms/captions.ui forms/output-timer.ui
                                       forms/scripts.ui)
                                       forms/scripts.ui)
 
 
-target_sources(
-  frontend-tools
-  PRIVATE frontend-tools.c
-          auto-scene-switcher.hpp
-          auto-scene-switcher.cpp
-          output-timer.hpp
-          tool-helpers.hpp
-          output-timer.cpp
-          ${CMAKE_SOURCE_DIR}/UI/double-slider.cpp
-          ${CMAKE_SOURCE_DIR}/UI/double-slider.hpp
-          ${CMAKE_SOURCE_DIR}/UI/properties-view.cpp
-          ${CMAKE_SOURCE_DIR}/UI/properties-view.hpp
-          ${CMAKE_SOURCE_DIR}/UI/properties-view.moc.hpp
-          ${CMAKE_SOURCE_DIR}/UI/spinbox-ignorewheel.cpp
-          ${CMAKE_SOURCE_DIR}/UI/spinbox-ignorewheel.hpp)
+target_sources(frontend-tools PRIVATE frontend-tools.c auto-scene-switcher.hpp auto-scene-switcher.cpp output-timer.hpp
+                                      tool-helpers.hpp output-timer.cpp)
 
 
 target_compile_features(frontend-tools PRIVATE cxx_std_17)
 target_compile_features(frontend-tools PRIVATE cxx_std_17)
 
 
-target_link_libraries(
-  frontend-tools
-  PRIVATE OBS::frontend-api
-          OBS::qt-wrappers
-          OBS::qt-plain-text-edit
-          OBS::qt-vertical-scroll-area
-          OBS::qt-slider-ignorewheel
-          OBS::libobs
-          Qt::Widgets)
+target_link_libraries(frontend-tools PRIVATE OBS::frontend-api OBS::qt-wrappers OBS::qt-plain-text-edit
+                                             OBS::properties-view OBS::libobs Qt::Widgets)
 
 
 if(OS_POSIX AND NOT OS_MACOS)
 if(OS_POSIX AND NOT OS_MACOS)
   target_link_libraries(frontend-tools PRIVATE Qt::GuiPrivate)
   target_link_libraries(frontend-tools PRIVATE Qt::GuiPrivate)

+ 1 - 1
UI/frontend-plugins/frontend-tools/scripts.cpp

@@ -1,6 +1,5 @@
 #include "obs-module.h"
 #include "obs-module.h"
 #include "scripts.hpp"
 #include "scripts.hpp"
-#include "../../properties-view.hpp"
 
 
 #include <QFileDialog>
 #include <QFileDialog>
 #include <QHBoxLayout>
 #include <QHBoxLayout>
@@ -18,6 +17,7 @@
 #include <QDesktopServices>
 #include <QDesktopServices>
 #include <qt-wrappers.hpp>
 #include <qt-wrappers.hpp>
 #include <plain-text-edit.hpp>
 #include <plain-text-edit.hpp>
+#include <properties-view.hpp>
 
 
 #include <obs.hpp>
 #include <obs.hpp>
 #include <obs-module.h>
 #include <obs-module.h>

+ 1 - 2
UI/window-basic-filters.hpp

@@ -21,8 +21,7 @@
 #include <QDialogButtonBox>
 #include <QDialogButtonBox>
 #include <memory>
 #include <memory>
 #include <obs.hpp>
 #include <obs.hpp>
-
-#include "properties-view.hpp"
+#include <properties-view.hpp>
 
 
 class OBSBasic;
 class OBSBasic;
 class QMenu;
 class QMenu;

+ 1 - 2
UI/window-basic-interaction.hpp

@@ -22,8 +22,7 @@
 #include <functional>
 #include <functional>
 
 
 #include <obs.hpp>
 #include <obs.hpp>
-
-#include "properties-view.hpp"
+#include <properties-view.hpp>
 
 
 class OBSBasic;
 class OBSBasic;
 
 

+ 1 - 1
UI/window-basic-properties.cpp

@@ -19,9 +19,9 @@
 #include "window-basic-properties.hpp"
 #include "window-basic-properties.hpp"
 #include "window-basic-main.hpp"
 #include "window-basic-main.hpp"
 #include "display-helpers.hpp"
 #include "display-helpers.hpp"
-#include "properties-view.hpp"
 
 
 #include <qt-wrappers.hpp>
 #include <qt-wrappers.hpp>
+#include <properties-view.hpp>
 #include <QCloseEvent>
 #include <QCloseEvent>
 #include <QScreen>
 #include <QScreen>
 #include <QWindow>
 #include <QWindow>

+ 51 - 0
shared/properties-view/CMakeLists.txt

@@ -0,0 +1,51 @@
+cmake_minimum_required(VERSION 3.22...3.25)
+
+find_package(Qt6 REQUIRED Core Widgets)
+
+if(NOT TARGET OBS::qt-wrappers)
+  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/wrappers" "${CMAKE_BINARY_DIR}/shared/qt/wrappers")
+endif()
+
+if(NOT TARGET OBS::qt-plain-text-edit)
+  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/plain-text-edit" "${CMAKE_BINARY_DIR}/shared/qt/plain-text-edit")
+endif()
+
+if(NOT TARGET OBS::qt-vertical-scroll-area)
+  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/vertical-scroll-area"
+                   "${CMAKE_BINARY_DIR}/shared/qt/vertical-scroll-area")
+endif()
+
+if(NOT TARGET OBS::qt-slider-ignorewheel)
+  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/slider-ignorewheel"
+                   "${CMAKE_BINARY_DIR}/shared/qt/slider-ignorewheel")
+endif()
+
+add_library(properties-view INTERFACE)
+add_library(OBS::properties-view ALIAS properties-view)
+
+target_sources(
+  properties-view
+  INTERFACE # cmake-format: sortable
+            double-slider.cpp
+            double-slider.hpp
+            properties-view.cpp
+            properties-view.hpp
+            properties-view.moc.hpp
+            spinbox-ignorewheel.cpp
+            spinbox-ignorewheel.hpp)
+target_include_directories(properties-view INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")
+
+if(OS_LINUX AND Qt6_VERSION VERSION_LESS 6.3)
+  target_compile_options(properties-view INTERFACE -Wno-error=enum-conversion)
+endif()
+
+target_link_libraries(
+  properties-view
+  INTERFACE OBS::frontend-api
+            OBS::libobs
+            OBS::qt-wrappers
+            OBS::qt-plain-text-edit
+            OBS::qt-vertical-scroll-area
+            OBS::qt-slider-ignorewheel
+            Qt::Core
+            Qt::Widgets)

+ 0 - 0
UI/double-slider.cpp → shared/properties-view/double-slider.cpp


+ 0 - 0
UI/double-slider.hpp → shared/properties-view/double-slider.hpp


+ 38 - 41
UI/properties-view.cpp → shared/properties-view/properties-view.cpp

@@ -28,7 +28,6 @@
 #include "spinbox-ignorewheel.hpp"
 #include "spinbox-ignorewheel.hpp"
 #include "properties-view.hpp"
 #include "properties-view.hpp"
 #include "properties-view.moc.hpp"
 #include "properties-view.moc.hpp"
-#include "obs-app.hpp"
 
 
 #include <qt-wrappers.hpp>
 #include <qt-wrappers.hpp>
 #include <plain-text-edit.hpp>
 #include <plain-text-edit.hpp>
@@ -39,6 +38,7 @@
 #include <obs.h>
 #include <obs.h>
 #include <qtimer.h>
 #include <qtimer.h>
 #include <string>
 #include <string>
+#include <obs-frontend-api.h>
 
 
 using namespace std;
 using namespace std;
 
 
@@ -106,7 +106,7 @@ void OBSPropertiesView::ReloadProperties()
 	RefreshProperties();
 	RefreshProperties();
 }
 }
 
 
-#define NO_PROPERTIES_STRING QTStr("Basic.PropertiesWindow.NoProperties")
+#define NO_PROPERTIES_STRING QObject::tr("Basic.PropertiesWindow.NoProperties")
 
 
 void OBSPropertiesView::RefreshProperties()
 void OBSPropertiesView::RefreshProperties()
 {
 {
@@ -306,7 +306,7 @@ QWidget *OBSPropertiesView::AddText(obs_property_t *prop, QFormLayout *layout,
 		QLineEdit *edit = new QLineEdit();
 		QLineEdit *edit = new QLineEdit();
 		QPushButton *show = new QPushButton();
 		QPushButton *show = new QPushButton();
 
 
-		show->setText(QTStr("Show"));
+		show->setText(tr("Show"));
 		show->setCheckable(true);
 		show->setCheckable(true);
 		edit->setText(QT_UTF8(val));
 		edit->setText(QT_UTF8(val));
 		edit->setEchoMode(QLineEdit::Password);
 		edit->setEchoMode(QLineEdit::Password);
@@ -318,7 +318,7 @@ QWidget *OBSPropertiesView::AddText(obs_property_t *prop, QFormLayout *layout,
 		connect(show, &QAbstractButton::toggled, info,
 		connect(show, &QAbstractButton::toggled, info,
 			&WidgetInfo::TogglePasswordText);
 			&WidgetInfo::TogglePasswordText);
 		connect(show, &QAbstractButton::toggled, [=](bool hide) {
 		connect(show, &QAbstractButton::toggled, [=](bool hide) {
-			show->setText(hide ? QTStr("Hide") : QTStr("Show"));
+			show->setText(hide ? tr("Hide") : tr("Show"));
 		});
 		});
 		children.emplace_back(info);
 		children.emplace_back(info);
 
 
@@ -345,7 +345,7 @@ QWidget *OBSPropertiesView::AddText(obs_property_t *prop, QFormLayout *layout,
 			label = new QLabel(desc);
 			label = new QLabel(desc);
 
 
 		if (long_desc != NULL && !info_label->text().isEmpty()) {
 		if (long_desc != NULL && !info_label->text().isEmpty()) {
-			QString file = !App()->IsThemeDark()
+			QString file = !obs_frontend_is_theme_dark()
 					       ? ":/res/images/help.svg"
 					       ? ":/res/images/help.svg"
 					       : ":/res/images/help_light.svg";
 					       : ":/res/images/help_light.svg";
 			QString lStr = "<html>%1 <img src='%2' style=' \
 			QString lStr = "<html>%1 <img src='%2' style=' \
@@ -391,7 +391,7 @@ void OBSPropertiesView::AddPath(obs_property_t *prop, QFormLayout *layout,
 	const char *val = obs_data_get_string(settings, name);
 	const char *val = obs_data_get_string(settings, name);
 	QLayout *subLayout = new QHBoxLayout();
 	QLayout *subLayout = new QHBoxLayout();
 	QLineEdit *edit = new QLineEdit();
 	QLineEdit *edit = new QLineEdit();
-	QPushButton *button = new QPushButton(QTStr("Browse"));
+	QPushButton *button = new QPushButton(tr("Browse"));
 
 
 	if (!obs_property_enabled(prop)) {
 	if (!obs_property_enabled(prop)) {
 		edit->setEnabled(false);
 		edit->setEnabled(false);
@@ -682,8 +682,8 @@ QWidget *OBSPropertiesView::AddList(obs_property_t *prop, bool &warning)
 		if (id != -1 && id != idx) {
 		if (id != -1 && id != idx) {
 			QString actual = combo->itemText(id);
 			QString actual = combo->itemText(id);
 			QString selected = combo->itemText(idx);
 			QString selected = combo->itemText(idx);
-			QString combined = QTStr(
-				"Basic.PropertiesWindow.AutoSelectFormat");
+			QString combined =
+				tr("Basic.PropertiesWindow.AutoSelectFormat");
 			combo->setItemText(idx,
 			combo->setItemText(idx,
 					   combined.arg(selected).arg(actual));
 					   combined.arg(selected).arg(actual));
 		}
 		}
@@ -797,7 +797,7 @@ void OBSPropertiesView::AddColorInternal(obs_property_t *prop,
 	}
 	}
 
 
 	button->setProperty("themeID", "settingsButtons");
 	button->setProperty("themeID", "settingsButtons");
-	button->setText(QTStr("Basic.PropertiesWindow.SelectColor"));
+	button->setText(tr("Basic.PropertiesWindow.SelectColor"));
 	button->setToolTip(QT_UTF8(obs_property_long_description(prop)));
 	button->setToolTip(QT_UTF8(obs_property_long_description(prop)));
 
 
 	if (supportAlpha) {
 	if (supportAlpha) {
@@ -899,7 +899,7 @@ void OBSPropertiesView::AddFont(obs_property_t *prop, QFormLayout *layout,
 	MakeQFont(font_obj, font, true);
 	MakeQFont(font_obj, font, true);
 
 
 	button->setProperty("themeID", "settingsButtons");
 	button->setProperty("themeID", "settingsButtons");
-	button->setText(QTStr("Basic.PropertiesWindow.SelectFont"));
+	button->setText(tr("Basic.PropertiesWindow.SelectFont"));
 	button->setToolTip(QT_UTF8(obs_property_long_description(prop)));
 	button->setToolTip(QT_UTF8(obs_property_long_description(prop)));
 
 
 	fontLabel->setFrameStyle(QFrame::Sunken | QFrame::Panel);
 	fontLabel->setFrameStyle(QFrame::Sunken | QFrame::Panel);
@@ -1165,7 +1165,7 @@ static QWidget *CreateRationalFPS(OBSFrameRatePropertyWidget *fpsProps,
 	layout->setContentsMargins(0, 0, 0, 0);
 	layout->setContentsMargins(0, 0, 0, 0);
 	layout->setSpacing(4);
 	layout->setSpacing(4);
 
 
-	auto str = QTStr("Basic.PropertiesView.FPS.ValidFPSRanges");
+	auto str = QObject::tr("Basic.PropertiesView.FPS.ValidFPSRanges");
 	auto rlabel = new QLabel{str};
 	auto rlabel = new QLabel{str};
 
 
 	auto combo = fpsProps->fpsRange = new QComboBox();
 	auto combo = fpsProps->fpsRange = new QComboBox();
@@ -1200,8 +1200,9 @@ static QWidget *CreateRationalFPS(OBSFrameRatePropertyWidget *fpsProps,
 		den_edit->setValue(current_fps->denominator);
 		den_edit->setValue(current_fps->denominator);
 	}
 	}
 
 
-	layout->addRow(QTStr("Basic.Settings.Video.Numerator"), num_edit);
-	layout->addRow(QTStr("Basic.Settings.Video.Denominator"), den_edit);
+	layout->addRow(QObject::tr("Basic.Settings.Video.Numerator"), num_edit);
+	layout->addRow(QObject::tr("Basic.Settings.Video.Denominator"),
+		       den_edit);
 
 
 	widget->setLayout(layout);
 	widget->setLayout(layout);
 
 
@@ -1220,9 +1221,9 @@ CreateFrameRateWidget(obs_property_t *prop, bool &warning, const char *option,
 	swap(widget->fps_ranges, fps_ranges);
 	swap(widget->fps_ranges, fps_ranges);
 
 
 	auto combo = widget->modeSelect = new QComboBox();
 	auto combo = widget->modeSelect = new QComboBox();
-	combo->addItem(QTStr("Basic.PropertiesView.FPS.Simple"),
+	combo->addItem(QObject::tr("Basic.PropertiesView.FPS.Simple"),
 		       QVariant::fromValue(frame_rate_tag::simple()));
 		       QVariant::fromValue(frame_rate_tag::simple()));
-	combo->addItem(QTStr("Basic.PropertiesView.FPS.Rational"),
+	combo->addItem(QObject::tr("Basic.PropertiesView.FPS.Rational"),
 		       QVariant::fromValue(frame_rate_tag::rational()));
 		       QVariant::fromValue(frame_rate_tag::rational()));
 
 
 	combo->setToolTip(QT_UTF8(obs_property_long_description(prop)));
 	combo->setToolTip(QT_UTF8(obs_property_long_description(prop)));
@@ -1616,7 +1617,7 @@ void OBSPropertiesView::AddProperty(obs_property_t *property,
 		widget->setEnabled(false);
 		widget->setEnabled(false);
 
 
 	if (obs_property_long_description(property)) {
 	if (obs_property_long_description(property)) {
-		QString file = !App()->IsThemeDark()
+		QString file = !obs_frontend_is_theme_dark()
 				       ? ":/res/images/help.svg"
 				       ? ":/res/images/help.svg"
 				       : ":/res/images/help_light.svg";
 				       : ":/res/images/help_light.svg";
 		if (label) {
 		if (label) {
@@ -1970,13 +1971,13 @@ bool WidgetInfo::FontChanged(const char *setting)
 		QFont initial;
 		QFont initial;
 		font = QFontDialog::getFont(
 		font = QFontDialog::getFont(
 			&success, initial, view,
 			&success, initial, view,
-			QTStr("Basic.PropertiesWindow.SelectFont.WindowTitle"),
+			tr("Basic.PropertiesWindow.SelectFont.WindowTitle"),
 			options);
 			options);
 	} else {
 	} else {
 		MakeQFont(font_obj, font);
 		MakeQFont(font_obj, font);
 		font = QFontDialog::getFont(
 		font = QFontDialog::getFont(
 			&success, font, view,
 			&success, font, view,
-			QTStr("Basic.PropertiesWindow.SelectFont.WindowTitle"),
+			tr("Basic.PropertiesWindow.SelectFont.WindowTitle"),
 			options);
 			options);
 	}
 	}
 
 
@@ -2042,15 +2043,14 @@ void WidgetInfo::ButtonClicked()
 		QUrl url(savedUrl, QUrl::StrictMode);
 		QUrl url(savedUrl, QUrl::StrictMode);
 		if (url.isValid() && (url.scheme().compare("http") == 0 ||
 		if (url.isValid() && (url.scheme().compare("http") == 0 ||
 				      url.scheme().compare("https") == 0)) {
 				      url.scheme().compare("https") == 0)) {
-			QString msg(
-				QTStr("Basic.PropertiesView.UrlButton.Text"));
+			QString msg(tr("Basic.PropertiesView.UrlButton.Text"));
 			msg += "\n\n";
 			msg += "\n\n";
-			msg += QString(QTStr("Basic.PropertiesView.UrlButton.Text.Url"))
+			msg += QString(tr("Basic.PropertiesView.UrlButton.Text.Url"))
 				       .arg(savedUrl);
 				       .arg(savedUrl);
 
 
 			QMessageBox::StandardButton button = OBSMessageBox::question(
 			QMessageBox::StandardButton button = OBSMessageBox::question(
 				view->window(),
 				view->window(),
-				QTStr("Basic.PropertiesView.UrlButton.OpenUrl"),
+				tr("Basic.PropertiesView.UrlButton.OpenUrl"),
 				msg, QMessageBox::Yes | QMessageBox::No,
 				msg, QMessageBox::Yes | QMessageBox::No,
 				QMessageBox::No);
 				QMessageBox::No);
 
 
@@ -2188,8 +2188,7 @@ class EditableItemDialog : public QDialog {
 		if (curPath.isEmpty())
 		if (curPath.isEmpty())
 			curPath = default_path;
 			curPath = default_path;
 
 
-		QString path = OpenFile(App()->GetMainWindow(), QTStr("Browse"),
-					curPath, filter);
+		QString path = OpenFile(this, tr("Browse"), curPath, filter);
 		if (path.isEmpty())
 		if (path.isEmpty())
 			return;
 			return;
 
 
@@ -2214,7 +2213,7 @@ public:
 
 
 		if (browse) {
 		if (browse) {
 			QPushButton *browseButton =
 			QPushButton *browseButton =
-				new QPushButton(QTStr("Browse"));
+				new QPushButton(tr("Browse"));
 			browseButton->setProperty("themeID", "settingsButtons");
 			browseButton->setProperty("themeID", "settingsButtons");
 			topLayout->addWidget(browseButton);
 			topLayout->addWidget(browseButton);
 			topLayout->setAlignment(browseButton, Qt::AlignVCenter);
 			topLayout->setAlignment(browseButton, Qt::AlignVCenter);
@@ -2259,18 +2258,17 @@ void WidgetInfo::EditListAdd()
 
 
 	QAction *action;
 	QAction *action;
 
 
-	action = new QAction(QTStr("Basic.PropertiesWindow.AddFiles"), this);
+	action = new QAction(tr("Basic.PropertiesWindow.AddFiles"), this);
 	connect(action, &QAction::triggered, this,
 	connect(action, &QAction::triggered, this,
 		&WidgetInfo::EditListAddFiles);
 		&WidgetInfo::EditListAddFiles);
 	popup.addAction(action);
 	popup.addAction(action);
 
 
-	action = new QAction(QTStr("Basic.PropertiesWindow.AddDir"), this);
+	action = new QAction(tr("Basic.PropertiesWindow.AddDir"), this);
 	connect(action, &QAction::triggered, this, &WidgetInfo::EditListAddDir);
 	connect(action, &QAction::triggered, this, &WidgetInfo::EditListAddDir);
 	popup.addAction(action);
 	popup.addAction(action);
 
 
 	if (type == OBS_EDITABLE_LIST_TYPE_FILES_AND_URLS) {
 	if (type == OBS_EDITABLE_LIST_TYPE_FILES_AND_URLS) {
-		action = new QAction(QTStr("Basic.PropertiesWindow.AddURL"),
-				     this);
+		action = new QAction(tr("Basic.PropertiesWindow.AddURL"), this);
 		connect(action, &QAction::triggered, this,
 		connect(action, &QAction::triggered, this,
 			&WidgetInfo::EditListAddText);
 			&WidgetInfo::EditListAddText);
 		popup.addAction(action);
 		popup.addAction(action);
@@ -2285,7 +2283,7 @@ void WidgetInfo::EditListAddText()
 	const char *desc = obs_property_description(property);
 	const char *desc = obs_property_description(property);
 
 
 	EditableItemDialog dialog(widget->window(), QString(), false);
 	EditableItemDialog dialog(widget->window(), QString(), false);
-	auto title = QTStr("Basic.PropertiesWindow.AddEditableListEntry")
+	auto title = tr("Basic.PropertiesWindow.AddEditableListEntry")
 			     .arg(QT_UTF8(desc));
 			     .arg(QT_UTF8(desc));
 	dialog.setWindowTitle(title);
 	dialog.setWindowTitle(title);
 	if (dialog.exec() == QDialog::Rejected)
 	if (dialog.exec() == QDialog::Rejected)
@@ -2307,11 +2305,11 @@ void WidgetInfo::EditListAddFiles()
 	const char *default_path =
 	const char *default_path =
 		obs_property_editable_list_default_path(property);
 		obs_property_editable_list_default_path(property);
 
 
-	QString title = QTStr("Basic.PropertiesWindow.AddEditableListFiles")
+	QString title = tr("Basic.PropertiesWindow.AddEditableListFiles")
 				.arg(QT_UTF8(desc));
 				.arg(QT_UTF8(desc));
 
 
-	QStringList files = OpenFiles(App()->GetMainWindow(), title,
-				      QT_UTF8(default_path), QT_UTF8(filter));
+	QStringList files =
+		OpenFiles(list, title, QT_UTF8(default_path), QT_UTF8(filter));
 #ifdef __APPLE__
 #ifdef __APPLE__
 	// TODO: Revisit when QTBUG-42661 is fixed
 	// TODO: Revisit when QTBUG-42661 is fixed
 	widget->window()->raise();
 	widget->window()->raise();
@@ -2331,11 +2329,10 @@ void WidgetInfo::EditListAddDir()
 	const char *default_path =
 	const char *default_path =
 		obs_property_editable_list_default_path(property);
 		obs_property_editable_list_default_path(property);
 
 
-	QString title = QTStr("Basic.PropertiesWindow.AddEditableListDir")
+	QString title = tr("Basic.PropertiesWindow.AddEditableListDir")
 				.arg(QT_UTF8(desc));
 				.arg(QT_UTF8(desc));
 
 
-	QString dir = SelectDirectory(App()->GetMainWindow(), title,
-				      QT_UTF8(default_path));
+	QString dir = SelectDirectory(list, title, QT_UTF8(default_path));
 #ifdef __APPLE__
 #ifdef __APPLE__
 	// TODO: Revisit when QTBUG-42661 is fixed
 	// TODO: Revisit when QTBUG-42661 is fixed
 	widget->window()->raise();
 	widget->window()->raise();
@@ -2377,11 +2374,11 @@ void WidgetInfo::EditListEdit()
 		QString path;
 		QString path;
 
 
 		if (pathDir.exists())
 		if (pathDir.exists())
-			path = SelectDirectory(App()->GetMainWindow(),
-					       QTStr("Browse"), item->text());
+			path = SelectDirectory(list, tr("Browse"),
+					       item->text());
 		else
 		else
-			path = OpenFile(App()->GetMainWindow(), QTStr("Browse"),
-					item->text(), QT_UTF8(filter));
+			path = OpenFile(list, tr("Browse"), item->text(),
+					QT_UTF8(filter));
 
 
 		if (path.isEmpty())
 		if (path.isEmpty())
 			return;
 			return;
@@ -2394,7 +2391,7 @@ void WidgetInfo::EditListEdit()
 	EditableItemDialog dialog(widget->window(), item->text(),
 	EditableItemDialog dialog(widget->window(), item->text(),
 				  type != OBS_EDITABLE_LIST_TYPE_STRINGS,
 				  type != OBS_EDITABLE_LIST_TYPE_STRINGS,
 				  filter);
 				  filter);
-	auto title = QTStr("Basic.PropertiesWindow.EditEditableListEntry")
+	auto title = tr("Basic.PropertiesWindow.EditEditableListEntry")
 			     .arg(QT_UTF8(desc));
 			     .arg(QT_UTF8(desc));
 	dialog.setWindowTitle(title);
 	dialog.setWindowTitle(title);
 	if (dialog.exec() == QDialog::Rejected)
 	if (dialog.exec() == QDialog::Rejected)

+ 0 - 0
UI/properties-view.hpp → shared/properties-view/properties-view.hpp


+ 0 - 0
UI/properties-view.moc.hpp → shared/properties-view/properties-view.moc.hpp


+ 0 - 0
UI/spinbox-ignorewheel.cpp → shared/properties-view/spinbox-ignorewheel.cpp


+ 0 - 0
UI/spinbox-ignorewheel.hpp → shared/properties-view/spinbox-ignorewheel.hpp