@@ -6,8 +6,8 @@ | |||||
<rect> | <rect> | ||||
<x>0</x> | <x>0</x> | ||||
<y>0</y> | <y>0</y> | ||||
<width>418</width> | |||||
<height>278</height> | |||||
<width>416</width> | |||||
<height>344</height> | |||||
</rect> | </rect> | ||||
</property> | </property> | ||||
<property name="windowTitle"> | <property name="windowTitle"> | ||||
@@ -24,7 +24,7 @@ | |||||
<item> | <item> | ||||
<widget class="QGroupBox" name="group_command"> | <widget class="QGroupBox" name="group_command"> | ||||
<property name="title"> | <property name="title"> | ||||
<string>Command</string> | |||||
<string>Application</string> | |||||
</property> | </property> | ||||
<layout class="QGridLayout" name="gridLayout"> | <layout class="QGridLayout" name="gridLayout"> | ||||
<item row="1" column="0"> | <item row="1" column="0"> | ||||
@@ -40,19 +40,6 @@ | |||||
<item row="1" column="1" colspan="3"> | <item row="1" column="1" colspan="3"> | ||||
<widget class="QLineEdit" name="le_command"/> | <widget class="QLineEdit" name="le_command"/> | ||||
</item> | </item> | ||||
<item row="2" column="0"> | |||||
<widget class="QLabel" name="label_6"> | |||||
<property name="enabled"> | |||||
<bool>false</bool> | |||||
</property> | |||||
<property name="text"> | |||||
<string>Session Manager:</string> | |||||
</property> | |||||
<property name="alignment"> | |||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="2" column="3"> | <item row="2" column="3"> | ||||
<spacer name="horizontalSpacer_3"> | <spacer name="horizontalSpacer_3"> | ||||
<property name="orientation"> | <property name="orientation"> | ||||
@@ -82,35 +69,6 @@ | |||||
</property> | </property> | ||||
</widget> | </widget> | ||||
</item> | </item> | ||||
<item row="3" column="1" colspan="3"> | |||||
<widget class="QCheckBox" name="cb_manage_window"> | |||||
<property name="text"> | |||||
<string>Take control of main applicaton window</string> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="2" column="1" colspan="2"> | |||||
<widget class="QComboBox" name="cb_session_mgr"> | |||||
<property name="enabled"> | |||||
<bool>false</bool> | |||||
</property> | |||||
<item> | |||||
<property name="text"> | |||||
<string>None / Manual</string> | |||||
</property> | |||||
</item> | |||||
<item> | |||||
<property name="text"> | |||||
<string>LADISH (SIGUSR1)</string> | |||||
</property> | |||||
</item> | |||||
<item> | |||||
<property name="text"> | |||||
<string>Non Session Manager (OSC)</string> | |||||
</property> | |||||
</item> | |||||
</widget> | |||||
</item> | |||||
<item row="3" column="0"> | <item row="3" column="0"> | ||||
<spacer name="horizontalSpacer_4"> | <spacer name="horizontalSpacer_4"> | ||||
<property name="orientation"> | <property name="orientation"> | ||||
@@ -136,8 +94,49 @@ | |||||
<string>Setup</string> | <string>Setup</string> | ||||
</property> | </property> | ||||
<layout class="QGridLayout" name="gridLayout_2"> | <layout class="QGridLayout" name="gridLayout_2"> | ||||
<item row="1" column="0"> | |||||
<spacer name="horizontalSpacer_6"> | |||||
<item row="2" column="6"> | |||||
<widget class="QLabel" name="label_7"> | |||||
<property name="text"> | |||||
<string>MIDI inputs:</string> | |||||
</property> | |||||
<property name="alignment"> | |||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="2" column="7"> | |||||
<widget class="QSpinBox" name="sb_midi_ins"> | |||||
<property name="maximum"> | |||||
<number>1</number> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="3" column="2"> | |||||
<widget class="QSpinBox" name="sb_audio_outs"> | |||||
<property name="maximum"> | |||||
<number>64</number> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="3" column="6"> | |||||
<widget class="QLabel" name="label_8"> | |||||
<property name="text"> | |||||
<string>MIDI outputs:</string> | |||||
</property> | |||||
<property name="alignment"> | |||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="3" column="7"> | |||||
<widget class="QSpinBox" name="sb_midi_outs"> | |||||
<property name="maximum"> | |||||
<number>1</number> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="2" column="8"> | |||||
<spacer name="horizontalSpacer_15"> | |||||
<property name="orientation"> | <property name="orientation"> | ||||
<enum>Qt::Horizontal</enum> | <enum>Qt::Horizontal</enum> | ||||
</property> | </property> | ||||
@@ -149,7 +148,7 @@ | |||||
</property> | </property> | ||||
</spacer> | </spacer> | ||||
</item> | </item> | ||||
<item row="1" column="8"> | |||||
<item row="3" column="8"> | |||||
<spacer name="horizontalSpacer_16"> | <spacer name="horizontalSpacer_16"> | ||||
<property name="orientation"> | <property name="orientation"> | ||||
<enum>Qt::Horizontal</enum> | <enum>Qt::Horizontal</enum> | ||||
@@ -162,7 +161,7 @@ | |||||
</property> | </property> | ||||
</spacer> | </spacer> | ||||
</item> | </item> | ||||
<item row="1" column="3"> | |||||
<item row="3" column="3"> | |||||
<spacer name="horizontalSpacer_8"> | <spacer name="horizontalSpacer_8"> | ||||
<property name="orientation"> | <property name="orientation"> | ||||
<enum>Qt::Horizontal</enum> | <enum>Qt::Horizontal</enum> | ||||
@@ -175,20 +174,23 @@ | |||||
</property> | </property> | ||||
</spacer> | </spacer> | ||||
</item> | </item> | ||||
<item row="0" column="0"> | |||||
<item row="2" column="0"> | |||||
<spacer name="horizontalSpacer_5"> | <spacer name="horizontalSpacer_5"> | ||||
<property name="orientation"> | <property name="orientation"> | ||||
<enum>Qt::Horizontal</enum> | <enum>Qt::Horizontal</enum> | ||||
</property> | </property> | ||||
<property name="sizeType"> | |||||
<enum>QSizePolicy::Fixed</enum> | |||||
</property> | |||||
<property name="sizeHint" stdset="0"> | <property name="sizeHint" stdset="0"> | ||||
<size> | <size> | ||||
<width>1</width> | |||||
<width>20</width> | |||||
<height>1</height> | <height>1</height> | ||||
</size> | </size> | ||||
</property> | </property> | ||||
</spacer> | </spacer> | ||||
</item> | </item> | ||||
<item row="0" column="5"> | |||||
<item row="2" column="5"> | |||||
<spacer name="horizontalSpacer_13"> | <spacer name="horizontalSpacer_13"> | ||||
<property name="orientation"> | <property name="orientation"> | ||||
<enum>Qt::Horizontal</enum> | <enum>Qt::Horizontal</enum> | ||||
@@ -201,7 +203,7 @@ | |||||
</property> | </property> | ||||
</spacer> | </spacer> | ||||
</item> | </item> | ||||
<item row="0" column="1"> | |||||
<item row="2" column="1"> | |||||
<widget class="QLabel" name="label_3"> | <widget class="QLabel" name="label_3"> | ||||
<property name="text"> | <property name="text"> | ||||
<string>Audio inputs:</string> | <string>Audio inputs:</string> | ||||
@@ -211,14 +213,27 @@ | |||||
</property> | </property> | ||||
</widget> | </widget> | ||||
</item> | </item> | ||||
<item row="0" column="2"> | |||||
<item row="2" column="3"> | |||||
<spacer name="horizontalSpacer_7"> | |||||
<property name="orientation"> | |||||
<enum>Qt::Horizontal</enum> | |||||
</property> | |||||
<property name="sizeHint" stdset="0"> | |||||
<size> | |||||
<width>1</width> | |||||
<height>1</height> | |||||
</size> | |||||
</property> | |||||
</spacer> | |||||
</item> | |||||
<item row="2" column="2"> | |||||
<widget class="QSpinBox" name="sb_audio_ins"> | <widget class="QSpinBox" name="sb_audio_ins"> | ||||
<property name="maximum"> | <property name="maximum"> | ||||
<number>64</number> | <number>64</number> | ||||
</property> | </property> | ||||
</widget> | </widget> | ||||
</item> | </item> | ||||
<item row="0" column="4" rowspan="2"> | |||||
<item row="2" column="4" rowspan="2"> | |||||
<widget class="Line" name="line"> | <widget class="Line" name="line"> | ||||
<property name="lineWidth"> | <property name="lineWidth"> | ||||
<number>0</number> | <number>0</number> | ||||
@@ -231,24 +246,23 @@ | |||||
</property> | </property> | ||||
</widget> | </widget> | ||||
</item> | </item> | ||||
<item row="0" column="6"> | |||||
<widget class="QLabel" name="label_7"> | |||||
<property name="text"> | |||||
<string>MIDI inputs:</string> | |||||
<item row="3" column="0"> | |||||
<spacer name="horizontalSpacer_6"> | |||||
<property name="orientation"> | |||||
<enum>Qt::Horizontal</enum> | |||||
</property> | </property> | ||||
<property name="alignment"> | |||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||||
<property name="sizeType"> | |||||
<enum>QSizePolicy::Fixed</enum> | |||||
</property> | </property> | ||||
</widget> | |||||
</item> | |||||
<item row="0" column="7"> | |||||
<widget class="QSpinBox" name="sb_midi_ins"> | |||||
<property name="maximum"> | |||||
<number>1</number> | |||||
<property name="sizeHint" stdset="0"> | |||||
<size> | |||||
<width>20</width> | |||||
<height>1</height> | |||||
</size> | |||||
</property> | </property> | ||||
</widget> | |||||
</spacer> | |||||
</item> | </item> | ||||
<item row="1" column="1"> | |||||
<item row="3" column="1"> | |||||
<widget class="QLabel" name="label_4"> | <widget class="QLabel" name="label_4"> | ||||
<property name="text"> | <property name="text"> | ||||
<string>Audio outputs:</string> | <string>Audio outputs:</string> | ||||
@@ -258,68 +272,108 @@ | |||||
</property> | </property> | ||||
</widget> | </widget> | ||||
</item> | </item> | ||||
<item row="1" column="2"> | |||||
<widget class="QSpinBox" name="sb_audio_outs"> | |||||
<property name="maximum"> | |||||
<number>64</number> | |||||
<item row="3" column="5"> | |||||
<spacer name="horizontalSpacer_14"> | |||||
<property name="orientation"> | |||||
<enum>Qt::Horizontal</enum> | |||||
</property> | </property> | ||||
</widget> | |||||
<property name="sizeHint" stdset="0"> | |||||
<size> | |||||
<width>1</width> | |||||
<height>1</height> | |||||
</size> | |||||
</property> | |||||
</spacer> | |||||
</item> | </item> | ||||
<item row="1" column="6"> | |||||
<widget class="QLabel" name="label_8"> | |||||
<item row="1" column="1" colspan="7"> | |||||
<widget class="QCheckBox" name="cb_manage_window"> | |||||
<property name="text"> | <property name="text"> | ||||
<string>MIDI outputs:</string> | |||||
<string>Take control of main applicaton window</string> | |||||
</property> | </property> | ||||
<property name="alignment"> | |||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||||
</widget> | |||||
</item> | |||||
<item row="0" column="6" colspan="3"> | |||||
<widget class="QComboBox" name="cb_session_mgr"> | |||||
<property name="enabled"> | |||||
<bool>false</bool> | |||||
</property> | </property> | ||||
<item> | |||||
<property name="text"> | |||||
<string>None / Manual</string> | |||||
</property> | |||||
</item> | |||||
<item> | |||||
<property name="text"> | |||||
<string>LADISH (SIGUSR1)</string> | |||||
</property> | |||||
</item> | |||||
<item> | |||||
<property name="text"> | |||||
<string>Non Session Manager (OSC)</string> | |||||
</property> | |||||
</item> | |||||
</widget> | </widget> | ||||
</item> | </item> | ||||
<item row="1" column="7"> | |||||
<widget class="QSpinBox" name="sb_midi_outs"> | |||||
<property name="maximum"> | |||||
<number>1</number> | |||||
<item row="0" column="1" colspan="3"> | |||||
<widget class="QLabel" name="label_6"> | |||||
<property name="enabled"> | |||||
<bool>false</bool> | |||||
</property> | |||||
<property name="text"> | |||||
<string>Session Manager:</string> | |||||
</property> | |||||
<property name="alignment"> | |||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||||
</property> | </property> | ||||
</widget> | </widget> | ||||
</item> | </item> | ||||
<item row="0" column="3"> | |||||
<spacer name="horizontalSpacer_7"> | |||||
</layout> | |||||
</widget> | |||||
</item> | |||||
<item> | |||||
<widget class="QGroupBox" name="groupBox"> | |||||
<property name="title"> | |||||
<string>Workarounds</string> | |||||
</property> | |||||
<layout class="QGridLayout" name="gridLayout_3"> | |||||
<item row="0" column="0"> | |||||
<spacer name="horizontalSpacer"> | |||||
<property name="orientation"> | <property name="orientation"> | ||||
<enum>Qt::Horizontal</enum> | <enum>Qt::Horizontal</enum> | ||||
</property> | </property> | ||||
<property name="sizeType"> | |||||
<enum>QSizePolicy::Fixed</enum> | |||||
</property> | |||||
<property name="sizeHint" stdset="0"> | <property name="sizeHint" stdset="0"> | ||||
<size> | <size> | ||||
<width>1</width> | |||||
<width>20</width> | |||||
<height>1</height> | <height>1</height> | ||||
</size> | </size> | ||||
</property> | </property> | ||||
</spacer> | </spacer> | ||||
</item> | </item> | ||||
<item row="0" column="8"> | |||||
<spacer name="horizontalSpacer_15"> | |||||
<item row="0" column="2"> | |||||
<spacer name="horizontalSpacer_2"> | |||||
<property name="orientation"> | <property name="orientation"> | ||||
<enum>Qt::Horizontal</enum> | <enum>Qt::Horizontal</enum> | ||||
</property> | </property> | ||||
<property name="sizeHint" stdset="0"> | <property name="sizeHint" stdset="0"> | ||||
<size> | <size> | ||||
<width>1</width> | |||||
<width>135</width> | |||||
<height>1</height> | <height>1</height> | ||||
</size> | </size> | ||||
</property> | </property> | ||||
</spacer> | </spacer> | ||||
</item> | </item> | ||||
<item row="1" column="5"> | |||||
<spacer name="horizontalSpacer_14"> | |||||
<property name="orientation"> | |||||
<enum>Qt::Horizontal</enum> | |||||
<item row="0" column="1"> | |||||
<widget class="QCheckBox" name="cb_capture_first_window"> | |||||
<property name="enabled"> | |||||
<bool>false</bool> | |||||
</property> | </property> | ||||
<property name="sizeHint" stdset="0"> | |||||
<size> | |||||
<width>1</width> | |||||
<height>1</height> | |||||
</size> | |||||
<property name="text"> | |||||
<string>Capture only the first X11 Window</string> | |||||
</property> | </property> | ||||
</spacer> | |||||
</widget> | |||||
</item> | </item> | ||||
</layout> | </layout> | ||||
</widget> | </widget> | ||||
@@ -1208,7 +1208,7 @@ public: | |||||
// --------------------------------------------------------------- | // --------------------------------------------------------------- | ||||
// check setup | // check setup | ||||
if (std::strlen(label) != 5) | |||||
if (std::strlen(label) != 6) | |||||
{ | { | ||||
pData->engine->setLastError("invalid application setup received"); | pData->engine->setLastError("invalid application setup received"); | ||||
return false; | return false; | ||||
@@ -1217,7 +1217,9 @@ public: | |||||
for (int i=4; --i >= 0;) { | for (int i=4; --i >= 0;) { | ||||
CARLA_SAFE_ASSERT_RETURN(label[i] >= '0' && label[i] <= '0'+64, false); | CARLA_SAFE_ASSERT_RETURN(label[i] >= '0' && label[i] <= '0'+64, false); | ||||
} | } | ||||
CARLA_SAFE_ASSERT_RETURN(label[4] >= '0' && label[4] < '0'+0x4f, false); | |||||
for (int i=6; --i >= 4;) { | |||||
CARLA_SAFE_ASSERT_RETURN(label[i] >= '0' && label[i] < '0'+0x4f, false); | |||||
} | |||||
fInfo.aIns = label[0] - '0'; | fInfo.aIns = label[0] - '0'; | ||||
fInfo.aOuts = label[1] - '0'; | fInfo.aOuts = label[1] - '0'; | ||||
@@ -1226,7 +1228,7 @@ public: | |||||
fInfo.setupLabel = label; | fInfo.setupLabel = label; | ||||
const int setupHints = label[4] - '0'; | |||||
const int setupHints = label[5] - '0'; | |||||
// --------------------------------------------------------------- | // --------------------------------------------------------------- | ||||
// set info | // set info | ||||
@@ -1283,7 +1285,7 @@ public: | |||||
#endif | #endif | ||||
//fInfo.optionsAvailable = optionAv; | //fInfo.optionsAvailable = optionAv; | ||||
if (setupHints & 0x10) | |||||
if (setupHints & 0x1) | |||||
pData->hints |= PLUGIN_HAS_CUSTOM_UI; | pData->hints |= PLUGIN_HAS_CUSTOM_UI; | ||||
// --------------------------------------------------------------- | // --------------------------------------------------------------- | ||||
@@ -1884,12 +1884,14 @@ class PluginDatabaseW(QDialog): | |||||
# Jack Application Dialog | # Jack Application Dialog | ||||
class JackApplicationW(QDialog): | class JackApplicationW(QDialog): | ||||
# TODO complete this | |||||
FLAG_SESSION_MGR_JACK = 0x01 | |||||
FLAG_SESSION_MGR_LADISH = 0x02 | |||||
FLAG_SESSION_MGR_LASH = 0x04 | |||||
FLAG_SESSION_MGR_NSM = 0x08 | |||||
FLAG_CONTROL_WINDOW = 0x10 | |||||
SESSION_MGR_NONE = 0 | |||||
SESSION_MGR_JACK = 1 | |||||
SESSION_MGR_LADISH = 2 | |||||
SESSION_MGR_LASH = 3 | |||||
SESSION_MGR_NSM = 4 | |||||
FLAG_CONTROL_WINDOW = 0x1 | |||||
FLAG_CAPTURE_FIRST_WINDOW = 0x2 | |||||
def __init__(self, parent, host): | def __init__(self, parent, host): | ||||
QDialog.__init__(self, parent) | QDialog.__init__(self, parent) | ||||
@@ -1917,25 +1919,30 @@ class JackApplicationW(QDialog): | |||||
def getCommandAndFlags(self): | def getCommandAndFlags(self): | ||||
name = self.ui.le_name.text() | name = self.ui.le_name.text() | ||||
command = self.ui.le_command.text() | command = self.ui.le_command.text() | ||||
smgr = self.SESSION_MGR_NONE | |||||
flags = 0x0 | flags = 0x0 | ||||
if not name: | if not name: | ||||
name = command.split(" ",1)[0] | name = command.split(" ",1)[0] | ||||
# TODO finalize flag definitions | # TODO finalize flag definitions | ||||
sessionMgrIndex = self.ui.cb_session_mgr.currentIndex() | |||||
if sessionMgrIndex == 1: | |||||
flags |= self.FLAG_SESSION_MGR_LADISH | |||||
elif sessionMgrIndex == 2: | |||||
flags |= self.FLAG_SESSION_MGR_NSM | |||||
#uiSessionMgrIndex = self.ui.cb_session_mgr.currentIndex() | |||||
#if uiSessionMgrIndex == 1: | |||||
#smgr = self.SESSION_MGR_LADISH | |||||
#elif uiSessionMgrIndex == 2: | |||||
#smgr = self.SESSION_MGR_NSM | |||||
if self.ui.cb_manage_window.isChecked(): | if self.ui.cb_manage_window.isChecked(): | ||||
flags |= self.FLAG_CONTROL_WINDOW | flags |= self.FLAG_CONTROL_WINDOW | ||||
if self.ui.cb_capture_first_window.isChecked(): | |||||
flags |= self.FLAG_CAPTURE_FIRST_WINDOW | |||||
baseIntVal = ord('0') | baseIntVal = ord('0') | ||||
labelSetup = "%s%s%s%s%s" % (chr(baseIntVal+self.ui.sb_audio_ins.value()), | |||||
chr(baseIntVal+self.ui.sb_audio_outs.value()), | |||||
chr(baseIntVal+self.ui.sb_midi_ins.value()), | |||||
chr(baseIntVal+self.ui.sb_midi_outs.value()), | |||||
chr(baseIntVal+flags)) | |||||
labelSetup = "%s%s%s%s%s%s" % (chr(baseIntVal+self.ui.sb_audio_ins.value()), | |||||
chr(baseIntVal+self.ui.sb_audio_outs.value()), | |||||
chr(baseIntVal+self.ui.sb_midi_ins.value()), | |||||
chr(baseIntVal+self.ui.sb_midi_outs.value()), | |||||
chr(baseIntVal+smgr), | |||||
chr(baseIntVal+flags)) | |||||
return (command, name, labelSetup) | return (command, name, labelSetup) | ||||
def loadSettings(self): | def loadSettings(self): | ||||
@@ -61,6 +61,8 @@ typedef int (*CarlaInterposedCallback)(int, void*); | |||||
static Display* gCurrentlyMappedDisplay = nullptr; | static Display* gCurrentlyMappedDisplay = nullptr; | ||||
static Window gCurrentlyMappedWindow = 0; | static Window gCurrentlyMappedWindow = 0; | ||||
static CarlaInterposedCallback gInterposedCallback = nullptr; | static CarlaInterposedCallback gInterposedCallback = nullptr; | ||||
static int gInterposedSessionManager = 0; | |||||
static int gInterposedHints = 0; | |||||
static bool gCurrentWindowMapped = false; | static bool gCurrentWindowMapped = false; | ||||
static bool gCurrentWindowVisible = false; | static bool gCurrentWindowVisible = false; | ||||
@@ -161,7 +163,7 @@ int XMapWindow(Display* display, Window window) | |||||
// got a new window, we may need to forget last one | // got a new window, we may need to forget last one | ||||
if (gCurrentlyMappedDisplay != nullptr && gCurrentlyMappedWindow != 0) | if (gCurrentlyMappedDisplay != nullptr && gCurrentlyMappedWindow != 0) | ||||
{ | { | ||||
// igonre requests against the current mapped window | |||||
// ignore requests against the current mapped window | |||||
if (gCurrentlyMappedWindow == window) | if (gCurrentlyMappedWindow == window) | ||||
return 0; | return 0; | ||||
@@ -171,6 +173,7 @@ int XMapWindow(Display* display, Window window) | |||||
XSetTransientForHint(display, window, gCurrentlyMappedWindow); | XSetTransientForHint(display, window, gCurrentlyMappedWindow); | ||||
break; | break; | ||||
} | } | ||||
// ignore empty windows created after the main one | // ignore empty windows created after the main one | ||||
if (numItems == 0) | if (numItems == 0) | ||||
break; | break; | ||||
@@ -220,31 +223,45 @@ int XUnmapWindow(Display* display, Window window) | |||||
// --------------------------------------------------------------------------------------------------------------------- | // --------------------------------------------------------------------------------------------------------------------- | ||||
CARLA_EXPORT | CARLA_EXPORT | ||||
int jack_carla_interposed_action(int action, void* ptr) | |||||
int jack_carla_interposed_action(int action, int value, void* ptr) | |||||
{ | { | ||||
carla_debug("jack_carla_interposed_action(%i, %p)", action, ptr); | |||||
carla_debug("jack_carla_interposed_action(%i, %i, %p)", action, value, ptr); | |||||
switch (action) | switch (action) | ||||
{ | { | ||||
case 1: // set callback | |||||
case 1: | |||||
// set hints and callback | |||||
gInterposedHints = value; | |||||
gInterposedCallback = (CarlaInterposedCallback)ptr; | gInterposedCallback = (CarlaInterposedCallback)ptr; | ||||
return 1; | return 1; | ||||
case 2: // show gui | |||||
gCurrentWindowVisible = true; | |||||
if (gCurrentlyMappedDisplay == nullptr || gCurrentlyMappedWindow == 0) | |||||
return 0; | |||||
case 2: | |||||
// session manager | |||||
gInterposedSessionManager = value; | |||||
return 1; | |||||
gCurrentWindowMapped = true; | |||||
return real_XMapWindow(gCurrentlyMappedDisplay, gCurrentlyMappedWindow); | |||||
case 3: | |||||
// show gui | |||||
if (value != 0) | |||||
{ | |||||
gCurrentWindowVisible = true; | |||||
if (gCurrentlyMappedDisplay == nullptr || gCurrentlyMappedWindow == 0) | |||||
return 0; | |||||
case 3: // hide gui | |||||
gCurrentWindowVisible = false; | |||||
if (gCurrentlyMappedDisplay == nullptr || gCurrentlyMappedWindow == 0) | |||||
return 0; | |||||
gCurrentWindowMapped = true; | |||||
return real_XMapWindow(gCurrentlyMappedDisplay, gCurrentlyMappedWindow); | |||||
} | |||||
// hide gui | |||||
else | |||||
{ | |||||
gCurrentWindowVisible = false; | |||||
if (gCurrentlyMappedDisplay == nullptr || gCurrentlyMappedWindow == 0) | |||||
return 0; | |||||
gCurrentWindowMapped = false; | |||||
return real_XUnmapWindow(gCurrentlyMappedDisplay, gCurrentlyMappedWindow); | |||||
gCurrentWindowMapped = false; | |||||
return real_XUnmapWindow(gCurrentlyMappedDisplay, gCurrentlyMappedWindow); | |||||
} | |||||
break; | |||||
case 4: // close everything | case 4: // close everything | ||||
gCurrentWindowMapped = false; | gCurrentWindowMapped = false; | ||||
@@ -27,7 +27,7 @@ using juce::Time; | |||||
typedef int (*CarlaInterposedCallback)(int, void*); | typedef int (*CarlaInterposedCallback)(int, void*); | ||||
CARLA_EXPORT | CARLA_EXPORT | ||||
int jack_carla_interposed_action(int, void*) | |||||
int jack_carla_interposed_action(int, int, void*) | |||||
{ | { | ||||
carla_stderr2("Non-export jack_carla_interposed_action called, this should not happen!!"); | carla_stderr2("Non-export jack_carla_interposed_action called, this should not happen!!"); | ||||
return 1337; | return 1337; | ||||
@@ -115,7 +115,7 @@ public: | |||||
CARLA_SAFE_ASSERT_RETURN(shmIds != nullptr && std::strlen(shmIds) == 6*4,); | CARLA_SAFE_ASSERT_RETURN(shmIds != nullptr && std::strlen(shmIds) == 6*4,); | ||||
const char* const libjackSetup(std::getenv("CARLA_LIBJACK_SETUP")); | const char* const libjackSetup(std::getenv("CARLA_LIBJACK_SETUP")); | ||||
CARLA_SAFE_ASSERT_RETURN(libjackSetup != nullptr && std::strlen(libjackSetup) == 5,); | |||||
CARLA_SAFE_ASSERT_RETURN(libjackSetup != nullptr && std::strlen(libjackSetup) == 6,); | |||||
// make sure we don't get loaded again | // make sure we don't get loaded again | ||||
carla_unsetenv("CARLA_SHM_IDS"); | carla_unsetenv("CARLA_SHM_IDS"); | ||||
@@ -126,7 +126,9 @@ public: | |||||
for (int i=4; --i >= 0;) { | for (int i=4; --i >= 0;) { | ||||
CARLA_SAFE_ASSERT_RETURN(libjackSetup[i] >= '0' && libjackSetup[i] <= '0'+64,); | CARLA_SAFE_ASSERT_RETURN(libjackSetup[i] >= '0' && libjackSetup[i] <= '0'+64,); | ||||
} | } | ||||
CARLA_SAFE_ASSERT_RETURN(libjackSetup[4] >= '0' && libjackSetup[4] < '0'+0x4f,); | |||||
for (int i=6; --i >= 4;) { | |||||
CARLA_SAFE_ASSERT_RETURN(libjackSetup[i] >= '0' && libjackSetup[i] < '0'+0x4f,); | |||||
} | |||||
std::memcpy(fBaseNameAudioPool, shmIds+6*0, 6); | std::memcpy(fBaseNameAudioPool, shmIds+6*0, 6); | ||||
std::memcpy(fBaseNameRtClientControl, shmIds+6*1, 6); | std::memcpy(fBaseNameRtClientControl, shmIds+6*1, 6); | ||||
@@ -143,7 +145,8 @@ public: | |||||
fServer.numMidiIns = libjackSetup[2] - '0'; | fServer.numMidiIns = libjackSetup[2] - '0'; | ||||
fServer.numMidiOuts = libjackSetup[3] - '0'; | fServer.numMidiOuts = libjackSetup[3] - '0'; | ||||
jack_carla_interposed_action(1, (void*)carla_interposed_callback); | |||||
jack_carla_interposed_action(1, libjackSetup[5] - '0', (void*)carla_interposed_callback); | |||||
jack_carla_interposed_action(2, libjackSetup[4] - '0', nullptr); | |||||
fNonRealtimeThread.startThread(); | fNonRealtimeThread.startThread(); | ||||
} | } | ||||
@@ -843,7 +846,7 @@ bool CarlaJackAppClient::handleNonRtData() | |||||
break; | break; | ||||
case kPluginBridgeNonRtClientShowUI: | case kPluginBridgeNonRtClientShowUI: | ||||
if (jack_carla_interposed_action(2, nullptr) == 1337) | |||||
if (jack_carla_interposed_action(3, 1, nullptr) == 1337) | |||||
{ | { | ||||
// failed, LD_PRELOAD did not work? | // failed, LD_PRELOAD did not work? | ||||
const char* const message("Cannot show UI, LD_PRELOAD not working?"); | const char* const message("Cannot show UI, LD_PRELOAD not working?"); | ||||
@@ -862,7 +865,7 @@ bool CarlaJackAppClient::handleNonRtData() | |||||
break; | break; | ||||
case kPluginBridgeNonRtClientHideUI: | case kPluginBridgeNonRtClientHideUI: | ||||
jack_carla_interposed_action(3, nullptr); | |||||
jack_carla_interposed_action(3, 0, nullptr); | |||||
break; | break; | ||||
case kPluginBridgeNonRtClientUiParameterChange: | case kPluginBridgeNonRtClientUiParameterChange: | ||||