2002-08-24 [長年日記]
λ. 今日も起きたのはお昼頃。
λ. HAQ Board
が荒れてる。悲しい。
λ. コンパイル猿
というわけで、以下のようなパッチ(#91683)を当てることで、何とかそれっぽく動くようになりました。ウィンドウが表示されてから数秒で暴走するんですが、とりあえずスクリーンショット。
--- gtk+-2.0.6/gdk/win32/gdkevents-win32.c~ 2002-03-06 09:36:08.000000000 +0900
+++ gtk+-2.0.6/gdk/win32/gdkevents-win32.c 2002-08-24 00:38:16.000000000 +0900
@@ -126,7 +126,9 @@
NULL
};
+#ifdef G_OS_WIN32
GPollFD event_poll_fd;
+#endif
static GdkWindow *current_window = NULL;
static gint current_x, current_y;
@@ -317,10 +319,12 @@
source = g_source_new (&event_funcs, sizeof (GSource));
g_source_set_priority (source, GDK_PRIORITY_EVENTS);
+#ifdef G_OS_WIN32
event_poll_fd.fd = G_WIN32_MSG_HANDLE;
event_poll_fd.events = G_IO_IN;
g_source_add_poll (source, &event_poll_fd);
+#endif
g_source_set_can_recurse (source, TRUE);
g_source_attach (source, NULL);
@@ -3441,11 +3445,15 @@
GDK_THREADS_ENTER ();
+#ifdef G_OS_WIN32
if (event_poll_fd.revents & G_IO_IN)
+#endif
retval = (_gdk_event_queue_find_first () != NULL)
|| PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE);
+#ifdef G_OS_WIN32
else
retval = FALSE;
+#endif
GDK_THREADS_LEAVE ();
PeekMessage()で単純にポーリングするとすごい効率悪そう。Win32でメッセージって普通どうやって扱うんだっけなぁ…… Delphiしか使ったことないので、良く分からなかったり……
[ツッコミを入れる]
