summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--includes/common.inc6
-rw-r--r--includes/form.inc9
2 files changed, 13 insertions, 2 deletions
diff --git a/includes/common.inc b/includes/common.inc
index b55384e2a..acd66a789 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -2113,7 +2113,11 @@ function drupal_render(&$elements) {
}
$content = '';
- uasort($elements, "_element_sort");
+ // Either the elements did not go through form_builder or one of the children
+ // has a #weight.
+ if (!isset($elements['#sorted'])) {
+ uasort($elements, "_element_sort");
+ }
if (!isset($elements['#children'])) {
$children = element_children($elements);
/* Render all the children that use a theme function */
diff --git a/includes/form.inc b/includes/form.inc
index e2a3b06ba..7eb461883 100644
--- a/includes/form.inc
+++ b/includes/form.inc
@@ -755,8 +755,11 @@ function form_builder($form_id, $form) {
form_set_value($form, $form['#value']);
}
+ // We start off assuming all form elements are in the correct order.
+ $form['#sorted'] = TRUE;
+
// Recurse through all child elements.
- $count = 0;
+ $count = 0;
foreach (element_children($form) as $key) {
$form[$key]['#post'] = $form['#post'];
$form[$key]['#programmed'] = $form['#programmed'];
@@ -780,6 +783,10 @@ function form_builder($form_id, $form) {
if (!isset($form[$key]['#weight'])) {
$form[$key]['#weight'] = $count/1000;
}
+ else {
+ // If one the child elements has a weight then we will need to sort later.
+ unset($form['#sorted']);
+ }
$form[$key] = form_builder($form_id, $form[$key]);
$count++;
}