I want the system tray icon to change when I click on "UVNav" in the menu. The code I wrote that does this is in the subroutine "UVNav". So far it removes the "test" icon in the eventbox container. I cant seem to get the new icon to appear. If I use the "show_all" on the tray there are errors and nothing happens. If I use the "queue_draw" there are no errors but the new icon is not displayed. Any ideas? EDIT: I fixed it by using just "show_all" and correcting the file location.
#!/usr/bin/perl -w use strict; use warnings; use threads; use threads::shared; use Glib qw/TRUE FALSE/; use Gtk2 '-init'; use Gtk2::TrayIcon; #user variables my $icon_main = Gtk2::Gdk::Pixbuf->new_from_file("/home/deadpickle/Des +ktop/Gtk2/test.png"); my $icon_nav = Gtk2::Gdk::Pixbuf->new_from_file("/home/deadpickle/Desk +top/Gtk2/uvnav.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; #icon goes in box, box goes in tray my $icon_1 = Gtk2::Image->new_from_pixbuf($icon_main); my $eventbox = Gtk2::EventBox->new; $eventbox->add($icon_1); 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) { #what should this do? #&open_woot(); } #right mouse button elsif ($_[1]->button == 3) { &menu(); } return 1; } #right click menu sub menu { my $menu = Gtk2::Menu->new(); #UVNav my $menu_UVNav = Gtk2::ImageMenuItem->new_with_label("UVNav"); $menu_UVNav->signal_connect(activate => \&UVNav); $menu_UVNav->set_image(Gtk2::Image->new_from_stock('gtk-refresh', +'menu')); $menu->add($menu_UVNav); #VCI my $menu_VCI = Gtk2::ImageMenuItem->new_with_label("VCI"); $menu_VCI->signal_connect(activate => \&VCI); $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->signal_connect(activate => \&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', '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; } #UVNav interface sub UVNav { #change the icon when UVNav is clicked in the menu $eventbox->remove($icon_1); my $icon_2 = Gtk2::Image->new_from_pixbuf($icon_nav); $eventbox->add($icon_2); $eventbox->reparent($tray); $tray->show_all; } #VCI displays sub VCI { } #configuration dialog window sub configure { #Create the new window my $config_window = Gtk2::Window->new('toplevel'); $config_window->set_title("Configuration"); $config_window->set_position('center'); #VBox container my $table_config = Gtk2::Table->new(3, 5, FALSE); #Create Notebook my $config_notebook = Gtk2::Notebook->new; $config_notebook->set_tab_pos('top'); #the First Page; Config file select my $hbox_file = Gtk2::HBox->new(FALSE, 1); my $label_file = Gtk2::Label->new('Configuration Filename'); my $entry_file = Gtk2::Entry->new; my $button_file = Gtk2::Button->new_with_mnemonic("_Browse"); $button_file->set_size_request( 80, 32); my $align_button_file = Gtk2::Alignment->new( 0.5, 0.5, 0, 0); $align_button_file->add( $button_file); $entry_file->set_text($file); $hbox_file->pack_start($label_file, FALSE, FALSE, 1); $hbox_file->pack_start($entry_file, FALSE, FALSE, 1); $hbox_file->pack_start($align_button_file, FALSE, FALSE, 1); #the Second Page; Connection my $connect_vbox = Gtk2::VBox->new( FALSE, 1); my $label_user = Gtk2::Label->new('Username'); my $entry_user = Gtk2::Entry->new; my $label_server = Gtk2::Label->new('Server'); my $entry_server = Gtk2::Entry->new; $entry_user->set_text($user); $entry_server->set_text($server); $connect_vbox->pack_start($label_user, FALSE, FALSE, 1); $connect_vbox->pack_start($entry_user, FALSE, FALSE, 1); $connect_vbox->pack_start($label_server, FALSE, FALSE, 1); $connect_vbox->pack_start($entry_server, FALSE, FALSE, 1); #the Third Page; Waypoint my $table_waypoint = Gtk2::Table->new(4, 2, FALSE); my $label_temp_waypoint = Gtk2::Label->new('Temp Waypoint Filename +'); my $entry_temp_waypoint = Gtk2::Entry->new; my $label_final_waypoint = Gtk2::Label->new('Final Waypoint Filena +me'); my $entry_final_waypoint = Gtk2::Entry->new; my $label_local_waypoint = Gtk2::Label->new('Local Waypoint Folder +'); my $entry_local_waypoint = Gtk2::Entry->new; my $label_remote_waypoint = Gtk2::Label->new('Remote Waypoint Fold +er'); my $entry_remote_waypoint = Gtk2::Entry->new; $entry_temp_waypoint->set_text($waytemp); $entry_final_waypoint->set_text($wayfinal); $entry_local_waypoint->set_text($local_waypoint); $entry_remote_waypoint->set_text($remote_waypoint); $entry_temp_waypoint->set_editable(0); $entry_final_waypoint->set_editable(0); $table_waypoint->attach_defaults($label_temp_waypoint, 0, 1, 0, 1) +; $table_waypoint->attach_defaults($entry_temp_waypoint, 1, 2, 0, 1) +; $table_waypoint->attach_defaults($label_final_waypoint, 0, 1, 1, 2 +); $table_waypoint->attach_defaults($entry_final_waypoint, 1, 2, 1, 2 +); $table_waypoint->attach_defaults($label_local_waypoint, 0, 1, 2, 3 +); $table_waypoint->attach_defaults($entry_local_waypoint, 1, 2, 2, 3 +); $table_waypoint->attach_defaults($label_remote_waypoint, 0, 1, 3, +4); $table_waypoint->attach_defaults($entry_remote_waypoint, 1, 2, 3, +4); #the Fourth Page; UAS my $vbox_uas = Gtk2::VBox->new( FALSE, 1); my $table_uaspos = Gtk2::Table->new(4, 2, FALSE); my $frame_uaspos = Gtk2::Frame->new( 'uasposition File Transfer'); my $label_local_uaspos = Gtk2::Label->new('Local uasposition Folde +r'); my $entry_local_uaspos = Gtk2::Entry->new; my $label_remote_uaspos = Gtk2::Label->new('Remote uasposition Fol +der'); my $entry_remote_uaspos = Gtk2::Entry->new; $entry_local_uaspos->set_text($local_uaspos); $entry_remote_uaspos->set_text($remote_uaspos); $table_uaspos->attach_defaults($label_local_uaspos, 0, 1, 0, 1); $table_uaspos->attach_defaults($entry_local_uaspos, 1, 2, 0, 1); $table_uaspos->attach_defaults($label_remote_uaspos, 0, 1, 1, 2); $table_uaspos->attach_defaults($entry_remote_uaspos, 1, 2, 1, 2); $frame_uaspos->add( $table_uaspos); my $table_uas = Gtk2::Table->new(4, 2, FALSE); my $frame_uas = Gtk2::Frame->new( 'UAS Placefile Transfer'); my $label_local_uas = Gtk2::Label->new('Local uaspf.txt Folder'); my $entry_local_uas = Gtk2::Entry->new; my $label_remote_uas = Gtk2::Label->new('Remote uaspf.txt Folder') +; my $entry_remote_uas = Gtk2::Entry->new; $entry_local_uas->set_text($local_uas); $entry_remote_uas->set_text($remote_uas); $table_uas->attach_defaults($label_local_uas, 0, 1, 0, 1); $table_uas->attach_defaults($entry_local_uas, 1, 2, 0, 1); $table_uas->attach_defaults($label_remote_uas, 0, 1, 1, 2); $table_uas->attach_defaults($entry_remote_uas, 1, 2, 1, 2); $frame_uas->add( $table_uas); $vbox_uas->pack_start($frame_uaspos, FALSE, FALSE, 1); $vbox_uas->pack_start($frame_uas, FALSE, FALSE, 1); #append pages $config_notebook->append_page($hbox_file, "Configuration File"); $config_notebook->append_page($connect_vbox, "Connection"); $config_notebook->append_page($table_waypoint, "Waypoint"); $config_notebook->append_page($vbox_uas, "UAS Settings"); #add button to the main window my $button_accept = Gtk2::Button->new_with_mnemonic("_Accept"); my $button_cancel = Gtk2::Button->new_with_mnemonic("_Cancel"); #pack them into the dialog window $table_config->attach_defaults($config_notebook, 0, 5, 0, 1); $table_config->attach_defaults($button_accept, 1, 2, 2, 3); $table_config->attach_defaults($button_cancel, 3, 4, 2, 3); $config_window->add($table_config); $config_window->show_all; #Button Functions $button_cancel->signal_connect('clicked' => sub {$config_window->d +estroy}); $button_accept->signal_connect('clicked' => sub { my @settings = ( + ($user = $entry_user->get_text), ($server = $entry_server->get_text) + ,($local_waypoint = $entry_local_waypoint->get_text), ($remote_waypo +int = $entry_remote_waypoint->get_text), ($local_uaspos = $entry_loca +l_uaspos->get_text), ($remote_uaspos = $entry_remote_uaspos->get_text +), ($local_uas = $entry_local_uas->get_text), ($remote_uas = $entry_r +emote_uas->get_text)); save_default(@settings); $config_window->destr +oy}); $button_file->signal_connect('clicked' => sub {my $chooser_file = +Gtk2::FileChooserDialog->new ( 'Open Config File...', undef, 'open')} +); } #Exit threads sub exit_threads { $die = 1; $thread_1->join; Gtk2->main_quit; return FALSE; } #save to the file default.cfg when apply is clicked sub save_default { open DEFAULT, '>', 'default.cfg' or die "Could not Open file!! $!" +; for (@_) { print DEFAULT "$_\n"; } close DEFAULT; } #thread 1; SFTP connection thread sub sftp{ $|++; while(1){ if ( $die == 1 ){ goto END }; if ( $sftp_connect == 1 ){ my $seconds = 120; my %args = (host=> $server, user=>$user, timeout=>$seconds +); my $sftp = Net::SFTP::Foreign->new(%args); for(;;){ if($sftp_connect == 0){ $sftp_connect = 0; last} if($die == 1){ goto END }; } undef $sftp; $sftp_connect = 0; }else { sleep 1 } } END: } }

In reply to Gtk2: changing system tray icon by deadpickle

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.