Add history to some dialog boxes
[wmaker-crm.git] / src / WindowMaker.h
1 /*
2  *  Window Maker window manager
3  *
4  *  Copyright (c) 1997-2003 Alfredo K. Kojima
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, write to the Free Software
18  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19  *  USA.
20  */
21
22 #ifndef WINDOWMAKER_H_
23 #define WINDOWMAKER_H_
24
25 #include "wconfig.h"
26
27 #include <assert.h>
28 #include <limits.h>
29
30 #include <WINGs/WINGs.h>
31
32 #if defined(HAVE_LIBINTL_H) && defined(I18N)
33 # include <libintl.h>
34 # define _(text) gettext(text)
35 #else
36 # define _(text) (text)
37 #endif
38
39
40
41
42 /* class codes */
43 typedef enum {
44     WCLASS_UNKNOWN = 0,
45     WCLASS_WINDOW = 1,          /* managed client windows */
46     WCLASS_MENU = 2,            /* root menus */
47     WCLASS_APPICON = 3,
48     WCLASS_DUMMYWINDOW = 4,     /* window that holds window group leader */
49     WCLASS_MINIWINDOW = 5,
50     WCLASS_DOCK_ICON = 6,
51     WCLASS_PAGER = 7,
52     WCLASS_TEXT_INPUT = 8,
53     WCLASS_FRAME = 9
54 } WClassType;
55
56
57 /*
58  * generic window levels (a superset of the N*XTSTEP ones)
59  * Applications should use levels between WMDesktopLevel and
60  * WMScreensaverLevel anything boyond that range is allowed,
61  * but discouraged.
62  */
63 enum {
64     WMBackLevel = INT_MIN+1,    /* Very lowest level */
65     WMDesktopLevel = -1000,             /* Lowest level of normal use */
66     WMSunkenLevel = -1,
67     WMNormalLevel = 0,
68     WMFloatingLevel = 3,
69     WMDockLevel = 5,
70     WMSubmenuLevel = 15,
71     WMMainMenuLevel = 20,
72     WMStatusLevel = 21,
73     WMFullscreenLevel = 50,
74     WMModalLevel = 100,
75     WMPopUpLevel = 101,
76     WMScreensaverLevel = 1000,
77     WMOuterSpaceLevel = INT_MAX
78 };
79
80 /*
81  * WObjDescriptor will be used by the event dispatcher to
82  * send events to a particular object through the methods in the
83  * method table. If all objects of the same class share the
84  * same methods, the class method table should be used, otherwise
85  * a new method table must be created for each object.
86  * It is also assigned to find the parent structure of a given
87  * window (like the WWindow or WMenu for a button)
88  */
89
90 typedef struct WObjDescriptor {
91     void *self;                        /* the object that will be called */
92     /* event handlers */
93     void (*handle_expose)(struct WObjDescriptor *sender, XEvent *event);
94
95     void (*handle_mousedown)(struct WObjDescriptor *sender, XEvent *event);
96
97     void (*handle_anything)(struct WObjDescriptor *sender, XEvent *event);
98
99     void (*handle_enternotify)(struct WObjDescriptor *sender, XEvent *event);
100     void (*handle_leavenotify)(struct WObjDescriptor *sender, XEvent *event);
101
102     WClassType parent_type;            /* type code of the parent */
103     void *parent;                      /* parent object (WWindow or WMenu) */
104 } WObjDescriptor;
105
106
107 /* shutdown modes */
108 typedef enum {
109     WSExitMode,
110     WSLogoutMode,
111     WSKillMode,
112     WSRestartPreparationMode
113 } WShutdownMode;
114
115
116 /* internal buttons */
117 #define WBUT_CLOSE              0
118 #define WBUT_BROKENCLOSE        1
119 #define WBUT_ICONIFY            2
120 #define WBUT_KILL               3
121 #ifdef XKB_BUTTON_HINT
122 #define WBUT_XKBGROUP1          4
123 #define WBUT_XKBGROUP2          5
124 #define WBUT_XKBGROUP3          6
125 #define WBUT_XKBGROUP4          7
126 #define PRED_BPIXMAPS           8 /* reserved for 4 groups */
127 #else
128 #define PRED_BPIXMAPS           4 /* count of WBUT icons */
129 #endif /* XKB_BUTTON_HINT */
130
131 /* cursors */
132 #define WCUR_DEFAULT            0
133 #define WCUR_NORMAL             0
134 #define WCUR_MOVE               1
135 #define WCUR_RESIZE             2
136 #define WCUR_TOPLEFTRESIZE      3
137 #define WCUR_TOPRIGHTRESIZE     4
138 #define WCUR_BOTTOMLEFTRESIZE   5
139 #define WCUR_BOTTOMRIGHTRESIZE  6
140 #define WCUR_VERTICALRESIZE     7
141 #define WCUR_HORIZONRESIZE      8
142 #define WCUR_WAIT               9
143 #define WCUR_ARROW              10
144 #define WCUR_QUESTION           11
145 #define WCUR_TEXT               12
146 #define WCUR_SELECT             13
147 #define WCUR_ROOT               14
148 #define WCUR_EMPTY              15
149 #define WCUR_LAST               16
150
151 /* geometry displays */
152 #define WDIS_NEW                0       /* new style */
153 #define WDIS_CENTER             1       /* center of screen */
154 #define WDIS_TOPLEFT            2       /* top left corner of screen */
155 #define WDIS_FRAME_CENTER       3       /* center of the frame */
156 #define WDIS_NONE               4
157
158 /* keyboard input focus mode */
159 #define WKF_CLICK       0
160 #define WKF_SLOPPY      2
161
162 /* colormap change mode */
163 #define WCM_CLICK       0
164 #define WCM_POINTER     1
165
166 /* window placement mode */
167 #define WPM_MANUAL      0
168 #define WPM_CASCADE     1
169 #define WPM_SMART       2
170 #define WPM_RANDOM      3
171 #define WPM_AUTO        4
172
173 /* text justification */
174 #define WTJ_CENTER      0
175 #define WTJ_LEFT        1
176 #define WTJ_RIGHT       2
177
178 /* iconification styles */
179 #define WIS_ZOOM        0
180 #define WIS_TWIST       1
181 #define WIS_FLIP        2
182 #define WIS_NONE        3
183 #define WIS_RANDOM      4 /* secret */
184
185 /* switchmenu actions */
186 #define ACTION_ADD              0
187 #define ACTION_REMOVE           1
188 #define ACTION_CHANGE           2
189 #define ACTION_CHANGE_WORKSPACE 3
190 #define ACTION_CHANGE_STATE     4
191
192
193 /* speeds */
194 #define SPEED_ULTRAFAST 0
195 #define SPEED_FAST      1
196 #define SPEED_MEDIUM    2
197 #define SPEED_SLOW      3
198 #define SPEED_ULTRASLOW 4
199
200
201 /* window states */
202 #define WS_FOCUSED      0
203 #define WS_UNFOCUSED    1
204 #define WS_PFOCUSED     2
205
206 /* clip title colors */
207 #define CLIP_NORMAL     0
208 #define CLIP_COLLAPSED  1
209
210
211 /* icon yard position */
212 #define IY_VERT         1
213 #define IY_HORIZ        0
214 #define IY_TOP          2
215 #define IY_BOTTOM       0
216 #define IY_RIGHT        4
217 #define IY_LEFT         0
218
219
220 /* menu styles */
221 #define MS_NORMAL               0
222 #define MS_SINGLE_TEXTURE       1
223 #define MS_FLAT                 2
224
225 /* workspace actions */
226 #define WA_NONE                 0
227 #define WA_SELECT_WINDOWS       1
228 #define WA_OPEN_APPMENU         2
229 #define WA_OPEN_WINLISTMENU     3
230 #define WA_SWITCH_WORKSPACES    4
231
232 /* workspace display position */
233 #define WD_NONE         0
234 #define WD_CENTER       1
235 #define WD_TOP          2
236 #define WD_BOTTOM       3
237 #define WD_TOPLEFT      4
238 #define WD_TOPRIGHT     5
239 #define WD_BOTTOMLEFT   6
240 #define WD_BOTTOMRIGHT  7
241
242
243 /* workspace border position */
244 #define WB_NONE         0
245 #define WB_LEFTRIGHT    1
246 #define WB_TOPBOTTOM    2
247 #define WB_ALLDIRS      (WB_LEFTRIGHT|WB_TOPBOTTOM)
248
249
250 /* program states */
251 #define WSTATE_NORMAL           0
252 #define WSTATE_NEED_EXIT        1
253 #define WSTATE_NEED_RESTART     2
254 #define WSTATE_EXITING          3
255 #define WSTATE_RESTARTING       4
256 #define WSTATE_MODAL            5
257 #define WSTATE_NEED_REREAD      6
258
259
260 #define WCHECK_STATE(state)     (state == WProgramState)
261
262
263 #define WCHANGE_STATE(nstate) {\
264     if (WProgramState == WSTATE_NORMAL\
265         || nstate != WSTATE_MODAL)\
266         WProgramState = (nstate); \
267     if (WProgramSigState != 0)\
268         WProgramState = WProgramSigState;\
269 }
270
271
272 /* only call inside signal handlers, with signals blocked */
273 #define SIG_WCHANGE_STATE(nstate) {\
274     WProgramSigState = (nstate);\
275     WProgramState = (nstate);\
276 }
277
278
279 /* Flags for the Window Maker state when restarting/crash situations */
280 #define WFLAGS_NONE       (0)
281 #define WFLAGS_CRASHED    (1<<0)
282
283
284 /* notifications */
285
286 #ifdef MAINFILE
287 #define NOTIFICATION(n) char *WN##n = #n
288 #else
289 #define NOTIFICATION(n) extern char *WN##n
290 #endif
291
292 NOTIFICATION(WindowAppearanceSettingsChanged);
293
294 NOTIFICATION(IconAppearanceSettingsChanged);
295
296 NOTIFICATION(IconTileSettingsChanged);
297
298 NOTIFICATION(MenuAppearanceSettingsChanged);
299
300 NOTIFICATION(MenuTitleAppearanceSettingsChanged);
301
302
303 /* appearance settings clientdata flags */
304 enum {
305     WFontSettings = 1 << 0,
306     WTextureSettings = 1 << 1,
307     WColorSettings = 1 << 2
308 };
309
310
311
312 typedef struct {
313     int x1, y1;
314     int x2, y2;
315 } WArea;
316
317 typedef struct WCoord {
318     int x, y;
319 } WCoord;
320
321 typedef struct WPreferences {
322     char *pixmap_path;                 /* : separate list of */
323     /* paths to find pixmaps */
324     char *icon_path;                   /* : separated list of */
325     /* paths to find icons */
326     WMArray *fallbackWMs;              /* fallback window manager list */
327
328     char *logger_shell;                /* shell to log child stdi/o */
329
330     RImage *button_images;             /* titlebar button images */
331
332     char smooth_workspace_back;
333     signed char size_display;                  /* display type for resize geometry */
334     signed char move_display;                  /* display type for move geometry */
335     signed char window_placement;              /* window placement mode */
336     signed char colormap_mode;                 /* colormap focus mode */
337     signed char focus_mode;                    /* window focusing mode */
338
339     char opaque_move;                  /* update window position during */
340     /* move */
341
342     char wrap_menus;                   /* wrap menus at edge of screen */
343     char scrollable_menus;             /* let them be scrolled */
344     char align_menus;                  /* align menu with their parents */
345
346     char use_saveunders;               /* turn on SaveUnders for menus,
347     * icons etc. */
348     char no_window_over_dock;
349
350     char no_window_over_icons;
351
352     WCoord window_place_origin;        /* Offset for windows placed on
353     * screen */
354
355     char constrain_window_size;        /* don't let windows get bigger than
356     * screen */
357
358     char windows_cycling;              /* windoze cycling */
359     char circ_raise;                   /* raise window after Alt-tabbing */
360
361     char ignore_focus_click;
362
363     char open_transients_with_parent;  /* open transient window in
364     same workspace as parent */
365     signed char title_justification;           /* titlebar text alignment */
366
367     int window_title_clearance;
368     int menu_title_clearance;
369     int menu_text_clearance;
370
371     char multi_byte_text;
372 #ifdef KEEP_XKB_LOCK_STATUS
373     char modelock;
374 #endif
375
376     char no_dithering;                 /* use dithering or not */
377
378     char no_sound;                     /* enable/disable sound */
379     char no_animations;                /* enable/disable animations */
380
381     char no_autowrap;                  /* wrap workspace when window is moved
382     * to the edge */
383
384     char auto_arrange_icons;           /* automagically arrange icons */
385
386     char icon_box_position;            /* position to place icons */
387
388     signed char iconification_style;          /* position to place icons */
389
390     char disable_root_mouse;           /* disable button events in root window */
391
392     char auto_focus;                   /* focus window when it's mapped */
393
394
395     char *icon_back_file;              /* background image for icons */
396
397     WCoord *root_menu_pos;             /* initial position of the root menu*/
398     WCoord *app_menu_pos;
399
400     WCoord *win_menu_pos;
401
402     signed char icon_yard;                     /* aka iconbox */
403
404     int raise_delay;                   /* delay for autoraise. 0 is disabled */
405
406     int cmap_size;                     /* size of dithering colormap in colors
407     * per channel */
408
409     int icon_size;                     /* size of the icon */
410
411     signed char menu_style;            /* menu decoration style */
412
413     signed char workspace_name_display_position;
414
415     unsigned int modifier_mask;        /* mask to use as kbd modifier */
416
417
418     char ws_advance;                   /* Create new workspace and advance */
419
420 #ifdef VIRTUAL_DESKTOP
421     unsigned int vdesk_enable;
422     unsigned int vedge_bordersize;
423     unsigned int vedge_hscrollspeed;
424     unsigned int vedge_vscrollspeed;
425     unsigned int vedge_resistance;
426     unsigned int vedge_attraction;
427 #endif
428
429     char ws_cycle;                     /* Cycle existing workspaces */
430
431     char save_session_on_exit;         /* automatically save session on exit */
432
433     char sticky_icons;                 /* If miniwindows will be onmipresent */
434
435     char dont_confirm_kill;            /* do not confirm Kill application */
436
437     char disable_miniwindows;
438
439     char dont_blink;                   /* do not blink icon selection */
440
441     /* Appearance options */
442     char new_style;                    /* Use newstyle buttons */
443     char superfluous;                  /* Use superfluous things */
444
445     /* root window mouse bindings */
446     signed char mouse_button1;         /* action for left mouse button */
447     signed char mouse_button2;         /* action for middle mouse button */
448     signed char mouse_button3;         /* action for right mouse button */
449     signed char mouse_wheel;           /* action for mouse wheel */
450
451     /* balloon text */
452     char window_balloon;
453     char miniwin_balloon;
454     char appicon_balloon;
455     char help_balloon;
456
457     /* some constants */
458     int dblclick_time;                 /* double click delay time in ms */
459
460     /* animate menus */
461     signed char menu_scroll_speed;             /* how fast menus are scrolled */
462
463     /* animate icon sliding */
464     signed char icon_slide_speed;              /* icon slide animation speed */
465
466     /* shading animation */
467     signed char shade_speed;
468
469     int edge_resistance;
470     char attract;
471
472     unsigned int workspace_border_size; /* Size in pixels of the workspace border */
473     char workspace_border_position;     /* Where to leave a workspace border */
474     char single_click;                  /* single click to lauch applications */
475     int history_lines;                  /* history of "Run..." dialog */
476
477     RImage *swtileImage;
478     RImage *swbackImage[9];
479
480     struct {
481         unsigned int nodock:1;         /* don't display the dock */
482         unsigned int noclip:1;         /* don't display the clip */
483         unsigned int nocpp:1;          /* don't use cpp */
484         unsigned int noupdates:1;      /* don't require ~/GNUstep (-static) */
485         unsigned int noautolaunch:1;   /* don't autolaunch apps */
486         unsigned int norestore:1;      /* don't restore session */
487         unsigned int create_stdcmap:1; /* create std colormap */
488         unsigned int restarting:2;
489     } flags;                           /* internal flags */
490 } WPreferences;
491
492
493
494 /****** Global Variables  ******/
495 extern Display  *dpy;
496 extern char *ProgName;
497 extern unsigned int ValidModMask;
498 extern char WProgramState;
499 extern char WProgramSigState;
500
501
502 /****** Global Functions ******/
503 extern void wAbort(Bool dumpCore);
504
505
506 /****** Notifications ******/
507 extern const char *WMNManaged;
508 extern const char *WMNUnmanaged;
509 extern const char *WMNChangedWorkspace;
510 extern const char *WMNChangedState;
511 extern const char *WMNChangedFocus;
512 extern const char *WMNChangedStacking;
513 extern const char *WMNChangedName;
514
515 extern const char *WMNWorkspaceCreated;
516 extern const char *WMNWorkspaceDestroyed;
517 extern const char *WMNWorkspaceChanged;
518 extern const char *WMNWorkspaceNameChanged;
519
520 extern const char *WMNResetStacking;
521 #endif
522