13
0
Commit Graph

313 Commits

Author SHA1 Message Date
8bed793b48 Properly desensitize various engine-controls.
MIDI system and channel-count cannot be changed while the engine is
running.
2017-04-01 14:37:35 +02:00
05b0102668 ArdourButton: if _act_on_release is true, only trigger actions/signal clicks on key release, and vice versa
This should really be split in separate semantics for key and button events.

Fixes a subtle but nasty bug in the EngineDialog where the change of the default focus
widget from a Gtk::Button (acts on press) to an ArdourButton (acts on release) caused
events occuring after a dialog has grabbed focus to trigger button clicks
2017-03-01 22:30:20 +01:00
d766095732 Further tweaks to EngineDialog z-axis stacking
When there's no main window (initial setup, no transient parent),
preset a normal window listed in the task-bar.

The duality the Engine Dialog being used as Ardour-WM managed non-modal
Window (Menu > A/M Setup) and modal Dialog (AudioEngineSetupRequired)
complicates this a bit.
2016-12-07 14:50:17 +01:00
9d7279d012 and a more intrusive KDE workaround 2016-11-30 23:19:44 +01:00
4c4061359c pay some attention to the special guest of the night: KDE window stacking 2016-11-30 22:52:06 +01:00
84fc68cf08 Ensure the window-close button is visible for the Engine-Dialog. 2016-11-30 18:13:35 +01:00
27d0b67b8f Remove close/OK buttons from engine dialog 2016-11-30 14:44:36 +01:00
0cb9d4a3d2 Restrict Device selection to valid choices. 2016-11-26 15:31:21 +01:00
0b8a7d3429 Don't allow recursive calls to EngineDialog
OK -> start_engine() can eg. trigger an interactive plugin scan,
which in turn leaves the EngineDialog responsive. changing settings
or clicking OK again can lead to undefined behavior.
2016-11-19 04:54:36 +01:00
05bc96f4d2 move MIDI port options out of engine dialog and into prefs 2016-10-19 17:49:35 -04:00
86106bcfa1 set up MIDI port treeview columns *just once* 2016-10-18 21:18:32 -04:00
7a79a9da9a correctly show both the old MIDI setup tab (device oriented) and the new one (port oriented) 2016-10-18 18:14:00 -04:00
8357775fbb further work on a MIDI port functionality dialog 2016-10-18 18:01:03 -04:00
1d39500e64 beginnings of a tab in Audio/MIDI setup to manage MIDI port functionality 2016-10-18 16:56:35 -04:00
3d256ff2c2 Constrain Samplerate selection when session is loaded
Ardour does not allow to change the rate of a session itself.
2016-09-30 16:50:00 +02:00
7f8ec25e25 fix sample-rate display: show active (not desired) rate 2016-09-30 16:50:00 +02:00
46d2b03af0 retain desired samplerate when switching backends 2016-07-24 13:00:15 +02:00
34fe25c603 remove debug noise 2016-07-20 16:33:40 -04:00
cf52d6e4b4 enough with umpteen "i18n.h" files. Consolidate on pbd/i18n.h 2016-07-14 14:45:23 -04:00
bd865c8c90 fix plural form snafu in translation macro 2016-07-14 06:20:17 -04:00
f2f9c2303a fix initial engine state (windows: buffered-i/o; all: channelcount) 2016-05-21 16:24:35 +02:00
6d343ba3c6 fix LocaleGuard contstructor (3dc77280) 2016-05-07 12:19:41 +02:00
3dc7728038 we always only use the "C" locale when saving. 2016-05-05 21:49:56 +02:00
17ace643e4 OMNIBUS COMMIT: prefer const XMLNode::property method (and provide a real one) 2016-05-04 23:09:45 -04:00
e14b6428c3 slightly better version of 0077923d, don't stop the engine for nothing 2016-04-18 17:37:14 +02:00
0077923dea update flow when loading a new session with different SR. 2016-04-18 15:18:36 +02:00
652468a344 add a try-autostart-engine option (most recently used settings) 2016-04-18 14:11:22 +02:00
db56a4da71 Engine Dialog: exclude optional widgets from show_all. 2016-04-18 14:07:49 +02:00
0812f3bac1 Hide "Use Buffered I/O" button when switching to backend with no control
Which in this case means the JACK backend where the server is already running.
2016-02-13 10:00:59 +10:00
2b4ac72e5d Add button to Engine Dialog to choose between Portaudio callback and blocking API 2016-02-11 12:15:07 +10:00
d54a320374 Show/Hide midi calibrate button based on AudioBackend::enumerate_devices
Rather than use an ifdef to only pack the button on linux just hide the button
if the backend doesn't enumerate the devices.
2016-02-11 12:15:07 +10:00
c0a843a905 fix device-list update concurrency issue.
It may happen that during push_state_to_backend() a device is
reconfigured in a way that triggers a "Device Changed" callback before
the engine is started. This callback can trigger a change to the
configuration that will be used when the engine is actually started.

