Home Forums Wiki Doc Install Extras Screenshots Source Code Projects Blog Users Groups Register
Glx-Dock / Cairo-Dock List of forums Technical discussions | Discussions techniques The new DBus interface to Cairo-Dock
The latest stable release is the *3.4.0* : How to install it here.
Note: We just switched from BZR to Git on Github! (only to host the code and your future pull requests)
Technical discussions | Discussions techniques

Subjects Author Language Messages Last message
[Locked] The new DBus interface to Cairo-Dock
Page : 1 2 3 4 5
fabounet English 85 ppmt [Read]
10 November 2009 à 04:29

taiebot65, Saturday 29 August 2009 à 21:47


Subscription date : 26 October 2008
Messages : 1904
1er Bug pour moi...

Il est impossible d'afficher des nouvelles images moi ca m'affiche des espaces vides...

taiebot65, Saturday 29 August 2009 à 23:05


Subscription date : 26 October 2008
Messages : 1904
2 eme bug la config n'est pas configurable du moins elle garde celle par defaut quand je change le menu config dans .conf ca ne fait rien du tout.. Peut etre faut il redemmarer l'ordi?

taiebot65, Sunday 30 August 2009 à 12:23


Subscription date : 26 October 2008
Messages : 1904
3eme bug il est impossible de creer des lanceurs sur un nouveau module.

Je voudrais faire un truc comme l'applet weather mais avec pidgin...


#!/usr/bin/env python
### import ###
import sys
import gobject
import glib
import gtk
import dbus
from dbus
.mainloop.glib import DBusGMainLoop

### callbacks ###
def action_on_click(cModuleName,iState):
    print 
"clic !"
    
print "cModuleName :"cModuleName" state : "iState

def action_on_middle_click
(cModuleName):
    print 
"middle clic !"
    
print "cModuleName :"cModuleName

### init ###
def init():
    
# let's connect to the dock.
    
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")
    
    
# a little test
    
iface.ShowDialog("I'm connected to Cairo-Dock !"3"none""none""none")
    
    
# let's register our applet !
    
iface.RegisterNewModule("Pidgin"4"test d'une applet""~/.config/cairo-dock/Pidgin")
    
    
# register to the notifications on our applet
    
iface.connect_to_signal("on_click_icon"action_on_click)
    
iface.connect_to_signal("on_middle_click_icon"action_on_middle_click)

   
#Changer d'icone
    
iface.CreateLauncherFromScratch("~/.config/cairo-dock/current_theme/down.svg""my launcher""gedit""Pidgin")


    
# clean up memory
    
del iface
    del remote_object
    del bus

### main ###
if __name__ == '__main__':
    
init()
    
gtk.main()
    
sys.exit(0)




Je pense que c'est parce que les modules ne sont pas consideres comme des sous-docks... mais comment je fais alors? Parce que quand je remplace "Pidgin" par "Rhythmbox" j'ai bien un nouveau lanceur dans le sous-dock rhythmbox mais sans images...

taiebot65, Sunday 30 August 2009 à 12:34


Subscription date : 26 October 2008
Messages : 1904
Ou alors ce sont pas des bugs c'est juste que je suis tres mauvais ...

Mais je crois que j'en reviens a une proposition que j'avais faites il y a pas mal de temps...
http://www.glx-dock.org/bg_topic.php?t=2656

Moi je pense que par defaut tous les lanceurs, applis, desklet devraient agir de la meme facon

nochka85, Monday 31 August 2009 à 01:06


