Bladeren bron

UI: Fix always on top w/ projectors on Linux

Apparently, on Linux, you cannot update the window flags while it is
still open, so just close the projectors and reopen them again when the
setting changes.
Clayton Groeneveld 5 jaren geleden
bovenliggende
commit
227f80ac48
3 gewijzigde bestanden met toevoegingen van 14 en 0 verwijderingen
  1. 9 0
      UI/window-basic-main.cpp
  2. 1 0
      UI/window-basic-main.hpp
  3. 4 0
      UI/window-basic-settings.cpp

+ 9 - 0
UI/window-basic-main.cpp

@@ -8269,6 +8269,15 @@ void OBSBasic::UpdateProjectorAlwaysOnTop(bool top)
 		SetAlwaysOnTop(projectors[i], top);
 }
 
+void OBSBasic::ResetProjectors()
+{
+	obs_data_array_t *savedProjectorList = SaveProjectors();
+	ClearProjectors();
+	LoadSavedProjectors(savedProjectorList);
+	OpenSavedProjectors();
+	obs_data_array_release(savedProjectorList);
+}
+
 void OBSBasic::on_sourcePropertiesButton_clicked()
 {
 	on_actionSourceProperties_triggered();

+ 1 - 0
UI/window-basic-main.hpp

@@ -531,6 +531,7 @@ private:
 
 	void UpdateProjectorHideCursor();
 	void UpdateProjectorAlwaysOnTop(bool top);
+	void ResetProjectors();
 
 	QPointer<QObject> screenshotData;
 

+ 4 - 0
UI/window-basic-settings.cpp

@@ -2958,8 +2958,12 @@ void OBSBasicSettings::SaveGeneralSettings()
 		config_set_bool(GetGlobalConfig(), "BasicWindow",
 				"ProjectorAlwaysOnTop",
 				ui->projectorAlwaysOnTop->isChecked());
+#if defined(_WIN32) || defined(__APPLE__)
 		main->UpdateProjectorAlwaysOnTop(
 			ui->projectorAlwaysOnTop->isChecked());
+#else
+		main->ResetProjectors();
+#endif
 	}
 
 	if (WidgetChanged(ui->recordWhenStreaming))