Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    #16
    Hi Blama
    Just to reassure you, we are still looking into this.
    We are still having some difficulty reproducing the problem.

    One thing that might help: Could you open the developer console on the effected machine, and
    - open the watch tab
    - in the top form ("Observe / time methods on objects"), enter "isc.ScrollingMenu"
    - in the "Object" text-item and "hide" in the "Method" text-item
    - click the "Trace Method" button

    Then go back to the Results tab, and then in the main form, reproduce the issue.
    The Results tab should log a stack trace indicating the code flow which is causing the PickList to hide which may point us in the right direction - please let us know what results you get.

    (Also - just as a sanity check, can you evaluate isc.version, and show us the output. This just ensures you are actually running against the build you think you are running against!)

    Thanks
    Isomorphic Software

    Comment


      #17
      Hi Isomorphic,

      I switched to v10.0p_2015-05-12 (IE11, deployed mode) and changed the code to this to always show the used version in screenshots:
      Code:
      package com.smartgwt.sample.client;
      
      import com.google.gwt.core.client.EntryPoint;
      import com.smartgwt.client.Version;
      import com.smartgwt.client.core.KeyIdentifier;
      import com.smartgwt.client.data.AdvancedCriteria;
      import com.smartgwt.client.data.Criterion;
      import com.smartgwt.client.data.DSCallback;
      import com.smartgwt.client.data.DSRequest;
      import com.smartgwt.client.data.DSResponse;
      import com.smartgwt.client.data.DataSource;
      import com.smartgwt.client.data.Record;
      import com.smartgwt.client.types.OperatorId;
      import com.smartgwt.client.types.SelectionStyle;
      import com.smartgwt.client.types.SortArrow;
      import com.smartgwt.client.util.PageKeyHandler;
      import com.smartgwt.client.util.Page;
      import com.smartgwt.client.util.SC;
      import com.smartgwt.client.widgets.IButton;
      import com.smartgwt.client.widgets.Label;
      import com.smartgwt.client.widgets.Window;
      import com.smartgwt.client.widgets.events.ClickEvent;
      import com.smartgwt.client.widgets.events.ClickHandler;
      import com.smartgwt.client.widgets.form.DynamicForm;
      import com.smartgwt.client.widgets.form.fields.ComboBoxItem;
      import com.smartgwt.client.widgets.form.fields.SelectItem;
      import com.smartgwt.client.widgets.form.fields.StaticTextItem;
      import com.smartgwt.client.widgets.form.fields.TextItem;
      import com.smartgwt.client.widgets.grid.ListGrid;
      import com.smartgwt.client.widgets.grid.ListGridField;
      import com.smartgwt.client.widgets.grid.ListGridRecord;
      import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
      import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
      import com.smartgwt.client.widgets.layout.HLayout;
      import com.smartgwt.client.widgets.layout.VStack;
      import com.smartgwt.client.widgets.viewer.DetailViewer;
      
      /**
       * Entry point classes define <code>onModuleLoad()</code>.
       */
      public class BuiltInDS implements EntryPoint {
      	private ListGrid boundList;
      	private DynamicForm boundForm;
      	private IButton saveBtn;
      	private DetailViewer boundViewer;
      	private IButton newBtn;
      	private Window window;
      	private StaticTextItem version;
      
      	/**
      	 * This is the entry point method.
      	 */
      	public void onModuleLoad() {
      		KeyIdentifier debugKey = new KeyIdentifier();
      		debugKey.setCtrlKey(true);
      		debugKey.setKeyName("D");
      
      		Page.registerKey(debugKey, new PageKeyHandler() {
      			public void execute(String keyName) {
      				SC.showConsole();
      			}
      		});
      
      		ListGrid grid = new ListGrid();
      		grid.setLeft(20);
      		grid.setTop(75);
      		grid.setWidth(130);
      		grid.setLeaveScrollbarGap(false);
      		grid.setShowSortArrow(SortArrow.NONE);
      		grid.setCanSort(false);
      		grid.setFields(new ListGridField("dsTitle", "Select a DataSource"));
      		grid.setData(new ListGridRecord[] { new DSRecord("Animals", "animals"), new DSRecord("Office Supplies", "supplyItem"),
      				new DSRecord("Employees", "employees") });
      		grid.setSelectionType(SelectionStyle.SINGLE);
      		grid.addRecordClickHandler(new RecordClickHandler() {
      			public void onRecordClick(RecordClickEvent event) {
      				DSRecord record = (DSRecord) event.getRecord();
      				bindComponents(record.getDsName());
      			}
      		});
      
      		grid.draw();
      
      		VStack vStack = new VStack();
      		vStack.setLeft(175);
      		vStack.setTop(75);
      		vStack.setWidth("70%");
      		vStack.setMembersMargin(20);
      
      		Label label = new Label();
      		label.setContents("<ul>" + "<li>select a datasource from the list at left to bind to these components</li>"
      				+ "<li>click a record in the grid to view and edit that record in the form</li>"
      				+ "<li>click <b>New</b> to start editing a new record in the form</li>"
      				+ "<li>click <b>Save</b> to save changes to a new or edited record in the form</li>"
      				+ "<li>click <b>Clear</b> to clear all fields in the form</li>"
      				+ "<li>click <b>Filter</b> to filter (substring match) the grid based on form values</li>"
      				+ "<li>click <b>Fetch</b> to fetch records (exact match) for the grid based on form values</li>"
      				+ "<li>double-click a record in the grid to edit inline (press Return, or arrow/tab to another record, to save)</li>" + "</ul>");
      		vStack.addMember(label);
      
      		boundList = new ListGrid();
      		boundList.setHeight(200);
      		boundList.setCanEdit(true);
      
      		boundList.addRecordClickHandler(new RecordClickHandler() {
      			public void onRecordClick(RecordClickEvent event) {
      				Record record = event.getRecord();
      				boundForm.editRecord(record);
      				saveBtn.enable();
      				boundViewer.viewSelectedData(boundList);
      				window = new Window();
      				DynamicForm df = new DynamicForm();
      				df.setDataSource(DataSource.get("employees"));
      				version = new StaticTextItem("version", "SmartGWT version");
      				TextItem name = new TextItem("Name");
      				ComboBoxItem mgr = new ComboBoxItem("ReportsTo") {
      					{
      						setOptionDataSource(DataSource.get("employees2"));
      						setDisplayField("Name");
      					}
      				};
      				SelectItem mgr2 = new SelectItem("ReportsTo") {
      					{
      						setOptionDataSource(DataSource.get("employees2"));
      						setDisplayField("Name");
      					}
      				};
      				df.setFields(version, name, mgr, mgr2);
      				window.addItem(df);
      				window.setSize("500", "500");
      				window.centerInPage();
      				window.show();
      				df.fetchData(new AdvancedCriteria(new Criterion("EmployeeId", OperatorId.EQUALS, 187)), new DSCallback() {
      					@Override
      					public void execute(DSResponse dsResponse, Object data, DSRequest dsRequest) {
      						version.setValue(Version.getVersion() + " / " + Version.getSCVersionNumber());
      					}
      				});
      
      			}
      		});
      		vStack.addMember(boundList);
      
      		boundForm = new DynamicForm();
      		boundForm.setNumCols(6);
      		boundForm.setAutoFocus(false);
      		vStack.addMember(boundForm);
      
      		HLayout hLayout = new HLayout(10);
      		hLayout.setMembersMargin(10);
      		hLayout.setHeight(22);
      
      		saveBtn = new IButton("Save");
      		saveBtn.addClickHandler(new ClickHandler() {
      			public void onClick(ClickEvent event) {
      				boundForm.saveData();
      				if (!boundForm.hasErrors()) {
      					boundForm.clearValues();
      					saveBtn.disable();
      				}
      			}
      		});
      		hLayout.addMember(saveBtn);
      
      		newBtn = new IButton("New");
      		newBtn.addClickHandler(new ClickHandler() {
      			public void onClick(ClickEvent event) {
      				boundForm.editNewRecord();
      				saveBtn.enable();
      			}
      		});
      		hLayout.addMember(newBtn);
      
      		IButton clearBtn = new IButton("Clear");
      		clearBtn.addClickHandler(new ClickHandler() {
      			public void onClick(ClickEvent event) {
      				boundForm.clearValues();
      				saveBtn.disable();
      			}
      		});
      		hLayout.addMember(clearBtn);
      
      		IButton filterBtn = new IButton("Filter");
      		filterBtn.addClickHandler(new ClickHandler() {
      			public void onClick(ClickEvent event) {
      				boundList.filterData(boundForm.getValuesAsCriteria());
      				saveBtn.disable();
      			}
      		});
      		hLayout.addMember(filterBtn);
      
      		IButton fetchBtn = new IButton("Fetch");
      		fetchBtn.addClickHandler(new ClickHandler() {
      			public void onClick(ClickEvent event) {
      				boundList.fetchData(boundForm.getValuesAsCriteria());
      				saveBtn.disable();
      			}
      		});
      		hLayout.addMember(fetchBtn);
      
      		vStack.addMember(hLayout);
      
      		boundViewer = new DetailViewer();
      		vStack.addMember(boundViewer);
      
      		vStack.draw();
      	}
      
      	private void bindComponents(String dsName) {
      		DataSource ds = DataSource.get(dsName);
      		boundList.setDataSource(ds);
      		boundViewer.setDataSource(ds);
      		boundForm.setDataSource(ds);
      		boundList.fetchData();
      		newBtn.enable();
      		saveBtn.disable();
      	}
      }
      The rest of the test case is the same, two ds.xml from here (+load the additional ds.xml in BuiltInDS.html) and this BuiltInDS.gwt.xml:
      Code:
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.5.1//EN"
         "http://google-web-toolkit.googlecode.com/svn/tags/2.5.1/distro-source/core/src/gwt-module.dtd">
      <module rename-to="builtinds">
      	<inherits name='com.google.gwt.user.User' />
      	<inherits name="com.smartgwt.tools.SmartGwtTools" />
      	<inherits name="com.smartgwtee.tools.Tools" />
      <!--     <inherits name="com.smartgwtee.SmartGwtEE"/>
       -->
      	<inherits name="com.smartgwtee.SmartGwtEENoTheme" />
      	<inherits name="com.smartclient.theme.simplicity.Simplicity" />
      	
          <!-- Uncomment lines below for GWT Super Dev Mode Support:
             - both lines needed for GWT < 2.6, only the first line needed for GWT < 2.7
             - see http://www.smartclient.com/docs/release/a/b/c/go.html#group..debugging -->
          <!-- <add-linker name="xsiframe" />                                             -->
          <!-- <set-configuration-property name="devModeRedirectEnabled" value="true" />  -->
      
          <!-- Uncomment lines below for GWT "stack emulation" with file/line number info -->
          <!-- <set-property               name="compiler.stackMode"  value="emulated" /> -->
          <!-- <set-configuration-property name="compiler.emulatedStack.recordFileNames"
                                           value="true" />                                -->
          <!-- <set-configuration-property name="compiler.emulatedStack.recordLineNumbers"
                                           value="true" />                                -->
      
      	<entry-point class='com.smartgwt.sample.client.BuiltInDS' />
      </module>
      The log output you asked for is (for three scroll-attempts):
      Code:
      12:33:21.763:TMR2:WARN:Log:expression is: isc.Log.logWarn('ScrollingMenu.hide() - trace:' +isc.Log.getStackTrace())
      12:33:21.779:TMR2:WARN:Log:MethodTimer: Logging traces whenever hide method on isc.ScrollingMenu is called
      12:33:30.418:IBLR3:WARN:Log:ScrollingMenu.hide() - trace:
          anonymous(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
          thunk(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
          hideObservation(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
          [a]MathFunction.invokeSuper(_1=>[Class PickListMenu], _2=>"hide", _3=>undef, _4=>undef, _5=>undef, _6=>undef, _7=>undef, _8=>undef, _9=>undef, _10=>undef, _11=>undef, _12=>undef, _13=>undef)
          PickListMenu.hide(_1=>undef, _2=>undef, _3=>undef, _4=>undef)
          ComboBoxItem.hidePickListOnBlur(_1=>undef)
          ComboBoxItem.elementBlur(undef, undef, undef, undef)
          DynamicForm.bubbleItemHandler(_1=>[ComboBoxItem ID:isc_BuiltInDS_3$1_5 name:ReportsTo], _2=>"elementBlur", _3=>undef, _4=>undef, _5=>undef, _6=>undef)
          DynamicForm.elementBlur(_1=>[INPUTElement]{name:ReportsTo}, _2=>[ComboBoxItem ID:isc_BuiltInDS_3$1_5 name:ReportsTo])
          FormItem.$12x(_1=>[INPUTElement]{name:ReportsTo}, _2=>[ComboBoxItem ID:isc_BuiltInDS_3$1_5 name:ReportsTo])
          ** recursed on [a]MathFunction.invokeSuper
      
      12:33:33.030:IBLR6:WARN:Log:ScrollingMenu.hide() - trace:
          anonymous(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
          thunk(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
          hideObservation(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
          [a]MathFunction.invokeSuper(_1=>[Class PickListMenu], _2=>"hide", _3=>undef, _4=>undef, _5=>undef, _6=>undef, _7=>undef, _8=>undef, _9=>undef, _10=>undef, _11=>undef, _12=>undef, _13=>undef)
          PickListMenu.hide(_1=>undef, _2=>undef, _3=>undef, _4=>undef)
          ComboBoxItem.hidePickListOnBlur(_1=>undef)
          ComboBoxItem.elementBlur(undef, undef, undef, undef)
          DynamicForm.bubbleItemHandler(_1=>[ComboBoxItem ID:isc_BuiltInDS_3$1_5 name:ReportsTo], _2=>"elementBlur", _3=>undef, _4=>undef, _5=>undef, _6=>undef)
          DynamicForm.elementBlur(_1=>[INPUTElement]{name:ReportsTo}, _2=>[ComboBoxItem ID:isc_BuiltInDS_3$1_5 name:ReportsTo])
          FormItem.$12x(_1=>[INPUTElement]{name:ReportsTo}, _2=>[ComboBoxItem ID:isc_BuiltInDS_3$1_5 name:ReportsTo])
          ** recursed on [a]MathFunction.invokeSuper
      
      12:34:04.421:IBLR2:WARN:Log:ScrollingMenu.hide() - trace:
          anonymous(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
          thunk(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
          hideObservation(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
          [a]MathFunction.invokeSuper(_1=>[Class PickListMenu], _2=>"hide", _3=>undef, _4=>undef, _5=>undef, _6=>undef, _7=>undef, _8=>undef, _9=>undef, _10=>undef, _11=>undef, _12=>undef, _13=>undef)
          PickListMenu.hide(_1=>undef, _2=>undef, _3=>undef, _4=>undef)
          ComboBoxItem.hidePickListOnBlur(_1=>undef)
          ComboBoxItem.elementBlur(undef, undef, undef, undef)
          DynamicForm.bubbleItemHandler(_1=>[ComboBoxItem ID:isc_BuiltInDS_3$1_5 name:ReportsTo], _2=>"elementBlur", _3=>undef, _4=>undef, _5=>undef, _6=>undef)
          DynamicForm.elementBlur(_1=>[INPUTElement]{name:ReportsTo}, _2=>[ComboBoxItem ID:isc_BuiltInDS_3$1_5 name:ReportsTo])
          FormItem.$12x(_1=>[INPUTElement]{name:ReportsTo}, _2=>[ComboBoxItem ID:isc_BuiltInDS_3$1_5 name:ReportsTo])
          ** recursed on [a]MathFunction.invokeSuper
      I also created a new video (which shows the SmartGWT version number). The first part shows the effect I reported.

      The second part shows another interesting effect:
      If you move the scrollbar-knob in the SelectItem, the position you leave the knob in is used as start position for the ComboBoxItem. I repeat this several times. The SelectItem on the other hand always starts in the top. This also happens in FF26 and GC42.

      I hope this helps (and I'm impressed about the amount of debug information you can generate!).

      Best regards
      Blama
      Last edited by Blama; 13 May 2015, 02:59. Reason: Added information that 2nd shown effect also happens in other browsers

      Comment


        #18
        Hi Isomorphic,

        this is the same logging data for three different kinds of popup-closes in FF26 - all are expected:

        FF26 Item selection:
        Code:
        14:12:25.482:IFCS4:WARN:Log:ScrollingMenu.hide() - trace:
            anonymous(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
            thunk(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
            hideObservation(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
            [a]MathFunction.invokeSuper(_1=>[Class PickListMenu], _2=>"hide", _3=>undef, _4=>undef, _5=>undef, _6=>undef, _7=>undef, _8=>undef, _9=>undef, _10=>undef, _11=>undef, _12=>undef, _13=>undef)
            PickListMenu.hide(_1=>undef, _2=>undef, _3=>undef, _4=>undef)
            PickListMenu.recordClick(_1=>[PickListMenu ID:isc_PickListMenu_0], _2=>Obj, _3=>30, _4=>Obj{name:Name}, _5=>0, _6=>"Fa Xian", _7=>"Fa Xian")
            ListGrid.rowClick(_1=>Obj, _2=>30, _3=>0, _4=>undef)
            ** recursed on [a]MathFunction.invokeSuper
        FF26 Right ComboBoxItem arrow click:
        Code:
        14:12:30.079:MDN1:WARN:Log:ScrollingMenu.hide() - trace:
            anonymous(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
            thunk(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
            hideObservation(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
            [a]MathFunction.invokeSuper(_1=>[Class PickListMenu], _2=>"hide", _3=>undef, _4=>undef, _5=>undef, _6=>undef, _7=>undef, _8=>undef, _9=>undef, _10=>undef, _11=>undef, _12=>undef, _13=>undef)
            PickListMenu.hide(_1=>undef, _2=>undef, _3=>undef, _4=>undef)
            ComboBoxItem.$143i([DynamicForm ID:isc_DynamicForm_1], undef)
            [c]Page.handleEvent(_1=>[DynamicForm ID:isc_DynamicForm_1], _2=>"mouseDown", _3=>undef)
            [c]EventHandler._$observed_doHandleMouseDown(_1=>[object MouseEvent], _2=>undef)
            doHandleMouseDownObservation([object MouseEvent], undef)
            [c]EventHandler.handleMouseDown(_1=>[object MouseEvent], _2=>undef)
            [c]EventHandler.dispatch(_1=>[c]EventHandler.handleMouseDown(), _2=>[object MouseEvent])
            anonymous(event=>[object MouseEvent])
        FF26 Click outside popup:
        Code:
        14:12:32.406:MDN9:WARN:Log:ScrollingMenu.hide() - trace:
            anonymous(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
            thunk(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
            hideObservation(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
            [a]MathFunction.invokeSuper(_1=>[Class PickListMenu], _2=>"hide", _3=>undef, _4=>undef, _5=>undef, _6=>undef, _7=>undef, _8=>undef, _9=>undef, _10=>undef, _11=>undef, _12=>undef, _13=>undef)
            PickListMenu.hide(_1=>undef, _2=>undef, _3=>undef, _4=>undef)
            ComboBoxItem.$143i([Layout ID:isc_Window_0_body], undef)
            [c]Page.handleEvent(_1=>[Layout ID:isc_Window_0_body], _2=>"mouseDown", _3=>undef)
            [c]EventHandler._$observed_doHandleMouseDown(_1=>[object MouseEvent], _2=>undef)
            doHandleMouseDownObservation([object MouseEvent], undef)
            [c]EventHandler.handleMouseDown(_1=>[object MouseEvent], _2=>undef)
            [c]EventHandler.dispatch(_1=>[c]EventHandler.handleMouseDown(), _2=>[object MouseEvent])
            anonymous(event=>[object MouseEvent])
        Best regards
        Blama

        Comment


          #19
          Ok - we believe we've got this one resolved now.
          It looks like there is a subtle difference between native behavior in our previous test environment (IE11 on Windows 7) and behavior on Windows 8.1.
          Anyway - we were able to reproduce the issue on a different test machine and have applied a change which we believe will fix it.
          Please try the next nightly build (5.0p / 5.1d branch) dated May 14 or above.

          Regards
          Isomorphic Software

          Comment


            #20
            Hi Isomorphic,

            thanks for sticking with it. The good news is that the initially reported problem is gone now - tested with v10.0p_2015-05-14 and Win8.1 and browsers IE11, FF26, GC42 in both the testcase and my application.

            I though have now a minor glitch (but I'm not able to reproduce it in the testcase): In IE11 (only) in my application, when there is no need for a scrollbar, the gray entry-hover-bar is not full width. See the attached screenshot from my application. Do you have an idea what might be causing this (again, only IE11).

            On the 2nd issue reported in the last post:
            The interference of the ComboBoxItem scrollbar-knob-position with the SelectItem scrollbar-knob reported in the last post is still present in all browsers. It also seems to make a difference if you scroll via mouse or scrollbar-click and if you close via click outside or click on the arrow.

            Best regards
            Blama
            Attached Files

            Comment


              #21
              Originally posted by Blama View Post
              I though have now a minor glitch (but I'm not able to reproduce it in the testcase): In IE11 (only) in my application, when there is no need for a scrollbar, the gray entry-hover-bar is not full width. See the attached screenshot from my application. Do you have an idea what might be causing this (again, only IE11).
              Sorry, this is caused by my skin_styles.css-changes.
              So only the minor report with the scrollbar-knob-position is open.

              Best regards
              Blama

              Comment


                #22
                I managed to isolate the skin change to just one rule and opened a new thread as this is clearly unrelated (happens also for SelectItems).

                Comment

                Working...
                X