From 53206ce28721940f13e60c351ef4773edab89be7 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Wed, 26 Nov 2008 14:44:06 +0000
Subject: [PATCH] Fix for issue 3633 (status-panel is not coming up in Asian locales)

---
 opends/src/guitools/org/opends/guitools/controlpanel/ControlPanelLauncher.java |   47 +++++++++++++++++++++--
 opends/src/guitools/org/opends/guitools/controlpanel/ControlPanel.java         |   36 +++++++++++++++++-
 opends/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java                  |   36 ++++++++++++++----
 3 files changed, 104 insertions(+), 15 deletions(-)

diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ControlPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ControlPanel.java
index 67cb47c..faa8778 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ControlPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ControlPanel.java
@@ -31,6 +31,7 @@
 import java.awt.event.WindowEvent;
 
 import javax.swing.JFrame;
+import javax.swing.SwingUtilities;
 import javax.swing.UIManager;
 import javax.swing.WindowConstants;
 
@@ -63,8 +64,7 @@
   public static void main(String[] args) {
     try
     {
-      UIManager.setLookAndFeel(
-          UIManager.getSystemLookAndFeelClassName());
+      initLookAndFeel();
     }
     catch (Throwable t)
     {
@@ -122,4 +122,36 @@
       controlCenterPane.getLoginDialog().toFront();
     }
   }
+
+  private static void initLookAndFeel() throws Throwable
+  {
+    if (SwingUtilities.isEventDispatchThread())
+    {
+      UIManager.setLookAndFeel(
+          UIManager.getSystemLookAndFeelClassName());
+    }
+    else
+    {
+      final Throwable[] ts = {null};
+      SwingUtilities.invokeAndWait(new Runnable()
+      {
+        public void run()
+        {
+          try
+          {
+            UIManager.setLookAndFeel(
+                UIManager.getSystemLookAndFeelClassName());
+          }
+          catch (Throwable t)
+          {
+            ts[0] = t;
+          }
+        }
+      });
+      if (ts[0] != null)
+      {
+        throw ts[0];
+      }
+    }
+  }
 }
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ControlPanelLauncher.java b/opends/src/guitools/org/opends/guitools/controlpanel/ControlPanelLauncher.java
index 100457f..a15727e 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ControlPanelLauncher.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ControlPanelLauncher.java
@@ -177,13 +177,9 @@
       {
         try
         {
-          // Setup MacOSX native menu bar before AWT is loaded.
-          Utils.setMacOSXMenuBar(
-              AdminToolMessages.INFO_CONTROL_PANEL_TITLE.get());
           try
           {
-            UIManager.setLookAndFeel(
-                UIManager.getSystemLookAndFeelClassName());
+            initLookAndFeel();
           }
           catch (Throwable t)
           {
@@ -237,8 +233,49 @@
     System.setErr(printStream);
     return returnValue[0];
   }
+
+  private static void initLookAndFeel() throws Throwable
+  {
+    if (SwingUtilities.isEventDispatchThread())
+    {
+//    Setup MacOSX native menu bar before AWT is loaded.
+      Utils.setMacOSXMenuBar(
+          AdminToolMessages.INFO_CONTROL_PANEL_TITLE.get());
+
+      UIManager.setLookAndFeel(
+          UIManager.getSystemLookAndFeelClassName());
+    }
+    else
+    {
+      final Throwable[] ts = {null};
+      SwingUtilities.invokeAndWait(new Runnable()
+      {
+        public void run()
+        {
+          try
+          {
+//          Setup MacOSX native menu bar before AWT is loaded.
+            Utils.setMacOSXMenuBar(
+                AdminToolMessages.INFO_CONTROL_PANEL_TITLE.get());
+
+            UIManager.setLookAndFeel(
+                UIManager.getSystemLookAndFeelClassName());
+          }
+          catch (Throwable t)
+          {
+            ts[0] = t;
+          }
+        }
+      });
+      if (ts[0] != null)
+      {
+        throw ts[0];
+      }
+    }
+  }
 }
 
+
 /**
  * The enumeration containing the different return codes that the command-line
  * can have.
diff --git a/opends/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java b/opends/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java
index 2753429..1f68ab2 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java
@@ -725,17 +725,37 @@
   {
     if (!initialized)
     {
-      System.setProperty("swing.aatext", "true");
-      try
+      Runnable r = new Runnable()
       {
-        UIManager.setLookAndFeel(
-            UIManager.getSystemLookAndFeelClassName());
-      } catch (Exception ex)
+        public void run()
+        {
+          System.setProperty("swing.aatext", "true");
+          try
+          {
+            UIManager.setLookAndFeel(
+                UIManager.getSystemLookAndFeelClassName());
+          } catch (Throwable t)
+          {
+            t.printStackTrace();
+          }
+          JFrame.setDefaultLookAndFeelDecorated(false);
+        }
+      };
+      if (SwingUtilities.isEventDispatchThread())
       {
-        ex.printStackTrace();
+        r.run();
       }
-      JFrame.setDefaultLookAndFeelDecorated(false);
-
+      else
+      {
+        try
+        {
+          SwingUtilities.invokeAndWait(r);
+        }
+        catch (Throwable t)
+        {
+          t.printStackTrace();
+        }
+      }
       initialized = true;
     }
   }

--
Gitblit v1.10.0