Index: tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/swt/SwingChartComposite.java
===================================================================
--- tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/swt/SwingChartComposite.java	(revision 2043)
+++ tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/swt/SwingChartComposite.java	(revision 2044)
@@ -13,6 +13,8 @@
 import java.awt.datatransfer.DataFlavor;
 import java.awt.datatransfer.Transferable;
 import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
 import java.awt.event.WindowEvent;
@@ -20,33 +22,21 @@
 import java.awt.event.WindowListener;
 import java.awt.image.BufferedImage;
 import java.io.IOException;
-import java.lang.reflect.Method;
-import java.util.Stack;
 
 import javax.swing.JComponent;
 import javax.swing.JPanel;
 import javax.swing.SwingUtilities;
 import javax.swing.border.LineBorder;
 
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.Platform;
 import org.eclipse.swt.awt.SWT_AWT;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Shell;
-import org.txm.chartsengine.core.preferences.ChartsEnginePreferences;
 import org.txm.chartsengine.core.results.ChartResult;
-import org.txm.chartsengine.rcp.IChartComponent;
 import org.txm.chartsengine.rcp.editors.ChartEditor;
-import org.txm.chartsengine.rcp.events.EventCallBack;
 import org.txm.chartsengine.rcp.events.EventCallBackHandler;
 import org.txm.core.messages.TXMCoreMessages;
-import org.txm.core.preferences.TBXPreferences;
-import org.txm.rcp.preferences.RCPPreferences;
 import org.txm.utils.OSDetector;
 import org.txm.utils.logger.Log;
 
@@ -109,10 +99,19 @@
 		// it breaks all the key events in charts (zoom, pan, selection, etc.) but 
 		// stops the conflict between AWT and SWT events that freezes the SWT Spinner, TextFields, etc.
 		// (Progression query, Specificities chart banality, etc.)
-//		if(OSDetector.isFamilyUnix())	{
-//			this.frame.setFocusableWindowState(false);
-//		}
+		// see: http://forge.cbp.ens-lyon.fr/redmine/issues/2548
+		if(OSDetector.isFamilyUnix()
+				//&& (chartEditor.getClass().getName().equals("org.txm.progression.rcp.editors.ProgressionEditor") //$NON-NLS-1$
+//				|| chartEditor.getClass().getName().equals("org.txm.specificities.rcp.editors.SpecificitiesSelectionEditor") //$NON-NLS-1$
+//				|| chartEditor.getClass().getName().equals("org.txm.ca.rcp.editors.CAFactorialMapChartEditor") //$NON-NLS-1$
+			//	)
+			)	{
+//			Log.finest("SwingChartComposite.SwingChartComposite(): Temporary Linux bug workaround: AWT focusable window state set to false.");
+			//this.frame.setFocusableWindowState(false);
+		this.frame.setAutoRequestFocus(false);
+		}
 		
+		
 		this.frame.setVisible(true);
 
 		this.rootPanel.setBackground(Color.WHITE);
@@ -281,23 +280,23 @@
 		});
 		
 		
-//		
-//		this.frame.addFocusListener(new FocusListener() {
-//			
-//			@Override
-//			public void focusLost(FocusEvent e) {
-//				// TODO Auto-generated method stub
-//				Log.finest("SwingChartComposite.SwingChartComposite(...).new FocusListener() {...}.focusLost()");
-//			}
-//			
-//			@Override
-//			public void focusGained(FocusEvent e) {
-//				// TODO Auto-generated method stub
-//				Log.finest("SwingChartComposite.SwingChartComposite(...).new FocusListener() {...}.focusGained()");
-//			}
-//		});
-//
-//		
+		
+		this.frame.addFocusListener(new FocusListener() {
+			
+			@Override
+			public void focusLost(FocusEvent e) {
+				// TODO Auto-generated method stub
+				Log.finest("SwingChartComposite.SwingChartComposite(...).new FocusListener() {...}.focusLost()");
+			}
+			
+			@Override
+			public void focusGained(FocusEvent e) {
+				// TODO Auto-generated method stub
+				Log.finest("SwingChartComposite.SwingChartComposite(...).new FocusListener() {...}.focusGained()");
+			}
+		});
+
+		
 //		this.frame.addWindowFocusListener(new WindowFocusListener() {
 //			
 //			@Override
@@ -431,7 +430,7 @@
 		// Debug
 		Log.finest(TXMCoreMessages.bind("SwingChartComposite.setFocus(): SWT composite focus given state = {0}.", this.isFocusControl())); //$NON-NLS-1$
 		
-		this.requestFocusInChartComponent();
+		//this.requestFocusInChartComponent();
 		
 		return focusState;
 	}
@@ -576,8 +575,8 @@
 						chartEditor.setFocus();
 						//chartEditor.getParent().setFocus();
 						//chartEditor.getParent().getShell().setActive();
+						requestFocusInChartComponent();
 						
-						
 						//chartEditor.getParent().setFocus();
 //						chartEditor.forceFocus();
 					}
@@ -587,6 +586,56 @@
 
 			@Override
 			public void mouseExited(java.awt.event.MouseEvent e) {
+				
+				 // FIXME: SJ: temporary workaround to Linux focus bugs
+				// it breaks all the key events in charts (zoom, pan, selection, etc.) but 
+				// stops the conflict between AWT and SWT events that freezes the SWT Spinner, TextFields, etc.
+				// (Progression query, Specificities chart banality, etc.)
+				// see: http://forge.cbp.ens-lyon.fr/redmine/issues/2548
+				if(OSDetector.isFamilyUnix())	{
+					if (!((Component) getChartComponent()).contains(e.getPoint())) {
+
+						// TODO Auto-generated method stub
+						// Component f =
+						// KeyboardFocusManager.getCurrentKeyboardFocusManager().getPermanentFocusOwner();
+						// frame.setFocusableWindowState(true);
+						// frame.setAutoRequestFocus(false);
+						// frame.setFocusable(false);
+						// KeyboardFocusManager.getCurrentKeyboardFocusManager().clearFocusOwner();
+						// KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner();
+						// frame.setFocusableWindowState(false);
+						// f.setEnabled(false);
+						// f.setEnabled(true);
+						// System.out.println("SwingChartComposite.initEventsListeners().new
+						// MouseListener() {...}.mouseExited()");
+						// frame.setAutoRequestFocus(false);
+						// frame.setFocusable(false);
+						// KeyboardFocusManager.getCurrentKeyboardFocusManager().clearFocusOwner();
+						// KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner();
+
+						frame.setVisible(false);
+						Log.finest("SwingChartComposite.initEventsListeners().new MouseListener() {...}.mouseExited()");
+						frame.setVisible(true);
+
+						Display.getDefault().asyncExec(new Runnable() {
+
+							@Override
+							public void run() {
+								// TODO Auto-generated method stub
+								// shell.setMinimized(true);
+								// shell.setMinimized(false);
+								// shell.setActive();
+								getChartComponent().getChartEditor().getShell().forceActive();
+							}
+						});
+
+					}
+					
+					
+				}
+				
+				
+				
 				// TODO Auto-generated method stub
 				//Frame frame = (Frame) swingComponent.getFocusCycleRootAncestor();
 				//frame.setAutoRequestFocus(false);
