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/interface.h"
#include "../dbus/error.h" #include "../dbus/error.h"
#include "dbus_iface_control.h"
#define INTERFACE_NAME DBUS_NAME_BASE ".Control" #define INTERFACE_NAME DBUS_NAME_BASE ".Control"
@ -194,6 +195,16 @@ static void ladish_exit(method_call_t * call_ptr)
g_quit = true; 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_ARGS_BEGIN(GetStudioList)
METHOD_ARG_DESCRIBE("studio_list", "a(sa{sv})", DIRECTION_OUT) METHOD_ARG_DESCRIBE("studio_list", "a(sa{sv})", DIRECTION_OUT)
METHOD_ARGS_END METHOD_ARGS_END
@ -217,7 +228,15 @@ METHODS_BEGIN
METHOD_DESCRIBE(Exit, ladish_exit) METHOD_DESCRIBE(Exit, ladish_exit)
METHODS_END METHODS_END
SIGNAL_ARGS_BEGIN(StudioAppeared)
SIGNAL_ARGS_END
SIGNAL_ARGS_BEGIN(StudioDisappeared)
SIGNAL_ARGS_END
SIGNALS_BEGIN SIGNALS_BEGIN
SIGNAL_DESCRIBE(StudioAppeared)
SIGNAL_DESCRIBE(StudioDisappeared)
SIGNALS_END SIGNALS_END
/* /*

View File

@ -28,6 +28,11 @@
#ifndef __LASHD_DBUS_IFACE_CONTROL_H__ #ifndef __LASHD_DBUS_IFACE_CONTROL_H__
#define __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; extern const interface_t g_lashd_interface_control;
void emit_studio_appeared();
void emit_studio_disappeared();
#endif /* __LASHD_DBUS_IFACE_CONTROL_H__ */ #endif /* __LASHD_DBUS_IFACE_CONTROL_H__ */

View File

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

View File

@ -153,7 +153,7 @@ static bool connect_dbus(void)
goto unref_connection; 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) if (g_control_object == NULL)
{ {
goto unref_connection; goto unref_connection;
@ -265,6 +265,7 @@ int main(int argc, char ** argv, char ** envp)
if (g_studio_ptr != NULL) if (g_studio_ptr != NULL)
{ {
studio_destroy(g_studio_ptr); studio_destroy(g_studio_ptr);
emit_studio_disappeared();
} }
ret = EXIT_SUCCESS; ret = EXIT_SUCCESS;

View File

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

View File

@ -1,8 +1,8 @@
/* /*
* LASH * LASH
* *
* Copyright (C) 2008, 2009 Nedko Arnaudov <nedko@arnaudov.name>
* Copyright (C) 2008 Juuso Alasuutari <juuso.alasuutari@gmail.com> * 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 * 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 * it under the terms of the GNU General Public License as published by
@ -45,7 +45,8 @@ struct _signal
}; };
void void
signal_new_single(service_t *service, signal_new_single(
DBusConnection * connection_ptr,
const char * path, const char * path,
const char * interface, const char * interface,
const char * name, const char * name,
@ -53,7 +54,8 @@ signal_new_single(service_t *service,
const void * arg); const void * arg);
void void
signal_new_valist(service_t *service, signal_new_valist(
DBusConnection * connection_ptr,
const char * path, const char * path,
const char * interface, const char * interface,
const char * name, const char * name,