diff options
Diffstat (limited to 'x11vnc/xrandr.h')
-rw-r--r-- | x11vnc/xrandr.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/x11vnc/xrandr.h b/x11vnc/xrandr.h new file mode 100644 index 0000000..baab196 --- /dev/null +++ b/x11vnc/xrandr.h @@ -0,0 +1,60 @@ +#ifndef _X11VNC_XRANDR_H +#define _X11VNC_XRANDR_H + +/* -- xrandr.h -- */ + +extern time_t last_subwin_trap; +extern int subwin_trap_count; +extern XErrorHandler old_getimage_handler; + +extern int xrandr_present; +extern int xrandr_width; +extern int xrandr_height; +extern int xrandr_rotation; +extern Time xrandr_timestamp; +extern Time xrandr_cfg_time; + +extern void initialize_xrandr(void); +extern int check_xrandr_event(char *msg); +extern int known_xrandr_mode(char *s); + +#define XRANDR_SET_TRAP_RET(x,y) \ + if (subwin || xrandr) { \ + trapped_getimage_xerror = 0; \ + old_getimage_handler = XSetErrorHandler(trap_getimage_xerror); \ + if (check_xrandr_event(y)) { \ + trapped_getimage_xerror = 0; \ + XSetErrorHandler(old_getimage_handler); \ + return(x); \ + } \ + } +#define XRANDR_CHK_TRAP_RET(x,y) \ + if (subwin || xrandr) { \ + if (trapped_getimage_xerror) { \ + if (subwin) { \ + static int last = 0; \ + subwin_trap_count++; \ + if (time(0) > last_subwin_trap + 60) { \ + rfbLog("trapped GetImage xerror" \ + " in SUBWIN mode. [%d]\n", \ + subwin_trap_count); \ + last_subwin_trap = time(0); \ + last = subwin_trap_count; \ + } \ + if (subwin_trap_count - last > 30) { \ + /* window probably iconified */ \ + usleep(1000*1000); \ + } \ + } else { \ + rfbLog("trapped GetImage xerror" \ + " in XRANDR mode.\n"); \ + } \ + trapped_getimage_xerror = 0; \ + XSetErrorHandler(old_getimage_handler); \ + check_xrandr_event(y); \ + X_UNLOCK; \ + return(x); \ + } \ + } + +#endif /* _X11VNC_XRANDR_H */ |