Index: openacs-4/packages/acs-tcl/tcl/form-processing-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/form-processing-procs.tcl,v diff -u -r1.56 -r1.57 --- openacs-4/packages/acs-tcl/tcl/form-processing-procs.tcl 12 Oct 2006 07:53:20 -0000 1.56 +++ openacs-4/packages/acs-tcl/tcl/form-processing-procs.tcl 1 Nov 2006 19:12:54 -0000 1.57 @@ -738,6 +738,9 @@ template::element create $form_name __refreshing_p -datatype integer -widget hidden -value 0 + # add the hidden button element + template::element create $form_name "__submit_button_name" -datatype text -widget hidden -value "" + template::element create $form_name "__submit_button_value" -datatype text -widget hidden -value "" } if { [info exists export] } { @@ -1008,6 +1011,7 @@ # Get all the form elements. We can't call form get_values because it doesn't handle multiples # in a reasonable way. + foreach element_name $properties(element_names) { if { [info exists af_flag_list(${form_name}__$element_name)] && \ [lsearch $af_flag_list(${form_name}__$element_name) multiple] >= 0 } { @@ -1019,6 +1023,13 @@ } } + # Update the clicked button if it does not already exist + uplevel #$level { + if {![exists_and_not_null ${__submit_button_name}]} { + set ${__submit_button_name} ${__submit_button_value} + } + } + if { [info exists key_name] } { upvar #$level $key_name __key upvar #$level __key_signature __key_signature Index: openacs-4/packages/acs-tcl/tcl/tcl-documentation-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/tcl-documentation-procs.tcl,v diff -u -r1.20 -r1.21 --- openacs-4/packages/acs-tcl/tcl/tcl-documentation-procs.tcl 4 Jun 2006 00:45:47 -0000 1.20 +++ openacs-4/packages/acs-tcl/tcl/tcl-documentation-procs.tcl 1 Nov 2006 19:12:54 -0000 1.21 @@ -853,6 +853,11 @@ # This is the value set actual_value [ns_set value $form $form_counter_i] + # This is needed for double click protection so we can access the two variables down below. + if {$actual_name eq "__submit_button_name" || $actual_name eq "__submit_button_value"} { + set $actual_name $actual_value + } + # It may be a signature for another variable if { [regexp {^(.*):sig$} $actual_name match formal_name] } { set apc_signatures($formal_name) $actual_value @@ -1123,6 +1128,13 @@ ad_script_abort } } + + # Set the __submit_button_variable. This is used in double click protection. + if {[exists_and_not_null __submit_button_name] && [info exists __submit_button_value]} { + uplevel 1 [list set $__submit_button_name $__submit_button_value] + } + + } ad_proc -public ad_page_contract_get_variables { } {