943N/A* Copyright (c) 1993, 2009, Oracle and/or its affiliates. All rights reserved. 551N/A* Permission is hereby granted, free of charge, to any person obtaining a 919N/A* copy of this software and associated documentation files (the "Software"), 919N/A* to deal in the Software without restriction, including without limitation 919N/A* the rights to use, copy, modify, merge, publish, distribute, sublicense, 919N/A* and/or sell copies of the Software, and to permit persons to whom the 919N/A* Software is furnished to do so, subject to the following conditions: 919N/A* The above copyright notice and this permission notice (including the next 919N/A* paragraph) shall be included in all copies or substantial portions of the 919N/A* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 919N/A* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 919N/A* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 919N/A* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 919N/A* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 919N/A* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 919N/A* DEALINGS IN THE SOFTWARE. 551N/A/************************************************************************/ 551N/A/* Copyright 1987, 1988, 1989, 1990, 1991, 1992, 1993 */ 551N/A/* by Digital Equipment Corp., Maynard, MA */ 551N/A/* Permission to use, copy, modify, and distribute this software */ 551N/A/* and its documentation for any purpose and without fee is hereby */ 551N/A/* granted, provided that the above copyright notice appear in all */ 551N/A/* copies and that both that copyright notice and this permission */ 551N/A/* notice appear in supporting documentation, and that the name of */ 551N/A/* Digital not be used in advertising or publicity pertaining to */ 551N/A/* distribution of the software without specific, written prior */ 551N/A/* DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, */ 551N/A/* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND */ 551N/A/* FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, */ 551N/A/* INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER */ 551N/A/* RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN */ 551N/A/* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, */ 551N/A/* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE */ 551N/A/************************************************************************/ 551N/A/* This module is intended to provide access features for people */ 551N/A/* with physical disabilities. This is a Motif client that */ 551N/A/* communicates with the AccessX server extension and allows us to */ 551N/A/* get visual feedback regarding the state of the AccessX features.*/ 551N/A/* 11-Jun-1993 WDW & MEN */ 551N/A/* Develop sample implementation. */ 551N/A/* 14-Aug-1993 JMS & WEJ */ 551N/A/************************************************************************/ 551N/A/* Special constants needed for the accessx extension */ 551N/A/************************************************************************/ 551N/A/************************************************************************/ 551N/A/* Standard C Include Files */ 551N/A/* X Window System Include Files */ 551N/A/* accessx Specific Include Files */ 551N/A/* Help related files */ 551N/A/* Motif Toolkit Include Files */ 551N/A/************************************************************************/ 551N/A/* Forward Declarations */ 551N/A/************************************************************************/ 551N/A/* Conversion Related Functions */ 551N/A/* State-of-Widget related Functions */ 551N/A/* UIL Callback Functions */ 551N/A/* Help Facility Functions */ 551N/A/* Creation-Destruction Status Windows Functions */ 551N/A/* Load-Save Related Functions */ 551N/A/* XKB related functions */ 551N/A/************************************************************************/ 551N/A/* X11, Xt, and Other Global Variables */ 551N/A/************************************************************************/ 551N/A/* X11, Xt and General Widgets Global Variables */ 551N/A/* Widgets Shells and Dialogs */ 551N/A/* Global Flags and State */ 551N/A/************************************************************************/ 551N/A/* Mrm & Motif Global Variables */ 551N/A/************************************************************************/ 551N/A/* Motif String Global Variables */ 551N/A/************************************************************************/ 551N/A/* Help Global variables */ 551N/A/************************************************************************/ 551N/A#define ACCESSXHELP_DIRECTORY "./locale/" 551N/A/************************************************************************/ 551N/A/* Constant Declarations */ 551N/A/************************************************************************/ 551N/A/* WIDGET INDEXING DECLARATIONS */ 551N/A/* Main Menu Push Button Items */ 551N/A/* Help Related Widgets */ 551N/A/* Settings Window Related Widgets */ 551N/A/* Sticky Keys Status Widgets */ 551N/A/* Mouse Keys Status Widgets */ 551N/A/* Load-Save Dialog Widgets */ 551N/A/* This Should Reflect Current Designs */ 551N/A/* Application Class String */ 551N/A/************************************************************************/ 551N/A/************************************************************************/ 551N/A "*MouseTimeToMaxScale",
551N/A "*KRGRepeatDelayScale",
551N/A "*KRGSlowKeysDelayScale",
551N/A "AccessX*ToggleButtonGadget.XmCSet",
551N/A "AccessX*ToggleButtonGadget.XmCSet",
551N/A "AccessX*ToggleButtonGadget.XmCSet",
551N/A "AccessX*ToggleButtonGadget.XmCSet",
551N/A "AccessX*ToggleButtonGadget.XmCSet",
551N/A "AccessX*ToggleButtonGadget.XmCSet",
551N/A "AccessX*ToggleButtonGadget.XmCSet",
551N/A "AccessX*ToggleButtonGadget.XmCSet",
551N/A "AccessX*ToggleButtonGadget.XmCSet",
551N/A "AccessX*ToggleButtonGadget.XmCSet",
551N/A "AccessX*ToggleButtonGadget.XmCSet",
551N/A "AccessX*ToggleButtonGadget.XmCSet",
551N/A "AccessX*ToggleButtonGadget.XmCSet",
551N/A/************************************************************************/ 551N/A/* Application Resources */ 551N/A/************************************************************************/ 551N/A/* The fallback resources are used to define the default values for 551N/A "*TimeOutScale.minimum: 1",
551N/A "*TimeOutScale.maximum: 10",
551N/A "*TimeOutScale.decimalPoints: 0",
551N/A "*TimeOutScale.value: 2",
551N/A "*MouseMaxSpeedScale.minimum: 1",
551N/A "*MouseMaxSpeedScale.maximum: 500",
551N/A "*MouseMaxSpeedScale.decimalPoints: 0",
551N/A "*MouseMaxSpeedScale.value: 300",
551N/A "*MouseAccelScale.minimum: 1",
551N/A "*MouseAccelScale.maximum: 40",
551N/A "*MouseAccelScale.decimalPoints: 1",
551N/A "*MouseAccelScale.value: 20",
551N/A "*MouseDelayScale.minimum: 1",
551N/A "*MouseDelayScale.maximum: 40",
551N/A "*MouseDelayScale.decimalPoints: 1",
551N/A "*MouseDelayScale.value: 3",
551N/A "*KRGRepeatRateScale.minimum: 1",
551N/A "*KRGRepeatRateScale.maximum: 400",
551N/A "*KRGRepeatRateScale.decimalPoints: 2",
551N/A "*KRGRepeatRateScale.value: 5",
551N/A "*KRGRepeatDelayScale.minimum: 1",
551N/A "*KRGRepeatDelayScale.maximum: 400",
551N/A "*KRGRepeatDelayScale.decimalPoints: 2",
551N/A "*KRGRepeatDelayScale.value: 66",
551N/A "*KRGSlowKeysDelayScale.minimum: 1",
551N/A "*KRGSlowKeysDelayScale.maximum: 40",
551N/A "*KRGSlowKeysDelayScale.decimalPoints: 1",
551N/A "*KRGSlowKeysDelayScale.value: 3",
551N/A "*KRGDebounceScale.minimum: 0",
551N/A "*KRGDebounceScale.maximum: 40",
551N/A "*KRGDebounceScale.decimalPoints: 1",
551N/A "*KRGDebounceScale.value: 3",
551N/A/************************************************************************/ 551N/A/* AccessXEventHandler */ 551N/A/* Handle all events generated by the AccessX server extension. */ 551N/A/************************************************************************/ 551N/A /*[[[should put a check in for sounds]]]*/ 551N/A /*[[[should put a check in for sounds]]]*/ 551N/A /*[[[MouseKeys On/Off has not been implemented in the server yet]]]*/ 551N/A /*[[[should put a check in for sounds]]]*/ 551N/A /*[[[should put a check in for sounds]]]*/ 551N/A /*[[[should put a check in for sounds]]]*/ 551N/A /*[[[should put a check in for sounds]]]*/ 551N/A /*[[[should put a check in for sounds]]]*/ 551N/A /*[[[should put a check in for sounds]]]*/ 551N/A /*[[[should put a check in for sounds]]]*/ 551N/A /*[[[should put a check in for sounds]]]*/ 551N/A /*[[[should put a check in for sounds]]]*/ 551N/A}
/* AccessXEventHandler */ 551N/A/************************************************************************/ 551N/A/* ConvertScaleValueToUnits */ 551N/A/* Take a scale reading and a decimal point reading and returns */ 551N/A/* a floating point number which is the value the scale really */ 551N/A/* represents. The purpose of this function is to easily convert */ 551N/A/* between both representations independent of what the value */ 551N/A/* actually represents. */ 551N/A/************************************************************************/ 551N/A/************************************************************************/ 551N/A/* ConvertUnitsToScaleValue */ 551N/A/* Take a floating point value and a decimal points reading and */ 551N/A/* returns an adjusted integer value which may be used as a value */ 551N/A/* for a scale widget. The purpose of this function is to easily */ 551N/A/* convert between both representation independent of what the */ 551N/A/* value actually represents. */ 551N/A/************************************************************************/ 551N/A/************************************************************************/ 551N/A/* Sets the state of the extension according to the state of the */ 551N/A/* widgets in the interface. */ 551N/A/************************************************************************/ 551N/A}
/* SetStateFromView */ 551N/A /********************************************************************/ 551N/A /* Global values: Enable AccessX, Beep on Feature Use, TimeOut */ 551N/A /********************************************************************/ 551N/A /********************************************************************/ 551N/A /* Keyboard Control: StickyKeys, MouseKeys, ToggleKeys */ 551N/A /********************************************************************/ 551N/A /********************************************************************/ 551N/A /* Keyboard Response: RepeatKeys, SlowKeys, BounceKeys */ 551N/A /********************************************************************/ 551N/A /********************************************************************/ 551N/A /* StickyKeys Settings: Auto Off, Modifiers Beep */ 551N/A /********************************************************************/ 551N/A /********************************************************************/ 551N/A /* MouseKeys Settings: Speed Delay, Max Speed */ 551N/A /********************************************************************/ 551N/A /********************************************************************/ 551N/A /* RepeatKeys Settings: Delay, Rate */ 551N/A /********************************************************************/ 551N/A /********************************************************************/ 551N/A /* SlowKeys Settings: Beep On Press, Beep on Accept, Delay */ 551N/A /********************************************************************/ 551N/A /********************************************************************/ 551N/A /* BounceKeys Settings: Delay */ 551N/A /********************************************************************/ 551N/A /********************************************************************/ 551N/A /********************************************************************/ 551N/A}
/* SetStateFromViewXKB */ 551N/A /* Do a special case for the Time Out toggle */ 551N/A /* The scale reads "minutes" and we want to give the extension 551N/A * A timeout value in seconds. 551N/A /* The only thing we want to do a GetValues on are the scale widgets, 551N/A * so we only need to set the argument list up once. 551N/A /* The scale reads "seconds" and we want to give the extension a 551N/A * value in milliseconds. 551N/A /* The scale reads "seconds" and we want to give the extension a 551N/A * value in milliseconds. 551N/A /* The scale reads "seconds" and we want to give the extension a 551N/A * value in milliseconds. 551N/A /* The scale reads "seconds" and we want to give the extension a 551N/A}
/* SetStateFromViewAX */ 551N/A/************************************************************************/ 551N/A/* Sets the state of the extension to the below values */ 551N/A/************************************************************************/ 551N/A /* We don't want to do it for TIME_OUT_TGL, but that's OK */ 551N/A /*XmToggleButtonSetState(widgets[TIME_OUT_TGL], False, False);*/ 551N/A /* The scale reads pixels per movement. */ 551N/A /* The scale reads "seconds" and the extension gives us time in seconds. */ 551N/A /* The scale reads "seconds" but the extension gives us time 551N/A /* The scale reads "seconds" but the extension gives us time 551N/A /* The scale reads "seconds" but the extension gives us time 551N/A/************************************************************************/ 551N/A/* Sets the user interface state from the state of the extension. */ 551N/A/************************************************************************/ 551N/A /********************************************************************/ 551N/A /* Global values: Enable AccessX, Beep on Feature Use, TimeOut */ 551N/A /********************************************************************/ 551N/A /********************************************************************/ 551N/A /* Keyboard Control: StickyKeys, MouseKeys, ToggleKeys */ 551N/A /********************************************************************/ 551N/A /********************************************************************/ 551N/A /* Keyboard Response: RepeatKeys, SlowKeys, BounceKeys */ 551N/A /********************************************************************/ 551N/A /********************************************************************/ 551N/A /* StickyKeys Settings: Auto Off, Modifiers Beep */ 551N/A /********************************************************************/ 551N/A /********************************************************************/ 551N/A /* MouseKeys Settings: Max Speed, Acceleration, Delay */ 551N/A /********************************************************************/ 551N/A /********************************************************************/ 551N/A /* RepeatKeys Settings: Delay, Rate */ 551N/A /********************************************************************/ 551N/A /********************************************************************/ 551N/A /* SlowKeys Settings: Beep On Press, Beep on Accept, Delay */ 551N/A /********************************************************************/ 551N/A /********************************************************************/ 551N/A /* BounceKeys Settings: Delay */ 551N/A /********************************************************************/ 551N/A /* We don't want to do it for TIME_OUT_TGL, but that's OK */ 551N/A /* The scale reads "minutes" but the extension gives us time 551N/A}
/* SetViewFromState */ 551N/A/************************************************************************/ 551N/A/* SetSettingsViewFromState */ 551N/A/************************************************************************/ 551N/A /* The scale reads pixels per movement. */ 551N/A /* The scale reads "seconds" and the extension gives us time in seconds. */ 551N/A /* The scale reads "seconds" but the extension gives us time 551N/A /* The scale reads "seconds" but the extension gives us time 551N/A /* The scale reads "seconds" but the extension gives us time 551N/A/************************************************************************/ 551N/A/* SetStickyStatusViewFromState */ 551N/A/************************************************************************/ 551N/A}
/* SetStickyStatusViewFromState */ 551N/A /* Emtpy all mod settings first */ 551N/A /* Now set all the mods */ 551N/A}
/* SetStickyStatusViewFromStateXKB */ 551N/A}
/* SetStickyStatusViewFromStateAX */ 551N/A/************************************************************************/ 551N/A/* SetMouseStatusViewFromState */ 551N/A/************************************************************************/ 551N/A}
/* SetMouseStatusViewFromState */ 551N/A}
/* SetMouseStatusViewFromStateXKB */ 551N/A}
/* SetMouseStatusViewFromStateAX */ 551N/A/************************************************************************/ 551N/A/* UpdateWidgetSensitivity */ 551N/A/************************************************************************/ 551N/A /* If the enable toggle is turned of then grey out everything */ 551N/A /* Toggle Sensitivity of TimeOut Scale based upon ENABLE_ACCESS 551N/A * as well as the TimeOut Toggle. 551N/A /* Always grey out the mouse delay scale with the old AccessX extension */ 551N/A/************************************************************************/ 551N/A/* Procedure called when a widget is fetched from Mrm. */ 551N/A/************************************************************************/ 551N/A/************************************************************************/ 551N/A/* Procedure called when a widget is activated. [[[Right now it */ 551N/A/* merely handles the pushbuttons in the interface. Things like */ 551N/A/* saving the current state when bringing up a dialog box and */ 551N/A/* restoring the prvious state when the user hits "Cancel" need */ 551N/A/* to be added. In addition, the whole help mechanism needs to be */ 551N/A/************************************************************************/ 551N/A/************************************************************************/ 551N/A/************************************************************************/ 551N/A}
/* GetSizeOfHelpText */ 551N/A/************************************************************************/ 551N/A/* AllocateHelpTextMemory */ 551N/A/************************************************************************/ 551N/A}
/* AllocateHelpTextMemory */ 551N/A/************************************************************************/ 551N/A/************************************************************************/ 551N/A /* 4340632: accessx application should show C locale help 551N/A if localized help not available */ 551N/A/************************************************************************/ 551N/A/************************************************************************/ 551N/A /* it is general help */ 551N/A /* remove the comment line */ 551N/A /* it is Sticky Key help */ 551N/A /* remove the comment line */ 551N/A /* it is Mouse Key help */ 551N/A /* remove the comment line */ 551N/A /* it is Toggle Key help */ 551N/A /* remove the comment line */ 551N/A /* it is Repeat Key help */ 551N/A /* remove the comment line */ 551N/A /* it is Slow Key help */ 551N/A /* remove the comment line */ 551N/A /* it is Bounce Key help */ 551N/A/************************************************************************/ 551N/A/************************************************************************/ 851N/A "Please contact your system administrator\n");
551N/A/************************************************************************/ 551N/A/* SpaceAndSizeButtons */ 551N/A/************************************************************************/ 551N/A /* Find the widest button. 551N/A /* Equally space the buttons. 551N/A}
/* SpaceAndSizeButtons */ 551N/A/************************************************************************/ 551N/A/* CreateAndMapStickyStatusWindow */ 551N/A/************************************************************************/ 551N/A}
/* CreateAndMapStickyStatusWindow */ 551N/A/************************************************************************/ 551N/A/* UnmapStickyStatusWindow */ 551N/A/************************************************************************/ 551N/A}
/* UnmapStickyStatusWindow */ 551N/A/************************************************************************/ 551N/A/* CreateAndMapMouseStatusWindow */ 551N/A/************************************************************************/ 551N/A}
/* CreateAndMapMouseStatusWindow */ 551N/A/************************************************************************/ 551N/A/* UnmapMouseStatusWindow */ 551N/A/************************************************************************/ 551N/A}
/* UnmapMouseStatusWindow */ 551N/A/************************************************************************/ 551N/A/* Procedure called when one of the widgets indicating the AccessX */ 551N/A/* state is activated. */ 551N/A/************************************************************************/ 551N/A /* Before we do anything, make sure we emulate the radio behavior 551N/A of the SlowKeys and BounceKeys buttons. */ 551N/A /* Set the repeat state and keysym mappings of the mouse keys if 551N/A this is the MouseKeys toggle buttons. */ 551N/A /* Save To A File IF Needed */ 551N/A}
/* ChangeControlProc */ 551N/A/************************************************************************/ 551N/A/* ResolveResourceFileName */ 551N/A/************************************************************************/ 551N/A}
/* ResolveResourceFileName */ 551N/A/************************************************************************/ 551N/A/* LoadSettingsFromFile */ 551N/A/************************************************************************/ 551N/A /* XtManageChild(loadDoneDialog); */ 551N/A}
/* LoadSettingsFromFile */ 551N/A/************************************************************************/ 551N/A/* SaveSettingsToFile */ 551N/A/************************************************************************/ 551N/A}
/* SaveSettingsToFile */ 551N/A/************************************************************************/ 551N/A/* StoreSettingsWindowToDatabase */ 551N/A/************************************************************************/ 551N/A}
/* StoreSettingsWindowToDatabase */ 551N/A/************************************************************************/ 551N/A/* RestoreSettingsWindowFromDatabase */ 551N/A/************************************************************************/ 551N/A}
/* RestoreSettingsWindowFromDatabase */ 551N/A/************************************************************************/ 551N/A/* DisplayStatusDialogsIfNeeded */ 551N/A/************************************************************************/ 551N/A}
/* DisplayStatusDialogsIfNeeded */ 551N/A/************************************************************************/ 551N/A/* InitializeInterface */ 551N/A/************************************************************************/ 551N/A /* Initialize the toolkit and Mrm */ 551N/A /* Find which extension to use */ 551N/A /* Initialize widget array to all NULLS */ 551N/A /* Realize the topLevel widget and Initialize the AccessX extension. 551N/A /* Initialize the accessx extention */ 551N/A}
/* InitializeInterface */ 551N/A/************************************************************************/ 551N/A/* Handles events generated by the Xkb server extension. */ 551N/A/************************************************************************/ 551N/A/************************************************************************/ 551N/A/************************************************************************/ 551N/A/************************************************************************/ 551N/A/************************************************************************/ 551N/A /* Initialize the Interface */ 551N/A /* Automatically load the users settings */ 551N/A /* First try initalizing XKB, if that fails then try the old AccessX extension. */