Community
Participate
Working Groups
Created attachment 224018 [details] Sample application based on Eclipse 3.6.2 If a table has "many" columns (I don't know the threshold), scrolling it horizontally will eventually blank its contents. The contents are re-painted as soon as the mouse cursor is moved over each row. This behavior is only observed under Windows 7, Windows XP displays the table correctly. Also, if the application is started under Windows 7 using the compatibility mode for XP, the table is displayed correctly. The attachment contains a zipped Eclipse project with a small RCP application which can be built and run with Eclipse 3.6.2. It uses Eclipse 3.6.2 as the target platform, but Eclipse 3.6, 3.6.1, 3.7.1 and 3.7.2 behave equally. If you launch the application and scroll the table to the far right end, you will notice that the table will eventually be blank. If you now move the mouse cursor over it, the contents will re-appear. The code is basically taken from Bug 368928 (and enclosed in a RCP application), with two changes: The number of columns is reduced to 100 as the reason for Bug 368928 seem to be the 400 columns and this is not my point, and the table is filled with 100 rows instead of one, as the effect does not seem to show when there is only one row filled with data. A technician from Microsoft has traced the sample application as has come to the conclusion that within SWT (or Java), the OS version is queried. Depending on the returned information, different code is being executed. When the returned OS version information is tweaked from "Windows 7" to "Windows XP", the table contents do not disappear. I cannot judge if the conclusion is correct, but it's at least worth a hint. Here are the details of the analysis: 0:000> lmvmswt_win32_3659 start end module name 10000000 10063000 swt_win32_3659 (export symbols) C:\Users\...\Desktop\tablebug\eclipse\configuration\org.eclipse.osgi\bundles\22\1\.cp\swt-win32-3659.dll Loaded symbol image file: C:\Users\...\Desktop\tablebug\eclipse\configuration\org.eclipse.osgi\bundles\22\1\.cp\swt-win32-3659.dll Image path: C:\Users\...\Desktop\tablebug\eclipse\configuration\org.eclipse.osgi\bundles\22\1\.cp\swt-win32-3659.dll Image name: swt-win32-3659.dll Timestamp: Wed Jan 19 00:32:43 2011 (4D36231B) CheckSum: 00064D26 ImageSize: 00063000 File version: 3.6.5.9 Product version: 0.0.0.0 File flags: 0 (Mask 3F) File OS: 40000 NT Base File type: 2.0 Dll File date: 00000000.00000000 Translations: 0409.04b0 CompanyName: Eclipse Foundation ProductName: Standard Widget Toolkit InternalName: SWT OriginalFilename: swt-win32-3659.dll ProductVersion: 0,0,0,0 FileVersion: 3.659 FileDescription: SWT for Windows native library LegalCopyright: Copyright (c) 2000, 2006 IBM Corp. All Rights Reserved. CommandLine: C:\Users\...\Desktop\tablebug\eclipse\tablebug.exe Symbol search path is: SRV*C:\Symbols*http://symweb;SRV*C:\WebSymbols*http://msdl.microsoft.com/download/symbols (e94.2050): Break instruction exception - code 80000003 (first chance) eax=00000000 ebx=00000003 ecx=1d2b0000 edx=00000000 esi=00000000 edi=004000e0 eip=77cf054d esp=0018fac4 ebp=0018faf0 iopl=0 nv up ei pl zr na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246 ntdll!LdrpDoDebuggerBreak+0x2b: 77cf054d cc int 3 0:000> bu swt_win32_3659!Java_org_eclipse_swt_internal_win32_OS_GetVersionExW__Lorg_eclipse_swt_internal_win32_OSVERSIONINFOW_2 0:000> g Breakpoint 0 hit eax=1000821f ebx=34bfc6e0 ecx=003c7928 edx=00000008 esi=34bfc6e0 edi=003c7800 eip=1000821f esp=0018ec3c ebp=0018ec70 iopl=0 nv up ei ng nz na pe cy cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000287 swt_win32_3659!Java_org_eclipse_swt_internal_win32_OS_GetVersionExW__Lorg_eclipse_swt_internal_win32_OSVERSIONINFOW_2: 1000821f 55 push ebp 0:000> kv ChildEBP RetAddr Args to Child WARNING: Stack unwind information not available. Following frames may be wrong. 0018ec38 0211a717 003c7928 0018ec78 0018ec80 swt_win32_3659!Java_org_eclipse_swt_internal_win32_OS_GetVersionExW__Lorg_eclipse_swt_internal_win32_OSVERSIONINFOW_2 *** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Program Files (x86)\Java\jre7\bin\client\jvm.dll - 0018eccc 6e069c62 00001fa0 02110372 003c7800 0x211a717 0018ece4 6e06a39a 0018ed18 0018edec 0000000a jvm!JVM_Clone+0x490d2 0018ed60 6e11978e 0018ede4 0018edd0 0018edf4 jvm!JVM_Clone+0x4980a 0018eda8 6e06a41d 6e06a230 0018ede4 0018edd0 jvm!JVM_FindSignal+0x602be 0018edc4 6dfcb808 0018ede4 04fd8894 0018edf4 jvm!JVM_Clone+0x4988d 0018ee3c 6dfcc2c0 04fd8890 003c7800 34c0fa60 jvm+0x8b808 0018ee54 6dfcc6c2 003c7800 003c7800 34c0fba8 jvm+0x8c2c0 0018eee0 6dfcca59 04fd7528 003c7800 04fd7524 jvm+0x8c6c2 0018ef14 6df968ec 003c7800 34b8be7c 000000b2 jvm+0x8ca59 0018f04c 6df97d12 0018f144 04fd74bc 0000006b jvm+0x568ec 0018f070 6df93b2a 0018f144 04fd74bc 0000006b jvm+0x57d12 0018f1b0 6e069c62 00001fa0 02110372 003c7800 jvm+0x53b2a 0018f1c8 6e06a39a 0018f1fc 0018f2d0 0000000a jvm!JVM_Clone+0x490d2 0018f244 6e11978e 0018f2c8 0018f2b4 0018f2d8 jvm!JVM_Clone+0x4980a 0018f28c 6e06a41d 6e06a230 0018f2c8 0018f2b4 jvm!JVM_FindSignal+0x602be 0018f2a8 6dfcb808 0018f2c8 04fd74b8 0018f2d8 jvm!JVM_Clone+0x4988d 0018f320 6dfcc2c0 04fd74b4 003c7800 34b88008 jvm+0x8b808 0018f338 6dfcc6c2 003c7800 003c7800 34b99af0 jvm+0x8c2c0 0018f3c4 6dfcca59 003c81f4 003c7800 00000000 jvm+0x8c6c2 0018f3f8 6df97ddc 003c7800 003c7800 000000b8 jvm+0x8ca59 0018f410 6df9865d 0018f560 0018f440 051a5cd0 jvm+0x57ddc 0018f450 6df988f0 0018f560 003c81b8 000000a8 jvm+0x5865d 0018f468 6df94879 0018f560 00000000 003c81b8 jvm+0x588f0 0018f584 0212057e 003c81b8 000000b8 02120554 jvm+0x54879 0018f5bc 0211345a 00000000 00000000 00000000 0x212057e 0018f5f4 0211345a 0018f5fc 34b0fc00 0018f638 0x211345a 0018f61c 021139d8 00000000 00000000 00000000 0x211345a 0018f664 021139d8 00000000 148e2360 14ad48b0 0x21139d8 0018f778 6e069c62 00001fa0 02110372 003c7800 0x21139d8 0018f790 6e06a39a 0018f7c4 0018f89c 0000000a jvm!JVM_Clone+0x490d2 0018f80c 6e11978e 0018f894 0118f87c 0018f928 jvm!JVM_Clone+0x4980a 0018f854 6e06a41d 6e06a230 0018f894 0018f87c jvm!JVM_FindSignal+0x602be 0018f870 6e07539e 0018f894 003c81ac 0018f928 jvm!JVM_Clone+0x4988d 0018f970 6e07569e 003c81a8 003c81ac 003c819c jvm!JVM_Clone+0x5480e 0018f9bc 6e0150a9 14b9ce48 003c819c 003c81a0 jvm!JVM_Clone+0x54b0e *** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Program Files (x86)\Java\jre7\bin\java.dll - 0018f9f4 56947de6 003c7928 0018fa5c 0018fa58 jvm!JVM_InvokeMethod+0xe9 0018fa44 0211345a 39747e70 021189a6 1f3215c0 java!Java_sun_reflect_NativeMethodAccessorImpl_invoke0+0x15 0018fa80 0211345a 00000000 1f3215c0 1f321430 0x211345a 0018fab8 021139d8 1f3215c0 1f321430 1f321698 0x211345a 0018fbcc 6e069c62 00001f80 02110372 003c7800 0x21139d8 0018fbe4 6e06a39a 0018fc18 0018fdd0 0000000a jvm!JVM_Clone+0x490d2 0018fc60 6e11978e 0018fdc8 0018fcd0 0018fd3c jvm!JVM_Clone+0x4980a 0018fca8 6e06a41d 6e06a230 0018fdc8 0018fcd0 jvm!JVM_FindSignal+0x602be 0018fcc4 6dfef12a 0018fdc8 003c8194 0018fd3c jvm!JVM_Clone+0x4988d 0018fd84 6dff12af 003c8d2c 00000001 007ad338 jvm!JNI_CreateJavaVM+0x57fa *** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Users\...\Desktop\tablebug\eclipse\plugins\org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101222\eclipse_1312.dll - 0018fde8 72005fbb 003c7928 003c8d2c 007ad338 jvm!JNI_CreateJavaVM+0x797f 0018fe44 720051ae 008968e0 00896cd8 00896de8 eclipse_1312!Java_org_eclipse_equinox_launcher_JNIBridge__1takedown_1splash+0x515 0018fe5c 720015b0 008968e0 00896cd8 00896de8 eclipse_1312!runW+0x418f *** ERROR: Module load completed but symbols could not be loaded for image00400000 0018feb8 00401414 00000002 00894ff0 008961c8 eclipse_1312!runW+0x591 0018ff00 00401010 00000002 00894ff0 0018ff84 image00400000+0x1414 0018ff10 00403029 00000001 008922c0 00893690 image00400000+0x1010 0018ff84 75328543 7ffde000 0018ffd4 77caac69 image00400000+0x3029 0018ff90 77caac69 7ffde000 acd1982d 00000000 KERNEL32!BaseThreadInitThunk+0xe (FPO: [Non-Fpo]) (CONV: fastcall) 0018ffd4 77caac3c 00402f46 7ffde000 ffffffff ntdll!__RtlUserThreadStart+0x72 (FPO: [Non-Fpo]) (CONV: stdcall) 0018ffec 00000000 00402f46 7ffde000 00000000 ntdll!_RtlUserThreadStart+0x1b (FPO: [Non-Fpo]) (CONV: stdcall) 0:000> bp ntdll!RtlGetVersion 0:000> g Breakpoint 1 hit eax=0018eb20 ebx=003c7928 ecx=ab518671 edx=04fd8898 esi=0018eb20 edi=0000011c eip=77caa47d esp=0018eaf4 ebp=0018eb04 iopl=0 nv up ei pl zr na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246 ntdll!RtlGetVersion: 77caa47d 8bff mov edi,edi 0:000> gu eax=00000000 ebx=003c7928 ecx=ab518671 edx=00000000 esi=0018eb20 edi=0000011c eip=76a9d458 esp=0018eafc ebp=0018eb04 iopl=0 nv up ei pl zr na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246 KERNELBASE!GetVersionExW+0x32: 76a9d458 85c0 test eax,eax 0:000> dt @esi OSVERSIONINFOEX KERNEL32!OSVERSIONINFOEX +0x000 dwOSVersionInfoSize : 0x114 +0x004 dwMajorVersion : 6 +0x008 dwMinorVersion : 2 +0x00c dwBuildNumber : 0x23f0 +0x010 dwPlatformId : 2 +0x014 szCSDVersion : [128] "" +0x094 wServicePackMajor : 0 +0x096 wServicePackMinor : 0 +0x098 wSuiteMask : 0 +0x09a wProductType : 0 '' +0x09b wReserved : 0 '' I have set the severity to "Ciritical" as our customer is currently migrating his desktop PCs towards Windows 7, and the RCP-based application we built for them is virtually unusable with the disappearing table contents.
I need to add that running our application in XP compatibility mode is not an option for our customer, as it is started via Java Webstart and each user would need to set the compatibility mode for the javaws.exe, but the users do not possess the necessary rights.
This bug is caused by the optimization done for bug#124965. The problem happens because the header control cannot be bigger than 32k pixels (see bug#72293). The optimization uses the header control message HDM_GETITEMRECT to determine which columns are visible in the client area and only provide data for visible columns. When the header control is bigger than 32k pixels (table scrolled all the way to the right in sample), HDM_GETITEMRECT calculates a bad rectangle and the code in WM_HSCROLL (see patch) misbehave. The fix is to use LVM_GETSUBITEMRECT instead which does not have the 32k limitation. This patch fixes the blank content problem. Note the bug#72293 still happens and there is not SWT can do to fix it. http://git.eclipse.org/c/platform/eclipse.platform.swt.git/commit?id=f395263a81e126480be2c5aab15eeebeb9afb3e5
Could you provide a patched jar for the fix?
fix is working fine, thank you! (backported it myself, don't bother)