summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2009-10-07 00:37:49 +0200
committerLennart Poettering <lennart@poettering.net>2009-10-07 00:40:33 +0200
commited6f221e617537b1901211d41c0bd8018739e814 (patch)
tree05f821c0fff9774b7227b9b37d71ec536d162ac1
parentfe61f0f5eecbefc54f56b4e5786c66ef6192f047 (diff)
gtk: verify that a widget is realized before we try to access its XID
-rw-r--r--src/canberra-gtk-module.c21
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) &&