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