1 | /*--------------------------------*-C-*---------------------------------* |
1 | /*--------------------------------*-C-*---------------------------------* |
2 | * File: command.c |
2 | * File: command.c |
3 | *----------------------------------------------------------------------* |
3 | *----------------------------------------------------------------------* |
4 | * $Id: command.C,v 1.17 2003/12/18 00:29:29 pcg Exp $ |
4 | * $Id: command.C,v 1.19 2003/12/18 05:45:11 pcg Exp $ |
5 | * |
5 | * |
6 | * All portions of code are copyright by their respective author/s. |
6 | * All portions of code are copyright by their respective author/s. |
7 | * Copyright (c) 1992 John Bovey, University of Kent at Canterbury <jdb@ukc.ac.uk> |
7 | * Copyright (c) 1992 John Bovey, University of Kent at Canterbury <jdb@ukc.ac.uk> |
8 | * - original version |
8 | * - original version |
9 | * Copyright (c) 1994 Robert Nation <nation@rocket.sanders.lockheed.com> |
9 | * Copyright (c) 1994 Robert Nation <nation@rocket.sanders.lockheed.com> |
… | |
… | |
691 | |
691 | |
692 | void |
692 | void |
693 | rxvt_term::check_cb (check_watcher &w) |
693 | rxvt_term::check_cb (check_watcher &w) |
694 | { |
694 | { |
695 | SET_R (this); |
695 | SET_R (this); |
|
|
696 | SET_LOCALE (locale); |
696 | |
697 | |
697 | flush (); |
698 | flush (); |
698 | } |
699 | } |
699 | |
700 | |
700 | void |
701 | void |
… | |
… | |
744 | } |
745 | } |
745 | |
746 | |
746 | void |
747 | void |
747 | rxvt_term::blink_cb (time_watcher &w) |
748 | rxvt_term::blink_cb (time_watcher &w) |
748 | { |
749 | { |
749 | SET_R (this); |
|
|
750 | |
|
|
751 | w.at += BLINK_INTERVAL; |
750 | w.at += BLINK_INTERVAL; |
752 | hidden_cursor = !hidden_cursor; |
751 | hidden_cursor = !hidden_cursor; |
753 | want_refresh = 1; |
752 | want_refresh = 1; |
754 | } |
753 | } |
755 | |
754 | |
756 | void |
755 | void |
757 | rxvt_term::x_cb (io_watcher &w, short revents) |
756 | rxvt_term::x_cb (io_watcher &w, short revents) |
758 | { |
757 | { |
759 | SET_R (this); |
758 | SET_R (this); |
|
|
759 | SET_LOCALE (locale); |
760 | |
760 | |
761 | process_x_events (); |
761 | process_x_events (); |
762 | } |
762 | } |
763 | |
763 | |
764 | bool |
764 | bool |
… | |
… | |
785 | |
785 | |
786 | void |
786 | void |
787 | rxvt_term::pty_cb (io_watcher &w, short revents) |
787 | rxvt_term::pty_cb (io_watcher &w, short revents) |
788 | { |
788 | { |
789 | SET_R (this); |
789 | SET_R (this); |
|
|
790 | SET_LOCALE (locale); |
790 | |
791 | |
791 | if (revents & EVENT_WRITE) |
792 | if (revents & EVENT_WRITE) |
792 | tt_write (0, 0); |
793 | tt_write (0, 0); |
793 | else if (revents & EVENT_READ) |
794 | else if (revents & EVENT_READ) |
794 | { |
795 | { |
… | |
… | |
1038 | |
1039 | |
1039 | void |
1040 | void |
1040 | rxvt_term::pointer_unblank () |
1041 | rxvt_term::pointer_unblank () |
1041 | { |
1042 | { |
1042 | XDefineCursor (Xdisplay, TermWin.vt, TermWin_cursor); |
1043 | XDefineCursor (Xdisplay, TermWin.vt, TermWin_cursor); |
1043 | rxvt_recolour_cursor (this); |
1044 | recolour_cursor (); |
1044 | |
1045 | |
1045 | #ifdef POINTER_BLANK |
1046 | #ifdef POINTER_BLANK |
1046 | hidden_pointer = 0; |
1047 | hidden_pointer = 0; |
1047 | |
1048 | |
1048 | if (Options & Opt_pointerBlank) |
1049 | if (Options & Opt_pointerBlank) |
… | |
… | |
1067 | |
1068 | |
1068 | void |
1069 | void |
1069 | rxvt_term::pointer_cb (time_watcher &w) |
1070 | rxvt_term::pointer_cb (time_watcher &w) |
1070 | { |
1071 | { |
1071 | SET_R (this); |
1072 | SET_R (this); |
|
|
1073 | SET_LOCALE (locale); |
1072 | |
1074 | |
1073 | pointer_blank (); |
1075 | pointer_blank (); |
1074 | } |
1076 | } |
1075 | #endif |
1077 | #endif |
1076 | |
1078 | |
… | |
… | |
1432 | &unused_xevent)) ; |
1434 | &unused_xevent)) ; |
1433 | while (XCheckTypedWindowEvent(R->Xdisplay, ev->xany.window, |
1435 | while (XCheckTypedWindowEvent(R->Xdisplay, ev->xany.window, |
1434 | GraphicsExpose, |
1436 | GraphicsExpose, |
1435 | &unused_xevent)) ; |
1437 | &unused_xevent)) ; |
1436 | if (isScrollbarWindow(ev->xany.window)) { |
1438 | if (isScrollbarWindow(ev->xany.window)) { |
1437 | scrollbar_setIdle(); |
1439 | R->scrollBar.setIdle(); |
1438 | rxvt_scrollbar_show(aR_ 0); |
1440 | rxvt_scrollbar_show(aR_ 0); |
1439 | } |
1441 | } |
1440 | #ifdef MENUBAR |
1442 | #ifdef MENUBAR |
1441 | if (menubar_visible(aR) && isMenuBarWindow(ev->xany.window)) |
1443 | if (menubar_visible(aR) && isMenuBarWindow(ev->xany.window)) |
1442 | rxvt_menubar_expose(aR); |
1444 | rxvt_menubar_expose(aR); |
… | |
… | |
1555 | */ |
1557 | */ |
1556 | if (ev->window == R->TermWin.vt) |
1558 | if (ev->window == R->TermWin.vt) |
1557 | { |
1559 | { |
1558 | #if RXVT_GRAPHICS |
1560 | #if RXVT_GRAPHICS |
1559 | if (ev->subwindow != None) |
1561 | if (ev->subwindow != None) |
1560 | rxvt_Gr_ButtonPress(ev->x, ev->y); |
1562 | rxvt_Gr_ButtonPress (ev->x, ev->y); |
1561 | else |
1563 | else |
1562 | #endif |
1564 | #endif |
1563 | { |
1565 | { |
1564 | clickintime = ev->time - R->MEvent.time < MULTICLICK_TIME; |
1566 | clickintime = ev->time - R->MEvent.time < MULTICLICK_TIME; |
1565 | if (reportmode) |
1567 | if (reportmode) |
… | |
… | |
1627 | /* |
1629 | /* |
1628 | * Scrollbar window processing of button press |
1630 | * Scrollbar window processing of button press |
1629 | */ |
1631 | */ |
1630 | if (isScrollbarWindow(ev->window)) |
1632 | if (isScrollbarWindow(ev->window)) |
1631 | { |
1633 | { |
1632 | scrollbar_setIdle(); |
1634 | R->scrollBar.setIdle (); |
1633 | /* |
1635 | /* |
1634 | * Rxvt-style scrollbar: |
1636 | * Rxvt-style scrollbar: |
1635 | * move up if mouse is above slider |
1637 | * move up if mouse is above slider |
1636 | * move dn if mouse is below slider |
1638 | * move dn if mouse is below slider |
1637 | * |
1639 | * |
… | |
… | |
1690 | #ifndef NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING |
1692 | #ifndef NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING |
1691 | R->scroll_arrow_delay = SCROLLBAR_INITIAL_DELAY; |
1693 | R->scroll_arrow_delay = SCROLLBAR_INITIAL_DELAY; |
1692 | #endif |
1694 | #endif |
1693 | if (rxvt_scr_page(aR_ upordown < 0 ? UP : DN, 1)) { |
1695 | if (rxvt_scr_page(aR_ upordown < 0 ? UP : DN, 1)) { |
1694 | if (upordown < 0) |
1696 | if (upordown < 0) |
1695 | scrollbar_setUp(); |
1697 | R->scrollBar.setUp (); |
1696 | else |
1698 | else |
1697 | scrollbar_setDn(); |
1699 | R->scrollBar.setDn (); |
1698 | } |
1700 | } |
1699 | } else |
1701 | } else |
1700 | switch (ev->button) { |
1702 | switch (ev->button) { |
1701 | case Button2: |
1703 | case Button2: |
1702 | switch (R->scrollbar_align) { |
1704 | switch (R->scrollbar_align) { |
… | |
… | |
1714 | || scrollbar_above_slider(ev->y) |
1716 | || scrollbar_above_slider(ev->y) |
1715 | || scrollbar_below_slider(ev->y)) |
1717 | || scrollbar_below_slider(ev->y)) |
1716 | rxvt_scr_move_to(aR_ |
1718 | rxvt_scr_move_to(aR_ |
1717 | scrollbar_position(ev->y) - R->csrO, |
1719 | scrollbar_position(ev->y) - R->csrO, |
1718 | scrollbar_size()); |
1720 | scrollbar_size()); |
1719 | scrollbar_setMotion(); |
1721 | R->scrollBar.setMotion (); |
1720 | break; |
1722 | break; |
1721 | |
1723 | |
1722 | case Button1: |
1724 | case Button1: |
1723 | if (R->scrollbar_align == R_SB_ALIGN_CENTRE) |
1725 | if (R->scrollbar_align == R_SB_ALIGN_CENTRE) |
1724 | R->csrO = ev->y - R->scrollBar.top; |
1726 | R->csrO = ev->y - R->scrollBar.top; |
… | |
… | |
1737 | rxvt_scr_page(aR_ DN, R->TermWin.nrow - 1); |
1739 | rxvt_scr_page(aR_ DN, R->TermWin.nrow - 1); |
1738 | # else |
1740 | # else |
1739 | rxvt_scr_page(aR_ DN, R->TermWin.nrow / 4); |
1741 | rxvt_scr_page(aR_ DN, R->TermWin.nrow / 4); |
1740 | # endif |
1742 | # endif |
1741 | else |
1743 | else |
1742 | scrollbar_setMotion(); |
1744 | R->scrollBar.setMotion (); |
1743 | } else { |
1745 | } else { |
1744 | rxvt_scr_page(aR_ (ev->button == Button1 ? DN : UP), |
1746 | rxvt_scr_page(aR_ (ev->button == Button1 ? DN : UP), |
1745 | (R->TermWin.nrow |
1747 | (R->TermWin.nrow |
1746 | * scrollbar_position(ev->y) |
1748 | * scrollbar_position(ev->y) |
1747 | / scrollbar_size())); |
1749 | / scrollbar_size())); |
… | |
… | |
1769 | R->csrO = 0; /* reset csr Offset */ |
1771 | R->csrO = 0; /* reset csr Offset */ |
1770 | if (!R->bypass_keystate) |
1772 | if (!R->bypass_keystate) |
1771 | reportmode = !!(R->PrivateModes & PrivMode_mouse_report); |
1773 | reportmode = !!(R->PrivateModes & PrivMode_mouse_report); |
1772 | |
1774 | |
1773 | if (scrollbar_isUpDn()) { |
1775 | if (scrollbar_isUpDn()) { |
1774 | scrollbar_setIdle(); |
1776 | R->scrollBar.setIdle (); |
1775 | rxvt_scrollbar_show(aR_ 0); |
1777 | rxvt_scrollbar_show(aR_ 0); |
1776 | #ifndef NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING |
1778 | #ifndef NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING |
1777 | R->refresh_type &= ~SMOOTH_REFRESH; |
1779 | R->refresh_type &= ~SMOOTH_REFRESH; |
1778 | #endif |
1780 | #endif |
1779 | } |
1781 | } |
… | |
… | |
1830 | break; |
1832 | break; |
1831 | #ifdef MOUSE_WHEEL |
1833 | #ifdef MOUSE_WHEEL |
1832 | case Button4: |
1834 | case Button4: |
1833 | case Button5: |
1835 | case Button5: |
1834 | { |
1836 | { |
1835 | int i, v; |
1837 | int i; |
|
|
1838 | page_dirn v; |
1836 | |
1839 | |
1837 | v = (ev->button == Button4) ? UP : DN; |
1840 | v = (ev->button == Button4) ? UP : DN; |
1838 | if (ev->state & ShiftMask) |
1841 | if (ev->state & ShiftMask) |
1839 | i = 1; |
1842 | i = 1; |
1840 | else if ((R->Options & Opt_mouseWheelScrollPage)) |
1843 | else if ((R->Options & Opt_mouseWheelScrollPage)) |
… | |
… | |
2015 | n = 0; |
2018 | n = 0; |
2016 | if (pchanged) { |
2019 | if (pchanged) { |
2017 | for (; n < (unsigned int)i; n++) { |
2020 | for (; n < (unsigned int)i; n++) { |
2018 | XGetWindowAttributes(R->Xdisplay, R->TermWin.parent[n], &wattr); |
2021 | XGetWindowAttributes(R->Xdisplay, R->TermWin.parent[n], &wattr); |
2019 | D_X((stderr, "InheritPixmap Checking Parent[%d]: %s", n, (wattr.depth == rootdepth && wattr.class != InputOnly) ? "OK" : "FAIL")); |
2022 | D_X((stderr, "InheritPixmap Checking Parent[%d]: %s", n, (wattr.depth == rootdepth && wattr.class != InputOnly) ? "OK" : "FAIL")); |
2020 | if (wattr.depth != rootdepth || wattr.class == InputOnly) { |
2023 | if (wattr.depth != rootdepth || wattr.c_class == InputOnly) { |
2021 | n = (int)(sizeof(R->TermWin.parent) / sizeof(Window)) + 1; |
2024 | n = (int)(sizeof(R->TermWin.parent) / sizeof(Window)) + 1; |
2022 | break; |
2025 | break; |
2023 | } |
2026 | } |
2024 | } |
2027 | } |
2025 | } |
2028 | } |
… | |
… | |
3373 | } |
3376 | } |
3374 | |
3377 | |
3375 | if ((cmd == 'T') && (nargs >= 5)) { |
3378 | if ((cmd == 'T') && (nargs >= 5)) { |
3376 | int i, len = args[4]; |
3379 | int i, len = args[4]; |
3377 | |
3380 | |
3378 | text = rxvt_malloc((len + 1) * sizeof(char)); |
3381 | text = (unsigned char *)rxvt_malloc((len + 1) * sizeof(char)); |
3379 | |
3382 | |
3380 | if (text != NULL) { |
3383 | if (text != NULL) { |
3381 | for (i = 0; i < len; i++) |
3384 | for (i = 0; i < len; i++) |
3382 | text[i] = rxvt_cmd_getc(aR); |
3385 | text[i] = rxvt_cmd_getc(aR); |
3383 | text[len] = '\0'; |
3386 | text[len] = '\0'; |