Screen.c 116 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175
  1. /*
  2. * CDE - Common Desktop Environment
  3. *
  4. * Copyright (c) 1993-2012, The Open Group. All rights reserved.
  5. *
  6. * These libraries and programs are free software; you can
  7. * redistribute them and/or modify them under the terms of the GNU
  8. * Lesser General Public License as published by the Free Software
  9. * Foundation; either version 2 of the License, or (at your option)
  10. * any later version.
  11. *
  12. * These libraries and programs are distributed in the hope that
  13. * they will be useful, but WITHOUT ANY WARRANTY; without even the
  14. * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  15. * PURPOSE. See the GNU Lesser General Public License for more
  16. * details.
  17. *
  18. * You should have received a copy of the GNU Lesser General Public
  19. * License along with these libraries and programs; if not, write
  20. * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
  21. * Floor, Boston, MA 02110-1301 USA
  22. */
  23. /************************************<+>*************************************/
  24. /****************************************************************************/
  25. /** **/
  26. /** File: Screen.c **/
  27. /** **/
  28. /** Project: DT 1.0 **/
  29. /** **/
  30. /** Description: Controls the Dtstyle Screen dialog **/
  31. /** **/
  32. /** **/
  33. /** **/
  34. /** **/
  35. /****************************************************************************/
  36. /************************************<+>*************************************/
  37. /*$TOG: Screen.c /main/9 1997/07/14 17:44:42 samborn $*/
  38. #include <X11/Xlib.h>
  39. #include <Xm/MwmUtil.h>
  40. #include <Xm/Xm.h>
  41. #include <Xm/XmP.h>
  42. #include <Xm/DrawingA.h>
  43. #include <Xm/Form.h>
  44. #include <Xm/List.h>
  45. #include <Xm/Frame.h>
  46. #include <Xm/LabelG.h>
  47. #include <Xm/PushBG.h>
  48. #include <Xm/PushB.h>
  49. #include <Xm/RowColumn.h>
  50. #include <Xm/Scale.h>
  51. #include <Xm/ToggleBG.h>
  52. #include <Xm/VendorSEP.h>
  53. #include <Xm/Protocols.h>
  54. #include <stdio.h>
  55. #include <signal.h>
  56. #include <errno.h>
  57. #include <ctype.h>
  58. #include <X11/Intrinsic.h>
  59. #include <X11/Xutil.h>
  60. #include <X11/Xatom.h>
  61. #include <Dt/Action.h>
  62. #include <Dt/UserMsg.h>
  63. #include <Dt/SaverP.h>
  64. #include <Dt/DialogBox.h>
  65. #include <Dt/Icon.h>
  66. #include <Dt/TitleBox.h>
  67. #include <Dt/Message.h>
  68. #include <Dt/HourGlass.h>
  69. #include "Help.h"
  70. #include "Main.h"
  71. #include "SaveRestore.h"
  72. #include "Protocol.h"
  73. /*+++++++++++++++++++++++++++++++++++++++*/
  74. /* include extern functions */
  75. /*+++++++++++++++++++++++++++++++++++++++*/
  76. #include "Screen.h"
  77. /*+++++++++++++++++++++++++++++++++++++++*/
  78. /* Local #defines */
  79. /*+++++++++++++++++++++++++++++++++++++++*/
  80. #ifndef MIN
  81. #define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  82. #endif
  83. #define TIMEOUT_MIN 1
  84. #define TIMEOUT_MAX 120
  85. #define CYCLETIME_MIN 0
  86. #define CYCLE_DEFAULT 3 /* 1-120 */
  87. #define LOCK_DEFAULT 30 /* 1-120 */
  88. #define SAVER_DEFAULT 10 /* 0-120 */
  89. #define SAVER_HEIGHT 238
  90. #define SAVER_WIDTH 298
  91. /*+++++++++++++++++++++++++++++++++++++++*/
  92. /* Internal Functions */
  93. /*+++++++++++++++++++++++++++++++++++++++*/
  94. static Widget build_screenDialog( Widget shell) ;
  95. static void formLayoutCB(Widget w,
  96. XtPointer client_data,
  97. XtPointer call_data) ;
  98. static void no_svr_ext_formLayoutCB(Widget w,
  99. XtPointer client_data,
  100. XtPointer call_data) ;
  101. static void _DtmapCB_screenDialog(Widget w,
  102. XtPointer client_data,
  103. XtPointer call_data) ;
  104. static void no_svr_ext_DtmapCB_screenDialog(Widget w,
  105. XtPointer client_data,
  106. XtPointer call_data) ;
  107. static void timeOutvalueChangedCB(Widget w,
  108. XtPointer client_data,
  109. XtPointer call_data) ;
  110. static void no_svr_ext_timeOutvalueChangedCB(Widget w,
  111. XtPointer client_data,
  112. XtPointer call_data) ;
  113. static void saverToggleCB(Widget w,
  114. XtPointer client_data,
  115. XtPointer call_data) ;
  116. static void no_svr_ext_saverToggleCB(Widget w,
  117. XtPointer client_data,
  118. XtPointer call_data) ;
  119. static void saversToggleCB(Widget w,
  120. XtPointer client_data,
  121. XtPointer call_data) ;
  122. static void lockToggleCB(Widget w,
  123. XtPointer client_data,
  124. XtPointer call_data) ;
  125. static void systemDefaultCB(Widget w,
  126. XtPointer client_data,
  127. XtPointer call_data) ;
  128. static void no_svr_ext_systemDefaultCB(Widget w,
  129. XtPointer client_data,
  130. XtPointer call_data) ;
  131. static void ButtonCB(Widget w,
  132. XtPointer client_data,
  133. XtPointer call_data) ;
  134. static void no_svr_ext_ButtonCB(Widget w,
  135. XtPointer client_data,
  136. XtPointer call_data) ;
  137. static XmString * MakeListStrings(char **list ) ;
  138. static void FreeListStrings(XmString *xmlist,
  139. int count) ;
  140. static void ListCB(Widget w,
  141. XtPointer client_data,
  142. XtPointer call_data) ;
  143. static void IconHandler(Widget shell,
  144. XtPointer client_data,
  145. XEvent *event,
  146. Boolean *dispatch) ;
  147. static void UnmapCB(Widget w,
  148. XtPointer client_data,
  149. XtPointer call_data) ;
  150. /*+++++++++++++++++++++++++++++++++++++++*/
  151. /* Internal Variables */
  152. /*+++++++++++++++++++++++++++++++++++++++*/
  153. typedef struct {
  154. Widget pictLabel;
  155. Widget systemDefault;
  156. Widget saverFrame;
  157. Widget saverForm;
  158. Widget saverArea;
  159. Widget saverAreaFrame;
  160. Widget saverLabel;
  161. Widget prevLabel;
  162. Widget saverOn;
  163. Widget saverOff;
  164. Widget saverRadioBox;
  165. Widget saverList;
  166. Widget timeOutLabel;
  167. Widget timeOutScale;
  168. Widget saverMinutesLabel;
  169. Widget cycleTimeLabel;
  170. Widget cycleTimeScale;
  171. Widget cycleMinutesLabel;
  172. Widget lockFrame;
  173. Widget lockForm;
  174. Widget lockLabel;
  175. Widget lockOn;
  176. Widget lockOff;
  177. Widget lockRadioBox;
  178. Widget lockingRadioBox;
  179. Widget lockOutLabel;
  180. Widget lockOutScale;
  181. Widget lockMinutesLabel;
  182. Widget useSaversOn; /* used for graying saverList and saverArea in no saver extn mode */
  183. Widget useSaversOff; /* used for graying saverList and saverArea in no saver extn mode */
  184. int interval;
  185. int blanking;
  186. int exposures;
  187. int newTimeout; /* the min value of savertimeout and locktimeout */
  188. int origTimeout; /* the original value of the min of savertimeout and locktimeout */
  189. int xTimeout; /* the value of the timeout extracted from the X server */
  190. Boolean timeMismatch; /* use to keep track of mismatch between xTimeout and newTimeout */
  191. int saverTimeout; /* the value of savertimeout */
  192. int lockTimeout; /* the value of locktimeout */
  193. int cycleTimeout; /* the value of cycletimeout */
  194. int saverTimeout_xrdb; /* the value of savertimeout from xrdb, in case saver is off */
  195. int lockTimeout_xrdb; /* the value of locktimeout from xrdb, in case lock is off */
  196. int new_blanking;
  197. Boolean systemDefaultFlag;
  198. } ScreenData; /* using the savers toggle when the saver extn is not present */
  199. static ScreenData screen;
  200. static saveRestore save = {FALSE, 0,};
  201. typedef struct {
  202. char *saversList; /* list of available savers */
  203. char *selsaversList; /* list of selected savers */
  204. char **saverActionNames; /* array of saver names */
  205. char **saverActionDesc; /* array of saver action descriptions */
  206. char **selsaverActionNames; /* array of originally selected saver names */
  207. int *selPositions; /* array of currently selected saver positions */
  208. int *origSelPositions; /* array of originally selected saver positions */
  209. int saverCount; /* number of available savers */
  210. int selsaverCount; /* number of currently selected screen savers */
  211. int orig_selsaverCount; /* number of originally selected screen savers */
  212. int previous_selsaverCount; /* number of previously selected screen savers */
  213. char *current_saver; /* name of current screen saver actions */
  214. char *current_saverDesc; /* description of current screen saver actions */
  215. int current_position; /* the clicked on position in the scrolled list */
  216. int shadow; /* shadow width of saver area */
  217. Pixel bg; /* bg color of the style manager dialogs */
  218. Pixel black; /* value of the black pixel */
  219. void *saverstate; /* current running screen saver state */
  220. } Savers, *SaversPtr;
  221. static Savers savers;
  222. /*++++++++++++++++++++++++++++++++++++++++*/
  223. /* build_saverList */
  224. /* parses a space separated list of */
  225. /* savers to build a an array of saver */
  226. /* names. Returns the array and the saver */
  227. /* count. */
  228. /*++++++++++++++++++++++++++++++++++++++++*/
  229. char **
  230. build_saverList(char * str,
  231. int * count)
  232. {
  233. char tokenSep[] = " ";
  234. char * token;
  235. char ** saverList = NULL;
  236. int i = 0;
  237. char * tmpStr, *tmpStr2;
  238. int len = strlen(str);
  239. *count = 0;
  240. tmpStr = (char *)XtCalloc(1, len + 1);
  241. tmpStr2 = tmpStr;
  242. strcpy(tmpStr, str);
  243. token = strtok(tmpStr, tokenSep);
  244. while(token != NULL)
  245. {
  246. ++(i);
  247. token = strtok(NULL, tokenSep);
  248. }
  249. if (i == 0)
  250. return (NULL);
  251. saverList = (char **) XtCalloc(1, i * sizeof(char *));
  252. if( saverList )
  253. {
  254. strcpy(tmpStr, str);
  255. while (isspace(*tmpStr))
  256. tmpStr++;
  257. token = strtok(tmpStr, tokenSep);
  258. *count=0;
  259. while(token != NULL)
  260. {
  261. if (DtActionExists(token))
  262. {
  263. saverList[*count] = (char *) XtCalloc(1, strlen( token ) + 1);
  264. strcpy(saverList[*count], token);
  265. ++(*count);
  266. }
  267. tmpStr += strlen(token);
  268. if (tmpStr >= tmpStr2 + len )
  269. token = NULL;
  270. else
  271. {
  272. do tmpStr++;
  273. while (isspace(*tmpStr));
  274. token = strtok(tmpStr, tokenSep);
  275. }
  276. }
  277. }
  278. if (tmpStr2)
  279. XtFree ((char *) tmpStr2);
  280. return(saverList);
  281. }
  282. /*+++++++++++++++++++++++++++++++++++++++*/
  283. /* build_selsaverList */
  284. /*+++++++++++++++++++++++++++++++++++++++*/
  285. char **
  286. build_selsaverList(char * envStr,
  287. int * count)
  288. {
  289. char tokenSep[] = " ";
  290. char * token;
  291. char ** saverList = NULL;
  292. int i = 0;
  293. char * tmpStr;
  294. int len = strlen(envStr);
  295. *count = 0;
  296. tmpStr = (char *)XtCalloc(1, len + 1);
  297. strcpy(tmpStr, envStr);
  298. token = strtok(tmpStr, tokenSep);
  299. while(token != NULL)
  300. {
  301. ++(i);
  302. token = strtok(NULL, tokenSep);
  303. }
  304. if (i == 0)
  305. return (NULL);
  306. saverList = (char **) XtCalloc(1, i * sizeof(char *));
  307. if( saverList )
  308. {
  309. strcpy(tmpStr, envStr);
  310. token = strtok(tmpStr, tokenSep);
  311. *count=0;
  312. while(token != NULL)
  313. {
  314. saverList[*count] = (char *) XtCalloc(1, strlen( token ) + 1);
  315. strcpy(saverList[*count], token);
  316. token = strtok(NULL, tokenSep);
  317. ++(*count);
  318. }
  319. }
  320. XtFree ((char *) tmpStr);
  321. return(saverList);
  322. }
  323. /*+++++++++++++++++++++++++++++++++++++++*/
  324. /* build_saverDesc */
  325. /*+++++++++++++++++++++++++++++++++++++++*/
  326. char **
  327. build_saverDesc(char ** names,
  328. int count)
  329. {
  330. char **saverDesc = NULL;
  331. char *tmpstr;
  332. int i;
  333. saverDesc = (char **) XtCalloc(1, count * sizeof(char *));
  334. for (i=0; i<count; i++)
  335. {
  336. tmpstr = DtActionDescription(savers.saverActionNames[i]);
  337. if (tmpstr == NULL)
  338. {
  339. saverDesc[i] = (char *) XtMalloc(strlen(savers.saverActionNames[i]) + 1);
  340. strcpy(saverDesc[i], savers.saverActionNames[i]);
  341. }
  342. else
  343. {
  344. saverDesc[i] = (char *) XtMalloc(strlen(tmpstr) + 1);
  345. strcpy(saverDesc[i], tmpstr);
  346. }
  347. XtFree((char *) tmpstr);
  348. }
  349. return(saverDesc);
  350. }
  351. /*+++++++++++++++++++++++++++++++++++++++*/
  352. /* build_selectedList */
  353. /* takes an array of names and a count */
  354. /* and returns a space separated list */
  355. /*+++++++++++++++++++++++++++++++++++++++*/
  356. char *
  357. build_selectedList(char ** saverList,
  358. int count)
  359. {
  360. char * selectedList = NULL;
  361. int i = 0;
  362. char * tmpStr;
  363. int len = 0;
  364. int tmplen = 0;
  365. if (saverList == NULL)
  366. return(NULL);
  367. for (i=0; i<count; i++)
  368. {
  369. len += strlen(saverList[i]) + 1;
  370. }
  371. selectedList = (char *)XtMalloc(len + 1);
  372. selectedList[0] = '\0';
  373. for (i=0; i<count; i++)
  374. {
  375. strcat(selectedList, saverList[i]);
  376. strcat(selectedList, " ");
  377. }
  378. return(selectedList);
  379. }
  380. /*+++++++++++++++++++++++++++++++++++++++*/
  381. /* free_saverList */
  382. /*+++++++++++++++++++++++++++++++++++++++*/
  383. void
  384. free_saverList(char ** saverList,
  385. int count)
  386. {
  387. int i;
  388. if (saverList == NULL)
  389. return;
  390. for (i=0; i<count; i++)
  391. XtFree((char *) saverList[i]);
  392. XtFree ((char *) saverList);
  393. }
  394. /*+++++++++++++++++++++++++++++++++++++++*/
  395. /* popup_screenBB */
  396. /*+++++++++++++++++++++++++++++++++++++++*/
  397. void
  398. popup_screenBB(
  399. Widget shell )
  400. {
  401. if (style.screenDialog == NULL) {
  402. _DtTurnOnHourGlass(shell);
  403. build_screenDialog(shell);
  404. XtManageChild(style.screenDialog);
  405. _DtTurnOffHourGlass(shell);
  406. }
  407. else
  408. {
  409. XtManageChild(style.screenDialog);
  410. raiseWindow(XtWindow(XtParent(style.screenDialog)));
  411. }
  412. }
  413. /*+++++++++++++++++++++++++++++++++++++++*/
  414. /* build_screenDialog */
  415. /*+++++++++++++++++++++++++++++++++++++++*/
  416. static Widget
  417. build_screenDialog(
  418. Widget shell )
  419. {
  420. int i, m, n;
  421. Arg args[MAX_ARGS];
  422. Widget form;
  423. Boolean sel_matched = False;
  424. int sel_found = 1;
  425. int old_selsaverCount = 0;
  426. Widget widget_list1[12];
  427. Widget widget_list2[12];
  428. int list1_count = 0;
  429. int list2_count = 0;
  430. XmString button_string[NUM_LABELS];
  431. XmString string;
  432. XmString *listStrings;
  433. XColor color;
  434. Colormap cmap;
  435. Dimension MaxLabelWidth = 0;
  436. Dimension LabelWidth = 0;
  437. Atom delete_window_atom;
  438. Boolean low_res = False;
  439. XtArgVal scratch;
  440. /* initialize saver data */
  441. savers.shadow = 2;
  442. savers.saverstate = NULL;
  443. savers.saverCount = 0;
  444. savers.selsaverCount = 0;
  445. savers.previous_selsaverCount = 0;
  446. savers.saversList = NULL;
  447. savers.selsaverActionNames = NULL;
  448. savers.selPositions = NULL;
  449. savers.selsaversList = NULL;
  450. savers.saverActionNames = NULL;
  451. savers.saverActionDesc = NULL;
  452. savers.current_saver = NULL;
  453. savers.current_saverDesc = NULL;
  454. savers.current_position = 0;
  455. savers.black = BlackPixel(style.display, DefaultScreen(XtDisplay(shell)));
  456. /* load the actions data base */
  457. DtDbLoad();
  458. if (_DtGetDisplayResolution(style.display, style.screenNum) == 1)
  459. low_res = True;
  460. /* Set up DialogBoxDialog button labels */
  461. button_string[0] = CMPSTR((String) _DtOkString);
  462. button_string[1] = CMPSTR((String) _DtCancelString);
  463. button_string[2] = CMPSTR((String) _DtHelpString);
  464. /* Create toplevel DialogBox */
  465. /* saveRestore - Note that save.poscnt has been initialized elsewhere. */
  466. /* save.posArgs may contain information from restoreScreen().*/
  467. XtSetArg(save.posArgs[save.poscnt], XmNbuttonCount, NUM_LABELS);
  468. save.poscnt++;
  469. XtSetArg(save.posArgs[save.poscnt], XmNbuttonLabelStrings, button_string);
  470. save.poscnt++;
  471. XtSetArg (save.posArgs[save.poscnt], XmNdefaultPosition, False);
  472. save.poscnt++;
  473. style.screenDialog =
  474. __DtCreateDialogBoxDialog(shell, "ScreenDialog", save.posArgs, save.poscnt);
  475. XmStringFree(button_string[0]);
  476. XmStringFree(button_string[1]);
  477. XmStringFree(button_string[2]);
  478. widget_list1[0] = _DtDialogBoxGetButton(style.screenDialog,2);
  479. n=0;
  480. XtSetArg(args[n], XmNautoUnmanage, False); n++;
  481. XtSetArg(args[n], XmNcancelButton, widget_list1[0]); n++;
  482. XtSetValues (style.screenDialog, args, n);
  483. /* Set the title */
  484. n=0;
  485. XtSetArg(args[n], XmNtitle, ((char *)GETMESSAGE(12, 1, "Style Manager - Screen"))); n++;
  486. XtSetArg(args[n], XmNuseAsyncGeometry, True); n++;
  487. XtSetArg(args[n], XmNmwmFunctions, DIALOG_MWM_FUNC); n++;
  488. XtSetValues (XtParent(style.screenDialog), args, n);
  489. /* Create the main form */
  490. n = 0;
  491. XtSetArg(args[n], XmNallowOverlap, False); n++;
  492. XtSetArg(args[n], XmNchildType, XmWORK_AREA); n++;
  493. form=XmCreateForm(style.screenDialog, "Form", args, n);
  494. /* Create the visual */
  495. n = 0;
  496. XtSetArg(args[n], XmNfillMode, XmFILL_SELF); n++;
  497. XtSetArg(args[n], XmNbehavior, XmICON_LABEL); n++;
  498. XtSetArg(args[n], XmNpixmapForeground, style.secBSCol); n++;
  499. XtSetArg(args[n], XmNpixmapBackground, style.secTSCol); n++;
  500. XtSetArg(args[n], XmNstring, NULL); n++;
  501. XtSetArg(args[n], XmNshadowThickness, 0); n++;
  502. XtSetArg(args[n], XmNimageName, SCREEN_ICON); n++;
  503. XtSetArg(args[n], XmNtraversalOn, False); n++;
  504. widget_list1[list1_count++] =
  505. screen.pictLabel= _DtCreateIcon(form, "screenLabelPixmap", args, n);
  506. /* Create the default button */
  507. n = 0;
  508. XtSetArg(args[n], XmNmarginHeight, LB_MARGIN_HEIGHT); n++;
  509. XtSetArg(args[n], XmNmarginWidth, LB_MARGIN_WIDTH); n++;
  510. string = CMPSTR(((char *)GETMESSAGE(12, 3, "Default")));
  511. XtSetArg(args[n], XmNlabelString, string); n++;
  512. XtSetArg(args[n], XmNnavigationType, XmTAB_GROUP); n++;
  513. widget_list1[list1_count++] =
  514. screen.systemDefault= XmCreatePushButtonGadget(form, "systemDefault", args, n);
  515. XmStringFree(string);
  516. /* Create the screen lock title box */
  517. n = 0;
  518. if (style.smState.smLockOnTimeoutStatus)
  519. string = CMPSTR(((char *)GETMESSAGE(12, 8, "Screen Lock")));
  520. else
  521. string = CMPSTR(((char *)GETMESSAGE(12, 18, "Front Panel Lock")));
  522. XtSetArg(args[n], XmNtitleString, string); n++;
  523. widget_list1[list1_count++] =
  524. screen.lockFrame= _DtCreateTitleBox(form, "lockFrame", args, n);
  525. XmStringFree(string);
  526. /* Create a form for the screen lock widgets */
  527. n = 0;
  528. XtSetArg(args[n], XmNallowOverlap, False); n++;
  529. XtSetArg(args[n], XmNchildType, XmWORK_AREA); n++;
  530. screen.lockForm= XmCreateForm(screen.lockFrame, "lockForm", args, n);
  531. /* Create the screen saver title box */
  532. n = 0;
  533. if (style.smState.smLockOnTimeoutStatus)
  534. string = CMPSTR(((char *)GETMESSAGE(12, 4, "Screen Saver")));
  535. else
  536. string = CMPSTR(((char *)GETMESSAGE(12, 15, "Auto Screen Blanking")));
  537. XtSetArg(args[n], XmNtitleString, string); n++;
  538. widget_list1[list1_count++] =
  539. screen.saverFrame= _DtCreateTitleBox(form, "saverFrame", args, n);
  540. XmStringFree(string);
  541. /* Create a form for the screen saver widgets */
  542. n = 0;
  543. XtSetArg(args[n], XmNallowOverlap, False); n++;
  544. XtSetArg(args[n], XmNchildType, XmWORK_AREA); n++;
  545. screen.saverForm= XmCreateForm(screen.saverFrame, "saverForm", args, n);
  546. /* Create the cycle time labels and slider */
  547. n = 0;
  548. if (style.smState.smLockOnTimeoutStatus)
  549. string = CMPSTR(((char *)GETMESSAGE(12, 6, "Time Per Saver")));
  550. else
  551. string = CMPSTR(((char *)GETMESSAGE(12, 20, "Time Per Background")));
  552. XtSetArg(args[n], XmNlabelString, string); n++;
  553. /* only if saver extensions are present */
  554. if (style.smState.smLockOnTimeoutStatus)
  555. screen.cycleTimeLabel = XmCreateLabelGadget(screen.saverForm,"cycleTimeLabel", args, n);
  556. else
  557. screen.cycleTimeLabel = XmCreateLabelGadget(screen.lockForm,"cycleTimeLabel", args, n);
  558. XmStringFree(string);
  559. n = 0;
  560. XtSetArg(args[n], XmNminimum, CYCLETIME_MIN); n++;
  561. XtSetArg(args[n], XmNmaximum, TIMEOUT_MAX); n++;
  562. XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++;
  563. XtSetArg(args[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++;
  564. XtSetArg(args[n], XmNshowValue, True); n++;
  565. XtSetArg(args[n], XmNhighlightThickness, SCALE_HIGHLIGHT_THICKNESS); n++;
  566. if (style.smState.smLockOnTimeoutStatus)
  567. screen.cycleTimeScale= XmCreateScale(screen.saverForm,"cycleTimeScale", args, n);
  568. else
  569. screen.cycleTimeScale= XmCreateScale(screen.lockForm,"cycleTimeScale", args, n);
  570. n = 0;
  571. string = CMPSTR(((char *)GETMESSAGE(12, 7, "minutes")));
  572. XtSetArg(args[n], XmNlabelString, string); n++;
  573. if (style.smState.smLockOnTimeoutStatus)
  574. screen.cycleMinutesLabel= XmCreateLabelGadget(screen.saverForm,"cycleMinutes", args, n);
  575. else
  576. screen.cycleMinutesLabel= XmCreateLabelGadget(screen.lockForm,"cycleMinutes", args, n);
  577. XmStringFree(string);
  578. /* Create the screen saver on/off radio buttons and label */
  579. n = 0;
  580. if (style.smState.smLockOnTimeoutStatus)
  581. string = CMPSTR(((char *)GETMESSAGE(12, 12, "Screen Saver:")));
  582. else
  583. string = CMPSTR(((char *)GETMESSAGE(12, 16, "Screen Blanker:")));
  584. XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  585. XtSetArg(args[n], XmNlabelString, string); n++;
  586. screen.saverLabel= XmCreateLabelGadget(screen.saverForm, "saverLabel", args, n);
  587. XmStringFree(string);
  588. n = 0;
  589. XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++;
  590. screen.saverRadioBox= XmCreateRadioBox(screen.saverForm, "saverRadioBox", args, n);
  591. n = 0;
  592. string = CMPSTR(((char *)GETMESSAGE(12, 10, "On")));
  593. XtSetArg(args[n], XmNlabelString, string); n++;
  594. screen.saverOn= XmCreateToggleButtonGadget(screen.saverRadioBox, "saverOn", args, n);
  595. XmStringFree(string);
  596. n = 0;
  597. string = CMPSTR(((char *)GETMESSAGE(12, 11, "Off")));
  598. XtSetArg(args[n], XmNlabelString, string); n++;
  599. screen.saverOff= XmCreateToggleButtonGadget(screen.saverRadioBox, "saverOff", args, n);
  600. XmStringFree(string);
  601. /* Create the screen saver list */
  602. n = 0;
  603. XtSetArg (args[n], XmNautomaticSelection, True); n++;
  604. XtSetArg (args[n], XmNselectionPolicy, XmMULTIPLE_SELECT); n++;
  605. XtSetArg (args[n], XmNlistSizePolicy, XmRESIZE_IF_POSSIBLE); n++;
  606. if (low_res) {
  607. XtSetArg (args[n], XmNheight, 100); n++; }
  608. else {
  609. XtSetArg (args[n], XmNheight, SAVER_HEIGHT); n++; }
  610. XtSetArg (args[n], XmNhighlightColor, 0); n++;
  611. /* choose the parent of saverList depending on the presence of saver extensions */
  612. if (style.smState.smLockOnTimeoutStatus)
  613. screen.saverList = XmCreateScrolledList (screen.saverForm, "saversList", args, n);
  614. else
  615. screen.saverList = XmCreateScrolledList (screen.lockForm, "saversList", args, n);
  616. /* use the environment variable DTSCREENSAVERLIST to get the list of */
  617. /* available screen saver actions, load them into the scrolled list*/
  618. savers.saversList = getenv ("DTSCREENSAVERLIST");
  619. /* if DTSCREENSAVER is not set, set saver count to zero */
  620. if (savers.saversList == NULL) {
  621. savers.saverCount = 0;
  622. savers.selsaverCount=0;
  623. } else {
  624. savers.saverActionNames = build_saverList(savers.saversList, &savers.saverCount);
  625. savers.saverActionDesc = build_saverDesc(savers.saverActionNames, savers.saverCount);
  626. /* convert to XmString */
  627. listStrings = MakeListStrings(savers.saverActionDesc);
  628. XmListAddItems (screen.saverList, listStrings, savers.saverCount, 0);
  629. XtAddCallback (screen.saverList, XmNmultipleSelectionCallback,
  630. ListCB, (XtPointer)NULL);
  631. FreeListStrings (listStrings, savers.saverCount);
  632. /* check the state to see which item(s) should be selected, if none are */
  633. /* selected or if none in the selected list match the available list then */
  634. /* set the selection to the last position by default. This should be blank */
  635. /* if the DTSCREENSAVERLIST environment variable is set to default */
  636. savers.selsaverActionNames =
  637. build_selsaverList(style.smSaver.saverList, &savers.selsaverCount);
  638. /* since savers.selsaverCount may be changed below, we save */
  639. /* number of originally selected savers in order to accurately free the */
  640. /* savers.selsaverActionNames array below. */
  641. old_selsaverCount = savers.selsaverCount;
  642. if (savers.selsaverCount) {
  643. savers.selPositions = (int *) XtMalloc(sizeof(int) * savers.selsaverCount);
  644. for (n=0; n<savers.selsaverCount; n++) {
  645. /* determine if this selected saver matches one in valid saver list */
  646. for (m=0; (m < savers.saverCount) &&
  647. ((sel_found = strcmp(savers.selsaverActionNames[n],
  648. savers.saverActionNames[m])) != 0); m++) {}
  649. if (sel_found == 0) {
  650. XmListSelectPos (screen.saverList, m+1, False);
  651. savers.selPositions[n]=m+1;
  652. sel_matched = True;
  653. } else {
  654. /* This selected saver isn't valid, need to get rid of it.
  655. Do this by shifting each selected saver in the array
  656. back one position, i.e. n = n+1, n+1 = n+2, ....
  657. This overwrites the nth element and leaves the empty
  658. space at the end of the array. */
  659. for (i=n; i < (savers.selsaverCount - 1); i++)
  660. savers.selsaverActionNames[i] = savers.selsaverActionNames[i+1];
  661. /* reduce # of selected savers */
  662. savers.selsaverCount--;
  663. /* reset selected saver array position counter back one position for
  664. next loop test */
  665. n--;
  666. } /* if (sel_found == 0) */
  667. } /* for n<savers.selsaverCount */
  668. } /* if (savers.selsaverCount) */
  669. /* if there are still savers selected that match valid saver names */
  670. if (savers.selsaverCount) {
  671. /* set current saver to first selection */
  672. savers.current_saver = savers.saverActionNames[savers.selPositions[0] - 1];
  673. savers.current_saverDesc = savers.saverActionDesc[savers.selPositions[0] - 1];
  674. savers.current_position = savers.selPositions[0];
  675. } else {
  676. /* highlight last saver */
  677. XmListSelectPos (screen.saverList, savers.saverCount, False);
  678. /* set current saver to last one */
  679. savers.current_saver = savers.saverActionNames[savers.saverCount - 1];
  680. savers.current_saverDesc = savers.saverActionDesc[savers.saverCount - 1];
  681. savers.selPositions = (int *) XtMalloc(sizeof(int));
  682. savers.selPositions[0] = savers.saverCount;
  683. savers.selsaverCount = 1;
  684. savers.current_position = 1;
  685. }
  686. /* save the selected positions for later use */
  687. savers.origSelPositions = (int *) XtMalloc(sizeof(int) * savers.selsaverCount);
  688. for (i=0; i<savers.selsaverCount; i++)
  689. savers.origSelPositions[i] = savers.selPositions[i];
  690. savers.orig_selsaverCount = savers.selsaverCount;
  691. savers.previous_selsaverCount = savers.selsaverCount;
  692. free_saverList(savers.selsaverActionNames, old_selsaverCount);
  693. }
  694. /* Create frame for the saver area */
  695. n = 0;
  696. XtSetArg (args[n], XmNshadowType, XmSHADOW_IN); n++;
  697. XtSetArg (args[n], XmNshadowThickness, savers.shadow); n++;
  698. XtSetArg (args[n], XmNhighlightThickness, 0); n++;
  699. XtSetArg (args[n], XmNtraversalOn, False); n++;
  700. /* depending on the presence of saver extensions choose the parent of saverAreaFrame */
  701. if (style.smState.smLockOnTimeoutStatus)
  702. screen.saverAreaFrame = XmCreateFrame(screen.saverForm, "saverAreaFrame", args, n);
  703. else
  704. screen.saverAreaFrame = XmCreateFrame(screen.lockForm, "saverAreaFrame", args, n);
  705. /* Create saver area for the screen savers */
  706. n = 0;
  707. XtSetArg (args[n], XmNtraversalOn, False); n++;
  708. if (low_res) {
  709. XtSetArg (args[n], XmNwidth, 180); n++; }
  710. else {
  711. XtSetArg (args[n], XmNwidth, SAVER_WIDTH); n++; }
  712. screen.saverArea = XmCreateDrawingArea (screen.saverAreaFrame, "saverArea", args, n);
  713. /* get the initial secondary color pixel value for dtstyle for later use */
  714. XtVaGetValues(screen.saverArea, XmNbackground, &scratch, NULL);
  715. savers.bg = (Pixel)scratch;
  716. /* label for the previewed saver */
  717. n = 0;
  718. if (savers.saverCount)
  719. string = XmStringCreateLocalized (savers.current_saverDesc);
  720. else
  721. string = XmStringCreateLocalized (" ");
  722. XtSetArg(args[n], XmNlabelString, string); n++;
  723. if (style.smState.smLockOnTimeoutStatus)
  724. screen.prevLabel = XmCreateLabelGadget(screen.saverForm,"prevLabel", args, n);
  725. else
  726. screen.prevLabel = XmCreateLabelGadget(screen.lockForm,"prevLabel", args, n);
  727. XmStringFree(string);
  728. /* Create the screen saver labels and slider */
  729. n = 0;
  730. if (style.smState.smLockOnTimeoutStatus)
  731. string = CMPSTR(((char *)GETMESSAGE(12, 5, "Start Saver")));
  732. else
  733. string = CMPSTR(((char *)GETMESSAGE(12, 17, "Start Blanker")));
  734. XtSetArg(args[n], XmNlabelString, string); n++;
  735. XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  736. screen.timeOutLabel= XmCreateLabelGadget(screen.saverForm,"timeOutLabel", args, n);
  737. XmStringFree(string);
  738. n = 0;
  739. XtSetArg(args[n], XmNminimum, TIMEOUT_MIN); n++;
  740. XtSetArg(args[n], XmNmaximum, TIMEOUT_MAX); n++;
  741. XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++;
  742. XtSetArg(args[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++;
  743. XtSetArg(args[n], XmNshowValue, True); n++;
  744. XtSetArg(args[n], XmNhighlightThickness, SCALE_HIGHLIGHT_THICKNESS); n++;
  745. screen.timeOutScale= XmCreateScale(screen.saverForm,"timeOutScale", args, n);
  746. n = 0;
  747. string = CMPSTR(((char *)GETMESSAGE(12, 7, "minutes")));
  748. XtSetArg(args[n], XmNlabelString, string); n++;
  749. screen.saverMinutesLabel= XmCreateLabelGadget(screen.saverForm,"saverMinutes", args, n);
  750. XmStringFree(string);
  751. /* Create the screen lock on/off radio buttons and label */
  752. /* mapped only when saver extensions are present */
  753. n = 0;
  754. string = CMPSTR(((char *)GETMESSAGE(12, 13, "Screen Lock:")));
  755. XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  756. XtSetArg(args[n], XmNlabelString, string); n++;
  757. screen.lockLabel= XmCreateLabelGadget(screen.lockForm, "lockLabel", args, n);
  758. XmStringFree(string);
  759. n = 0;
  760. XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++;
  761. screen.lockRadioBox= XmCreateRadioBox(screen.lockForm, "lockRadioBox", args, n);
  762. n = 0;
  763. string = CMPSTR(((char *)GETMESSAGE(12, 10, "On")));
  764. XtSetArg(args[n], XmNlabelString, string); n++;
  765. XtSetArg(args[n], XmNset, style.smState.smCoverScreen ? True : False); n++;
  766. screen.lockOn= XmCreateToggleButtonGadget(screen.lockRadioBox, "lockOn", args, n);
  767. XmStringFree(string);
  768. n = 0;
  769. string = CMPSTR(((char *)GETMESSAGE(12, 11, "Off")));
  770. XtSetArg(args[n], XmNlabelString, string); n++;
  771. XtSetArg(args[n], XmNset, style.smState.smCoverScreen ? False : True); n++;
  772. screen.lockOff= XmCreateToggleButtonGadget(screen.lockRadioBox, "lockOff", args, n);
  773. XmStringFree(string);
  774. /* Create the screen lock labels and slider */
  775. /* mapped only when saver extensions are present */
  776. n = 0;
  777. string = CMPSTR(((char *)GETMESSAGE(12, 14, "Start Lock")));
  778. XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  779. XtSetArg(args[n], XmNlabelString, string); n++;
  780. screen.lockOutLabel= XmCreateLabelGadget(screen.lockForm,"lockOutLabel", args, n);
  781. XmStringFree(string);
  782. n = 0;
  783. XtSetArg(args[n], XmNminimum, TIMEOUT_MIN); n++;
  784. XtSetArg(args[n], XmNmaximum, TIMEOUT_MAX); n++;
  785. XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++;
  786. XtSetArg(args[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++;
  787. XtSetArg(args[n], XmNshowValue, True); n++;
  788. XtSetArg(args[n], XmNhighlightThickness, SCALE_HIGHLIGHT_THICKNESS); n++;
  789. screen.lockOutScale= XmCreateScale(screen.lockForm,"lockOutScale", args, n);
  790. n = 0;
  791. string = CMPSTR(((char *)GETMESSAGE(12, 7, "minutes")));
  792. XtSetArg(args[n], XmNlabelString, string); n++;
  793. screen.lockMinutesLabel= XmCreateLabelGadget(screen.lockForm,"lockMinutes", args, n);
  794. XmStringFree(string);
  795. /* Create the radio buttons for lock savers */
  796. /* mapped only when saver extensions are not present */
  797. n = 0;
  798. XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++;
  799. XtSetArg(args[n], XmNspacing, 25); n++;
  800. screen.lockingRadioBox= XmCreateRadioBox(screen.lockForm, "lockingRadioBox", args, n);
  801. n = 0;
  802. string = CMPSTR(((char *)GETMESSAGE(12, 21, "Use Backgrounds For Lock")));
  803. XtSetArg(args[n], XmNlabelString, string); n++;
  804. screen.useSaversOn= XmCreateToggleButtonGadget(screen.lockingRadioBox, "useSaversOn", args, n);
  805. XmStringFree(string);
  806. n = 0;
  807. string = CMPSTR(((char *)GETMESSAGE(12, 22, "Transparent Lock")));
  808. XtSetArg(args[n], XmNlabelString, string); n++;
  809. screen.useSaversOff= XmCreateToggleButtonGadget(screen.lockingRadioBox, "useSaversOff", args, n);
  810. XmStringFree(string);
  811. /* add callbacks */
  812. /* Configure dialog based on the presence of screen saver extensions */
  813. if (!style.smState.smLockOnTimeoutStatus)
  814. {
  815. XtAddCallback(style.screenDialog, XmNmapCallback, no_svr_ext_formLayoutCB, NULL);
  816. XtAddCallback(style.screenDialog, XmNmapCallback, no_svr_ext_DtmapCB_screenDialog, shell);
  817. XtAddCallback(screen.systemDefault, XmNactivateCallback, no_svr_ext_systemDefaultCB, NULL);
  818. XtAddCallback(screen.timeOutScale, XmNvalueChangedCallback,
  819. no_svr_ext_timeOutvalueChangedCB, NULL);
  820. XtAddCallback(screen.saverOn, XmNvalueChangedCallback,
  821. no_svr_ext_saverToggleCB, NULL);
  822. XtAddCallback(screen.saverOff, XmNvalueChangedCallback,
  823. no_svr_ext_saverToggleCB, NULL);
  824. XtAddCallback(screen.useSaversOn, XmNvalueChangedCallback,
  825. saversToggleCB, NULL);
  826. XtAddCallback(screen.useSaversOff, XmNvalueChangedCallback,
  827. saversToggleCB, NULL);
  828. XtAddCallback(style.screenDialog, XmNcallback, no_svr_ext_ButtonCB, NULL);
  829. }
  830. else
  831. {
  832. XtAddCallback(style.screenDialog, XmNmapCallback, formLayoutCB, NULL);
  833. XtAddCallback(style.screenDialog, XmNmapCallback, _DtmapCB_screenDialog, shell);
  834. XtAddCallback(screen.systemDefault, XmNactivateCallback, systemDefaultCB, NULL);
  835. XtAddCallback(screen.timeOutScale, XmNvalueChangedCallback,
  836. timeOutvalueChangedCB, NULL);
  837. XtAddCallback(screen.lockOutScale, XmNvalueChangedCallback,
  838. timeOutvalueChangedCB, NULL);
  839. XtAddCallback(screen.saverOn, XmNvalueChangedCallback,
  840. saverToggleCB, NULL);
  841. XtAddCallback(screen.saverOff, XmNvalueChangedCallback,
  842. saverToggleCB, NULL);
  843. XtAddCallback(screen.lockOn, XmNvalueChangedCallback,
  844. lockToggleCB, NULL);
  845. XtAddCallback(screen.lockOff, XmNvalueChangedCallback,
  846. lockToggleCB, NULL);
  847. XtAddCallback(style.screenDialog, XmNcallback, ButtonCB, NULL);
  848. }
  849. XtAddCallback(style.screenDialog, XmNunmapCallback, UnmapCB, shell);
  850. XtAddCallback(style.screenDialog, XmNhelpCallback,
  851. (XtCallbackProc)HelpRequestCB, (XtPointer)HELP_SCREEN_DIALOG);
  852. /* calculate the max label width for labels */
  853. if ((LabelWidth = XtWidth(screen.saverLabel)) > MaxLabelWidth)
  854. MaxLabelWidth = LabelWidth;
  855. if ((LabelWidth = XtWidth(screen.timeOutLabel)) > MaxLabelWidth)
  856. MaxLabelWidth = LabelWidth;
  857. if ((LabelWidth = XtWidth(screen.cycleTimeLabel)) > MaxLabelWidth)
  858. MaxLabelWidth = LabelWidth;
  859. if (style.smState.smLockOnTimeoutStatus)
  860. {
  861. if ((LabelWidth = XtWidth(screen.lockLabel)) > MaxLabelWidth)
  862. MaxLabelWidth = LabelWidth;
  863. if ((LabelWidth = XtWidth(screen.lockOutLabel)) > MaxLabelWidth)
  864. MaxLabelWidth = LabelWidth;
  865. }
  866. XtVaSetValues(screen.saverLabel, XmNwidth, MaxLabelWidth, NULL);
  867. XtVaSetValues(screen.timeOutLabel, XmNwidth, MaxLabelWidth, NULL);
  868. XtVaSetValues(screen.cycleTimeLabel, XmNwidth, MaxLabelWidth, NULL);
  869. if (style.smState.smLockOnTimeoutStatus)
  870. {
  871. XtVaSetValues(screen.lockLabel, XmNwidth, MaxLabelWidth, NULL);
  872. XtVaSetValues(screen.lockOutLabel, XmNwidth, MaxLabelWidth, NULL);
  873. }
  874. /* manage widgets */
  875. XtManageChildren(widget_list1,list1_count);
  876. XtManageChild(form);
  877. XtManageChild(screen.saverForm);
  878. XtManageChild(screen.cycleTimeLabel);
  879. XtManageChild(screen.cycleTimeScale);
  880. XtManageChild(screen.saverLabel);
  881. XtManageChild(screen.prevLabel);
  882. XtManageChild(screen.saverRadioBox);
  883. XtManageChild(screen.saverOn);
  884. XtManageChild(screen.saverOff);
  885. XtManageChild(screen.timeOutLabel);
  886. XtManageChild(screen.timeOutScale);
  887. XtManageChild(screen.saverMinutesLabel);
  888. XtManageChild(screen.saverList);
  889. XtManageChild(screen.saverAreaFrame);
  890. XtManageChild(screen.saverArea);
  891. XtManageChild(screen.cycleMinutesLabel);
  892. XtManageChild(screen.saverList);
  893. XtManageChild(screen.lockForm);
  894. /* manage the lock label, scale and minutes label only if */
  895. /* saver extensions are present */
  896. if (style.smState.smLockOnTimeoutStatus)
  897. {
  898. XtManageChild(screen.lockLabel);
  899. XtManageChild(screen.lockRadioBox);
  900. XtManageChild(screen.lockOn);
  901. XtManageChild(screen.lockOff);
  902. XtManageChild(screen.lockOutLabel);
  903. XtManageChild(screen.lockOutScale);
  904. XtManageChild(screen.lockMinutesLabel);
  905. }
  906. else
  907. {
  908. XtManageChild(screen.lockingRadioBox);
  909. XtManageChild(screen.useSaversOn);
  910. XtManageChild(screen.useSaversOff);
  911. }
  912. XtAddEventHandler(style.shell, StructureNotifyMask, False, IconHandler, NULL);
  913. return(style.screenDialog);
  914. }
  915. /*+++++++++++++++++++++++++++++++++++++++*/
  916. /* formLayoutCB */
  917. /*+++++++++++++++++++++++++++++++++++++++*/
  918. static void
  919. formLayoutCB(
  920. Widget w,
  921. XtPointer client_data,
  922. XtPointer call_data )
  923. {
  924. int n;
  925. Arg args[MAX_ARGS];
  926. Dimension ScaleHeight;
  927. Dimension LabelHeight;
  928. Dimension RadioHeight;
  929. Dimension RadioOffset, ScaleOffset;
  930. /* calculate width and height information */
  931. ScaleHeight = XtHeight(screen.timeOutScale);
  932. LabelHeight = XtHeight(screen.timeOutLabel);
  933. RadioHeight = XtHeight(screen.saverRadioBox);
  934. RadioOffset = ((Dimension) (RadioHeight - LabelHeight) / 2) - 2;
  935. ScaleOffset = 0;
  936. /* do form attachments */
  937. /* Picture Label */
  938. n=0;
  939. XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  940. XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
  941. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
  942. XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  943. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  944. XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++;
  945. XtSetValues (screen.pictLabel, args, n);
  946. /* system Default */
  947. n=0;
  948. XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  949. XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
  950. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
  951. XtSetArg(args[n], XmNleftAttachment, XmATTACH_NONE); n++;
  952. XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  953. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  954. XtSetValues (screen.systemDefault, args, n);
  955. /* lock titlebox */
  956. n=0;
  957. XtSetArg(args[n], XmNtopAttachment, XmATTACH_NONE); n++;
  958. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  959. XtSetArg(args[n], XmNbottomOffset, style.verticalSpacing); n++;
  960. XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  961. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  962. XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  963. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  964. XtSetValues (screen.lockFrame, args, n);
  965. /* lock label */
  966. n=0;
  967. XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  968. XtSetArg (args[n], XmNtopOffset, style.verticalSpacing); n++;
  969. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
  970. XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  971. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  972. XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++;
  973. XtSetValues (screen.lockLabel, args, n);
  974. /* lock Radiobox */
  975. n=0;
  976. XtSetArg(args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
  977. XtSetArg(args[n], XmNtopWidget, screen.lockLabel); n++;
  978. XtSetArg(args[n], XmNtopOffset, -RadioOffset); n++;
  979. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
  980. XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
  981. XtSetArg(args[n], XmNleftWidget, screen.lockLabel); n++;
  982. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  983. XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++;
  984. XtSetValues (screen.lockRadioBox, args, n);
  985. /* lockOut Label */
  986. n=0;
  987. XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  988. XtSetArg(args[n], XmNtopWidget, screen.lockLabel); n++;
  989. XtSetArg(args[n], XmNtopOffset, style.verticalSpacing + ScaleHeight - LabelHeight); n++;
  990. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
  991. XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  992. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  993. XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++;
  994. XtSetValues (screen.lockOutLabel, args, n);
  995. /* lockOut Scale */
  996. n=0;
  997. XtSetArg(args[n], XmNtopAttachment, XmATTACH_NONE); n++;
  998. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
  999. XtSetArg(args[n], XmNbottomWidget, screen.lockOutLabel);n++;
  1000. XtSetArg(args[n], XmNbottomOffset, ScaleOffset); n++;
  1001. XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
  1002. XtSetArg(args[n], XmNleftWidget, screen.lockOutLabel);n++;
  1003. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1004. XtSetArg(args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
  1005. XtSetArg(args[n], XmNrightWidget, screen.lockMinutesLabel);n++;
  1006. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  1007. XtSetValues (screen.lockOutScale, args, n);
  1008. /* Minutes label */
  1009. n=0;
  1010. XtSetArg(args[n], XmNtopAttachment, XmATTACH_NONE); n++;
  1011. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
  1012. XtSetArg(args[n], XmNbottomWidget, screen.lockOutLabel);n++;
  1013. XtSetArg(args[n], XmNleftAttachment, XmATTACH_NONE); n++;
  1014. XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  1015. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  1016. XtSetValues (screen.lockMinutesLabel, args, n);
  1017. /* saver titlebox */
  1018. n=0;
  1019. XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  1020. XtSetArg(args[n], XmNtopWidget, screen.pictLabel); n++;
  1021. XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
  1022. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
  1023. XtSetArg(args[n], XmNbottomWidget, screen.lockFrame); n++;
  1024. XtSetArg(args[n], XmNbottomOffset, 2*style.verticalSpacing); n++;
  1025. XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  1026. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1027. XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  1028. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  1029. XtSetValues (screen.saverFrame, args, n);
  1030. /* cycleTime Label */
  1031. n=0;
  1032. XtSetArg(args[n], XmNtopAttachment, XmATTACH_NONE); n++;
  1033. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  1034. XtSetArg(args[n], XmNbottomOffset, style.verticalSpacing); n++;
  1035. XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  1036. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1037. XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++;
  1038. XtSetValues (screen.cycleTimeLabel, args, n);
  1039. /* cycleTime Scale */
  1040. n=0;
  1041. XtSetArg(args[n], XmNtopAttachment, XmATTACH_NONE); n++;
  1042. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
  1043. XtSetArg(args[n], XmNbottomWidget, screen.cycleTimeLabel);n++;
  1044. XtSetArg(args[n], XmNbottomOffset, ScaleOffset);n++;
  1045. XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
  1046. XtSetArg(args[n], XmNleftWidget, screen.cycleTimeLabel);n++;
  1047. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1048. XtSetArg(args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
  1049. XtSetArg(args[n], XmNrightWidget, screen.cycleMinutesLabel);n++;
  1050. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  1051. XtSetValues (screen.cycleTimeScale, args, n);
  1052. /* Minutes label */
  1053. n=0;
  1054. XtSetArg(args[n], XmNtopAttachment, XmATTACH_NONE); n++;
  1055. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
  1056. XtSetArg(args[n], XmNbottomWidget, screen.cycleTimeLabel);n++;
  1057. XtSetArg(args[n], XmNleftAttachment, XmATTACH_NONE); n++;
  1058. XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  1059. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  1060. XtSetValues (screen.cycleMinutesLabel, args, n);
  1061. /* TimeOut Label */
  1062. n=0;
  1063. XtSetArg(args[n], XmNtopAttachment, XmATTACH_NONE); n++;
  1064. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
  1065. XtSetArg(args[n], XmNbottomWidget, screen.cycleTimeLabel);n++;
  1066. XtSetArg(args[n], XmNbottomOffset, style.verticalSpacing + ScaleHeight - LabelHeight); n++;
  1067. XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  1068. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1069. XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++;
  1070. XtSetValues (screen.timeOutLabel, args, n);
  1071. /* Minutes label */
  1072. n=0;
  1073. XtSetArg(args[n], XmNtopAttachment, XmATTACH_NONE); n++;
  1074. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
  1075. XtSetArg(args[n], XmNbottomWidget, screen.timeOutLabel);n++;
  1076. XtSetArg(args[n], XmNleftAttachment, XmATTACH_NONE); n++;
  1077. XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  1078. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  1079. XtSetValues (screen.saverMinutesLabel, args, n);
  1080. /* TimeOut Scale */
  1081. n=0;
  1082. XtSetArg(args[n], XmNtopAttachment, XmATTACH_NONE); n++;
  1083. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
  1084. XtSetArg(args[n], XmNbottomWidget, screen.timeOutLabel);n++;
  1085. XtSetArg(args[n], XmNbottomOffset, ScaleOffset); n++;
  1086. XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
  1087. XtSetArg(args[n], XmNleftWidget, screen.timeOutLabel);n++;
  1088. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1089. XtSetArg(args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
  1090. XtSetArg(args[n], XmNrightWidget, screen.saverMinutesLabel);n++;
  1091. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  1092. XtSetValues (screen.timeOutScale, args, n);
  1093. /* saver label */
  1094. n=0;
  1095. XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  1096. XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
  1097. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
  1098. XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  1099. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1100. XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++;
  1101. XtSetValues (screen.saverLabel, args, n);
  1102. /* saver Radiobox */
  1103. n=0;
  1104. XtSetArg(args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
  1105. XtSetArg(args[n], XmNtopWidget, screen.saverLabel); n++;
  1106. XtSetArg(args[n], XmNtopOffset, -RadioOffset); n++;
  1107. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
  1108. XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
  1109. XtSetArg(args[n], XmNleftWidget, screen.saverLabel); n++;
  1110. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1111. XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++;
  1112. XtSetValues (screen.saverRadioBox, args, n);
  1113. /* preview label */
  1114. n=0;
  1115. XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  1116. XtSetArg(args[n], XmNtopWidget, screen.saverLabel); n++;
  1117. XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
  1118. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
  1119. XtSetArg(args[n], XmNleftAttachment, XmATTACH_NONE); n++;
  1120. XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  1121. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  1122. XtSetValues (screen.prevLabel, args, n);
  1123. /* scrolled list */
  1124. n = 0;
  1125. XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  1126. XtSetArg (args[n], XmNtopWidget, screen.prevLabel); n++;
  1127. XtSetArg (args[n], XmNtopOffset, style.verticalSpacing/2); n++;
  1128. XtSetArg (args[n], XmNrightAttachment, XmATTACH_NONE); n++;
  1129. XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  1130. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1131. XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
  1132. XtSetArg(args[n], XmNbottomWidget, screen.timeOutLabel); n++;
  1133. XtSetArg(args[n], XmNbottomOffset, 5*style.verticalSpacing); n++;
  1134. XtSetValues (XtParent(screen.saverList), args, n);
  1135. /* saverArea */
  1136. n=0;
  1137. XtSetArg (args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
  1138. XtSetArg(args[n], XmNtopWidget, XtParent(screen.saverList)); n++;
  1139. XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
  1140. XtSetArg(args[n], XmNleftWidget, XtParent(screen.saverList)); n++;
  1141. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1142. XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  1143. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  1144. XtSetArg (args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
  1145. XtSetArg(args[n], XmNbottomWidget, XtParent(screen.saverList)); n++;
  1146. XtSetValues (screen.saverAreaFrame, args, n);
  1147. XtRemoveCallback(style.screenDialog, XmNmapCallback, formLayoutCB, NULL);
  1148. }
  1149. /*+++++++++++++++++++++++++++++++++++++++*/
  1150. /* no_svr_ext_formLayoutCB */
  1151. /*+++++++++++++++++++++++++++++++++++++++*/
  1152. static void
  1153. no_svr_ext_formLayoutCB(
  1154. Widget w,
  1155. XtPointer client_data,
  1156. XtPointer call_data )
  1157. {
  1158. int n;
  1159. Arg args[MAX_ARGS];
  1160. Dimension ScaleHeight;
  1161. Dimension LabelHeight;
  1162. Dimension RadioHeight;
  1163. Dimension RadioOffset, ScaleOffset;
  1164. /* calculate width and height information */
  1165. ScaleHeight = XtHeight(XtParent(screen.timeOutScale));
  1166. LabelHeight = XtHeight(screen.timeOutLabel);
  1167. RadioHeight = XtHeight(screen.saverRadioBox);
  1168. RadioOffset = ((Dimension) (RadioHeight - LabelHeight) / 2) - 2;
  1169. ScaleOffset = 0;
  1170. /* do form attachments */
  1171. /* Picture Label */
  1172. n=0;
  1173. XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  1174. XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
  1175. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
  1176. XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  1177. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1178. XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++;
  1179. XtSetValues (screen.pictLabel, args, n);
  1180. /* system Default */
  1181. n=0;
  1182. XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  1183. XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
  1184. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
  1185. XtSetArg(args[n], XmNleftAttachment, XmATTACH_NONE); n++;
  1186. XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  1187. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  1188. XtSetValues (screen.systemDefault, args, n);
  1189. /* saver titlebox */
  1190. n=0;
  1191. XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  1192. XtSetArg(args[n], XmNtopWidget, screen.pictLabel); n++;
  1193. XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
  1194. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
  1195. XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  1196. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1197. XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  1198. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  1199. XtSetValues (screen.saverFrame, args, n);
  1200. /* saver label */
  1201. n=0;
  1202. XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  1203. XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
  1204. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
  1205. XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  1206. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1207. XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++;
  1208. XtSetValues (screen.saverLabel, args, n);
  1209. /* saver Radiobox */
  1210. n=0;
  1211. XtSetArg(args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
  1212. XtSetArg(args[n], XmNtopWidget, screen.saverLabel); n++;
  1213. XtSetArg(args[n], XmNtopOffset, -RadioOffset); n++;
  1214. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
  1215. XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
  1216. XtSetArg(args[n], XmNleftWidget, screen.saverLabel); n++;
  1217. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1218. XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++;
  1219. XtSetValues (screen.saverRadioBox, args, n);
  1220. /* TimeOut Label */
  1221. n=0;
  1222. XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  1223. XtSetArg(args[n], XmNtopWidget, screen.saverLabel); n++;
  1224. XtSetArg(args[n], XmNtopOffset, style.verticalSpacing + ScaleHeight - LabelHeight); n++;
  1225. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
  1226. XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  1227. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1228. XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++;
  1229. XtSetValues (screen.timeOutLabel, args, n);
  1230. /* TimeOut Scale */
  1231. n=0;
  1232. XtSetArg(args[n], XmNtopAttachment, XmATTACH_NONE); n++;
  1233. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
  1234. XtSetArg(args[n], XmNbottomWidget, screen.timeOutLabel);n++;
  1235. XtSetArg(args[n], XmNbottomOffset, ScaleOffset); n++;
  1236. XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
  1237. XtSetArg(args[n], XmNleftWidget, screen.timeOutLabel);n++;
  1238. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1239. XtSetArg(args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
  1240. XtSetArg(args[n], XmNrightWidget, screen.saverMinutesLabel);n++;
  1241. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  1242. XtSetValues (screen.timeOutScale, args, n);
  1243. /* Minutes label */
  1244. n=0;
  1245. XtSetArg(args[n], XmNtopAttachment, XmATTACH_NONE); n++;
  1246. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
  1247. XtSetArg(args[n], XmNbottomWidget, screen.timeOutLabel);n++;
  1248. XtSetArg(args[n], XmNleftAttachment, XmATTACH_NONE); n++;
  1249. XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  1250. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  1251. XtSetValues (screen.saverMinutesLabel, args, n);
  1252. /* lock titlebox */
  1253. n=0;
  1254. XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  1255. XtSetArg(args[n], XmNtopWidget, screen.saverFrame); n++;
  1256. XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
  1257. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  1258. XtSetArg(args[n], XmNbottomOffset, style.verticalSpacing); n++;
  1259. XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  1260. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1261. XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  1262. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  1263. XtSetValues (screen.lockFrame, args, n);
  1264. /* locking radiobox */
  1265. n=0;
  1266. XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  1267. XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
  1268. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
  1269. XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  1270. XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++;
  1271. XtSetValues (screen.lockingRadioBox, args, n);
  1272. /* preview label */
  1273. n=0;
  1274. XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  1275. XtSetArg(args[n], XmNtopWidget, screen.lockingRadioBox); n++;
  1276. XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
  1277. XtSetArg(args[n], XmNleftAttachment, XmATTACH_NONE); n++;
  1278. XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  1279. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  1280. XtSetValues (screen.prevLabel, args, n);
  1281. /* cycleTime Label */
  1282. n=0;
  1283. XtSetArg(args[n], XmNtopAttachment, XmATTACH_NONE); n++;
  1284. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  1285. XtSetArg(args[n], XmNbottomOffset, style.verticalSpacing); n++;
  1286. XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  1287. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1288. XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++;
  1289. XtSetValues (screen.cycleTimeLabel, args, n);
  1290. /* cycleTime Scale */
  1291. n=0;
  1292. XtSetArg(args[n], XmNtopAttachment, XmATTACH_NONE); n++;
  1293. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
  1294. XtSetArg(args[n], XmNbottomWidget, screen.cycleTimeLabel);n++;
  1295. XtSetArg(args[n], XmNbottomOffset, ScaleOffset); n++;
  1296. XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
  1297. XtSetArg(args[n], XmNleftWidget, screen.cycleTimeLabel);n++;
  1298. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1299. XtSetArg(args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
  1300. XtSetArg(args[n], XmNrightWidget, screen.cycleMinutesLabel);n++;
  1301. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  1302. XtSetValues (screen.cycleTimeScale, args, n);
  1303. /* Minutes label */
  1304. n=0;
  1305. XtSetArg(args[n], XmNtopAttachment, XmATTACH_NONE); n++;
  1306. XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
  1307. XtSetArg(args[n], XmNbottomWidget, screen.cycleTimeLabel);n++;
  1308. XtSetArg(args[n], XmNleftAttachment, XmATTACH_NONE); n++;
  1309. XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  1310. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  1311. XtSetValues (screen.cycleMinutesLabel, args, n);
  1312. /* scrolled list */
  1313. n = 0;
  1314. XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  1315. XtSetArg (args[n], XmNtopWidget, screen.prevLabel); n++;
  1316. XtSetArg (args[n], XmNtopOffset, style.verticalSpacing); n++;
  1317. XtSetArg (args[n], XmNrightAttachment, XmATTACH_NONE); n++;
  1318. XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  1319. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1320. XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
  1321. XtSetArg(args[n], XmNbottomWidget, screen.cycleTimeLabel); n++;
  1322. XtSetArg(args[n], XmNbottomOffset, 5*style.verticalSpacing); n++;
  1323. XtSetValues (XtParent(screen.saverList), args, n);
  1324. /* saverArea */
  1325. n=0;
  1326. XtSetArg (args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
  1327. XtSetArg(args[n], XmNtopWidget, XtParent(screen.saverList)); n++;
  1328. XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
  1329. XtSetArg(args[n], XmNleftWidget, XtParent(screen.saverList)); n++;
  1330. XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
  1331. XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  1332. XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
  1333. XtSetArg (args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
  1334. XtSetArg(args[n], XmNbottomWidget, XtParent(screen.saverList)); n++;
  1335. XtSetValues (screen.saverAreaFrame, args, n);
  1336. XtRemoveCallback(style.screenDialog, XmNmapCallback, no_svr_ext_formLayoutCB, NULL);
  1337. }
  1338. /*+++++++++++++++++++++++++++++++++++++++*/
  1339. /* _DtmapCB_screenDialog */
  1340. /*+++++++++++++++++++++++++++++++++++++++*/
  1341. static void
  1342. _DtmapCB_screenDialog(
  1343. Widget w,
  1344. XtPointer client_data,
  1345. XtPointer call_data )
  1346. {
  1347. static int first_time = 1;
  1348. int n;
  1349. Arg args[MAX_ARGS];
  1350. XmString string;
  1351. Boolean lock_on, saver_on;
  1352. if (first_time)
  1353. {
  1354. DtWsmRemoveWorkspaceFunctions(style.display, XtWindow(XtParent(w)));
  1355. if (!save.restoreFlag)
  1356. putDialog ((Widget)client_data, w);
  1357. /* Retrieve the value for the saver slider from xrdb */
  1358. screen.saverTimeout_xrdb = atoi((char *)style.xrdb.timeoutScale);
  1359. if (screen.saverTimeout_xrdb < 1)
  1360. screen.saverTimeout_xrdb = 10;
  1361. /* Retrieve the value for the lock slider from xrdb */
  1362. screen.lockTimeout_xrdb = atoi((char *)style.xrdb.lockoutScale);
  1363. if (screen.lockTimeout_xrdb < 1)
  1364. screen.lockTimeout_xrdb = 30;
  1365. /* initialize the value of savertimeout and locktimeout and cycle time to the */
  1366. /* initial state or to the values retrieved from xrdb if the corresponding*/
  1367. /* initial state is zero */
  1368. if (style.smState.smSaverTimeout)
  1369. screen.saverTimeout = style.smState.smSaverTimeout / 60;
  1370. else
  1371. screen.saverTimeout = screen.saverTimeout_xrdb;
  1372. if (style.smState.smLockTimeout)
  1373. screen.lockTimeout = style.smState.smLockTimeout / 60;
  1374. else
  1375. screen.lockTimeout = screen.lockTimeout_xrdb;
  1376. if (style.smState.smCycleTimeout)
  1377. screen.cycleTimeout = style.smState.smCycleTimeout / 60;
  1378. else
  1379. screen.cycleTimeout = 0;
  1380. /* set the value of the scales */
  1381. XtVaSetValues(screen.timeOutScale, XmNvalue, screen.saverTimeout, NULL);
  1382. XtVaSetValues(screen.lockOutScale, XmNvalue, screen.lockTimeout, NULL);
  1383. XtVaSetValues(screen.cycleTimeScale, XmNvalue, screen.cycleTimeout , NULL);
  1384. /* set the value of the saver toggles */
  1385. XmToggleButtonGadgetSetState(screen.saverOn,
  1386. style.smState.smSaverTimeout ? True : False, False);
  1387. XmToggleButtonGadgetSetState(screen.saverOff,
  1388. !style.smState.smSaverTimeout ? True : False, False );
  1389. XmToggleButtonGadgetSetState(screen.lockOn,
  1390. style.smState.smLockTimeout ? True : False, False);
  1391. XmToggleButtonGadgetSetState(screen.lockOff,
  1392. !style.smState.smLockTimeout ? True : False, False);
  1393. /* make saver widgets insensitive if screen saver is off */
  1394. /* also blank out the preview label widget */
  1395. if (XmToggleButtonGadgetGetState(screen.saverOff))
  1396. {
  1397. XtSetSensitive(screen.saverList, False);
  1398. XtSetSensitive(screen.saverArea, False);
  1399. XtSetSensitive(screen.timeOutLabel, False);
  1400. XtSetSensitive(screen.timeOutScale, False);
  1401. XtSetSensitive(screen.saverMinutesLabel, False);
  1402. XtSetSensitive(screen.cycleTimeLabel, False);
  1403. XtSetSensitive(screen.cycleTimeScale, False);
  1404. XtSetSensitive(screen.cycleMinutesLabel, False);
  1405. XtUnmanageChild(screen.prevLabel);
  1406. }
  1407. /* make saver widgets sensitive if screen saver is on */
  1408. /* also manage the preview label widget */
  1409. if (XmToggleButtonGadgetGetState(screen.saverOn))
  1410. {
  1411. XtSetSensitive(screen.saverList, True);
  1412. XtSetSensitive(screen.saverArea, True);
  1413. XtSetSensitive(screen.timeOutLabel, True);
  1414. XtSetSensitive(screen.timeOutScale, True);
  1415. XtSetSensitive(screen.saverMinutesLabel, True);
  1416. XtManageChild(screen.prevLabel);
  1417. /* make cycletime scale sensitive if selected savers are more than 1 */
  1418. if (savers.selsaverCount > 1)
  1419. {
  1420. XtSetSensitive(screen.cycleTimeLabel, True);
  1421. XtSetSensitive(screen.cycleTimeScale, True);
  1422. XtSetSensitive(screen.cycleMinutesLabel, True);
  1423. }
  1424. else
  1425. {
  1426. XtSetSensitive(screen.cycleTimeLabel, False);
  1427. XtSetSensitive(screen.cycleTimeScale, False);
  1428. XtSetSensitive(screen.cycleMinutesLabel, False);
  1429. }
  1430. }
  1431. /* make lock widgets insensitive if lock screen is off */
  1432. if (XmToggleButtonGadgetGetState(screen.lockOff))
  1433. {
  1434. XtSetSensitive(screen.lockOutLabel, False);
  1435. XtSetSensitive(screen.lockOutScale, False);
  1436. XtSetSensitive(screen.lockMinutesLabel, False);
  1437. }
  1438. /* make lock widgets sensitive if lock screen is on */
  1439. if (XmToggleButtonGadgetGetState(screen.lockOn))
  1440. {
  1441. XtSetSensitive(screen.lockOutLabel, True);
  1442. XtSetSensitive(screen.lockOutScale, True);
  1443. XtSetSensitive(screen.lockMinutesLabel, True);
  1444. }
  1445. if (!style.smState.smSaverTimeout)
  1446. screen.origTimeout = screen.newTimeout = style.smState.smLockTimeout;
  1447. else
  1448. if (!style.smState.smLockTimeout)
  1449. screen.origTimeout = screen.newTimeout = style.smState.smSaverTimeout;
  1450. else
  1451. screen.origTimeout =
  1452. screen.newTimeout =
  1453. MIN(style.smState.smSaverTimeout, style.smState.smLockTimeout);
  1454. first_time = 0;
  1455. }
  1456. /* check the saver values from X - need to do this everytime dialog is mapped because */
  1457. /* the user may have changed settings thru X while style manager has been running */
  1458. /* if the value of the timeout retrieved from X is not equal to the new timeout set in the */
  1459. /* style manager interface, then set both lock time and saver time scales to value retrieved from */
  1460. /* X, otherwise leave them alone */
  1461. XGetScreenSaver(style.display, &screen.xTimeout, &screen.interval,
  1462. &screen.blanking, &screen.exposures);
  1463. screen.new_blanking = DontPreferBlanking;
  1464. if (screen.xTimeout < 0)
  1465. screen.xTimeout = 0;
  1466. else
  1467. if ((screen.xTimeout < 60) && (screen.xTimeout > 1))
  1468. screen.xTimeout = 60;
  1469. else
  1470. if (screen.xTimeout > TIMEOUT_MAX * 60)
  1471. screen.xTimeout = TIMEOUT_MAX * 60;
  1472. if (screen.xTimeout < 0)
  1473. screen.xTimeout = 0;
  1474. else
  1475. if ((screen.xTimeout < 60) && (screen.xTimeout > 1))
  1476. screen.xTimeout = 60;
  1477. else
  1478. if (screen.xTimeout > TIMEOUT_MAX * 60)
  1479. screen.xTimeout = TIMEOUT_MAX * 60;
  1480. screen.timeMismatch = False;
  1481. if (screen.xTimeout != screen.newTimeout)
  1482. {
  1483. screen.timeMismatch = True;
  1484. screen.newTimeout = screen.xTimeout;
  1485. if (screen.xTimeout)
  1486. {
  1487. screen.saverTimeout = screen.xTimeout / 60;
  1488. screen.lockTimeout = screen.xTimeout / 60;
  1489. }
  1490. else
  1491. {
  1492. screen.saverTimeout = screen.saverTimeout_xrdb;
  1493. screen.lockTimeout = screen.lockTimeout_xrdb;
  1494. }
  1495. /* set the value of the saver widgets */
  1496. XmToggleButtonGadgetSetState(screen.saverOn, screen.xTimeout ? True : False, False);
  1497. XmToggleButtonGadgetSetState(screen.saverOff, !screen.xTimeout ? True : False, False);
  1498. XmToggleButtonGadgetSetState(screen.lockOn, screen.xTimeout ? True : False, False);
  1499. XmToggleButtonGadgetSetState(screen.lockOff, !screen.xTimeout ? True : False, False);
  1500. /* set the value of the scales */
  1501. XtVaSetValues(screen.timeOutScale, XmNvalue, screen.saverTimeout, NULL);
  1502. XtVaSetValues(screen.lockOutScale, XmNvalue, screen.lockTimeout_xrdb, NULL);
  1503. /* make saver widgets insensitive if screen saver is off */
  1504. /* also blankout the preview label widget */
  1505. if (XmToggleButtonGadgetGetState(screen.saverOff))
  1506. {
  1507. XtSetSensitive(screen.saverList, False);
  1508. XtSetSensitive(screen.saverArea, False);
  1509. XtSetSensitive(screen.timeOutLabel, False);
  1510. XtSetSensitive(screen.timeOutScale, False);
  1511. XtSetSensitive(screen.saverMinutesLabel, False);
  1512. XtSetSensitive(screen.cycleTimeLabel, False);
  1513. XtSetSensitive(screen.cycleTimeScale, False);
  1514. XtSetSensitive(screen.cycleMinutesLabel, False);
  1515. XtUnmanageChild(screen.prevLabel);
  1516. }
  1517. /* make saver widgets sensitive if screen saver is on */
  1518. /* also manage the preview label widget */
  1519. if (XmToggleButtonGadgetGetState(screen.saverOn))
  1520. {
  1521. XtSetSensitive(screen.saverList, True);
  1522. XtSetSensitive(screen.saverArea, True);
  1523. XtSetSensitive(screen.timeOutLabel, True);
  1524. XtSetSensitive(screen.timeOutScale, True);
  1525. XtSetSensitive(screen.saverMinutesLabel, True);
  1526. XtManageChild(screen.prevLabel);
  1527. /* make cycletime scale sensitive if selected savers are more than 1 */
  1528. if (savers.selsaverCount > 1)
  1529. {
  1530. XtSetSensitive(screen.cycleTimeLabel, True);
  1531. XtSetSensitive(screen.cycleTimeScale, True);
  1532. XtSetSensitive(screen.cycleMinutesLabel, True);
  1533. }
  1534. else
  1535. {
  1536. XtSetSensitive(screen.cycleTimeLabel, False);
  1537. XtSetSensitive(screen.cycleTimeScale, False);
  1538. XtSetSensitive(screen.cycleMinutesLabel, False);
  1539. }
  1540. }
  1541. /* make lock widgets insensitive if lock screen is off */
  1542. if (XmToggleButtonGadgetGetState(screen.lockOff))
  1543. {
  1544. XtSetSensitive(screen.lockOutLabel, False);
  1545. XtSetSensitive(screen.lockOutScale, False);
  1546. XtSetSensitive(screen.lockMinutesLabel, False);
  1547. }
  1548. /* make lock widgets sensitive if lock screen is on */
  1549. if (XmToggleButtonGadgetGetState(screen.lockOn))
  1550. {
  1551. XtSetSensitive(screen.lockOutLabel, True);
  1552. XtSetSensitive(screen.lockOutScale, True);
  1553. XtSetSensitive(screen.lockMinutesLabel, True);
  1554. }
  1555. }
  1556. /* run the current screen saver only if screen saver is turned on and a valid saver exists*/
  1557. if (XmToggleButtonGadgetGetState(screen.saverOn) && savers.saverCount && !savers.saverstate)
  1558. {
  1559. XtVaSetValues(screen.saverArea, XmNbackground, savers.black, NULL);
  1560. savers.saverstate = _DtSaverStart(style.display, &screen.saverArea, 1,
  1561. savers.current_saver, style.screenDialog);
  1562. string = XmStringCreateLocalized (savers.current_saverDesc);
  1563. XtVaSetValues(screen.prevLabel, XmNlabelString, string, NULL);
  1564. XmStringFree(string);
  1565. }
  1566. }
  1567. /*+++++++++++++++++++++++++++++++++++++++*/
  1568. /* no_svr_ext_DtmapCB_screenDialog */
  1569. /*+++++++++++++++++++++++++++++++++++++++*/
  1570. static void
  1571. no_svr_ext_DtmapCB_screenDialog(
  1572. Widget w,
  1573. XtPointer client_data,
  1574. XtPointer call_data )
  1575. {
  1576. static int first_time = 1;
  1577. int n;
  1578. Arg args[MAX_ARGS];
  1579. XmString string;
  1580. int mintime;
  1581. if (first_time)
  1582. {
  1583. DtWsmRemoveWorkspaceFunctions(style.display, XtWindow(XtParent(w)));
  1584. if (!save.restoreFlag)
  1585. putDialog ((Widget)client_data, w);
  1586. /* Retrieve the value for the saver slider from xrdb */
  1587. screen.saverTimeout_xrdb = atoi((char *)style.xrdb.timeoutScale);
  1588. if (screen.saverTimeout_xrdb < 1)
  1589. screen.saverTimeout_xrdb = 10;
  1590. if (style.smState.smCycleTimeout)
  1591. screen.cycleTimeout = style.smState.smCycleTimeout / 60;
  1592. else
  1593. screen.cycleTimeout = 0;
  1594. /* set the value of the cycle time scale */
  1595. XtVaSetValues(screen.cycleTimeScale, XmNvalue, screen.cycleTimeout , NULL);
  1596. /* set the initial condition for the locking RadioBoxes */
  1597. XmToggleButtonGadgetSetState(screen.useSaversOn,
  1598. style.smState.smSaverTimeout ? True : False, False);
  1599. XmToggleButtonGadgetSetState(screen.useSaversOff,
  1600. style.smState.smSaverTimeout ? False : True, False);
  1601. if (style.smState.smSaverTimeout)
  1602. {
  1603. XtSetSensitive(screen.saverList, True);
  1604. XtSetSensitive(screen.saverArea, True);
  1605. if (savers.selsaverCount > 1)
  1606. {
  1607. XtSetSensitive(screen.cycleTimeLabel, True);
  1608. XtSetSensitive(screen.cycleTimeScale, True);
  1609. XtSetSensitive(screen.cycleMinutesLabel, True);
  1610. }
  1611. else
  1612. {
  1613. XtSetSensitive(screen.cycleTimeLabel, False);
  1614. XtSetSensitive(screen.cycleTimeScale, False);
  1615. XtSetSensitive(screen.cycleMinutesLabel, False);
  1616. }
  1617. XtManageChild(screen.prevLabel);
  1618. SmNewSaverTime(60);
  1619. }
  1620. else
  1621. {
  1622. XtSetSensitive(screen.saverList, False);
  1623. XtSetSensitive(screen.saverArea, False);
  1624. XtSetSensitive(screen.cycleTimeLabel, False);
  1625. XtSetSensitive(screen.cycleTimeScale, False);
  1626. XtSetSensitive(screen.cycleMinutesLabel, False);
  1627. XtUnmanageChild(screen.prevLabel);
  1628. SmNewSaverTime(0);
  1629. }
  1630. screen.newTimeout = screen.origTimeout = 0;
  1631. first_time = 0;
  1632. }
  1633. /* check the saver values from X - need to do this everytime dialog is mapped because */
  1634. /* the user may have changed settings thru X while style manager has been running */
  1635. /* if the value of the timeout retrieved from X is not equal to the new timeout set in the */
  1636. /* style manager interface, then set both lock time and saver time scales to value retrieved from */
  1637. /* X, otherwise leave them alone */
  1638. XGetScreenSaver(style.display, &screen.xTimeout, &screen.interval,
  1639. &screen.blanking, &screen.exposures);
  1640. screen.new_blanking = PreferBlanking;
  1641. if (screen.xTimeout < 0)
  1642. screen.xTimeout = 0;
  1643. else
  1644. if ((screen.xTimeout < 60) && (screen.xTimeout > 1))
  1645. screen.xTimeout = 60;
  1646. else
  1647. if (screen.xTimeout > TIMEOUT_MAX * 60)
  1648. screen.xTimeout = TIMEOUT_MAX * 60;
  1649. if (screen.xTimeout != screen.newTimeout)
  1650. {
  1651. screen.origTimeout = screen.newTimeout = screen.xTimeout;
  1652. screen.saverTimeout = screen.xTimeout / 60;
  1653. }
  1654. /* set the value of the saver widgets */
  1655. XmToggleButtonGadgetSetState(screen.saverOn, screen.newTimeout ? True : False, False);
  1656. XmToggleButtonGadgetSetState(screen.saverOff, !screen.newTimeout ? True : False, False);
  1657. if (!screen.saverTimeout)
  1658. screen.saverTimeout = screen.saverTimeout_xrdb;
  1659. XtVaSetValues(screen.timeOutScale, XmNvalue, screen.saverTimeout, NULL);
  1660. /* make saver widgets insensitive if screen saver is off */
  1661. if (XmToggleButtonGadgetGetState(screen.saverOff))
  1662. {
  1663. XtSetSensitive(screen.timeOutLabel, False);
  1664. XtSetSensitive(screen.timeOutScale, False);
  1665. XtSetSensitive(screen.saverMinutesLabel, False);
  1666. }
  1667. /* make saver widgets sensitive if screen saver is on */
  1668. if (XmToggleButtonGadgetGetState(screen.saverOn))
  1669. {
  1670. XtSetSensitive(screen.timeOutLabel, True);
  1671. XtSetSensitive(screen.timeOutScale, True);
  1672. XtSetSensitive(screen.saverMinutesLabel, True);
  1673. }
  1674. /* run the current screen saver only if the useSaversOn toggle is enabled and valid saver exist*/
  1675. if (XmToggleButtonGadgetGetState(screen.useSaversOn) && savers.saverCount && !savers.saverstate)
  1676. {
  1677. XtVaSetValues(screen.saverArea, XmNbackground, savers.black, NULL);
  1678. savers.saverstate = _DtSaverStart(style.display, &screen.saverArea, 1,
  1679. savers.current_saver, style.screenDialog);
  1680. string = XmStringCreateLocalized (savers.current_saverDesc);
  1681. XtVaSetValues(screen.prevLabel, XmNlabelString, string, NULL);
  1682. XmStringFree(string);
  1683. }
  1684. }
  1685. /*****************************************/
  1686. /* timeOutvalueChangedCB */
  1687. /* set the timeout to be the minimum of */
  1688. /* the lock scale and timeout scale */
  1689. /*****************************************/
  1690. static void
  1691. timeOutvalueChangedCB(
  1692. Widget w,
  1693. XtPointer client_data,
  1694. XtPointer call_data )
  1695. {
  1696. int n;
  1697. Arg args[MAX_ARGS];
  1698. n=0;
  1699. XtSetArg(args[n], XmNvalue, &screen.saverTimeout); n++;
  1700. XtGetValues(screen.timeOutScale, args, n);
  1701. n=0;
  1702. XtSetArg(args[n], XmNvalue, &screen.lockTimeout); n++;
  1703. XtGetValues(screen.lockOutScale, args, n);
  1704. /* set newTimeout to the min value of lock scale and saver scale */
  1705. /* unless either screen saver or lock is off */
  1706. if (!XmToggleButtonGadgetGetState(screen.lockOn))
  1707. screen.newTimeout = screen.saverTimeout * 60;
  1708. else
  1709. if (!XmToggleButtonGadgetGetState(screen.saverOn))
  1710. screen.newTimeout = screen.lockTimeout * 60;
  1711. else
  1712. screen.newTimeout = MIN(screen.saverTimeout, screen.lockTimeout) * 60;
  1713. /* register new timeout with X */
  1714. XSetScreenSaver(style.display, screen.newTimeout,
  1715. screen.interval, screen.new_blanking, screen.exposures);
  1716. screen.systemDefaultFlag = False;
  1717. }
  1718. /*****************************************/
  1719. /* no_svr_ext_timeOutvalueChangedCB */
  1720. /* set the timeout to be the minimum of */
  1721. /* the lock scale and timeout scale */
  1722. /*****************************************/
  1723. static void
  1724. no_svr_ext_timeOutvalueChangedCB(
  1725. Widget w,
  1726. XtPointer client_data,
  1727. XtPointer call_data )
  1728. {
  1729. int n;
  1730. Arg args[MAX_ARGS];
  1731. n=0;
  1732. XtSetArg(args[n], XmNvalue, &screen.saverTimeout); n++;
  1733. XtGetValues(screen.timeOutScale, args, n);
  1734. /* set newTimeout to the value of saver scale */
  1735. screen.newTimeout = screen.saverTimeout * 60;
  1736. /* register new timeout with X */
  1737. XSetScreenSaver(style.display, screen.newTimeout,
  1738. screen.interval, screen.new_blanking, screen.exposures);
  1739. screen.systemDefaultFlag = False;
  1740. }
  1741. /*+++++++++++++++++++++++++++++++++++++++*/
  1742. /* saverToggleCB */
  1743. /*+++++++++++++++++++++++++++++++++++++++*/
  1744. static void
  1745. saverToggleCB(
  1746. Widget w,
  1747. XtPointer client_data,
  1748. XtPointer call_data )
  1749. {
  1750. int n;
  1751. Arg args[MAX_ARGS];
  1752. Boolean set;
  1753. XmString string;
  1754. XmToggleButtonCallbackStruct *cb = (XmToggleButtonCallbackStruct *)call_data;
  1755. set = (Boolean) cb->set;
  1756. if (w == screen.saverOff && !set )
  1757. {
  1758. return;
  1759. }
  1760. if (w == screen.saverOff && set)
  1761. {
  1762. /* Terminate the screen saver that is currently running */
  1763. if (savers.saverstate)
  1764. {
  1765. _DtSaverStop(style.display, savers.saverstate);
  1766. savers.saverstate = NULL;
  1767. XSync(style.display, False);
  1768. XClearWindow(style.display, XtWindow(screen.saverArea));
  1769. }
  1770. XtSetSensitive(screen.saverList, False);
  1771. XtSetSensitive(screen.saverArea, False);
  1772. XtSetSensitive(screen.timeOutLabel, False);
  1773. XtSetSensitive(screen.timeOutScale, False);
  1774. XtSetSensitive(screen.saverMinutesLabel, False);
  1775. XtSetSensitive(screen.cycleTimeLabel, False);
  1776. XtSetSensitive(screen.cycleTimeScale, False);
  1777. XtSetSensitive(screen.cycleMinutesLabel, False);
  1778. /* do not display preview string */
  1779. XtUnmanageChild(screen.prevLabel);
  1780. /* set the background color of the saver window to the */
  1781. /* secondary color ID */
  1782. XSync(style.display, False);
  1783. XtVaSetValues(screen.saverArea, XmNbackground, savers.bg, NULL);
  1784. XClearWindow(style.display, XtWindow(screen.saverArea));
  1785. /* set the new timeout for the X server - note that since */
  1786. /* screen saver is disabled, the new timeout is now the value of the */
  1787. /* lock slider or zero if lock is disabled */
  1788. if (XmToggleButtonGadgetGetState(screen.lockOn))
  1789. screen.newTimeout = screen.lockTimeout * 60;
  1790. else
  1791. screen.newTimeout = 0;
  1792. /* let the session manger know not to run any savers */
  1793. SmNewSaverTime(0);
  1794. }
  1795. if (w == screen.saverOn && !set)
  1796. {
  1797. return;
  1798. }
  1799. if (w == screen.saverOn && set)
  1800. {
  1801. XtSetSensitive(screen.saverList, True);
  1802. XtSetSensitive(screen.saverArea, True);
  1803. XtSetSensitive(screen.timeOutLabel, True);
  1804. XtSetSensitive(screen.timeOutScale, True);
  1805. XtSetSensitive(screen.saverMinutesLabel , True);
  1806. if (savers.selsaverCount > 1)
  1807. {
  1808. XtSetSensitive(screen.cycleTimeLabel, True);
  1809. XtSetSensitive(screen.cycleTimeScale, True);
  1810. XtSetSensitive(screen.cycleMinutesLabel, True );
  1811. }
  1812. else
  1813. {
  1814. XtSetSensitive(screen.cycleTimeLabel, False);
  1815. XtSetSensitive(screen.cycleTimeScale, False);
  1816. XtSetSensitive(screen.cycleMinutesLabel, False);
  1817. }
  1818. if (savers.saverCount)
  1819. {
  1820. /* display the preview label */
  1821. XtManageChild(screen.prevLabel);
  1822. /* Restart the screen saver that is is currently selected */
  1823. if (!savers.saverstate)
  1824. {
  1825. XtVaSetValues(screen.saverArea, XmNbackground, savers.black, NULL);
  1826. savers.saverstate = _DtSaverStart(style.display,
  1827. &screen.saverArea, 1, savers.current_saver,
  1828. style.screenDialog);
  1829. }
  1830. /* set the new timeout for the X server - note that since */
  1831. /* screen saver is enabled, the new timeout is now the value of the */
  1832. /* saver slider or the minimum of the timeout sliders */
  1833. }
  1834. if (!XmToggleButtonGadgetGetState(screen.lockOn))
  1835. screen.newTimeout = screen.saverTimeout * 60;
  1836. else
  1837. screen.newTimeout = MIN(screen.saverTimeout, screen.lockTimeout) * 60;
  1838. /* let the session manger know to run savers */
  1839. SmNewSaverTime(screen.newTimeout);
  1840. }
  1841. XSetScreenSaver(style.display, screen.newTimeout,
  1842. screen.interval, screen.new_blanking, screen.exposures);
  1843. screen.systemDefaultFlag = False;
  1844. }
  1845. /*+++++++++++++++++++++++++++++++++++++++*/
  1846. /* no_svr_ext_saverToggleCB */
  1847. /*+++++++++++++++++++++++++++++++++++++++*/
  1848. static void
  1849. no_svr_ext_saverToggleCB(
  1850. Widget w,
  1851. XtPointer client_data,
  1852. XtPointer call_data )
  1853. {
  1854. int n;
  1855. Arg args[MAX_ARGS];
  1856. Boolean set;
  1857. XmString string;
  1858. XmToggleButtonCallbackStruct *cb = (XmToggleButtonCallbackStruct *)call_data;
  1859. set = (Boolean) cb->set;
  1860. if (w == screen.saverOff && !set )
  1861. {
  1862. return;
  1863. }
  1864. if (w == screen.saverOff && set)
  1865. {
  1866. XtSetSensitive(screen.timeOutLabel, False);
  1867. XtSetSensitive(screen.timeOutScale, False);
  1868. XtSetSensitive(screen.saverMinutesLabel, False);
  1869. /* set the new timeout for the X server - note that since */
  1870. /* screen saver is disabled, the new timeout is now zero */
  1871. screen.newTimeout = 0;
  1872. }
  1873. if (w == screen.saverOn && !set)
  1874. {
  1875. return;
  1876. }
  1877. if (w == screen.saverOn && set)
  1878. {
  1879. XtSetSensitive(screen.timeOutLabel, True);
  1880. XtSetSensitive(screen.timeOutScale, True);
  1881. XtSetSensitive(screen.saverMinutesLabel , True);
  1882. /* register the new timeout with the X server - note that since */
  1883. /* screen saver is enabled, the new timeout is now the value of the */
  1884. /* saver slider */
  1885. screen.newTimeout = screen.saverTimeout * 60;
  1886. }
  1887. XSetScreenSaver(style.display, screen.newTimeout,
  1888. screen.interval, screen.new_blanking, screen.exposures);
  1889. screen.systemDefaultFlag = False;
  1890. }
  1891. /*+++++++++++++++++++++++++++++++++++++++*/
  1892. /* lock ToggleCB */
  1893. /*+++++++++++++++++++++++++++++++++++++++*/
  1894. static void
  1895. lockToggleCB(
  1896. Widget w,
  1897. XtPointer client_data,
  1898. XtPointer call_data )
  1899. {
  1900. int n;
  1901. Arg args[MAX_ARGS];
  1902. Boolean set;
  1903. XmToggleButtonCallbackStruct *cb = (XmToggleButtonCallbackStruct *)call_data;
  1904. set = (Boolean) cb->set;
  1905. if (w == screen.lockOff && !set )
  1906. {
  1907. return;
  1908. }
  1909. if (w == screen.lockOff && set)
  1910. {
  1911. XtSetSensitive(screen.lockOutLabel, False);
  1912. XtSetSensitive(screen.lockOutScale, False);
  1913. XtSetSensitive(screen.lockMinutesLabel, False);
  1914. /* register the new timeout with the X server - note that since */
  1915. /* lock is disabled, the new timeout is now the value of the */
  1916. /* saver slider or zero if saver is disabled */
  1917. if (XmToggleButtonGadgetGetState(screen.saverOn))
  1918. screen.newTimeout = screen.saverTimeout * 60;
  1919. else
  1920. screen.newTimeout = 0;
  1921. XSetScreenSaver(style.display, screen.newTimeout,
  1922. screen.interval, screen.new_blanking, screen.exposures);
  1923. }
  1924. if (w == screen.lockOn && !set)
  1925. {
  1926. return;
  1927. }
  1928. if (w == screen.lockOn && set)
  1929. {
  1930. XtSetSensitive(screen.lockOutLabel, True);
  1931. XtSetSensitive(screen.lockOutScale, True);
  1932. XtSetSensitive(screen.lockMinutesLabel, True);
  1933. /* register the new timeout with the X server - note that since */
  1934. /* lock is disabled, the new timeout is now the value of the */
  1935. /* lock slider or the minimum of the two timeout sliders */
  1936. if (!XmToggleButtonGadgetGetState(screen.saverOn))
  1937. screen.newTimeout = screen.lockTimeout * 60;
  1938. else
  1939. screen.newTimeout = MIN(screen.saverTimeout, screen.lockTimeout) * 60;
  1940. XSetScreenSaver(style.display, screen.newTimeout,
  1941. screen.interval, screen.new_blanking, screen.exposures);
  1942. }
  1943. screen.systemDefaultFlag = False;
  1944. }
  1945. /*+++++++++++++++++++++++++++++++++++++++*/
  1946. /* saversToggleCB */
  1947. /*+++++++++++++++++++++++++++++++++++++++*/
  1948. static void
  1949. saversToggleCB(
  1950. Widget w,
  1951. XtPointer client_data,
  1952. XtPointer call_data )
  1953. {
  1954. int n;
  1955. Arg args[MAX_ARGS];
  1956. Boolean set;
  1957. XmString string;
  1958. XmToggleButtonCallbackStruct *cb = (XmToggleButtonCallbackStruct *)call_data;
  1959. set = (Boolean) cb->set;
  1960. if (w == screen.useSaversOff && !set )
  1961. {
  1962. return;
  1963. }
  1964. if (w == screen.useSaversOff && set)
  1965. {
  1966. /* Terminate the screen saver that is currently running */
  1967. if (savers.saverstate)
  1968. {
  1969. _DtSaverStop(style.display, savers.saverstate);
  1970. savers.saverstate = NULL;
  1971. XSync(style.display, False);
  1972. XClearWindow(style.display, XtWindow(screen.saverArea));
  1973. }
  1974. XtSetSensitive(screen.saverList, False);
  1975. XtSetSensitive(screen.saverArea, False);
  1976. XtSetSensitive(screen.cycleTimeLabel, False);
  1977. XtSetSensitive(screen.cycleTimeScale, False);
  1978. XtSetSensitive(screen.cycleMinutesLabel, False);
  1979. /* do not display preview string */
  1980. XtUnmanageChild(screen.prevLabel);
  1981. /* set the background color of the saver window to the */
  1982. /* secondary color ID */
  1983. XSync(style.display, False);
  1984. XtVaSetValues(screen.saverArea, XmNbackground, savers.bg, NULL);
  1985. XClearWindow(style.display, XtWindow(screen.saverArea));
  1986. /* let the session manger know not to run any savers */
  1987. SmNewSaverTime(0);
  1988. }
  1989. if (w == screen.useSaversOn && !set)
  1990. {
  1991. return;
  1992. }
  1993. if (w == screen.useSaversOn && set)
  1994. {
  1995. XtSetSensitive(screen.saverList, True);
  1996. XtSetSensitive(screen.saverArea, True);
  1997. if (savers.selsaverCount > 1)
  1998. {
  1999. XtSetSensitive(screen.cycleTimeLabel, True);
  2000. XtSetSensitive(screen.cycleTimeScale, True);
  2001. XtSetSensitive(screen.cycleMinutesLabel, True);
  2002. }
  2003. if (savers.saverCount)
  2004. {
  2005. /* display the preview label */
  2006. XtManageChild(screen.prevLabel);
  2007. /* Restart the screen saver that is is currently selected */
  2008. if (!savers.saverstate)
  2009. {
  2010. XtVaSetValues(screen.saverArea, XmNbackground, savers.black, NULL);
  2011. savers.saverstate = _DtSaverStart(style.display,
  2012. &screen.saverArea, 1, savers.current_saver, style.screenDialog);
  2013. }
  2014. }
  2015. /* let the session manger know to run the savers */
  2016. SmNewSaverTime(screen.saverTimeout*60);
  2017. }
  2018. }
  2019. /*+++++++++++++++++++++++++++++++++++++++*/
  2020. /* systemDefaultCB */
  2021. /*+++++++++++++++++++++++++++++++++++++++*/
  2022. static void
  2023. systemDefaultCB(
  2024. Widget w,
  2025. XtPointer client_data,
  2026. XtPointer call_data )
  2027. {
  2028. int n;
  2029. Arg args[MAX_ARGS];
  2030. screen.saverTimeout = SAVER_DEFAULT;
  2031. n=0;
  2032. XtSetArg(args[n], XmNvalue, screen.saverTimeout); n++;
  2033. XtSetValues(screen.timeOutScale, args, n);
  2034. screen.lockTimeout = LOCK_DEFAULT;
  2035. n=0;
  2036. XtSetArg(args[n], XmNvalue, screen.lockTimeout); n++;
  2037. XtSetValues(screen.lockOutScale, args, n);
  2038. XmToggleButtonGadgetSetState(screen.lockOff, True, True);
  2039. screen.cycleTimeout = CYCLE_DEFAULT;
  2040. n=0;
  2041. XtSetArg(args[n], XmNvalue, screen.cycleTimeout); n++;
  2042. XtSetValues(screen.cycleTimeScale, args, n);
  2043. XmToggleButtonGadgetSetState(screen.saverOn, True, True);
  2044. screen.newTimeout = MIN(SAVER_DEFAULT, LOCK_DEFAULT) * 60;
  2045. /* register new timeout with X */
  2046. XSetScreenSaver(style.display, screen.newTimeout,
  2047. screen.interval, screen.new_blanking, screen.exposures);
  2048. screen.systemDefaultFlag = True;
  2049. }
  2050. /*+++++++++++++++++++++++++++++++++++++++*/
  2051. /* no_svr_ext_systemDefaultCB */
  2052. /*+++++++++++++++++++++++++++++++++++++++*/
  2053. static void
  2054. no_svr_ext_systemDefaultCB(
  2055. Widget w,
  2056. XtPointer client_data,
  2057. XtPointer call_data )
  2058. {
  2059. int n;
  2060. Arg args[MAX_ARGS];
  2061. screen.saverTimeout = SAVER_DEFAULT;
  2062. n=0;
  2063. XtSetArg(args[n], XmNvalue, screen.saverTimeout); n++;
  2064. XtSetValues(screen.timeOutScale, args, n);
  2065. screen.cycleTimeout = CYCLE_DEFAULT;
  2066. n=0;
  2067. XtSetArg(args[n], XmNvalue, screen.cycleTimeout); n++;
  2068. XtSetValues(screen.cycleTimeScale, args, n);
  2069. XmToggleButtonGadgetSetState(screen.saverOn, True, True);
  2070. XmToggleButtonGadgetSetState(screen.useSaversOn, True, True);
  2071. screen.newTimeout = SAVER_DEFAULT * 60;
  2072. /* register new timeout with X */
  2073. XSetScreenSaver(style.display, screen.newTimeout,
  2074. screen.interval, screen.new_blanking, screen.exposures);
  2075. screen.systemDefaultFlag = True;
  2076. }
  2077. /*+++++++++++++++++++++++++++++++++++++++*/
  2078. /* ButtonCB */
  2079. /* callback for PushButtons in DialogBox */
  2080. /*+++++++++++++++++++++++++++++++++++++++*/
  2081. static void
  2082. ButtonCB(
  2083. Widget w,
  2084. XtPointer client_data,
  2085. XtPointer call_data )
  2086. {
  2087. int i, n, m;
  2088. Arg args[MAX_ARGS];
  2089. Boolean sel_matched = False;
  2090. Boolean lockset;
  2091. Boolean saverset;
  2092. Boolean flag;
  2093. static char screenres[48];
  2094. int mintime;
  2095. XtArgVal scratch;
  2096. DtDialogBoxCallbackStruct *cb = (DtDialogBoxCallbackStruct *) call_data;
  2097. switch (cb->button_position)
  2098. {
  2099. case OK_BUTTON:
  2100. XtUnmanageChild (w);
  2101. /* terminate the saver that is currently running */
  2102. if (savers.saverstate)
  2103. {
  2104. _DtSaverStop(style.display, savers.saverstate);
  2105. savers.saverstate = NULL;
  2106. }
  2107. /* write saver timeout resource to xrdb to save scale value */
  2108. /* when screen saver is turned off */
  2109. saverset = XmToggleButtonGadgetGetState(screen.saverOn);
  2110. if (!saverset)
  2111. {
  2112. sprintf (screenres, "Dtstyle*timeoutScale: %d\n", screen.saverTimeout);
  2113. _DtAddToResource (style.display, screenres);
  2114. }
  2115. /* write lock timeout resource to xrdb to save scale value */
  2116. /* when lock is turned off */
  2117. lockset = XmToggleButtonGadgetGetState(screen.lockOn);
  2118. if (!lockset)
  2119. {
  2120. sprintf (screenres, "Dtstyle*lockoutScale: %d\n", screen.lockTimeout);
  2121. _DtAddToResource (style.display, screenres);
  2122. }
  2123. /* if sendSettings is true send message to Session Manager */
  2124. if(style.smState.smSendSettings)
  2125. {
  2126. if(screen.systemDefaultFlag)
  2127. {
  2128. SmDefaultScreenSettings();
  2129. }
  2130. else
  2131. {
  2132. SmNewScreenSettings(saverset||lockset ? screen.newTimeout : 0,
  2133. screen.new_blanking,
  2134. screen.interval,
  2135. screen.exposures);
  2136. }
  2137. }
  2138. if (savers.saverCount)
  2139. {
  2140. savers.selsaverActionNames = (char **) XtMalloc(sizeof(char *) *
  2141. savers.selsaverCount);
  2142. for (i=0; i<savers.selsaverCount; i++)
  2143. {
  2144. char *tmp = savers.saverActionNames[savers.selPositions[i] - 1];
  2145. savers.selsaverActionNames[i] = (char *) XtMalloc(strlen(tmp) + 1);
  2146. strcpy(savers.selsaverActionNames[i], tmp);
  2147. }
  2148. if (savers.selsaversList != NULL)
  2149. XtFree((char*) savers.selsaversList);
  2150. savers.selsaversList = build_selectedList(savers.selsaverActionNames,
  2151. savers.selsaverCount);
  2152. }
  2153. else
  2154. savers.selsaversList = NULL;
  2155. /* save the selected positions for later use */
  2156. savers.orig_selsaverCount = savers.selsaverCount;
  2157. if (savers.origSelPositions != NULL)
  2158. XtFree((char *) savers.origSelPositions);
  2159. savers.origSelPositions = (int *) XtMalloc(sizeof(int) * savers.orig_selsaverCount);
  2160. for (i=0; i<savers.orig_selsaverCount; i++)
  2161. savers.origSelPositions[i] = savers.selPositions[i];
  2162. /* free the allocated selected savers */
  2163. free_saverList(savers.selsaverActionNames, savers.selsaverCount);
  2164. savers.selsaverActionNames = NULL;
  2165. XtVaGetValues(screen.cycleTimeScale, XmNvalue, &scratch, NULL);
  2166. screen.cycleTimeout = scratch;
  2167. /* send new saver time, lock time and time per saver to SM if they have changed, */
  2168. /* flag value indicates which value has changed */
  2169. SmNewSaverSettings(saverset ? screen.saverTimeout*60 : 0,
  2170. lockset ? screen.lockTimeout*60 : 0,
  2171. screen.cycleTimeout*60,
  2172. savers.selsaversList);
  2173. style.smState.smSaverTimeout = saverset ? screen.saverTimeout*60 : 0;
  2174. style.smState.smLockTimeout = lockset ? screen.lockTimeout*60 : 0;
  2175. style.smState.smCycleTimeout = screen.cycleTimeout*60;
  2176. style.smSaver.saverList = savers.selsaversList;
  2177. screen.origTimeout = screen.newTimeout;
  2178. XSetScreenSaver(style.display, style.smState.smSaverTimeout,
  2179. style.smState.smCycleTimeout,
  2180. screen.new_blanking,
  2181. screen.exposures);
  2182. break;
  2183. case CANCEL_BUTTON:
  2184. XtUnmanageChild(w);
  2185. /* initialize the value of savertimeout and locktimeout and cycle time to the */
  2186. /* current state or to the values retrieved from xrdb if the corresponding */
  2187. /* initial state is zero */
  2188. if (style.smState.smSaverTimeout)
  2189. screen.saverTimeout = style.smState.smSaverTimeout / 60;
  2190. else
  2191. screen.saverTimeout = screen.saverTimeout_xrdb;
  2192. if (style.smState.smLockTimeout)
  2193. screen.lockTimeout = style.smState.smLockTimeout / 60;
  2194. else
  2195. screen.lockTimeout = screen.lockTimeout_xrdb;
  2196. if (style.smState.smCycleTimeout)
  2197. screen.cycleTimeout = style.smState.smCycleTimeout / 60;
  2198. else
  2199. screen.cycleTimeout = 0;
  2200. /* reset the value of the scales */
  2201. XtVaSetValues(screen.timeOutScale, XmNvalue, screen.saverTimeout, NULL);
  2202. XtVaSetValues(screen.lockOutScale, XmNvalue, screen.lockTimeout, NULL);
  2203. XtVaSetValues(screen.cycleTimeScale, XmNvalue, screen.cycleTimeout , NULL);
  2204. /* reset the value of the saver toggles */
  2205. XmToggleButtonGadgetSetState(screen.saverOn, style.smState.smSaverTimeout ? True : False, True);
  2206. XmToggleButtonGadgetSetState(screen.saverOff, !style.smState.smSaverTimeout ? True : False, True);
  2207. XmToggleButtonGadgetSetState(screen.lockOn, style.smState.smLockTimeout ? True : False, True);
  2208. XmToggleButtonGadgetSetState(screen.lockOff, !style.smState.smLockTimeout ? True : False, True);
  2209. /* reset the X timeout */
  2210. screen.newTimeout = screen.origTimeout;
  2211. XSetScreenSaver(style.display, screen.origTimeout, screen.interval,
  2212. screen.blanking, screen.exposures);
  2213. /* if timeMismatch is true, set the timeout to xTimeout so that the next time */
  2214. /* the interface is mapped the correct timeouts show up */
  2215. if (screen.timeMismatch)
  2216. XSetScreenSaver(style.display, screen.xTimeout, screen.interval,
  2217. screen.blanking,screen.exposures);
  2218. if (savers.saverCount)
  2219. {
  2220. /* reset the list selection back to the current state */
  2221. /* first deselect all items */
  2222. XmListDeselectAllItems(screen.saverList);
  2223. for (i=0; i<savers.orig_selsaverCount; i++)
  2224. XmListSelectPos(screen.saverList, savers.origSelPositions[i], False);
  2225. /* set the current saver to be the first saver in the selected list */
  2226. savers.current_saver = savers.saverActionNames[savers.origSelPositions[0] - 1];
  2227. savers.current_saverDesc = savers.saverActionDesc[savers.origSelPositions[0] - 1];
  2228. savers.current_position = savers.origSelPositions[0];
  2229. }
  2230. /* Need to make sure the savers.selPositions array reflects the accurate
  2231. current selections. If the user invokes the Screen dialog, then cancels,
  2232. then reinvokes and OKs without making any changes to the selections, the
  2233. savers.selPositions array is assumed to contain the accurate selections.
  2234. Unless we reset it here to the origSelPositions, it may be inaccurate.
  2235. */
  2236. XtFree((char *) savers.selPositions);
  2237. savers.selPositions = (int *) XtMalloc(sizeof(int) * savers.orig_selsaverCount);
  2238. for (i=0; i<savers.orig_selsaverCount; i++)
  2239. savers.selPositions[i] = savers.origSelPositions[i];
  2240. savers.selsaverCount = savers.orig_selsaverCount;
  2241. break;
  2242. break;
  2243. case HELP_BUTTON:
  2244. XtCallCallbacks(style.screenDialog, XmNhelpCallback, (XtPointer)NULL);
  2245. break;
  2246. default:
  2247. break;
  2248. }
  2249. }
  2250. /*+++++++++++++++++++++++++++++++++++++++*/
  2251. /* no_svr_ext_ButtonCB */
  2252. /* callback for PushButtons in DialogBox */
  2253. /*+++++++++++++++++++++++++++++++++++++++*/
  2254. static void
  2255. no_svr_ext_ButtonCB(
  2256. Widget w,
  2257. XtPointer client_data,
  2258. XtPointer call_data )
  2259. {
  2260. int i, n, m;
  2261. Arg args[MAX_ARGS];
  2262. Boolean sel_matched = False;
  2263. Boolean saverset;
  2264. Boolean flag;
  2265. static char screenres[48];
  2266. int mintime;
  2267. XtArgVal scratch;
  2268. DtDialogBoxCallbackStruct *cb = (DtDialogBoxCallbackStruct *) call_data;
  2269. switch (cb->button_position)
  2270. {
  2271. case OK_BUTTON:
  2272. XtUnmanageChild (w);
  2273. /* terminate the saver that is currently running */
  2274. if (savers.saverstate)
  2275. {
  2276. _DtSaverStop(style.display, savers.saverstate);
  2277. savers.saverstate = NULL;
  2278. }
  2279. /* write saver timeout resource to xrdb to save scale value */
  2280. /* when screen saver is turned off */
  2281. saverset = XmToggleButtonGadgetGetState(screen.saverOn);
  2282. if (!saverset)
  2283. {
  2284. sprintf (screenres, "Dtstyle*timeoutScale: %d\n", screen.saverTimeout);
  2285. _DtAddToResource (style.display, screenres);
  2286. }
  2287. /* if sendSettings is true send message to Session Manager */
  2288. if(style.smState.smSendSettings)
  2289. {
  2290. if(screen.systemDefaultFlag)
  2291. {
  2292. SmDefaultScreenSettings();
  2293. }
  2294. else
  2295. {
  2296. SmNewScreenSettings(saverset ? screen.newTimeout : 0,
  2297. screen.new_blanking,
  2298. screen.interval,
  2299. screen.exposures);
  2300. }
  2301. }
  2302. if (savers.saverCount)
  2303. {
  2304. savers.selsaverActionNames = (char **) XtMalloc(sizeof(char *) *
  2305. savers.selsaverCount);
  2306. for (i=0; i<savers.selsaverCount; i++)
  2307. {
  2308. char *tmp = savers.saverActionNames[savers.selPositions[i] - 1];
  2309. savers.selsaverActionNames[i] = (char *) XtMalloc(strlen(tmp) + 1);
  2310. strcpy(savers.selsaverActionNames[i], tmp);
  2311. }
  2312. if (savers.selsaversList != NULL)
  2313. XtFree((char*) savers.selsaversList);
  2314. savers.selsaversList = build_selectedList(savers.selsaverActionNames,
  2315. savers.selsaverCount);
  2316. }
  2317. else
  2318. savers.selsaversList = NULL;
  2319. /* save the selected positions for later use */
  2320. savers.orig_selsaverCount = savers.selsaverCount;
  2321. if (savers.origSelPositions != NULL)
  2322. XtFree((char *) savers.origSelPositions);
  2323. savers.origSelPositions = (int *) XtMalloc(sizeof(int) * savers.orig_selsaverCount);
  2324. for (i=0; i<savers.orig_selsaverCount; i++)
  2325. savers.origSelPositions[i] = savers.selPositions[i];
  2326. /* free the allocated selected savers */
  2327. free_saverList(savers.selsaverActionNames, savers.selsaverCount);
  2328. savers.selsaverActionNames = NULL;
  2329. XtVaGetValues(screen.cycleTimeScale, XmNvalue, &scratch, NULL);
  2330. screen.cycleTimeout = scratch;
  2331. /* send new saver time, lock time and time per saver to SM if they have changed, */
  2332. /* flag value indicates which value has changed */
  2333. /* send zero to the session manger if no savers selected */
  2334. if(!XmToggleButtonGadgetGetState(screen.useSaversOn))
  2335. saverset = False;
  2336. else
  2337. saverset = True;
  2338. SmNewSaverSettings(saverset ? screen.saverTimeout*60 : 0,
  2339. style.smState.smLockTimeout,
  2340. screen.cycleTimeout*60,
  2341. savers.selsaversList);
  2342. style.smState.smSaverTimeout = saverset ? screen.saverTimeout*60 : 0;
  2343. style.smState.smCycleTimeout = screen.cycleTimeout*60;
  2344. style.smSaver.saverList = savers.selsaversList;
  2345. screen.origTimeout = screen.newTimeout;
  2346. XSetScreenSaver(style.display, style.smState.smSaverTimeout,
  2347. style.smState.smCycleTimeout,
  2348. screen.new_blanking,
  2349. screen.exposures);
  2350. break;
  2351. case CANCEL_BUTTON:
  2352. XtUnmanageChild(w);
  2353. /* initialize the value of savertimeout and cycle time to the */
  2354. /* original value */
  2355. if (screen.origTimeout)
  2356. screen.saverTimeout = screen.origTimeout / 60;
  2357. else
  2358. screen.saverTimeout = screen.saverTimeout_xrdb;
  2359. if (style.smState.smCycleTimeout)
  2360. screen.cycleTimeout = style.smState.smCycleTimeout / 60;
  2361. else
  2362. screen.cycleTimeout = 0;
  2363. /* reset the value of the scales */
  2364. XtVaSetValues(screen.timeOutScale, XmNvalue, screen.saverTimeout, NULL);
  2365. XtVaSetValues(screen.cycleTimeScale, XmNvalue, screen.cycleTimeout , NULL);
  2366. /* reset the value of the saver toggles */
  2367. XmToggleButtonGadgetSetState(screen.saverOn, screen.origTimeout ? True : False, True);
  2368. XmToggleButtonGadgetSetState(screen.saverOff, !screen.origTimeout ? True : False, True);
  2369. /* reset the value of the locking radio box toggles */
  2370. if (style.smState.smSaverTimeout)
  2371. {
  2372. XmToggleButtonGadgetSetState(screen.useSaversOn, True, False);
  2373. XmToggleButtonGadgetSetState(screen.useSaversOff, False, False);
  2374. XtSetSensitive(screen.saverList, True);
  2375. XtSetSensitive(screen.saverArea, True);
  2376. if (savers.selsaverCount > 1)
  2377. {
  2378. XtSetSensitive(screen.cycleTimeLabel, True);
  2379. XtSetSensitive(screen.cycleTimeScale, True);
  2380. XtSetSensitive(screen.cycleMinutesLabel, True);
  2381. }
  2382. if (savers.saverCount)
  2383. /* display the preview label */
  2384. XtManageChild(screen.prevLabel);
  2385. /* let the session manger know to run the savers */
  2386. SmNewSaverTime(screen.saverTimeout*60);
  2387. }
  2388. else
  2389. {
  2390. XmToggleButtonGadgetSetState(screen.useSaversOff, True, False);
  2391. XmToggleButtonGadgetSetState(screen.useSaversOn, False, False);
  2392. XtSetSensitive(screen.saverList, False);
  2393. XtSetSensitive(screen.saverArea, False);
  2394. XtSetSensitive(screen.cycleTimeLabel, False);
  2395. XtSetSensitive(screen.cycleTimeScale, False);
  2396. XtSetSensitive(screen.cycleMinutesLabel, False);
  2397. /* do not display preview string */
  2398. XtUnmanageChild(screen.prevLabel);
  2399. /* set the background color of the saver window to the */
  2400. /* secondary color ID */
  2401. XSync(style.display, False);
  2402. XtVaSetValues(screen.saverArea, XmNbackground, savers.bg, NULL);
  2403. XClearWindow(style.display, XtWindow(screen.saverArea));
  2404. /* let the session manger know not to run any savers */
  2405. SmNewSaverTime(0);
  2406. }
  2407. /* reset the X timeout */
  2408. screen.newTimeout = screen.origTimeout;
  2409. XSetScreenSaver(style.display, screen.origTimeout, screen.interval,
  2410. screen.blanking,screen.exposures);
  2411. if (savers.saverCount)
  2412. {
  2413. /* reset the list selection back to the current state */
  2414. /* first deselect all items */
  2415. XmListDeselectAllItems(screen.saverList);
  2416. for (i=0; i<savers.orig_selsaverCount; i++)
  2417. XmListSelectPos(screen.saverList, savers.origSelPositions[i], False);
  2418. /* set the current saver to be the first saver in the selected list */
  2419. savers.current_saver = savers.saverActionNames[savers.origSelPositions[0] - 1];
  2420. savers.current_saverDesc = savers.saverActionDesc[savers.origSelPositions[0] - 1];
  2421. savers.current_position = savers.origSelPositions[0];
  2422. }
  2423. /* Need to make sure the savers.selPositions array reflects the accurate
  2424. current selections. If the user invokes the Screen dialog, then cancels,
  2425. then reinvokes and OKs without making any changes to the selections, the
  2426. savers.selPositions array is assumed to contain the accurate selections.
  2427. Unless we reset it here to the origSelPositions, it may be inaccurate.
  2428. */
  2429. XtFree((char *) savers.selPositions);
  2430. if (savers.orig_selsaverCount > 0) {
  2431. savers.selPositions =
  2432. (int *) XtMalloc(sizeof(int) * savers.orig_selsaverCount);
  2433. for (i=0; i<savers.orig_selsaverCount; i++)
  2434. savers.selPositions[i] = savers.origSelPositions[i];
  2435. }
  2436. savers.selsaverCount = savers.orig_selsaverCount;
  2437. break;
  2438. case HELP_BUTTON:
  2439. XtCallCallbacks(style.screenDialog, XmNhelpCallback, (XtPointer)NULL);
  2440. break;
  2441. default:
  2442. break;
  2443. }
  2444. }
  2445. /************************************************************************/
  2446. /* restoreScreen() */
  2447. /* restore any state information saved with saveScreen. */
  2448. /* This is called from restoreSession with the application */
  2449. /* shell and the special xrm database retrieved for restore. */
  2450. /************************************************************************/
  2451. void
  2452. restoreScreen(
  2453. Widget shell,
  2454. XrmDatabase db )
  2455. {
  2456. XrmName xrm_name[5];
  2457. XrmRepresentation rep_type;
  2458. XrmValue value;
  2459. xrm_name [0] = XrmStringToQuark ("Screen");
  2460. xrm_name [2] = 0;
  2461. /* get x position */
  2462. xrm_name [1] = XrmStringToQuark ("x");
  2463. if (XrmQGetResource (db, xrm_name, xrm_name, &rep_type, &value)){
  2464. XtSetArg (save.posArgs[save.poscnt], XmNx, atoi((char *)value.addr)); save.poscnt++;
  2465. save.restoreFlag = True;
  2466. }
  2467. /* get y position */
  2468. xrm_name [1] = XrmStringToQuark ("y");
  2469. if (XrmQGetResource (db, xrm_name, xrm_name, &rep_type, &value)){
  2470. XtSetArg (save.posArgs[save.poscnt], XmNy, atoi((char *)value.addr)); save.poscnt++;
  2471. }
  2472. xrm_name [1] = XrmStringToQuark ("ismapped");
  2473. XrmQGetResource (db, xrm_name, xrm_name, &rep_type, &value);
  2474. /* Are we supposed to be mapped? */
  2475. if (strcmp(value.addr, "True") == 0)
  2476. popup_screenBB(shell);
  2477. }
  2478. /*******************************************************************************/
  2479. /* saveScreen() */
  2480. /* This routine will write out to the passed file descriptor any state */
  2481. /* information this dialog needs. It is called from saveSessionCB with the */
  2482. /* file already opened. */
  2483. /* All information is saved in xrm format. There is no restriction */
  2484. /* on what can be saved. It doesn't have to be defined or be part of any */
  2485. /* widget or Xt definition. Just name and save it here and recover it in */
  2486. /* restoreBackdrop. The suggested minimum is whether you are mapped, and your */
  2487. /* location. */
  2488. /*******************************************************************************/
  2489. void
  2490. saveScreen(
  2491. int fd )
  2492. {
  2493. Position x,y;
  2494. char *bufr = style.tmpBigStr; /* size=[1024], make bigger if needed */
  2495. XmVendorShellExtObject vendorExt;
  2496. XmWidgetExtData extData;
  2497. if (style.screenDialog != NULL)
  2498. {
  2499. if (XtIsManaged(style.screenDialog))
  2500. sprintf(bufr, "*Screen.ismapped: True\n");
  2501. else
  2502. sprintf(bufr, "*Screen.ismapped: False\n");
  2503. /* Get and write out the geometry info for our Window */
  2504. x = XtX(XtParent(style.screenDialog));
  2505. y = XtY(XtParent(style.screenDialog));
  2506. /* Modify x & y to take into account window mgr frames */
  2507. /* This is pretty bogus, but I don't know a better way to do it. */
  2508. extData = _XmGetWidgetExtData(style.shell, XmSHELL_EXTENSION);
  2509. vendorExt = (XmVendorShellExtObject)extData->widget;
  2510. x -= vendorExt->vendor.xOffset;
  2511. y -= vendorExt->vendor.yOffset;
  2512. sprintf(bufr, "%s*Screen.x: %d\n", bufr, x);
  2513. sprintf(bufr, "%s*Screen.y: %d\n", bufr, y);
  2514. if(-1 == write (fd, bufr, strlen(bufr))) {
  2515. perror(strerror(errno));
  2516. }
  2517. }
  2518. }
  2519. /************************************************************************/
  2520. /* MakeListStrings() */
  2521. /* Make XmStrings from the saver names, to pass into list. */
  2522. /************************************************************************/
  2523. static XmString *
  2524. MakeListStrings( char ** list )
  2525. {
  2526. int i;
  2527. XmString *xmList;
  2528. xmList = (XmString *) XtMalloc(savers.saverCount * sizeof(XmString));
  2529. for (i = 0; i < savers.saverCount; i++)
  2530. {
  2531. xmList[i] = XmStringCreateLocalized (list[i]);
  2532. }
  2533. return (xmList);
  2534. }
  2535. /************************************************************************/
  2536. /* FreeListStrings() */
  2537. /************************************************************************/
  2538. static void
  2539. FreeListStrings(XmString *xmlist,
  2540. int count)
  2541. {
  2542. int i;
  2543. for (i = 0; i < count; i++)
  2544. {
  2545. if (xmlist[i])
  2546. XmStringFree(xmlist[i]);
  2547. }
  2548. XtFree ((char *)xmlist);
  2549. }
  2550. /************************************************************************/
  2551. /* ListCB() */
  2552. /* Get the lastly selected Screen saver client running in the preview */
  2553. /* area. For a multiple selection by dragging, the last item in the */
  2554. /* selection is the client that is previewed. */
  2555. /************************************************************************/
  2556. static void
  2557. ListCB(
  2558. Widget w,
  2559. XtPointer client_data,
  2560. XtPointer call_data )
  2561. {
  2562. XmListCallbackStruct *cb = (XmListCallbackStruct *)call_data;
  2563. int i;
  2564. Boolean runsaver = False;
  2565. XmString string;
  2566. /* If no items are left in the selection (i.e. the last selected item */
  2567. /* was deselected) then force the previously selected item to remain */
  2568. /* selected */
  2569. if (cb->selected_item_count == 0)
  2570. {
  2571. XmListSelectPos(screen.saverList, cb->item_position, False);
  2572. savers.selsaverCount = 1;
  2573. if (savers.selPositions != NULL)
  2574. XtFree ((char *) savers.selPositions);
  2575. savers.selPositions = (int *) XtMalloc(sizeof(int));
  2576. savers.selPositions[0] = cb->item_position;
  2577. savers.current_saver = savers.saverActionNames[savers.selPositions[0] - 1];
  2578. savers.current_saverDesc = savers.saverActionDesc[savers.selPositions[0] - 1];
  2579. return;
  2580. }
  2581. /* make a copy of the selected item positions for later use */
  2582. if (savers.selPositions != NULL)
  2583. XtFree ((char *) savers.selPositions);
  2584. savers.selPositions = (int *) XtMalloc(sizeof(int) * cb->selected_item_count);
  2585. for (i=0; i< cb->selected_item_count; i++)
  2586. {
  2587. savers.selPositions[i] = cb->selected_item_positions[i];
  2588. }
  2589. savers.selsaverCount = cb->selected_item_count;
  2590. if (savers.selsaverCount < 2)
  2591. {
  2592. XtSetSensitive(screen.cycleTimeScale, False);
  2593. XtSetSensitive(screen.cycleTimeLabel, False);
  2594. XtSetSensitive(screen.cycleMinutesLabel, False);
  2595. }
  2596. else
  2597. if (savers.previous_selsaverCount < 2)
  2598. {
  2599. XtSetSensitive(screen.cycleTimeScale, True);
  2600. XtSetSensitive(screen.cycleTimeLabel, True);
  2601. XtSetSensitive(screen.cycleMinutesLabel, True);
  2602. }
  2603. savers.previous_selsaverCount = savers.selsaverCount;
  2604. /* Find out if the item is selected or deselected. When an item */
  2605. /* is deselected item_position is set to the deselected item which has */
  2606. /* the keyboard focus. However, the deselected screen saver must not be */
  2607. /* previewed. Therfore before a screen saver is started, its position must */
  2608. /* exist in the selected_item_positions array. If not then just return without */
  2609. /* altering the current (previewed) saver unless the deselected saver was the */
  2610. /* current saver. In that case kill the current saver and preview the last */
  2611. /* item from the selected list. */
  2612. for (i=0; i<cb->selected_item_count; i++)
  2613. {
  2614. if(cb->selected_item_positions[i] == cb->item_position)
  2615. runsaver=True;
  2616. }
  2617. if (!runsaver)
  2618. {
  2619. i = cb->selected_item_positions[(cb->selected_item_count-1)];
  2620. if (savers.current_position == cb->item_position)
  2621. {
  2622. if (savers.saverstate)
  2623. {
  2624. /* Terminate the screen saver that is currently running */
  2625. _DtSaverStop(style.display, savers.saverstate);
  2626. XSync(style.display, False);
  2627. savers.saverstate = NULL;
  2628. }
  2629. savers.current_saver = savers.saverActionNames[i-1];
  2630. savers.current_saverDesc = savers.saverActionDesc[i-1];
  2631. savers.current_position = i;
  2632. XtVaSetValues(screen.saverArea, XmNbackground, savers.black, NULL);
  2633. savers.saverstate = _DtSaverStart(style.display, &screen.saverArea,
  2634. 1, savers.current_saver, style.screenDialog);
  2635. string = XmStringCreateLocalized (savers.current_saverDesc);
  2636. XtVaSetValues(screen.prevLabel, XmNlabelString, string, NULL);
  2637. XmStringFree(string);
  2638. }
  2639. return;
  2640. }
  2641. /* The item position returned is the selcted item */
  2642. /* Start screen saver. _DtSaverStop() must be called to terminate the */
  2643. /* screen saver. */
  2644. if (savers.saverstate)
  2645. {
  2646. /* Terminate the screen saver that is currently running */
  2647. _DtSaverStop(style.display, savers.saverstate);
  2648. XSync(style.display, False);
  2649. savers.saverstate = NULL;
  2650. }
  2651. XSync(style.display, False);
  2652. XClearWindow(style.display, XtWindow(screen.saverArea));
  2653. XSync(style.display, False);
  2654. XtVaSetValues(screen.saverArea, XmNbackground, savers.black, NULL);
  2655. savers.current_position = cb->item_position;
  2656. savers.current_saver = savers.saverActionNames[savers.current_position - 1];
  2657. savers.current_saverDesc = savers.saverActionDesc[savers.current_position - 1];
  2658. savers.saverstate = _DtSaverStart(style.display, &screen.saverArea, 1,
  2659. savers.current_saver, style.screenDialog);
  2660. /* update the preview label with the current running saver */
  2661. XtVaSetValues(screen.prevLabel, XmNlabelString, cb->item, NULL);
  2662. }
  2663. /************************************************************************/
  2664. /* IconHandler() */
  2665. /* Kills the currently previewed saver when the user iconifies the */
  2666. /* style manager. An XtEventHandler. */
  2667. /************************************************************************/
  2668. static void
  2669. IconHandler(
  2670. Widget shell,
  2671. XtPointer client_data,
  2672. XEvent *event,
  2673. Boolean *dispatch)
  2674. {
  2675. XmString string;
  2676. if (event->type == UnmapNotify)
  2677. {
  2678. /* terminate the saver that is currently running */
  2679. if (savers.saverstate)
  2680. {
  2681. _DtSaverStop(style.display, savers.saverstate);
  2682. savers.saverstate = NULL;
  2683. }
  2684. }
  2685. /* run the current screen saver only if the useSaversOn/saverOn toggle is enabled
  2686. and valid saver exist and one is not already running*/
  2687. else if (savers.saverCount && event->type == 19 && !savers.saverstate)
  2688. if (style.smState.smLockOnTimeoutStatus)
  2689. {
  2690. if (XmToggleButtonGadgetGetState(screen.saverOn) && savers.saverCount)
  2691. {
  2692. XtVaSetValues(screen.saverArea, XmNbackground, savers.black, NULL);
  2693. savers.saverstate = _DtSaverStart(style.display, &screen.saverArea, 1,
  2694. savers.current_saver, style.screenDialog);
  2695. string = XmStringCreateLocalized (savers.current_saverDesc);
  2696. XtVaSetValues(screen.prevLabel, XmNlabelString, string, NULL);
  2697. XmStringFree(string);
  2698. }
  2699. }
  2700. else
  2701. {
  2702. if (XmToggleButtonGadgetGetState(screen.useSaversOn) && savers.saverCount)
  2703. {
  2704. XtVaSetValues(screen.saverArea, XmNbackground, savers.black, NULL);
  2705. savers.saverstate = _DtSaverStart(style.display, &screen.saverArea, 1,
  2706. savers.current_saver, style.screenDialog);
  2707. string = XmStringCreateLocalized (savers.current_saverDesc);
  2708. XtVaSetValues(screen.prevLabel, XmNlabelString, string, NULL);
  2709. XmStringFree(string);
  2710. }
  2711. }
  2712. }
  2713. /************************************************************************/
  2714. /* UnmapCB() */
  2715. /* Kills the currently previewed saver when the user iconifies the */
  2716. /* style manager or unmaps the screen dialog. */
  2717. /************************************************************************/
  2718. static void
  2719. UnmapCB(
  2720. Widget w,
  2721. XtPointer client_data,
  2722. XtPointer call_data )
  2723. {
  2724. /* terminate the saver that is currently running */
  2725. if (savers.saverstate)
  2726. {
  2727. _DtSaverStop(style.display, savers.saverstate);
  2728. savers.saverstate = NULL;
  2729. }
  2730. }