summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2002-10-22 21:05:47 +0000
committerOwen Taylor <otaylor@src.gnome.org>2002-10-22 21:05:47 +0000
commitf1b8a1ce57eb238241b2f7944c3374a4d1067155 (patch)
tree3f825691ee38636e6aec6f18f76aeeef90ab90e3
parent8042766f6abf6184afe097aafdde613c00f380c7 (diff)
downloadgtk+-f1b8a1ce57eb238241b2f7944c3374a4d1067155.tar.gz
Multihead safety fixes, handle displays being closed. (#81651, based on
Tue Oct 22 16:37:12 2002 Owen Taylor <otaylor@redhat.com> * gtk/gtktooltips.c: Multihead safety fixes, handle displays being closed. (#81651, based on patch from Erwann Chenede) * gtk/gtktoolbar.c (gtk_toolbar_init): Fix typo from the last commit.
-rw-r--r--ChangeLog9
-rw-r--r--ChangeLog.pre-2-109
-rw-r--r--ChangeLog.pre-2-29
-rw-r--r--ChangeLog.pre-2-49
-rw-r--r--ChangeLog.pre-2-69
-rw-r--r--ChangeLog.pre-2-89
-rw-r--r--gtk/gtktoolbar.c2
-rw-r--r--gtk/gtktooltips.c64
8 files changed, 115 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 3f04a4cdb4..ee23880a52 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Tue Oct 22 16:37:12 2002 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtktooltips.c: Multihead safety fixes, handle
+ displays being closed. (#81651, based on patch
+ from Erwann Chenede)
+
+ * gtk/gtktoolbar.c (gtk_toolbar_init): Fix typo
+ from the last commit.
+
Tue Oct 22 15:55:08 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtktoolbar.c: Fix handling of getting the
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index 3f04a4cdb4..ee23880a52 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,12 @@
+Tue Oct 22 16:37:12 2002 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtktooltips.c: Multihead safety fixes, handle
+ displays being closed. (#81651, based on patch
+ from Erwann Chenede)
+
+ * gtk/gtktoolbar.c (gtk_toolbar_init): Fix typo
+ from the last commit.
+
Tue Oct 22 15:55:08 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtktoolbar.c: Fix handling of getting the
diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2
index 3f04a4cdb4..ee23880a52 100644
--- a/ChangeLog.pre-2-2
+++ b/ChangeLog.pre-2-2
@@ -1,3 +1,12 @@
+Tue Oct 22 16:37:12 2002 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtktooltips.c: Multihead safety fixes, handle
+ displays being closed. (#81651, based on patch
+ from Erwann Chenede)
+
+ * gtk/gtktoolbar.c (gtk_toolbar_init): Fix typo
+ from the last commit.
+
Tue Oct 22 15:55:08 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtktoolbar.c: Fix handling of getting the
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
index 3f04a4cdb4..ee23880a52 100644
--- a/ChangeLog.pre-2-4
+++ b/ChangeLog.pre-2-4
@@ -1,3 +1,12 @@
+Tue Oct 22 16:37:12 2002 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtktooltips.c: Multihead safety fixes, handle
+ displays being closed. (#81651, based on patch
+ from Erwann Chenede)
+
+ * gtk/gtktoolbar.c (gtk_toolbar_init): Fix typo
+ from the last commit.
+
Tue Oct 22 15:55:08 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtktoolbar.c: Fix handling of getting the
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index 3f04a4cdb4..ee23880a52 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -1,3 +1,12 @@
+Tue Oct 22 16:37:12 2002 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtktooltips.c: Multihead safety fixes, handle
+ displays being closed. (#81651, based on patch
+ from Erwann Chenede)
+
+ * gtk/gtktoolbar.c (gtk_toolbar_init): Fix typo
+ from the last commit.
+
Tue Oct 22 15:55:08 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtktoolbar.c: Fix handling of getting the
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index 3f04a4cdb4..ee23880a52 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -1,3 +1,12 @@
+Tue Oct 22 16:37:12 2002 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtktooltips.c: Multihead safety fixes, handle
+ displays being closed. (#81651, based on patch
+ from Erwann Chenede)
+
+ * gtk/gtktoolbar.c (gtk_toolbar_init): Fix typo
+ from the last commit.
+
Tue Oct 22 15:55:08 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtktoolbar.c: Fix handling of getting the
diff --git a/gtk/gtktoolbar.c b/gtk/gtktoolbar.c
index 4dac3af169..e58cefd17e 100644
--- a/gtk/gtktoolbar.c
+++ b/gtk/gtktoolbar.c
@@ -406,7 +406,7 @@ gtk_toolbar_init (GtkToolbar *toolbar)
toolbar->children = NULL;
toolbar->orientation = GTK_ORIENTATION_HORIZONTAL;
toolbar->icon_size = DEFAULT_ICON_SIZE;
- toolbar->style = DEFAUL_TOOLBAR_STYLE;
+ toolbar->style = DEFAULT_TOOLBAR_STYLE;
toolbar->tooltips = gtk_tooltips_new ();
g_object_ref (toolbar->tooltips);
gtk_object_sink (GTK_OBJECT (toolbar->tooltips));
diff --git a/gtk/gtktooltips.c b/gtk/gtktooltips.c
index dea1f46ff7..23884962f7 100644
--- a/gtk/gtktooltips.c
+++ b/gtk/gtktooltips.c
@@ -62,6 +62,7 @@ static gint gtk_tooltips_timeout (gpointer data);
static gint gtk_tooltips_paint_window (GtkTooltips *tooltips);
static void gtk_tooltips_draw_tips (GtkTooltips *tooltips);
+static void gtk_tooltips_unset_tip_window (GtkTooltips *tooltips);
static gboolean get_keyboard_mode (GtkWidget *widget);
@@ -150,6 +151,34 @@ gtk_tooltips_destroy_data (GtkTooltipsData *tooltipsdata)
}
static void
+tip_window_display_closed (GdkDisplay *display,
+ gboolean was_error,
+ GtkTooltips *tooltips)
+{
+ gtk_tooltips_unset_tip_window (tooltips);
+}
+
+static void
+disconnect_tip_window_display_closed (GtkTooltips *tooltips)
+{
+ g_signal_handlers_disconnect_by_func (gtk_widget_get_display (tooltips->tip_window),
+ (gpointer) tip_window_display_closed,
+ tooltips);
+}
+
+static void
+gtk_tooltips_unset_tip_window (GtkTooltips *tooltips)
+{
+ if (tooltips->tip_window)
+ {
+ disconnect_tip_window_display_closed (tooltips);
+
+ gtk_widget_destroy (tooltips->tip_window);
+ tooltips->tip_window = NULL;
+ }
+}
+
+static void
gtk_tooltips_destroy (GtkObject *object)
{
GtkTooltips *tooltips = GTK_TOOLTIPS (object);
@@ -175,8 +204,34 @@ gtk_tooltips_destroy (GtkObject *object)
}
}
- if (tooltips->tip_window)
- gtk_widget_destroy (tooltips->tip_window);
+ gtk_tooltips_unset_tip_window (tooltips);
+}
+
+static void
+gtk_tooltips_update_screen (GtkTooltips *tooltips,
+ gboolean new_window)
+{
+ gboolean screen_changed = FALSE;
+
+ if (tooltips->active_tips_data->widget)
+ {
+ GdkScreen *screen = gtk_widget_get_screen (tooltips->active_tips_data->widget);
+
+ screen_changed = (screen != gtk_widget_get_screen (tooltips->tip_window));
+
+ if (screen_changed)
+ {
+ if (!new_window)
+ disconnect_tip_window_display_closed (tooltips);
+
+ gtk_window_set_screen (GTK_WINDOW (tooltips->tip_window), screen);
+ }
+ }
+
+ if (screen_changed || new_window)
+ g_signal_connect (gtk_widget_get_display (tooltips->tip_window), "closed",
+ G_CALLBACK (tip_window_display_closed), tooltips);
+
}
void
@@ -187,8 +242,7 @@ gtk_tooltips_force_window (GtkTooltips *tooltips)
if (!tooltips->tip_window)
{
tooltips->tip_window = gtk_window_new (GTK_WINDOW_POPUP);
- gtk_window_set_screen (GTK_WINDOW (tooltips->tip_window),
- gtk_widget_get_screen (tooltips->active_tips_data->widget));
+ gtk_tooltips_update_screen (tooltips, TRUE);
gtk_widget_set_app_paintable (tooltips->tip_window, TRUE);
gtk_window_set_resizable (GTK_WINDOW (tooltips->tip_window), FALSE);
gtk_widget_set_name (tooltips->tip_window, "gtk-tooltips");
@@ -351,6 +405,8 @@ gtk_tooltips_draw_tips (GtkTooltips *tooltips)
widget = tooltips->active_tips_data->widget;
keyboard_mode = get_keyboard_mode (widget);
+
+ gtk_tooltips_update_screen (tooltips, FALSE);
screen = gtk_widget_get_screen (widget);
scr_w = gdk_screen_get_width (screen);