summaryrefslogtreecommitdiff
path: root/src/compositor/wayland_wrapper/wlsurface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/compositor/wayland_wrapper/wlsurface.cpp')
-rw-r--r--src/compositor/wayland_wrapper/wlsurface.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/compositor/wayland_wrapper/wlsurface.cpp b/src/compositor/wayland_wrapper/wlsurface.cpp
index fd06a5bf..7aa75160 100644
--- a/src/compositor/wayland_wrapper/wlsurface.cpp
+++ b/src/compositor/wayland_wrapper/wlsurface.cpp
@@ -203,7 +203,7 @@ void Surface::sendFrameCallback()
m_frontBuffer = m_backBuffer;
}
- advanceBufferQueue();
+ bool updateNeeded = advanceBufferQueue();
uint time = Compositor::currentTimeMsecs();
struct wl_resource *frame_callback;
@@ -211,10 +211,10 @@ void Surface::sendFrameCallback()
wl_resource_post_event(frame_callback,WL_CALLBACK_DONE,time);
wl_resource_destroy(frame_callback,Compositor::currentTimeMsecs());
}
-
wl_list_init(&m_frame_callback_list);
- doUpdate();
+ if (updateNeeded)
+ doUpdate();
}
void Surface::frameFinished()
@@ -267,7 +267,7 @@ Compositor *Surface::compositor() const
return m_compositor;
}
-void Surface::advanceBufferQueue()
+bool Surface::advanceBufferQueue()
{
//has current buffer been displayed,
//do we have another buffer in the queue
@@ -289,7 +289,7 @@ void Surface::advanceBufferQueue()
}
if (!m_backBuffer)
- return; //we have no new backbuffer;
+ return false; //we have no new backbuffer;
if (m_backBuffer->waylandBufferHandle()) {
if (width != m_backBuffer->width() ||
@@ -311,9 +311,10 @@ void Surface::advanceBufferQueue()
} else {
m_backBuffer = 0;
+ return false;
}
-
+ return true;
}
void Surface::doUpdate() {