diff options
author | Gyuhwan Park <unstabler@unstabler.pl> | 2022-06-11 23:15:06 +0300 |
---|---|---|
committer | Gyuhwan Park <unstabler@unstabler.pl> | 2022-06-11 23:15:06 +0300 |
commit | f5cec2d0c65722d161805d81e042f0919c31c0c6 (patch) | |
tree | 6f3ce194b7ffc454c24a8b2dbbb8949bd28ad720 | |
parent | 49d51ef3ab1a1bbf77e1fec8f64b24fd26b23c64 (diff) |
xxx: update entire screen when lib_mod_server_monitor_full_invalidate has called
-rw-r--r-- | ulalaca.cpp | 6 | ||||
-rw-r--r-- | ulalaca.hpp | 1 |
2 files changed, 6 insertions, 1 deletions
diff --git a/ulalaca.cpp b/ulalaca.cpp index f5f8777..cd3d7b9 100644 --- a/ulalaca.cpp +++ b/ulalaca.cpp @@ -48,6 +48,7 @@ XrdpUlalaca::XrdpUlalaca(): si(nullptr), + _fullInvalidate(true), _sessionSize { 0, 0, 640, 480 }, _bpp(0), @@ -196,6 +197,7 @@ int XrdpUlalaca::lib_mod_server_monitor_resize(XrdpUlalaca *_this, int width, in } int XrdpUlalaca::lib_mod_server_monitor_full_invalidate(XrdpUlalaca *_this, int width, int height) { + _this->_fullInvalidate = true; return 0; } @@ -328,7 +330,7 @@ void XrdpUlalaca::commitUpdate(const uint8_t *image, int32_t width, int32_t heig Rect screenRect = {0, 0, (short) width, (short) height}; auto copyRectSize = decideCopyRectSize(); - if (_frameId > 0) { + if (_frameId > 0 || !_fullInvalidate) { auto copyRects = createCopyRects(_dirtyRects, copyRectSize); server_paint_rects( @@ -352,6 +354,8 @@ void XrdpUlalaca::commitUpdate(const uint8_t *image, int32_t width, int32_t heig width, height, 0, (_frameId++ % INT32_MAX) ); + + _fullInvalidate = false; } _dirtyRects.clear(); diff --git a/ulalaca.hpp b/ulalaca.hpp index 6960952..248f7e6 100644 --- a/ulalaca.hpp +++ b/ulalaca.hpp @@ -229,6 +229,7 @@ private: std::unique_ptr<UnixSocket> _socket; std::unique_ptr<ProjectionThread> _projectionThread; + std::atomic_bool _fullInvalidate; std::mutex _commitUpdateLock; std::vector<Rect> _dirtyRects; |