Mercurial > projects > dynamin
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: