… | |
… | |
1094 | |
1094 | |
1095 | display->flush (); |
1095 | display->flush (); |
1096 | } |
1096 | } |
1097 | |
1097 | |
1098 | void |
1098 | void |
1099 | rxvt_term::check_cb (check_watcher &w) |
1099 | rxvt_term::prepare_cb (ev::prepare &w, int revents) |
1100 | { |
1100 | { |
1101 | make_current (); |
1101 | make_current (); |
1102 | |
1102 | |
1103 | display->flush (); |
1103 | display->flush (); |
1104 | |
1104 | |
1105 | if (want_refresh && !flush_ev.active) |
1105 | if (want_refresh && !flush_ev.active) |
1106 | flush_ev.start (NOW + 1. / 60.); // refresh at max. 60 hz normally |
1106 | flush_ev.start (1. / 60.); // refresh at max. 60 hz normally |
1107 | } |
1107 | } |
1108 | |
1108 | |
1109 | void |
1109 | void |
1110 | rxvt_term::flush_cb (time_watcher &w) |
1110 | rxvt_term::flush_cb (ev::timer &w, int revents) |
1111 | { |
1111 | { |
1112 | make_current (); |
1112 | make_current (); |
1113 | |
1113 | |
1114 | refresh_count = 0; |
1114 | refresh_count = 0; |
1115 | flush (); |
1115 | flush (); |
1116 | } |
1116 | } |
1117 | |
1117 | |
1118 | #ifdef CURSOR_BLINK |
1118 | #ifdef CURSOR_BLINK |
1119 | void |
1119 | void |
1120 | rxvt_term::cursor_blink_cb (time_watcher &w) |
1120 | rxvt_term::cursor_blink_cb (ev::timer &w, int revents) |
1121 | { |
1121 | { |
1122 | hidden_cursor = !hidden_cursor; |
1122 | hidden_cursor = !hidden_cursor; |
1123 | want_refresh = 1; |
1123 | want_refresh = 1; |
1124 | |
|
|
1125 | w.start (w.at + CURSOR_BLINK_INTERVAL); |
|
|
1126 | } |
1124 | } |
1127 | #endif |
1125 | #endif |
1128 | |
1126 | |
1129 | #ifdef TEXT_BLINK |
1127 | #ifdef TEXT_BLINK |
1130 | void |
1128 | void |
1131 | rxvt_term::text_blink_cb (time_watcher &w) |
1129 | rxvt_term::text_blink_cb (ev::timer &w, int revents) |
1132 | { |
1130 | { |
1133 | if (scr_refresh_rend (RS_Blink, RS_Blink)) |
1131 | if (scr_refresh_rend (RS_Blink, RS_Blink)) |
1134 | { |
1132 | { |
1135 | hidden_text = !hidden_text; |
1133 | hidden_text = !hidden_text; |
1136 | want_refresh = 1; |
1134 | want_refresh = 1; |
1137 | w.start (w.at + TEXT_BLINK_INTERVAL); |
|
|
1138 | } |
1135 | } |
1139 | } |
1136 | } |
1140 | #endif |
1137 | #endif |
1141 | |
1138 | |
1142 | #ifndef NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING |
1139 | #ifndef NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING |
1143 | void |
1140 | void |
1144 | rxvt_term::cont_scroll_cb (time_watcher &w) |
1141 | rxvt_term::cont_scroll_cb (ev::timer &w, int revents) |
1145 | { |
1142 | { |
1146 | if ((scrollbar_isUp() || scrollbar_isDn()) && |
1143 | if ((scrollbar_isUp() || scrollbar_isDn()) && |
1147 | scr_page (scrollbar_isUp() ? UP : DN, 1)) |
1144 | scr_page (scrollbar_isUp() ? UP : DN, 1)) |
1148 | { |
|
|
1149 | want_refresh = 1; |
1145 | want_refresh = 1; |
1150 | w.start (w.at + SCROLLBAR_CONTINUOUS_DELAY); |
1146 | else |
1151 | } |
1147 | w.stop (); |
1152 | } |
1148 | } |
1153 | #endif |
1149 | #endif |
1154 | |
1150 | |
1155 | #ifdef SELECTION_SCROLLING |
1151 | #ifdef SELECTION_SCROLLING |
1156 | void |
1152 | void |
1157 | rxvt_term::sel_scroll_cb (time_watcher &w) |
1153 | rxvt_term::sel_scroll_cb (ev::timer &w, int revents) |
1158 | { |
1154 | { |
1159 | if (scr_page (scroll_selection_dir, scroll_selection_lines)) |
1155 | if (scr_page (scroll_selection_dir, scroll_selection_lines)) |
1160 | { |
1156 | { |
1161 | selection_extend (selection_save_x, selection_save_y, selection_save_state); |
1157 | selection_extend (selection_save_x, selection_save_y, selection_save_state); |
1162 | want_refresh = 1; |
1158 | want_refresh = 1; |
1163 | w.start (w.at + SCROLLBAR_CONTINUOUS_DELAY); |
|
|
1164 | } |
1159 | } |
|
|
1160 | else |
|
|
1161 | w.stop (); |
1165 | } |
1162 | } |
1166 | #endif |
1163 | #endif |
1167 | |
1164 | |
1168 | #if defined(MOUSE_WHEEL) && defined(MOUSE_SLIP_WHEELING) |
1165 | #if defined(MOUSE_WHEEL) && defined(MOUSE_SLIP_WHEELING) |
1169 | void |
1166 | void |
1170 | rxvt_term::slip_wheel_cb (time_watcher &w) |
1167 | rxvt_term::slip_wheel_cb (ev::timer &w, int revents) |
1171 | { |
1168 | { |
1172 | if (mouse_slip_wheel_speed == 0 |
1169 | if (mouse_slip_wheel_speed == 0 |
1173 | || mouse_slip_wheel_speed < 0 ? scr_page (DN, -mouse_slip_wheel_speed) |
1170 | || mouse_slip_wheel_speed < 0 ? scr_page (DN, -mouse_slip_wheel_speed) |
1174 | : scr_page (UP, mouse_slip_wheel_speed)) |
1171 | : scr_page (UP, mouse_slip_wheel_speed)) |
1175 | { |
1172 | { |
1176 | if (view_start == top_row || view_start == 0) |
1173 | if (view_start == top_row || view_start == 0) |
1177 | mouse_slip_wheel_speed = 0; |
1174 | mouse_slip_wheel_speed = 0; |
1178 | |
1175 | |
1179 | want_refresh = 1; |
1176 | want_refresh = 1; |
1180 | w.start (w.at + SCROLLBAR_CONTINUOUS_DELAY); |
|
|
1181 | } |
1177 | } |
|
|
1178 | else |
|
|
1179 | w.stop (); |
1182 | } |
1180 | } |
1183 | #endif |
1181 | #endif |
1184 | |
1182 | |
1185 | #if LINUX_YIELD_HACK |
1183 | #if LINUX_YIELD_HACK |
1186 | static struct event_handler |
1184 | static struct event_handler |
1187 | { |
1185 | { |
1188 | check_watcher yield_ev; |
1186 | ev::prepare yield_ev; |
1189 | |
1187 | |
1190 | void yield_cb (check_watcher &w) |
1188 | void yield_cb (ev::prepare &w, int revents) |
1191 | { |
1189 | { |
1192 | // this should really be sched_yield(), but the linux guys thought |
1190 | // this should really be sched_yield(), but the linux guys thought |
1193 | // that giving a process calling sched_yield () less cpu time than |
1191 | // that giving a process calling sched_yield () less cpu time than |
1194 | // ones with high nice levels is a useful thing to do. It surely is is |
1192 | // ones with high nice levels is a useful thing to do. It surely is is |
1195 | // allowed by the sus... as is returning ENOSYS. |
1193 | // allowed by the sus... as is returning ENOSYS. |
… | |
… | |
1246 | |
1244 | |
1247 | return false; |
1245 | return false; |
1248 | } |
1246 | } |
1249 | |
1247 | |
1250 | void |
1248 | void |
1251 | rxvt_term::pty_cb (io_watcher &w, short revents) |
1249 | rxvt_term::pty_cb (ev::io &w, int revents) |
1252 | { |
1250 | { |
1253 | make_current (); |
1251 | make_current (); |
1254 | |
1252 | |
1255 | if (revents & EVENT_READ) |
1253 | if (revents & ev::READ) |
1256 | // loop, but don't allow a single term to monopolize us |
1254 | // loop, but don't allow a single term to monopolize us |
1257 | while (pty_fill ()) |
1255 | while (pty_fill ()) |
1258 | if (cmd_parse ()) |
1256 | if (cmd_parse ()) |
1259 | break; |
1257 | break; |
1260 | |
1258 | |
1261 | if (revents & EVENT_WRITE) |
1259 | if (revents & ev::WRITE) |
1262 | pty_write (); |
1260 | pty_write (); |
1263 | } |
1261 | } |
1264 | |
1262 | |
1265 | void |
1263 | void |
1266 | rxvt_term::pointer_unblank () |
1264 | rxvt_term::pointer_unblank () |
… | |
… | |
1270 | |
1268 | |
1271 | #ifdef POINTER_BLANK |
1269 | #ifdef POINTER_BLANK |
1272 | hidden_pointer = 0; |
1270 | hidden_pointer = 0; |
1273 | |
1271 | |
1274 | if (option (Opt_pointerBlank)) |
1272 | if (option (Opt_pointerBlank)) |
1275 | pointer_ev.start (NOW + pointerBlankDelay); |
1273 | pointer_ev.start (pointerBlankDelay); |
1276 | #endif |
1274 | #endif |
1277 | } |
1275 | } |
1278 | |
1276 | |
1279 | #ifdef POINTER_BLANK |
1277 | #ifdef POINTER_BLANK |
1280 | void |
1278 | void |
… | |
… | |
1288 | |
1286 | |
1289 | hidden_pointer = 1; |
1287 | hidden_pointer = 1; |
1290 | } |
1288 | } |
1291 | |
1289 | |
1292 | void |
1290 | void |
1293 | rxvt_term::pointer_cb (time_watcher &w) |
1291 | rxvt_term::pointer_cb (ev::timer &w, int revents) |
1294 | { |
1292 | { |
1295 | make_current (); |
1293 | make_current (); |
1296 | |
1294 | |
1297 | pointer_blank (); |
1295 | pointer_blank (); |
1298 | } |
1296 | } |
… | |
… | |
1529 | break; |
1527 | break; |
1530 | |
1528 | |
1531 | case MapNotify: |
1529 | case MapNotify: |
1532 | mapped = 1; |
1530 | mapped = 1; |
1533 | #ifdef TEXT_BLINK |
1531 | #ifdef TEXT_BLINK |
1534 | text_blink_ev.start (NOW + TEXT_BLINK_INTERVAL); |
1532 | text_blink_ev.start (TEXT_BLINK_INTERVAL); |
1535 | #endif |
1533 | #endif |
1536 | HOOK_INVOKE ((this, HOOK_MAP_NOTIFY, DT_XEVENT, &ev, DT_END)); |
1534 | HOOK_INVOKE ((this, HOOK_MAP_NOTIFY, DT_XEVENT, &ev, DT_END)); |
1537 | break; |
1535 | break; |
1538 | |
1536 | |
1539 | case UnmapNotify: |
1537 | case UnmapNotify: |
… | |
… | |
1631 | |
1629 | |
1632 | /* don't clobber the current delay if we are |
1630 | /* don't clobber the current delay if we are |
1633 | * already in the middle of scrolling. |
1631 | * already in the middle of scrolling. |
1634 | */ |
1632 | */ |
1635 | if (!sel_scroll_ev.active) |
1633 | if (!sel_scroll_ev.active) |
1636 | sel_scroll_ev.start (NOW + SCROLLBAR_INITIAL_DELAY); |
1634 | sel_scroll_ev.start (SCROLLBAR_INITIAL_DELAY, SCROLLBAR_CONTINUOUS_DELAY); |
1637 | |
1635 | |
1638 | /* save the event params so we can highlight |
1636 | /* save the event params so we can highlight |
1639 | * the selection in the pending-scroll loop |
1637 | * the selection in the pending-scroll loop |
1640 | */ |
1638 | */ |
1641 | selection_save_x = ev.xbutton.x; |
1639 | selection_save_x = ev.xbutton.x; |
… | |
… | |
1700 | { |
1698 | { |
1701 | hidden_cursor = 0; |
1699 | hidden_cursor = 0; |
1702 | want_refresh = 1; |
1700 | want_refresh = 1; |
1703 | } |
1701 | } |
1704 | |
1702 | |
1705 | cursor_blink_ev.start (NOW + CURSOR_BLINK_INTERVAL); |
1703 | cursor_blink_ev.again (); |
1706 | } |
1704 | } |
1707 | #endif |
1705 | #endif |
1708 | |
1706 | |
1709 | #if defined(POINTER_BLANK) |
1707 | #if defined(POINTER_BLANK) |
1710 | if (option (Opt_pointerBlank) && pointerBlankDelay > 0) |
1708 | if (option (Opt_pointerBlank) && pointerBlankDelay > 0) |
… | |
… | |
1738 | XSetICFocus (Input_Context); |
1736 | XSetICFocus (Input_Context); |
1739 | } |
1737 | } |
1740 | #endif |
1738 | #endif |
1741 | #if CURSOR_BLINK |
1739 | #if CURSOR_BLINK |
1742 | if (option (Opt_cursorBlink)) |
1740 | if (option (Opt_cursorBlink)) |
1743 | cursor_blink_ev.start (NOW + CURSOR_BLINK_INTERVAL); |
1741 | cursor_blink_ev.start (CURSOR_BLINK_INTERVAL, CURSOR_BLINK_INTERVAL); |
1744 | #endif |
1742 | #endif |
1745 | #if OFF_FOCUS_FADING |
1743 | #if OFF_FOCUS_FADING |
1746 | if (rs[Rs_fade]) |
1744 | if (rs[Rs_fade]) |
1747 | { |
1745 | { |
1748 | pix_colors = pix_colors_focused; |
1746 | pix_colors = pix_colors_focused; |
… | |
… | |
1786 | XUnsetICFocus (Input_Context); |
1784 | XUnsetICFocus (Input_Context); |
1787 | #endif |
1785 | #endif |
1788 | #if CURSOR_BLINK |
1786 | #if CURSOR_BLINK |
1789 | if (option (Opt_cursorBlink)) |
1787 | if (option (Opt_cursorBlink)) |
1790 | cursor_blink_ev.stop (); |
1788 | cursor_blink_ev.stop (); |
|
|
1789 | |
1791 | hidden_cursor = 0; |
1790 | hidden_cursor = 0; |
1792 | #endif |
1791 | #endif |
1793 | #if OFF_FOCUS_FADING |
1792 | #if OFF_FOCUS_FADING |
1794 | if (rs[Rs_fade]) |
1793 | if (rs[Rs_fade]) |
1795 | { |
1794 | { |
… | |
… | |
2028 | upordown = 1; /* down */ |
2027 | upordown = 1; /* down */ |
2029 | } |
2028 | } |
2030 | if (upordown) |
2029 | if (upordown) |
2031 | { |
2030 | { |
2032 | #ifndef NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING |
2031 | #ifndef NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING |
2033 | cont_scroll_ev.start (NOW + SCROLLBAR_INITIAL_DELAY); |
2032 | cont_scroll_ev.start (SCROLLBAR_INITIAL_DELAY, SCROLLBAR_CONTINUOUS_DELAY); |
2034 | #endif |
2033 | #endif |
2035 | if (scr_page (upordown < 0 ? UP : DN, 1)) |
2034 | if (scr_page (upordown < 0 ? UP : DN, 1)) |
2036 | { |
2035 | { |
2037 | if (upordown < 0) |
2036 | if (upordown < 0) |
2038 | scrollBar.setUp (); |
2037 | scrollBar.setUp (); |
… | |
… | |
2201 | { |
2200 | { |
2202 | mouse_slip_wheel_speed += v ? -1 : 1; |
2201 | mouse_slip_wheel_speed += v ? -1 : 1; |
2203 | if (mouse_slip_wheel_speed < -nrow) mouse_slip_wheel_speed = -nrow; |
2202 | if (mouse_slip_wheel_speed < -nrow) mouse_slip_wheel_speed = -nrow; |
2204 | if (mouse_slip_wheel_speed > +nrow) mouse_slip_wheel_speed = +nrow; |
2203 | if (mouse_slip_wheel_speed > +nrow) mouse_slip_wheel_speed = +nrow; |
2205 | |
2204 | |
2206 | if (slip_wheel_ev.at < NOW) |
2205 | slip_wheel_ev.start (SCROLLBAR_CONTINUOUS_DELAY, SCROLLBAR_CONTINUOUS_DELAY); |
2207 | slip_wheel_ev.at = NOW + SCROLLBAR_CONTINUOUS_DELAY; |
|
|
2208 | |
|
|
2209 | slip_wheel_ev.start (); |
|
|
2210 | } |
2206 | } |
2211 | else |
2207 | else |
2212 | { |
2208 | { |
2213 | # endif |
2209 | # endif |
2214 | scr_page (v, i); |
2210 | scr_page (v, i); |
… | |
… | |
2282 | |
2278 | |
2283 | if (!option (Opt_jumpScroll) || refresh_count >= nrow - 1) |
2279 | if (!option (Opt_jumpScroll) || refresh_count >= nrow - 1) |
2284 | { |
2280 | { |
2285 | refresh_count = 0; |
2281 | refresh_count = 0; |
2286 | |
2282 | |
2287 | if (!option (Opt_skipScroll) || io_manager::now () > NOW + 1. / 60.) |
2283 | if (!option (Opt_skipScroll) || ev::ev_time () > ev::now () + 1. / 60.) |
2288 | { |
2284 | { |
2289 | refreshnow = true; |
2285 | refreshnow = true; |
2290 | ch = NOCHAR; |
2286 | ch = NOCHAR; |
2291 | break; |
2287 | break; |
2292 | } |
2288 | } |
… | |
… | |
4007 | v_buffer = (char *)realloc (v_buffer, v_buflen + len); |
4003 | v_buffer = (char *)realloc (v_buffer, v_buflen + len); |
4008 | |
4004 | |
4009 | memcpy (v_buffer + v_buflen, data, len); |
4005 | memcpy (v_buffer + v_buflen, data, len); |
4010 | v_buflen += len; |
4006 | v_buflen += len; |
4011 | |
4007 | |
4012 | pty_ev.set (EVENT_READ | EVENT_WRITE); |
4008 | pty_ev.set (ev::READ | ev::WRITE); |
4013 | } |
4009 | } |
4014 | |
4010 | |
4015 | void rxvt_term::pty_write () |
4011 | void rxvt_term::pty_write () |
4016 | { |
4012 | { |
4017 | int written = write (pty->pty, v_buffer, min (v_buflen, MAX_PTY_WRITE)); |
4013 | int written = write (pty->pty, v_buffer, min (v_buflen, MAX_PTY_WRITE)); |
… | |
… | |
4023 | if (v_buflen == 0) |
4019 | if (v_buflen == 0) |
4024 | { |
4020 | { |
4025 | free (v_buffer); |
4021 | free (v_buffer); |
4026 | v_buffer = 0; |
4022 | v_buffer = 0; |
4027 | |
4023 | |
4028 | pty_ev.set (EVENT_READ); |
4024 | pty_ev.set (ev::READ); |
4029 | return; |
4025 | return; |
4030 | } |
4026 | } |
4031 | |
4027 | |
4032 | memmove (v_buffer, v_buffer + written, v_buflen); |
4028 | memmove (v_buffer, v_buffer + written, v_buflen); |
4033 | } |
4029 | } |
4034 | else if (written != -1 || (errno != EAGAIN && errno != EINTR)) |
4030 | else if (written != -1 || (errno != EAGAIN && errno != EINTR)) |
4035 | pty_ev.set (EVENT_READ); |
4031 | pty_ev.set (ev::READ); |
4036 | } |
4032 | } |
4037 | |
4033 | |
4038 | /*----------------------- end-of-file (C source) -----------------------*/ |
4034 | /*----------------------- end-of-file (C source) -----------------------*/ |
4039 | |
4035 | |