Hi Richard,

On 13/05/14 13:13, Richard Faasen wrote:

Here it is. Just search for 'trayicon' to find the interesting parts.

Well I played with it a bit.  I couldn't TaskIconBar in Wx::Demo.

Anyhow I took your code and copied it into a piece of working code and after a bit of messing around it sprang into life.

Firstly, it only appears to work when the App has focus!

Secondly EVT_TASKBAR_CLICK never worked,

EVT_TASKBAR_MOVE worked too much and obscured any results I might have had.

But everything else worked.

Here is my test harness with your embedded code, I had no wrapping problems with your code.

Code follows.

Regards

Steve

#!/usr/bin/perl -w --

package Player;
use strict;
use warnings;

#use v5.18;
use Wx qw[:everything];
use base qw(Wx::Frame);
use Wx qw( wxBITMAP_TYPE_ICO wxMENU_TEAROFF wxOK wxICON_INFORMATION wxVERSION_STRING );
use Wx::Event qw(
   EVT_COMMAND EVT_TIMER EVT_MENU
   EVT_TASKBAR_CLICK
   EVT_TASKBAR_LEFT_DOWN EVT_TASKBAR_LEFT_UP
   EVT_TASKBAR_RIGHT_DOWN EVT_TASKBAR_RIGHT_UP
   EVT_TASKBAR_LEFT_DCLICK EVT_TASKBAR_RIGHT_DCLICK
   EVT_TASKBAR_MOVE
);


sub new {
my( $i_main_menu, $parent, $id, $title, $pos, $size, $style, $name ) = @_;
    $parent = undef              unless defined $parent;
    $id     = wxID_ANY           unless defined $id;
    $title  = ""                 unless defined $title;
    $pos    = wxDefaultPosition  unless defined $pos;
    $size   = wxDefaultSize      unless defined $size;
    $name   = ""                 unless defined $name;

#    Create top level window.
    $style = wxNO_BORDER unless defined $style;
$i_main_menu = $i_main_menu->SUPER::new( undef, wxID_ANY, "Frame", wxDefaultPosition, wxDefaultSize, $style, $name );
    my $Main_Szr = Wx::BoxSizer->new( wxVERTICAL);

    my $trayicon = Wx::TaskBarIcon->new();

    $trayicon->IsOk() || die;

    $trayicon->SetIcon(Wx::GetWxPerlIcon(1), "Click me!");

    # Set events

    EVT_TASKBAR_CLICK($trayicon, sub {
             print "EVT_TASKBAR_CLICK triggered\n"; # This never called
         });
    EVT_TASKBAR_LEFT_DOWN($trayicon, sub {
             print "EVT_TASKBAR_LEFT_DOWN triggered\n"; # This called
         });
    EVT_TASKBAR_LEFT_UP($trayicon, sub {
             print "EVT_TASKBAR_LEFT_UP triggered\n"; # This called
         });
    EVT_TASKBAR_RIGHT_DOWN($trayicon, sub {
             print "EVT_TASKBAR_RIGHT_DOWN triggered\n"; # This called
         });
    EVT_TASKBAR_RIGHT_UP($trayicon, sub {
             print "EVT_TASKBAR_RIGHT_UP triggered\n"; # This called
         });
    EVT_TASKBAR_LEFT_DCLICK($trayicon, sub {
             print "EVT_TASKBAR_LEFT_DCLICK triggered\n"; # This called
         });
    EVT_TASKBAR_RIGHT_DCLICK($trayicon, sub {
             print "EVT_TASKBAR_RIGHT_DCLICK triggered\n"; # This called
         });
    if (0){
        EVT_TASKBAR_MOVE($trayicon, sub {
            print "EVT_TASKBAR_MOVE triggered\n"; # This called too much
        });
    }


    $i_main_menu->Show(1);
    $i_main_menu->SetSizer($Main_Szr);
    $i_main_menu->Layout();
    return $i_main_menu;
}


package Player_Main_App;

use base qw(Wx::App);
use strict;

sub OnInit {
    my( $self ) = shift;

    my $Player = Player->new();
    $self->SetTopWindow($Player);
    $Player->Show(1);

    return 1;
}

package main;

unless(caller){

    my $player_app = Player_Main_App->new();
    $player_app->MainLoop();
}

Reply via email to