diff --git a/basis/ui/backend/gtk/gtk.factor b/basis/ui/backend/gtk/gtk.factor index 7f75dfd4e8..887d0318ad 100644 --- a/basis/ui/backend/gtk/gtk.factor +++ b/basis/ui/backend/gtk/gtk.factor @@ -562,9 +562,6 @@ os linux? [ gtk-ui-backend ui-backend set-global ] when -{ "ui.backend.gtk" "io.backend.unix" } -"ui.backend.gtk.io.unix" require-when - { "ui.backend.gtk" "ui.gadgets.editors" } "ui.backend.gtk.input-methods.editors" require-when diff --git a/basis/ui/backend/gtk/io/io.factor b/basis/ui/backend/gtk/io/io.factor index 04a69690da..577a05f1f4 100644 --- a/basis/ui/backend/gtk/io/io.factor +++ b/basis/ui/backend/gtk/io/io.factor @@ -1,8 +1,51 @@ ! Copyright (C) 2011 Anton Gorenko. ! See http://factorcode.org/license.txt for BSD license. -USING: io.backend kernel ; +USING: accessors alien.c-types classes.struct continuations glib.ffi +io.backend.unix.multiplexers io.thread kernel libc literals locals +namespaces threads ; IN: ui.backend.gtk.io -HOOK: with-event-loop io-backend ( quot -- ) +: prepare ( source timeout -- ? ) + 2drop f ; -M: object with-event-loop call( -- ) ; +: check ( source -- ? ) + poll_fds>> 0 g_slist_nth_data GPollFD memory>struct + revents>> 0 = not ; + +: dispatch ( source callback user-data -- ? ) + 3drop + 0 mx get-global wait-for-events + yield t ; + +: ( -- funcs ) + GSourceFuncs malloc-struct + [ prepare ] GSourceFuncsPrepareFunc >>prepare + [ check ] GSourceFuncsCheckFunc >>check + [ dispatch ] GSourceFuncsDispatchFunc >>dispatch ; + +CONSTANT: poll-fd-events + flags{ + G_IO_IN + G_IO_OUT + G_IO_PRI + G_IO_ERR + G_IO_HUP + G_IO_NVAL + } + +: ( -- poll-fd ) + GPollFD malloc-struct &free + mx get-global fd>> >>fd + poll-fd-events >>events ; + +:: with-event-loop ( quot -- ) + stop-io-thread + &free + GSource heap-size g_source_new &g_source_unref :> source + source g_source_add_poll + source f g_source_attach drop + [ quot call( -- ) ] + [ + source g_source_destroy + start-io-thread + ] [ ] cleanup ; diff --git a/basis/ui/backend/gtk/io/unix/platforms.txt b/basis/ui/backend/gtk/io/platforms.txt similarity index 100% rename from basis/ui/backend/gtk/io/unix/platforms.txt rename to basis/ui/backend/gtk/io/platforms.txt diff --git a/basis/ui/backend/gtk/io/unix/authors.txt b/basis/ui/backend/gtk/io/unix/authors.txt deleted file mode 100644 index 4af9fbeb0a..0000000000 --- a/basis/ui/backend/gtk/io/unix/authors.txt +++ /dev/null @@ -1 +0,0 @@ -Anton Gorenko diff --git a/basis/ui/backend/gtk/io/unix/unix.factor b/basis/ui/backend/gtk/io/unix/unix.factor deleted file mode 100644 index 48790c6c74..0000000000 --- a/basis/ui/backend/gtk/io/unix/unix.factor +++ /dev/null @@ -1,51 +0,0 @@ -! Copyright (C) 2011 Anton Gorenko. -! See http://factorcode.org/license.txt for BSD license. -USING: accessors alien.c-types classes.struct continuations -glib.ffi io.backend.unix.multiplexers io.thread kernel libc -literals locals namespaces system threads ui.backend.gtk.io ; -IN: ui.backend.gtk.io.unix - -: prepare ( source timeout -- ? ) - 2drop f ; - -: check ( source -- ? ) - poll_fds>> 0 g_slist_nth_data GPollFD memory>struct - revents>> 0 = not ; - -: dispatch ( source callback user-data -- ? ) - 3drop - 0 mx get-global wait-for-events - yield t ; - -: ( -- funcs ) - GSourceFuncs malloc-struct - [ prepare ] GSourceFuncsPrepareFunc >>prepare - [ check ] GSourceFuncsCheckFunc >>check - [ dispatch ] GSourceFuncsDispatchFunc >>dispatch ; - -CONSTANT: poll-fd-events - flags{ - G_IO_IN - G_IO_OUT - G_IO_PRI - G_IO_ERR - G_IO_HUP - G_IO_NVAL - } - -: ( -- poll-fd ) - GPollFD malloc-struct &free - mx get-global fd>> >>fd - poll-fd-events >>events ; - -M:: unix with-event-loop ( quot -- ) - stop-io-thread - &free - GSource heap-size g_source_new &g_source_unref :> source - source g_source_add_poll - source f g_source_attach drop - [ quot call( -- ) ] - [ - source g_source_destroy - start-io-thread - ] [ ] cleanup ;