Subscription date : 29 November 2007
Messages : 7408
Au fait, il serait peut être intéressant de faire une petite annonce concernant cette interface DBus avec un lien vers le tuto ( http://www.glx-dock.org/ww_page.php?p=Control_your_dock_with_DBus&lang=en ) et de diffuser çà assez largement afin d'attirer de potentiels concepteurs d'applets ... non ?

fabounet, Monday 31 August 2009 à 01:18


Subscription date : 30 November 2007
Messages : 17118
oui absolument
mais comme dis précédemment, je voudrais stabiliser l'interface avant, donc vous serez mes cobayes (moi y compris puisque vous pouvez trouver dans Dbus/demo une démo complète, à adapter à vos besoins )

@taiebot65 cette aprem j'ai commité de quoi corriger ton point 2
le point 1 marche chez moi, vérifie le chemin, ou alors choisis un nom d'icône qui existe dans le thème d'icônes
pour le point 3, j'ai voulu garder les choses simple, donc on ne peut pas créer de sous-dock.
si c'est vraiment nécessaire, je le rajouterai, mais je pense que cette interface doit rester simple => pour les trucs compliqués, il faut le faire en C

nochka85, Monday 31 August 2009 à 01:44


Subscription date : 29 November 2007
Messages : 7408
Tiens, moi j'ai une petite question

Si je prends par exemple ceci :

dbus-send --session --dest=org.cairodock.CairoDock /org/cairodock/CairoDock org.cairodock.CairoDock.Animate string:pulse int32:10 string:any string:firefox string:none


... qui permet de lancer l'animation "pulse" sur le lanceur "firefox" pendant 10 secondes. En regardant de plus prêt et après divers tests, il s'avère qu'en fait, cela lance l'anim sur le lanceur dont la commande est "firefox". Donc, vu que j'ai un lanceur dont la commande est "nautilus --no-desktop computer:", si je veux lui lancer la même anim, il faut que j'utilise cette commande Dbus :

dbus-send --session --dest=org.cairodock.CairoDock /org/cairodock/CairoDock org.cairodock.CairoDock.Animate string:pulse int32:10 string:any string:nautilus\ --no-desktop\ computer: string:none


Bref, çà j'ai compris ... mais voici ma question :

Comment je fais pour animer l'icone d'un sous-dock ou d'une applet (vu qu'il n'ont pas de commande associée) ??
-il possible via DBus d'envoyer une surface SDL (ou autre ... par exemple : une vidéo) sur la su
EDIT: bon ... je me réponds à moi même -> il faut renseigner le string d'avant celui de la commande en lui donnant le nom de l'étiquette que l'on souhaite animer et de passer celui de la commande à "any" ... ce qui, pour l'applet de demo du SVN qui se nomme "Dbus Applet" dans le dock reviens à lancer cette commande pour avoir la même anim qu'au dessus :
dbus-send --session --dest=org.cairodock.CairoDock /org/cairodock/CairoDock org.cairodock.CairoDock.Animate string:pulse int32:10 string:Dbus\ Applet string:any string:none


... désolé du dérangement <- çà fait 2 fois ce soir ! ... j'sens que je vais aller me coucher

EDIT 2: Histoire que ce post serve à quelque chose : Est-ce qu'il est prévu de mettre par exemple un répertoire "Dbus" dans ~/.config/cairo-dock/ et dans lequel on pourrait mettre les répertoires de nos applets externes ? .... le but serait que le dock "scanne" ce répertoire au lancement à la recherche d'applets (disons simplement en bash et en python dans un premier temps) ... et à chaque lancement, cela nous lancerait automatiquement les applets externes trouvées

fabounet, Monday 31 August 2009 à 02:36


Subscription date : 30 November 2007
Messages : 17118
oui pourquoi pas pour le scan
dans un 2ème temps alors

pour agir sur une icône, on peut la définir :
soit par son nom
soit par sa commande
soit par le nom de son applet

en gros, pour une applet DBus, c'est la dernière option qui est utilisée (donc les 2 premières à "None")
j'ai pas trouvé autre chose pour pouvoir cibler une icône (sinon on pourrait aussi cibler la classe, j'aimerais juste pas avoir une liste à rallonge )
bref, à l'usage, on verra bien ce qui est le mieux

PS : suite à ta remarque, j'ai modifié le test sur les n premières lettres de la recherche, donc si tu cherches juste "nautilus", ça te le trouvera (pas besoin de tout taper, même en cherchant "nautil" ça le trouvera)

PPS : je pense que la recherche sur le nom est pas top (le nom dépend de la langue, et peut changer en fonction du titre de la fenêtre)
=> à éviter pour cibler une icône dont on n'a pas définit le nom soi-même.

nochka85, Monday 31 August 2009 à 10:15


Subscription date : 29 November 2007
Messages : 7408
oui pourquoi pas pour le scan
dans un 2ème temps alors


Bah je pense que c'est super important (au moins pour les programmes python et bash) -> En effet, pour une utilisation depuis un autre programme, effectivement, on s'en fout ... mais pour pouvoir créer de vrais applets, c'est indispensable ! Car je vois mal l'utilisateur lambda lancer à chaque démarrage les applets externes ou se créer un script au démarrage de sa session . Et puis il faut penser à tous les programmeurs que cela peut intéresser : S'ils n'ont qu'à faire un script Python ou bash et à le coller dans un répertoire précis pour qu'il soit automatiquement reconnu par le dock comme une applet à part entière, cela permettra de faciliter leur diffusion et leur utilisation ... sans oublier le fait que taiebot65 va nous pondre tout plein d'applets et que pour les intégrer dans le dock facilement, il suffirait de les mettre dans un deuxième dossier "surveillé" dans /usr/share/cairo-dock pour qu'elles apparaissent à chaque lancement dans la config (de manière complètement transparente pour l'utilisateur)

taiebot65, Monday 31 August 2009 à 10:32


Subscription date : 26 October 2008
Messages : 1904
Ou les integrer avec les alarmes de cairo-dock en rajoutant les options ... lancer au demarrage du dock et rafraichir toutes les x mins...

nochka85, Monday 31 August 2009 à 12:17


Subscription date : 29 November 2007
Messages : 7408
lancer au demarrage du dock et rafraichir toutes les x mins...

C'est trop "complexe" pour un utilisateur lambda ... et regardes ce qui ce fait ailleurs : Par exemple pour Screenlets -> Tu récupères ton applets sous la forme d'un tar.gz que tu décompresses dans un répertoire précis et lorsque tu relances le programme, ta nouvelle applet apparaît. Bref, c'est le même fonctionnement que je propose ... Après, le mieux serait même un petit menu où l'on aurait un bouton "importer une applet externe" et où il suffirait de choisir le tar.gz pour que tout soit automatisé ( <- type le bouton 'import' d'emerald ) ... ce serait encore mieux pour le newbie

... et pour l'histoire du "rafraichir toutes les x mins", il faut que ce soit gérer par le code (du dock + 1 fonction Dbus pour paramétrer)... mais surtout pas par une option au lancement du dock ! T'imagine la longueur de ta commande pour lancer ton dock quand tu aura 15 plugins externes avec des temps de refresh différents ?

taiebot65, Monday 31 August 2009 à 13:35


Subscription date : 26 October 2008
Messages : 1904
Bon va falloir que je m'ameliore grandement alors

Mais je trouve pas ca tres complexe si j'ai juste une commande a afficher comme mon 1er programme je veux mettre la date sur l'applet clock en quick info... et ben j'ai pas besoin de m'appeler fabounet ou de savoir grandement coder si dans l'applet clock y a 2 options qu'on peut cocher pour 1 lancer au demarrage du dock et 2 rafraichir toutes les sec..

nochka85, Monday 31 August 2009 à 14:43


Subscription date : 29 November 2007
Messages : 7408
si dans l'applet clock y a 2 options qu'on peut cocher pour 1 lancer au demarrage du dock et 2 rafraichir toutes les sec..


Oui, mais çà implique qu'il faut modifier clock (qui est une applet en C) pour pouvoir lancer ton script externe ... et je ne pense pas que ce soit le but
D'où le fait qu'il faudrait mieux 1 répertoire pour les scripts externes (enfin 2 : 1 dans /usr/share et 1 dans ~/.config/cairo-dock pour les scripts perso) + 1 paramètre DANS LE SCRIPT (ou une commande Dbus) pour le refresh.

Sinon, autre sujet, mais j'ai un problème :

J'essaie de faire une applet de démo mais en bash ... et je suis coincé avec les notifications

Voici où j'en suis : (j'ai volontairement séparé chaque étape pour plus de lisibilité )

#!/bin/bash
### We assume the name of this applet is "demo_bash"
### It is installed in a directory, like for instance ~/demo.
### This script should be placed in this folder, alongside with 2 files :
### "icon" (the default icon of the applet) and "preview" (a preview of this applet)

SCRIPT_DIR=$(pwd)


DBUS_NAME="org.cairodock.CairoDock"
DBUS_PATH="/org/cairodock/CairoDock"
DBUS_INTERFACE="org.cairodock.CairoDock"

# Sample use :
# dbus-send --session --dest=$DBUS_NAME $DBUS_PATH $DBUS_INTERFACE.xxx type1:arg1 type2:arg2 ...
# where xxx is the name of the message to send, followed by the arguments.
# type is the type of an argument (string, int32, boolean, etc), and arg is the argument ("some text", 123, true, etc).

#############################################################################################################
applet_init() {

# let's register our applet !
dbus-send --session --dest=$DBUS_NAME $DBUS_PATH $DBUS_INTERFACE.RegisterNewModule string:"demo_bash" int32:3 string:"This is a distant applet\nIt handles right and middle click\n  by Nochka85" string:$SCRIPT_DIR
echo "Our module is started"
}

#############################################################################################################
register_notifications() {

# let's register to the notifications on our applet
# such as : on_click_icon , on_middle_click_icon , on_scroll_icon , on_build_menu ,on_drop_data , on_menu_select , on_init_module , on_stop_module , on_reload_module

dbus-send --session --dest=$DBUS_NAME $DBUS_PATH $DBUS_INTERFACE.connect_to_signal string:"on_click_icon" string:action_on_click
}

#############################################################################################################
action_on_click() {

dbus-send --session --dest=$DBUS_NAME $DBUS_PATH $DBUS_INTERFACE.ShowDialog string:"Left Click !" int32:5 string:none string:none string:none
echo "Left Click !"
}

#############################################################################################################
main_loop() {
while [ 
]
    do
        
sleep 1
    done
}

#############################################################################################################
# START
#############################################################################################################
applet_init
register_notifications
main_loop
exit


... bref, avec çà, cela ne me renvoit jamais de notification au clic gauche. Donc, 2 choses :
- Est-ce que mon abonnement est bon ? :
dbus-send --session --dest=$DBUS_NAME $DBUS_PATH $DBUS_INTERFACE.connect_to_signal string:"on_click_icon" string:action_on_click

- Comment faire une boucle pour surveiller les signaux dbus ? car je pense que c'est çà qui coince :

main_loop() {
while [ 1 ]
    do
        sleep 1
    done
}

taiebot65, Monday 31 August 2009 à 15:02


Subscription date : 26 October 2008
Messages : 1904
il va avoir bien plus de boulot le pauvre Fabounet lui qui pensait que l'on coderait pour lui....

fabounet, Monday 31 August 2009 à 15:20


Subscription date : 30 November 2007
Messages : 17118
lol
dans un 2ème temps ça veut juste dire quand on aura des applets à publier
je plussoie l'idée bien sûr

je suis curieux de voir si on peux arriver au bout en bash, ça serait une sacré performance

nochka85, Monday 31 August 2009 à 15:27


Subscription date : 29 November 2007
Messages : 7408
en tout cas, là, j'ai un soucis ... alors que tout marchait sauf la notification, je n'arrive plus à voir mon applet dans le dock

... elle apparaît bien dans la config mais l'icône est grisé. Je peux toujours la cocher/décocher, mais cela n'a AUCUN effet

Une idée ?

EDIT : Bon, j'ai trouvé ... en fait, j'avais renommé mon applet sans renommé le RegisterNewModule

nochka85, Monday 31 August 2009 à 16:15


Subscription date : 29 November 2007
Messages : 7408
je suis curieux de voir si on peux arriver au bout en bash, ça serait une sacré performance


Ah bon ?? ... donc pas d'idée pour surveiller les signaux dbus dans une boucle en bash ?

... Mav ? Toi qui est le pro de dbus ...

nochka85, Monday 31 August 2009 à 19:35


Subscription date : 29 November 2007
Messages : 7408
ah oui, j'oubliais : Matttbe, "à toutin nazar" -> Tu connaitrais pas le bash ? <- Vu que tu connais tout !



... çà serait qu'en même bien de réussir à faire un petit prog de démo en bash ... çà "multiplierait" les éventuels devs d'applets !

matttbe, Monday 31 August 2009 à 19:57


Subscription date : 24 January 2009
Messages : 12573
Il y a moyen de faire des trucs simples comme tu dis : il y a moyen d'utiliser "dbus-send" pour gérer Compiz facilement. (Show Desktop, voir le widget, etc.) => oui, ça existe déjà mais bon )

Utiliser curl, afficher des RSS avec curl (et "at" pour programmer), tester la vitesse internet, etc.
(c'est juste que je n'ai pas vraiment le temps maintenant et je vais d'abord m'occuper des licences et des paquets )

nochka85, Monday 31 August 2009 à 20:43


Subscription date : 29 November 2007
Messages : 7408
Yep ... mais la question était juste de réussir faire une boucle pour surveiller les signaux DBus et donc de réussir à s'abonner aux notifications (pour déjà tout simplement "voir" que l'utilisateur clique sur l'applet)

Technical discussions | Discussions techniques

Subjects Author Language Messages Last message
[Locked] The new DBus interface to Cairo-Dock
Page : 1 2 3 4 5
fabounet English 85 ppmt [Read]
10 November 2009 à 04:29


Glx-Dock / Cairo-Dock List of forums Technical discussions | Discussions techniques The new DBus interface to Cairo-Dock Top

Online users :

Powered by ElementSpeak © 2007 Adrien Pilleboue, 2009-2013 Matthieu Baerts.
Dock based on CSS Dock Menu (Ndesign) with jQuery. Icons by zgegball
Cairo-Dock is a free software under GNU-GPL3 licence. First stable version created by Fabounet.
Many thanks to TuxFamily for the web Hosting and Mav for the domain name.