#!/usr/bin/perl use strict; use warnings; use Glib qw(TRUE FALSE); use Gtk2 '-init'; exit main(); sub main { my $window = Gtk2::Window->new(); $window->set_title('Resize'); $window->set_default_size(640, 480); $window->signal_connect(destroy => sub { Gtk2->main_quit(); }); # A text widget my $textview = Gtk2::TextView->new(); my $scroll = Gtk2::ScrolledWindow->new(); $scroll->set_policy('automatic', 'always'); $scroll->set_shadow_type('out'); $scroll->add($textview); my $buffer = $textview->get_buffer; load_text($buffer, $0); # Add buttons to one of the panels my $clipboard = Gtk2::Clipboard->get(Gtk2::Gdk->SELECTION_CLIPBOARD); my $buttons = Gtk2::VBox->new(TRUE); add_button($buttons, Clear => sub { $buffer->delete($buffer->get_start_iter, $buffer->get_end_iter); }); add_button($buttons, Cut => sub { $buffer->cut_clipboard($clipboard, TRUE); }); add_button($buttons, Copy => sub { $buffer->copy_clipboard($clipboard); }); add_button($buttons, Paste => sub { $buffer->paste_clipboard($clipboard, $buffer->get_end_iter, TRUE); }); # Pack the widgets together in a resizable vertical panel my $vpane = Gtk2::HPaned->new(); $vpane->add1($buttons); $vpane->add2($scroll); $window->add($vpane); $window->show_all(); Gtk2->main(); return 0; } sub add_button { my ($parent, $text, $callback) = @_; my $button = Gtk2::Button->new($text); $button->signal_connect(clicked => $callback) if $callback; $parent->add($button); } sub load_text { my ($buffer, $file) = @_; open my $handle, $file or die "Can't read $file because $!"; local $/ = undef; my $text = <$handle>; close $handle; $buffer->set_text($text); }