]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix for #2974
authorJohn Alhroos <john.ahlroos@itmill.com>
Tue, 29 Jun 2010 10:46:25 +0000 (10:46 +0000)
committerJohn Alhroos <john.ahlroos@itmill.com>
Tue, 29 Jun 2010 10:46:25 +0000 (10:46 +0000)
svn changeset:13959/svn branch:6.4

src/com/vaadin/terminal/gwt/client/ui/VFilterSelect.java

index bcda91266c075ef696fa2cc648316b9fa7d2f695..ed9acb66842a2445cfb3fa5e44751f054b8405b8 100644 (file)
@@ -793,6 +793,7 @@ public class VFilterSelect extends Composite implements Paintable, Field,
     private int textboxPadding = -1;
     private int componentPadding = -1;
     private int suggestionPopupMinWidth = 0;
+    private int popupWidth = -1;
     /*
      * Stores the last new item string to avoid double submissions. Cleared on
      * uidl updates
@@ -1055,11 +1056,29 @@ public class VFilterSelect extends Composite implements Paintable, Field,
 
         popupOpenerClicked = false;
 
-        updateRootWidth();
+        if (!initDone) {
+            updateRootWidth();
+        }
 
         initDone = true;
     }
 
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.google.gwt.user.client.ui.Composite#onAttach()
+     */
+    @Override
+    protected void onAttach() {
+        super.onAttach();
+
+        /*
+         * We need to recalculate the root width when the select is attached, so
+         * #2974 won't happen.
+         */
+        updateRootWidth();
+    }
+
     /**
      * Turns prompting on. When prompting is turned on a command prompt is shown
      * in the text box if nothing has been entered.
@@ -1445,13 +1464,33 @@ public class VFilterSelect extends Composite implements Paintable, Field,
              * the size of the combobox won't change over time.
              */
             int tbWidth = Util.getRequiredWidth(tb);
-            int openerWidth = Util.getRequiredWidth(popupOpener);
+
+            if (popupWidth < 0) {
+                /*
+                 * Only use the first page popup width so the textbox will not
+                 * get resized whenever the popup is resized.
+                 */
+                popupWidth = Util.getRequiredWidth(popupOpener);
+            }
+
+            /*
+             * Note: iconWidth is here calculated as a negative pixel value so
+             * you should consider this in further calculations.
+             */
             int iconWidth = selectedItemIcon.isAttached() ? Util
                     .measureMarginLeft(tb.getElement())
                     - Util.measureMarginLeft(selectedItemIcon.getElement()) : 0;
 
-            int w = tbWidth + openerWidth + iconWidth;
-            if ((!initDone || currentPage + 1 <= 0)
+            int w = tbWidth + popupWidth + iconWidth;
+
+            /*
+             * When the select has a undefined with we need to check that we are
+             * only setting the text box width relative to the first page width
+             * of the items. If this is not done the text box width will change
+             * when the popup is used to view longer items than the text box is
+             * wide.
+             */
+            if ((!initDone || currentPage + 1 < 0)
                     && suggestionPopupMinWidth > w) {
                 setTextboxWidth(suggestionPopupMinWidth);
                 w = suggestionPopupMinWidth;