app supervisor for rooms

This commit is contained in:
Nedko Arnaudov 2010-04-03 12:16:20 +03:00
parent 866d24baaf
commit bbb8d20a1e
4 changed files with 34 additions and 4 deletions

View File

@ -28,6 +28,7 @@
#include "../dbus_constants.h"
#include "graph_dict.h"
#include "../lib/wkports.h"
#include "app_supervisor.h"
struct ladish_room
{
@ -37,10 +38,16 @@ struct ladish_room
uuid_t template_uuid;
dbus_object_path dbus_object;
ladish_graph_handle graph;
ladish_app_supervisor_handle app_supervisor;
};
extern const struct dbus_interface_descriptor g_interface_room;
static void on_app_renamed(const char * old_name, const char * new_app_name)
{
/* TODO */
}
bool
ladish_room_create(
const uuid_t uuid_ptr,
@ -105,17 +112,23 @@ ladish_room_create(
if (object_path)
{
if (!ladish_app_supervisor_create(&room_ptr->app_supervisor, object_path, room_ptr->name, on_app_renamed))
{
log_error("ladish_app_supervisor_create() failed.");
goto destroy_graph;
}
room_ptr->dbus_object = dbus_object_path_new(
object_path,
&g_interface_room, room_ptr,
&g_interface_patchbay, ladish_graph_get_dbus_context(room_ptr->graph),
&g_iface_graph_dict, room_ptr->graph,
//&g_iface_app_supervisor, room_ptr->app_supervisor,
&g_iface_app_supervisor, room_ptr->app_supervisor,
NULL);
if (room_ptr->dbus_object == NULL)
{
log_error("dbus_object_path_new() failed");
goto destroy_graph;
goto destroy_app_supervisor;
}
if (!dbus_object_path_register(g_dbus_connection, room_ptr->dbus_object))
@ -129,6 +142,7 @@ ladish_room_create(
else
{
room_ptr->dbus_object = NULL;
room_ptr->app_supervisor = NULL;
}
*room_handle_ptr = (ladish_room_handle)room_ptr;
@ -136,6 +150,8 @@ ladish_room_create(
destroy_dbus_object:
dbus_object_path_destroy(g_dbus_connection, room_ptr->dbus_object);
destroy_app_supervisor:
ladish_app_supervisor_destroy(room_ptr->app_supervisor);
destroy_graph:
ladish_graph_destroy(room_ptr->graph, true);
free_name:
@ -157,6 +173,11 @@ ladish_room_destroy(
dbus_object_path_destroy(g_dbus_connection, room_ptr->dbus_object);
}
if (room_ptr->app_supervisor != NULL)
{
ladish_app_supervisor_destroy(room_ptr->app_supervisor);
}
ladish_graph_destroy(room_ptr->graph, true);
free(room_ptr->name);
free(room_ptr);

View File

@ -302,6 +302,11 @@ const char * get_current_view_room_name(void)
return g_current_view->name;
}
graph_view_handle get_current_view(void)
{
return (graph_view_handle)g_current_view;
}
bool is_room_view(graph_view_handle view)
{
return strcmp(graph_proxy_get_object(view_ptr->graph), STUDIO_OBJECT_PATH) != 0;

View File

@ -49,6 +49,7 @@ void activate_view(graph_view_handle view);
const char * get_view_name(graph_view_handle view);
const char * get_view_opath(graph_view_handle view);
bool set_view_name(graph_view_handle view, const char * name);
graph_view_handle get_current_view(void);
canvas_handle get_current_canvas(void);
const char * get_current_view_room_name(void);
bool is_room_view(graph_view_handle view);

View File

@ -468,6 +468,7 @@ void error_message_box(const char * failed_operation)
void run_custom_command_dialog(void)
{
graph_view_handle view;
guint result;
GtkEntry * command_entry = GTK_ENTRY(get_gtk_builder_widget("app_command_entry"));
GtkEntry * name_entry = GTK_ENTRY(get_gtk_builder_widget("app_name_entry"));
@ -478,6 +479,8 @@ void run_custom_command_dialog(void)
GtkToggleButton * level3_button = GTK_TOGGLE_BUTTON(get_gtk_builder_widget("app_level3"));
uint8_t level;
view = get_current_view();
gtk_entry_set_text(name_entry, "");
gtk_entry_set_text(command_entry, "");
gtk_toggle_button_set_active(terminal_button, FALSE);
@ -520,7 +523,7 @@ void run_custom_command_dialog(void)
log_info("'%s':'%s' %s level %"PRIu8, gtk_entry_get_text(name_entry), gtk_entry_get_text(command_entry), gtk_toggle_button_get_active(terminal_button) ? "terminal" : "shell", level);
if (!app_run_custom(
g_studio_view,
view,
gtk_entry_get_text(command_entry),
gtk_entry_get_text(name_entry),
gtk_toggle_button_get_active(terminal_button),
@ -1010,7 +1013,7 @@ static void room_appeared(const char * opath, const char * name, const char * te
log_info("room \"%s\" appeared (%s). template is \"%s\"", name, opath, template);
if (!create_view(name, SERVICE_NAME, opath, true, false, false, &graph_view))
if (!create_view(name, SERVICE_NAME, opath, true, true, false, &graph_view))
{
log_error("create_view() failed for room \"%s\"", name);
}