Layout issue in Windows [message #1796991] |
Tue, 23 October 2018 15:55 |
Javier Puerto Messages: 1 Registered: October 2018 |
Junior Member |
|
|
Hi all,
We have created an Eclipse RCP application for configuring a hardware device, everything works fine for Linux and OSX platforms but we are experiencing an annoying issue with the layout for Windows platforms, (7, 8 and 10, for 32 and 64 bits).
We have a splash image and then the application starts with a fixed windows size (800x600). We did not detected the issue in the Windows VMs but it can be reproduced consistently in a non virtualized environment. After the splash screen, sometimes the background of the controls and the menu itself becomes transparent and even if the application is usable it is not looking good. Moving the application outside the windows bounds and back fixes the problems with it in the regions that has been moved outside the bounds. So I think that it could be a redraw issue.
Initially the application was developed by using Eclipse 4.6 but in our latest tests we have upgrade to latest version 4.9 with the same results. We initialize the layout using a @PostConstruct annotation and after the layout initialization, in the same method, we call the "findDevice()" method that creates a Job to read the hardware device configuration, if the device is found we asynchronously (UISynchronize) redraw the needed controls and unlock the user's interaction.
@PostConstruct
public void createWindow(Composite window,
MainMessagesRegistry messagesRegistry)
{
this.messagesRegistry = messagesRegistry;
this.mainWindow = window;
disableOSXPreferences(window);
engine.setId(window, "application");
GridLayout windowLayout = new GridLayout();
windowLayout.marginWidth = APPLICATION_PADDING;
windowLayout.marginHeight = APPLICATION_PADDING;
window.setLayout(windowLayout);
Shell shell = window.getShell();
shell.setMinimumSize(APPLICATION_WIDTH, APPLICATION_HEIGHT);
Composite innerComposite = new Composite(window, SWT.BORDER);
innerComposite.setLayout(new GridLayout(12, true));
// Status configuration.
createStatus(innerComposite);
// Logo configuration.
createLogo(innerComposite);
// Manual adjustment group.
createManualAdjustmentGroup(innerComposite);
// Presets group.
createPresetsGroup(innerComposite);
GridDataFactory.fillDefaults().grab(true, true).applyTo(innerComposite);
// Disable window interaction until device is found.
setControlEnabled(mainWindow, false);
findDevice();
}
I have try to force a redraw asynchronously by calling the "redraw()" and "update()" methods on mainWindows or innerComposite asynchronously but it does not seems to work as expected.
Does somebody experience this issue? Any advice/solution about what could be wrong?
Salu2.
|
|
|
Powered by
FUDForum. Page generated in 0.03485 seconds