That's alot easier to deal with. :-) First, I think you got sent on a wild goose chase with is_visible...... what you want is "is_mapped". I just quickly added some is_mapped and a "$mapped" to replace your $visible. You may as well learn right, and call it "mapped". :-) Also you need to make $interface a global, to access it from different subs. Anyway, here is a quick fix, but it should show you the way. The logic I setup probably could use a better design, and you need to remove your is_visible clutter. Also, you might be able to remove the need for a global $interface.

Your interface window is probably the place to put your progressbar..... it will keep running in the background when the $interface is not mapped.

#!/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; my $interface; my $mapped = 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; } #if($mapped) {$interface->hide_all}; } #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 { if($mapped) {$interface->hide_all; $mapped = 0; return} $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($interface->mapped){print "is mapped\n" } #$window->hide_all; + print "mapped ?-> ",$interface->mapped,"\n"; $mapped = 1; # if ( $visible == 0) { # $interface->hide_all; # } # else { # $interface->show_all # } }

I'm not really a human, but I play one on earth. Cogito ergo sum a bum

In reply to Re^5: Gtk2: main window visibility by zentara
in thread Gtk2: main window visibility 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.