*** empty log message ***
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java
index 3712e2a..c7075b4 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java
@@ -947,25 +947,30 @@
 		sendEvent (SWT.Show);
 		// widget could be disposed at this point
 		if (isDisposed ()) return;
-		OS.gtk_widget_show (shellHandle);
-		
+				
 		//TEMPORARY CODE
-		final boolean[] mapped = new boolean [1];
-		Callback proc = new Callback(new Object() {
-			public int proc(int widget, int event, int userdata) {
-				mapped [0] = true;
-				return 0;
+		if (!OS.GTK_WIDGET_MAPPED (shellHandle)) {
+			OS.gtk_widget_show (shellHandle);
+			final boolean[] mapped = new boolean [1];
+			Callback proc = new Callback(new Object() {
+				public int proc(int widget, int event, int userdata) {
+					mapped [0] = true;
+					return 0;
+				}
+			}, "proc", 3);
+			int id = OS.g_signal_connect (shellHandle, OS.map_event, proc.getAddress (), 0);		
+			while (!isDisposed () && !mapped [0]) {
+				OS.gtk_main_iteration ();
 			}
-		}, "proc", 3);
-		int id = OS.g_signal_connect (shellHandle, OS.map_event, proc.getAddress (), 0);		
-		while (!isDisposed () && !mapped [0]) {
-			OS.gtk_main_iteration ();
+			proc.dispose();
+			 //widget could be disposed at this point
+			if (isDisposed ()) return;
+			OS.g_signal_handler_disconnect (shellHandle, id);
+		} else {
+			OS.gtk_widget_show (shellHandle);
 		}
-		proc.dispose();
-		// widget could be disposed at this point
-		if (isDisposed ()) return;
-		OS.g_signal_handler_disconnect (shellHandle, id);
-		
+		//widget could be disposed at this point
+	   if (isDisposed ()) return;
 		adjustTrim ();
 	} else {	
 		OS.gtk_widget_hide (shellHandle);