summaryrefslogtreecommitdiffstats
path: root/src/devicewidget.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/devicewidget.cc')
-rw-r--r--src/devicewidget.cc70
1 files changed, 70 insertions, 0 deletions
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 <config.h>
#endif
+#include <pulse/ext-device-manager.h>
+
+#include "mainwindow.h"
#include "devicewidget.h"
#include "channelwidget.h"
+#include "i18n.h"
+
/*** DeviceWidget ***/
DeviceWidget::DeviceWidget(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& x) :
MinimalStreamWidget(cobject, x) {
@@ -35,9 +40,15 @@ DeviceWidget::DeviceWidget(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Gl
x->get_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::RefPtr<Gnome::Gl
channelWidgets[i] = NULL;
}
+void DeviceWidget::init(MainWindow* mainWindow, Glib::ustring deviceType) {
+ mpMainWindow = mainWindow;
+ mDeviceType = deviceType;
+}
+
void DeviceWidget::setChannelMap(const pa_channel_map &m, bool can_decibel) {
channelMap = m;
@@ -151,3 +167,57 @@ void DeviceWidget::prepareMenu() {
else
portSelect->hide();
}
+
+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<Gnome::Glade::Xml> 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;
+}