[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[albireo-dev] Re: support for Eclipse 3.4 on MacOS X
|
This exception
> org.eclipse.swt.SWTException: Invalid thread access
> at org.eclipse.swt.SWT.error(SWT.java:3777)
> at org.eclipse.swt.SWT.error(SWT.java:3695)
> at org.eclipse.swt.SWT.error(SWT.java:3666)
> at org.eclipse.swt.widgets.Display.error(Display.java:1126)
> at org.eclipse.swt.widgets.Display.checkDevice(Display.java:627)
> at org.eclipse.swt.graphics.Device.getDPI(Device.java:370)
> at org.eclipse.swt.graphics.Font.getFontData(Font.java:301)
> at org.eclipse.albireo.core.ResourceConverter.convertFont(ResourceConverter.java:40)
> at org.eclipse.albireo.core.LookAndFeelHandler.propagateSwtFont(LookAndFeelHandler.java:282)
> at org.eclipse.albireo.core.AwtEnvironment$6.run(AwtEnvironment.java:181)
> at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
> at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
> at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269)
> at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
> at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184)
> at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176)
> at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
should be fixed by this commit.
Index: src/org/eclipse/albireo/core/AwtEnvironment.java
===================================================================
RCS file: /cvsroot/technology/org.eclipse.albireo/org.eclipse.albireo.core/src/org/eclipse/albireo/core/AwtEnvironment.java,v
retrieving revision 1.24
diff -c -3 -r1.24 AwtEnvironment.java
*** src/org/eclipse/albireo/core/AwtEnvironment.java 2 May 2008 18:38:17 -0000 1.24
--- src/org/eclipse/albireo/core/AwtEnvironment.java 24 Jun 2008 19:19:27 -0000
***************
*** 39,44 ****
--- 39,45 ----
import org.eclipse.swt.SWTException;
import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.graphics.Font;
+ import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
***************
*** 174,184 ****
initialFont[0] = display.getSystemFont();
}
});
try {
EventQueue.invokeAndWait(new Runnable() {
public void run() {
setLookAndFeel();
! LookAndFeelHandler.getInstance().propagateSwtFont(initialFont[0]);
if (FocusHandler.verboseKFHEvents)
FocusDebugging.enableKeyboardFocusManagerLogging();
}
--- 175,187 ----
initialFont[0] = display.getSystemFont();
}
});
+ final Font swtFont = initialFont[0];
+ final FontData[] swtFontData = swtFont.getFontData();
try {
EventQueue.invokeAndWait(new Runnable() {
public void run() {
setLookAndFeel();
! LookAndFeelHandler.getInstance().propagateSwtFont(swtFont, swtFontData);
if (FocusHandler.verboseKFHEvents)
FocusDebugging.enableKeyboardFocusManagerLogging();
}
Index: src/org/eclipse/albireo/core/LookAndFeelHandler.java
===================================================================
RCS file: /cvsroot/technology/org.eclipse.albireo/org.eclipse.albireo.core/src/org/eclipse/albireo/core/LookAndFeelHandler.java,v
retrieving revision 1.10
diff -c -3 -r1.10 LookAndFeelHandler.java
*** src/org/eclipse/albireo/core/LookAndFeelHandler.java 28 May 2008 18:53:34 -0000 1.10
--- src/org/eclipse/albireo/core/LookAndFeelHandler.java 24 Jun 2008 19:19:27 -0000
***************
*** 22,27 ****
--- 22,28 ----
import org.eclipse.albireo.internal.Platform;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
+ import org.eclipse.swt.graphics.FontData;
/**
* This class deals with the customization of the look&feel
***************
*** 310,323 ****
* In this implementation, this method calls the
* {@link #updateLookAndFeelFonts(java.awt.Font)} method.
* @param swtFont The default SWT font.
* @return The corresponding AWT font.
* @see #isSwtDefaultFontPropagated()
* @see #updateLookAndFeelFonts(java.awt.Font)
*/
! public java.awt.Font propagateSwtFont(Font swtFont) {
assert EventQueue.isDispatchThread(); // On AWT event thread
! java.awt.Font awtFont = ResourceConverter.getInstance().convertFont(swtFont);
if (isSwtDefaultFontPropagated()
&& !swtFont.getDevice().isDisposed()
&& (lastPropagatedSwtFont != swtFont)) {
--- 311,326 ----
* In this implementation, this method calls the
* {@link #updateLookAndFeelFonts(java.awt.Font)} method.
* @param swtFont The default SWT font.
+ * @param swtFontData Result of <code>swtFont.getFontData()</code>,
+ * obtained on the SWT event thread.
* @return The corresponding AWT font.
* @see #isSwtDefaultFontPropagated()
* @see #updateLookAndFeelFonts(java.awt.Font)
*/
! public java.awt.Font propagateSwtFont(Font swtFont, FontData[] swtFontData) {
assert EventQueue.isDispatchThread(); // On AWT event thread
! java.awt.Font awtFont = ResourceConverter.getInstance().convertFont(swtFont, swtFontData);
if (isSwtDefaultFontPropagated()
&& !swtFont.getDevice().isDisposed()
&& (lastPropagatedSwtFont != swtFont)) {
Index: src/org/eclipse/albireo/core/ResourceConverter.java
===================================================================
RCS file: /cvsroot/technology/org.eclipse.albireo/org.eclipse.albireo.core/src/org/eclipse/albireo/core/ResourceConverter.java,v
retrieving revision 1.2
diff -c -3 -r1.2 ResourceConverter.java
*** src/org/eclipse/albireo/core/ResourceConverter.java 28 Apr 2008 16:22:15 -0000 1.2
--- src/org/eclipse/albireo/core/ResourceConverter.java 24 Jun 2008 19:19:27 -0000
***************
*** 35,52 ****
/**
* Converts a font from SWT to Swing.
* The argument Font remains owned by the caller.
*/
! public java.awt.Font convertFont(Font swtFont) {
! FontData fontData = swtFont.getFontData()[0];
// AWT font sizes assume a 72 dpi resolution, always. The true screen resolution must be
// used to convert the platform font size into an AWT point size that matches when displayed.
int resolution = Toolkit.getDefaultToolkit().getScreenResolution();
! int awtFontSize = (int)Math.round((double)fontData.getHeight() * resolution / 72.0);
// The style constants for SWT and AWT map exactly, and since they are int constants, they should
// never change. So, the SWT style is passed through as the AWT style.
! return new java.awt.Font(fontData.getName(), fontData.getStyle(), awtFontSize);
}
--- 35,55 ----
/**
* Converts a font from SWT to Swing.
* The argument Font remains owned by the caller.
+ * @param swtFont An SWT font.
+ * @param swtFontData Result of <code>swtFont.getFontData()</code>,
+ * obtained on the SWT event thread.
*/
! public java.awt.Font convertFont(Font swtFont, FontData[] swtFontData) {
! FontData fontData0 = swtFontData[0];
// AWT font sizes assume a 72 dpi resolution, always. The true screen resolution must be
// used to convert the platform font size into an AWT point size that matches when displayed.
int resolution = Toolkit.getDefaultToolkit().getScreenResolution();
! int awtFontSize = (int)Math.round((double)fontData0.getHeight() * resolution / 72.0);
// The style constants for SWT and AWT map exactly, and since they are int constants, they should
// never change. So, the SWT style is passed through as the AWT style.
! return new java.awt.Font(fontData0.getName(), fontData0.getStyle(), awtFontSize);
}
Index: src/org/eclipse/albireo/core/SwingControl.java
===================================================================
RCS file: /cvsroot/technology/org.eclipse.albireo/org.eclipse.albireo.core/src/org/eclipse/albireo/core/SwingControl.java,v
retrieving revision 1.87
diff -c -3 -r1.87 SwingControl.java
*** src/org/eclipse/albireo/core/SwingControl.java 24 Jun 2008 19:05:01 -0000 1.87
--- src/org/eclipse/albireo/core/SwingControl.java 24 Jun 2008 19:19:29 -0000
***************
*** 52,57 ****
--- 52,58 ----
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
+ import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
***************
*** 294,299 ****
--- 295,301 ----
final Color foreground = getForeground();
final Color background = getBackground();
final Font font = getFont();
+ final FontData[] fontData = font.getFontData();
// Create AWT/Swing components on the AWT thread. This is
// especially necessary to avoid an AWT leak bug (Sun bug 6411042).
***************
*** 330,336 ****
// The color of the content Pane is visible permanently.
setComponentForeground(rootPaneContainer.getContentPane(), foreground, true);
setComponentBackground(rootPaneContainer.getContentPane(), background, true);
! setComponentFont(font, true);
rootPaneContainer.getRootPane().getContentPane().add(swingComponent);
swingComponent.putClientProperty(SWT_PARENT_PROPERTY_KEY, SwingControl.this);
--- 332,338 ----
// The color of the content Pane is visible permanently.
setComponentForeground(rootPaneContainer.getContentPane(), foreground, true);
setComponentBackground(rootPaneContainer.getContentPane(), background, true);
! setComponentFont(font, fontData, true);
rootPaneContainer.getRootPane().getContentPane().add(swingComponent);
swingComponent.putClientProperty(SWT_PARENT_PROPERTY_KEY, SwingControl.this);
***************
*** 1118,1134 ****
*/
public void setFont(final Font font) {
super.setFont(font);
EventQueue.invokeLater(new Runnable() {
public void run() {
! setComponentFont(font, false);
}
});
}
! private void updateDefaultFont(Font swtFont) {
assert EventQueue.isDispatchThread(); // On AWT event thread
! java.awt.Font awtFont = LookAndFeelHandler.getInstance().propagateSwtFont(swtFont);
if (awtFont == null) {
return;
}
--- 1120,1137 ----
*/
public void setFont(final Font font) {
super.setFont(font);
+ final FontData[] fontData = font.getFontData();
EventQueue.invokeLater(new Runnable() {
public void run() {
! setComponentFont(font, fontData, false);
}
});
}
! private void updateDefaultFont(Font swtFont, FontData[] swtFontData) {
assert EventQueue.isDispatchThread(); // On AWT event thread
! java.awt.Font awtFont = LookAndFeelHandler.getInstance().propagateSwtFont(swtFont, swtFontData);
if (awtFont == null) {
return;
}
***************
*** 1144,1154 ****
}
}
! protected void setComponentFont(Font swtFont, boolean preserveDefaults) {
assert EventQueue.isDispatchThread();
ResourceConverter converter = ResourceConverter.getInstance();
! java.awt.Font awtFont = converter.convertFont(swtFont);
// Allow subclasses to react to font change if necessary.
updateAwtFont(awtFont);
--- 1147,1157 ----
}
}
! protected void setComponentFont(Font swtFont, FontData[] swtFontData, boolean preserveDefaults) {
assert EventQueue.isDispatchThread();
ResourceConverter converter = ResourceConverter.getInstance();
! java.awt.Font awtFont = converter.convertFont(swtFont, swtFontData);
// Allow subclasses to react to font change if necessary.
updateAwtFont(awtFont);
***************
*** 1180,1188 ****
private void handleSettingsChange() {
final Font newFont = getDisplay().getSystemFont();
EventQueue.invokeLater(new Runnable() {
public void run() {
! updateDefaultFont(newFont);
}
});
}
--- 1183,1192 ----
private void handleSettingsChange() {
final Font newFont = getDisplay().getSystemFont();
+ final FontData[] newFontData = newFont.getFontData();
EventQueue.invokeLater(new Runnable() {
public void run() {
! updateDefaultFont(newFont, newFontData);
}
});
}