1. Full GTK+ example
- Posted by David Cuny <dcuny at LANSET.COM>
Aug 14, 1999
-
Last edited Aug 15, 1999
Hurrah! Callbacks in GTK turn out to be trivial, after all.
This example adds functionality to the button - pressing it closes the
window.
After this, I'll stop posting examples to the mailing list. I just thought
people might be interested in seeing what the code looks like.
My only complaint is my usual gripe about the scoping of routine_id.
Robert - *please* consider changing it.
-- David Cuny
-- gtktest.exu
-- without this, you get warnings before the window closes
without warning
-- reading dlls
include dll.e
include machine.e
-- try to link to a dll
atom gtkhtml, gtk
gtkhtml = open_dll("libgtkxmhtml.so")
gtk = open_dll("libgtk.so")
-- declare gtk functions
constant
gtk_init = define_c_proc( gtk, "gtk_init", {C_POINTER, C_POINTER} ),
gtk_window_new = define_c_func( gtk, "gtk_window_new", {C_POINTER},
C_POINTER ),
gtk_window_set_title = define_c_proc( gtk, "gtk_window_set_title",
{C_POINTER, C_POINTER} ),
gtk_container_set_border_width = define_c_proc( gtk,
"gtk_container_set_border_width", {C_POINTER, C_LONG} ),
gtk_button_new_with_label = define_c_func( gtk, "gtk_button_new_with_label",
{C_POINTER}, C_POINTER ),
gtk_widget_show = define_c_proc( gtk, "gtk_widget_show", {C_POINTER} ),
gtk_container_add = define_c_proc( gtk, "gtk_container_add", {C_POINTER,
C_POINTER} ),
gtk_main_quit = define_c_proc( gtk, "gtk_main_quit", {} ),
gtk_signal_connect = define_c_proc( gtk, "gtk_signal_connect",
{C_POINTER,C_POINTER,C_POINTER,C_POINTER} ),
gtk_main = define_c_proc( gtk, "gtk_main", {} )
constant
GTK_WINDOW_TOPLEVEL = 1 -- this might be 2
-- define a callback
function closeApp( atom widget, atom gdata )
-- close the application
c_proc( gtk_main_quit, {} )
-- ok to close application
return 0
end function
-- main loop
atom window, button
-- initialization
c_proc( gtk_init, { 0, 0 } )
-- create the toplevel window
window = c_func( gtk_window_new, {GTK_WINDOW_TOPLEVEL} )
-- title
c_proc( gtk_window_set_title, {window, allocate_string("Push Button")})
-- border
c_proc( gtk_container_set_border_width, {window, 50} )
-- create a button
button = c_func( gtk_button_new_with_label, {allocate_string("Button")} )
-- show the button (but not visible yet)
c_proc( gtk_widget_show, {button} )
-- add the button to the window
c_proc( gtk_container_add, {window, button} )
-- add button to window
c_proc( gtk_widget_show, {window} )
-- run closeApp when button is clicked
c_proc( gtk_signal_connect, {
button,
allocate_string("clicked"),
call_back( routine_id("closeApp") ),
0 } )
-- main loop
c_proc( gtk_main, {} )
abort(0)