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