Studio renamed signal

This commit is contained in:
Nedko Arnaudov 2009-08-23 12:58:01 +03:00
parent d6096db1dd
commit 03bb0b477d
8 changed files with 166 additions and 6 deletions

View File

@ -746,6 +746,11 @@ bool studio_load(const char * file_path)
return false; /* not implemented yet */
}
void emit_studio_renamed()
{
signal_new_valist(g_dbus_connection, STUDIO_OBJECT_PATH, IFACE_STUDIO, "StudioRenamed", DBUS_TYPE_STRING, &g_studio.name, DBUS_TYPE_INVALID);
}
static void ladish_get_studio_name(method_call_t * call_ptr)
{
method_return_new_single(call_ptr, DBUS_TYPE_STRING, &g_studio.name);
@ -774,6 +779,7 @@ static void ladish_rename_studio(method_call_t * call_ptr)
g_studio.name = new_name_dup;
method_return_new_void(call_ptr);
emit_studio_renamed();
}
static void ladish_save_studio(method_call_t * call_ptr)
@ -799,6 +805,10 @@ METHODS_BEGIN
METHOD_DESCRIBE(Save, ladish_save_studio)
METHODS_END
SIGNAL_ARGS_BEGIN(StudioRenamed, "Studio name changed")
SIGNAL_ARG_DESCRIBE("studio_name", "s", "New studio name")
SIGNAL_ARGS_END
SIGNAL_ARGS_BEGIN(RoomAppeared, "Room D-Bus object appeared")
SIGNAL_ARG_DESCRIBE("room_path", "s", "room object path")
SIGNAL_ARGS_END
@ -808,6 +818,7 @@ SIGNAL_ARGS_BEGIN(RoomDisappeared, "Room D-Bus object disappeared")
SIGNAL_ARGS_END
SIGNALS_BEGIN
SIGNAL_DESCRIBE(StudioRenamed)
SIGNAL_DESCRIBE(RoomAppeared)
SIGNAL_DESCRIBE(RoomDisappeared)
SIGNALS_END

View File

@ -41,13 +41,13 @@ struct graph_view
struct list_head g_views;
GtkScrolledWindow * g_main_scrolledwin;
graph_canvas_handle g_current_graph_canvas;
static struct graph_view * g_current_view;
void view_init(void)
{
g_main_scrolledwin = GTK_SCROLLED_WINDOW(get_glade_widget("main_scrolledwin"));
INIT_LIST_HEAD(&g_views);
g_current_graph_canvas = NULL;
g_current_view = NULL;
}
bool create_view(const char * name, const char * service, const char * object, bool force_activate, graph_view_handle * handle_ptr)
@ -130,7 +130,7 @@ static void attach_canvas(struct graph_view * view_ptr)
gtk_container_remove(GTK_CONTAINER(g_main_scrolledwin), child);
}
g_current_graph_canvas = view_ptr->graph_canvas;
g_current_view = view_ptr;
gtk_container_add(GTK_CONTAINER(g_main_scrolledwin), view_ptr->canvas_widget);
//_canvas->scroll_to(static_cast<int>(_canvas->width()/2 - 320), static_cast<int>(_canvas->height()/2 - 240)); // FIXME: hardcoded
@ -146,7 +146,7 @@ static void detach_canvas(struct graph_view * view_ptr)
if (child == view_ptr->canvas_widget)
{
gtk_container_remove(GTK_CONTAINER(g_main_scrolledwin), view_ptr->canvas_widget);
g_current_graph_canvas = NULL;
g_current_view = NULL;
}
}
@ -182,12 +182,36 @@ const char * get_view_name(graph_view_handle view)
return view_ptr->name;
}
bool set_view_name(graph_view_handle view, const char * cname)
{
char * name;
name = strdup(cname);
if (name == NULL)
{
lash_error("strdup() failed for \"%s\"", name);
return false;
}
free(view_ptr->name);
view_ptr->name = name;
world_tree_name_changed(view);
if (g_current_view == view_ptr)
{
set_main_window_title(view);
}
return true;
}
canvas_handle get_current_canvas()
{
if (g_current_graph_canvas == NULL)
if (g_current_view == NULL)
{
return NULL;
}
return graph_canvas_get_canvas(g_current_graph_canvas);
return graph_canvas_get_canvas(g_current_view->graph_canvas);
}

View File

