#!/usr/bin/perl use warnings; use strict; use Glib ':constants'; use Gtk2 'init'; my $w = Gtk2::Window->new('toplevel'); $w->signal_connect(destroy => sub { Gtk2->main_quit() }); $w->set_border_width(12); $w->show(); my $vbox = Gtk2::VBox->new( FALSE, 6 ); $w->add($vbox); my $b = Gtk2::Button->new_from_stock('gtk-ok'); $vbox->pack_start( $b, FALSE, FALSE, 0 ); $b->signal_connect(clicked => sub { $w->destroy() }); my $b1 = Gtk2::Button->new_from_stock('gtk-cancel'); $vbox->pack_start( $b1, FALSE, FALSE, 0 ); $b1->signal_connect(clicked => sub { }); $b->signal_connect(button_release_event => sub { my ($button, $event) = @_; return FALSE if $event->button != 3; my $item; my $menu = Gtk2::Menu->new(); $item = Gtk2::MenuItem->new_with_mnemonic('Item _1'); $menu->append($item); $item->show(); $item = Gtk2::MenuItem->new_with_mnemonic('Item _2'); $menu->append($item); $item->show(); $item = Gtk2::SeparatorMenuItem->new(); $menu->append($item); $item->show(); $item = Gtk2::MenuItem->new_with_mnemonic('Item _3'); $menu->append($item); $item->show(); $menu->popup(undef, undef, undef, undef, $event->button, $event->time); return TRUE; }); $b1->signal_connect(button_release_event => sub { my ($button, $event) = @_; return FALSE if $event->button != 3; my $item; my $menu = Gtk2::Menu->new(); $item = Gtk2::MenuItem->new_with_mnemonic('Z_1'); $menu->append($item); $item->show(); $item = Gtk2::MenuItem->new_with_mnemonic('Z_2'); $menu->append($item); $item->show(); $item = Gtk2::SeparatorMenuItem->new(); $menu->append($item); $item->show(); $item = Gtk2::MenuItem->new_with_mnemonic('Z_3'); $menu->append($item); $item->show(); $menu->popup(undef, undef, undef, undef, $event->button, $event->time); return TRUE; }); $w->show_all; Gtk2->main(); 0;