diff --git a/mixer/src/Module.C b/mixer/src/Module.C index 8706bf4..e4d7cf4 100644 --- a/mixer/src/Module.C +++ b/mixer/src/Module.C @@ -700,7 +700,14 @@ Module::menu_cb ( const Fl_Menu_ *m ) if ( ! strcmp( picked, "Edit Parameters" ) ) command_open_parameter_editor(); else if ( ! strcmp( picked, "Bypass" ) ) - bypass( ! ( m->mvalue()->flags & FL_MENU_VALUE ) ); + if ( ! bypassable() ) + { + fl_alert( "Due to its channel configuration, this module cannot be bypassed." ); + } + else + { + bypass( ! ( m->mvalue()->flags & FL_MENU_VALUE ) ); + } else if ( ! strcmp( picked, "Cut" ) ) { copy(); @@ -818,8 +825,15 @@ Module::handle ( int m ) } else if ( test_press( FL_BUTTON2 ) ) { - bypass( !bypass() ); - redraw(); + if ( !bypassable() ) + { + fl_alert( "Due to its channel configuration, this module cannot be bypassed." ); + } + else + { + bypass( !bypass() ); + redraw(); + } return 1; } diff --git a/mixer/src/Module.H b/mixer/src/Module.H index 7ac0bbe..24bd8e2 100644 --- a/mixer/src/Module.H +++ b/mixer/src/Module.H @@ -354,6 +354,12 @@ public: virtual bool bypass ( void ) const { return _bypass; } virtual void bypass ( bool v ) { _bypass = v; redraw(); } + virtual bool bypassable ( void ) const + { + return ninputs() == noutputs() || + ( ninputs() == 1 && noutputs() == 2 ); + } + int control_input_port_index ( Port *p ) { for ( nframes_t i = control_input.size(); i--; )