2010-08-23 9 views
1

Je dois créer une application simple qui affiche une icône dans la barre des tâches et un menu à partir duquel vous pouvez effectuer certaines opérations. le problème est que statusicon est fermé immédiatement après la création. Qu'est-ce qui manque? J'ai mis le sommeil pour m'assurer qu'il a été créé. pendant 3 secondes, quelque chose apparaît dans systray, même si ce n'est pas l'icône que j'ai définie.gtkmm statusicon quitte après la création

Init.cc

#include <gtkmm/main.h> 
#include "Tray.h" 

int main(int argc, char *argv[]) { 
    Gtk::Main kit(argc, argv); 
    printf("Statuicon starting\n"); 
    Tray tray; 
    printf("Statuicon started\n"); 
    return 0; 
} 

Tray.cc

#include "Tray.h" 

Tray::Tray() { 
    set(Gtk::Stock::OK); 

    signal_activate().connect(sigc::mem_fun(*this, &Tray::on_statusicon_activated)); 
    signal_popup_menu().connect(sigc::mem_fun(*this, &Tray::on_statusicon_popup)); 

    set_visible(true); 

    printf("Statusicon created\n"); 

    sleep(3); 
} 

Tray::~Tray() {} 

void Tray::on_statusicon_popup(guint button, guint activate_time) { 
    printf("popup!"); 
} 

void Tray::on_statusicon_activated() { 
    printf("active!"); 
} 

Tray.h

#ifndef GTKMM_TRAY_H 
#define GTKMM_TRAY_H 
#include <gtkmm.h> 
#include <unistd.h> 
using namespace std; 

class Tray : public Gtk::StatusIcon { 
    public: 
     Tray(); 
     ~Tray(); 

    private: 
     virtual void on_statusicon_popup(guint button, guint activate_time); 
     virtual void on_statusicon_activated(); 
}; 

#endif //GTKMM_TRAY_H 

Répondre

3

Vous n'êtes pas en cours d'exécution d'une boucle principale du tout, donc pas d'événements d'entrée peuvent être manipulé et le programme se termine après la construction du bac. Ce que vous voulez faire est de supprimer le sommeil, puis dans votre fonction main(), ajoutez la ligne suivante juste avant le retour:

Gtk::Main::run(); 

Ensuite, lorsque vous voulez que l'application à quitter (généralement en réponse à une événement de quelque sorte), appelez

Gtk::Main::quit(); 
Questions connexes