Ok, here is a simplified version of the program. All it has is a right click menu and a left click interface. The procedure is still the same you have to select VCI from the menu first. The window shows but I cant get it to hide when the user left clicks the system tray. I tried to print the $visible variable and it does not seem to change from 0.
#!/usr/bin/perl -w
use strict;
use warnings;
use Glib qw/TRUE FALSE/;
use Gtk2 '-init';
use Gtk2::TrayIcon;
#global variables
my $current_controls = 0;
my $visible = 0;
#icon goes in box, box goes in tray
my $icon = Gtk2::Image->new_from_stock( 'gtk-open', 'menu');
my $eventbox = Gtk2::EventBox->new;
$eventbox->add($icon);
my $tray = Gtk2::TrayIcon->new('Test');
$tray->add($eventbox);
#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
if ( $current_controls != 0) {
if ( $visible == 0) { $visible = 1 }
if ( $visible == 1) { $visible = 0 }
&interface;
}
}
#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->signal_connect(activate => sub { $current_controls = 1}
+);
$menu_VCI->set_image(Gtk2::Image->new_from_stock('gtk-refresh', 'm
+enu'));
$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 => sub { Gtk2->main_quit});
$menu_quit->set_image(Gtk2::Image->new_from_stock('gtk-quit', 'men
+u'));
$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);
#button function
$menu_vci_connect->signal_connect( 'button-press-event' => sub
+ { my $button_vci_label = $menu_vci_connect->get_label;
if ( $button_v
+ci_label eq 'Connect') {
$menu_vci_
+connect->set_label( 'Stop');
}
else {
$menu_vci_
+connect->set_label( 'Connect');
}
});
}
#add the widgets to the window: widgets->table->eventbox->window
$eventbox_interface->add( $table_interface);
$interface->add( $eventbox_interface);
$interface->show_all;
# if ( $visible == 0) {
# $interface->hide_all;
# }
# else {
# $interface->show_all
# }
}
|