Add new Window Message helper
authorAndre Heinecke <aheinecke@intevation.de>
Tue, 6 Mar 2018 08:50:52 +0000 (09:50 +0100)
committerAndre Heinecke <aheinecke@intevation.de>
Tue, 6 Mar 2018 08:50:52 +0000 (09:50 +0100)
* src/windowmessages.cpp (do_async, do_in_ui_thread_async):
Add new fire and forget window messaging helper.
* src/windowmessages.h: Update accordingly.

src/windowmessages.cpp
src/windowmessages.h

index 9bb0f5c..e9934a5 100644 (file)
@@ -194,6 +194,25 @@ do_in_ui_thread (gpgol_wmsg_type type, void *data)
   return ctx.err;
 }
 
+static DWORD WINAPI
+do_async (LPVOID arg)
+{
+  wm_ctx_t *ctx = (wm_ctx_t*) arg;
+  send_msg_to_ui_thread (ctx);
+  xfree (ctx);
+  return 0;
+}
+
+void
+do_in_ui_thread_async (gpgol_wmsg_type type, void *data)
+{
+  wm_ctx_t *ctx = (wm_ctx_t *) calloc (1, sizeof (wm_ctx_t));
+  ctx->wmsg_type = type;
+  ctx->data = data;
+
+  CloseHandle (CreateThread (NULL, 0, do_async, (LPVOID) ctx, 0, NULL));
+}
+
 static std::vector <LPDISPATCH> explorers;
 
 void
index 69762af..8fdd55e 100644 (file)
@@ -73,6 +73,11 @@ send_msg_to_ui_thread (wm_ctx_t *ctx);
 int
 do_in_ui_thread (gpgol_wmsg_type type, void *data);
 
+/** Send a message to the UI thread but returns
+    immediately without waiting for the execution. */
+void
+do_in_ui_thread_async (gpgol_wmsg_type type, void *data);
+
 /** Create our filter before outlook Window Messages. */
 HHOOK
 create_message_hook();