From f9ae887ae7ff271334407094cbc50a96b47dc497 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Mon, 13 Apr 2015 16:34:15 +0200 Subject: [PATCH] Timeline: Check members of TimelineRenderer for sanity before using them We have seen that occasionally the Qt Quick scene can resize to strange dimensions, including negative width, which will cause equally strange results if we than get stray mouse events. Also, we need to take care not to access the model or the zoom control before they're initialized. Change-Id: Idf137bf7d16806dcf18e0d3f7be2b42e07e724c3 Reviewed-by: Joerg Bornemann --- src/libs/timeline/timelinerenderer.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/libs/timeline/timelinerenderer.cpp b/src/libs/timeline/timelinerenderer.cpp index 398d1d3dccd..c0c794e7c01 100644 --- a/src/libs/timeline/timelinerenderer.cpp +++ b/src/libs/timeline/timelinerenderer.cpp @@ -110,7 +110,7 @@ QSGNode *TimelineRenderer::updatePaintNode(QSGNode *node, UpdatePaintNodeData *u Q_D(TimelineRenderer); Q_UNUSED(updatePaintNodeData) - if (!d->model || d->model->hidden() || d->model->isEmpty() || + if (!d->model || d->model->hidden() || d->model->isEmpty() || !d->zoomer || d->zoomer->windowDuration() <= 0) { delete node; return 0; @@ -181,7 +181,7 @@ void TimelineRenderer::mouseReleaseEvent(QMouseEvent *event) { Q_D(TimelineRenderer); Q_UNUSED(event); - if (!d->model->isEmpty()) + if (d->model && !d->model->isEmpty()) d->manageClicked(); } @@ -222,6 +222,9 @@ void TimelineRenderer::TimelineRendererPrivate::manageClicked() void TimelineRenderer::TimelineRendererPrivate::manageHovered(int mouseX, int mouseY) { Q_Q(TimelineRenderer); + if (!zoomer || !model || q->width() < 1) + return; + qint64 duration = zoomer->windowDuration(); if (duration <= 0) return;