Gtk2: making a popup window on mouse click
- From: "Jamie Lahowetz" <deadpickle gmail com>
- To: gtk-perl-list gnome org
- Subject: Gtk2: making a popup window on mouse click
- Date: Sun, 29 Jul 2007 00:30:26 -0500
What I want to do is to have a the program run in a system tray. when the user left clicks the system tray icon the window ('popup') is set to show. Also, when the user left clicks on the system tray the window is hidden again. How can I get this to work? I have a small snippet of code that I a have started with: (Note: this is only simplified version of code used to help out the question, I'm not sure if this code works)
#!/usr/bin/perl -w
use strict;
use warnings;
use threads;
use threads::shared;
use Glib qw/TRUE FALSE/;
use Gtk2 '-init';
use Gtk2::TrayIcon;
use Net::SFTP::Foreign;
#user variables
my $icon_main = Gtk2::Gdk::Pixbuf->new_from_file("/home/deadpickle/Desktop/Gtk2/test.png");
my $icon_nav = Gtk2::Gdk::Pixbuf->new_from_file("/home/deadpickle/Desktop/Gtk2/uvnav.png");
my $icon_vci = Gtk2::Gdk::Pixbuf->new_from_file("/home/deadpickle/Desktop/Gtk2/vci.png");
my $time = 1200000;
#global variables
my $user : shared = 'uas';
my $server : shared = '
updraft.unl.edu';
my $local_waypoint : shared = '/local';
my $remote_waypoint : shared = '/remote';
my $waytemp : shared = 'waytemp';
my $wayfinal : shared = 'wayfinal';
my $file = 'default.cfg';
my $local_uaspos : shared = '/local';
my $remote_uaspos : shared = '/remote';
my $local_uas : shared = '/local';
my $remote_uas : shared = '/remote';
my $die : shared = 0;
my $sftp_connect : shared = 0;
my $current_controls = 0;
#icon goes in box, box goes in tray
my $icon = Gtk2::Image->new_from_pixbuf($icon_main);
my $eventbox = Gtk2::EventBox->new;
$eventbox->add($icon);
my $tray = Gtk2::TrayIcon->new('Test');
$tray->add($eventbox);
#threads
my $thread_1 = threads->new( \&sftp);
#tooltip
my $tooltip = Gtk2::Tooltips->new;
$tooltip->set_tip($tray, "GRRUVI v1.0");
#events and timeouts
$eventbox->signal_connect('button_release_event', \&click);
#show tray
$tray->show_all;
#end event loop
Gtk2->main;
#handles tray clicks
sub click {
#left mouse button
if ($_[1]->button == 1) {
#Window show/hide controls
}
#right mouse button
elsif ($_[1]->button == 3) {
&menu;
}
return 1;
}
#right click menu
sub menu {
my $menu = Gtk2::Menu->new();
#VCI
my $menu_VCI = Gtk2::ImageMenuItem->new_with_label("VCI");
$menu_VCI->set_image(Gtk2::Image->new_from_stock('gtk-refresh', 'menu'));
$menu->add($menu_VCI);
#configure
my $menu_pref = Gtk2::ImageMenuItem->new_with_label("Configure");
$menu_pref->set_image(Gtk2::Image->new_from_stock('gtk-preferences', 'menu'));
$menu->add($menu_pref);
#separator
my $menu_sep = Gtk2::SeparatorMenuItem->new();
$menu->add($menu_sep);
#Quit
my $menu_quit = Gtk2::ImageMenuItem->new_with_label("Quit");
$menu_quit->signal_connect(activate => \&exit_threads);
$menu_quit->set_image(Gtk2::Image->new_from_stock('gtk-quit', 'menu'));
$menu->add($menu_quit);
$menu->show_all;
#popup menu, the three is for right mouse button
$menu->popup(undef,undef,undef,3,undef,undef);
return 1;
}
#Program interfaces
sub interface {
my $interface = Gtk2::Window->new('popup');
$interface->set_position('center');
#Eventbox for capturing the mouse click
my $eventbox_interface = Gtk2::EventBox->new;
#table to contain the widgets
my $table_interface = Gtk2::Table->new( 8, 2, FALSE);
#menu items for VCI
if ( $current_controls == 1) {
#Labels
my $label_vci_downloading = Gtk2::Label->new( 'Downloading');
my $label_vci_uploading = Gtk2::Label->new( 'Uploading');
#Bold text for the Main Labels
my $fontdescription = Gtk2::Pango::FontDescription->new;
$fontdescription->set_weight( 'bold');
$label_vci_uploading->modify_font( $fontdescription);
$label_vci_downloading->modify_font( $fontdescription);
#labels for the progressbars
my $label_vci_uasposition = Gtk2::Label->new( 'uasposition');
my $label_vci_waytemp1 = Gtk2::Label->new( 'waytemp');
my $label_vci_waytemp2 = Gtk2::Label->new( 'waytemp');
my $label_vci_wayfinal = Gtk2::Label->new( 'wayfinal');
#Horizontal Separator
my $hseparator_vci = Gtk2::HSeparator->new;
#Connect button-> will switch to stop after press
my $menu_vci_connect = Gtk2::Button->new("Connect");
#Attach the widgets to the table
$table_interface->attach_defaults( $label_vci_uploading, 0, 2, 0, 1);
$table_interface->attach_defaults( $label_vci_uasposition, 0, 1, 1, 2);
$table_interface->attach_defaults( $label_vci_waytemp1, 0, 1, 2, 3);
$table_interface->attach_defaults( $label_vci_wayfinal, 0, 1, 3, 4);
$table_interface->attach_defaults( $label_vci_downloading, 0, 2, 4, 5);
$table_interface->attach_defaults( $label_vci_waytemp2, 0, 1, 5, 6);
$table_interface->attach_defaults( $hseparator_vci, 0, 2, 6, 7);
$table_interface->attach_defaults( $menu_vci_connect, 1, 2, 7, 8);
}
#add the widgets to the window: widgets->table->eventbox->window
$eventbox_interface->add( $table_interface);
$interface->add( $eventbox_interface);
$interface->show_all;
$interface->signal_connect( 'button-release-event' => sub { $interface->hide_all});
}
--
Jamie Lahowetz
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]