diff options
author | Owen Taylor <otaylor@redhat.com> | 2002-10-22 21:05:47 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2002-10-22 21:05:47 +0000 |
commit | f1b8a1ce57eb238241b2f7944c3374a4d1067155 (patch) | |
tree | 3f825691ee38636e6aec6f18f76aeeef90ab90e3 | |
parent | 8042766f6abf6184afe097aafdde613c00f380c7 (diff) | |
download | gtk+-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-- | ChangeLog | 9 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 9 | ||||
-rw-r--r-- | ChangeLog.pre-2-2 | 9 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 9 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 9 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 9 | ||||
-rw-r--r-- | gtk/gtktoolbar.c | 2 | ||||
-rw-r--r-- | gtk/gtktooltips.c | 64 |
8 files changed, 115 insertions, 5 deletions
@@ -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); |