31941
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java
index c30f79a..349bfd5 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java
@@ -177,6 +177,7 @@
 	public static final int GTK_PROGRESS_DISCRETE = 0x1;
 	public static final int GTK_PROGRESS_LEFT_TO_RIGHT = 0x0;
 	public static final int GTK_PROGRESS_TOP_TO_BOTTOM = 0x3;
+	public static final int GTK_REALIZED  = 1 << 6;
 	public static final int GTK_RELIEF_NONE = 0x2;
 	public static final int GTK_RESPONSE_OK = 0xfffffffb;
 	public static final int GTK_SELECTION_BROWSE = 0x2;
@@ -242,7 +243,8 @@
 	public static final byte[] mnemonic_activate = signal("mnemonic_activate");
 	public static final byte[] motion_notify_event = signal("motion_notify_event");
 	public static final byte[] popup_menu = signal("popup_menu");
-	public static final byte[] preedit_changed = signal("preedit_changed");			
+	public static final byte[] preedit_changed = signal("preedit_changed");
+	public static final byte[] realize = signal("realize");
 	public static final byte[] row_activated = signal("row_activated");
 	public static final byte[] row_collapsed = signal("row_collapsed");
 	public static final byte[] row_expanded = signal("row_expanded");
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ProgressBar.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ProgressBar.java
index 3a2767c..56de5db 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ProgressBar.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ProgressBar.java
@@ -139,6 +139,20 @@
 	return selection;
 }
 
+int gtk_realize (int widget) {
+	int result = super.gtk_realize (widget);
+	if (result != 0) return result;
+	updateBar (selection, minimum, maximum);
+	return 0;
+}
+
+void hookEvents () {
+	super.hookEvents ();
+	Display display = getDisplay ();
+	int windowProc2 = display.windowProc2;
+	OS.g_signal_connect_after (handle, OS.realize, windowProc2, REALIZE);
+}
+
 void releaseWidget () {
 	super.releaseWidget ();
 	if (timerId != 0) OS.gtk_timeout_remove (timerId);
@@ -209,6 +223,8 @@
 }
 
 void updateBar (int selection, int minimum, int maximum) {
+	if ((OS.GTK_WIDGET_FLAGS (handle) & OS.GTK_REALIZED) == 0) return;
+
 	double fraction = minimum == maximum ? 1 : (double)(selection - minimum) / (maximum - minimum);
 	OS.gtk_progress_bar_set_fraction (handle, fraction);
 	/*
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java
index 8907662..dac71f6 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java
@@ -101,6 +101,7 @@
 	static final int MOTION_NOTIFY_EVENT = 24;
 	static final int POPUP_MENU = 25;
 	static final int PREEDIT_CHANGED = 26;
+	static final int REALIZE = 40;
 	static final int ROW_ACTIVATED = 27;
 	static final int ROW_COLLAPSED = 28;
 	static final int ROW_EXPANDED = 29;
@@ -590,6 +591,10 @@
 	return 0;
 }
 
+int gtk_realize (int widget) {
+	return 0;
+}
+
 int gtk_row_activated (int tree, int path, int column) {
 	return 0;
 }
@@ -1129,6 +1134,7 @@
 		case HIDE: return gtk_hide (handle);
 		case POPUP_MENU: return gtk_popup_menu (handle);
 		case PREEDIT_CHANGED: return gtk_preedit_changed (handle);
+		case REALIZE: return gtk_realize (handle);
 		case SELECT: return gtk_select (handle);
 		case SHOW: return gtk_show (handle);
 		case VALUE_CHANGED: return gtk_value_changed (handle);