home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / gwm18a.zip / gwm.h < prev    next >
C/C++ Source or Header  |  1995-07-03  |  12KB  |  396 lines

  1. /* Copyright 1989 GROUPE BULL -- See license conditions in file COPYRIGHT
  2.  * Copyright 1989 Massachusetts Institute of Technology
  3.  */
  4. /***************************************************************\
  5. *                                     *
  6. *     BULL WINDOW MANAGER for X11                     *
  7. *                                     *
  8. *     general include file, contains GWM specific typedef.    *
  9. *                                     *
  10. \***************************************************************/
  11.  
  12. #ifndef INCLUDE_WOOL_H
  13. #include "wool.h"
  14. #endif
  15. #ifdef DEBUG
  16. #include <stdio.h>
  17. #endif /* DEBUG */
  18. #define GWM_h
  19.  
  20. extern char GWM_version_name[];
  21.  
  22. /* some parameters */
  23.  
  24. #define WLPROFILE_USER_VARIABLE "GWMPROFILE"
  25. #define WOOL_USER_PROFILE ".gwmrc"
  26. #define WOOL_TEXT_EXTENSION ".gwm"
  27. #define WLPATH_SHELL_VARIABLE "GWMPATH"
  28.  
  29. /* adaptation to the different X11 libraries */
  30.  
  31. #if defined(X11R1) || defined(X11R2)|| defined(X11R3)
  32. #  define NOBASEDIMS
  33. #  define NOXEHTYPE
  34. #else /* R4, R5, R6... */
  35. #define SHAPE
  36. #endif
  37.  
  38. #if defined(X11R1)||defined(X11R2)||defined(X11R3)||defined(X11R4)||defined(X11R5)
  39. typedef char *XPointer;
  40. #endif
  41.  
  42. /* useful macro: XFree of a pointer that may be null */
  43. #define XFreeN(p) if (p) XFree(p)
  44.  
  45. /* customization flags */
  46.  
  47. #ifndef TRUE
  48. #define TRUE            1
  49. #define FALSE            0
  50. #endif
  51. #ifndef Max
  52. #define Max(x,y)        (((x)<(y))?(y):(x))
  53. #define Min(x,y)        (((x)<(y))?(x):(y))
  54. #define FlagOn(mask,flag) ((mask)&(flag))
  55. #endif
  56.  
  57. #define HORIZONTAL        0
  58. #define VERTICAL        1
  59.  
  60. typedef char   *Pointer;
  61.  
  62. typedef long    WoolAtom;
  63. typedef char   *AtomName;
  64. typedef int     Errno;
  65. typedef int     (*PtrToFunc) ();
  66. typedef void    (*PtrToProc) ();
  67.  
  68. /*
  69.  * error numbers
  70.  */
  71.  
  72. #define OK                 0
  73. #define FatalError         -1
  74. EXT int      ErrorStatus;    /* setted at a string in XError */
  75.  
  76. /* X types */
  77.  
  78. #include <X11/X.h>
  79. #include <X11/Xlib.h>
  80. #include <X11/Xatom.h>
  81. #include <X11/Xutil.h>
  82.  
  83. typedef XEvent  EventData, *Event;
  84.  
  85. extern Card32 EventProperties[];
  86. extern int EventTimeFieldOffset[];
  87. #define EPGrabRedirected (1<<0)
  88. #define EPKeyOrButton    (1<<1)
  89. #define EPCrossing       (1<<2)
  90. #define EPFocus          (1<<3)
  91. #define EPXY             (1<<4)
  92. #define EPXYRoot         (1<<5)
  93. #define EPTime           (1<<6)
  94. #define EPRedirectable   (1<<7)
  95.  
  96. #define event_is_key_or_button(evt) \
  97.     (EventProperties[(evt).type] & EPKeyOrButton)
  98. #define event_is_grabbable(evt) \
  99.     (EventProperties[(evt).type] & EPGrabRedirected)
  100. #define event_is_redirectable(evt) \
  101.     (EventProperties[(evt).type] & EPRedirectable)
  102. #define event_is_crossing(evt) \
  103.     (EventProperties[(evt).type] & EPCrossing)
  104. #define event_is_focus(evt) \
  105.     (EventProperties[(evt).type] & EPFocus)
  106.  
  107. #define LegalPointerEventMask(mask) ((mask) & (0xffff ^ 0x8003))
  108.  
  109. #ifndef WOB_h
  110. #include "wob.h"
  111. #endif
  112.  
  113. #define GWMUserEvent (LASTEvent+1)
  114.  
  115. /* The Context is a structure of all screen-dependent variables
  116.  * Multi-screen operation will be handled by switching contextes
  117.  */
  118.  
  119. EXT GWMScreenContext *GWMManagedScreens;/* the list of all screens on the
  120.                        display, being NULL if not
  121.                        managed. */
  122.     
  123. EXT GWMScreenContext  Context;        /* the current screen (pointer to) */
  124. EXT GWMScreenContext *ContextPtr;    /* used by the following macro */
  125. EXT GWMScreenContext GWM_OldContext;    /* for FOR_ALL_SCREENS macro */
  126.  
  127. #define FOR_ALL_SCREENS \
  128.     { GWMScreenContext OldContext = Context, *OldContextPtr = ContextPtr;\
  129.     for (ContextPtr = GWMManagedScreens;\
  130.              ContextPtr < GWMManagedScreens + ScreenCount(dpy); \
  131.              ContextPtr++) \
  132.         if(Context = *ContextPtr)
  133.  
  134. #define END_OF_ALL_SCREENS Context = OldContext; ContextPtr = OldContextPtr;}
  135.  
  136. /*
  137.  * ICCC structures
  138.  */
  139.  
  140. #define WM_STATE_Withdrawn 0
  141. #define WM_STATE_Normal 1
  142. #define WM_STATE_Iconified 3
  143.  
  144. typedef struct _WM_STATE_PROP {
  145.     Card32    state;        /* WM_STATE_Withdrawn, _Normal, _Iconified */
  146.     Window    icon;        /* X window id of the icon */
  147. } *WM_STATE_PROP;
  148.  
  149. #define WM_STATE_PROP_Length 2  /* in Card32 elements */
  150.  
  151. /* max length of some properties */
  152.  
  153. #define WM_COLORMAP_WINDOWS_PROP_Length 80 /* number of sub-wins colormaps */
  154. #define WM_PROTOCOLS_PROP_Length        40 /* number of protocols */
  155.  
  156. /*
  157.  * some useful macros
  158.  */
  159.  
  160. #define check_window_size(wob) \
  161.     if(!wob -> box.width && !wob -> box.height) \
  162.         GWM_no_size_window_error(wob);
  163.  
  164. #define SAVE_EVENT_CONTEXT \
  165.         Event old_TriggeringEvent = TriggeringEvent; \
  166.     Wob   old_TargetWob = TargetWob; \
  167.     ClientWindow old_TargetWindow = TargetWindow; \
  168.     GWMScreenContext old_Context = Context
  169.  
  170. #define RESTORE_EVENT_CONTEXT \
  171.     TriggeringEvent = old_TriggeringEvent; \
  172.     TargetWob = old_TargetWob; \
  173.     TargetWindow = old_TargetWindow; \
  174.     Context = old_Context
  175.  
  176. #define TrapXErrors(statement) (\
  177.       XSync(dpy, 0), XSetErrorHandler(NoXError), ErrorStatus = 0,    \
  178.     statement,  \
  179.     XSync(dpy, 0), XSetErrorHandler(XError), ErrorStatus)
  180.  
  181. #define FlushXErrors() \
  182.         XSetErrorHandler(NoXError), XSync(dpy, 0), XSetErrorHandler(XError)
  183.  
  184. /*
  185.  * tracing facilities:
  186.  * trace1(level, string, parameter);
  187.  * trace(level, string);
  188.  */
  189.  
  190. #ifdef DEBUG
  191. EXT int      GWM_Tracelevel INIT(0);
  192.  
  193. #define trace(l, s) ((l<=GWM_Tracelevel) ? fprintf(stderr,s) : 0);
  194. #define trace1(l, s, p) ((l<=GWM_Tracelevel) ? fprintf(stderr,s,p) : 0);
  195. #define trace2(l, s, p,q) ((l<=GWM_Tracelevel) ? fprintf(stderr,s,p,q) : 0);
  196. #else /* DEBUG */
  197. #define trace(l, s)
  198. #define trace1(l, s, p)
  199. #define trace2(l, s, p,q)
  200. #endif /* DEBUG */
  201.  
  202. #ifdef SECURE
  203. extern char    *eventtype[];
  204.  
  205. #endif /* SECURE */
  206.  
  207. #ifndef NULL
  208. #define NULL    0
  209. #endif
  210.  
  211. /*
  212.  * GWM global variables, common to the display
  213.  */
  214.  
  215. EXT Display    *dpy;        /* THE display */
  216. EXT Time     GWMTime INIT(0);/* the latest known server date */
  217. EXT XContext     wob_context;    /* to retrieve wobs via hooks */
  218. EXT XContext     client_context;    /* to retrieve wobs via clients */
  219. EXT int         errno;
  220. EXT Wob         TargetWob INIT(0);
  221. EXT ClientWindow TargetWindow INIT(0);
  222. EXT Event       TriggeringEvent INIT(0);
  223. EXT char       *GWM_Display;
  224. EXT int        GWM_ScreenCount;
  225. EXT int        GWM_DefaultScreen;
  226. EXT ClientWindow GWM_window_being_decorated INIT(0);
  227. EXT int        GWM_ShapeExtension INIT(0); /* display has shape extension ? */
  228. EXT int        GWM_ShapeEventBase INIT(0); /* first event # of shape ext. */
  229. EXT int        GWM_ShapeErrorBase INIT(0); /* first error # of shape ext. */
  230.  
  231. /* switches */
  232. EXT Wob         GWM_ServerGrabbed INIT(0);
  233. EXT Wob         GWM_KeyboardGrabbed INIT(0);
  234. EXT int         GWM_ProcessingExistingWindows INIT(0);
  235. EXT int     GWM_Mapall INIT(0);
  236. EXT int     GWM_Synchronize INIT(0);
  237. EXT int        GWM_UserSynchronous INIT(1);
  238. EXT int        GWM_Monoscreen INIT(0);
  239. EXT int        GWM_No_set_focus INIT(0);
  240. EXT char       *GWM_ScreensNotManaged INIT(0);
  241. EXT int         GWM_Movegrid INIT(0);
  242. EXT int         GWM_Resizegrid INIT(0);
  243. EXT int     GWM_Move_meter INIT(0);        /* is there a moving meter */
  244. EXT int     GWM_Resize_meter INIT(1);    /* is there a resize meter */
  245. EXT int         GWM_InvertCursors INIT(1); /* for cursor-make */
  246. EXT XEvent      GWM_LastEvent;        /* last key or button (user) event */
  247. EXT Time        GWM_DoubleClickDelay INIT(500);    /* in millisecond */
  248. EXT int        GWM_check_input_focus_flag INIT(1);/*  set focus check flag */
  249. EXT int        GWM_backup_old_property INIT(0);
  250. EXT int        GWM_GrabChildEvents INIT(0);
  251. EXT int        GWM_Propagate_user_events INIT(1);
  252. EXT ClientWindow GWM_Window_being_opened INIT(0);
  253. EXT int        GWM_resize_style INIT(0);
  254. EXT int        GWM_window_cutting_size INIT(0);
  255. EXT int         GWM_Mwm_catch_corners INIT(0);
  256. EXT int         GWM_grab_keyboard_also INIT(0);
  257. EXT int         GWM_confine_grabs INIT(0);
  258. EXT int         GWM_confine_windows INIT(0);
  259. EXT int         GWM_quiet INIT(0);
  260. EXT int     GWM_reenter_on_opens INIT(1);
  261. EXT int     GWM_delete_read_properties INIT(False);
  262. EXT int     GWM_never_warp_pointer INIT(0);
  263. EXT int     GWM_kill_pid INIT(0);
  264. EXT int     GWM_kill_pid_sig INIT(0);
  265. EXT int         GWM_xpm_closeness INIT(40000);
  266. EXT int     GWM_allow_border_on_shaped_windows INIT(False);
  267.  
  268. #ifdef DEBUG
  269. EXT int         GWM_GrabServer INIT(0);
  270. #else
  271. EXT int         GWM_GrabServer INIT(1);
  272. #endif /* DEBUG */
  273.  
  274. /* masks */
  275. EXT unsigned int ClientMask          INIT(SubstructureRedirectMask);
  276. EXT unsigned int ClientClientMask    INIT(PropertyChangeMask
  277.                     | StructureNotifyMask
  278.                     | ColormapChangeMask);
  279. EXT unsigned int RootMask         INIT(SubstructureRedirectMask
  280.                     | ColormapChangeMask
  281.                     | PropertyChangeMask);
  282. EXT unsigned int WobMask          INIT(0);
  283. EXT unsigned int MeterMask         INIT(ExposureMask);
  284.  
  285. /* static data for remebering GWM state */
  286.  
  287. EXT int     GWM_argc;            /* unix argc argv of GWM */
  288. EXT char     ** GWM_argv;
  289. EXT char     ** GWM_is_restarting INIT(0);
  290. EXT int        GWM_is_ending INIT(0);
  291. EXT int        GWM_time_of_last_bus_error INIT(0);
  292. EXT union {            /* keep track of old prop */
  293.     XWMHints    wm_hints;
  294. } GWM_backup_of_old_property;
  295.  
  296. /* defaults */
  297. EXT int         DefaultBorderWidth INIT(1);
  298. EXT int         DefaultLabelHorizontalMargin INIT(4);
  299. EXT int         DefaultLabelVerticalMargin INIT(2);
  300. EXT int         DefaultPlugSeparator INIT(4);
  301. EXT int         DefaultBarSeparator INIT(0);
  302. EXT int         DefaultInnerBorderwidth INIT(ANY);
  303. EXT int        DefaultMenuDirection INIT(1);
  304. EXT int        DefaultBarMinWidth INIT(0);
  305. EXT int        DefaultBarMaxWidth INIT(1000);
  306. EXT int        DefaultMenuMinWidth INIT(1);
  307. EXT int        DefaultMenuMaxWidth INIT(10000);
  308. EXT int         DefaultFont;
  309.  
  310. /* X Atoms */
  311. EXT Atom    XA_WM_STATE;
  312. EXT Atom    XA_WM_COLORMAP_WINDOWS;
  313. EXT Atom    XA_WM_CHANGE_STATE;
  314. EXT Atom    XA_WM_PROTOCOLS;
  315. EXT Atom    XA_WM_TAKE_FOCUS;
  316. EXT Atom    XA_WM_SAVE_YOURSELF;
  317. EXT Atom    XA_WM_DELETE_WINDOW;
  318. EXT Atom        XA_GWM_EXECUTE;
  319. EXT Atom        XA_GWM_RUNNING;
  320.  
  321.  /* WOOL Atoms of the context */
  322. #ifdef INCLUDE_WL_ATOM_H
  323.  
  324. EXT WOOL_Atom   WA_borderwidth;
  325. EXT WOOL_Atom   WA_borderpixel;
  326. EXT WOOL_Atom   WA_background;
  327. EXT WOOL_Atom   WA_foreground;
  328. EXT WOOL_Atom   WA_bordertile;
  329. EXT WOOL_Atom   WA_fsm;
  330. EXT WOOL_Atom   WA_menu;
  331. EXT WOOL_Atom   WA_tile;
  332. EXT WOOL_Atom   WA_cursor;
  333. EXT WOOL_Atom   WA_property;
  334. EXT WOOL_Atom   WA_describe_window;
  335. EXT WOOL_Atom   WA_window_description;
  336. EXT WOOL_Atom   WA_icon_description;
  337. EXT WOOL_Atom   WA_describe_screen;
  338. EXT WOOL_Atom   WA_window;
  339. EXT WOOL_Atom   WA_bar;
  340. EXT WOOL_Atom   WA_plug;
  341. EXT WOOL_Atom   WA_root;
  342. EXT WOOL_Atom   WA_icon;
  343. EXT WOOL_Atom   WA_root_window;
  344. EXT WOOL_Atom   WA_grabs;
  345. EXT WOOL_Atom   WA_grab;
  346. EXT WOOL_Atom   WA_ungrab;
  347. EXT WOOL_Atom   WA_opening;
  348. EXT WOOL_Atom   WA_closing;
  349. EXT WOOL_Atom    WA_mapped;
  350. EXT WOOL_Atom    WA_stacking_order;
  351. EXT WOOL_Atom   WA_iconify_window;
  352. EXT WOOL_Atom   WA_font;
  353. EXT WOOL_Atom   WA_horizontal_margin;
  354. EXT WOOL_Atom   WA_vertical_margin;
  355. EXT WOOL_Atom   WA_color;
  356. EXT WOOL_Atom   WA_gray;
  357. EXT WOOL_Atom   WA_mono;
  358. EXT WOOL_Atom   WA_ContextNamespace;
  359. EXT WOOL_Atom   WA_cursorNW;
  360. EXT WOOL_Atom   WA_cursorNE;
  361. EXT WOOL_Atom   WA_cursorN;
  362. EXT WOOL_Atom   WA_cursorSW;
  363. EXT WOOL_Atom   WA_cursorSE;
  364. EXT WOOL_Atom   WA_cursorS;
  365. EXT WOOL_Atom   WA_cursorE;
  366. EXT WOOL_Atom   WA_cursorW;
  367. EXT WOOL_Atom    WA_here;
  368. EXT WOOL_Atom    WA_class_name;
  369. EXT WOOL_Atom    WA_client_name;
  370. EXT WOOL_Atom    WA_icon_name;
  371. EXT WOOL_Atom    WA_starts_iconic;
  372. EXT WOOL_Atom   WA_x;
  373. EXT WOOL_Atom   WA_y;
  374. EXT WOOL_Atom   WA_gravity;
  375. EXT WOOL_Atom   WA_map_on_raise;
  376. EXT WOOL_Atom   WA_ignore_take_focus;
  377.  
  378. #endif /* INCLUDE_WL_ATOM_H */
  379.  
  380. #ifdef INCLUDE_WL_LIST_H
  381. EXT WOOL_List   WL_describe_window_call;
  382. EXT WOOL_List   WL_describe_screen_call;
  383. EXT WOOL_List   WL_iconify_window_call;
  384.  
  385. #endif /* INCLUDE_WL_LIST_H */
  386.  
  387. #ifdef INCLUDE_WL_STRING_H
  388.  
  389. EXT WOOL_String DefaultClientClass;
  390. EXT WOOL_String DefaultClientName;
  391. EXT WOOL_String DefaultWindowName;
  392. EXT WOOL_String DefaultMachineName;
  393. EXT WOOL_String DefaultIconName;
  394.  
  395. #endif /* INCLUDE_WL_STRING_H */
  396.