diff dynamin/gui/windows_window.d @ 12:7a7e5f9bd1ae

Implement invoke() and invokeNow() on Windows.
author Jordan Miner <jminer7@gmail.com>
date Sat, 18 Jul 2009 01:37:06 -0500
parents aa4efef0f0b1
children ef81af74a306
line wrap: on
line diff
--- a/dynamin/gui/windows_window.d	Thu Jul 16 18:18:22 2009 -0500
+++ b/dynamin/gui/windows_window.d	Sat Jul 18 01:37:06 2009 -0500
@@ -34,6 +34,7 @@
 public import dynamin.gui.key;
 public import dynamin.all_painting;
 public import tango.io.Stdout;
+public import tango.core.sync.Semaphore;
 
 ///
 enum WindowsVersion {
@@ -117,8 +118,16 @@
 			DispatchMessage(&msg);
 		}
 	}
+	void backend_invoke(void delegate() dg) {
+		PostMessage(msgWnd, WM_USER + 7,
+			cast(word)dg.ptr, cast(word)dg.funcptr);
+	}
+	void backend_invokeNow(void delegate() dg) {
+		SendMessage(msgWnd, WM_USER + 7,
+			cast(word)dg.ptr, cast(word)dg.funcptr);
+	}
+
 }
-
 /*
  * The reason backends use the backend_ prefix and:
  * mixin Backend();
@@ -966,6 +975,12 @@
 		if(wParam == PBT_APMRESUMESUSPEND || wParam == PBT_APMRESUMECRITICAL)
 			Environment.backend_increaseTimerRes();
 		return 0;
+	case WM_USER + 7:
+		void delegate() dg;
+		dg.ptr = cast(void*)wParam;
+		dg.funcptr = cast(void function())lParam;
+		dg();
+		return 0;
 	case WM_TIMER:
 	case WM_CHANGECBCHAIN:
 	case WM_DRAWCLIPBOARD: