rebol [ title: "Rebol/pro::GtkServer" Description: "Small exmaple on how to call gtk-server library with rebol/pro (commercial)" Author: "Norman" ] ;; for linux replace .dll with .so gtk-lib: load/library %gtk-server.dll gtks: make routine! [ "gtk instring, expected data must be string! type" instring [string!] "gtk function" return: [string!] "returned string from gtk-server" ] gtk-lib "gtk" ;; optionally turn on logging ;;gtks {gtk_server_cfg log} gtks {gtk_init null null} win: gtks {gtk_window_new 0} gtks reform [ {gtk_window_set_title } :win { Rebol::Gtk-Server} ] gtks reform [ {gtk_window_set_default_size } :win { 200 100} ] gtks reform [ {gtk_window_set_position } :win { 1} ] tbl: gtks {gtk_table_new 30 30 1} gtks reform [ {gtk_container_add } :win { } tbl] bt1: gtks {gtk_button_new_with_label Exit} gtks reform [ {gtk_table_attach_defaults } :tbl { } :bt1 { 17 28 20 25} ] bt2: gtks {gtk_button_new_with_label text} gtks reform [ {gtk_table_attach_defaults } :tbl { } :bt2 { 2 13 20 25} ] ent: gtks {gtk_entry_new} gtks reform [ {gtk_table_attach_defaults } :tbl { } :ent { 2 28 5 15} ] gtks reform [{gtk_widget_show_all } :win] event: "" while [ all [ (not-equal? to-string event bt1) (not-equal? to-string event win) ]] [ event: gtks {gtk_server_callback WAIT} if any [ equal? to-string event bt2 equal? to-string event ent ] [ alert tmp: gtks reform [ {gtk_entry_get_text } :ent ] ] ] quit