2025-08-08 20:00:36 +02:00

210 lines
6.1 KiB
C

/**************************************************************************/
/* */
/* Copyright (c) 2001, 2011 NoMachine (http://www.nomachine.com) */
/* Copyright (c) 2008-2017 Oleksandr Shneyder <o.shneyder@phoca-gmbh.de> */
/* Copyright (c) 2011-2022 Mike Gabriel <mike.gabriel@das-netzwerkteam.de>*/
/* Copyright (c) 2014-2019 Mihai Moldovan <ionic@ionic.de> */
/* Copyright (c) 2014-2022 Ulrich Sibiller <uli42@gmx.de> */
/* Copyright (c) 2015-2016 Qindel Group (http://www.qindel.com) */
/* */
/* NXAGENT, NX protocol compression and NX extensions to this software */
/* are copyright of the aforementioned persons and companies. */
/* */
/* Redistribution and use of the present software is allowed according */
/* to terms specified in the file LICENSE which comes in the source */
/* distribution. */
/* */
/* All rights reserved. */
/* */
/* NOTE: This software has received contributions from various other */
/* contributors, only the core maintainers and supporters are listed as */
/* copyright holders. Please contact us, if you feel you should be listed */
/* as copyright holder, as well. */
/* */
/**************************************************************************/
#include <stdio.h>
#include <string.h>
#include "X.h"
#include "Agent.h"
#include "Args.h"
#include "Options.h"
#include "Utils.h"
/*
* Instead of having a single options repository data could be
* attached to the display or the screen. The macro nxagentOption()
* should make the transition simple.
*/
AgentOptionsRec nxagentOptions;
AgentOptionsRec nxagentOptionsBackup;
AgentOptionsPtr nxagentOptionsPtr = &nxagentOptions;
/*
* If this is set, print the geometry in the block handler.
*/
unsigned int nxagentPrintGeometryFlags = 0;
/*
* This must be called at startup to initialize the options repository
* to the default values.
*/
void nxagentInitOptions(void)
{
nxagentOptions.LinkType = UNDEFINED;
nxagentOptions.Desktop = True;
nxagentOptions.Persistent = True;
nxagentOptions.Rootless = False;
nxagentOptions.Shadow = False;
nxagentOptions.Fullscreen = False;
nxagentOptions.AllScreens = False;
nxagentOptions.NoRootlessExit = False;
nxagentOptions.X = 0;
nxagentOptions.Y = 0;
nxagentOptions.Width = 0;
nxagentOptions.Height = 0;
nxagentOptions.BorderWidth = 0;
nxagentOptions.WMBorderWidth = -1;
nxagentOptions.WMTitleHeight = -1;
nxagentOptions.SavedX = 0;
nxagentOptions.SavedY = 0;
nxagentOptions.SavedWidth = 0;
nxagentOptions.SavedHeight = 0;
nxagentOptions.Timeout = 0;
nxagentOptions.Nested = False;
nxagentOptions.BackingStore = BackingStoreUndefined;
nxagentOptions.Clipboard = ClipboardBoth;
nxagentOptions.TextClipboard = False;
nxagentOptions.SharedMemory = True;
nxagentOptions.SharedPixmaps = True;
nxagentOptions.DeviceControl = False;
nxagentOptions.DeviceControlUserDefined = False;
nxagentOptions.ResetKeyboardAtResume = True;
nxagentOptions.Reset = False;
nxagentOptions.RootX = 0;
nxagentOptions.RootY = 0;
nxagentOptions.RootWidth = 0;
nxagentOptions.RootHeight = 0;
nxagentOptions.ViewportXSpan = 0;
nxagentOptions.ViewportYSpan = 0;
nxagentOptions.DesktopResize = True;
nxagentOptions.Ratio = DONT_SCALE;
nxagentOptions.XRatio = DONT_SCALE;
nxagentOptions.YRatio = DONT_SCALE;
nxagentOptions.FloatRatio = 1.0;
nxagentOptions.FloatXRatio = 1.0;
nxagentOptions.FloatYRatio = 1.0;
nxagentOptions.UseDamage = True;
nxagentOptions.Binder = False;
nxagentOptions.BinderOptions = NULL;
nxagentOptions.Xdmcp = False;
nxagentOptions.DisplayBuffer = UNDEFINED;
nxagentOptions.DisplayCoalescence = 0;
nxagentOptions.Composite = False;
nxagentOptions.IgnoreVisibility = False;
nxagentOptions.ViewOnly = False;
nxagentOptions.Adaptive = False;
nxagentOptions.Streaming = False;
nxagentOptions.DeferLevel = UNDEFINED;
nxagentOptions.DeferTimeout = 200;
nxagentOptions.TileWidth = UNDEFINED;
nxagentOptions.TileHeight = UNDEFINED;
nxagentOptions.Menu = True;
nxagentOptions.MagicPixel = True;
nxagentOptions.ClientOs = UNDEFINED;
nxagentOptions.InhibitXkb = True;
nxagentOptions.CopyBufferSize = COPY_UNLIMITED;
nxagentOptions.ImageRateLimit = 0;
nxagentOptions.Xinerama = True;
nxagentOptions.SleepTimeMillis = DEFAULT_SLEEP_TIME_MILLIS;
nxagentOptions.ReconnectTolerance = DEFAULT_TOLERANCE;
nxagentOptions.KeycodeConversion = DEFAULT_KEYCODE_CONVERSION;
nxagentOptions.AutoGrab = False;
}
/*
* This is called at session reconnection to reset some options to
* their default values. The reason to avoid calling the
* nxagentInitOptions() is that not all the options can change value
* when reconnecting.
*/
void nxagentResetOptions(void)
{
if (nxagentLockDeferLevel == 0)
{
nxagentOptions.DeferLevel = UNDEFINED;
}
nxagentOptions.DeferTimeout = 200;
nxagentOptions.TileWidth = UNDEFINED;
nxagentOptions.TileHeight = UNDEFINED;
nxagentOptions.WMBorderWidth = -1;
nxagentOptions.WMTitleHeight = -1;
nxagentOptions.KeycodeConversion = DEFAULT_KEYCODE_CONVERSION;
}
void nxagentSaveOptions(void)
{
memcpy(&nxagentOptionsBackup, &nxagentOptions, sizeof(AgentOptionsRec));
}
void nxagentRestoreOptions(void)
{
nxagentOptions.DeferLevel = nxagentOptionsBackup.DeferLevel;
nxagentOptions.DeferTimeout = nxagentOptionsBackup.DeferTimeout;
nxagentOptions.TileWidth = nxagentOptionsBackup.TileWidth;
nxagentOptions.TileHeight = nxagentOptionsBackup.TileHeight;
}