parse_be.c revision 0bbfda8a
10bbfda8aSnia/* 20bbfda8aSnia * Parser backend routines. 30bbfda8aSnia * 40bbfda8aSnia * Roughly, these are the routines that the lex/yacc output calls to do 50bbfda8aSnia * its work. 60bbfda8aSnia * 70bbfda8aSnia * This is very similar to the meaning of parse_yacc.c; the two may be 80bbfda8aSnia * merged at some point. 90bbfda8aSnia */ 100bbfda8aSnia 110bbfda8aSnia#include "ctwm.h" 120bbfda8aSnia 130bbfda8aSnia#include <stdio.h> 140bbfda8aSnia#include <stdlib.h> 150bbfda8aSnia#include <string.h> 160bbfda8aSnia#include <strings.h> 170bbfda8aSnia 180bbfda8aSnia#include <X11/Xatom.h> 190bbfda8aSnia 200bbfda8aSnia#include "ctwm_atoms.h" 210bbfda8aSnia#include "screen.h" 220bbfda8aSnia#include "util.h" 230bbfda8aSnia#include "animate.h" 240bbfda8aSnia#include "functions_defs.h" 250bbfda8aSnia#include "image.h" 260bbfda8aSnia#include "list.h" 270bbfda8aSnia#include "occupation.h" 280bbfda8aSnia#include "parse.h" 290bbfda8aSnia#include "parse_be.h" 300bbfda8aSnia#include "parse_yacc.h" 310bbfda8aSnia#ifdef SOUNDS 320bbfda8aSnia# include "sound.h" 330bbfda8aSnia#endif 340bbfda8aSnia 350bbfda8aSnia#include "gram.tab.h" 360bbfda8aSnia 370bbfda8aSnia 380bbfda8aSniastatic int ParseRandomPlacement(const char *s); 390bbfda8aSniastatic int ParseButtonStyle(const char *s); 400bbfda8aSniastatic int ParseUsePPosition(const char *s); 410bbfda8aSniastatic int ParseIconifyStyle(const char *s); 420bbfda8aSnia 430bbfda8aSnia 440bbfda8aSnia 450bbfda8aSnia/********************************************************************** 460bbfda8aSnia * 470bbfda8aSnia * Parsing table and routines 480bbfda8aSnia * 490bbfda8aSnia ***********************************************************************/ 500bbfda8aSnia 510bbfda8aSniatypedef struct _TwmKeyword { 520bbfda8aSnia const char *name; 530bbfda8aSnia int value; 540bbfda8aSnia int subnum; 550bbfda8aSnia} TwmKeyword; 560bbfda8aSnia 570bbfda8aSnia#define kw0_NoDefaults 1 580bbfda8aSnia#define kw0_AutoRelativeResize 2 590bbfda8aSnia#define kw0_ForceIcons 3 600bbfda8aSnia#define kw0_NoIconManagers 4 610bbfda8aSnia#define kw0_InterpolateMenuColors 6 620bbfda8aSnia//#define kw0_NoVersion 7 630bbfda8aSnia#define kw0_SortIconManager 8 640bbfda8aSnia#define kw0_NoGrabServer 9 650bbfda8aSnia#define kw0_NoMenuShadows 10 660bbfda8aSnia#define kw0_NoRaiseOnMove 11 670bbfda8aSnia#define kw0_NoRaiseOnResize 12 680bbfda8aSnia#define kw0_NoRaiseOnDeiconify 13 690bbfda8aSnia#define kw0_DontMoveOff 14 700bbfda8aSnia#define kw0_NoBackingStore 15 710bbfda8aSnia#define kw0_NoSaveUnders 16 720bbfda8aSnia#define kw0_RestartPreviousState 17 730bbfda8aSnia#define kw0_ClientBorderWidth 18 740bbfda8aSnia#define kw0_NoTitleFocus 19 750bbfda8aSnia#define kw0_DecorateTransients 21 760bbfda8aSnia#define kw0_ShowIconManager 22 770bbfda8aSnia#define kw0_NoCaseSensitive 23 780bbfda8aSnia#define kw0_NoRaiseOnWarp 24 790bbfda8aSnia#define kw0_WarpUnmapped 25 800bbfda8aSnia#define kw0_ShowWorkspaceManager 27 810bbfda8aSnia#define kw0_StartInMapState 28 820bbfda8aSnia#define kw0_NoShowOccupyAll 29 830bbfda8aSnia#define kw0_AutoOccupy 30 840bbfda8aSnia#define kw0_TransientHasOccupation 31 850bbfda8aSnia#define kw0_DontPaintRootWindow 32 860bbfda8aSnia#define kw0_Use3DMenus 33 870bbfda8aSnia#define kw0_Use3DTitles 34 880bbfda8aSnia#define kw0_Use3DIconManagers 35 890bbfda8aSnia#define kw0_Use3DBorders 36 900bbfda8aSnia#define kw0_SunkFocusWindowTitle 37 910bbfda8aSnia#define kw0_BeNiceToColormap 38 920bbfda8aSnia#define kw0_WarpRingOnScreen 40 930bbfda8aSnia#define kw0_NoIconManagerFocus 41 940bbfda8aSnia#define kw0_StayUpMenus 42 950bbfda8aSnia#define kw0_ClickToFocus 43 960bbfda8aSnia#define kw0_BorderResizeCursors 44 970bbfda8aSnia#define kw0_ReallyMoveInWorkspaceManager 45 980bbfda8aSnia#define kw0_ShowWinWhenMovingInWmgr 46 990bbfda8aSnia#define kw0_Use3DWMap 47 1000bbfda8aSnia#define kw0_ReverseCurrentWorkspace 48 1010bbfda8aSnia#define kw0_DontWarpCursorInWMap 49 1020bbfda8aSnia#define kw0_CenterFeedbackWindow 50 1030bbfda8aSnia#define kw0_WarpToDefaultMenuEntry 51 1040bbfda8aSnia#define kw0_ShrinkIconTitles 52 1050bbfda8aSnia#define kw0_AutoRaiseIcons 53 1060bbfda8aSnia//#define kw0_use3DIconBorders 54 1070bbfda8aSnia#define kw0_UseSunkTitlePixmap 55 1080bbfda8aSnia#define kw0_ShortAllWindowsMenus 56 1090bbfda8aSnia#define kw0_RaiseWhenAutoUnSqueeze 57 1100bbfda8aSnia#define kw0_RaiseOnClick 58 1110bbfda8aSnia#define kw0_IgnoreLockModifier 59 1120bbfda8aSnia#define kw0_AutoFocusToTransients 60 /* kai */ 1130bbfda8aSnia#define kw0_PackNewWindows 61 1140bbfda8aSnia#define kw0_IgnoreCaseInMenuSelection 62 1150bbfda8aSnia#define kw0_SloppyFocus 63 1160bbfda8aSnia#define kw0_NoImagesInWorkSpaceManager 64 1170bbfda8aSnia#define kw0_NoWarpToMenuTitle 65 1180bbfda8aSnia#define kw0_SaveWorkspaceFocus 66 /* blais */ 1190bbfda8aSnia#define kw0_RaiseOnWarp 67 1200bbfda8aSnia#define kw0_DontShowWelcomeWindow 68 1210bbfda8aSnia#define kw0_AutoPriority 69 1220bbfda8aSnia#define kw0_DontToggleWorkspacemanagerState 70 1230bbfda8aSnia#define kw0_BackingStore 71 1240bbfda8aSnia#define kw0_StartInButtonState 72 1250bbfda8aSnia#define kw0_NoSortIconManager 73 1260bbfda8aSnia#define kw0_NoRestartPreviousState 74 1270bbfda8aSnia#define kw0_NoDecorateTransients 75 1280bbfda8aSnia#define kw0_GrabServer 76 1290bbfda8aSnia#define kw0_DontNameDecorations 77 1300bbfda8aSnia#define kw0_StrictWinNameEncoding 78 1310bbfda8aSnia 1320bbfda8aSnia#define kws_UsePPosition 1 1330bbfda8aSnia#define kws_IconFont 2 1340bbfda8aSnia#define kws_ResizeFont 3 1350bbfda8aSnia#define kws_MenuFont 4 1360bbfda8aSnia#define kws_TitleFont 5 1370bbfda8aSnia#define kws_IconManagerFont 6 1380bbfda8aSnia#define kws_UnknownIcon 7 1390bbfda8aSnia#define kws_IconDirectory 8 1400bbfda8aSnia#define kws_MaxWindowSize 9 1410bbfda8aSnia#define kws_PixmapDirectory 10 1420bbfda8aSnia/* RandomPlacement moved because it's now a string string keyword */ 1430bbfda8aSnia#define kws_IconJustification 12 1440bbfda8aSnia#define kws_TitleJustification 13 1450bbfda8aSnia#define kws_IconRegionJustification 14 1460bbfda8aSnia#define kws_IconRegionAlignement 15 1470bbfda8aSnia#define kws_SoundHost 16 1480bbfda8aSnia#define kws_WMgrButtonStyle 17 1490bbfda8aSnia#define kws_WorkSpaceFont 18 1500bbfda8aSnia#define kws_IconifyStyle 19 1510bbfda8aSnia#define kws_IconSize 20 1520bbfda8aSnia#define kws_RplaySoundHost 21 1530bbfda8aSnia 1540bbfda8aSnia#define kwss_RandomPlacement 1 1550bbfda8aSnia 1560bbfda8aSnia#define kwn_ConstrainedMoveTime 1 1570bbfda8aSnia#define kwn_MoveDelta 2 1580bbfda8aSnia#define kwn_XorValue 3 1590bbfda8aSnia#define kwn_FramePadding 4 1600bbfda8aSnia#define kwn_TitlePadding 5 1610bbfda8aSnia#define kwn_ButtonIndent 6 1620bbfda8aSnia#define kwn_BorderWidth 7 1630bbfda8aSnia#define kwn_IconBorderWidth 8 1640bbfda8aSnia#define kwn_TitleButtonBorderWidth 9 1650bbfda8aSnia#define kwn_RaiseDelay 10 1660bbfda8aSnia#define kwn_TransientOnTop 11 1670bbfda8aSnia#define kwn_OpaqueMoveThreshold 12 1680bbfda8aSnia#define kwn_OpaqueResizeThreshold 13 1690bbfda8aSnia#define kwn_WMgrVertButtonIndent 14 1700bbfda8aSnia#define kwn_WMgrHorizButtonIndent 15 1710bbfda8aSnia#define kwn_ClearShadowContrast 16 1720bbfda8aSnia#define kwn_DarkShadowContrast 17 1730bbfda8aSnia#define kwn_WMgrButtonShadowDepth 18 1740bbfda8aSnia#define kwn_MaxIconTitleWidth 19 1750bbfda8aSnia#define kwn_AnimationSpeed 20 1760bbfda8aSnia#define kwn_ThreeDBorderWidth 21 1770bbfda8aSnia#define kwn_MoveOffResistance 22 1780bbfda8aSnia#define kwn_BorderShadowDepth 23 1790bbfda8aSnia#define kwn_TitleShadowDepth 24 1800bbfda8aSnia#define kwn_TitleButtonShadowDepth 25 1810bbfda8aSnia#define kwn_MenuShadowDepth 26 1820bbfda8aSnia#define kwn_IconManagerShadowDepth 27 1830bbfda8aSnia#define kwn_MovePackResistance 28 1840bbfda8aSnia#define kwn_XMoveGrid 29 1850bbfda8aSnia#define kwn_YMoveGrid 30 1860bbfda8aSnia#define kwn_OpenWindowTimeout 31 1870bbfda8aSnia#define kwn_RaiseOnClickButton 32 1880bbfda8aSnia 1890bbfda8aSnia#define kwn_BorderTop 33 1900bbfda8aSnia#define kwn_BorderBottom 34 1910bbfda8aSnia#define kwn_BorderLeft 35 1920bbfda8aSnia#define kwn_BorderRight 36 1930bbfda8aSnia 1940bbfda8aSnia#define kwcl_BorderColor 1 1950bbfda8aSnia#define kwcl_IconManagerHighlight 2 1960bbfda8aSnia#define kwcl_BorderTileForeground 3 1970bbfda8aSnia#define kwcl_BorderTileBackground 4 1980bbfda8aSnia#define kwcl_TitleForeground 5 1990bbfda8aSnia#define kwcl_TitleBackground 6 2000bbfda8aSnia#define kwcl_IconForeground 7 2010bbfda8aSnia#define kwcl_IconBackground 8 2020bbfda8aSnia#define kwcl_IconBorderColor 9 2030bbfda8aSnia#define kwcl_IconManagerForeground 10 2040bbfda8aSnia#define kwcl_IconManagerBackground 11 2050bbfda8aSnia#define kwcl_MapWindowBackground 12 2060bbfda8aSnia#define kwcl_MapWindowForeground 13 2070bbfda8aSnia 2080bbfda8aSnia#define kwc_DefaultForeground 1 2090bbfda8aSnia#define kwc_DefaultBackground 2 2100bbfda8aSnia#define kwc_MenuForeground 3 2110bbfda8aSnia#define kwc_MenuBackground 4 2120bbfda8aSnia#define kwc_MenuTitleForeground 5 2130bbfda8aSnia#define kwc_MenuTitleBackground 6 2140bbfda8aSnia#define kwc_MenuShadowColor 7 2150bbfda8aSnia 2160bbfda8aSnia 2170bbfda8aSnia/* 2180bbfda8aSnia * The following is sorted alphabetically according to name (which must be 2190bbfda8aSnia * in lowercase and only contain the letters a-z). It is fed to a binary 2200bbfda8aSnia * search to parse keywords. 2210bbfda8aSnia */ 2220bbfda8aSniastatic const TwmKeyword keytable[] = { 2230bbfda8aSnia { "a", ALTER, 0 }, 2240bbfda8aSnia { "all", ALL, 0 }, 2250bbfda8aSnia { "alter", ALTER, 0 }, 2260bbfda8aSnia { "alwaysontop", ALWAYS_ON_TOP, 0 }, 2270bbfda8aSnia { "alwaysshowwindowwhenmovingfromworkspacemanager", KEYWORD, kw0_ShowWinWhenMovingInWmgr }, 2280bbfda8aSnia { "alwayssqueezetogravity", ALWAYSSQUEEZETOGRAVITY, 0 }, 2290bbfda8aSnia { "animationspeed", NKEYWORD, kwn_AnimationSpeed }, 2300bbfda8aSnia { "autofocustotransients", KEYWORD, kw0_AutoFocusToTransients }, /* kai */ 2310bbfda8aSnia { "autolower", AUTO_LOWER, 0 }, 2320bbfda8aSnia { "autooccupy", KEYWORD, kw0_AutoOccupy }, 2330bbfda8aSnia { "autopopup", AUTO_POPUP, 0 }, 2340bbfda8aSnia { "autopriority", KEYWORD, kw0_AutoPriority }, 2350bbfda8aSnia { "autoraise", AUTO_RAISE, 0 }, 2360bbfda8aSnia { "autoraiseicons", KEYWORD, kw0_AutoRaiseIcons }, 2370bbfda8aSnia { "autorelativeresize", KEYWORD, kw0_AutoRelativeResize }, 2380bbfda8aSnia { "autosqueeze", AUTOSQUEEZE, 0 }, 2390bbfda8aSnia { "backingstore", KEYWORD, kw0_BackingStore }, 2400bbfda8aSnia { "benicetocolormap", KEYWORD, kw0_BeNiceToColormap }, 2410bbfda8aSnia { "borderbottom", NKEYWORD, kwn_BorderBottom }, 2420bbfda8aSnia { "bordercolor", CLKEYWORD, kwcl_BorderColor }, 2430bbfda8aSnia { "borderleft", NKEYWORD, kwn_BorderLeft }, 2440bbfda8aSnia { "borderresizecursors", KEYWORD, kw0_BorderResizeCursors }, 2450bbfda8aSnia { "borderright", NKEYWORD, kwn_BorderRight }, 2460bbfda8aSnia { "bordershadowdepth", NKEYWORD, kwn_BorderShadowDepth }, 2470bbfda8aSnia { "bordertilebackground", CLKEYWORD, kwcl_BorderTileBackground }, 2480bbfda8aSnia { "bordertileforeground", CLKEYWORD, kwcl_BorderTileForeground }, 2490bbfda8aSnia { "bordertop", NKEYWORD, kwn_BorderTop }, 2500bbfda8aSnia { "borderwidth", NKEYWORD, kwn_BorderWidth }, 2510bbfda8aSnia { "button", BUTTON, 0 }, 2520bbfda8aSnia { "buttonindent", NKEYWORD, kwn_ButtonIndent }, 2530bbfda8aSnia { "c", CONTROL, 0 }, 2540bbfda8aSnia { "center", SIJENUM, SIJ_CENTER }, 2550bbfda8aSnia { "centerfeedbackwindow", KEYWORD, kw0_CenterFeedbackWindow }, 2560bbfda8aSnia { "changeworkspacefunction", CHANGE_WORKSPACE_FUNCTION, 0 }, 2570bbfda8aSnia { "clearshadowcontrast", NKEYWORD, kwn_ClearShadowContrast }, 2580bbfda8aSnia { "clicktofocus", KEYWORD, kw0_ClickToFocus }, 2590bbfda8aSnia { "clientborderwidth", KEYWORD, kw0_ClientBorderWidth }, 2600bbfda8aSnia { "color", COLOR, 0 }, 2610bbfda8aSnia { "constrainedmovetime", NKEYWORD, kwn_ConstrainedMoveTime }, 2620bbfda8aSnia { "control", CONTROL, 0 }, 2630bbfda8aSnia { "cursors", CURSORS, 0 }, 2640bbfda8aSnia { "darkshadowcontrast", NKEYWORD, kwn_DarkShadowContrast }, 2650bbfda8aSnia { "decoratetransients", KEYWORD, kw0_DecorateTransients }, 2660bbfda8aSnia { "defaultbackground", CKEYWORD, kwc_DefaultBackground }, 2670bbfda8aSnia { "defaultforeground", CKEYWORD, kwc_DefaultForeground }, 2680bbfda8aSnia { "defaultfunction", DEFAULT_FUNCTION, 0 }, 2690bbfda8aSnia { "deiconifyfunction", DEICONIFY_FUNCTION, 0 }, 2700bbfda8aSnia { "destroy", KILL, 0 }, 2710bbfda8aSnia { "donticonifybyunmapping", DONT_ICONIFY_BY_UNMAPPING, 0 }, 2720bbfda8aSnia { "dontmoveoff", KEYWORD, kw0_DontMoveOff }, 2730bbfda8aSnia { "dontnamedecorations", KEYWORD, kw0_DontNameDecorations }, 2740bbfda8aSnia { "dontpaintrootwindow", KEYWORD, kw0_DontPaintRootWindow }, 2750bbfda8aSnia { "dontsave", DONT_SAVE, 0 }, 2760bbfda8aSnia { "dontsetinactive", DONTSETINACTIVE, 0 }, 2770bbfda8aSnia { "dontshowwelcomewindow", KEYWORD, kw0_DontShowWelcomeWindow }, 2780bbfda8aSnia { "dontsqueezetitle", DONT_SQUEEZE_TITLE, 0 }, 2790bbfda8aSnia { "donttoggleworkspacemanagerstate", KEYWORD, kw0_DontToggleWorkspacemanagerState}, 2800bbfda8aSnia { "dontwarpcursorinwmap", KEYWORD, kw0_DontWarpCursorInWMap }, 2810bbfda8aSnia { "east", GRAVITY, GRAV_EAST }, 2820bbfda8aSnia { "ewmhignore", EWMH_IGNORE, 0 }, 2830bbfda8aSnia { "f", FRAME, 0 }, 2840bbfda8aSnia { "forcefocus", FORCE_FOCUS, 0 }, 2850bbfda8aSnia { "forceicons", KEYWORD, kw0_ForceIcons }, 2860bbfda8aSnia { "frame", FRAME, 0 }, 2870bbfda8aSnia { "framepadding", NKEYWORD, kwn_FramePadding }, 2880bbfda8aSnia { "function", FUNCTION, 0 }, 2890bbfda8aSnia { "grabserver", KEYWORD, kw0_GrabServer }, 2900bbfda8aSnia { "i", ICON, 0 }, 2910bbfda8aSnia { "icon", ICON, 0 }, 2920bbfda8aSnia { "iconbackground", CLKEYWORD, kwcl_IconBackground }, 2930bbfda8aSnia { "iconbordercolor", CLKEYWORD, kwcl_IconBorderColor }, 2940bbfda8aSnia { "iconborderwidth", NKEYWORD, kwn_IconBorderWidth }, 2950bbfda8aSnia { "icondirectory", SKEYWORD, kws_IconDirectory }, 2960bbfda8aSnia { "iconfont", SKEYWORD, kws_IconFont }, 2970bbfda8aSnia { "iconforeground", CLKEYWORD, kwcl_IconForeground }, 2980bbfda8aSnia { "iconifybyunmapping", ICONIFY_BY_UNMAPPING, 0 }, 2990bbfda8aSnia { "iconifyfunction", ICONIFY_FUNCTION, 0 }, 3000bbfda8aSnia { "iconifystyle", SKEYWORD, kws_IconifyStyle }, 3010bbfda8aSnia { "iconjustification", SKEYWORD, kws_IconJustification }, 3020bbfda8aSnia { "iconmanagerbackground", CLKEYWORD, kwcl_IconManagerBackground }, 3030bbfda8aSnia { "iconmanagerdontshow", ICONMGR_NOSHOW, 0 }, 3040bbfda8aSnia { "iconmanagerfont", SKEYWORD, kws_IconManagerFont }, 3050bbfda8aSnia { "iconmanagerforeground", CLKEYWORD, kwcl_IconManagerForeground }, 3060bbfda8aSnia { "iconmanagergeometry", ICONMGR_GEOMETRY, 0 }, 3070bbfda8aSnia { "iconmanagerhighlight", CLKEYWORD, kwcl_IconManagerHighlight }, 3080bbfda8aSnia { "iconmanagers", ICONMGRS, 0 }, 3090bbfda8aSnia { "iconmanagershadowdepth", NKEYWORD, kwn_IconManagerShadowDepth }, 3100bbfda8aSnia { "iconmanagershow", ICONMGR_SHOW, 0 }, 3110bbfda8aSnia { "iconmenudontshow", ICONMENU_DONTSHOW, 0 }, 3120bbfda8aSnia { "iconmgr", ICONMGR, 0 }, 3130bbfda8aSnia { "iconregion", ICON_REGION, 0 }, 3140bbfda8aSnia { "iconregionalignement", SKEYWORD, kws_IconRegionAlignement }, 3150bbfda8aSnia { "iconregionjustification", SKEYWORD, kws_IconRegionJustification }, 3160bbfda8aSnia { "icons", ICONS, 0 }, 3170bbfda8aSnia { "iconsize", SKEYWORD, kws_IconSize }, 3180bbfda8aSnia { "ignorecaseinmenuselection", KEYWORD, kw0_IgnoreCaseInMenuSelection }, 3190bbfda8aSnia { "ignorelockmodifier", KEYWORD, kw0_IgnoreLockModifier }, 3200bbfda8aSnia { "ignoremodifier", IGNOREMODIFIER, 0 }, 3210bbfda8aSnia { "ignoretransient", IGNORE_TRANSIENT, 0 }, 3220bbfda8aSnia { "interpolatemenucolors", KEYWORD, kw0_InterpolateMenuColors }, 3230bbfda8aSnia { "l", LOCK, 0 }, 3240bbfda8aSnia { "left", SIJENUM, SIJ_LEFT }, 3250bbfda8aSnia { "lefttitlebutton", LEFT_TITLEBUTTON, 0 }, 3260bbfda8aSnia { "lock", LOCK, 0 }, 3270bbfda8aSnia { "m", META, 0 }, 3280bbfda8aSnia { "maketitle", MAKE_TITLE, 0 }, 3290bbfda8aSnia { "mapwindowbackground", CLKEYWORD, kwcl_MapWindowBackground }, 3300bbfda8aSnia { "mapwindowcurrentworkspace", MAPWINDOWCURRENTWORKSPACE, 0}, 3310bbfda8aSnia { "mapwindowdefaultworkspace", MAPWINDOWDEFAULTWORKSPACE, 0}, 3320bbfda8aSnia { "mapwindowforeground", CLKEYWORD, kwcl_MapWindowForeground }, 3330bbfda8aSnia { "maxicontitlewidth", NKEYWORD, kwn_MaxIconTitleWidth }, 3340bbfda8aSnia { "maxwindowsize", SKEYWORD, kws_MaxWindowSize }, 3350bbfda8aSnia { "menu", MENU, 0 }, 3360bbfda8aSnia { "menubackground", CKEYWORD, kwc_MenuBackground }, 3370bbfda8aSnia { "menufont", SKEYWORD, kws_MenuFont }, 3380bbfda8aSnia { "menuforeground", CKEYWORD, kwc_MenuForeground }, 3390bbfda8aSnia { "menushadowcolor", CKEYWORD, kwc_MenuShadowColor }, 3400bbfda8aSnia { "menushadowdepth", NKEYWORD, kwn_MenuShadowDepth }, 3410bbfda8aSnia { "menutitlebackground", CKEYWORD, kwc_MenuTitleBackground }, 3420bbfda8aSnia { "menutitleforeground", CKEYWORD, kwc_MenuTitleForeground }, 3430bbfda8aSnia { "meta", META, 0 }, 3440bbfda8aSnia { "mod", META, 0 }, /* fake it */ 3450bbfda8aSnia { "monochrome", MONOCHROME, 0 }, 3460bbfda8aSnia { "move", MOVE, 0 }, 3470bbfda8aSnia { "movedelta", NKEYWORD, kwn_MoveDelta }, 3480bbfda8aSnia { "moveoffresistance", NKEYWORD, kwn_MoveOffResistance }, 3490bbfda8aSnia { "movepackresistance", NKEYWORD, kwn_MovePackResistance }, 3500bbfda8aSnia { "mwmignore", MWM_IGNORE, 0 }, 3510bbfda8aSnia { "nobackingstore", KEYWORD, kw0_NoBackingStore }, 3520bbfda8aSnia { "noborder", NO_BORDER, 0 }, 3530bbfda8aSnia { "nocasesensitive", KEYWORD, kw0_NoCaseSensitive }, 3540bbfda8aSnia { "nodecoratetransients", KEYWORD, kw0_NoDecorateTransients }, 3550bbfda8aSnia { "nodefaults", KEYWORD, kw0_NoDefaults }, 3560bbfda8aSnia { "nograbserver", KEYWORD, kw0_NoGrabServer }, 3570bbfda8aSnia { "nohighlight", NO_HILITE, 0 }, 3580bbfda8aSnia { "noiconmanagerfocus", KEYWORD, kw0_NoIconManagerFocus }, 3590bbfda8aSnia { "noiconmanagers", KEYWORD, kw0_NoIconManagers }, 3600bbfda8aSnia { "noicontitle", NO_ICON_TITLE, 0 }, 3610bbfda8aSnia { "noimagesinworkspacemanager", KEYWORD, kw0_NoImagesInWorkSpaceManager }, 3620bbfda8aSnia { "nomenushadows", KEYWORD, kw0_NoMenuShadows }, 3630bbfda8aSnia { "noopaquemove", NOOPAQUEMOVE, 0 }, 3640bbfda8aSnia { "noopaqueresize", NOOPAQUERESIZE, 0 }, 3650bbfda8aSnia { "noraiseondeiconify", KEYWORD, kw0_NoRaiseOnDeiconify }, 3660bbfda8aSnia { "noraiseonmove", KEYWORD, kw0_NoRaiseOnMove }, 3670bbfda8aSnia { "noraiseonresize", KEYWORD, kw0_NoRaiseOnResize }, 3680bbfda8aSnia { "noraiseonwarp", KEYWORD, kw0_NoRaiseOnWarp }, 3690bbfda8aSnia { "norestartpreviousstate", KEYWORD, kw0_NoRestartPreviousState }, 3700bbfda8aSnia { "north", GRAVITY, GRAV_NORTH }, 3710bbfda8aSnia { "nosaveunders", KEYWORD, kw0_NoSaveUnders }, 3720bbfda8aSnia { "noshowoccupyall", KEYWORD, kw0_NoShowOccupyAll }, 3730bbfda8aSnia { "nosorticonmanager", KEYWORD, kw0_NoSortIconManager }, 3740bbfda8aSnia { "nostackmode", NO_STACKMODE, 0 }, 3750bbfda8aSnia { "notitle", NO_TITLE, 0 }, 3760bbfda8aSnia { "notitlefocus", KEYWORD, kw0_NoTitleFocus }, 3770bbfda8aSnia { "notitlehighlight", NO_TITLE_HILITE, 0 }, 3780bbfda8aSnia { "nowarptomenutitle", KEYWORD, kw0_NoWarpToMenuTitle }, 3790bbfda8aSnia { "occupy", OCCUPYLIST, 0 }, 3800bbfda8aSnia { "occupyall", OCCUPYALL, 0 }, 3810bbfda8aSnia { "ontoppriority", ON_TOP_PRIORITY, 0 }, 3820bbfda8aSnia { "opaquemove", OPAQUEMOVE, 0 }, 3830bbfda8aSnia { "opaquemovethreshold", NKEYWORD, kwn_OpaqueMoveThreshold }, 3840bbfda8aSnia { "opaqueresize", OPAQUERESIZE, 0 }, 3850bbfda8aSnia { "opaqueresizethreshold", NKEYWORD, kwn_OpaqueResizeThreshold }, 3860bbfda8aSnia { "openwindowtimeout", NKEYWORD, kwn_OpenWindowTimeout }, 3870bbfda8aSnia { "packnewwindows", KEYWORD, kw0_PackNewWindows }, 3880bbfda8aSnia { "pixmapdirectory", SKEYWORD, kws_PixmapDirectory }, 3890bbfda8aSnia { "pixmaps", PIXMAPS, 0 }, 3900bbfda8aSnia { "prioritynotswitching", PRIORITY_NOT_SWITCHING, 0 }, 3910bbfda8aSnia { "priorityswitching", PRIORITY_SWITCHING, 0 }, 3920bbfda8aSnia { "r", ROOT, 0 }, 3930bbfda8aSnia { "raisedelay", NKEYWORD, kwn_RaiseDelay }, 3940bbfda8aSnia { "raiseonclick", KEYWORD, kw0_RaiseOnClick }, 3950bbfda8aSnia { "raiseonclickbutton", NKEYWORD, kwn_RaiseOnClickButton }, 3960bbfda8aSnia { "raiseonwarp", KEYWORD, kw0_RaiseOnWarp }, 3970bbfda8aSnia { "raisewhenautounsqueeze", KEYWORD, kw0_RaiseWhenAutoUnSqueeze }, 3980bbfda8aSnia { "randomplacement", SSKEYWORD, kwss_RandomPlacement }, 3990bbfda8aSnia { "reallymoveinworkspacemanager", KEYWORD, kw0_ReallyMoveInWorkspaceManager }, 4000bbfda8aSnia { "resize", RESIZE, 0 }, 4010bbfda8aSnia { "resizefont", SKEYWORD, kws_ResizeFont }, 4020bbfda8aSnia { "restartpreviousstate", KEYWORD, kw0_RestartPreviousState }, 4030bbfda8aSnia { "reversecurrentworkspace", KEYWORD, kw0_ReverseCurrentWorkspace }, 4040bbfda8aSnia { "right", SIJENUM, SIJ_RIGHT }, 4050bbfda8aSnia { "righttitlebutton", RIGHT_TITLEBUTTON, 0 }, 4060bbfda8aSnia { "root", ROOT, 0 }, 4070bbfda8aSnia { "rplaysoundhost", SKEYWORD, kws_RplaySoundHost }, 4080bbfda8aSnia { "rplaysounds", RPLAY_SOUNDS, 0 }, 4090bbfda8aSnia { "s", SHIFT, 0 }, 4100bbfda8aSnia { "savecolor", SAVECOLOR, 0}, 4110bbfda8aSnia { "saveworkspacefocus", KEYWORD, kw0_SaveWorkspaceFocus }, 4120bbfda8aSnia { "schrinkicontitles", KEYWORD, kw0_ShrinkIconTitles }, 4130bbfda8aSnia { "select", SELECT, 0 }, 4140bbfda8aSnia { "shift", SHIFT, 0 }, 4150bbfda8aSnia { "shortallwindowsmenus", KEYWORD, kw0_ShortAllWindowsMenus }, 4160bbfda8aSnia { "showiconmanager", KEYWORD, kw0_ShowIconManager }, 4170bbfda8aSnia { "showworkspacemanager", KEYWORD, kw0_ShowWorkspaceManager }, 4180bbfda8aSnia { "shrinkicontitles", KEYWORD, kw0_ShrinkIconTitles }, 4190bbfda8aSnia { "sloppyfocus", KEYWORD, kw0_SloppyFocus }, 4200bbfda8aSnia { "sorticonmanager", KEYWORD, kw0_SortIconManager }, 4210bbfda8aSnia { "soundhost", SKEYWORD, kws_SoundHost }, 4220bbfda8aSnia { "south", GRAVITY, GRAV_SOUTH }, 4230bbfda8aSnia { "squeezetitle", SQUEEZE_TITLE, 0 }, 4240bbfda8aSnia { "starticonified", START_ICONIFIED, 0 }, 4250bbfda8aSnia { "startinbuttonstate", KEYWORD, kw0_StartInButtonState }, 4260bbfda8aSnia { "startinmapstate", KEYWORD, kw0_StartInMapState }, 4270bbfda8aSnia { "startsqueezed", STARTSQUEEZED, 0 }, 4280bbfda8aSnia { "stayupmenus", KEYWORD, kw0_StayUpMenus }, 4290bbfda8aSnia { "strictwinnameencoding", KEYWORD, kw0_StrictWinNameEncoding }, 4300bbfda8aSnia { "sunkfocuswindowtitle", KEYWORD, kw0_SunkFocusWindowTitle }, 4310bbfda8aSnia { "t", TITLE, 0 }, 4320bbfda8aSnia { "threedborderwidth", NKEYWORD, kwn_ThreeDBorderWidth }, 4330bbfda8aSnia { "title", TITLE, 0 }, 4340bbfda8aSnia { "titlebackground", CLKEYWORD, kwcl_TitleBackground }, 4350bbfda8aSnia { "titlebuttonborderwidth", NKEYWORD, kwn_TitleButtonBorderWidth }, 4360bbfda8aSnia { "titlebuttonshadowdepth", NKEYWORD, kwn_TitleButtonShadowDepth }, 4370bbfda8aSnia { "titlefont", SKEYWORD, kws_TitleFont }, 4380bbfda8aSnia { "titleforeground", CLKEYWORD, kwcl_TitleForeground }, 4390bbfda8aSnia { "titlehighlight", TITLE_HILITE, 0 }, 4400bbfda8aSnia { "titlejustification", SKEYWORD, kws_TitleJustification }, 4410bbfda8aSnia { "titlepadding", NKEYWORD, kwn_TitlePadding }, 4420bbfda8aSnia { "titleshadowdepth", NKEYWORD, kwn_TitleShadowDepth }, 4430bbfda8aSnia { "transienthasoccupation", KEYWORD, kw0_TransientHasOccupation }, 4440bbfda8aSnia { "transientontop", NKEYWORD, kwn_TransientOnTop }, 4450bbfda8aSnia { "unknownicon", SKEYWORD, kws_UnknownIcon }, 4460bbfda8aSnia { "unmapbymovingfaraway", UNMAPBYMOVINGFARAWAY, 0 }, 4470bbfda8aSnia { "usepposition", SKEYWORD, kws_UsePPosition }, 4480bbfda8aSnia { "usesunktitlepixmap", KEYWORD, kw0_UseSunkTitlePixmap }, 4490bbfda8aSnia { "usethreedborders", KEYWORD, kw0_Use3DBorders }, 4500bbfda8aSnia { "usethreediconmanagers", KEYWORD, kw0_Use3DIconManagers }, 4510bbfda8aSnia { "usethreedmenus", KEYWORD, kw0_Use3DMenus }, 4520bbfda8aSnia { "usethreedtitles", KEYWORD, kw0_Use3DTitles }, 4530bbfda8aSnia { "usethreedwmap", KEYWORD, kw0_Use3DWMap }, 4540bbfda8aSnia { "virtualscreens", VIRTUAL_SCREENS, 0 }, 4550bbfda8aSnia { "w", WINDOW, 0 }, 4560bbfda8aSnia { "wait", WAITC, 0 }, 4570bbfda8aSnia { "warpcursor", WARP_CURSOR, 0 }, 4580bbfda8aSnia { "warpondeiconify", WARP_ON_DEICONIFY, 0 }, 4590bbfda8aSnia { "warpringonscreen", KEYWORD, kw0_WarpRingOnScreen }, 4600bbfda8aSnia { "warptodefaultmenuentry", KEYWORD, kw0_WarpToDefaultMenuEntry }, 4610bbfda8aSnia { "warpunmapped", KEYWORD, kw0_WarpUnmapped }, 4620bbfda8aSnia { "west", GRAVITY, GRAV_WEST }, 4630bbfda8aSnia { "window", WINDOW, 0 }, 4640bbfda8aSnia { "windowbox", WINDOW_BOX, 0 }, 4650bbfda8aSnia { "windowfunction", WINDOW_FUNCTION, 0 }, 4660bbfda8aSnia { "windowgeometries", WINDOW_GEOMETRIES, 0 }, 4670bbfda8aSnia { "windowregion", WINDOW_REGION, 0 }, 4680bbfda8aSnia { "windowring", WINDOW_RING, 0 }, 4690bbfda8aSnia { "windowringexclude", WINDOW_RING_EXCLUDE, 0}, 4700bbfda8aSnia { "wmgrbuttonshadowdepth", NKEYWORD, kwn_WMgrButtonShadowDepth }, 4710bbfda8aSnia { "wmgrbuttonstyle", SKEYWORD, kws_WMgrButtonStyle }, 4720bbfda8aSnia { "wmgrhorizbuttonindent", NKEYWORD, kwn_WMgrHorizButtonIndent }, 4730bbfda8aSnia { "wmgrvertbuttonindent", NKEYWORD, kwn_WMgrVertButtonIndent }, 4740bbfda8aSnia { "workspace", WORKSPACE, 0 }, 4750bbfda8aSnia { "workspacefont", SKEYWORD, kws_WorkSpaceFont }, 4760bbfda8aSnia { "workspacemanagergeometry", WORKSPCMGR_GEOMETRY, 0 }, 4770bbfda8aSnia { "workspaces", WORKSPACES, 0}, 4780bbfda8aSnia { "xmovegrid", NKEYWORD, kwn_XMoveGrid }, 4790bbfda8aSnia { "xorvalue", NKEYWORD, kwn_XorValue }, 4800bbfda8aSnia { "xpmicondirectory", SKEYWORD, kws_PixmapDirectory }, 4810bbfda8aSnia { "ymovegrid", NKEYWORD, kwn_YMoveGrid }, 4820bbfda8aSnia { "zoom", ZOOM, 0 }, 4830bbfda8aSnia}; 4840bbfda8aSnia 4850bbfda8aSniastatic const size_t numkeywords = (sizeof(keytable) / sizeof(keytable[0])); 4860bbfda8aSnia 4870bbfda8aSnia 4880bbfda8aSnia/* 4890bbfda8aSnia * The lookup table for functions is generated. 4900bbfda8aSnia */ 4910bbfda8aSnia#include "functions_parse_table.h" 4920bbfda8aSnia 4930bbfda8aSnia 4940bbfda8aSnia 4950bbfda8aSniastatic int 4960bbfda8aSniakt_compare(const void *lhs, const void *rhs) 4970bbfda8aSnia{ 4980bbfda8aSnia const TwmKeyword *l = lhs; 4990bbfda8aSnia const TwmKeyword *r = rhs; 5000bbfda8aSnia return strcasecmp(l->name, r->name); 5010bbfda8aSnia} 5020bbfda8aSnia 5030bbfda8aSniaint 5040bbfda8aSniaparse_keyword(const char *s, int *nump) 5050bbfda8aSnia{ 5060bbfda8aSnia const TwmKeyword srch = { .name = s }; 5070bbfda8aSnia TwmKeyword *ret; 5080bbfda8aSnia const TwmKeyword *srchtab; 5090bbfda8aSnia size_t nstab; 5100bbfda8aSnia 5110bbfda8aSnia /* Guard; nothing can't be a valid keyword */ 5120bbfda8aSnia if(s == NULL || strlen(s) < 1) { 5130bbfda8aSnia return ERRORTOKEN; 5140bbfda8aSnia } 5150bbfda8aSnia 5160bbfda8aSnia /* 5170bbfda8aSnia * Functions are in their own table, so check for them there. 5180bbfda8aSnia * 5190bbfda8aSnia * This is safe as long as (strlen >= 1), which we already checked. 5200bbfda8aSnia */ 5210bbfda8aSnia if(s[0] == 'f' && s[1] == '.') { 5220bbfda8aSnia srchtab = funckeytable; 5230bbfda8aSnia nstab = numfunckeywords; 5240bbfda8aSnia } 5250bbfda8aSnia else { 5260bbfda8aSnia srchtab = keytable; 5270bbfda8aSnia nstab = numkeywords; 5280bbfda8aSnia } 5290bbfda8aSnia 5300bbfda8aSnia /* Find it */ 5310bbfda8aSnia ret = bsearch(&srch, srchtab, nstab, sizeof(TwmKeyword), kt_compare); 5320bbfda8aSnia if(ret) { 5330bbfda8aSnia *nump = ret->subnum; 5340bbfda8aSnia return ret->value; 5350bbfda8aSnia } 5360bbfda8aSnia 5370bbfda8aSnia return ERRORTOKEN; 5380bbfda8aSnia} 5390bbfda8aSnia 5400bbfda8aSnia 5410bbfda8aSnia/* 5420bbfda8aSnia * Simple tester function 5430bbfda8aSnia */ 5440bbfda8aSniavoid 5450bbfda8aSniachk_keytable_order(void) 5460bbfda8aSnia{ 5470bbfda8aSnia int i; 5480bbfda8aSnia 5490bbfda8aSnia for(i = 0 ; i < (numkeywords - 1) ; i++) { 5500bbfda8aSnia if(strcasecmp(keytable[i].name, keytable[i + 1].name) >= 0) { 5510bbfda8aSnia fprintf(stderr, "%s: INTERNAL ERROR: keytable sorting: " 5520bbfda8aSnia "'%s' >= '%s'\n", ProgramName, 5530bbfda8aSnia keytable[i].name, keytable[i + 1].name); 5540bbfda8aSnia } 5550bbfda8aSnia } 5560bbfda8aSnia 5570bbfda8aSnia for(i = 0 ; i < (numfunckeywords - 1) ; i++) { 5580bbfda8aSnia if(strcasecmp(funckeytable[i].name, funckeytable[i + 1].name) >= 0) { 5590bbfda8aSnia fprintf(stderr, "%s: INTERNAL ERROR: funckeytable sorting: " 5600bbfda8aSnia "'%s' >= '%s'\n", ProgramName, 5610bbfda8aSnia funckeytable[i].name, funckeytable[i + 1].name); 5620bbfda8aSnia } 5630bbfda8aSnia } 5640bbfda8aSnia} 5650bbfda8aSnia 5660bbfda8aSnia 5670bbfda8aSnia 5680bbfda8aSnia/* 5690bbfda8aSnia * action routines called by grammar 5700bbfda8aSnia */ 5710bbfda8aSnia 5720bbfda8aSniabool 5730bbfda8aSniado_single_keyword(int keyword) 5740bbfda8aSnia{ 5750bbfda8aSnia switch(keyword) { 5760bbfda8aSnia case kw0_NoDefaults: 5770bbfda8aSnia Scr->NoDefaults = true; 5780bbfda8aSnia return true; 5790bbfda8aSnia 5800bbfda8aSnia case kw0_AutoRelativeResize: 5810bbfda8aSnia Scr->AutoRelativeResize = true; 5820bbfda8aSnia return true; 5830bbfda8aSnia 5840bbfda8aSnia case kw0_ForceIcons: 5850bbfda8aSnia if(Scr->FirstTime) { 5860bbfda8aSnia Scr->ForceIcon = true; 5870bbfda8aSnia } 5880bbfda8aSnia return true; 5890bbfda8aSnia 5900bbfda8aSnia case kw0_NoIconManagers: 5910bbfda8aSnia Scr->NoIconManagers = true; 5920bbfda8aSnia return true; 5930bbfda8aSnia 5940bbfda8aSnia case kw0_InterpolateMenuColors: 5950bbfda8aSnia if(Scr->FirstTime) { 5960bbfda8aSnia Scr->InterpolateMenuColors = true; 5970bbfda8aSnia } 5980bbfda8aSnia return true; 5990bbfda8aSnia 6000bbfda8aSnia case kw0_SortIconManager: 6010bbfda8aSnia if(Scr->FirstTime) { 6020bbfda8aSnia Scr->SortIconMgr = true; 6030bbfda8aSnia } 6040bbfda8aSnia return true; 6050bbfda8aSnia 6060bbfda8aSnia case kw0_NoSortIconManager: 6070bbfda8aSnia if(Scr->FirstTime) { 6080bbfda8aSnia Scr->SortIconMgr = false; 6090bbfda8aSnia } 6100bbfda8aSnia return true; 6110bbfda8aSnia 6120bbfda8aSnia case kw0_GrabServer: 6130bbfda8aSnia Scr->NoGrabServer = false; 6140bbfda8aSnia return true; 6150bbfda8aSnia 6160bbfda8aSnia case kw0_NoGrabServer: 6170bbfda8aSnia Scr->NoGrabServer = true; 6180bbfda8aSnia return true; 6190bbfda8aSnia 6200bbfda8aSnia case kw0_NoMenuShadows: 6210bbfda8aSnia if(Scr->FirstTime) { 6220bbfda8aSnia Scr->Shadow = false; 6230bbfda8aSnia } 6240bbfda8aSnia return true; 6250bbfda8aSnia 6260bbfda8aSnia case kw0_NoRaiseOnMove: 6270bbfda8aSnia if(Scr->FirstTime) { 6280bbfda8aSnia Scr->NoRaiseMove = true; 6290bbfda8aSnia } 6300bbfda8aSnia return true; 6310bbfda8aSnia 6320bbfda8aSnia case kw0_NoRaiseOnResize: 6330bbfda8aSnia if(Scr->FirstTime) { 6340bbfda8aSnia Scr->NoRaiseResize = true; 6350bbfda8aSnia } 6360bbfda8aSnia return true; 6370bbfda8aSnia 6380bbfda8aSnia case kw0_NoRaiseOnDeiconify: 6390bbfda8aSnia if(Scr->FirstTime) { 6400bbfda8aSnia Scr->NoRaiseDeicon = true; 6410bbfda8aSnia } 6420bbfda8aSnia return true; 6430bbfda8aSnia 6440bbfda8aSnia case kw0_DontMoveOff: 6450bbfda8aSnia Scr->DontMoveOff = true; 6460bbfda8aSnia return true; 6470bbfda8aSnia 6480bbfda8aSnia case kw0_NoBackingStore: 6490bbfda8aSnia Scr->BackingStore = false; 6500bbfda8aSnia return true; 6510bbfda8aSnia 6520bbfda8aSnia case kw0_BackingStore: 6530bbfda8aSnia Scr->BackingStore = true; 6540bbfda8aSnia return true; 6550bbfda8aSnia 6560bbfda8aSnia case kw0_NoSaveUnders: 6570bbfda8aSnia Scr->SaveUnder = false; 6580bbfda8aSnia return true; 6590bbfda8aSnia 6600bbfda8aSnia // XXX Shouldn't these be in Scr too? 6610bbfda8aSnia case kw0_RestartPreviousState: 6620bbfda8aSnia RestartPreviousState = true; 6630bbfda8aSnia return true; 6640bbfda8aSnia 6650bbfda8aSnia case kw0_NoRestartPreviousState: 6660bbfda8aSnia RestartPreviousState = false; 6670bbfda8aSnia return true; 6680bbfda8aSnia 6690bbfda8aSnia case kw0_ClientBorderWidth: 6700bbfda8aSnia if(Scr->FirstTime) { 6710bbfda8aSnia Scr->ClientBorderWidth = true; 6720bbfda8aSnia } 6730bbfda8aSnia return true; 6740bbfda8aSnia 6750bbfda8aSnia case kw0_NoTitleFocus: 6760bbfda8aSnia Scr->TitleFocus = false; 6770bbfda8aSnia return true; 6780bbfda8aSnia 6790bbfda8aSnia case kw0_DecorateTransients: 6800bbfda8aSnia Scr->DecorateTransients = true; 6810bbfda8aSnia return true; 6820bbfda8aSnia 6830bbfda8aSnia case kw0_NoDecorateTransients: 6840bbfda8aSnia Scr->DecorateTransients = false; 6850bbfda8aSnia return true; 6860bbfda8aSnia 6870bbfda8aSnia case kw0_ShowIconManager: 6880bbfda8aSnia Scr->ShowIconManager = true; 6890bbfda8aSnia return true; 6900bbfda8aSnia 6910bbfda8aSnia case kw0_ShowWorkspaceManager: 6920bbfda8aSnia Scr->ShowWorkspaceManager = true; 6930bbfda8aSnia return true; 6940bbfda8aSnia 6950bbfda8aSnia case kw0_StartInButtonState: 6960bbfda8aSnia Scr->workSpaceMgr.initialstate = WMS_buttons; 6970bbfda8aSnia return true; 6980bbfda8aSnia 6990bbfda8aSnia case kw0_StartInMapState: 7000bbfda8aSnia Scr->workSpaceMgr.initialstate = WMS_map; 7010bbfda8aSnia return true; 7020bbfda8aSnia 7030bbfda8aSnia case kw0_NoShowOccupyAll: 7040bbfda8aSnia Scr->workSpaceMgr.noshowoccupyall = true; 7050bbfda8aSnia return true; 7060bbfda8aSnia 7070bbfda8aSnia case kw0_AutoOccupy: 7080bbfda8aSnia Scr->AutoOccupy = true; 7090bbfda8aSnia return true; 7100bbfda8aSnia 7110bbfda8aSnia case kw0_AutoPriority: 7120bbfda8aSnia Scr->AutoPriority = true; 7130bbfda8aSnia return true; 7140bbfda8aSnia 7150bbfda8aSnia case kw0_TransientHasOccupation: 7160bbfda8aSnia Scr->TransientHasOccupation = true; 7170bbfda8aSnia return true; 7180bbfda8aSnia 7190bbfda8aSnia case kw0_DontPaintRootWindow: 7200bbfda8aSnia Scr->DontPaintRootWindow = true; 7210bbfda8aSnia return true; 7220bbfda8aSnia 7230bbfda8aSnia case kw0_UseSunkTitlePixmap: 7240bbfda8aSnia Scr->UseSunkTitlePixmap = true; 7250bbfda8aSnia return true; 7260bbfda8aSnia 7270bbfda8aSnia case kw0_Use3DBorders: 7280bbfda8aSnia Scr->use3Dborders = true; 7290bbfda8aSnia return true; 7300bbfda8aSnia 7310bbfda8aSnia case kw0_Use3DIconManagers: 7320bbfda8aSnia Scr->use3Diconmanagers = true; 7330bbfda8aSnia return true; 7340bbfda8aSnia 7350bbfda8aSnia case kw0_Use3DMenus: 7360bbfda8aSnia Scr->use3Dmenus = true; 7370bbfda8aSnia return true; 7380bbfda8aSnia 7390bbfda8aSnia case kw0_Use3DTitles: 7400bbfda8aSnia Scr->use3Dtitles = true; 7410bbfda8aSnia return true; 7420bbfda8aSnia 7430bbfda8aSnia case kw0_Use3DWMap: 7440bbfda8aSnia Scr->use3Dwmap = true; 7450bbfda8aSnia return true; 7460bbfda8aSnia 7470bbfda8aSnia case kw0_SunkFocusWindowTitle: 7480bbfda8aSnia Scr->SunkFocusWindowTitle = true; 7490bbfda8aSnia return true; 7500bbfda8aSnia 7510bbfda8aSnia case kw0_BeNiceToColormap: 7520bbfda8aSnia Scr->BeNiceToColormap = true; 7530bbfda8aSnia return true; 7540bbfda8aSnia 7550bbfda8aSnia case kw0_BorderResizeCursors: 7560bbfda8aSnia Scr->BorderCursors = true; 7570bbfda8aSnia return true; 7580bbfda8aSnia 7590bbfda8aSnia case kw0_NoCaseSensitive: 7600bbfda8aSnia Scr->CaseSensitive = false; 7610bbfda8aSnia return true; 7620bbfda8aSnia 7630bbfda8aSnia case kw0_NoRaiseOnWarp: 7640bbfda8aSnia Scr->RaiseOnWarp = false; 7650bbfda8aSnia return true; 7660bbfda8aSnia 7670bbfda8aSnia case kw0_RaiseOnWarp: 7680bbfda8aSnia Scr->RaiseOnWarp = true; 7690bbfda8aSnia return true; 7700bbfda8aSnia 7710bbfda8aSnia case kw0_WarpUnmapped: 7720bbfda8aSnia Scr->WarpUnmapped = true; 7730bbfda8aSnia return true; 7740bbfda8aSnia 7750bbfda8aSnia case kw0_WarpRingOnScreen: 7760bbfda8aSnia Scr->WarpRingAnyWhere = false; 7770bbfda8aSnia return true; 7780bbfda8aSnia 7790bbfda8aSnia case kw0_NoIconManagerFocus: 7800bbfda8aSnia Scr->IconManagerFocus = false; 7810bbfda8aSnia return true; 7820bbfda8aSnia 7830bbfda8aSnia case kw0_StayUpMenus: 7840bbfda8aSnia Scr->StayUpMenus = true; 7850bbfda8aSnia return true; 7860bbfda8aSnia 7870bbfda8aSnia case kw0_ClickToFocus: 7880bbfda8aSnia Scr->ClickToFocus = true; 7890bbfda8aSnia return true; 7900bbfda8aSnia 7910bbfda8aSnia case kw0_ReallyMoveInWorkspaceManager: 7920bbfda8aSnia Scr->ReallyMoveInWorkspaceManager = true; 7930bbfda8aSnia return true; 7940bbfda8aSnia 7950bbfda8aSnia case kw0_ShowWinWhenMovingInWmgr: 7960bbfda8aSnia Scr->ShowWinWhenMovingInWmgr = true; 7970bbfda8aSnia return true; 7980bbfda8aSnia 7990bbfda8aSnia case kw0_ReverseCurrentWorkspace: 8000bbfda8aSnia Scr->ReverseCurrentWorkspace = true; 8010bbfda8aSnia return true; 8020bbfda8aSnia 8030bbfda8aSnia case kw0_DontWarpCursorInWMap: 8040bbfda8aSnia Scr->DontWarpCursorInWMap = true; 8050bbfda8aSnia return true; 8060bbfda8aSnia 8070bbfda8aSnia case kw0_CenterFeedbackWindow: 8080bbfda8aSnia Scr->CenterFeedbackWindow = true; 8090bbfda8aSnia return true; 8100bbfda8aSnia 8110bbfda8aSnia case kw0_WarpToDefaultMenuEntry: 8120bbfda8aSnia Scr->WarpToDefaultMenuEntry = true; 8130bbfda8aSnia return true; 8140bbfda8aSnia 8150bbfda8aSnia case kw0_ShrinkIconTitles: 8160bbfda8aSnia Scr->ShrinkIconTitles = true; 8170bbfda8aSnia return true; 8180bbfda8aSnia 8190bbfda8aSnia case kw0_AutoRaiseIcons: 8200bbfda8aSnia Scr->AutoRaiseIcons = true; 8210bbfda8aSnia return true; 8220bbfda8aSnia 8230bbfda8aSnia /* kai */ 8240bbfda8aSnia case kw0_AutoFocusToTransients: 8250bbfda8aSnia Scr->AutoFocusToTransients = true; 8260bbfda8aSnia return true; 8270bbfda8aSnia 8280bbfda8aSnia case kw0_ShortAllWindowsMenus: 8290bbfda8aSnia Scr->ShortAllWindowsMenus = true; 8300bbfda8aSnia return true; 8310bbfda8aSnia 8320bbfda8aSnia case kw0_RaiseWhenAutoUnSqueeze: 8330bbfda8aSnia Scr->RaiseWhenAutoUnSqueeze = true; 8340bbfda8aSnia return true; 8350bbfda8aSnia 8360bbfda8aSnia case kw0_RaiseOnClick: 8370bbfda8aSnia Scr->RaiseOnClick = true; 8380bbfda8aSnia return true; 8390bbfda8aSnia 8400bbfda8aSnia case kw0_IgnoreLockModifier: 8410bbfda8aSnia Scr->IgnoreModifier |= LockMask; 8420bbfda8aSnia return true; 8430bbfda8aSnia 8440bbfda8aSnia case kw0_PackNewWindows: 8450bbfda8aSnia Scr->PackNewWindows = true; 8460bbfda8aSnia return true; 8470bbfda8aSnia 8480bbfda8aSnia case kw0_IgnoreCaseInMenuSelection: 8490bbfda8aSnia Scr->IgnoreCaseInMenuSelection = true; 8500bbfda8aSnia return true; 8510bbfda8aSnia 8520bbfda8aSnia case kw0_SloppyFocus: 8530bbfda8aSnia Scr->SloppyFocus = true; 8540bbfda8aSnia return true; 8550bbfda8aSnia 8560bbfda8aSnia case kw0_SaveWorkspaceFocus: 8570bbfda8aSnia Scr->SaveWorkspaceFocus = true; 8580bbfda8aSnia return true; 8590bbfda8aSnia 8600bbfda8aSnia case kw0_NoImagesInWorkSpaceManager: 8610bbfda8aSnia Scr->NoImagesInWorkSpaceManager = true; 8620bbfda8aSnia return true; 8630bbfda8aSnia 8640bbfda8aSnia case kw0_NoWarpToMenuTitle: 8650bbfda8aSnia Scr->NoWarpToMenuTitle = true; 8660bbfda8aSnia return true; 8670bbfda8aSnia 8680bbfda8aSnia case kw0_DontShowWelcomeWindow: 8690bbfda8aSnia Scr->ShowWelcomeWindow = false; 8700bbfda8aSnia return true; 8710bbfda8aSnia 8720bbfda8aSnia case kw0_DontToggleWorkspacemanagerState: 8730bbfda8aSnia Scr->DontToggleWorkspaceManagerState = true; 8740bbfda8aSnia return true; 8750bbfda8aSnia 8760bbfda8aSnia case kw0_DontNameDecorations: 8770bbfda8aSnia Scr->NameDecorations = false; 8780bbfda8aSnia return true; 8790bbfda8aSnia 8800bbfda8aSnia case kw0_StrictWinNameEncoding: 8810bbfda8aSnia Scr->StrictWinNameEncoding = true; 8820bbfda8aSnia return true; 8830bbfda8aSnia 8840bbfda8aSnia } 8850bbfda8aSnia return false; 8860bbfda8aSnia} 8870bbfda8aSnia 8880bbfda8aSnia 8890bbfda8aSniabool 8900bbfda8aSniado_string_string_keyword(int keyword, const char *s1, const char *s2) 8910bbfda8aSnia{ 8920bbfda8aSnia switch(keyword) { 8930bbfda8aSnia case kwss_RandomPlacement: { 8940bbfda8aSnia /* RandomPlacement {on,off,all,unmapped} [displacement geom] */ 8950bbfda8aSnia int rp; 8960bbfda8aSnia int gmask, gx, gy; // Geometry mask/x/y values 8970bbfda8aSnia unsigned int gjw, gjh; // width/height (ignored) 8980bbfda8aSnia int exmask = (XValue | YValue); // Bits we need in the mask 8990bbfda8aSnia 9000bbfda8aSnia rp = ParseRandomPlacement(s1); 9010bbfda8aSnia if(rp < 0) { 9020bbfda8aSnia twmrc_error_prefix(); 9030bbfda8aSnia fprintf(stderr, 9040bbfda8aSnia "ignoring invalid RandomPlacement argument 1 \"%s\"\n", 9050bbfda8aSnia s1); 9060bbfda8aSnia } 9070bbfda8aSnia else { 9080bbfda8aSnia Scr->RandomPlacement = rp; 9090bbfda8aSnia } 9100bbfda8aSnia 9110bbfda8aSnia /* If no geom, we're done */ 9120bbfda8aSnia if(s2 == NULL) { 9130bbfda8aSnia return true; 9140bbfda8aSnia } 9150bbfda8aSnia 9160bbfda8aSnia /* 9170bbfda8aSnia * Figure what the geom means. We actually don't care about 9180bbfda8aSnia * the size (it probably won't even be provided), so the 9190bbfda8aSnia * width/height are junk. The X/Y offsets are what we need. 9200bbfda8aSnia * But we do need them. 9210bbfda8aSnia */ 9220bbfda8aSnia gmask = XParseGeometry(s2, &gx, &gy, &gjw, &gjh); 9230bbfda8aSnia#ifdef DEBUG 9240bbfda8aSnia fprintf(stderr, "DEBUG:: Mask = %x, Width = %d, Height = %d\n", 9250bbfda8aSnia gmask, gjw, gjh); 9260bbfda8aSnia fprintf(stderr, "DEBUG:: X = %d, Y = %d\n", gx, gy); 9270bbfda8aSnia#endif 9280bbfda8aSnia if((gmask & exmask) != exmask) { 9290bbfda8aSnia /* Didn't get X and Y */ 9300bbfda8aSnia twmrc_error_prefix(); 9310bbfda8aSnia fprintf(stderr, 9320bbfda8aSnia "ignoring invalid RandomPlacement displacement \"%s\"\n", s2); 9330bbfda8aSnia } 9340bbfda8aSnia else { 9350bbfda8aSnia Scr->RandomDisplacementX = gx; 9360bbfda8aSnia Scr->RandomDisplacementY = gy; 9370bbfda8aSnia } 9380bbfda8aSnia 9390bbfda8aSnia /* Done */ 9400bbfda8aSnia return true; 9410bbfda8aSnia } 9420bbfda8aSnia } 9430bbfda8aSnia return false; 9440bbfda8aSnia} 9450bbfda8aSnia 9460bbfda8aSnia 9470bbfda8aSniabool 9480bbfda8aSniado_string_keyword(int keyword, char *s) 9490bbfda8aSnia{ 9500bbfda8aSnia switch(keyword) { 9510bbfda8aSnia case kws_UsePPosition: { 9520bbfda8aSnia int ppos = ParseUsePPosition(s); 9530bbfda8aSnia if(ppos < 0) { 9540bbfda8aSnia twmrc_error_prefix(); 9550bbfda8aSnia fprintf(stderr, 9560bbfda8aSnia "ignoring invalid UsePPosition argument \"%s\"\n", s); 9570bbfda8aSnia } 9580bbfda8aSnia else { 9590bbfda8aSnia Scr->UsePPosition = ppos; 9600bbfda8aSnia } 9610bbfda8aSnia return true; 9620bbfda8aSnia } 9630bbfda8aSnia 9640bbfda8aSnia case kws_IconFont: 9650bbfda8aSnia if(!Scr->HaveFonts) { 9660bbfda8aSnia Scr->IconFont.basename = s; 9670bbfda8aSnia } 9680bbfda8aSnia return true; 9690bbfda8aSnia 9700bbfda8aSnia case kws_ResizeFont: 9710bbfda8aSnia if(!Scr->HaveFonts) { 9720bbfda8aSnia Scr->SizeFont.basename = s; 9730bbfda8aSnia } 9740bbfda8aSnia return true; 9750bbfda8aSnia 9760bbfda8aSnia case kws_MenuFont: 9770bbfda8aSnia if(!Scr->HaveFonts) { 9780bbfda8aSnia Scr->MenuFont.basename = s; 9790bbfda8aSnia } 9800bbfda8aSnia return true; 9810bbfda8aSnia 9820bbfda8aSnia case kws_WorkSpaceFont: 9830bbfda8aSnia if(!Scr->HaveFonts) { 9840bbfda8aSnia Scr->workSpaceMgr.windowFont.basename = s; 9850bbfda8aSnia } 9860bbfda8aSnia return true; 9870bbfda8aSnia 9880bbfda8aSnia case kws_TitleFont: 9890bbfda8aSnia if(!Scr->HaveFonts) { 9900bbfda8aSnia Scr->TitleBarFont.basename = s; 9910bbfda8aSnia } 9920bbfda8aSnia return true; 9930bbfda8aSnia 9940bbfda8aSnia case kws_IconManagerFont: 9950bbfda8aSnia if(!Scr->HaveFonts) { 9960bbfda8aSnia Scr->IconManagerFont.basename = s; 9970bbfda8aSnia } 9980bbfda8aSnia return true; 9990bbfda8aSnia 10000bbfda8aSnia case kws_UnknownIcon: 10010bbfda8aSnia if(Scr->FirstTime) { 10020bbfda8aSnia Scr->UnknownImage = GetImage(s, Scr->IconC); 10030bbfda8aSnia } 10040bbfda8aSnia return true; 10050bbfda8aSnia 10060bbfda8aSnia case kws_IconDirectory: 10070bbfda8aSnia if(Scr->FirstTime) { 10080bbfda8aSnia Scr->IconDirectory = ExpandFilePath(s); 10090bbfda8aSnia } 10100bbfda8aSnia return true; 10110bbfda8aSnia 10120bbfda8aSnia case kws_PixmapDirectory: 10130bbfda8aSnia if(Scr->FirstTime) { 10140bbfda8aSnia Scr->PixmapDirectory = ExpandFilePath(s); 10150bbfda8aSnia } 10160bbfda8aSnia return true; 10170bbfda8aSnia 10180bbfda8aSnia case kws_MaxWindowSize: { 10190bbfda8aSnia int gmask; 10200bbfda8aSnia int exmask = (WidthValue | HeightValue); 10210bbfda8aSnia unsigned int gw, gh; // Stuff we care about 10220bbfda8aSnia int gjx, gjy; // Stuff we don't 10230bbfda8aSnia 10240bbfda8aSnia gmask = XParseGeometry(s, &gjx, &gjy, &gw, &gh); 10250bbfda8aSnia if((gmask & exmask) != exmask) { 10260bbfda8aSnia twmrc_error_prefix(); 10270bbfda8aSnia fprintf(stderr, "bad MaxWindowSize \"%s\"\n", s); 10280bbfda8aSnia return false; 10290bbfda8aSnia } 10300bbfda8aSnia if(gw == 0 || gh == 0) { 10310bbfda8aSnia twmrc_error_prefix(); 10320bbfda8aSnia fprintf(stderr, "MaxWindowSize \"%s\" must be non-zero\n", s); 10330bbfda8aSnia return false; 10340bbfda8aSnia } 10350bbfda8aSnia Scr->MaxWindowWidth = gw; 10360bbfda8aSnia Scr->MaxWindowHeight = gh; 10370bbfda8aSnia return true; 10380bbfda8aSnia } 10390bbfda8aSnia 10400bbfda8aSnia case kws_IconJustification: { 10410bbfda8aSnia int just = ParseTitleJustification(s); 10420bbfda8aSnia 10430bbfda8aSnia if((just < 0) || (just == TJ_UNDEF)) { 10440bbfda8aSnia twmrc_error_prefix(); 10450bbfda8aSnia fprintf(stderr, 10460bbfda8aSnia "ignoring invalid IconJustification argument \"%s\"\n", s); 10470bbfda8aSnia } 10480bbfda8aSnia else { 10490bbfda8aSnia Scr->IconJustification = just; 10500bbfda8aSnia } 10510bbfda8aSnia return true; 10520bbfda8aSnia } 10530bbfda8aSnia case kws_IconRegionJustification: { 10540bbfda8aSnia int just = ParseIRJustification(s); 10550bbfda8aSnia 10560bbfda8aSnia if(just < 0 || (just == IRJ_UNDEF)) { 10570bbfda8aSnia twmrc_error_prefix(); 10580bbfda8aSnia fprintf(stderr, 10590bbfda8aSnia "ignoring invalid IconRegionJustification argument \"%s\"\n", s); 10600bbfda8aSnia } 10610bbfda8aSnia else { 10620bbfda8aSnia Scr->IconRegionJustification = just; 10630bbfda8aSnia } 10640bbfda8aSnia return true; 10650bbfda8aSnia } 10660bbfda8aSnia case kws_IconRegionAlignement: { 10670bbfda8aSnia int just = ParseAlignement(s); 10680bbfda8aSnia 10690bbfda8aSnia if(just < 0) { 10700bbfda8aSnia twmrc_error_prefix(); 10710bbfda8aSnia fprintf(stderr, 10720bbfda8aSnia "ignoring invalid IconRegionAlignement argument \"%s\"\n", s); 10730bbfda8aSnia } 10740bbfda8aSnia else { 10750bbfda8aSnia Scr->IconRegionAlignement = just; 10760bbfda8aSnia } 10770bbfda8aSnia return true; 10780bbfda8aSnia } 10790bbfda8aSnia 10800bbfda8aSnia case kws_TitleJustification: { 10810bbfda8aSnia int just = ParseTitleJustification(s); 10820bbfda8aSnia 10830bbfda8aSnia if((just < 0) || (just == TJ_UNDEF)) { 10840bbfda8aSnia twmrc_error_prefix(); 10850bbfda8aSnia fprintf(stderr, 10860bbfda8aSnia "ignoring invalid TitleJustification argument \"%s\"\n", s); 10870bbfda8aSnia } 10880bbfda8aSnia else { 10890bbfda8aSnia Scr->TitleJustification = just; 10900bbfda8aSnia } 10910bbfda8aSnia return true; 10920bbfda8aSnia } 10930bbfda8aSnia case kws_RplaySoundHost: 10940bbfda8aSnia case kws_SoundHost: 10950bbfda8aSnia if(Scr->FirstTime) { 10960bbfda8aSnia /* Warning to be enabled in the future before removal */ 10970bbfda8aSnia if(0 && keyword == kws_SoundHost) { 10980bbfda8aSnia twmrc_error_prefix(); 10990bbfda8aSnia fprintf(stderr, "SoundHost is deprecated, please " 11000bbfda8aSnia "use RplaySoundHost instead.\n"); 11010bbfda8aSnia } 11020bbfda8aSnia#ifdef SOUNDS 11030bbfda8aSnia set_sound_host(s); 11040bbfda8aSnia#else 11050bbfda8aSnia twmrc_error_prefix(); 11060bbfda8aSnia fprintf(stderr, "Ignoring %sSoundHost; rplay not ronfigured.\n", 11070bbfda8aSnia (keyword == kws_RplaySoundHost ? "Rplay" : "")); 11080bbfda8aSnia#endif 11090bbfda8aSnia } 11100bbfda8aSnia return true; 11110bbfda8aSnia 11120bbfda8aSnia case kws_WMgrButtonStyle: { 11130bbfda8aSnia int style = ParseButtonStyle(s); 11140bbfda8aSnia 11150bbfda8aSnia if(style < 0) { 11160bbfda8aSnia twmrc_error_prefix(); 11170bbfda8aSnia fprintf(stderr, 11180bbfda8aSnia "ignoring invalid WMgrButtonStyle argument \"%s\"\n", s); 11190bbfda8aSnia } 11200bbfda8aSnia else { 11210bbfda8aSnia Scr->workSpaceMgr.buttonStyle = style; 11220bbfda8aSnia } 11230bbfda8aSnia return true; 11240bbfda8aSnia } 11250bbfda8aSnia 11260bbfda8aSnia case kws_IconifyStyle: { 11270bbfda8aSnia int style = ParseIconifyStyle(s); 11280bbfda8aSnia 11290bbfda8aSnia if(style < 0) { 11300bbfda8aSnia twmrc_error_prefix(); 11310bbfda8aSnia fprintf(stderr, "ignoring invalid IconifyStyle argument \"%s\"\n", s); 11320bbfda8aSnia } 11330bbfda8aSnia else { 11340bbfda8aSnia Scr->IconifyStyle = style; 11350bbfda8aSnia } 11360bbfda8aSnia return true; 11370bbfda8aSnia } 11380bbfda8aSnia 11390bbfda8aSnia#ifdef EWMH 11400bbfda8aSnia case kws_IconSize: 11410bbfda8aSnia if(sscanf(s, "%dx%d", &Scr->PreferredIconWidth, 11420bbfda8aSnia &Scr->PreferredIconHeight) == 2) { 11430bbfda8aSnia /* ok */ 11440bbfda8aSnia } 11450bbfda8aSnia else if(sscanf(s, "%d", &Scr->PreferredIconWidth) == 1) { 11460bbfda8aSnia Scr->PreferredIconHeight = Scr->PreferredIconWidth; 11470bbfda8aSnia } 11480bbfda8aSnia else { 11490bbfda8aSnia Scr->PreferredIconHeight = Scr->PreferredIconWidth = 48; 11500bbfda8aSnia } 11510bbfda8aSnia return true; 11520bbfda8aSnia#endif 11530bbfda8aSnia } 11540bbfda8aSnia return false; 11550bbfda8aSnia} 11560bbfda8aSnia 11570bbfda8aSnia 11580bbfda8aSniabool 11590bbfda8aSniado_number_keyword(int keyword, int num) 11600bbfda8aSnia{ 11610bbfda8aSnia switch(keyword) { 11620bbfda8aSnia case kwn_ConstrainedMoveTime: 11630bbfda8aSnia ConstrainedMoveTime = num; 11640bbfda8aSnia return true; 11650bbfda8aSnia 11660bbfda8aSnia case kwn_MoveDelta: 11670bbfda8aSnia Scr->MoveDelta = num; 11680bbfda8aSnia return true; 11690bbfda8aSnia 11700bbfda8aSnia case kwn_MoveOffResistance: 11710bbfda8aSnia Scr->MoveOffResistance = num; 11720bbfda8aSnia return true; 11730bbfda8aSnia 11740bbfda8aSnia case kwn_MovePackResistance: 11750bbfda8aSnia if(num < 0) { 11760bbfda8aSnia num = 20; 11770bbfda8aSnia } 11780bbfda8aSnia Scr->MovePackResistance = num; 11790bbfda8aSnia return true; 11800bbfda8aSnia 11810bbfda8aSnia case kwn_XMoveGrid: 11820bbfda8aSnia if(num < 1) { 11830bbfda8aSnia num = 1; 11840bbfda8aSnia } 11850bbfda8aSnia if(num > 100) { 11860bbfda8aSnia num = 100; 11870bbfda8aSnia } 11880bbfda8aSnia Scr->XMoveGrid = num; 11890bbfda8aSnia return true; 11900bbfda8aSnia 11910bbfda8aSnia case kwn_YMoveGrid: 11920bbfda8aSnia if(num < 1) { 11930bbfda8aSnia num = 1; 11940bbfda8aSnia } 11950bbfda8aSnia if(num > 100) { 11960bbfda8aSnia num = 100; 11970bbfda8aSnia } 11980bbfda8aSnia Scr->YMoveGrid = num; 11990bbfda8aSnia return true; 12000bbfda8aSnia 12010bbfda8aSnia case kwn_XorValue: 12020bbfda8aSnia if(Scr->FirstTime) { 12030bbfda8aSnia Scr->XORvalue = num; 12040bbfda8aSnia } 12050bbfda8aSnia return true; 12060bbfda8aSnia 12070bbfda8aSnia case kwn_FramePadding: 12080bbfda8aSnia if(Scr->FirstTime) { 12090bbfda8aSnia Scr->FramePadding = num; 12100bbfda8aSnia } 12110bbfda8aSnia return true; 12120bbfda8aSnia 12130bbfda8aSnia case kwn_TitlePadding: 12140bbfda8aSnia if(Scr->FirstTime) { 12150bbfda8aSnia Scr->TitlePadding = num; 12160bbfda8aSnia } 12170bbfda8aSnia return true; 12180bbfda8aSnia 12190bbfda8aSnia case kwn_ButtonIndent: 12200bbfda8aSnia if(Scr->FirstTime) { 12210bbfda8aSnia Scr->ButtonIndent = num; 12220bbfda8aSnia } 12230bbfda8aSnia return true; 12240bbfda8aSnia 12250bbfda8aSnia case kwn_ThreeDBorderWidth: 12260bbfda8aSnia if(Scr->FirstTime) { 12270bbfda8aSnia Scr->ThreeDBorderWidth = num; 12280bbfda8aSnia } 12290bbfda8aSnia return true; 12300bbfda8aSnia 12310bbfda8aSnia case kwn_BorderWidth: 12320bbfda8aSnia if(Scr->FirstTime) { 12330bbfda8aSnia Scr->BorderWidth = num; 12340bbfda8aSnia } 12350bbfda8aSnia return true; 12360bbfda8aSnia 12370bbfda8aSnia case kwn_IconBorderWidth: 12380bbfda8aSnia if(Scr->FirstTime) { 12390bbfda8aSnia Scr->IconBorderWidth = num; 12400bbfda8aSnia } 12410bbfda8aSnia return true; 12420bbfda8aSnia 12430bbfda8aSnia case kwn_TitleButtonBorderWidth: 12440bbfda8aSnia if(Scr->FirstTime) { 12450bbfda8aSnia Scr->TBInfo.border = num; 12460bbfda8aSnia } 12470bbfda8aSnia return true; 12480bbfda8aSnia 12490bbfda8aSnia case kwn_RaiseDelay: 12500bbfda8aSnia RaiseDelay = num; 12510bbfda8aSnia return true; 12520bbfda8aSnia 12530bbfda8aSnia case kwn_TransientOnTop: 12540bbfda8aSnia if(Scr->FirstTime) { 12550bbfda8aSnia Scr->TransientOnTop = num; 12560bbfda8aSnia } 12570bbfda8aSnia return true; 12580bbfda8aSnia 12590bbfda8aSnia case kwn_OpaqueMoveThreshold: 12600bbfda8aSnia if(Scr->FirstTime) { 12610bbfda8aSnia Scr->OpaqueMoveThreshold = num; 12620bbfda8aSnia } 12630bbfda8aSnia return true; 12640bbfda8aSnia 12650bbfda8aSnia case kwn_OpaqueResizeThreshold: 12660bbfda8aSnia if(Scr->FirstTime) { 12670bbfda8aSnia Scr->OpaqueResizeThreshold = num; 12680bbfda8aSnia } 12690bbfda8aSnia return true; 12700bbfda8aSnia 12710bbfda8aSnia case kwn_WMgrVertButtonIndent: 12720bbfda8aSnia if(Scr->FirstTime) { 12730bbfda8aSnia Scr->WMgrVertButtonIndent = num; 12740bbfda8aSnia } 12750bbfda8aSnia if(Scr->WMgrVertButtonIndent < 0) { 12760bbfda8aSnia Scr->WMgrVertButtonIndent = 0; 12770bbfda8aSnia } 12780bbfda8aSnia Scr->workSpaceMgr.vspace = Scr->WMgrVertButtonIndent; 12790bbfda8aSnia Scr->workSpaceMgr.occupyWindow->vspace = Scr->WMgrVertButtonIndent; 12800bbfda8aSnia return true; 12810bbfda8aSnia 12820bbfda8aSnia case kwn_WMgrHorizButtonIndent: 12830bbfda8aSnia if(Scr->FirstTime) { 12840bbfda8aSnia Scr->WMgrHorizButtonIndent = num; 12850bbfda8aSnia } 12860bbfda8aSnia if(Scr->WMgrHorizButtonIndent < 0) { 12870bbfda8aSnia Scr->WMgrHorizButtonIndent = 0; 12880bbfda8aSnia } 12890bbfda8aSnia Scr->workSpaceMgr.hspace = Scr->WMgrHorizButtonIndent; 12900bbfda8aSnia Scr->workSpaceMgr.occupyWindow->hspace = Scr->WMgrHorizButtonIndent; 12910bbfda8aSnia return true; 12920bbfda8aSnia 12930bbfda8aSnia case kwn_WMgrButtonShadowDepth: 12940bbfda8aSnia if(Scr->FirstTime) { 12950bbfda8aSnia Scr->WMgrButtonShadowDepth = num; 12960bbfda8aSnia } 12970bbfda8aSnia if(Scr->WMgrButtonShadowDepth < 1) { 12980bbfda8aSnia Scr->WMgrButtonShadowDepth = 1; 12990bbfda8aSnia } 13000bbfda8aSnia return true; 13010bbfda8aSnia 13020bbfda8aSnia case kwn_MaxIconTitleWidth: 13030bbfda8aSnia if(Scr->FirstTime) { 13040bbfda8aSnia Scr->MaxIconTitleWidth = num; 13050bbfda8aSnia } 13060bbfda8aSnia return true; 13070bbfda8aSnia 13080bbfda8aSnia case kwn_ClearShadowContrast: 13090bbfda8aSnia if(Scr->FirstTime) { 13100bbfda8aSnia Scr->ClearShadowContrast = num; 13110bbfda8aSnia } 13120bbfda8aSnia if(Scr->ClearShadowContrast < 0) { 13130bbfda8aSnia Scr->ClearShadowContrast = 0; 13140bbfda8aSnia } 13150bbfda8aSnia if(Scr->ClearShadowContrast > 100) { 13160bbfda8aSnia Scr->ClearShadowContrast = 100; 13170bbfda8aSnia } 13180bbfda8aSnia return true; 13190bbfda8aSnia 13200bbfda8aSnia case kwn_DarkShadowContrast: 13210bbfda8aSnia if(Scr->FirstTime) { 13220bbfda8aSnia Scr->DarkShadowContrast = num; 13230bbfda8aSnia } 13240bbfda8aSnia if(Scr->DarkShadowContrast < 0) { 13250bbfda8aSnia Scr->DarkShadowContrast = 0; 13260bbfda8aSnia } 13270bbfda8aSnia if(Scr->DarkShadowContrast > 100) { 13280bbfda8aSnia Scr->DarkShadowContrast = 100; 13290bbfda8aSnia } 13300bbfda8aSnia return true; 13310bbfda8aSnia 13320bbfda8aSnia case kwn_AnimationSpeed: 13330bbfda8aSnia if(num < 0) { 13340bbfda8aSnia num = 0; 13350bbfda8aSnia } 13360bbfda8aSnia SetAnimationSpeed(num); 13370bbfda8aSnia return true; 13380bbfda8aSnia 13390bbfda8aSnia case kwn_BorderShadowDepth: 13400bbfda8aSnia if(Scr->FirstTime) { 13410bbfda8aSnia Scr->BorderShadowDepth = num; 13420bbfda8aSnia } 13430bbfda8aSnia if(Scr->BorderShadowDepth < 0) { 13440bbfda8aSnia Scr->BorderShadowDepth = 2; 13450bbfda8aSnia } 13460bbfda8aSnia return true; 13470bbfda8aSnia 13480bbfda8aSnia case kwn_BorderLeft: 13490bbfda8aSnia if(Scr->FirstTime) { 13500bbfda8aSnia Scr->BorderLeft = num; 13510bbfda8aSnia } 13520bbfda8aSnia if(Scr->BorderLeft < 0) { 13530bbfda8aSnia Scr->BorderLeft = 0; 13540bbfda8aSnia } 13550bbfda8aSnia return true; 13560bbfda8aSnia 13570bbfda8aSnia case kwn_BorderRight: 13580bbfda8aSnia if(Scr->FirstTime) { 13590bbfda8aSnia Scr->BorderRight = num; 13600bbfda8aSnia } 13610bbfda8aSnia if(Scr->BorderRight < 0) { 13620bbfda8aSnia Scr->BorderRight = 0; 13630bbfda8aSnia } 13640bbfda8aSnia return true; 13650bbfda8aSnia 13660bbfda8aSnia case kwn_BorderTop: 13670bbfda8aSnia if(Scr->FirstTime) { 13680bbfda8aSnia Scr->BorderTop = num; 13690bbfda8aSnia } 13700bbfda8aSnia if(Scr->BorderTop < 0) { 13710bbfda8aSnia Scr->BorderTop = 0; 13720bbfda8aSnia } 13730bbfda8aSnia return true; 13740bbfda8aSnia 13750bbfda8aSnia case kwn_BorderBottom: 13760bbfda8aSnia if(Scr->FirstTime) { 13770bbfda8aSnia Scr->BorderBottom = num; 13780bbfda8aSnia } 13790bbfda8aSnia if(Scr->BorderBottom < 0) { 13800bbfda8aSnia Scr->BorderBottom = 0; 13810bbfda8aSnia } 13820bbfda8aSnia return true; 13830bbfda8aSnia 13840bbfda8aSnia case kwn_TitleButtonShadowDepth: 13850bbfda8aSnia if(Scr->FirstTime) { 13860bbfda8aSnia Scr->TitleButtonShadowDepth = num; 13870bbfda8aSnia } 13880bbfda8aSnia if(Scr->TitleButtonShadowDepth < 0) { 13890bbfda8aSnia Scr->TitleButtonShadowDepth = 2; 13900bbfda8aSnia } 13910bbfda8aSnia return true; 13920bbfda8aSnia 13930bbfda8aSnia case kwn_TitleShadowDepth: 13940bbfda8aSnia if(Scr->FirstTime) { 13950bbfda8aSnia Scr->TitleShadowDepth = num; 13960bbfda8aSnia } 13970bbfda8aSnia if(Scr->TitleShadowDepth < 0) { 13980bbfda8aSnia Scr->TitleShadowDepth = 2; 13990bbfda8aSnia } 14000bbfda8aSnia return true; 14010bbfda8aSnia 14020bbfda8aSnia case kwn_IconManagerShadowDepth: 14030bbfda8aSnia if(Scr->FirstTime) { 14040bbfda8aSnia Scr->IconManagerShadowDepth = num; 14050bbfda8aSnia } 14060bbfda8aSnia if(Scr->IconManagerShadowDepth < 0) { 14070bbfda8aSnia Scr->IconManagerShadowDepth = 2; 14080bbfda8aSnia } 14090bbfda8aSnia return true; 14100bbfda8aSnia 14110bbfda8aSnia case kwn_MenuShadowDepth: 14120bbfda8aSnia if(Scr->FirstTime) { 14130bbfda8aSnia Scr->MenuShadowDepth = num; 14140bbfda8aSnia } 14150bbfda8aSnia if(Scr->MenuShadowDepth < 0) { 14160bbfda8aSnia Scr->MenuShadowDepth = 2; 14170bbfda8aSnia } 14180bbfda8aSnia return true; 14190bbfda8aSnia 14200bbfda8aSnia case kwn_OpenWindowTimeout: 14210bbfda8aSnia if(Scr->FirstTime) { 14220bbfda8aSnia Scr->OpenWindowTimeout = num; 14230bbfda8aSnia } 14240bbfda8aSnia if(Scr->OpenWindowTimeout < 0) { 14250bbfda8aSnia Scr->OpenWindowTimeout = 0; 14260bbfda8aSnia } 14270bbfda8aSnia return true; 14280bbfda8aSnia 14290bbfda8aSnia case kwn_RaiseOnClickButton: 14300bbfda8aSnia if(Scr->FirstTime) { 14310bbfda8aSnia Scr->RaiseOnClickButton = num; 14320bbfda8aSnia } 14330bbfda8aSnia if(Scr->RaiseOnClickButton < 1) { 14340bbfda8aSnia Scr->RaiseOnClickButton = 1; 14350bbfda8aSnia } 14360bbfda8aSnia if(Scr->RaiseOnClickButton > MAX_BUTTONS) { 14370bbfda8aSnia Scr->RaiseOnClickButton = MAX_BUTTONS; 14380bbfda8aSnia } 14390bbfda8aSnia return true; 14400bbfda8aSnia 14410bbfda8aSnia 14420bbfda8aSnia } 14430bbfda8aSnia 14440bbfda8aSnia return false; 14450bbfda8aSnia} 14460bbfda8aSnia 14470bbfda8aSnianame_list ** 14480bbfda8aSniado_colorlist_keyword(int keyword, int colormode, char *s) 14490bbfda8aSnia{ 14500bbfda8aSnia switch(keyword) { 14510bbfda8aSnia case kwcl_BorderColor: 14520bbfda8aSnia GetColor(colormode, &Scr->BorderColorC.back, s); 14530bbfda8aSnia return &Scr->BorderColorL; 14540bbfda8aSnia 14550bbfda8aSnia case kwcl_IconManagerHighlight: 14560bbfda8aSnia GetColor(colormode, &Scr->IconManagerHighlight, s); 14570bbfda8aSnia return &Scr->IconManagerHighlightL; 14580bbfda8aSnia 14590bbfda8aSnia case kwcl_BorderTileForeground: 14600bbfda8aSnia GetColor(colormode, &Scr->BorderTileC.fore, s); 14610bbfda8aSnia return &Scr->BorderTileForegroundL; 14620bbfda8aSnia 14630bbfda8aSnia case kwcl_BorderTileBackground: 14640bbfda8aSnia GetColor(colormode, &Scr->BorderTileC.back, s); 14650bbfda8aSnia return &Scr->BorderTileBackgroundL; 14660bbfda8aSnia 14670bbfda8aSnia case kwcl_TitleForeground: 14680bbfda8aSnia GetColor(colormode, &Scr->TitleC.fore, s); 14690bbfda8aSnia return &Scr->TitleForegroundL; 14700bbfda8aSnia 14710bbfda8aSnia case kwcl_TitleBackground: 14720bbfda8aSnia GetColor(colormode, &Scr->TitleC.back, s); 14730bbfda8aSnia return &Scr->TitleBackgroundL; 14740bbfda8aSnia 14750bbfda8aSnia case kwcl_IconForeground: 14760bbfda8aSnia GetColor(colormode, &Scr->IconC.fore, s); 14770bbfda8aSnia return &Scr->IconForegroundL; 14780bbfda8aSnia 14790bbfda8aSnia case kwcl_IconBackground: 14800bbfda8aSnia GetColor(colormode, &Scr->IconC.back, s); 14810bbfda8aSnia return &Scr->IconBackgroundL; 14820bbfda8aSnia 14830bbfda8aSnia case kwcl_IconBorderColor: 14840bbfda8aSnia GetColor(colormode, &Scr->IconBorderColor, s); 14850bbfda8aSnia return &Scr->IconBorderColorL; 14860bbfda8aSnia 14870bbfda8aSnia case kwcl_IconManagerForeground: 14880bbfda8aSnia GetColor(colormode, &Scr->IconManagerC.fore, s); 14890bbfda8aSnia return &Scr->IconManagerFL; 14900bbfda8aSnia 14910bbfda8aSnia case kwcl_IconManagerBackground: 14920bbfda8aSnia GetColor(colormode, &Scr->IconManagerC.back, s); 14930bbfda8aSnia return &Scr->IconManagerBL; 14940bbfda8aSnia 14950bbfda8aSnia case kwcl_MapWindowBackground: 14960bbfda8aSnia GetColor(colormode, &Scr->workSpaceMgr.windowcp.back, s); 14970bbfda8aSnia Scr->workSpaceMgr.windowcpgiven = true; 14980bbfda8aSnia return &Scr->workSpaceMgr.windowBackgroundL; 14990bbfda8aSnia 15000bbfda8aSnia case kwcl_MapWindowForeground: 15010bbfda8aSnia GetColor(colormode, &Scr->workSpaceMgr.windowcp.fore, s); 15020bbfda8aSnia Scr->workSpaceMgr.windowcpgiven = true; 15030bbfda8aSnia return &Scr->workSpaceMgr.windowForegroundL; 15040bbfda8aSnia } 15050bbfda8aSnia return NULL; 15060bbfda8aSnia} 15070bbfda8aSnia 15080bbfda8aSniabool 15090bbfda8aSniado_color_keyword(int keyword, int colormode, char *s) 15100bbfda8aSnia{ 15110bbfda8aSnia switch(keyword) { 15120bbfda8aSnia case kwc_DefaultForeground: 15130bbfda8aSnia GetColor(colormode, &Scr->DefaultC.fore, s); 15140bbfda8aSnia return true; 15150bbfda8aSnia 15160bbfda8aSnia case kwc_DefaultBackground: 15170bbfda8aSnia GetColor(colormode, &Scr->DefaultC.back, s); 15180bbfda8aSnia return true; 15190bbfda8aSnia 15200bbfda8aSnia case kwc_MenuForeground: 15210bbfda8aSnia GetColor(colormode, &Scr->MenuC.fore, s); 15220bbfda8aSnia return true; 15230bbfda8aSnia 15240bbfda8aSnia case kwc_MenuBackground: 15250bbfda8aSnia GetColor(colormode, &Scr->MenuC.back, s); 15260bbfda8aSnia return true; 15270bbfda8aSnia 15280bbfda8aSnia case kwc_MenuTitleForeground: 15290bbfda8aSnia GetColor(colormode, &Scr->MenuTitleC.fore, s); 15300bbfda8aSnia return true; 15310bbfda8aSnia 15320bbfda8aSnia case kwc_MenuTitleBackground: 15330bbfda8aSnia GetColor(colormode, &Scr->MenuTitleC.back, s); 15340bbfda8aSnia return true; 15350bbfda8aSnia 15360bbfda8aSnia case kwc_MenuShadowColor: 15370bbfda8aSnia GetColor(colormode, &Scr->MenuShadowColor, s); 15380bbfda8aSnia return true; 15390bbfda8aSnia 15400bbfda8aSnia } 15410bbfda8aSnia 15420bbfda8aSnia return false; 15430bbfda8aSnia} 15440bbfda8aSnia 15450bbfda8aSnia/* 15460bbfda8aSnia * put_pixel_on_root() Save a pixel value in twm root window color property. 15470bbfda8aSnia */ 15480bbfda8aSniastatic void 15490bbfda8aSniaput_pixel_on_root(Pixel pixel) 15500bbfda8aSnia{ 15510bbfda8aSnia int i, addPixel = 1; 15520bbfda8aSnia Atom retAtom; 15530bbfda8aSnia int retFormat; 15540bbfda8aSnia unsigned long nPixels, retAfter; 15550bbfda8aSnia Pixel *retProp; 15560bbfda8aSnia 15570bbfda8aSnia if(XGetWindowProperty(dpy, Scr->Root, XA__MIT_PRIORITY_COLORS, 0, 8192, 15580bbfda8aSnia False, XA_CARDINAL, &retAtom, 15590bbfda8aSnia &retFormat, &nPixels, &retAfter, 15600bbfda8aSnia (unsigned char **)&retProp) != Success || !retProp) { 15610bbfda8aSnia return; 15620bbfda8aSnia } 15630bbfda8aSnia 15640bbfda8aSnia for(i = 0; i < nPixels; i++) 15650bbfda8aSnia if(pixel == retProp[i]) { 15660bbfda8aSnia addPixel = 0; 15670bbfda8aSnia } 15680bbfda8aSnia 15690bbfda8aSnia XFree(retProp); 15700bbfda8aSnia 15710bbfda8aSnia if(addPixel) 15720bbfda8aSnia XChangeProperty(dpy, Scr->Root, XA__MIT_PRIORITY_COLORS, 15730bbfda8aSnia XA_CARDINAL, 32, PropModeAppend, 15740bbfda8aSnia (unsigned char *)&pixel, 1); 15750bbfda8aSnia} 15760bbfda8aSnia 15770bbfda8aSnia/* 15780bbfda8aSnia * do_string_savecolor() save a color from a string in the twmrc file. 15790bbfda8aSnia */ 15800bbfda8aSniavoid 15810bbfda8aSniado_string_savecolor(int colormode, char *s) 15820bbfda8aSnia{ 15830bbfda8aSnia Pixel p; 15840bbfda8aSnia GetColor(colormode, &p, s); 15850bbfda8aSnia put_pixel_on_root(p); 15860bbfda8aSnia return; 15870bbfda8aSnia} 15880bbfda8aSnia 15890bbfda8aSnia/* 15900bbfda8aSnia * do_var_savecolor() save a color from a var in the twmrc file. 15910bbfda8aSnia */ 15920bbfda8aSniatypedef struct _cnode { 15930bbfda8aSnia int i; 15940bbfda8aSnia struct _cnode *next; 15950bbfda8aSnia} Cnode, *Cptr; 15960bbfda8aSniastatic Cptr chead = NULL; 15970bbfda8aSnia 15980bbfda8aSniavoid 15990bbfda8aSniado_var_savecolor(int key) 16000bbfda8aSnia{ 16010bbfda8aSnia Cptr cptrav, cpnew; 16020bbfda8aSnia if(!chead) { 16030bbfda8aSnia chead = malloc(sizeof(Cnode)); 16040bbfda8aSnia chead->i = key; 16050bbfda8aSnia chead->next = NULL; 16060bbfda8aSnia } 16070bbfda8aSnia else { 16080bbfda8aSnia cptrav = chead; 16090bbfda8aSnia while(cptrav->next != NULL) { 16100bbfda8aSnia cptrav = cptrav->next; 16110bbfda8aSnia } 16120bbfda8aSnia cpnew = malloc(sizeof(Cnode)); 16130bbfda8aSnia cpnew->i = key; 16140bbfda8aSnia cpnew->next = NULL; 16150bbfda8aSnia cptrav->next = cpnew; 16160bbfda8aSnia } 16170bbfda8aSnia return; 16180bbfda8aSnia} 16190bbfda8aSnia 16200bbfda8aSnia/* 16210bbfda8aSnia * assign_var_savecolor() traverse the var save color list placeing the pixels 16220bbfda8aSnia * in the root window property. 16230bbfda8aSnia */ 16240bbfda8aSniavoid 16250bbfda8aSniaassign_var_savecolor(void) 16260bbfda8aSnia{ 16270bbfda8aSnia Cptr cp = chead; 16280bbfda8aSnia while(cp != NULL) { 16290bbfda8aSnia switch(cp->i) { 16300bbfda8aSnia case kwcl_BorderColor: 16310bbfda8aSnia put_pixel_on_root(Scr->BorderColorC.back); 16320bbfda8aSnia break; 16330bbfda8aSnia case kwcl_IconManagerHighlight: 16340bbfda8aSnia put_pixel_on_root(Scr->IconManagerHighlight); 16350bbfda8aSnia break; 16360bbfda8aSnia case kwcl_BorderTileForeground: 16370bbfda8aSnia put_pixel_on_root(Scr->BorderTileC.fore); 16380bbfda8aSnia break; 16390bbfda8aSnia case kwcl_BorderTileBackground: 16400bbfda8aSnia put_pixel_on_root(Scr->BorderTileC.back); 16410bbfda8aSnia break; 16420bbfda8aSnia case kwcl_TitleForeground: 16430bbfda8aSnia put_pixel_on_root(Scr->TitleC.fore); 16440bbfda8aSnia break; 16450bbfda8aSnia case kwcl_TitleBackground: 16460bbfda8aSnia put_pixel_on_root(Scr->TitleC.back); 16470bbfda8aSnia break; 16480bbfda8aSnia case kwcl_IconForeground: 16490bbfda8aSnia put_pixel_on_root(Scr->IconC.fore); 16500bbfda8aSnia break; 16510bbfda8aSnia case kwcl_IconBackground: 16520bbfda8aSnia put_pixel_on_root(Scr->IconC.back); 16530bbfda8aSnia break; 16540bbfda8aSnia case kwcl_IconBorderColor: 16550bbfda8aSnia put_pixel_on_root(Scr->IconBorderColor); 16560bbfda8aSnia break; 16570bbfda8aSnia case kwcl_IconManagerForeground: 16580bbfda8aSnia put_pixel_on_root(Scr->IconManagerC.fore); 16590bbfda8aSnia break; 16600bbfda8aSnia case kwcl_IconManagerBackground: 16610bbfda8aSnia put_pixel_on_root(Scr->IconManagerC.back); 16620bbfda8aSnia break; 16630bbfda8aSnia case kwcl_MapWindowForeground: 16640bbfda8aSnia put_pixel_on_root(Scr->workSpaceMgr.windowcp.fore); 16650bbfda8aSnia break; 16660bbfda8aSnia case kwcl_MapWindowBackground: 16670bbfda8aSnia put_pixel_on_root(Scr->workSpaceMgr.windowcp.back); 16680bbfda8aSnia break; 16690bbfda8aSnia } 16700bbfda8aSnia cp = cp->next; 16710bbfda8aSnia } 16720bbfda8aSnia if(chead) { 16730bbfda8aSnia free(chead); 16740bbfda8aSnia chead = NULL; 16750bbfda8aSnia } 16760bbfda8aSnia} 16770bbfda8aSnia 16780bbfda8aSnia 16790bbfda8aSnia/* 16800bbfda8aSnia * RandomPlacement [...] parse 16810bbfda8aSnia */ 16820bbfda8aSniastatic int 16830bbfda8aSniaParseRandomPlacement(const char *s) 16840bbfda8aSnia{ 16850bbfda8aSnia /* No first arg -> 'all' */ 16860bbfda8aSnia if(s == NULL) { 16870bbfda8aSnia return RP_ALL; 16880bbfda8aSnia } 16890bbfda8aSnia if(strlen(s) == 0) { 16900bbfda8aSnia return RP_ALL; 16910bbfda8aSnia } 16920bbfda8aSnia 16930bbfda8aSnia#define CHK(str, ret) if(strcasecmp(s, str) == 0) { return RP_##ret; } 16940bbfda8aSnia CHK(DEFSTRING, ALL); 16950bbfda8aSnia CHK("on", ALL); 16960bbfda8aSnia CHK("all", ALL); 16970bbfda8aSnia CHK("off", OFF); 16980bbfda8aSnia CHK("unmapped", UNMAPPED); 16990bbfda8aSnia#undef CHK 17000bbfda8aSnia 17010bbfda8aSnia return -1; 17020bbfda8aSnia} 17030bbfda8aSnia 17040bbfda8aSnia 17050bbfda8aSnia/* 17060bbfda8aSnia * Parse out IconRegionJustification string. 17070bbfda8aSnia * 17080bbfda8aSnia * X-ref comment on ParseAlignement about return value. 17090bbfda8aSnia */ 17100bbfda8aSniaint 17110bbfda8aSniaParseIRJustification(const char *s) 17120bbfda8aSnia{ 17130bbfda8aSnia if(strlen(s) == 0) { 17140bbfda8aSnia return -1; 17150bbfda8aSnia } 17160bbfda8aSnia 17170bbfda8aSnia#define CHK(str, ret) if(strcasecmp(s, str) == 0) { return IRJ_##ret; } 17180bbfda8aSnia CHK(DEFSTRING, CENTER); 17190bbfda8aSnia CHK("undef", UNDEF); 17200bbfda8aSnia CHK("left", LEFT); 17210bbfda8aSnia CHK("center", CENTER); 17220bbfda8aSnia CHK("right", RIGHT); 17230bbfda8aSnia CHK("border", BORDER); 17240bbfda8aSnia#undef CHK 17250bbfda8aSnia 17260bbfda8aSnia return -1; 17270bbfda8aSnia} 17280bbfda8aSnia 17290bbfda8aSnia 17300bbfda8aSnia/* 17310bbfda8aSnia * Parse out string for title justification. From TitleJustification, 17320bbfda8aSnia * IconJustification, iconjust arg to IconRegion. 17330bbfda8aSnia * 17340bbfda8aSnia * X-ref comment on ParseAlignement about return value. 17350bbfda8aSnia */ 17360bbfda8aSniaint 17370bbfda8aSniaParseTitleJustification(const char *s) 17380bbfda8aSnia{ 17390bbfda8aSnia if(strlen(s) == 0) { 17400bbfda8aSnia return -1; 17410bbfda8aSnia } 17420bbfda8aSnia 17430bbfda8aSnia#define CHK(str, ret) if(strcasecmp(s, str) == 0) { return TJ_##ret; } 17440bbfda8aSnia /* XXX Different uses really have different defaults... */ 17450bbfda8aSnia CHK(DEFSTRING, CENTER); 17460bbfda8aSnia CHK("undef", UNDEF); 17470bbfda8aSnia CHK("left", LEFT); 17480bbfda8aSnia CHK("center", CENTER); 17490bbfda8aSnia CHK("right", RIGHT); 17500bbfda8aSnia#undef CHK 17510bbfda8aSnia 17520bbfda8aSnia return -1; 17530bbfda8aSnia} 17540bbfda8aSnia 17550bbfda8aSnia 17560bbfda8aSnia/* 17570bbfda8aSnia * Parse out the string specifier for IconRegion Alignement[sic]. 17580bbfda8aSnia * Strictly speaking, this [almost always] returns an IRAlignement enum 17590bbfda8aSnia * value. However, it's specified as int to allow the -1 return for 17600bbfda8aSnia * invalid values. enum's start numbering from 0 (unless specific values 17610bbfda8aSnia * are given), so that's a safe out-of-bounds value. And making an 17620bbfda8aSnia * IRA_INVALID value would just add unnecessary complication, since 17630bbfda8aSnia * during parsing is the only time it makes sense. 17640bbfda8aSnia */ 17650bbfda8aSniaint 17660bbfda8aSniaParseAlignement(const char *s) 17670bbfda8aSnia{ 17680bbfda8aSnia if(strlen(s) == 0) { 17690bbfda8aSnia return -1; 17700bbfda8aSnia } 17710bbfda8aSnia 17720bbfda8aSnia#define CHK(str, ret) if(strcasecmp(s, str) == 0) { return IRA_##ret; } 17730bbfda8aSnia CHK(DEFSTRING, CENTER); 17740bbfda8aSnia CHK("center", CENTER); 17750bbfda8aSnia CHK("top", TOP); 17760bbfda8aSnia CHK("bottom", BOTTOM); 17770bbfda8aSnia CHK("border", BORDER); 17780bbfda8aSnia CHK("undef", UNDEF); 17790bbfda8aSnia#undef CHK 17800bbfda8aSnia 17810bbfda8aSnia return -1; 17820bbfda8aSnia} 17830bbfda8aSnia 17840bbfda8aSniastatic int 17850bbfda8aSniaParseUsePPosition(const char *s) 17860bbfda8aSnia{ 17870bbfda8aSnia if(strlen(s) == 0) { 17880bbfda8aSnia return -1; 17890bbfda8aSnia } 17900bbfda8aSnia 17910bbfda8aSnia#define CHK(str, ret) if(strcasecmp(s, str) == 0) { return PPOS_##ret; } 17920bbfda8aSnia CHK(DEFSTRING, OFF); 17930bbfda8aSnia CHK("off", OFF); 17940bbfda8aSnia CHK("on", ON); 17950bbfda8aSnia CHK("non-zero", NON_ZERO); 17960bbfda8aSnia CHK("nonzero", NON_ZERO); 17970bbfda8aSnia#undef CHK 17980bbfda8aSnia 17990bbfda8aSnia return -1; 18000bbfda8aSnia} 18010bbfda8aSnia 18020bbfda8aSniastatic int 18030bbfda8aSniaParseButtonStyle(const char *s) 18040bbfda8aSnia{ 18050bbfda8aSnia if(s == NULL || strlen(s) == 0) { 18060bbfda8aSnia return -1; 18070bbfda8aSnia } 18080bbfda8aSnia 18090bbfda8aSnia#define CHK(str, ret) if(strcasecmp(s, str) == 0) { return STYLE_##ret; } 18100bbfda8aSnia CHK(DEFSTRING, NORMAL); 18110bbfda8aSnia CHK("normal", NORMAL); 18120bbfda8aSnia CHK("style1", STYLE1); 18130bbfda8aSnia CHK("style2", STYLE2); 18140bbfda8aSnia CHK("style3", STYLE3); 18150bbfda8aSnia#undef CHK 18160bbfda8aSnia 18170bbfda8aSnia return -1; 18180bbfda8aSnia} 18190bbfda8aSnia 18200bbfda8aSniastatic int 18210bbfda8aSniaParseIconifyStyle(const char *s) 18220bbfda8aSnia{ 18230bbfda8aSnia if(s == NULL || strlen(s) == 0) { 18240bbfda8aSnia return -1; 18250bbfda8aSnia } 18260bbfda8aSnia 18270bbfda8aSnia#define CHK(str, ret) if(strcasecmp(s, str) == 0) { return ICONIFY_##ret; } 18280bbfda8aSnia CHK(DEFSTRING, NORMAL); 18290bbfda8aSnia CHK("normal", NORMAL); 18300bbfda8aSnia CHK("mosaic", MOSAIC); 18310bbfda8aSnia CHK("zoomin", ZOOMIN); 18320bbfda8aSnia CHK("zoomout", ZOOMOUT); 18330bbfda8aSnia CHK("fade", FADE); 18340bbfda8aSnia CHK("sweep", SWEEP); 18350bbfda8aSnia#undef CHK 18360bbfda8aSnia 18370bbfda8aSnia return -1; 18380bbfda8aSnia} 18390bbfda8aSnia 18400bbfda8aSniavoid 18410bbfda8aSniado_squeeze_entry(name_list **slist, // squeeze or dont-squeeze list 18420bbfda8aSnia const char *name, // window name 18430bbfda8aSnia SIJust justify, // left, center, right 18440bbfda8aSnia int num, // signed num 18450bbfda8aSnia int denom) // 0 or indicates fraction denom 18460bbfda8aSnia{ 18470bbfda8aSnia int absnum = (num < 0 ? -num : num); 18480bbfda8aSnia 18490bbfda8aSnia if(denom < 0) { 18500bbfda8aSnia twmrc_error_prefix(); 18510bbfda8aSnia fprintf(stderr, "negative SqueezeTitle denominator %d\n", denom); 18520bbfda8aSnia ParseError = true; 18530bbfda8aSnia return; 18540bbfda8aSnia } 18550bbfda8aSnia if(absnum > denom && denom != 0) { 18560bbfda8aSnia twmrc_error_prefix(); 18570bbfda8aSnia fprintf(stderr, "SqueezeTitle fraction %d/%d outside window\n", 18580bbfda8aSnia num, denom); 18590bbfda8aSnia ParseError = true; 18600bbfda8aSnia return; 18610bbfda8aSnia } 18620bbfda8aSnia /* Process the special cases from the manual here rather than 18630bbfda8aSnia * each time we calculate the position of the title bar 18640bbfda8aSnia * in ComputeTitleLocation(). 18650bbfda8aSnia * In fact, it's better to get rid of them entirely, but we 18660bbfda8aSnia * probably should not do that for compatibility's sake. 18670bbfda8aSnia * By using a non-zero denominator the position will be relative. 18680bbfda8aSnia */ 18690bbfda8aSnia if(denom == 0 && num == 0) { 18700bbfda8aSnia if(justify == SIJ_CENTER) { 18710bbfda8aSnia num = 1; 18720bbfda8aSnia denom = 2; 18730bbfda8aSnia } 18740bbfda8aSnia else if(justify == SIJ_RIGHT) { 18750bbfda8aSnia num = 2; 18760bbfda8aSnia denom = 2; 18770bbfda8aSnia } 18780bbfda8aSnia twmrc_error_prefix(); 18790bbfda8aSnia fprintf(stderr, "deprecated SqueezeTitle faction 0/0, assuming %d/%d\n", 18800bbfda8aSnia num, denom); 18810bbfda8aSnia } 18820bbfda8aSnia 18830bbfda8aSnia if(HasShape) { 18840bbfda8aSnia SqueezeInfo *sinfo; 18850bbfda8aSnia sinfo = malloc(sizeof(SqueezeInfo)); 18860bbfda8aSnia 18870bbfda8aSnia if(!sinfo) { 18880bbfda8aSnia twmrc_error_prefix(); 18890bbfda8aSnia fprintf(stderr, "unable to allocate %lu bytes for squeeze info\n", 18900bbfda8aSnia (unsigned long) sizeof(SqueezeInfo)); 18910bbfda8aSnia ParseError = true; 18920bbfda8aSnia return; 18930bbfda8aSnia } 18940bbfda8aSnia sinfo->justify = justify; 18950bbfda8aSnia sinfo->num = num; 18960bbfda8aSnia sinfo->denom = denom; 18970bbfda8aSnia AddToList(slist, name, sinfo); 18980bbfda8aSnia } 18990bbfda8aSnia return; 19000bbfda8aSnia} 19010bbfda8aSnia 19020bbfda8aSnia 19030bbfda8aSnia/* 19040bbfda8aSnia * Parsing for EWMHIgnore { } lists 19050bbfda8aSnia */ 19060bbfda8aSniavoid 19070bbfda8aSniaproc_ewmh_ignore(void) 19080bbfda8aSnia{ 19090bbfda8aSnia#ifndef EWMH 19100bbfda8aSnia twmrc_error_prefix(); 19110bbfda8aSnia fprintf(stderr, "EWMH not enabled, EWMHIgnore { } ignored.\n"); 19120bbfda8aSnia ParseError = true; 19130bbfda8aSnia return; 19140bbfda8aSnia#endif 19150bbfda8aSnia /* else nada */ 19160bbfda8aSnia return; 19170bbfda8aSnia} 19180bbfda8aSniavoid 19190bbfda8aSniaadd_ewmh_ignore(char *s) 19200bbfda8aSnia{ 19210bbfda8aSnia#ifndef EWMH 19220bbfda8aSnia return; 19230bbfda8aSnia#else 19240bbfda8aSnia 19250bbfda8aSnia#define HANDLE(x) \ 19260bbfda8aSnia if(strcasecmp(s, (x)) == 0) { \ 19270bbfda8aSnia AddToList(&Scr->EWMHIgnore, (x), ""); \ 19280bbfda8aSnia return; \ 19290bbfda8aSnia } 19300bbfda8aSnia HANDLE("STATE_MAXIMIZED_VERT"); 19310bbfda8aSnia HANDLE("STATE_MAXIMIZED_HORZ"); 19320bbfda8aSnia HANDLE("STATE_FULLSCREEN"); 19330bbfda8aSnia HANDLE("STATE_SHADED"); 19340bbfda8aSnia HANDLE("STATE_ABOVE"); 19350bbfda8aSnia HANDLE("STATE_BELOW"); 19360bbfda8aSnia#undef HANDLE 19370bbfda8aSnia 19380bbfda8aSnia twmrc_error_prefix(); 19390bbfda8aSnia fprintf(stderr, "Unexpected EWMHIgnore value '%s'\n", s); 19400bbfda8aSnia ParseError = true; 19410bbfda8aSnia return; 19420bbfda8aSnia#endif /* EWMH */ 19430bbfda8aSnia} 19440bbfda8aSnia 19450bbfda8aSnia 19460bbfda8aSnia/* 19470bbfda8aSnia * Parsing for MWMIgnore { } lists 19480bbfda8aSnia */ 19490bbfda8aSniavoid 19500bbfda8aSniaproc_mwm_ignore(void) 19510bbfda8aSnia{ 19520bbfda8aSnia /* Nothing to do */ 19530bbfda8aSnia return; 19540bbfda8aSnia} 19550bbfda8aSniavoid 19560bbfda8aSniaadd_mwm_ignore(char *s) 19570bbfda8aSnia{ 19580bbfda8aSnia#define HANDLE(x) \ 19590bbfda8aSnia if(strcasecmp(s, (x)) == 0) { \ 19600bbfda8aSnia AddToList(&Scr->MWMIgnore, (x), ""); \ 19610bbfda8aSnia return; \ 19620bbfda8aSnia } 19630bbfda8aSnia HANDLE("DECOR_BORDER"); 19640bbfda8aSnia HANDLE("DECOR_TITLE"); 19650bbfda8aSnia#undef HANDLE 19660bbfda8aSnia 19670bbfda8aSnia twmrc_error_prefix(); 19680bbfda8aSnia fprintf(stderr, "Unexpected MWMIgnore value '%s'\n", s); 19690bbfda8aSnia ParseError = true; 19700bbfda8aSnia return; 19710bbfda8aSnia} 1972