/ruby-gnome2-all-0.90.4/gtk2/sample/misc/t-gtksocket.rb
Ruby | 65 lines | 44 code | 7 blank | 14 comment | 2 complexity | b26cfe52ab0d293f6d830d9189eb0b98 MD5 | raw file
Possible License(s): LGPL-2.1, GPL-2.0
- #!/usr/bin/env ruby
- =begin
- Sample script using Gtk::Socket and Gtk::Plug.
- $ ruby t-gtksocket.rb
- Written by Alex Boussinet <mailto:dbug@wanadoo.fr> for testing purpose only.
- Copyright (c) 2003-2006 Ruby-GNOME2 Project Team
- This program is licenced under the same licence as Ruby-GNOME2.
- $Id: t-gtksocket.rb,v 1.5 2006/06/17 13:18:12 mutoh Exp $
- =end
- require 'gtk2'
- class MyGtkSocket < Gtk::Window
- def initialize
- super("Gtk::Socket Test")
- set_window_position(Gtk::Window::POS_CENTER)
- signal_connect("delete_event"){Gtk::main_quit}
- @buttons = []
- 6.times {|n|
- @buttons << Gtk::Button.new("Plug #{n}")
- @buttons.last.signal_connect("clicked"){ plug(n) }
- }
-
- @table = Gtk::Table.new(1, 2)
- @table.set_size_request(320, 200)
- add(@table)
- @vbox = Gtk::VBox.new(true, 5)
- @buttons.each{|b| @vbox.add(b) }
- @vbox.set_size_request(150, 190)
- @table.attach(@vbox, 0, 1, 0, 1, Gtk::FILL, Gtk::FILL, 5, 5)
- @socket = Gtk::Socket.new
- @table.attach(@socket, 1, 2, 0, 1, Gtk::FILL, Gtk::FILL, 5, 5)
- @socket.set_size_request(150, 150)
- show_all
- @xid = @socket.id
- @pid = 0
- end
- def plug(arg)
- if @pid != 0
- Process.kill("SIGKILL", @pid)
- Process.waitpid(@pid)
- begin
- @table.remove(@socket) unless @socket.destroyed?
- rescue ArgumentError
- # socket has been destroyed because child process finished unexpectedly
- end
- @socket = Gtk::Socket.new
- @table.attach(@socket, 1, 2, 0, 1, Gtk::FILL, Gtk::FILL, 5, 5)
- @socket.set_size_request(150, 190)
- @socket.show
- @xid = @socket.id
- end
- @pid = fork { exec "ruby t-gtkplug.rb -x #{@xid} Plug#{arg}" }
- end
- end
- MyGtkSocket.new
- Gtk.main