diff options
author | matt335672 <30179339+matt335672@users.noreply.github.com> | 2022-05-04 11:19:15 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-04 11:19:15 +0300 |
commit | 946f39b1766446bb2bc7e266dd496a3b9708caa6 (patch) | |
tree | 7c1b70df8f23d49a9c4339cc1b50feedc0c39d40 | |
parent | 1c02fe38041c5009f3260872c7611e6c61e09aa9 (diff) | |
parent | cfafcd2528f3eabf881ed2c7bbdcd59d5847de13 (diff) |
Merge pull request #186 from jsorg71/damage
use damage to track any lost screen changes
-rw-r--r-- | module/rdp.h | 1 | ||||
-rw-r--r-- | xrdpdev/xrdpdev.c | 47 |
2 files changed, 46 insertions, 2 deletions
diff --git a/module/rdp.h b/module/rdp.h index 04ce191..125c7d9 100644 --- a/module/rdp.h +++ b/module/rdp.h @@ -325,6 +325,7 @@ struct _rdpRec int fd; /* egl */ void *egl; + DamagePtr damage; }; typedef struct _rdpRec rdpRec; typedef struct _rdpRec * rdpPtr; diff --git a/xrdpdev/xrdpdev.c b/xrdpdev/xrdpdev.c index 2dcce60..e3121f1 100644 --- a/xrdpdev/xrdpdev.c +++ b/xrdpdev/xrdpdev.c @@ -87,7 +87,8 @@ Bool g_use_dri3 = TRUE; while (0) static int g_setup_done = 0; -static OsTimerPtr g_timer = 0; +static OsTimerPtr g_randr_timer = 0; +static OsTimerPtr g_damage_timer = 0; static char g_xrdp_driver_name[] = XRDP_DRIVER_NAME; @@ -367,6 +368,47 @@ rdpResizeSession(rdpPtr dev, int width, int height) return ok; } +/*****************************************************************************/ +static void +xorgxrdpDamageReport(DamagePtr pDamage, RegionPtr pRegion, void *closure) +{ + rdpPtr dev; + ScreenPtr pScreen; + + LLOGLN(10, ("xorgxrdpDamageReport:")); + pScreen = (ScreenPtr)closure; + dev = rdpGetDevFromScreen(pScreen); + rdpClientConAddAllReg(dev, pRegion, &(pScreen->root->drawable)); +} + +/*****************************************************************************/ +static void +xorgxrdpDamageDestroy(DamagePtr pDamage, void *closure) +{ + LLOGLN(0, ("xorgxrdpDamageDestroy:")); +} + +/******************************************************************************/ +/* returns error */ +static CARD32 +rdpDeferredDamage(OsTimerPtr timer, CARD32 now, pointer arg) +{ + ScreenPtr pScreen; + rdpPtr dev; + + pScreen = (ScreenPtr) arg; + dev = rdpGetDevFromScreen(pScreen); + dev->damage = DamageCreate(xorgxrdpDamageReport, xorgxrdpDamageDestroy, + DamageReportRawRegion, TRUE, + pScreen, pScreen); + if (dev->damage != NULL) + { + DamageSetReportAfterOp(dev->damage, TRUE); + DamageRegister(&(pScreen->root->drawable), dev->damage); + } + return 0; +} + /******************************************************************************/ /* returns error */ static CARD32 @@ -723,7 +765,8 @@ rdpScreenInit(ScreenPtr pScreen, int argc, char **argv) RegisterBlockAndWakeupHandlers(rdpBlockHandler1, rdpWakeupHandler1, pScreen); - g_timer = TimerSet(g_timer, 0, 10, rdpDeferredRandR, pScreen); + g_randr_timer = TimerSet(g_randr_timer, 0, 10, rdpDeferredRandR, pScreen); + g_damage_timer = TimerSet(g_damage_timer, 0, 10, rdpDeferredDamage, pScreen); if (rdpClientConInit(dev) != 0) { |