Studio renamed signal
This commit is contained in:
parent
d6096db1dd
commit
03bb0b477d
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
16
gui/main.c
16
gui/main.c
|
@ -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();
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue