! Copyright (C) 2009 Anton Gorenko.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors alien alien.c-types alien.destructors
- alien.libraries alien.strings alien.syntax combinators gir
- io.encodings.utf8 kernel system vocabs.parser words ;
-alien.libraries alien.syntax combinators compiler.units
-gobject-introspection kernel system vocabs.parser words ;
++alien.libraries alien.strings alien.syntax combinators
++gobject-introspection io.encodings.utf8 kernel system
++vocabs.parser words ;
IN: glib.ffi
<<
TYPEDEF: gpointer pointer
TYPEDEF: gpointer any
-IMPLEMENT-STRUCTS: GPollFD GSource GSourceFuncs ;
+IMPLEMENT-STRUCTS: GError GPollFD GSource GSourceFuncs ;
GIR: vocab:glib/GLib-2.0.gir
CALLBACK: gboolean GSourceFuncsCheckFunc ( GSource* source ) ;
CALLBACK: gboolean GSourceFuncsDispatchFunc ( GSource* source, GSourceFunc callback, gpointer user_data ) ;
+ERROR: g-error domain code message ;
+
+: GError>g-error ( GError -- g-error )
+ [ domain>> g_quark_to_string utf8 alien>string ]
+ [ code>> ]
+ [ message>> utf8 alien>string ] tri
+ \ g-error boa ;
+
+: handle-GError ( GError/f -- )
+ [
+ [ GError>g-error ]
+ [ g_error_free ] bi
+ throw
+ ] when* ;
! Copyright (C) 2010 Anton Gorenko, Philipp Brüschweiler.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors alien.accessors alien.c-types alien.data
-alien.strings arrays assocs classes.struct command-line
-destructors gdk.ffi gdk.gl.ffi glib.ffi gobject.ffi gtk.ffi
-gtk.gl.ffi io.backend io.backend.unix.multiplexers
-io.encodings.utf8 io.thread kernel libc literals locals math
-math.bitwise math.order math.vectors namespaces sequences
-strings system threads ui ui.backend ui.clipboards ui.commands
-ui.event-loop ui.gadgets ui.gadgets.editors ui.gadgets.menus
-ui.gadgets.private ui.gadgets.worlds ui.gestures
-ui.pixel-formats ui.pixel-formats.private ui.private ;
+alien.strings alien.syntax arrays assocs classes.struct
+command-line destructors gdk.ffi gdk.gl.ffi glib.ffi
+gobject.ffi gtk.ffi gtk.gl.ffi io.backend
+io.backend.unix.multiplexers io.encodings.utf8 io.thread kernel
+libc literals locals math math.bitwise math.order math.vectors
+namespaces sequences strings system threads ui ui.backend
+ui.clipboards ui.commands ui.event-loop ui.gadgets
- ui.gadgets.menus ui.gadgets.private ui.gadgets.worlds
- ui.gestures ui.pixel-formats ui.pixel-formats.private
- ui.private ;
- RENAME: windows ui.private => ui:windows
- EXCLUDE: ui.gadgets.editors => change-caret ;
- RENAME: change-caret ui.gadgets.editors => editors:change-caret
++ui.gadgets.editors ui.gadgets.menus ui.gadgets.private
++ui.gadgets.worlds ui.gestures ui.pixel-formats
++ui.pixel-formats.private ui.private ;
IN: ui.backend.gtk
SINGLETON: gtk-ui-backend
mx get fd>> >>fd
poll-fd-events >>events ;
- : init-io-event-source ( -- )
+ HOOK: init-io-event-source io-backend ( -- )
+
+ M: c-io-backend init-io-event-source
+ ;
+
+ M: object init-io-event-source
GSourceFuncs malloc-struct &free
[ io-source-prepare ] GSourceFuncsPrepareFunc >>prepare
[ io-source-check ] GSourceFuncsCheckFunc >>check
f g_source_attach drop
nano-count next-timeout set-global ;
+: load-icon ( -- )
+ ! This file is not in a resource.txt because it can be
+ ! overwritten when deploying. See 'Vocabulary icons'
+ ! in the docs.
+ "vocab:ui/backend/gtk/icon.png"
+ normalize-path utf8 string>alien
+ { { pointer: GError initial: f } }
+ [ gtk_window_set_default_icon_from_file ] with-out-parameters
+ handle-GError drop ;
+
M: gtk-ui-backend (with-ui)
[
f f gtk_init
f f gtk_gl_init
+ load-icon
init-clipboard
start-ui
stop-io-thread