diff --git a/CMakeLists.txt b/CMakeLists.txt index 82469ad..d038037 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,7 @@ PROJECT(jsweeper) INCLUDE( ${CMAKE_ROOT}/Modules/FindPkgConfig.cmake ) INCLUDE( ${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake ) +INCLUDE( CheckLibraryExists) pkg_check_modules(JACK jack>=0.118) pkg_check_modules(GTKMM gtkmm-2.4>=2.4) @@ -60,6 +61,11 @@ INCLUDE_DIRECTORIES( ${PCRE_INCLUDE_DIRS} ) +CHECK_LIBRARY_EXISTS(jack jack_set_port_rename_callback ${JACK_INCLUDE_DIRS}/jack.h RENAME_FOUND) +IF (RENAME_FOUND) + ADD_DEFINITIONS(-DHAVE_RENAME) +ENDIF() + ADD_DEFINITIONS(-Wall -Wextra -ansi -pedantic) ADD_EXECUTABLE(jsweeper ${SOURCES}) diff --git a/src/gui.cpp b/src/gui.cpp index 8c69fcf..aa03e21 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -24,9 +24,10 @@ Gui::Gui(BaseObjectType *cobject, const Glib::RefPtr &builder) Refresh(); Glib::signal_timeout().connect(sigc::mem_fun(*this, &Gui::on_timeout), 50); -#ifndef HAVE_RENAME - Glib::signal_timeout().connect(sigc::mem_fun(*this, &Gui::on_timeout_2), 1000); -#endif + + if (!jack_set_port_rename_callback) { + Glib::signal_timeout().connect(sigc::mem_fun(*this, &Gui::on_timeout_2), 1000); + } Glib::RefPtr uim = Glib::RefPtr::cast_static(builder->get_object("uimanager1")); uim->get_action("/menubar1/menuitem1/menu_quit")->signal_activate().connect(sigc::mem_fun(*this, &Gui::on_quit)); @@ -176,7 +177,6 @@ bool Gui::on_timeout() return true; } -#ifndef HAVE_RENAME bool Gui::on_timeout_2() { if (m_closing) return false; @@ -188,7 +188,6 @@ bool Gui::on_timeout_2() return true; } -#endif void Gui::on_notebook_switch_page(GtkNotebookPage * /* page */, guint /* page_num */) { diff --git a/src/gui.h b/src/gui.h index f020db9..1b8a0f6 100644 --- a/src/gui.h +++ b/src/gui.h @@ -30,9 +30,7 @@ public: protected: bool on_timeout(); -#ifndef HAVE_RENAME bool on_timeout_2(); -#endif void on_notebook_switch_page(GtkNotebookPage * /* page */, guint /* page_num */); void on_quit(); diff --git a/src/jack.cpp b/src/jack.cpp index a34bd34..87a9099 100644 --- a/src/jack.cpp +++ b/src/jack.cpp @@ -37,11 +37,9 @@ void JackDriver::Connect() jack_on_shutdown(m_client, &ShutdownCallbackHandler, this); jack_set_port_registration_callback(m_client, &PortRegistrationCallbackHandler, this); jack_set_port_connect_callback(m_client, &PortConnectCallbackHandler, this); -#ifdef HAVE_RENAME if (jack_set_port_rename_callback) { jack_set_port_rename_callback(m_client, &PortRenameCallbackHandler, this); } -#endif jack_activate(m_client); diff --git a/src/jack.h b/src/jack.h index 95da3b5..c700d6a 100644 --- a/src/jack.h +++ b/src/jack.h @@ -5,6 +5,11 @@ #include #include +#ifndef HAVE_RENAME +typedef int (*JackPortRenameCallback)(jack_port_id_t port, const char* old_name, const char* new_name, void *arg); +int jack_set_port_rename_callback (jack_client_t *, JackPortRenameCallback rename_callback, void *arg) __attribute__((__weak__)); +#endif + enum PortEventType { PET_REGISTER, diff --git a/src/port.h b/src/port.h index 414c90f..0a558fd 100644 --- a/src/port.h +++ b/src/port.h @@ -89,9 +89,7 @@ struct Port : Base Client *m_client; PortGroup *m_group; PortList m_connections; -#ifndef HAVE_RENAME std::string m_real_name; -#endif virtual ConnectionMode ConnectedTo(Port *port); virtual ConnectionMode ConnectedTo(PortGroup *group); diff --git a/src/portmanager.cpp b/src/portmanager.cpp index 9608acb..4b37e6c 100644 --- a/src/portmanager.cpp +++ b/src/portmanager.cpp @@ -118,9 +118,7 @@ void PortManager::Add(jack_port_t *port) p->m_port = port; p->m_is_input = (JackPortFlags)jack_port_flags(port) & JackPortIsInput; -#ifndef HAVE_RENAME p->m_real_name = jack_port_name(port); -#endif std::string type = jack_port_type(port); p->m_is_midi = type == JACK_DEFAULT_MIDI_TYPE; @@ -227,7 +225,6 @@ void PortManager::Rename(jack_port_t *port) RefreshConnections(); } -#ifndef HAVE_RENAME bool PortManager::PollPortRenames() { // Queue for storing ports to be renamed, to avoid messing up the @@ -251,7 +248,6 @@ bool PortManager::PollPortRenames() return queue.size() > 0; } -#endif Client *PortManager::FindOrMakeClient(std::string name, bool is_input, bool is_midi) { diff --git a/src/portmanager.h b/src/portmanager.h index 286bb04..0ef77d4 100644 --- a/src/portmanager.h +++ b/src/portmanager.h @@ -46,9 +46,7 @@ public: void Disconnect(jack_port_t *port_a, jack_port_t *port_b); void Rename(jack_port_t *port); -#ifndef HAVE_RENAME bool PollPortRenames(); -#endif Client *FindOrMakeClient(std::string name, bool is_input, bool is_midi); PortGroup *FindOrMakeGroup(Client *client, std::string name);