diff options
Diffstat (limited to 'src/sinkinputwidget.h')
-rw-r--r-- | src/sinkinputwidget.h | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/sinkinputwidget.h b/src/sinkinputwidget.h index 503c67c..b48a802 100644 --- a/src/sinkinputwidget.h +++ b/src/sinkinputwidget.h @@ -31,6 +31,7 @@ class SinkInputWidget : public StreamWidget { public: SinkInputWidget(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& x); static SinkInputWidget* create(MainWindow* mainWindow); + ~SinkInputWidget(void); void init(MainWindow* mainWindow); @@ -40,7 +41,7 @@ public: void setSinkIndex(uint32_t idx); uint32_t sinkIndex(); virtual void executeVolumeUpdate(); - virtual void onDeviceChange(); + virtual bool onDeviceChangePopup(GdkEventButton*); virtual void onMuteToggleButton(); virtual void onKill(); @@ -48,6 +49,28 @@ private: MainWindow *mpMainWindow; uint32_t mSinkIndex; + void clearMenu(); + void buildMenu(); + + Gtk::Menu menu; + + struct SinkMenuItem { + SinkMenuItem(SinkInputWidget *w, const char *label, uint32_t i, bool active) : + widget(w), + menuItem(label), + index(i) { + menuItem.set_active(active); + menuItem.set_draw_as_radio(true); + menuItem.signal_toggled().connect(sigc::mem_fun(*this, &SinkMenuItem::onToggle)); + } + + SinkInputWidget *widget; + Gtk::CheckMenuItem menuItem; + uint32_t index; + void onToggle(); + }; + + std::map<uint32_t, SinkMenuItem*> sinkMenuItems; }; #endif |