remove "port sources" management from MidiControlUI and Mackie support.
authorPaul Davis <paul@linuxaudiosystems.com>
Mon, 24 Nov 2014 20:21:19 +0000 (22:21 +0200)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 26 Nov 2014 16:22:22 +0000 (18:22 +0200)
    This was necessary due to a bug/design issue between Glibmm and Glib (see https://bugzilla.gnome.org/show_bug.cgi?id=561885)
 but the problem needs to be managed by the *creator* of the IOSource and that has now moved inside CrossThreadChannel.

libs/ardour/ardour/midi_ui.h
libs/ardour/midi_ui.cc
libs/surfaces/mackie/mackie_control_protocol.cc
libs/surfaces/mackie/mackie_control_protocol.h

index 85a8a15e21b135801f7dd4f83c280bed0a48836b..9b9ed1153a8d0dca2894c00da831c19fda8c7516 100644 (file)
@@ -59,8 +59,6 @@ class LIBARDOUR_API MidiControlUI : public AbstractUI<MidiUIRequest>
        void do_request (MidiUIRequest*);
 
   private:
-       typedef std::list<GSource*> PortSources;
-       PortSources port_sources;
        ARDOUR::Session& _session;
 
        bool midi_input_handler (Glib::IOCondition, AsyncMIDIPort*);
index d5a0b2b4444a97d117d749bce913678aaca93257..ecdcb303e88404b595fafe29a1053fbdc4f1d37e 100644 (file)
@@ -97,21 +97,11 @@ MidiControlUI::midi_input_handler (IOCondition ioc, AsyncMIDIPort* port)
 void
 MidiControlUI::clear_ports ()
 {
-       for (PortSources::iterator i = port_sources.begin(); i != port_sources.end(); ++i) {
-               g_source_destroy (*i);
-               g_source_unref (*i);
-       }
-
-       port_sources.clear ();
 }
 
 void
 MidiControlUI::reset_ports ()
 {
-       if (!port_sources.empty()) {
-               return;
-       }
-       
        vector<AsyncMIDIPort*> ports;
        AsyncMIDIPort* p;
        
@@ -139,11 +129,6 @@ MidiControlUI::reset_ports ()
                if (psrc) {
                        psrc->connect (sigc::bind (sigc::mem_fun (this, &MidiControlUI::midi_input_handler), *pi));
                        psrc->attach (_main_loop->get_context());
-                       
-                       // glibmm hack: for now, store only the GSource*
-                       
-                       port_sources.push_back (psrc->gobj());
-                       g_source_ref (psrc->gobj());
                }
        }
 }
index 563ca14d7d41a9661748e99728c50128e742d429..0e87c3a1e130a2dd49b39929303e73999ff1c947 100644 (file)
@@ -753,11 +753,6 @@ MackieControlProtocol::create_surfaces ()
 
                        psrc->connect (sigc::bind (sigc::mem_fun (this, &MackieControlProtocol::midi_input_handler), &input_port));
                        psrc->attach (main_loop()->get_context());
-                       
-                       // glibmm hack: for now, store only the GSource*
-
-                       port_sources.push_back (psrc->gobj());
-                       g_source_ref (psrc->gobj());
 
                } else {
 
@@ -1334,13 +1329,6 @@ MackieControlProtocol::clear_ports ()
                _input_bundle->remove_channels ();
                _output_bundle->remove_channels ();
        }
-
-       for (PortSources::iterator i = port_sources.begin(); i != port_sources.end(); ++i) {
-               g_source_destroy (*i);
-               g_source_unref (*i);
-       }
-
-       port_sources.clear ();
 }
 
 void
index 270bb6a744b49afd2c55bd6ec70b723275663f15..13ca3811540e4894cc99e1f2ea527934f650a5f2 100644 (file)
@@ -255,7 +255,6 @@ class MackieControlProtocol
        };
 
        typedef std::map<Mackie::Button::ID,ButtonHandlers> ButtonMap;
-       typedef std::list<GSource*> PortSources;
 
        static MackieControlProtocol* _instance;
        
@@ -284,7 +283,6 @@ class MackieControlProtocol
        ViewMode                 _view_mode;
        int                      _current_selected_track;
        int                      _modifier_state;
-       PortSources               port_sources;
        ButtonMap                 button_map;
        int16_t                  _ipmidi_base;
        bool                      needs_ipmidi_restart;