Initial revision
[ssr] / StraySrc / Glass / !Glass / h / _window
1 /*
2 * _window.h
3 *
4 * Private window definitions
5 *
6 * © 1994-1998 Straylight
7 */
8
9 /*----- Licensing note ----------------------------------------------------*
10 *
11 * This file is part of Straylight's Glass.
12 *
13 * Glass is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2, or (at your option)
16 * any later version.
17 *
18 * Glass is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with Glass. If not, write to the Free Software Foundation,
25 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26 */
27
28 #ifndef ___window_h
29 #define ___window_h
30
31 #ifndef __gPrefs_h
32 #include "gPrefs.h"
33 #endif
34
35 #ifndef __gStruct
36 #include "gStruct.h"
37 #endif
38
39 /*----- Common macros -----------------------------------------------------*/
40
41 /*
42 * Macros describing parts of icons (as returned by window__pointerInfo)
43 */
44
45 /*
46 * These have been redefined to be a bitfield (24/5/93):
47 * And then re-redefined to be a different bitfield (3/2/98):
48 *
49 * bit 24 set == drag moves top of icon
50 * bit 25 set == drag moves bottom of icon
51 * bit 26 set == drag moves left of icon
52 * bit 27 set == drag moves right of icon
53 *
54 * The values 3, b and c are not defined - They may be used for future
55 * expansion, but I doubt it somehow. d and e are used to describe
56 * guidelines - the magic number is ORred with the guide number.
57 */
58
59 #define window__TOP 0x01000000 /* The top edge drag box */
60 #define window__BOTTOM 0x02000000 /* The bottom edge drag box */
61 #define window__LEFT 0x04000000 /* The left edge drag box */
62 #define window__RIGHT 0x08000000 /* The right edge drag box */
63 #define window__MAIN 0x0f000000 /* The main part of the icon */
64 #define window__TOPLEFT 0x05000000 /* The top left corner drag box */
65 #define window__TOPRIGHT 0x09000000 /* The top right corner drag box */
66 #define window__BOTTOMLEFT 0x06000000 /* The bottom left corner drag box */
67 #define window__BOTTOMRIGHT 0x0a000000 /* The bottom right corner drag box */
68
69 #define window__HORGUIDE 0x0d000000 /* A horizontal guide */
70 #define window__VERGUIDE 0x0e000000 /* A vertical guide */
71 #define window__GRABICON 0x07000000 /* This is a drag of a grabbed icon */
72 #define window__SELECT 0x00000000 /* This is a drag to select icons */
73
74 #define window__ZONEMASK 0x0F000000 /* Mask for drag zones */
75 #define window__ICONMASK 0x00FFFFFF /* Mask for icon numbers */
76
77 /*
78 * Colours for things
79 */
80
81 #define window__SELBOXCOL (gPrefs_current()->sBColour)
82 #define window__HANDCOL (gPrefs_current()->sHColour)
83 #define window__MSELBOXCOL (gPrefs_current()->sSColour)
84 #define window__DRAGCOL 0x0b
85 #define window__GUIDECOL (gPrefs_current()->gGdeCol)
86 #define window__GDESELCOL (gPrefs_current()->gGdeSelCol)
87
88 /*
89 * Other things
90 */
91
92 #define window__HANDLEWIDTH gPrefs_current()->sHandSize
93 #define window__SNAPDIST 16
94 #define window__DRAGTIME 0
95
96 #define max2(a,b) ((a)>(b) ? (a) : (b))
97 #define min2(a,b) ((a)<(b) ? (a) : (b))
98
99 /*----- Low level graphics handling ---------------------------------------*/
100
101 /*
102 * void window__colourChange(int col1,int col2)
103 *
104 * Use
105 * Sets up the current foreground colour so that when plotted over colour
106 * col1 it looks like col2 and vice-versa. The effects of plotting over
107 * other colours is defined to be psychedelically interesting, but not
108 * pretty.
109 *
110 * Basically, all it does is suss out what the colours really mean and XOR
111 * them together.
112 *
113 * Parameters
114 * int col1,int col2 == the Wimp colour numbers to swap between
115 */
116
117 void window__colourChange(int col1,int col2);
118
119 /*
120 * void window__setXORColour(glass_windPointer *w,int col)
121 *
122 * Use
123 * Sets up the current foreground colour so that it appears to be WIMP
124 * colour col on the specified window background. Lots of tedious
125 * ColourTransing to do on this, with no real reward, but at least it will
126 * look vaguely right in 256 colour modes.
127 *
128 * Parameters
129 * glass_windPointer *w == the window in which to set the colour
130 * int col == the colour to set
131 */
132
133 void window__setXORColour(glass_windPointer *w,int col);
134
135 /*
136 * void window__makeDashPattern(int ptn)
137 *
138 * Use
139 * Sets the OS dash pattern to the given pattern (only the lowest byte
140 * is considered).
141 *
142 * Parameters
143 * int ptn == the LSB of this word contains the dash pattern as a bit
144 * pattern
145 */
146
147 void window__makeDashPattern(int ptn);
148
149 /*
150 * void window__setDash(void)
151 *
152 * Use
153 * Sets the dashed pattern so that it looks as if a 'rotating' box is being
154 * dragged, like the WIMP's, only better... The box is set up so that a
155 * SINGLE exclusive-or plot will move the dash round.
156 */
157
158 void window__setDash(void);
159
160 /*
161 * void window__rotate(int by)
162 *
163 * Use
164 * Rotates the current rotating-dash pattern by a given amount. This is
165 * used to rotate the dash box while the box is moving.
166 *
167 * Parameters
168 * int by == the number of steps to rotate the dash pattern.
169 */
170
171 void window__rotate(int by);
172
173 /*
174 * void window__rectangle(int x,int y,int w,int h)
175 *
176 * Use
177 * Draws a rectangle, using the current dotted line pattern
178 *
179 * Parameters
180 * int x == the left side of the rectangle
181 * int y == the right side of the rectangle
182 * int w == the width of the rectangle (may be <0)
183 * int h == the height of the rectangle (may be <0)
184 */
185
186 void window__rectangle(int x,int y,int w,int h);
187
188 /*----- Redrawing windows -------------------------------------------------*/
189
190 /*
191 * void window__drawSelectBox(glass_windPointer *w,
192 * int icon,
193 * BOOL makesi,
194 * wimp_redrawstr *r)
195 *
196 * Use
197 * Draws the selection box around an icon
198 *
199 * Parameters
200 * glass_windPointer *w == the window
201 * int icon == the icon
202 * BOOL makesi == whether we're going between a selected and main selected
203 * icon.
204 * wimp_redrawstr *r == the redraw structure
205 */
206
207 void window__drawSelectBox(glass_windPointer *w,
208 int icon,
209 BOOL makesi,
210 wimp_redrawstr *r);
211
212 /*
213 * void window__redrawDragBox(glass_windPointer *w,
214 * wimp_redrawstr *r,
215 * int x,
216 * int y)
217 *
218 * Use
219 * Redraws the screen during a drag operation, either to update the window
220 * during the drag, or to redraw the window should something silly happen
221 * to it.
222 *
223 * Parameters
224 * glass_windPointer *w == pointer to the window owning drag
225 * wimp_redrawstr *r == pointer to current redraw
226 * int x,int y == coordinates to draw drag relative to...
227 */
228
229 void window__redrawDragBox(glass_windPointer *w,wimp_redrawstr *r,
230 int x,int y);
231
232 /*
233 * void window__redraw(glass_windPointer *w,wimp_redrawstr *r,BOOL *more)
234 *
235 * Use
236 * Redraws a window following a call to Wimp_UpdateWindow or
237 * Wimp_RedrawWindow.
238 *
239 * Parameters
240 * glass_windPointer *w == the window to draw
241 * wimp_redrawstr *r == stuff about the redraw
242 * BOOL *more == whether there is more to do
243 */
244
245 void window__redraw(glass_windPointer *w,wimp_redrawstr *r,BOOL *more);
246
247 /*
248 * void window__redrawGuide(glass_windPointer *w,int guide)
249 *
250 * Use
251 * Forces a redraw of the specified guideline.
252 *
253 * Parameters
254 * glass_windPointer *w == the window containing the guideline
255 * int guide == the number of the guideline.
256 */
257
258 void window__redrawGuide(glass_windPointer *w,int guide);
259
260 /*----- Grabbing icons ----------------------------------------------------*/
261
262 /*
263 * void window__grabIcon(wimp_mousestr *m,void *handle)
264 *
265 * Use
266 * Grabs an icon from another application.
267 *
268 * Parameters
269 * wimp_mousestr *m == pointer to info about which icon to get
270 * void *handle == pointer to destination window
271 */
272
273 void window__grabIcon(wimp_mousestr *m,void *handle);
274
275 /*
276 * void window__doGrabIcon(wimp_box *b,glass_windPointer *w)
277 *
278 * Use
279 * Actually does a window grab job after all the pallaver.
280 *
281 * Parameters
282 * wimp_box *b == the box in which the icon is contained
283 * glass_windPointer *w == the window into which the icon is to be created
284 *
285 * Returns
286 * TRUE if the evtn has been successfully handled.
287 */
288
289 void window__doGrabIcon(wimp_box *b,glass_windPointer *w);
290
291 /*
292 * wimp_icon *window__qGrabbedIcon(void)
293 *
294 * Use
295 * Returns a pointer to the icon being grabbed
296 */
297
298 wimp_icon *window__qGrabbedIcon(void);
299
300 /*----- Dragging icons around ---------------------------------------------*/
301
302 /*
303 * void window__align(glass_windPointer *w,int *x,int *y)
304 *
305 * Use
306 * Aligns the given point to the *nearest* grid point. The point is
307 * fiddled in-situ. It does the Right Thing with negative points.
308 *
309 * Parameters
310 * glass_windPointer *w == the window we're using
311 * int *x == pass-by-reference x coord of point
312 * int *y == pass-by-reference y coord of point
313 */
314
315 void window__align(glass_windPointer *w,int *x,int *y);
316
317 /*
318 * void window__startDrag(int type,
319 * wimp_box *box,
320 * glass_windPointer *w,
321 * int x,int y)
322 *
323 * Use
324 * Starts a drag operation in the specified window
325 *
326 * Parameters
327 * int type == what sort of drag this is
328 * wimp_box *box == the bounding box of the object we're dragging
329 * glass_windPointer *w == the window in which the drag is taking place
330 * int x,int y == the mouse position the drag will start from
331 */
332
333 void window__startDrag(int type,
334 wimp_box *box,
335 glass_windPointer *w,
336 int x,int y);
337
338 /*
339 * glass_windPointer *window__dragWind(void)
340 *
341 * Use
342 * Returns the current dragging window
343 */
344
345 glass_windPointer *window__dragWind(void);
346
347 /*
348 * void window__setDragWind(glass_windPointer *w)
349 *
350 * Use
351 * Claims the current drag operation for the given window
352 */
353
354 void window__setDragWind(glass_windPointer *w);
355
356 /*
357 * int window__qDragType(void)
358 *
359 * Use
360 * Returns the current drag type
361 */
362
363 int window__qDragType(void);
364
365 /*
366 * wimp_box window__qDragBox(void)
367 *
368 * Use
369 * Returns the bounding box of the things being dragged
370 */
371
372 wimp_box window__qDragBox(void);
373
374 /*
375 * void window__dragCoords(int *x,int *y)
376 *
377 * Use
378 * Returns the current drag position
379 */
380
381 void window__dragCoords(int *x,int *y);
382
383 /*
384 * void window__dragStart(int *x,int *y)
385 *
386 * Use
387 * Returns the initial drag position
388 */
389
390 void window__dragStart(int *x,int *y);
391
392 /*----- Mouse pointer shape and position ----------------------------------*/
393
394 /*
395 * int window__pointerInfo(glass_windPointer *w,int from,BOOL zones)
396 *
397 * Use
398 * Returns the icon number of the icon which the pointer is over. Guides
399 * are also checked for.
400 *
401 * Parameters
402 * glass_windPointer *w == the window to use info from
403 * int from == number to search down from (or -1 for the top). This is
404 * useful for selection, multiple clicks moving down overlapping icons.
405 * BOOL zones == search for drag zones. If this is set, the routine
406 * searches for selected icons only. If it is clear, zones are not
407 * checked.
408 *
409 * Returns
410 * An icon number, or -1 for the background.
411 */
412
413 int window__pointerInfo(glass_windPointer *w,int from,BOOL zones);
414
415 /*
416 * BOOL window__pointerOverIcon(glass_windPointer *w,int icon)
417 *
418 * Use
419 * Informs the caller if the pointer is over the bounding box of the icon
420 * specified.
421 *
422 * Parameters
423 * glass_windPointer *w == window containing icon
424 * int icon == icon to check for
425 */
426
427 BOOL window__pointerOverIcon(glass_windPointer *w,int icon);
428
429 /*
430 * void window__setPtrShape(int icon)
431 *
432 * Use
433 * Sets the pointer shape accoding to the 'drag zone' part of the given
434 * icon number.
435 *
436 * Parameters
437 * int icon == the icon number
438 */
439
440 void window__setPtrShape(int icon);
441
442 /*----- Selection handling ------------------------------------------------*/
443
444 /*
445 * void window__select(glass_windPointer *w,int icon,BOOL sel)
446 *
447 * Use
448 * Selects or deselects the given icon.
449 *
450 * Parameters
451 * glass_windPointer *w == the window we're talking about
452 * int icon == the icon to select (or not)
453 * BOOL sel == TRUE to select, FALSE to deslect
454 */
455
456 void window__select(glass_windPointer *w,int icon,BOOL sel);
457
458 /*
459 * void window__setSelectedIcon(int i)
460 *
461 * Use
462 * Makes the specified icon in the current selection owner highlighted.
463 *
464 * Parameters
465 * int i == the icon number to highlight
466 */
467
468 void window__setSelectedIcon(int i);
469
470 /*
471 * void window__setSelectedIconDeselecting(int i)
472 *
473 * Use
474 * Sets up the currently selected icon, deselecting the old one.
475 *
476 * Parameters
477 * int i == the new icon to select
478 */
479
480 void window__setSelectedIconDeselecting(int i);
481
482 /*
483 * int window__lowestSelected(glass_windPointer *w)
484 *
485 * Use
486 * Returns the selected icon with the lowest number in the specified window.
487 */
488
489 int window__lowestSelected(glass_windPointer *w);
490
491 /*
492 * void window__gainSelection(glass_windPointer *w)
493 *
494 * Use
495 * Gives the specified window the input focus, tool and info bars, and the
496 * selection. If 0 is specified, then the tool bars are taken down, and no
497 * selection is set.
498 *
499 * Parameters
500 * glass_windPointer *w == the new selection owner
501 */
502
503 void window__gainSelection(glass_windPointer *w);
504
505 /*
506 * int window__selectedIcon(void)
507 *
508 * Use
509 * Returns the currently selected icon
510 */
511
512 int window__selectedIcon(void);
513
514 /*
515 * void window__renumberSelectedIcon(int nsel)
516 *
517 * Use
518 * To be called when the selected icon is renumbered.
519 */
520
521 void window__renumberSelectedIcon(int nsel);
522
523 /*----- Icon manipulation -------------------------------------------------*/
524
525 /*
526 * void window__bound(wimp_icon *i,wimp_box *box,BOOL force)
527 *
528 * Use
529 * Works out the bounding box (including 3D border) of the given pseudoicon.
530 *
531 * Parameters
532 * wimp_icon *i == pointer to an icon definition
533 * wimp_box *box == where to put the result
534 * BOOL force == force reading of the border, even if disabled in prefs
535 */
536
537 void window__bound(wimp_icon *i,wimp_box *box,BOOL force);
538
539 /*
540 * void window__removeTrailingDeleted(glass_windPointer *w)
541 *
542 * Use
543 * Removes trailing deleted icons from a window (i.e. ones that can be
544 * safely deleted properly without messing up icon numbers).
545 *
546 * Parameters
547 * glass_windPointer *w == the window to blitz
548 */
549
550 void window__removeTrailingDeleted(glass_windPointer *w);
551
552 /*
553 * int window__createIcon(glass_windPointer *w)
554 *
555 * Use
556 * Creates a slot for an icon in the window specified, according to current
557 * preferences. The contents of the icon array are unspecified (and
558 * probably not too useful).
559 *
560 * Parameters
561 * glass_windPointer *w == the window to create the icon in
562 *
563 * Returns
564 * Icon number that can be used, or -1 if the operation failed.
565 */
566
567 int window__createIcon(glass_windPointer *w);
568
569 /*
570 * void window__renumber(glass_windPointer *w,BOOL renum)
571 *
572 * Use
573 * Sets the renumber flag of the given window to the given state.
574 * Everything is set up properly according to the new state.
575 *
576 * Parameters
577 * glass_windPointer *w == the window to renumber
578 * BOOL renum == the new state of the flag
579 */
580
581 void window__renumber(glass_windPointer *w,BOOL renum);
582
583 /*
584 * void window__copyIcons(glass_windPointer *w)
585 *
586 * Use
587 * Copies the selected icons into the given window. If the icons are
588 * already in the given window, they are duplicated and offset by a small
589 * quantity. If the icons are in a different window, then they are
590 * centred over the current visible area.
591 *
592 * Parameters
593 * glass_windPointer *w == the window to put the icons
594 */
595
596 void window__copyIcons(glass_windPointer *w);
597
598 /*
599 * void window__nudgeIcons(glass_windPointer *w,wimp_box *nudge)
600 *
601 * Use
602 * Nudges the selected icons in the specified window, by adding the box
603 * given to each icon's bounding box. The nudge box is multiplied either by
604 * the current grid size (if grid lock is enabled) or by the pixel size (if
605 * it isn't) before addition. A nudge is considered to be a single
606 * alteration for the purposes of autosave-counting. If no icons are moved
607 * then the selected guidelines are moved instead.
608 *
609 * Parameters
610 * glass_windPointer *w == the window containing the icons to nudge
611 * wimp_box *nudge == the box to add to the coordinates of the icons
612 */
613
614 void window__nudgeIcons(glass_windPointer *w,wimp_box *nudge);
615
616 /*----- Window manipulation -----------------------------------------------*/
617
618 /*
619 * wimp_w window__recreate(glass_windPointer *w)
620 *
621 * Use
622 * Recreates a window, getting all the fiddly bits right.
623 *
624 * Parameters
625 * glass_windPointer *w == the window
626 *
627 * Returns
628 * The window handle, or 0 for failure
629 */
630
631 wimp_w window__recreate(glass_windPointer *w);
632
633 /*
634 * void window__nudgeScroll(glass_windPointer *w,int x,int y)
635 *
636 * Use
637 * Scrolls the window a bit, by adding the x and y values given to the
638 * scroll offsets of the window. The values are multiplied up to give a
639 * sensible sized scroll.
640 *
641 * Parameters
642 * glass_windPointer *w == the window to scroll
643 * int x == the x scroll offset to add
644 * int y == the y scroll offset to add
645 */
646
647 void window__nudgeScroll(glass_windPointer *w,int x,int y);
648
649 /*----- The main menu -----------------------------------------------------*/
650
651 /*
652 * glass_windPointer *window__menuOwner(void)
653 *
654 * Use
655 * Returns which window currently owns the menu.
656 *
657 * Returns
658 * A pointer to the window's anchor block.
659 */
660
661 glass_windPointer *window__menuOwner(void);
662
663 /*
664 * void window__updateMenu(glass_windPointer *w)
665 *
666 * Use
667 * Updates the menu attached to the main window.
668 *
669 * Parameters
670 * glass_windPointer *w == pointer to owning menu
671 */
672
673 void window__updateMenu(glass_windPointer *w);
674
675 /*
676 * void window__simMenu(glass_windPointer *w,int hit1,int hit2)
677 *
678 * Use
679 * Simulates a menu hit on the specified item. Gives a beep if the item
680 * is unavailable. Otherwise, the hit is sent to the current selection
681 * owner. [fixed to allow which window is used rather than only the
682 * selection owner, 1 November 1993]
683 *
684 * Use
685 * glass_windPointer *w == the window in which to simulate the event
686 * int hit1 == first hit in the sequence
687 * int hit2 == second hit in the sequence
688 */
689
690 void window__simMenu(glass_windPointer *w,int hit1,int hit2);
691
692 /*
693 * void window__showMenu(int x,int y,glass_windPointer *w)
694 *
695 * Use
696 * Displays the Template Window Menu
697 *
698 * Parameters
699 * int x,int y == the (window) position to display the menu
700 * glass_windPointer *w == the window to display the menu for
701 */
702
703 void window__showMenu(int x,int y,glass_windPointer *w);
704
705 /*
706 * void window__menuInit(void)
707 *
708 * Use
709 * Initialises the create icon menu
710 */
711
712 void window__menuInit(void);
713
714 /*----- Handling the toolbars ---------------------------------------------*/
715
716 /*
717 * void window__setToolBarPositions(wimp_openstr *o)
718 *
719 * Use
720 * Displays the tool and info bars according to current settings etc.
721 *
722 * Parameters
723 * wimp_openstr *o == the position of the selection owner window, or 0.
724 * This is updated to put the window somewhere nice without flicker.
725 */
726
727 void window__setToolBarPositions(wimp_openstr *o);
728
729 /*
730 * void window__updateInfoBar(void)
731 *
732 * Use
733 * Updates the settings on the info bar. If a setting hasn't changed, then
734 * it isn't updated (reducing flicker).
735 *
736 * Parameters
737 * BOOL force == whether to force an update of everything.
738 */
739
740 void window__updateInfoBar(BOOL force);
741
742 /*
743 * void window__toggleRenumber(glass_windPointer *w)
744 *
745 * Use
746 * Updates the info bar after entering or leaving renumber-mode. w is
747 * the currently selected window.
748 */
749
750 void window__toggleRenumber(glass_windPointer *w);
751
752 /*
753 * void window__toggleTest(glass_windPointer *w)
754 *
755 * Use
756 * Updates the info bar after entering or leaving test-mode. w is the
757 * currently selected window.
758 */
759
760 #ifndef glass_DEMO
761 void window__toggleTest(glass_windPointer *w);
762 #endif
763
764 /*
765 * void window__updateInfoName(char *newname)
766 *
767 * Use
768 * Updates the name in the info bar
769 */
770
771 void window__updateInfoName(char *newname);
772
773 /*
774 * void window__nextRenumber(glass_windPointer *w)
775 *
776 * Use
777 * Updates the next renumber icon number display.
778 */
779
780 void window__nextRenumber(glass_windPointer *w);
781
782 /*
783 * void window__moveToolbars(glass_windPointer *w)
784 *
785 * Use
786 * Moves the toolbars and attaches them to a new window
787 *
788 * Parameters
789 * glass_windPointer *w == the window to attach the bars to
790 */
791
792 void window__moveToolbars(glass_windPointer *w);
793
794 /*
795 * void window__tbarInit(void)
796 *
797 * Use
798 * Initialises the toolbar system
799 */
800
801 void window__tbarInit(void);
802
803 /*----- The icon palette --------------------------------------------------*/
804
805 /*
806 * void window__showPalette(void)
807 *
808 * Use
809 * Displays the palette window, as set up in the Defaults template file.
810 */
811
812 void window__showPalette(void);
813
814 /*----- The main event handlers -------------------------------------------*/
815
816 /*
817 * void window__winIdles(void *handle)
818 *
819 * Use
820 * Changes the pointer shape to something appropriate for what its over.
821 *
822 * Parameters
823 * void *handle == pointer to window containing pointer
824 */
825
826 void window__winIdles(void *handle);
827
828 /*
829 * void window__testEvents(wimp_eventstr *e,void *handle)
830 *
831 * Use
832 * Handles all events for windows running in Test mode. Events handled
833 * are:
834 *
835 * Redraw Redraws the window using Interface/hatch pattern as requested.
836 * Open Moves the window around.
837 * Close Closes the window(!)
838 * Leave Ignored
839 * Enter Turn off STEEL pointer changing
840 * Click Handled by WIMP or Interface, except for menu, which opens
841 * the menu(!)
842 * Key Handled by WIMP, WimpExtension, or ignored
843 *
844 * Parameters
845 * wimp_eventstr *e == the event
846 * void *handle == pointer to window info
847 */
848
849 #ifndef glass_DEMO
850 void window__testEvents(wimp_eventstr *e,void *handle);
851 #endif
852
853 /*
854 * void window__events(wimp_eventstr *e,void *handle)
855 *
856 * Use
857 * Handles all events for template windows (this is the first chance I've
858 * had to get my fingers *REALLY* mucky on this whole project!)
859 *
860 * Parameters
861 * wimp_eventstr *e == the event that I am meant to be inerested in
862 * void *handle == a pointer to the structural information for this window
863 */
864
865 void window__events(wimp_eventstr *e,void *handle);
866
867 /*----- THE END -----------------------------------------------------------*/
868
869 #endif