diff --git a/gui/control.c b/gui/control.c index 9f66e8e6..9198d98d 100644 --- a/gui/control.c +++ b/gui/control.c @@ -127,13 +127,13 @@ void control_proxy_on_studio_disappeared(void) destroy_studio_view(); } -void menu_request_daemon_exit(void) +void menu_request_ladishd_exit(void) { - log_info("Daemon exit request"); + log_info("ladishd exit request"); if (!control_proxy_exit()) { - error_message_box(_("Daemon exit command failed, please inspect logs.")); + error_message_box(_("ladishd exit command failed, please inspect logs.")); } } diff --git a/gui/gladish.ui b/gui/gladish.ui index b3675aef..1b60efd7 100644 --- a/gui/gladish.ui +++ b/gui/gladish.ui @@ -328,7 +328,7 @@ - + Reactivate ladishd GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK image_reactivate_ladishd @@ -336,6 +336,24 @@ True + + + Reactivate jackdbus + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + image_reactivate_jackdbus + False + True + + + + + Reactivate a2jmidid + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + image_reactivate_a2jmidid + False + True + + JACK _Latency @@ -1343,6 +1361,14 @@ along with LADI Session Handler; if not, write to the Free Software Foundation, gtk-refresh True + + gtk-refresh + True + + + gtk-refresh + True + gtk-sort-ascending True diff --git a/gui/jack.c b/gui/jack.c index 6a2141f1..4174a48b 100644 --- a/gui/jack.c +++ b/gui/jack.c @@ -33,7 +33,9 @@ #include "statusbar.h" #include "action.h" #include "../proxies/jack_proxy.h" +#include "../proxies/a2j_proxy.h" #include "gtk_builder.h" +#include "ask_dialog.h" /* JACK states */ #define JACK_STATE_NA 0 @@ -237,6 +239,46 @@ void menu_request_jack_latency_change(uint32_t buffer_size) } } +void menu_request_jackdbus_exit(void) +{ + bool result; + + log_info("jackdbus exit request"); + + if (g_jack_state == JACK_STATE_STARTED) + { + if (!ask_dialog(&result, _("Are you sure"), _("jackdbus will be reactivated. Are you sure?")) || !result) + { + return; + } + } + + if (!jack_proxy_exit()) + { + error_message_box(_("jackdbus exit command failed, please inspect logs.")); + } +} + +void menu_request_a2jmidid_exit(void) +{ + bool result; + + log_info("a2jmidid exit request"); + + if (g_jack_state == JACK_STATE_STARTED) + { + if (!ask_dialog(&result, _("Are you sure"), _("a2jmidid will be reactivated. Are you sure?")) || !result) + { + return; + } + } + + if (!a2j_proxy_exit()) + { + error_message_box(_("a2jmidid exit command failed, please inspect logs.")); + } +} + void menu_request_jack_configure(void) { GError * error_ptr; diff --git a/gui/main.c b/gui/main.c index 46b45712..db543ea7 100644 --- a/gui/main.c +++ b/gui/main.c @@ -29,6 +29,7 @@ #include "gtk_builder.h" #include "canvas.h" #include "../proxies/control_proxy.h" +#include "../proxies/a2j_proxy.h" #include "world_tree.h" #include "graph_view.h" #include "../common/catdup.h" @@ -165,6 +166,11 @@ int main(int argc, char** argv) return 1; } + if (!a2j_proxy_init()) + { + return 1; + } + if (!control_proxy_init()) { return 1; @@ -189,6 +195,7 @@ int main(int argc, char** argv) studio_proxy_uninit(); control_proxy_uninit(); + a2j_proxy_uninit(); uninit_jack(); menu_uninit(); create_room_dialog_uninit(); diff --git a/gui/menu.c b/gui/menu.c index 7a3445f3..0f543af6 100644 --- a/gui/menu.c +++ b/gui/menu.c @@ -41,7 +41,9 @@ static GtkWidget * g_menu_item_rename_studio; static GtkWidget * g_menu_item_create_room; static GtkWidget * g_menu_item_destroy_room; static GtkWidget * g_menu_item_project; -static GtkWidget * g_menu_item_daemon_exit; +static GtkWidget * g_menu_item_ladishd_exit; +static GtkWidget * g_menu_item_jackdbus_exit; +static GtkWidget * g_menu_item_a2jmidid_exit; static GtkWidget * g_menu_item_jack_configure; static GtkWidget * g_menu_item_settings; static GtkCheckMenuItem * g_menu_item_jack_latency_32; @@ -177,7 +179,9 @@ bool menu_init(void) g_menu_item_create_room = get_gtk_builder_widget("menu_item_create_room"); g_menu_item_destroy_room = get_gtk_builder_widget("menu_item_destroy_room"); g_menu_item_project = get_gtk_builder_widget("project_menu_item"); - g_menu_item_daemon_exit = get_gtk_builder_widget("menu_item_daemon_exit"); + g_menu_item_ladishd_exit = get_gtk_builder_widget("menu_item_ladishd_exit"); + g_menu_item_jackdbus_exit = get_gtk_builder_widget("menu_item_jackdbus_exit"); + g_menu_item_a2jmidid_exit = get_gtk_builder_widget("menu_item_a2jmidid_exit"); g_menu_item_jack_configure = get_gtk_builder_widget("menu_item_jack_configure"); g_menu_item_settings = get_gtk_builder_widget("menu_item_settings"); g_menu_item_view_toolbar = get_gtk_builder_widget("menu_item_view_toolbar"); @@ -203,7 +207,9 @@ bool menu_init(void) g_signal_connect(G_OBJECT(g_menu_item_save_studio), "activate", G_CALLBACK(menu_request_save_studio), NULL); g_signal_connect(G_OBJECT(g_menu_item_save_as_studio), "activate", G_CALLBACK(menu_request_save_as_studio), NULL); g_signal_connect(G_OBJECT(g_menu_item_rename_studio), "activate", G_CALLBACK(menu_request_rename_studio), NULL); - g_signal_connect(G_OBJECT(g_menu_item_daemon_exit), "activate", G_CALLBACK(menu_request_daemon_exit), NULL); + g_signal_connect(G_OBJECT(g_menu_item_ladishd_exit), "activate", G_CALLBACK(menu_request_ladishd_exit), NULL); + g_signal_connect(G_OBJECT(g_menu_item_jackdbus_exit), "activate", G_CALLBACK(menu_request_jackdbus_exit), NULL); + g_signal_connect(G_OBJECT(g_menu_item_a2jmidid_exit), "activate", G_CALLBACK(menu_request_a2jmidid_exit), NULL); g_signal_connect(G_OBJECT(g_menu_item_jack_configure), "activate", G_CALLBACK(menu_request_jack_configure), NULL); g_signal_connect(G_OBJECT(g_menu_item_settings), "activate", G_CALLBACK(menu_request_settings), NULL); g_signal_connect(G_OBJECT(g_menu_item_start_app), "activate", G_CALLBACK(menu_request_start_app), NULL); diff --git a/gui/menu.h b/gui/menu.h index eed7ced0..a5449c26 100644 --- a/gui/menu.h +++ b/gui/menu.h @@ -39,7 +39,9 @@ void menu_set_toolbar_visibility(bool visible); void menu_view_activated(bool room); void fill_view_popup_menu(GtkMenu * menu, graph_view_handle view); -void menu_request_daemon_exit(void); +void menu_request_ladishd_exit(void); +void menu_request_jackdbus_exit(void); +void menu_request_a2jmidid_exit(void); void menu_request_jack_configure(void); void menu_request_settings(void); void menu_request_save_studio(void); diff --git a/proxies/a2j_proxy.c b/proxies/a2j_proxy.c index ed23298d..9f3a7ca6 100644 --- a/proxies/a2j_proxy.c +++ b/proxies/a2j_proxy.c @@ -254,3 +254,14 @@ bool a2j_proxy_stop_bridge(void) return true; } + +bool a2j_proxy_exit(void) +{ + if (!dbus_call(0, A2J_SERVICE, A2J_OBJECT, A2J_IFACE_CONTROL, "exit", "", "")) + { + log_error("exit() failed."); + return false; + } + + return true; +} diff --git a/proxies/a2j_proxy.h b/proxies/a2j_proxy.h index 1ccc1047..cdbc2812 100644 --- a/proxies/a2j_proxy.h +++ b/proxies/a2j_proxy.h @@ -45,4 +45,6 @@ bool a2j_proxy_is_started(void); bool a2j_proxy_start_bridge(void); bool a2j_proxy_stop_bridge(void); +bool a2j_proxy_exit(void); + #endif // #ifndef A2J_PROXY_HPP__24525CB1_8AED_4697_8C56_5C57473839CC__INCLUDED diff --git a/proxies/jack_proxy.c b/proxies/jack_proxy.c index df12bec0..3c5fed2c 100644 --- a/proxies/jack_proxy.c +++ b/proxies/jack_proxy.c @@ -628,3 +628,14 @@ bool jack_reset_all_params(void) return jack_proxy_read_conf_container(address, NULL, reset_callback); } + +bool jack_proxy_exit(void) +{ + if (!dbus_call(0, JACKDBUS_SERVICE_NAME, JACKDBUS_OBJECT_PATH, JACKDBUS_IFACE_CONTROL, "Exit", "", "")) + { + log_error("Exit() failed."); + return false; + } + + return true; +} diff --git a/proxies/jack_proxy.h b/proxies/jack_proxy.h index 0bd8ac2e..8946cd75 100644 --- a/proxies/jack_proxy.h +++ b/proxies/jack_proxy.h @@ -135,4 +135,6 @@ jack_proxy_reset_parameter_value( bool jack_reset_all_params(void); +bool jack_proxy_exit(void); + #endif /* #ifndef JACK_PROXY_H__88702EEC_4B82_407F_A664_AD70C1E14D02__INCLUDED */ diff --git a/wscript b/wscript index 06fd66ce..7212abc7 100644 --- a/wscript +++ b/wscript @@ -533,6 +533,7 @@ def build(bld): for source in [ 'jack_proxy.c', + 'a2j_proxy.c', 'graph_proxy.c', 'studio_proxy.c', 'control_proxy.c',