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);