From ed6f221e617537b1901211d41c0bd8018739e814 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 7 Oct 2009 00:37:49 +0200 Subject: gtk: verify that a widget is realized before we try to access its XID --- src/canberra-gtk-module.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/canberra-gtk-module.c b/src/canberra-gtk-module.c index 391c559..17e249f 100644 --- a/src/canberra-gtk-module.c +++ b/src/canberra-gtk-module.c @@ -441,9 +441,11 @@ static void dispatch_sound_event(SoundEventData *d) { gboolean played_sound = FALSE; gboolean is_xembed; - is_xembed = window_is_xembed( - gtk_widget_get_display(GTK_WIDGET(d->object)), - gtk_widget_get_window(GTK_WIDGET(d->object))); + is_xembed = + GTK_WIDGET_REALIZED(GTK_WIDGET(d->object)) && + window_is_xembed( + gtk_widget_get_display(GTK_WIDGET(d->object)), + gtk_widget_get_window(GTK_WIDGET(d->object))); g_object_set_qdata(d->object, is_xembed_quark, GINT_TO_POINTER(is_xembed)); @@ -546,8 +548,7 @@ static void dispatch_sound_event(SoundEventData *d) { if (GTK_IS_WINDOW(d->object) && d->signal_id == signal_id_widget_window_state_event) { GdkEventWindowState *e; - gint w_desktop, c_desktop; - GdkDisplay *display; + gint w_desktop = -1, c_desktop = -1; e = (GdkEventWindowState*) d->event; @@ -559,9 +560,13 @@ static void dispatch_sound_event(SoundEventData *d) { * minimized. We then store this information, so that we know * later on when the window is unminimized again. */ - display = gdk_screen_get_display(gdk_event_get_screen(d->event)); - w_desktop = window_get_desktop(display, e->window); - c_desktop = display_get_desktop(display); + if (GTK_WIDGET_REALIZED(GTK_WIDGET(d->object))) { + GdkDisplay *display; + + display = gtk_widget_get_display(GTK_WIDGET(d->object)); + w_desktop = window_get_desktop(display, gtk_widget_get_window(GTK_WIDGET(d->object))); + c_desktop = display_get_desktop(display); + } if ((e->changed_mask & GDK_WINDOW_STATE_ICONIFIED) && (e->new_window_state & GDK_WINDOW_STATE_ICONIFIED) && -- cgit