From 5c47ddf9e7fa05bc993818c166e8162c20a970f9 Mon Sep 17 00:00:00 2001 From: matz Date: Mon, 19 Jan 1998 05:08:25 +0000 Subject: Mon Jan 19 14:06:13 JST 1998 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@23 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/Setup | 1 + ext/gtk/gtk.c | 22 +++++++------ ext/gtk/test5.rb | 7 +++-- ext/gtk/testd.rb | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 113 insertions(+), 13 deletions(-) create mode 100644 ext/gtk/testd.rb (limited to 'ext') diff --git a/ext/Setup b/ext/Setup index c92ac53e00..867d88cfda 100644 --- a/ext/Setup +++ b/ext/Setup @@ -10,3 +10,4 @@ #socket #tkutil #tcltklib +gtk diff --git a/ext/gtk/gtk.c b/ext/gtk/gtk.c index 9114312195..ec4105acbb 100644 --- a/ext/gtk/gtk.c +++ b/ext/gtk/gtk.c @@ -196,19 +196,20 @@ static void gobj_free(obj) GtkObject *obj; { - VALUE self = get_value_from_gobject(obj); - - if (GTK_OBJECT_NEED_DESTROY(obj)) { - gtk_object_destroy(obj); - } - rb_ivar_set(self, id_relatives, Qnil); + /* just a type mark */ } static void -delete_gobject(obj) - GtkObject *obj; +delete_gobject(gtkobj, obj) + GtkObject *gtkobj; + VALUE obj; { - ary_delete(gtk_object_list, get_value_from_gobject(obj)); + struct RData *data; + + data = RDATA(rb_ivar_get(obj, id_gtkdata)); + data->dfree = 0; + data->data = 0; + ary_delete(gtk_object_list, obj); } static VALUE @@ -223,7 +224,8 @@ make_gobject(klass, gtkobj) gtk_object_set_user_data(gtkobj, (gpointer)obj); rb_ivar_set(obj, id_gtkdata, data); - gtk_signal_connect(gtkobj, "destroy", (GtkSignalFunc)delete_gobject, 0); + gtk_signal_connect(gtkobj, "destroy", + (GtkSignalFunc)delete_gobject, (gpointer)obj); ary_push(gtk_object_list, obj); return obj; } diff --git a/ext/gtk/test5.rb b/ext/gtk/test5.rb index 714232079b..f1d5d734cf 100644 --- a/ext/gtk/test5.rb +++ b/ext/gtk/test5.rb @@ -21,10 +21,11 @@ button = [] end 0.upto(8) do |i| button[i].signal_connect("clicked") do |w| - if button[i+1].visible? - button[i+1].hide + j = (i+1)%9 + if button[j].visible? + button[j].hide else - button[i+1].show + button[j].show end end button[i].show diff --git a/ext/gtk/testd.rb b/ext/gtk/testd.rb new file mode 100644 index 0000000000..52ce5db7e0 --- /dev/null +++ b/ext/gtk/testd.rb @@ -0,0 +1,96 @@ +require 'gtk' + +def create_menu(depth) + return nil if depth < 1 + + menu = Gtk::Menu::new() + group = nil + submenu = nil + + for i in 0..4 + buf = sprintf("item %2d - %d", depth, i+1) +# menuitem = Gtk::MenuItem::new(buf) + menuitem = Gtk::RadioMenuItem.new(group, buf) + group = menuitem.group + if depth % 2 + menuitem.set_show_toggle TRUE + end + menu.append menuitem + menuitem.show + if depth > 0 + unless submenu + submenu = create_menu(depth - 1) + end + menuitem.set_submenu submenu + end + end + return menu +end + +window = Gtk::Window::new(Gtk::WINDOW_TOPLEVEL) +window.signal_connect("destroy") do + exit +end +window.signal_connect("delete_event") do + exit +end +window.set_title("menus") +window.border_width(0) + +box1 = Gtk::VBox::new(FALSE, 0) +window.add box1 +box1.show + +menubar = Gtk::MenuBar::new() +box1.pack_start menubar, FALSE, TRUE, 0 +menubar.show + +menu = create_menu(2) +menuitem = Gtk::MenuItem::new("test\nline2") +menuitem.set_submenu menu +menubar.append menuitem +menuitem.show + +menuitem = Gtk::MenuItem::new("foo") +menuitem.set_submenu menu +menubar.append menuitem +menuitem.show + +menuitem = Gtk::MenuItem::new("bar") +menuitem.set_submenu menu +menubar.append menuitem +menuitem.show + +box2 = Gtk::VBox::new(FALSE, 10) +box2.border_width 10 +box1.pack_start box2, TRUE, TRUE, 0 +box2.show + +optionmenu = Gtk::OptionMenu::new() +optionmenu.set_menu create_menu(1) +optionmenu.set_history 4 +box2.pack_start optionmenu, TRUE, TRUE, 0 +optionmenu.show + +separator = Gtk::HSeparator::new() +box1.pack_start(separator, FALSE, TRUE, 0) +separator.show + +box2 = Gtk::HBox::new(FALSE, 10) +box2.border_width(10) +box1.pack_start(box2, FALSE, TRUE, 0) +box2.show + +button = Gtk::Button::new("close") +button.signal_connect("clicked") do + window.destroy + exit +end +box2.pack_start(button, TRUE, TRUE, 0) +button.set_flags(Gtk::CAN_DEFAULT); +button.grab_default +button.show + +window.show + +Gtk::main() -- cgit v1.2.3