Cairo-Dock cafe | Café Cairo-Dock
Subscription date : 30 November 2007
Messages : 17118
|
Taiebot pour écouter et parler au bus, regarde dans demo.py, il ya tout ce qu'il faut.
tu peux parler et écouter le dock et Pidgin de la même façon, seuls les chemins sur le bus et les noms des interfaces changent.
tu auras donc 2 interfaces (iface_dock et _iface_pidgin), avec des callbacks et des appels sur chaque, le but du jeu étant de faire :
je reçoit X de pidgin => je balance une action sur le dock
je reçois Y du dock (clic ou autre) => je fais une action en conséquence.
PS : pour parser son fichier de conf en python je sais pas comment faire, au pire un simple sed peut faire l'affaire, sinon voir dans glib version python |
ppmt, Monday 31 August 2009 à 05:01
|
|
Subscription date : 29 November 2007
Messages : 3520
|
mais si ca peut se lancer comme un fichier bash
en haut du fichier tu mets:
tu rends le fichier executable et roulez poulette |
Subscription date : 29 November 2007
Messages : 7408
|
merci
EDIT : @Fab -> Tu pourrais nous faire le même petit programme démo en bash ? |
Subscription date : 26 October 2008
Messages : 1904
|
On abandonnerai le C ..... Nochka? |
Subscription date : 26 October 2008
Messages : 1904
|
Ok Quelques questions sur le script demo... Veuillez derouler pour pouvoir repondre merci... Ok pas la peine j'ai trouve....
Mais alors des questions plus generales pkoi tu fais toujours
if "cModulename" != "test":
return
print "une action"
Ah oui comment on fait un appel je vois bien les callbacks sur la demo mais les appels?
import sys
import gobject
import glib
import gtk
import dbus
import os.path
from dbus.mainloop.glib import DBusGMainLoop
def action_on_click(cModuleName,iState): if cModuleName != "test":
return
print "clic !"
def action_on_middle_click(cModuleName):
if cModuleName != "test":
return
print "middle clic !"
def action_on_build_menu(cModuleName):
if cModuleName != "test":
return
print "build menu !"
bus = dbus.SessionBus()
remote_object = bus.get_object("org.cairodock.CairoDock", "/org/cairodock/CairoDock")
iface = dbus.Interface(remote_object, "org.cairodock.CairoDock")
iface.PopulateMenu("test", ["choice 1", "choice 2"])
del iface
del remote_object
del bus
def action_on_menu_select(cModuleName,iNumEntry): if cModuleName != "test":
return
print "choice",iNumEntry,"has been selected !"
def action_on_init(cModuleName):
if cModuleName != "test":
return
print "our module is started"
def action_on_stop(cModuleName):
if cModuleName != "test":
return
print "our module is stopped"
def action_on_reload(cModuleName, bConfigHasChanged):
if cModuleName != "test":
return
print "our module is reloaded"
if bConfigHasChanged:
print " and our config has changed"
def init():
DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
try:
remote_object = bus.get_object("org.cairodock.CairoDock",
"/org/cairodock/CairoDock")
except dbus.DBusException:
print "Cairo-Dock not found on bus (did you activate its 'DBus' plug-in ?)"
return
iface = dbus.Interface(remote_object, "org.cairodock.CairoDock")
iface.RegisterNewModule("test", 3, "This is a distant applet\nIt handles right and middle click\n by Fabounet", os.path.abspath("."))
iface.connect_to_signal("on_click_icon", action_on_click)
iface.connect_to_signal("on_middle_click_icon", action_on_middle_click)
iface.connect_to_signal("on_build_menu", action_on_build_menu)
iface.connect_to_signal("on_menu_select", action_on_menu_select)
iface.connect_to_signal("on_init_module", action_on_init)
iface.connect_to_signal("on_stop_module", action_on_stop)
iface.connect_to_signal("on_reload_module", action_on_reload)
iface.ShowDialog("I'm connected to Cairo-Dock !", 4, "None", "None", "test")
iface.SetQuickInfo("123", "None", "None", "test")
del iface
del remote_object
del bus
def stop():
print "STOP"
bus = dbus.SessionBus()
remote_object = bus.get_object("org.cairodock.CairoDock", "/org/cairodock/CairoDock")
iface = dbus.Interface(remote_object, "org.cairodock.CairoDock")
iface.UnregisterModule("test")
del iface
del remote_object
del bus
if __name__ == '__main__':
init()
gtk.main()
stop()
sys.exit(0)
|
Subscription date : 26 October 2008
Messages : 1904
|
Dans l'exemple demo comment fais tu pour voir sur quel icone on a clique?
Si je comprends bien iface.connect_to_signal("on_click_icon", action_on_click)
rappelle le callback du debut...
def action_on_click(cModuleName,iState):
if cModuleName != "test":
return
print "clic !"
Mais cModuleName sera toujours different de "test" puisque = "on_click_icon"
Je ne suis pas tres bien la logique... |
Subscription date : 26 October 2008
Messages : 1904
|
Ah je crois comprendre tu peux ecouter plusieurs truc a la fois donc je pourrais ecouter l'applet meteo en faisant au debut
def action_on_click(cModuleName,iState):
if cModuleName != "test":
print "clic !"
else cModuleName != "Weather":
print "rate mauvais applet!!"
return |
Subscription date : 26 October 2008
Messages : 1904
|
Ben non ca marche pas invalid syntax.. dur dur la vie de codeur.. |
matttbe, Monday 31 August 2009 à 13:50
|
|
Subscription date : 24 January 2009
Messages : 12573
|
else cModuleName != "Weather": Beuurk
Dans les conditions, si tu mets un If, seuls peuvent suivent elseif ou else ou rien (=> si c'est ça (if + condition), ou si c'est ça (elseif + condition), sinon (else : si aucunes des conditions précédentes) c'est ça.
Je te conseille le numéro 27 du Full Circle Magasine : http://fullcircle-mag.fr/index.php?pages/publications
La suite n'est dispo pour le moment qu'en En : http://fullcirclemagazine.org/issue-28/ |
ppmt, Monday 31 August 2009 à 14:42
|
|
Subscription date : 29 November 2007
Messages : 3520
|
matttbe a raison...tu ne peux pas faire un test avec else vu que le test a deja ete fait avec if....il faut utiliser elif a la place
En fait ce qui manque dans Python ce une fonction case...ca resoudrait ton probleme...vu que ca n'existe pas tu te retrouves a utiliser if et elif |
Subscription date : 26 October 2008
Messages : 1904
|
Ok j'ai trouver pour elif mais ca repond pas a ma 1ere question pkoi fab utilise un != "Test" alors que ca devrait etre == "Test" non ? si y a plusieurs signaux a regarder comment il fait?
J'essaie avec ca mais ca marche pas..
def action_on_click(cModuleName,iState):
if cModuleName == "test":
print "clic !"
elif cModuleName != "test":
print "Rate mauvais applet"
return
Edit merci Nohka du codage des conneaux ... |
Subscription date : 29 November 2007
Messages : 7408
|
si y a plusieurs signal a regarder
signaux |
ppmt, Monday 31 August 2009 à 14:55
|
|
Subscription date : 29 November 2007
Messages : 3520
|
si je comprends la function tu recuperes le nom du module et son etat.
Puis si le modules n'est pas "test" tu quittes la fonction sinon tu imprimes clic. Fabounet fais un test inverse. C'est comme ca un Dieu....ca essaye de perturber tout le monde
qu'est ce qui ne marche pas dans ton cas? |
Subscription date : 26 October 2008
Messages : 1904
|
Ben j'essaie de voir si je peux recuperer le signal d'un autre module mais je pense que ce n'est pas possible....
dans le genre j'ai un sous dock nomme Pidgin si je clique dessus je m'attends a voir "Rate mauvais applet" mais je viens de relire on peut avoir que le signal des modules crees donc on oublie tout ... |
Subscription date : 30 November 2007
Messages : 17118
|
en fait Show-desktop est plus compliquée qu'il n'y parait, regarde le code
(car il y'a le clic-milieu aussi
en fait c'est trop simple pour une bonne démo (c'est pratiquement juste un lanceur)
je pensais plus à Dustbin par exemple (par contre, sans moniteur, juste avec un boucle)
ou bien toutes les applets lisant dans /proc (System-Monitor, netspeed, etc)
par contre je sais pas faire de boucle en python
tu as raison pour if cModuleName != "test"
ça sert à vérifier que c'est bien pour nous
sauf que seule les applets DBus sont concernées
je vais essayer de mieux cloisonner les signaux mais en attendant faut faire comme ça. |
Subscription date : 26 October 2008
Messages : 1904
|
Allez je vous presente ma version 0.000000000000001 de mon plugin c'est pas qu'il aura plein de version mais comme je suis plus au stade de l'apprentissage qu'autres choses j'essaie de faire ca bien...
Bon il vous faut creer un sous-dock Pidgin avant de commencer..Pour voir des icones sans icones et sans nom ...LOL
et apres lancer mon programme dans un terminal sinon il marche pas ... du moins vous verrez rien
bien sur vous pouvez m'aider en me disant pkoi j'arrive pas a afficher mes icones je crois que c'est une histoire de call back et de string..
import sys
import gobject
import glib
import gtk
import dbus
from dbus.mainloop.glib import DBusGMainLoop
def init():
DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
try:
remote_object = bus.get_object("im.pidgin.purple.PurpleService",
"/im/pidgin/purple/PurpleObject")
except dbus.DBusException:
print "Pidgin not found on bus (did you activate its 'DBus' plug-in ?)"
return
purple = dbus.Interface(remote_object, "im.pidgin.purple.PurpleInterface")
current = purple.PurpleSavedstatusGetType(purple.PurpleSavedstatusGetCurrent())
print current
for acctID in purple.PurpleAccountsGetAllActive():
buddies = purple.PurpleFindBuddies(acctID,"")
for buddyid in buddies:
name = purple.PurpleBuddyGetName(buddyid)
icon = purple.PurpleBuddyGetIcon(buddyid)
print name
remote2_object = bus.get_object("org.cairodock.CairoDock",
"/org/cairodock/CairoDock")
iface = dbus.Interface(remote2_object, "org.cairodock.CairoDock")
iface.CreateLauncherFromScratch("icon", "name", "none", "Pidgin")
del purple
del remote_object
del bus
if __name__ == '__main__':
init()
gtk.main()
stop()
sys.exit(0)
|
ppmt, Monday 31 August 2009 à 17:50
|
|
Subscription date : 29 November 2007
Messages : 3520
|
tu as bien creer un fichier qui s'appele icon dans ton repertoire? |
Subscription date : 26 October 2008
Messages : 1904
|
Ben non icon et name c ce que j'ai recuperer sur Pidgin .....Il devrait me creer un nouveau launcher avec l'image de mon contact et son nom pour l'instant il me cree les nouveaux launchers mais pas d'icones et pas de nom non plus... |
ppmt, Monday 31 August 2009 à 20:02
|
|
Subscription date : 29 November 2007
Messages : 3520
|
oh I see....dans ce cas essaye ca
iface.CreateLauncherFromScratch(icon, name, "none", "Pidgin") |
Cairo-Dock cafe | Café Cairo-Dock
|