Back to index

libappindicator  12.10.0
Functions | Variables
test-libappindicator-fallback-watcher.c File Reference
#include <glib.h>
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-bindings.h>
#include <dbus/dbus-glib-lowlevel.h>
#include "../src/dbus-shared.h"

Go to the source code of this file.

Functions

gboolean kill_func (gpointer userdata)
static DBusHandlerResult dbus_filter (DBusConnection *connection, DBusMessage *message, void *user_data)
int main (int argv, char **argc)

Variables

static GMainLoop * mainloop = NULL

Function Documentation

static DBusHandlerResult dbus_filter ( DBusConnection *  connection,
DBusMessage *  message,
void *  user_data 
) [static]

Definition at line 35 of file test-libappindicator-fallback-watcher.c.

{
       if (dbus_message_is_method_call(message, NOTIFICATION_WATCHER_DBUS_ADDR, "RegisterStatusNotifierItem")) {
              DBusMessage * reply = dbus_message_new_method_return(message);
              dbus_connection_send(connection, reply, NULL);
              dbus_message_unref(reply);

              /* Let the messages get out, but we're done at this point */
              g_timeout_add(50, kill_func, NULL);

              return DBUS_HANDLER_RESULT_HANDLED;
       }

       return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}

Here is the call graph for this function:

Here is the caller graph for this function:

gboolean kill_func ( gpointer  userdata)
int main ( int  argv,
char **  argc 
)

Definition at line 59 of file test-libappindicator-fallback-watcher.c.

{
       g_type_init();

       g_debug("Waiting to init.");


       GError * error = NULL;
       DBusGConnection * session_bus = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
       if (error != NULL) {
              g_error("Unable to get session bus: %s", error->message);
              return 1;
       }

    DBusGProxy * bus_proxy = dbus_g_proxy_new_for_name(session_bus, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS);

       gboolean has_owner = FALSE;
       gint owner_count = 0;
       while (!has_owner && owner_count < 10000) {
              org_freedesktop_DBus_name_has_owner(bus_proxy, "org.test", &has_owner, NULL);
              owner_count++;
       }

       if (owner_count == 10000) {
              g_error("Unable to get name owner after 10000 tries");
              return 1;
       }

       g_usleep(500000);

       g_debug("Initing");

       guint nameret = 0;

       if (!org_freedesktop_DBus_request_name(bus_proxy, NOTIFICATION_WATCHER_DBUS_ADDR, 0, &nameret, &error)) {
              g_error("Unable to call to request name");
              return 1;
       }   

       if (nameret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
              g_error("Unable to get name");
              return 1;
       }

       dbus_connection_add_filter(dbus_g_connection_get_connection(session_bus), dbus_filter, NULL, NULL);

       /* This is the final kill function.  It really shouldn't happen
          unless we get an error. */
       g_timeout_add(2000, kill_func, NULL);

       g_debug("Entering Mainloop");

       mainloop = g_main_loop_new(NULL, FALSE);
       g_main_loop_run(mainloop);

       g_debug("Exiting");

       return 0;
}

Here is the call graph for this function:


Variable Documentation

GMainLoop* mainloop = NULL [static]

Definition at line 32 of file test-libappindicator-fallback-watcher.c.