@ -36,6 +36,7 @@ bool create_view(const char * name, const char * service, const char * object, b
void destroy_view(graph_view_handle view);
void activate_view(graph_view_handle view);
const char * get_view_name(graph_view_handle view);
bool set_view_name(graph_view_handle view, const char * name);
canvas_handle get_current_canvas();
/* not very good place for this prototype, because it is not implemented in graph_view.c */

View File

@ -294,6 +294,14 @@ void control_proxy_on_studio_disappeared(void)
}
}
static void on_studio_renamed(const char * new_studio_name)
{
if (g_studio_view != NULL)
{
set_view_name(g_studio_view, new_studio_name);
}
}
void jack_started(void)
{
lash_info("JACK started");
@ -390,6 +398,13 @@ int main(int argc, char** argv)
return 1;
}
if (!studio_proxy_init())
{
return 1;
}
studio_proxy_set_renamed_callback(on_studio_renamed);
set_buffer_size_combo_width();
g_signal_connect(G_OBJECT(g_main_win), "destroy", G_CALLBACK(gtk_main_quit), NULL);
@ -408,6 +423,7 @@ int main(int argc, char** argv)
gtk_main();
studio_proxy_uninit();
control_proxy_uninit();
uninit_glade();

View File

@ -490,3 +490,13 @@ void world_tree_activate(graph_view_handle view)
gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(g_world_tree_widget)), &iter);
}
}
void world_tree_name_changed(graph_view_handle view)
{
GtkTreeIter iter;
if (find_view(view, &iter))
{
gtk_tree_store_set(g_treestore, &iter, COL_NAME, get_view_name(view), -1);
}
}

View File

@ -34,5 +34,6 @@ void world_tree_init(void);
void world_tree_add(graph_view_handle view, bool force_activate);
void world_tree_remove(graph_view_handle view);
void world_tree_activate(graph_view_handle view);
void world_tree_name_changed(graph_view_handle view);
#endif // #ifndef WORLD_TREE_H__D786489B_E400_4E92_85C7_2BAE606DE56D__INCLUDED

View File

@ -29,6 +29,95 @@
#include "dbus_constants.h"
#include "dbus/helpers.h"
static void (* g_renamed_callback)(const char * new_studio_name) = NULL;
static const char * g_signals[] =
{
"StudioRenamed",
"RoomAppeared",
"RoomDisappeared",
NULL
};
static DBusHandlerResult message_hook(DBusConnection * connection, DBusMessage * message, void * data)
{
const char * object_path;
char * name;
object_path = dbus_message_get_path(message);
if (object_path == NULL || strcmp(object_path, STUDIO_OBJECT_PATH) != 0)
{
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
if (dbus_message_is_signal(message, IFACE_STUDIO, "StudioRenamed"))
{
if (!dbus_message_get_args(message, &g_dbus_error, DBUS_TYPE_STRING, &name, DBUS_TYPE_INVALID))
{
lash_error("Invalid parameters of StudioRenamed signal: %s", g_dbus_error.message);
dbus_error_free(&g_dbus_error);
}
else
{
lash_info("StudioRenamed");
if (g_renamed_callback != NULL)
{
g_renamed_callback(name);
}
}
return DBUS_HANDLER_RESULT_HANDLED;
}
if (dbus_message_is_signal(message, IFACE_STUDIO, "RoomAppeared"))
{
lash_info("RoomAppeared");
return DBUS_HANDLER_RESULT_HANDLED;
}
if (dbus_message_is_signal(message, IFACE_STUDIO, "RoomDisappeared"))
{
lash_info("RoomDisappeared");
return DBUS_HANDLER_RESULT_HANDLED;
}
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
bool studio_proxy_init(void)
{
if (!dbus_register_object_signal_handler(
g_dbus_connection,
SERVICE_NAME,
STUDIO_OBJECT_PATH,
IFACE_STUDIO,
g_signals,
message_hook,
NULL))
{
lash_error("studio_object_path() failed");
return false;
}
return true;
}
void studio_proxy_uninit(void)
{
if (!dbus_unregister_object_signal_handler(
g_dbus_connection,
SERVICE_NAME,
STUDIO_OBJECT_PATH,
IFACE_STUDIO,
g_signals,
message_hook,
NULL))
{
lash_error("studio_object_path() failed");
}
}
bool studio_proxy_get_name(char ** name_ptr)
{
const char * name;
@ -56,3 +145,8 @@ bool studio_proxy_save(void)
{
return dbus_call_simple(SERVICE_NAME, STUDIO_OBJECT_PATH, IFACE_STUDIO, "Save", "", "");
}
void studio_proxy_set_renamed_callback(void (* callback)(const char * new_studio_name))
{
g_renamed_callback = callback;
}

View File

@ -28,8 +28,11 @@
#ifndef STUDIO_PROXY_H__2CEC623F_C998_4618_A947_D1A0016DF978__INCLUDED
#define STUDIO_PROXY_H__2CEC623F_C998_4618_A947_D1A0016DF978__INCLUDED
bool studio_proxy_init(void);
void studio_proxy_uninit(void);
bool studio_proxy_get_name(char ** name);
bool studio_proxy_rename(const char * name);
bool studio_proxy_save(void);
void studio_proxy_set_renamed_callback(void (* callback)(const char * new_studio_name));
#endif /* #ifndef STUDIO_PROXY_H__2CEC623F_C998_4618_A947_D1A0016DF978__INCLUDED */