--- rxvt-unicode/src/rxvtperl.xs 2006/01/20 10:27:08 1.79 +++ rxvt-unicode/src/rxvtperl.xs 2006/01/20 22:05:41 1.85 @@ -598,7 +598,7 @@ setuv (time, xe->xmotion.time); setiv (x, xe->xmotion.x); setiv (y, xe->xmotion.y); - setiv (row, xe->xmotion.y / term->fheight); + setiv (row, xe->xmotion.y / term->fheight + term->view_start); setiv (col, xe->xmotion.x / term->fwidth); setiv (x_root, xe->xmotion.x_root); setiv (y_root, xe->xmotion.y_root); @@ -641,6 +641,24 @@ } break; + + case PropertyNotify: + setuv (window, xe->xproperty.window); + setuv (atom, xe->xproperty.atom); + setuv (time, xe->xproperty.time); + setiv (state, xe->xproperty.state); + break; + + case ClientMessage: + setuv (window, xe->xclient.window); + setuv (message_type, xe->xclient.message_type); + setuv (format, xe->xclient.format); + setuv (l0, xe->xclient.data.l[0]); + setuv (l1, xe->xclient.data.l[1]); + setuv (l2, xe->xclient.data.l[2]); + setuv (l3, xe->xclient.data.l[3]); + setuv (l4, xe->xclient.data.l[4]); + break; } XPUSHs (sv_2mortal (newRV_noinc ((SV *)hv))); @@ -1065,6 +1083,9 @@ #define TERM_OFFSET_ncol TERM_OFFSET(ncol) #define TERM_OFFSET_focus TERM_OFFSET(focus) #define TERM_OFFSET_mapped TERM_OFFSET(mapped) +#define TERM_OFFSET_int_bwidth TERM_OFFSET(int_bwidth) +#define TERM_OFFSET_ext_bwidth TERM_OFFSET(ext_bwidth) +#define TERM_OFFSET_lineSpace TERM_OFFSET(lineSpace) #define TERM_OFFSET_saveLines TERM_OFFSET(saveLines) #define TERM_OFFSET_total_rows TERM_OFFSET(total_rows) #define TERM_OFFSET_top_row TERM_OFFSET(top_row) @@ -1081,6 +1102,9 @@ ncol = TERM_OFFSET_ncol focus = TERM_OFFSET_focus mapped = TERM_OFFSET_mapped + int_bwidth = TERM_OFFSET_int_bwidth + ext_bwidth = TERM_OFFSET_ext_bwidth + lineSpace = TERM_OFFSET_lineSpace saveLines = TERM_OFFSET_saveLines total_rows = TERM_OFFSET_total_rows top_row = TERM_OFFSET_top_row @@ -1190,6 +1214,12 @@ RETVAL void +rxvt_term::focus_in () + +void +rxvt_term::focus_out () + +void rxvt_term::want_refresh () CODE: THIS->want_refresh = 1; @@ -1221,7 +1251,7 @@ int len = min (wcslen (wstr) - start_ofs, max_len); - if (!IN_RANGE_INC (start_col, 0, THIS->ncol - len)) + if (start_col < 0 || start_col + len > THIS->ncol) { free (wstr); croak ("new_text extends beyond horizontal margins"); @@ -1265,7 +1295,7 @@ AV *av = (AV *)SvRV (new_rend); int len = min (AvFILL (av) + 1 - start_ofs, max_len); - if (!IN_RANGE_INC (start_col, 0, THIS->ncol - len)) + if (start_col < 0 || start_col + len > THIS->ncol) croak ("new_rend array extends beyond horizontal margins"); for (int col = start_col; col < start_col + len; col++) @@ -1636,15 +1666,21 @@ unsigned long nitems; unsigned long bytes_after; unsigned char *prop; + XGetWindowProperty (THIS->display->display, window, property, - 0, 1<<30, 0, AnyPropertyType, + 0, 1<<24, 0, AnyPropertyType, &type, &format, &nitems, &bytes_after, &prop); + if (type != None) { + int elemsize = format == 16 ? sizeof (short) + : format == 32 ? sizeof (long) + : 1; + EXTEND (SP, 3); PUSHs (newSVuv ((U32)type)); PUSHs (newSViv (format)); - PUSHs (newSVpvn ((char *)prop, nitems * format / 8)); + PUSHs (newSVpvn ((char *)prop, nitems * elemsize)); XFree (prop); } } @@ -1656,11 +1692,26 @@ STRLEN len; char *data_ = SvPVbyte (data, len); + int elemsize = format == 16 ? sizeof (short) + : format == 32 ? sizeof (long) + : 1; + XChangeProperty (THIS->display->display, window, property, type, format, PropModeReplace, - (unsigned char *)data, len * 8 / format); + (unsigned char *)data_, len / elemsize); + XSync (THIS->display->display, 0); } +Atom +XInternAtom (rxvt_term *term, char *atom_name, int only_if_exists = FALSE) + C_ARGS: term->display->display, atom_name, only_if_exists + +char * +XGetAtomName (rxvt_term *term, Atom atom) + C_ARGS: term->display->display, atom + CLEANUP: + XFree (RETVAL); + void XDeleteProperty (rxvt_term *term, Window window, Atom property) C_ARGS: term->display->display, window, property @@ -1672,6 +1723,8 @@ OUTPUT: RETVAL +#if 0 + Window XCreateSimpleWindow (rxvt_term *term, Window parent, int x, int y, unsigned int width, unsigned int height) C_ARGS: term->display->display, (Window)parent, @@ -1679,6 +1732,8 @@ term->pix_colors_focused[Color_border], term->pix_colors_focused[Color_border] +#endif + void XReparentWindow (rxvt_term *term, Window window, Window parent, int x = 0, int y = 0) C_ARGS: term->display->display, window, parent, x, y @@ -1693,7 +1748,32 @@ void XMoveResizeWindow (rxvt_term *term, Window window, int x, int y, unsigned int width, unsigned int height) - C_ARGS: term->display->display, (Window)window, x, y, width, height + C_ARGS: term->display->display, window, x, y, width, height + +void +rxvt_term::XChangeInput (Window window, U32 add_events, U32 del_events = 0) + CODE: +{ + XWindowAttributes attr; + XGetWindowAttributes (THIS->display->display, window, &attr); + XSelectInput (THIS->display->display, window, attr.your_event_mask | add_events & ~del_events); +} + +void +rxvt_term::XTranslateCoordinates (Window src, Window dst, int x, int y) + PPCODE: +{ + int dx, dy; + Window child; + + if (XTranslateCoordinates (THIS->display->display, src, dst, x, y, &dx, &dy, &child)) + { + EXTEND (SP, 3); + PUSHs (newSViv (dx)); + PUSHs (newSViv (dy)); + PUSHs (newSVuv (child)); + } +} ############################################################################# # urxvt::overlay @@ -1849,14 +1929,14 @@ RETVAL CHAINED -iow::start () +iw::start () CODE: THIS->start (); OUTPUT: RETVAL CHAINED -iow::stop () +iw::stop () CODE: THIS->stop (); OUTPUT: @@ -1888,7 +1968,7 @@ RETVAL CHAINED -iow::stop () +pw::stop () CODE: THIS->stop (); OUTPUT: