2010-01-24 8 views
3

Je tente d'envoyer un signal via le bus de messages de la session. Je suis capable d'appeler les méthodes très bien en utilisant d-feet dbus debugger sans problème. Malheureusement, d-feet ne vous permet pas de vous connecter aux signaux pour les déboguer. En remplacement, j'utilise dbus-monitor "type='signal'" pour voir si quelque chose est envoyé. Jusqu'à présent, cela fonctionne sauf pour tout ce que j'envoie. Mon hypothèse est que lorsque l'on appelle dbus_g_connection_register_g_object (connection, path, object);, il enregistre toutes les méthodes, propriétés et signaux situés dans votre fichier XML introspection. Cela semblerait être vrai parce qu'avant de les ajouter, dbus se plaindrait des signaux qui n'existaient pas. Je tente d'envoyer un signal en utilisant g_signal_emit_by_name(self,"application_identifier_changed","some new crazy aid",NULL);. Cela fonctionne dans l'application elle-même, je peux me connecter au signal et il se déclenche. Cependant, rien n'apparaît dans le moniteur dbus. Je dois manquer quelque chose de simple.Signal d'envoi DBus Glib - Aucun signal émis

Voici les fichiers concernés:
main.c

int 
main (int argc, char *argv[]) 
{ 
guint result; 
GError* error = NULL; 
GObject * obj = NULL; 

gtk_init(&argc,&argv); 

gchar* bus_name = g_strdup_printf("org.maskwa.PowerviewApplicationPresence_%d",getpid()); 

dbus = dbus_g_bus_get(DBUS_BUS_SESSION,&error); 
if (NULL != error) { 
    g_error("error establishing dbus connection %s",error->message); 
    g_error_free(error); 
    return 1; 
} 
    //dbus_connection_setup_with_g_main(dbus_g_connection_get_connection(dbus),NULL); 

proxy = dbus_g_proxy_new_for_name(dbus, 
    DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS); 

org_freedesktop_DBus_request_name(proxy, 
      bus_name, 
      DBUS_NAME_FLAG_DO_NOT_QUEUE, &result, &error); 

obj = g_object_new (POWERVIEW_TYPE_APPLICATION_PRESENCE, NULL); 
dbus_g_connection_register_g_object (dbus, "/org/maskwa/powerview_application_presence", obj); 

gtk_main(); 

if (NULL != bus_name) g_free(bus_name); 
return 0; 
} 

Powerview-application presence.gob:

%headertop{ 

#include <dbus/dbus-glib.h> 
#include "main.h" 
%} 

%{ 
#include "powerview-application-presence-glue.h" 
%} 

class Powerview:Application:Presence from G:Object { 

class_init (class) 
{ 
    dbus_g_object_type_install_info (POWERVIEW_TYPE_APPLICATION_PRESENCE,&dbus_glib_powerview_application_presence_object_info); 
} 

public void 
get_application_identifier(self, gchar** OUT_aid, GError** error) 
{ 
    g_print("%p  powerview_application_presence_get_application_identifier()\n",self); 
    *OUT_aid = g_strdup("tld.domain.pong"); 
} 

public void 
get_display_name(self, gchar** OUT_display_name, GError** error) 
{ 
    g_print("%p powerview_application_presence_get_display_name()\n",self); 
    *OUT_display_name = g_strdup("Test Application"); 

    g_signal_emit_by_name(self,"application_identifier_changed","some new crazy aid",NULL); 
} 

signal last NONE (POINTER) 
void application_identifier_changed (self, gchar** new_aid) 
{ 
    g_print("application_identifier_changed()\n"); 
} 

signal last NONE (POINTER) 
void display_name_changed(self, gchar** new_display_name) 
{ 

} 
} 

Powerview-application présence instance.xml

<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"> 
<!-- 
http://dbus.freedesktop.org/doc/dbus-specification.html#introspection-format 
http://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-signatures 
--> 
<node name="/"> 
<interface name="org.maskwa.PowerviewApplicationPresence"> 

    <method name="GetApplicationIdentifier"> 
     <arg type="s" name="OUT_aid" direction="out" /> 
    </method> 
    <signal name="ApplicationIdentifierChanged"> 
     <arg type="s" name="new_aid" /> 
    </signal> 

    <method name="GetDisplayName"> 
     <arg type="s" name="OUT_display_name" direction="out" /> 
    </method> 
    <signal name="DisplayNameChanged"> 
     <arg type="s" name="new_display_name" /> 
    </signal> 
</interface> 
</node> 

projet archive: https://www.slello.com/tmp/PowerviewTestApp.tar.gz

J'apprécierais toute aide.

+0

N'ajoutez pas de liens vers d'autres sites, en particulier des liens comme pastebin.com qui expire automatiquement. Au lieu de cela créer un petit exemple minuscule et inclure tout le code dans la question elle-même. –

+0

Je n'ai pas d'abord car je ne voulais pas encombrer le message. Peu importe, je peux le faire à l'avenir. – Mask

+0

A l'avenir, utiliser l'utilitaire 'dbus-monitor' pour la vérification si possible. Cela fonctionne bien sur Linux – enthusiasticgeek

Répondre

0

J'ai trouvé la source du problème. Dans powerview-application-presence.gob, signal last NONE (POINTER) devait être signal last NONE (STRING).