Utilizar um GtkStatusIcon sem ação nenhuma não faz muita diferença para a maioria das aplicações. Com o ícone já construído, é possível adicionar evento de click do mouse por exemplo. Uma das técnicas mais utilizadas é a utilização de menus ao botão direito do mouse.
Imagem
Exemplo
/** * Seta a codificação do programa */ ini_set("php-gtk.codepage", "UTF-8"); /** * Classe de exemplo * * @name Demo * @author Bruno P. Gonçalves <http: //bruno.pitteli.com.br></http:> * @download <http: //code.google.com/p/fabulafw></http:> */ class Demo { /** * Armazena os widgets necessarios * * @access private * @property array $widgets */ public $widgets = array(); /** * Armazena o estado do window * * @access private * @property integer $state */ private $state; /** * @name __construct() * @return Demo */ public function __construct() { // Cria a janela $this->widgets['frmDemo'] = new GtkWindow(); $this->widgets['frmDemo']->set_size_request(250, 250); $this->widgets['frmDemo']->set_position(Gtk::WIN_POS_CENTER_ALWAYS); $this->widgets['frmDemo']->set_title("Demo"); $this->widgets['frmDemo']->connect("destroy", array($this, "frmDemo_unload")); // Cria o status icon $this->widgets['stiMain'] = new GtkStatusIcon(); $this->widgets['stiMain']->set_from_stock(Gtk::STOCK_CAPS_LOCK_WARNING); $this->widgets['stiMain']->set_tooltip("Demo"); $this->widgets['stiMain']->connect("popup-menu", array($this, "stiMain_onpopup")); // Cria o menu $this->widgets['mnuMain'] = new GtkMenu(); $this->widgets['mnuMain']->append($item = new GtkMenuItem("Mostrar/Esconder")); $item->connect("activate", array($this, "mnuMain_onclick"), 1); $this->widgets['mnuMain']->append(new GtkSeparatorMenuItem()); $this->widgets['mnuMain']->append($item = new GtkMenuItem("Sair")); $item->connect("activate", array($this, "mnuMain_onclick"), 2); $this->widgets['mnuMain']->show_all(); // Inicia a aplicação $this->widgets['frmDemo']->add(new GtkFixed()); $this->frmDemo_onload(); } /** * Método do carregamento do formulario * * @name frmDemo_onload() */ public function frmDemo_onload() { // Inicia o estado $this->state = 0; // Inicia a aplicação $this->widgets['frmDemo']->show_all(); Gtk::main(); } /** * Método do descarregamento do formulario * * @name frmDemo_unload() */ public function frmDemo_unload() { // Encerra a aplicação Gtk::main_quit(); exit(0); } /** * Método que mostra o menu ao clicar no popup * * @name stiMain_onpopup * @param GtkStatusIcon $widget Objeto do statusicon */ public function stiMain_onpopup($widget) { $this->widgets['mnuMain']->popup(); } /** * Método dos eventos dos menus * * @name mnuMain_onclick * @param GtkMenuItem $widget Menu que foi clicado * @para integer $index Index do menu clicado */ public function mnuMain_onclick($widget, $index) { // Verifica o menu var_dump($index); switch($index) { case 1: // Verifica se esta sendo mostrado if($this->state == 0) { // Esconde a janela $this->state = 1; $this->widgets['frmDemo']->hide(); } else { // Mostra a janela $this->state = 0; $this->widgets['frmDemo']->show_all(); } break; case 2: // Fecha a aplicação $this->frmDemo_unload(); break; } } } /** * Inicia o demo */ new Demo();
Referências
http://gtk.php.net/manual/en/gtk.gtkstatusicon.php
http://gtk.php.net/manual/en/gtk.gtkmenu.php
http://gtk.php.net/manual/en/gtk.gtkmenuitem.php
http://gtk.php.net/manual/en/gtk.gtkwindow.php