From 375c2c2d6207763ff3ac8d7fb289b2b5ea1f8d54 Mon Sep 17 00:00:00 2001 From: Colin Guthrie Date: Sun, 28 Jun 2009 15:57:59 +0100 Subject: Add support for the device-manager module. Currently this module only really allows for devices to be renamed, so we add a new dialog that can be activated by right clicking on devices (i.e. sinks/sources). This dialog allows you to enter a new name which will be set via the extension provided by the device-manager module. Future work will allow you to manage (i.e. rename, delete etc) offline devices too. --- src/devicewidget.cc | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) (limited to 'src/devicewidget.cc') diff --git a/src/devicewidget.cc b/src/devicewidget.cc index e249944..26c5c98 100644 --- a/src/devicewidget.cc +++ b/src/devicewidget.cc @@ -22,9 +22,14 @@ #include #endif +#include + +#include "mainwindow.h" #include "devicewidget.h" #include "channelwidget.h" +#include "i18n.h" + /*** DeviceWidget ***/ DeviceWidget::DeviceWidget(BaseObjectType* cobject, const Glib::RefPtr& x) : MinimalStreamWidget(cobject, x) { @@ -35,9 +40,15 @@ DeviceWidget::DeviceWidget(BaseObjectType* cobject, const Glib::RefPtrget_widget("portSelect", portSelect); x->get_widget("portList", portList); + this->signal_button_press_event().connect(sigc::mem_fun(*this, &DeviceWidget::onContextTriggerEvent)); muteToggleButton->signal_clicked().connect(sigc::mem_fun(*this, &DeviceWidget::onMuteToggleButton)); defaultToggleButton->signal_clicked().connect(sigc::mem_fun(*this, &DeviceWidget::onDefaultToggleButton)); + rename.set_label(_("Rename Device...")); + rename.signal_activate().connect(sigc::mem_fun(*this, &DeviceWidget::renamePopup)); + contextMenu.append(rename); + contextMenu.show_all(); + treeModel = Gtk::ListStore::create(portModel); portList->set_model(treeModel); portList->pack_start(portModel.desc); @@ -48,6 +59,11 @@ DeviceWidget::DeviceWidget(BaseObjectType* cobject, const Glib::RefPtrhide(); } + +bool DeviceWidget::onContextTriggerEvent(GdkEventButton* event) { + if (GDK_BUTTON_PRESS == event->type && 3 == event->button) { + contextMenu.popup(event->button, event->time); + return true; + } + + return false; +} + +void DeviceWidget::renamePopup() { + if (updating) + return; + + if (!mpMainWindow->canRenameDevices) { + Gtk::MessageDialog dialog( + *mpMainWindow, + _("Sorry, but device renaming is not supported."), + false, + Gtk::MESSAGE_WARNING, + Gtk::BUTTONS_OK, + true); + dialog.set_secondary_text(_("You need to load module-device-manager in the PulseAudio server in order to rename devices")); + dialog.run(); + return; + } + + Gtk::Dialog* dialog; + Gtk::Entry* renameText; + + Glib::RefPtr x = Gnome::Glade::Xml::create(GLADE_FILE, "renameDialog"); + x->get_widget("renameDialog", dialog); + x->get_widget("renameText", renameText); + + renameText->set_text(description); + dialog->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); + dialog->add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK); + dialog->set_default_response(Gtk::RESPONSE_OK); + if (Gtk::RESPONSE_OK == dialog->run()) { + pa_operation* o; + pa_ext_device_manager_info info[1]; + gchar *key = g_markup_printf_escaped("%s:%s", mDeviceType.c_str(), name.c_str()); + info[0].name = key; + info[0].description = renameText->get_text().c_str(); + + if (!(o = pa_ext_device_manager_write(get_context(), PA_UPDATE_MERGE, info, 1, 1, NULL, NULL))) { + show_error(_("pa_ext_device_manager_write() failed")); + return; + } + pa_operation_unref(o); + g_free(key); + } + delete dialog; +} -- cgit