Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/neutrinolabs/xorgxrdp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatt335672 <30179339+matt335672@users.noreply.github.com>2022-05-04 11:19:15 +0300
committerGitHub <noreply@github.com>2022-05-04 11:19:15 +0300
commit946f39b1766446bb2bc7e266dd496a3b9708caa6 (patch)
tree7c1b70df8f23d49a9c4339cc1b50feedc0c39d40
parent1c02fe38041c5009f3260872c7611e6c61e09aa9 (diff)
parentcfafcd2528f3eabf881ed2c7bbdcd59d5847de13 (diff)
Merge pull request #186 from jsorg71/damage
use damage to track any lost screen changes
-rw-r--r--module/rdp.h1
-rw-r--r--xrdpdev/xrdpdev.c47
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)
{