IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

StatusIcon & Notification


Sujet :

GTK+ avec C & C++

  1. #1
    Membre émérite

    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 291
    Par défaut StatusIcon & Notification
    Bonjour à tous,

    Je suis actuellement en train de bosser sur un soft dont l'activité principale serait d'afficher des notifications en fonction d'événements se produisant sur une machine distante. Au repos, le programme serait constitué uniquement d'une icône dans la barre des tâches et ferait apparaître des notifications lorsqu'un événement survient. Le problème est que GTK (j'utilise GTKmm mais j'ai regardé les sources GTK), ne permet pas ce genre de choses, il autorise un tooltip mais celui-ci ne s'affiche qu'au survol.

    Sous Linux, je peux utiliser la libnotify mais celle-ci n'a pas d'équivalent sous Windows. Toutefois, les icônes de barre des tâche sous Windows permettent l'affichage d'un tooltip mais GTK ne donne pas accès à la structure NOTIFYICONDATA utilisée pour la gestion de l'icône qui autoriserait la mise à jour du tooltip…

    Est-ce que quelqu'un a déjà été confronté à ce genre de problème ou y a-t-il une solution alternative (la solution sale et rapide serait d'enrichir et de recompiler gtkstatusicon.c mais si on peut éviter…)

    Merci d'avance
    http://beuss.developpez.com
    Tutoriels PostgreSQL, Assembleur, Eclipse, Java

  2. #2
    Membre chevronné
    Inscrit en
    Janvier 2007
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 329
    Par défaut
    Salut,

    Une solution pourrait être d'implémenter la bulle de notification directement en GTK.
    J'avais fait un test en python il y a quelques temps déjà, si ça peut te servir :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    import gtk
    import gtk.gdk
     
    class GtkNotif:
     
        def __init__(self):
            self.status = gtk.StatusIcon()
            self.status.set_from_icon_name("start-here")
            self.status.set_tooltip("Clique-moi!")
            self.status.connect('activate', self.ev_clic_icon)
            self.status.connect('popup-menu', self.ev_right_clic_icon)
            self.status.set_visible(True)
     
        def ev_clic_icon(self, icon):
            print "Clic !"
            win = gtk.Window(gtk.WINDOW_POPUP)
            r = self.status.get_geometry()[1]
            pos_x = r.x
            pos_y = r.y + r.height
            l = gtk.Label("   Hello !   ")
            b = gtk.Button()
            b.set_image(gtk.image_new_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU))
            b.set_relief(gtk.RELIEF_NONE)
            b.connect('clicked', self.ev_close_win, win)
            hb = gtk.HBox()
            hb.pack_start(l, True, True)
            hb.pack_start(b, False, True)
            win.set_decorated(False)
            win.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#ffff77'))
            win.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_NOTIFICATION)
            win.add(hb)
            win.show_all()
            win.move(pos_x, pos_y)
            win.set_keep_above(True)
            return
     
        def ev_close_win(self, button, window):
            window.destroy()
            return
     
        def ev_right_clic_icon(self, icon, event_button, event_time):
            item_quit  = gtk.ImageMenuItem(gtk.STOCK_QUIT)
            item_quit.connect('activate', gtk.main_quit)
            menu = gtk.Menu()
            menu.append(item_quit)
            menu.show_all()
            menu.popup(None, None, gtk.status_icon_position_menu, event_button, event_time, icon)
            return
     
        def main(self):
            gtk.main()
            return 0
     
     
    # Lancer le programme
    GtkNotif().main()

    -

  3. #3
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    Il y a le logiciel de messagerie instantanée Pidgin (basé sur Gtk+) qui existe sous Windows, il faudrait voir comment il fait pour utiliser la zone de notification.

  4. #4
    Membre émérite

    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 291
    Par défaut
    J'ai pensé créer le popup moi-même effectivement, le problème est que le get_geometry n'est pas pris en charge sous Windows… (et puis c'est dommage de réinventer la roue alors qu'il existe déjà un système qui fonctionne et qui s'intègre parfaitement à l'environnement).

    Je vais regarder du côté des sources de Pidgin
    http://beuss.developpez.com
    Tutoriels PostgreSQL, Assembleur, Eclipse, Java

Discussions similaires

  1. [SNMP] différences entre traps et notifications?
    Par fadoua dans le forum Développement
    Réponses: 2
    Dernier message: 06/07/2004, 11h57
  2. Réponses: 5
    Dernier message: 08/01/2004, 15h05
  3. Réponses: 3
    Dernier message: 01/07/2003, 16h04
  4. [CODE] Application dans la zone de notification
    Par Rodrigue dans le forum C++Builder
    Réponses: 4
    Dernier message: 29/05/2003, 19h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo