That's the idea of the wait4pd stuff, to make sure that pd is started
before continuing on. I don't think this is necessary. Do you have a
way to trigger pd taking too long to start up?
.hc
On Jul 15, 2010, at 2:57 AM, IOhannes m zmoelnig wrote:
> if Pd takes too long to startup, Pd-gui will initialize the audio/
> midi API-menus
> with NULL-lists;
> if Pd finally shows up, the menu cannot be modified anymore, and
> thus the user
> cannot select the API they want.
>
> the fix moves the audio/midi APIs into a sub-menu of "Media", and
> provides a
> function ::pd_menus::build_media_api_menus that will clear the old
> API-menus and
> refill them with the new API-lists.
> this allows Pd-core, to update the API-lists after the GUI has been
> initialized.
> ---
> tcl/pd-gui.tcl | 1 +
> tcl/pd_menus.tcl | 50 ++++++++++++++++++++++++++++++++
> +-----------------
> 2 files changed, 34 insertions(+), 17 deletions(-)
>
> diff --git a/tcl/pd-gui.tcl b/tcl/pd-gui.tcl
> index c99decc..b4f20b3 100755
> --- a/tcl/pd-gui.tcl
> +++ b/tcl/pd-gui.tcl
> @@ -460,6 +460,7 @@ proc pdtk_pd_startup {major minor bugfix test
> if {$::tcl_version >= 8.5} {find_default_font}
> set_base_font $sys_font $sys_fontweight
> fit_font_into_metrics
> + ::pd_menus::build_media_api_menus $::pdwindow_menubar.media
> set ::wait4pd "started"
> }
>
> diff --git a/tcl/pd_menus.tcl b/tcl/pd_menus.tcl
> index fc617df..7157c5e 100644
> --- a/tcl/pd_menus.tcl
> +++ b/tcl/pd_menus.tcl
> @@ -224,6 +224,32 @@ proc ::pd_menus::build_find_menu {mymenu} {
> -command {pdsend {pd finderror}}
> }
>
> +
> +## update the audio/midi API lists
> +# this is done by first clearing the menus, and then rebuilding
> them from scratch
> +proc ::pd_menus::build_media_api_menus {mymenu} {
> + if { [winfo exists $mymenu.audio] } {
> + $mymenu.audio delete 0 [ $mymenu.audio index last]
> + set audio_apilist_length [llength $::audio_apilist]
> + for {set x 0} {$x<$audio_apilist_length} {incr x} {
> + $mymenu.audio add radiobutton -label [lindex [lindex
> $::audio_apilist $x] 0] \
> + -command {menu_audio 0} -variable ::pd_whichapi \
> + -value [lindex [lindex $::audio_apilist $x] 1]\
> + -command {pdsend "pd audio-setapi $::pd_whichapi"}
> + }
> + }
> + if { [winfo exists $mymenu.midi] } {
> + $mymenu.midi delet 0 [ $mymenu.midi index last]
> + set midi_apilist_length [llength $::midi_apilist]
> + for {set x 0} {$x<$midi_apilist_length} {incr x} {
> + $mymenu.midi add radiobutton -label [lindex [lindex
> $::midi_apilist $x] 0] \
> + -command {menu_midi 0} -variable ::pd_whichmidiapi \
> + -value [lindex [lindex $::midi_apilist $x] 1]\
> + -command {pdsend "pd midi-setapi $::pd_whichmidiapi"}
> + }
> + }
> +}
> +
> proc ::pd_menus::build_media_menu {mymenu} {
> variable accelerator
> $mymenu add radiobutton -label [_ "DSP On"] -accelerator
> "$accelerator+/" \
> @@ -237,23 +263,13 @@ proc ::pd_menus::build_media_menu {mymenu} {
> $mymenu add command -label [_ "Load Meter"] \
> -command {menu_doc_open doc/7.stuff/tools load-meter.pd}
>
> - set audio_apilist_length [llength $::audio_apilist]
> - if {$audio_apilist_length > 0} {$mymenu add separator}
> - for {set x 0} {$x<$audio_apilist_length} {incr x} {
> - $mymenu add radiobutton -label [lindex [lindex
> $::audio_apilist $x] 0] \
> - -command {menu_audio 0} -variable ::pd_whichapi \
> - -value [lindex [lindex $::audio_apilist $x] 1]\
> - -command {pdsend "pd audio-setapi $::pd_whichapi"}
> - }
> -
> - set midi_apilist_length [llength $::midi_apilist]
> - if {$midi_apilist_length > 0} {$mymenu add separator}
> - for {set x 0} {$x<$midi_apilist_length} {incr x} {
> - $mymenu add radiobutton -label [lindex [lindex
> $::midi_apilist $x] 0] \
> - -command {menu_midi 0} -variable ::pd_whichmidiapi \
> - -value [lindex [lindex $::midi_apilist $x] 1]\
> - -command {pdsend "pd midi-setapi $::pd_whichmidiapi"}
> - }
> + menu $mymenu.audio
> + menu $mymenu.midi
> + $mymenu add cascade -label [_ "Audio"] -menu $mymenu.audio
> + $mymenu add cascade -label [_ "Midi"] -menu $mymenu.midi
> +
> + build_media_api_menus $mymenu
> +
> if {$::windowingsystem ne "aqua"} {
> $mymenu add separator
> create_preferences_menu $mymenu.preferences
> --
> 1.7.1
>
----------------------------------------------------------------------------
Terrorism is not an enemy. It cannot be defeated. It's a tactic.
It's about as sensible to say we declare war on night attacks and
expect we're going to win that war. We're not going to win the war on
terrorism. - retired U.S. Army general, William Odom