diff options
author | Reinhard Tartler <siretart@tauware.de> | 2011-10-10 17:59:01 +0200 |
---|---|---|
committer | Reinhard Tartler <siretart@tauware.de> | 2011-10-10 17:59:01 +0200 |
commit | e01b9177b41f7d27a934d41fa38d550fa0026b45 (patch) | |
tree | a5cbd3193d1a628272c244c4e50f8e0e685bdeb1 /nx-X11/programs/Xserver/hw/nxagent/Extensions.c | |
parent | 39b738a67a14dde67b2a811d56ac84934fcef52d (diff) | |
download | nx-libs-e01b9177b41f7d27a934d41fa38d550fa0026b45.tar.gz nx-libs-e01b9177b41f7d27a934d41fa38d550fa0026b45.tar.bz2 nx-libs-e01b9177b41f7d27a934d41fa38d550fa0026b45.zip |
Imported nxagent-3.5.0-5.tar.gznxagent/3.5.0-5
Summary: Imported nxagent-3.5.0-5.tar.gz
Keywords:
Imported nxagent-3.5.0-5.tar.gz
into Git repository
Diffstat (limited to 'nx-X11/programs/Xserver/hw/nxagent/Extensions.c')
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Extensions.c | 142 |
1 files changed, 133 insertions, 9 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Extensions.c b/nx-X11/programs/Xserver/hw/nxagent/Extensions.c index aced24ff4..6dce644ae 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Extensions.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Extensions.c @@ -22,11 +22,19 @@ #include "Agent.h" #include "Display.h" #include "Screen.h" +#include "Options.h" #include "Extensions.h" +#include "Windows.h" void GlxExtensionInit(void); void GlxWrapInitVisuals(void *procPtr); +static int nxagentRandRScreenSetSize(ScreenPtr pScreen, CARD16 width, + CARD16 height, CARD32 mmWidth, + CARD32 mmHeight); + +static int nxagentRandRInitSizes(ScreenPtr pScreen); + #ifdef __DARWIN__ void DarwinHandleGUI(int argc, char *argv[]) @@ -75,6 +83,8 @@ void nxagentInitRandRExtension(ScreenPtr pScreen) fprintf(stderr, "Warning: Failed to initialize the RandR extension.\n"); } + nxagentRandRInitSizes(pScreen); + /* * RRScreenInit sets these pointers to NULL, * so requiring the server to set up its own @@ -84,12 +94,31 @@ void nxagentInitRandRExtension(ScreenPtr pScreen) pRandRScrPriv = rrGetScrPriv(pScreen); pRandRScrPriv -> rrGetInfo = nxagentRandRGetInfo; + + #if RANDR_12_INTERFACE + pRandRScrPriv -> rrScreenSetSize = nxagentRandRScreenSetSize; + #endif + + #if RANDR_10_INTERFACE pRandRScrPriv -> rrSetConfig = nxagentRandRSetConfig; + #endif } int nxagentRandRGetInfo(ScreenPtr pScreen, Rotation *pRotations) { + /* + * Rotation is not supported. + */ + + *pRotations = RR_Rotate_0; + + return 1; +} + +static int nxagentRandRInitSizes(ScreenPtr pScreen) +{ RRScreenSizePtr pSize; + rrScrPrivPtr pRandRScrPriv = rrGetScrPriv(pScreen); int width; int height; @@ -97,8 +126,16 @@ int nxagentRandRGetInfo(ScreenPtr pScreen, Rotation *pRotations) int maxWidth; int maxHeight; - int w[] = {0, 160, 320, 640, 800, 1024, 0, 0}; - int h[] = {0, 120, 240, 480, 600, 768, 0, 0}; +/* + int w[] = {0, 160, 320, 640, 800, 1024, 1152, 1280, 1280, 1280, 1280, 1280, + 1280, 1360, 1440, 1600, 1600, 1680, 1920, 1920, 0, 0}; + int h[] = {0, 120, 240, 480, 600, 768, 864, 600, 720, 800, 854, 960, + 1024, 768, 900, 900, 1200, 1050, 1080, 1200, 0, 0}; +*/ + int w[] = {0, 320, 640, 640, 800, 800, 1024, 1024, 1152, 1280, 1280, 1280, 1360, + 1440, 1600, 1600, 1680, 1920, 1920, 0, 0}; + int h[] = {0, 240, 360, 480, 480, 600, 600, 768, 864, 720, 800, 1024, 768, + 900, 900, 1200, 1050, 1080, 1200, 0, 0}; int i; int nSizes; @@ -107,12 +144,6 @@ int nxagentRandRGetInfo(ScreenPtr pScreen, Rotation *pRotations) int mmHeight; /* - * Rotation is not supported. - */ - - *pRotations = RR_Rotate_0; - - /* * Register all the supported sizes. The third * parameter is the refresh rate. */ @@ -185,13 +216,106 @@ int nxagentRandRGetInfo(ScreenPtr pScreen, Rotation *pRotations) return 1; } +#if RANDR_10_INTERFACE + int nxagentRandRSetConfig(ScreenPtr pScreen, Rotation rotation, int rate, RRScreenSizePtr pSize) { + int r; + rrScrPrivPtr pRandRScrPriv; + + UpdateCurrentTime(); + /* * Whatever size is OK for us. */ - return nxagentResizeScreen(pScreen, pSize -> width, pSize -> height, + r = nxagentResizeScreen(pScreen, pSize -> width, pSize -> height, pSize -> mmWidth, pSize -> mmHeight); + + nxagentMoveViewport(pScreen, 0, 0); + + return r; } + +#endif + +#if RANDR_12_INTERFACE + +void nxagentRandRSetWindowsSize(int width, int height) +{ + if (width == 0) + { + if (nxagentOption(Fullscreen) == 1) + { + width = WidthOfScreen(DefaultScreenOfDisplay(nxagentDisplay)); + } + else + { + width = nxagentOption(Width); + } + } + + if (height == 0) + { + if (nxagentOption(Fullscreen) == 1) + { + height = HeightOfScreen(DefaultScreenOfDisplay(nxagentDisplay)); + } + else + { + height = nxagentOption(Height); + } + } + + XResizeWindow(nxagentDisplay, nxagentDefaultWindows[0], width, height); + + if (nxagentOption(Rootless) == 0) + { + XMoveResizeWindow(nxagentDisplay, nxagentInputWindows[0], 0, 0, width, + height); + } +} + +int nxagentRandRScreenSetSize(ScreenPtr pScreen, CARD16 width, CARD16 height, + CARD32 mmWidth, CARD32 mmHeight) +{ + int result; + rrScrPrivPtr pRandRScrPriv; + + UpdateCurrentTime(); + + if (nxagentOption(DesktopResize) == 1 && + (nxagentOption(Fullscreen) == 1 || + width > WidthOfScreen(DefaultScreenOfDisplay(nxagentDisplay)) || + height > HeightOfScreen(DefaultScreenOfDisplay(nxagentDisplay)))) + { + if (nxagentOption(ClientOs) != ClientOsWinnt + /*&& nxagentOption(ClientOs) != ClientNXPlayer*/) + { + nxagentChangeOption(DesktopResize, 0); + } + } + + if (nxagentOption(DesktopResize) == 1 && nxagentOption(Fullscreen) == 0 && + nxagentOption(AllScreens) == 0) + { + nxagentChangeOption(Width, width); + nxagentChangeOption(Height, height); + } + + result = nxagentResizeScreen(pScreen, width, height, mmWidth, mmHeight); + + if (result == 1 && nxagentOption(DesktopResize) == 1 && + nxagentOption(Fullscreen) == 0 && nxagentOption(AllScreens) == 0) + { + nxagentRandRSetWindowsSize(width, height); + nxagentSetWMNormalHints(pScreen -> myNum); + } + + nxagentMoveViewport(pScreen, 0, 0); + + return result; +} + +#endif |