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しか使ったことないので、良く分からなかったり……