This has been seen on OSX in conjunction with Aggregate Devices
(even if the aggregate is not used, but the device which is used
is also part of an aggregate) 

example: HW changed callback arrives, device-list is re-populated,
*A*irplay" is at the top of the list, Airplay supports only 44.1K,
Samplerate changes... later save also writes this new rate to the file.
2016-01-29 01:12:53 +01:00
aeaf0610d4 GUI for latency-measurement signal-level 2016-01-14 19:25:23 +01:00
fed6c9f3ad tweak GUI for backends where nperiods is driver dependent. 2015-12-05 13:55:37 +01:00
b5c5b7e493 GUI chores to show nperiods option. 2015-12-05 01:53:13 +01:00
2529b9db96 GUI handling for live latency-measurement 2015-12-04 17:34:46 +01:00
e9b0b4bcf0 remove duplicate check (same is done few lines above) 2015-12-04 17:05:21 +01:00
911830726e prefer recently used states. 2015-11-23 22:45:16 +01:00
b754c4341e restore last used driver+devices for a given backend. 2015-11-23 22:45:16 +01:00
8431d102b9 Do not restore engine state if we don't have control
When connecting to already running jack, display jack's buffersize
correctly.
2015-10-06 14:40:51 +02:00
ef0f13cb84 Stop engine when clicking back button in latency measurement tab of EngineControl dialog
The engine is started when you switch to latency measurement tab but it isn't
stopped if you just click the back button without measuring for latency.
2015-10-06 13:29:57 +10:00
cd4dd08931 Add EngineControl::stop_engine method to show errors when stopping engine
This replaces using ARDOUR_UI::disconnect_from_session which is only used by the
EngineControl class. ARDOUR_UI::disconnect_from_session also disconnects from
the AudioEngine::Halted signal which seems unnecessary as Halted is not emitted
when stopping the engine and calling update_sample_rate() which is already
handled when the AudioEngine::Stopped signal is emitted.
2015-10-06 13:29:57 +10:00
1195aeb64e Handle all errors when starting backend in EngineDialog 2015-10-06 13:29:57 +10:00
4b9e738636 Align switch statement with case labels to reduce indentation in EngineDialog 2015-10-06 13:29:57 +10:00
dc36b063bf remove unused fstream includes 2015-10-05 22:15:18 +02:00
22b07e0233 NOOP, remove trailing tabs/whitespace. 2015-10-05 16:17:49 +02:00
520b78b841 Add parent window argument to ARDOUR_UI::check_audioengine
Ensures relevant placement of the dialog when presented
2015-10-01 09:10:19 +10:00
73acaf6de6 Display warning when closing Audio Setup dialog with engine stopped
Only show warning when a session is loaded
2015-10-01 09:10:19 +10:00
463bd470e8 Don't hide Audio Setup dialog when clicking 'OK' if engine fails to start
This has to be handled in two places, in ARDOUR_UI::do_audio_midi_setup and in
the dialogs response handler and in as the window can also be triggered via the
window action manager.
2015-10-01 09:10:19 +10:00
b7fbd4e9c0 fix a small memleak.
downcase(char*) requires free(), downcase(std::string) does not.
2015-09-10 17:39:31 +02:00
fc079a0ea3 initialize some uninitialized variables.
really just nitpicking (keep valgrind clean).
2015-09-06 21:54:54 +02:00
dbe3500f24 Add utility method for choosing which device/s to display in Audio Setup dialog 2015-09-02 12:07:15 +10:00
25ff056921 Use previously set buffer size in EngineDialog if possible
This is also to support refreshing of devices so that the buffer size isn't
reset.
2015-09-02 12:07:15 +10:00
9626e0c413 Add "Refresh Devices" button in Audio Setup dialog for backends that support it
This allows the portaudio library to be reinitialized to pick up new devices
and changes to ASIO buffer changes made externally.
2015-09-02 12:07:15 +10:00
88b332412c Add some debugging output for state restoration in Audio Setup dialog 2015-09-02 12:07:15 +10:00
e6492319b1 Remove Apply button from Audio Setup dialog now that there is a start/stop button 2015-09-02 12:07:15 +10:00
dd275327a4 Change "Stop" button into a Start/Stop button in Audio Setup dialog 2015-09-02 12:07:15 +10:00
c734f82ff2 use program-name for internal ports 2015-08-27 16:50:09 +02:00
59a8fc9e64 Fix state restoration in EngineControl dialog for backends with driver selection
We want to save the driver name even when the engine is running and the driver
combo is insensitive
2015-08-13 00:19:01 +10:00
ad9cebe247 hide “Midi Setup” button on OSX and Windows. 2015-08-12 03:16:09 +02:00
687921a760 remove -Woverload-virtual ambiguity (from 1d3690d) 2015-08-11 23:50:56 +02:00
bf1b65029c update driver selection sensitivity 2015-08-11 22:04:28 +02:00
212a4c1f8d refine "Running" message. 2015-08-11 19:44:14 +02:00
6cc029f5da don't allow to change devices while engine is running. 2015-08-11 19:13:10 +02:00
52c25cab36 allow to stop engine for re-configure 2015-08-11 15:38:38 +02:00
6bb51a26eb consolidate engine-dialog widget sensitivity logic.
Use a single function with the complete logic.

Since the callgraph is complex, there is internal state as well as GUI
state (different pages), do not rely on individual methods to get it
right.

A widget's sensitivity should only be controlled by one function.
2015-08-11 15:38:31 +02:00
a3b2b1bcfa Engine Dialog: use new API 2015-08-11 15:38:19 +02:00
22acbc1cee Fix to ensure there are always sample rates and buffer sizes in the dropdown
This can happen if both input and output devices are set to None for instance
on backends that report no supported SR or buffer size for the None device.
2015-08-11 14:20:43 +10:00
c80e4c04c5 Extract two utility methods from EngineControl::set_samplerate/bufferize_popdown_strings 2015-08-11 14:13:06 +10:00
a8daa36901 Use a union of all sample rates and buffer sizes for all devices in EngineControl
Using just the input device doesn't work in the case that the input device is
an invalid/None device
2015-08-11 14:00:57 +10:00
5e5db3c402 Check the default SR is available for a device when setting SR in EngineControl 2015-08-11 09:57:38 +10:00
4651b10345 Remove unnecesary clearing of local variable in EngineControl 2015-08-11 09:46:46 +10:00
ab7cf8c7a7 Fix state restoration in EngineControl dialog for backends with driver selection
This also prevents backend_changed from being called more that once in the
EngineControl ctor
2015-08-11 09:24:53 +10:00
c165c991ca Use the current backend device names to set active text in device dropdowns if available
Compare device names with enumerated devices rather than assume an empty string
has special meaning
2015-08-11 09:24:53 +10:00
6451060bd1 Remove Unwinder instances in EngineControl::set_*_device_popdown_strings
These are not necessary since SignalBlocker will prevent signal emission
2015-08-11 09:24:53 +10:00
495dd2e52a Compare the string returned by backend->driver_name() against driver names in EngineControl
Don't assume an empty string has any meaning and compare string returned with
enumerated drivers
2015-08-11 09:24:52 +10:00
e20d74079a Remove Unwinder instance from EngineControl::set_driver_popdown_strings
Not necessary now that signal emission is blocked via backend_changed()
2015-08-11 09:24:52 +10:00
dfa9a2326a Reimplement method using code extracted from EngineDialog::backend_changed
EngineControl::set_driver_popdown_strings is now like the other
set_*_popdown_strings methods in that it sets the driver strings and a
default active entry and returns false if no drivers are available.
2015-08-11 09:24:52 +10:00
1bea87e10a Remove previous fix attempt at restoring state for backends with driver selection
The fix does not work properly anymore for the Portaudio backend and needs
fixing in another manner. It will now be temporarily back to the broken state
it was in before the "fix".
2015-08-11 09:24:52 +10:00
eaf5ed2b18 Use SignalBlocker class in EngineControl to block widget signal emission
This stops a whole lot of redundant signal emission and makes it much easier to
think about what is going on. It also makes the dialog present much faster.
2015-08-11 09:24:52 +10:00
001c1a0910 Extract part of EngineControl::backend_changed into EngineControl::update_midi_options 2015-08-11 09:24:52 +10:00
6e0d062773 Move call to EngineControl::device_changed into EngineControl::list_devices ()
This prevents devices_changed from being called twice with backends that have
separate input and output devices
2015-08-11 09:24:52 +10:00
c8f8f75831 Add debug output to blocking/unblocking signals in EngineControl dialog 2015-08-11 09:24:52 +10:00
1bd15bef6c Add methods in EngineControl for blocking and unblocking signals
Only intended to be used with the nested SignalBlocker class
2015-08-11 09:24:52 +10:00
324b5ffbac Refactor part of EngineDialog ctor into connect_changed_signals method 2015-08-11 09:24:52 +10:00
ecd9950413 Add some basic debug output in EngineControl dialog
This should make it easier to see what affect subsequent commits have on
reducing the amount of unnecessary device querying and signal emission
2015-08-11 09:24:52 +10:00
f428cb4bf1 Refactor part of EngineControl::set_state into new set_current_state method 2015-08-11 09:24:52 +10:00
a9c149216d Remove unused method in EngineControl dialog 2015-08-11 09:24:52 +10:00
caae165cd3 Defer to device_changed when input or output devices change
This reduces the amount of unnecessary querying of samplerate and buffersize
for devices
2015-08-11 09:24:51 +10:00
7a3b6e6d08 remove more cruft (dead assignments) 2015-08-07 21:16:14 +02:00
160c185fc0 Don't call AudioBackend::enumerate_drivers for Backend states without driver selection
AudioBackend::enumerate_drivers is not supposed to be called for backends that
don't support driver selection. The wavesaudio backend asserts if the method is
called.
2015-08-07 21:41:37 +10:00
815ffcd567 Set active text in buffer_size combo in EngineControl dialog
Fixes issue with empty buffer size combo when switching to the PA ASIO driver
2015-08-07 01:42:28 +10:00
2437bbbe23 Fix state restoration in Engine dialog for Backends with driver selection
Connect to the backend_combo changed signal after setting state as calling
backend_combo.set_active_text() in set_state was triggering backend_changed(),
which would then see the driver_combo had not been set and set it to the
incorrect value.

