1 /*
2  * Copyright (c) 1990-2004  Paul Vojta and the xdvik development team
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to
6  * deal in the Software without restriction, including without limitation the
7  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
8  * sell copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17  * PAUL VOJTA OR ANY OTHER AUTHOR OF THIS SOFTWARE BE LIABLE FOR ANY CLAIM,
18  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20  * OTHER DEALINGS IN THE SOFTWARE.
21  *
22  */
23 
24 #ifndef EVENTS_H_
25 #define EVENTS_H_
26 
27 /*
28  *	Flag values and masks for event_flags
29  */
30 
31 #define	EV_IDLE			(1<<0)	/* 	1 - non-event */
32 #define	EV_CURSOR		(1<<1)	/* 	2 - cursor needs to revert back to ready */
33 #define	EV_EXPOSE		(1<<2)	/* 	4 - expose occurred somewhere */
34 #define	EV_MAG_MOVE		(1<<3)	/* 	8 - magnifier moved */
35 #define	EV_MAG_GONE		(1<<4)	/*     16 - magnifier gone while being drawn */
36 #define	EV_ACK			(1<<5)	/*     32 - used internally */
37 #define	EV_SRC			(1<<6)	/*     64 - source special operation is pending */
38 #define	EV_ANCHOR		(1<<7)	/*    128 - anchor search is pending - should maybe move this up? */
39 #define	EV_FIND			(1<<8)	/*    256 - string search */
40 #define	EV_FIND_CANCEL		(1<<9)	/*    512 - string search cancelled */
41 #define	EV_FILEHIST_GOTO_PAGE	(1<<10)	/*   1024 - get page from file history */
42 #define	EV_PAGEHIST_INSERT	(1<<11)	/*   2048 - get page from file history */
43 #define	EV_PAGEHIST_GOTO_PAGE	(1<<12)	/*   4096 - go to page from file history */
44 #define	EV_NEWPAGE		(1<<13)	/*   8192 - new page requested */
45 #define	EV_PS_TOGGLE		(1<<14)	/*  16384 - PostScript toggled on or off */
46 #define	EV_RELOAD		(1<<15)	/*  32768 - reload dvi file */
47 #define	EV_NEWDOC		(1<<16)	/*  65536 - new dvi file requested */
48 #define	EV_TERM			(1<<17)	/* 131072 - quit */
49 #define	EV_MAXPLUS1		(1<<18) /* 262144 - marker for highest element */
50 
51 #define	EV_GE_IDLE		(EV_MAXPLUS1 - EV_IDLE)
52 #define	EV_GT_IDLE		(EV_MAXPLUS1 - EV_CURSOR)
53 #define	EV_GE_CURSOR		(EV_MAXPLUS1 - EV_CURSOR)
54 #define	EV_GE_EXPOSE		(EV_MAXPLUS1 - EV_EXPOSE)
55 #define	EV_GE_MAG_MOVE		(EV_MAXPLUS1 - EV_MAG_MOVE)
56 #define	EV_GE_MAG_GONE		(EV_MAXPLUS1 - EV_MAG_GONE)
57 #define	EV_GE_ACK		(EV_MAXPLUS1 - EV_ACK)
58 #define	EV_GE_FIND		(EV_MAXPLUS1 - EV_FIND)
59 #define	EV_GE_FIND_CANCEL	(EV_MAXPLUS1 - EV_FIND_CANCEL)
60 #define	EV_GE_NEWPAGE		(EV_MAXPLUS1 - EV_NEWPAGE)
61 #define	EV_GE_PS_TOGGLE		(EV_MAXPLUS1 - EV_PS_TOGGLE)
62 #define	EV_GE_NEWDOC		(EV_MAXPLUS1 - EV_NEWDOC)
63 #define	EV_GE_RELOAD		(EV_MAXPLUS1 - EV_RELOAD)
64 #define	EV_GE_TERM		(EV_MAXPLUS1 - EV_TERM)
65 
66 #define	EV_NOWAIT		EV_GE_IDLE
67 
68 
69 struct xio {
70     struct xio *next;	/* link to next in list */
71     int fd;		/* file descriptor */
72     int xio_events;	/* same as in struct pollfd
73 			   (can't call it events because poll.h
74 			   on AIX defines events to something else) */
75 #if HAVE_POLL
76     struct pollfd *pfd;
77 #endif
78     char *(*read_proc) (int, void *);	/* call to read from fd, or NULL */
79     void (*write_proc) (int, void *);	/* call to write to fd, or NULL */
80     void *data; /* data passed as second argument to read_proc()/write_proc() */
81 };
82 
83 struct xchild; /* forward declaration */
84 
85 typedef void (*childProcT)(int exitval, struct xchild *this);
86 
87 struct xchild {
88     struct xchild *next;	/* link to next in list */
89     pid_t pid;		/* pid of process, or 0 */
90     Boolean killable;	/* if can be killed with SIGKILL */
91     char *name;		/* name of process, for printing error message */
92     struct xio *io;	/* pointer to i/o structure for reading error msg. */
93     void *data;		/* arbitrary data passed to proc */
94 
95     /* proc is a pointer to a function to call when the child exits; it will be
96      * called with 2 arguments:
97      * - The return status of the child
98      * - A pointer to the current struct (so that the procedure can free()
99      *   (elements of) the struct when needed, or have access to the data field).
100      */
101     childProcT proc;
102 };
103 
104 typedef enum xtimerT_ {
105     XTM_DEFAULT = 0,
106     XTM_STATUSLINE,
107     XTM_HREF
108 } xtimerT;
109 
110 struct xtimer {
111     struct xtimer *next;	/* link to next in chain */
112     struct timeval when;	/* when to call the routine */
113     xtimerT type;		/* timer type */
114     void (*proc) (struct xtimer *this, void *data);	/* procedure to call */
115     void *data;
116 #if XDVI_XT_TIMER_HACK
117     XtTimerCallbackProc xt_proc;	/* additional data for Xt callbacks */
118     XtPointer closure;
119 #endif
120 };
121 
122 extern void set_timer(struct xtimer *tp, int ms);
123 extern void cancel_timer(struct xtimer *tp);
124 
125 extern int get_num_actions(void);
126 extern XtActionsRec *get_actions(void);
127 
128 extern int atopix(const char *, Boolean);
129 
130 extern int check_goto_page(int pageno, Boolean insert_into_pagehist);
131 extern Boolean get_int_arg(String * param, Cardinal *num_params, int *res);
132 extern Boolean toggle_arg(int arg, String * param, Cardinal *num_params);
133 
134 extern void clearexpose(struct WindowRec *windowrec, int x, int y, unsigned w,
135 			unsigned h);
136 extern void expose(struct WindowRec *windowrec, int x, int y, unsigned int w,
137 		   unsigned int h);
138 extern void home(wide_bool);
139 extern int set_bar_value(Widget bar, int value, int max);
140 
141 extern void reconfig(void);
142 extern void redraw(struct WindowRec *windowrec);
143 extern void handle_resize(Widget, XtPointer, XEvent *, Boolean *);
144 extern void handle_expose(Widget, XtPointer, XEvent *, Boolean *);
145 extern void handle_property_change(Widget, XtPointer, XEvent *, Boolean *);
146 extern void handle_command(Widget widget, XtPointer client_data,
147 			   XtPointer call_data);
148 extern void showmessage(const char *);
149 extern void set_chld(struct xchild *);
150 extern void clear_chld(struct xchild *);
151 extern void set_io(struct xio *);
152 extern void clear_io(struct xio *);
153 extern unsigned int read_events(unsigned int);
154 
155 typedef void (*home_proc) (wide_bool);
156 extern void goto_page(int page, home_proc proc, Boolean force);
157 
158 extern void setup_sigalarm(void);
159 extern void setup_signal_handlers(Boolean early);
160 extern int shrink_to_fit(void);
161 extern void do_pages(void);
162 extern void do_set_density(double newgamma, Boolean force, Boolean update_resource);
163 extern void do_toggle_color(Boolean update_resource);
164 
165 extern void Act_mouse_modes(Widget w, XEvent *event, String *params, Cardinal *num_params);
166 
167 #ifdef PS
168 extern void Act_set_ps(Widget w, XEvent *event, String *params, Cardinal *num_params);
169 #endif
170 
171 #ifdef PS_GS
172 extern void Act_set_gs_alpha(Widget w, XEvent *event, String *params, Cardinal *num_params);
173 #endif
174 
175 extern void Act_recent_files(Widget w, XEvent *event, String *params, Cardinal *num_params);
176 extern void Act_htex_back(Widget w, XEvent *event, String *params, Cardinal *num_params);
177 extern void Act_htex_forward(Widget w, XEvent *event, String *params, Cardinal *num_params);
178 
179 extern void Act_set_keep_flag(Widget w, XEvent *event, String *params, Cardinal *num_params);
180 extern void Act_back_page(Widget w, XEvent *event, String *params, Cardinal *num_params);
181 extern void Act_forward_page(Widget w, XEvent *event, String *params, Cardinal *num_params);
182 extern void do_set_shrinkfactor(int arg, Boolean set_resource);
183 extern void Act_set_shrink_factor(Widget w, XEvent *event, String *params, Cardinal *num_params);
184 extern void Act_shrink_to_dpi(Widget w, XEvent *event, String *params, Cardinal *num_params);
185 extern void Act_set_expert_mode(Widget w, XEvent *event, String *params, Cardinal *num_params);
186 extern void Act_use_tex_pages(Widget w, XEvent *event, String *params, Cardinal *num_params);
187 extern void Act_ruler_mode(Widget w, XEvent *event, String *params, Cardinal *num_params);
188 extern void Act_set_expert_mode(Widget w, XEvent *event, String *params, Cardinal *num_params);
189 extern void Act_switch_mode(Widget w, XEvent *event, String *params, Cardinal *num_params);
190 
191 #if defined(NEW_MENU_CREATION) || defined(MOTIF)
192 extern void Act_set_papersize(Widget w, XEvent *event, String *params, Cardinal *num_params);
193 extern void Act_set_paper_landscape(Widget w, XEvent *event, String *params, Cardinal *num_params);
194 #endif /* NEW_MENU_CREATION */
195 
196 extern void Act_scroll_list_up(Widget w, XEvent *event, String *params,
197   Cardinal *num_params);
198 extern void Act_scroll_list_down(Widget w, XEvent *event, String *params,
199   Cardinal *num_params);
200 extern void Act_pagehistory_clear(Widget w, XEvent *event, String *params, Cardinal *num_params);
201 extern void Act_pagehistory_back(Widget w, XEvent *event, String *params, Cardinal *num_params);
202 extern void Act_pagehistory_forward(Widget w, XEvent *event, String *params, Cardinal *num_params);
203 extern void Act_pagehistory_delete_backward(Widget w, XEvent *event, String *params, Cardinal *num_params);
204 extern void Act_pagehistory_delete_forward(Widget w, XEvent *event, String *params, Cardinal *num_params);
205 extern void Act_magnifier(Widget w, XEvent *event, String *params, Cardinal *num_params);
206 extern void Act_ruler(Widget w, XEvent *event, String *params, Cardinal *num_params);
207 extern void Act_text_selection(Widget w, XEvent *event, String *params, Cardinal *num_params);
208 extern void Act_switch_magnifier_units(Widget w, XEvent *event, String *params, Cardinal *num_params);
209 extern void Act_href(Widget w, XEvent *event, String *params, Cardinal *num_params);
210 extern void Act_href_newwindow(Widget w, XEvent *event, String *params, Cardinal *num_params);
211 
212 extern void null_mouse(XEvent *ignored);
213 extern void text_motion(XEvent *event);
214 
215 typedef enum { TEXT_SEL_MOVE, TEXT_SEL_CLEAR, TEXT_SEL_REDRAW, TEXT_SEL_ERASE } textSelectionT;
216 extern void text_change_region(textSelectionT mode, XEvent *event);
217 
218 extern void text_selection_start(XEvent *event);
219 
220 #if COLOR
221 
222 extern void update_expert_mode(void);
223 
224 extern Boolean check_resource_expert(void *val, const char *param);
225 extern Boolean check_paper_landscape(void *val, const char *param);
226 extern Boolean check_papersize(void *val, const char *param);
227 extern Boolean check_toggle(void *val, const char *param);
228 extern Boolean check_int(void *val, const char *param);
229 
230 #endif /* COLOR */
231 
232 
233 struct xdvi_action {
234     XtActionProc proc;
235     String command;
236     String *params;
237     Cardinal num_params;
238     struct xdvi_action *next;
239 };
240 
241 extern Boolean compile_action(const char *str, struct xdvi_action **);
242 extern void watch_file_cb(XtPointer client_data, XtIntervalId * id);
243 extern void redraw_page(void);
244 
245 #ifdef USE_PANNER
246 extern void handle_x_scroll(Widget w, XtPointer closure, XEvent *ev, Boolean *cont);
247 extern void handle_y_scroll(Widget w, XtPointer closure, XEvent *ev, Boolean *cont);
248 #endif
249 extern void xdvi_exit_callback(Widget w, XtPointer client_data, XtPointer call_data);
250 
251 #endif /* EVENTS_H_ */
252