On 2014-05-13 10:29:35 +0000, Steve Cookson said:
The main one for cocoa seems to be (on my machine ~/Alien-wxWidgets/wxWidgets-3.0.0/src/cocoa/taskbar.mm.

Got it! I need some time to figure out how this works.

Anyhow post your code and people can look at it.


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

Regards,

Richard



#!/usr/bin/env perl

package MyApp;

use warnings;
use strict;

use Wx;

use base 'Wx::App';

sub OnInit {
   my($this) = @_;

my($frame) = MyFrame->new( "Minimal wxPerl app",Wx::Point->new( 50, 50 ),Wx::Size->new( 450, 350 ));

   $this->SetTopWindow($frame);

   $frame->Show(1);

   return 1;
}

###

package MyFrame;

use strict;
use warnings;

use base '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($class) = shift;
   my($this) = $class->SUPER::new (undef, -1, $_[0], $_[1], $_[2]);

   $this->SetIcon (Wx::GetWxPerlIcon());

   # Setup menubar

   my($mfile) = Wx::Menu->new (undef, wxMENU_TEAROFF);

   my( $ID_ABOUT, $ID_EXIT ) = ( 1, 2 );
   $mfile->Append( $ID_EXIT, "E&xit\tAlt-X", "Quit this program" );

   my($mbar) = Wx::MenuBar->new();

   $mbar->Append( $mfile, "&File" );

   $this->SetMenuBar($mbar);

   EVT_MENU( $this, $ID_EXIT, \&OnQuit );

   # Setup trayicon

   my $trayicon = MyTaskBarIcon->new();

   $trayicon->IsOk() || die;

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

   # Set events - Not being called on OS X

   EVT_TASKBAR_CLICK($trayicon, \&OnTaskbarClick);
   EVT_TASKBAR_LEFT_DOWN($trayicon, \&OnTaskbarClick);
   EVT_TASKBAR_LEFT_UP($trayicon, \&OnTaskbarClick);
   EVT_TASKBAR_RIGHT_DOWN($trayicon, \&OnTaskbarClick);
   EVT_TASKBAR_RIGHT_UP($trayicon, \&OnTaskbarClick);
   EVT_TASKBAR_LEFT_DCLICK($trayicon, \&OnTaskbarClick);
   EVT_TASKBAR_RIGHT_DCLICK($trayicon, \&OnTaskbarClick);
   EVT_TASKBAR_MOVE($trayicon, \&OnTaskbarClick);

   return $this;
}

sub OnTaskbarClick {
   my ($this, $event) = @_;

   print "OnTaskbarClick called\n"; # This never called

   return;
}

sub OnQuit {
   my ($this, $event) = @_;

   $this->Close(1);

   return;
}

### trayicon

package MyTaskBarIcon;

use base 'Wx::TaskBarIcon';

sub CreatePopupMenu {
   my ($this) = @_;

   print "CreatePopupMenu called\n"; # This never gets called

   my $menu = Wx::Menu->new();
   $menu->Append(-1, "menu 1");
   $menu->Append(-1, "menu 2");

   return $menu;
}


###

package main;

my $app = MyApp->new();

$app->MainLoop();


Reply via email to