The value/name of the backend needs to be restored first then we can populate
the driver combo and set the correct active entry from the saved state. After
which backend_changed() will populate the device combo's etc so they can then
be set to the correct active values from the saved state.
2015-07-31 09:59:53 +10:00
364022a35a add locale-guard when saving engine states, also #6418 2015-07-08 11:34:57 +02:00
3d2f298fb2 Change message about JACK already running to be less scary 2015-06-03 13:48:43 -04:00
4d2bc612f2 engine dialog fixes for multiple devices 2015-06-01 01:01:42 +02:00
d9f24a46aa Allow selection of input and output devices in EngineDialog for backends that support it
Some refactoring was necessary to avoid code duplication

Restoring of device state for input and output devices still doesn't work
correctly. I'm not quite sure what the issue is at this stage.
2015-05-31 20:02:07 +02:00
15bf19961f When running on Windows, hide the Engine dialog before calling 'push_state_to_backend()'
For some reason we don't understand 'push_state_to_backend()' can interfere with hiding the dialog (causing a partially hidden dialog to remain on screen). It's most likely a timing issue with the Windows version of GTK. Fortunately, reversing the calling order seems to fix it - BUT...

If there's no session loaded yet, the user can be left with a very long wait while nothing seems to be happening. The next thing the user would normally see would be the splash image. So let's display it slightly early (so the user can at least see that something's happening).

Sadly, it's all very kludgy - but a lot better than what we had before...  :)
2015-04-14 11:22:14 +01:00
40e3a01459 and 2c89ec5, keep backend running. 2015-04-07 15:23:24 +02:00
2c89ec5c0b Query backend’s setup_required() every time. fixes #6041 2015-04-04 02:39:30 +02:00