studio appeared/disappeared signals (again)

This commit is contained in:
Nedko Arnaudov 2009-08-01 19:24:00 +03:00
parent 4b93feb267
commit f93e4e8761
6 changed files with 60 additions and 28 deletions

View File

@ -29,6 +29,7 @@
#include "../dbus/interface.h"
#include "../dbus/error.h"
#include "dbus_iface_control.h"
#define INTERFACE_NAME DBUS_NAME_BASE ".Control"
@ -194,6 +195,16 @@ static void ladish_exit(method_call_t * call_ptr)
g_quit = true;
}
void emit_studio_appeared()
{
signal_new_valist(g_dbus_connection, CONTROL_OBJECT_PATH, INTERFACE_NAME, "StudioAppeared", DBUS_TYPE_INVALID);
}
void emit_studio_disappeared()
{
signal_new_valist(g_dbus_connection, CONTROL_OBJECT_PATH, INTERFACE_NAME, "StudioDisappeared", DBUS_TYPE_INVALID);
}
METHOD_ARGS_BEGIN(GetStudioList)
METHOD_ARG_DESCRIBE("studio_list", "a(sa{sv})", DIRECTION_OUT)
METHOD_ARGS_END
@ -217,7 +228,15 @@ METHODS_BEGIN
METHOD_DESCRIBE(Exit, ladish_exit)
METHODS_END
SIGNAL_ARGS_BEGIN(StudioAppeared)
SIGNAL_ARGS_END
SIGNAL_ARGS_BEGIN(StudioDisappeared)
SIGNAL_ARGS_END
SIGNALS_BEGIN
SIGNAL_DESCRIBE(StudioAppeared)
SIGNAL_DESCRIBE(StudioDisappeared)
SIGNALS_END
/*

View File

@ -28,6 +28,11 @@
#ifndef __LASHD_DBUS_IFACE_CONTROL_H__
#define __LASHD_DBUS_IFACE_CONTROL_H__
#define CONTROL_OBJECT_PATH DBUS_BASE_PATH "/Control"
extern const interface_t g_lashd_interface_control;
void emit_studio_appeared();
void emit_studio_disappeared();
#endif /* __LASHD_DBUS_IFACE_CONTROL_H__ */

View File

@ -431,6 +431,7 @@ on_jack_server_started(
g_studio_ptr->jack_conf_stable = true;
lash_info("jack conf successfully retrieved");
studio_activate(g_studio_ptr);
emit_studio_appeared();
return;
}
}
@ -458,6 +459,7 @@ on_jack_server_stopped(
if (!g_studio_ptr->persisted)
{
emit_studio_disappeared();
studio_destroy(g_studio_ptr);
g_studio_ptr = NULL;
return;

View File

@ -153,7 +153,7 @@ static bool connect_dbus(void)
goto unref_connection;
}
g_control_object = object_path_new(DBUS_BASE_PATH "/Control", NULL, 1, &g_lashd_interface_control, NULL);
g_control_object = object_path_new(CONTROL_OBJECT_PATH, NULL, 1, &g_lashd_interface_control, NULL);
if (g_control_object == NULL)
{
goto unref_connection;
@ -265,6 +265,7 @@ int main(int argc, char ** argv, char ** envp)
if (g_studio_ptr != NULL)
{
studio_destroy(g_studio_ptr);
emit_studio_disappeared();
}
ret = EXIT_SUCCESS;

View File

@ -1,6 +1,7 @@
/*
* LASH
*
* Copyright (C) 2009 Nedko Arnaudov <nedko@arnaudov.name>
* Copyright (C) 2008 Juuso Alasuutari <juuso.alasuutari@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
@ -28,12 +29,13 @@ static void
signal_send(signal_msg_t *signal);
void
signal_new_single(service_t *service,
const char *path,
const char *interface,
const char *name,
int type,
const void *arg)
signal_new_single(
DBusConnection * connection_ptr,
const char * path,
const char * interface,
const char * name,
int type,
const void * arg)
{
signal_msg_t signal;
DBusMessageIter iter;
@ -43,7 +45,7 @@ signal_new_single(service_t *service,
if ((signal.message = dbus_message_new_signal(path, interface, name))) {
dbus_message_iter_init_append(signal.message, &iter);
if (dbus_message_iter_append_basic(&iter, type, arg)) {
signal.connection = service->connection;
signal.connection = connection_ptr;
signal_send(&signal);
} else {
lash_error("Ran out of memory trying to append signal argument");
@ -59,12 +61,13 @@ signal_new_single(service_t *service,
}
void
signal_new_valist (service_t *service,
const char *path,
const char *interface,
const char *name,
int type,
...)
signal_new_valist(
DBusConnection * connection_ptr,
const char * path,
const char * interface,
const char * name,
int type,
...)
{
signal_msg_t signal;
va_list argp;
@ -74,7 +77,7 @@ signal_new_valist (service_t *service,
if ((signal.message = dbus_message_new_signal (path, interface, name))) {
va_start(argp, type);
if (dbus_message_append_args_valist(signal.message, type, argp)) {
signal.connection = service->connection;
signal.connection = connection_ptr;
signal_send(&signal);
} else {
lash_error("Ran out of memory trying to append signal argument(s)");

View File

@ -1,8 +1,8 @@
/*
* LASH
*
* Copyright (C) 2008, 2009 Nedko Arnaudov <nedko@arnaudov.name>
* Copyright (C) 2008 Juuso Alasuutari <juuso.alasuutari@gmail.com>
* Copyright (C) 2008 Nedko Arnaudov
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -45,20 +45,22 @@ struct _signal
};
void
signal_new_single(service_t *service,
const char *path,
const char *interface,
const char *name,
int type,
const void *arg);
signal_new_single(
DBusConnection * connection_ptr,
const char * path,
const char * interface,
const char * name,
int type,
const void * arg);
void
signal_new_valist(service_t *service,
const char *path,
const char *interface,
const char *name,
int type,
...);
signal_new_valist(
DBusConnection * connection_ptr,
const char * path,
const char * interface,
const char * name,
int type,
...);
#define SIGNAL_ARGS_BEGIN(signal_name) \
static const struct _signal_arg signal_name ## _args_dtor[] = \