From 0850feff708ded63c27dc938ca4b9b8fcbed122b Mon Sep 17 00:00:00 2001 From: Philip Langdale Date: Sun, 3 Sep 2006 10:45:22 -0700 Subject: [PATCH] Fix https://bugs.freedesktop.org/show_bug.cgi?id=8094 Lazily allocate the dynamic modes used for pixel precise guest resizing. They will not appear until they are neeed. --- ChangeLog | 9 +++++++++ src/vmware.c | 11 ++++++++--- src/vmware.h | 7 +++++++ src/vmwarectrl.c | 7 +++++++ 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2f08d3b..e1a5979 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2006-09-03 Philip langdale + + * src/vmware.c: + * src/vmware.h: + * src/vmwarectrl.c: + Fix https://bugs.freedesktop.org/show_bug.cgi?id=8094 + Lazily allocate the dynamic modes used for pixel precise guest + resizing. They will not appear until they are neeed. + 2006-04-07 Adam Jackson * configure.ac: diff --git a/src/vmware.c b/src/vmware.c index 7a22468..50af954 100644 --- a/src/vmware.c +++ b/src/vmware.c @@ -1164,7 +1164,7 @@ VMWARELoadPalette(ScrnInfoPtr pScrn, int numColors, int* indices, } -static DisplayModeRec * +DisplayModeRec * VMWAREAddDisplayMode(ScrnInfoPtr pScrn, const char *name, int width, @@ -1414,8 +1414,13 @@ VMWAREScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) * at ScreenInit time. */ pVMWARE->initialMode = pScrn->currentMode; - pVMWARE->dynMode1 = VMWAREAddDisplayMode(pScrn, "DynMode1", 1, 1); - pVMWARE->dynMode2 = VMWAREAddDisplayMode(pScrn, "DynMode2", 2, 2); + + /* + * We will lazily add the dynamic modes as the are needed when new + * modes are requested through the control extension. + */ + pVMWARE->dynMode1 = NULL; + pVMWARE->dynMode2 = NULL; VMwareCtrl_ExtInit(pScrn); diff --git a/src/vmware.h b/src/vmware.h index b640260..5865522 100644 --- a/src/vmware.h +++ b/src/vmware.h @@ -209,6 +209,13 @@ void vmwareSendSVGACmdUpdate( VMWAREPtr pVMWARE, BoxPtr pBB ); +DisplayModeRec *VMWAREAddDisplayMode( + ScrnInfoPtr pScrn, + const char *name, + int width, + int height + ); + /* vmwarecurs.c */ Bool vmwareCursorInit( ScreenPtr pScr diff --git a/src/vmwarectrl.c b/src/vmwarectrl.c index 49ccccd..7d3e564 100644 --- a/src/vmwarectrl.c +++ b/src/vmwarectrl.c @@ -134,6 +134,13 @@ VMwareCtrlDoSetRes(ScrnInfoPtr pScrn, mode = pVMWARE->dynMode1; pVMWARE->dynMode1 = pVMWARE->dynMode2; pVMWARE->dynMode2 = mode; + + /* + * Initialise the dynamic mode if it hasn't been used before. + */ + if (!pVMWARE->dynMode1) { + pVMWARE->dynMode1 = VMWAREAddDisplayMode(pScrn, "DynMode", 1, 1); + } mode = pVMWARE->dynMode1; mode->HDisplay = x;