diff foosdk/sdk/foobar2000/shared/modal_dialog.cpp @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/foosdk/sdk/foobar2000/shared/modal_dialog.cpp	Mon Jan 05 02:15:46 2026 -0500
@@ -0,0 +1,66 @@
+#include "shared.h"
+
+static DWORD g_main_thread = GetCurrentThreadId();
+
+static t_modal_dialog_entry g_status = {0,false};
+
+static bool TestMainThread()
+{
+	if (GetCurrentThreadId() == g_main_thread) return true;
+	OutputDebugString(TEXT("This function can be called only from main thread.\n"));
+	return false;
+}
+
+HWND SHARED_EXPORT FindOwningPopup(HWND p_wnd)
+{
+	return pfc::findOwningPopup(p_wnd);
+}
+
+void SHARED_EXPORT PokeWindow(HWND p_wnd)
+{
+	p_wnd = FindOwningPopup(p_wnd);
+	if (IsWindowEnabled(p_wnd))
+	{
+//		SetForegroundWindow(p_wnd);
+		SetActiveWindow(p_wnd);
+		FlashWindow(p_wnd,FALSE);
+	}
+	else
+	{
+		HWND child = GetWindow(p_wnd,GW_ENABLEDPOPUP);
+		if (child != 0)
+		{
+//			SetForegroundWindow(child);
+			SetActiveWindow(child);
+			FlashWindow(child,FALSE);
+		}
+	}
+}
+
+extern "C" {
+	void SHARED_EXPORT ModalDialog_Switch(t_modal_dialog_entry & p_entry)
+	{
+		if (TestMainThread())
+			pfc::swap_t(p_entry,g_status);
+	}
+
+	void SHARED_EXPORT ModalDialog_PokeExisting()
+	{
+		if (TestMainThread())
+		{
+			if (g_status.m_in_use && g_status.m_wnd_to_poke != 0)
+			{
+				PokeWindow(g_status.m_wnd_to_poke);
+				MessageBeep(0);
+			}
+		}
+	}
+
+	bool SHARED_EXPORT ModalDialog_CanCreateNew()
+	{
+		if (TestMainThread())
+			return !g_status.m_in_use;
+		else
+			return false;
+	}
+}
\ No newline at end of file