diff options
author | Matthias Clasen <mclasen@redhat.com> | 2015-12-22 23:46:59 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2015-12-22 23:57:06 -0500 |
commit | b6d287aab5606f6cd40f871d16e73fcb0558b55c (patch) | |
tree | 86b15f085c6bbdc9ea54cf7eb65e483a74b4b944 /gtk/gtkwidget.c | |
parent | 8ffa8b3a495ae9fa34eb2139dec066167a8f8daf (diff) | |
download | gtk+-b6d287aab5606f6cd40f871d16e73fcb0558b55c.tar.gz |
widget: Be safe against windows losing their frame clock
gdk_widget_get_frame_clock can return NULL. In particular,
this can happen when the drag window is destroyed at the end
of a DND operation. Handle this gracefully when it happens.
Diffstat (limited to 'gtk/gtkwidget.c')
-rw-r--r-- | gtk/gtkwidget.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index e72b563f81..ee11c3f130 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -5252,6 +5252,7 @@ gtk_widget_add_tick_callback (GtkWidget *widget, { GtkWidgetPrivate *priv; GtkTickCallbackInfo *info; + GdkFrameClock *frame_clock; g_return_val_if_fail (GTK_IS_WIDGET (widget), 0); @@ -5259,11 +5260,15 @@ gtk_widget_add_tick_callback (GtkWidget *widget, if (priv->realized && !priv->clock_tick_id) { - GdkFrameClock *frame_clock = gtk_widget_get_frame_clock (widget); - priv->clock_tick_id = g_signal_connect (frame_clock, "update", - G_CALLBACK (gtk_widget_on_frame_clock_update), - widget); - gdk_frame_clock_begin_updating (frame_clock); + frame_clock = gtk_widget_get_frame_clock (widget); + + if (frame_clock) + { + priv->clock_tick_id = g_signal_connect (frame_clock, "update", + G_CALLBACK (gtk_widget_on_frame_clock_update), + widget); + gdk_frame_clock_begin_updating (frame_clock); + } } info = g_slice_new0 (GtkTickCallbackInfo); |