diff options
author | Lennart Poettering <lennart@poettering.net> | 2009-10-07 00:37:49 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2009-10-07 00:40:33 +0200 |
commit | ed6f221e617537b1901211d41c0bd8018739e814 (patch) | |
tree | 05f821c0fff9774b7227b9b37d71ec536d162ac1 /src/canberra-gtk-module.c | |
parent | fe61f0f5eecbefc54f56b4e5786c66ef6192f047 (diff) | |
download | libcanberra-ed6f221e617537b1901211d41c0bd8018739e814.tar.gz |
gtk: verify that a widget is realized before we try to access its XID
Diffstat (limited to 'src/canberra-gtk-module.c')
-rw-r--r-- | src/canberra-gtk-module.c | 21 |
1 files 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) && |