Don't assume studio is stopped when it is present initially. Fixes #48

This commit is contained in:
Nedko Arnaudov 2009-12-26 14:45:50 +02:00
parent 617158f6f9
commit 9aa1d74a7e
5 changed files with 36 additions and 5 deletions

View File

@ -623,11 +623,27 @@ void control_proxy_on_daemon_disappeared(bool clean_exit)
g_ladishd_poll_source_tag = g_timeout_add(500, poll_ladishd, NULL);
}
void control_proxy_on_studio_appeared(void)
void control_proxy_on_studio_appeared(bool initial)
{
char * name;
char * name;
bool started;
g_studio_state = STUDIO_STATE_STOPPED;
if (initial)
{
if (!studio_proxy_is_started(&started))
{
log_error("intially, studio is present but is_started() check failed.");
return;
}
if (started)
{
g_studio_state = STUDIO_STATE_STARTED;
}
}
if (studio_state_changed(&name))
{
if (g_studio_view != NULL)

View File

@ -32,7 +32,7 @@ static bool g_clean_exit;
static void on_studio_appeared(void * context, DBusMessage * message_ptr)
{
log_info("StudioAppeared");
control_proxy_on_studio_appeared();
control_proxy_on_studio_appeared(false);
}
static void on_studio_disappeared(void * context, DBusMessage * message_ptr)
@ -106,7 +106,7 @@ bool control_proxy_init(void)
if (studio_present)
{
log_info("Initial studio appear");
control_proxy_on_studio_appeared();
control_proxy_on_studio_appeared(true);
}
if (!dbus_register_object_signal_hooks(g_dbus_connection, SERVICE_NAME, CONTROL_OBJECT_PATH, IFACE_CONTROL, NULL, g_signal_hooks))

View File

@ -34,7 +34,7 @@ bool control_proxy_init(void);
void control_proxy_uninit(void);
void control_proxy_on_daemon_appeared(void);
void control_proxy_on_daemon_disappeared(bool clean_exit);
void control_proxy_on_studio_appeared(void);
void control_proxy_on_studio_appeared(bool initial);
void control_proxy_on_studio_disappeared(void);
bool control_proxy_get_studio_list(void (* callback)(void * context, const char * studio_name), void * context);
bool control_proxy_new_studio(const char * studio_name);

View File

@ -181,3 +181,17 @@ bool studio_proxy_stop(void)
{
return dbus_call(SERVICE_NAME, STUDIO_OBJECT_PATH, IFACE_STUDIO, "Stop", "", "");
}
bool studio_proxy_is_started(bool * is_started_ptr)
{
dbus_bool_t is_started;
if (!dbus_call(SERVICE_NAME, STUDIO_OBJECT_PATH, IFACE_STUDIO, "IsStarted", "", "b", &is_started))
{
return false;
}
*is_started_ptr = is_started;
return true;
}

View File

@ -41,5 +41,6 @@ void studio_proxy_set_renamed_callback(void (* callback)(const char * new_studio
void studio_proxy_set_startstop_callbacks(void (* started_callback)(void), void (* stopped_callback)(void), void (* crashed_callback)(void));
bool studio_proxy_start(void);
bool studio_proxy_stop(void);
bool studio_proxy_is_started(bool * is_started_ptr);
#endif /* #ifndef STUDIO_PROXY_H__2CEC623F_C998_4618_A947_D1A0016DF978__INCLUDED */