Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:redwil:15.4
xview
shelltool-mouse.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File shelltool-mouse.patch of Package xview
diff -rNu xview-3.2p1.4-old/lib/libxview/ttysw/charscreen.h xview-3.2p1.4/lib/libxview/ttysw/charscreen.h --- xview-3.2p1.4-old/lib/libxview/ttysw/charscreen.h 2013-08-25 14:09:20.604490258 +0200 +++ xview-3.2p1.4/lib/libxview/ttysw/charscreen.h 2013-08-25 14:17:42.560497620 +0200 @@ -19,6 +19,9 @@ #define x_to_col(x) ((((x) >= chrleftmargin) ? \ ((x) - chrleftmargin) : 0)/chrwidth) +#define row_to_mouse_y(row) (unsigned char)(1 + 32 + row) +#define col_to_mouse_x(col) (unsigned char)(1 + 32 + col) + /* * Character dimensions (fixed width fonts only!) * and of screen in pixels. diff -rNu xview-3.2p1.4-old/lib/libxview/ttysw/tty_impl.h xview-3.2p1.4/lib/libxview/ttysw/tty_impl.h --- xview-3.2p1.4-old/lib/libxview/ttysw/tty_impl.h 2013-08-25 14:09:20.604490258 +0200 +++ xview-3.2p1.4/lib/libxview/ttysw/tty_impl.h 2013-08-25 14:20:00.456499642 +0200 @@ -54,6 +54,12 @@ #define TTY_FROM_TTY_VIEW(_tty_view_public) \ ((Tty) TTY_PUBLIC(TTY_FOLIO_FROM_TTY_VIEW(_tty_view_public))) +#define TTY_ESC (unsigned char)27 +#define TTY_LEFT_MOUSE_BTN (unsigned char)(32 + 0) +#define TTY_RIGHT_MOUSE_BTN (unsigned char)(32 + 1) +#define TTY_MIDDLE_MOUSE_BTN (unsigned char)(32 + 2) +#define TTY_MOUSE_BTN_RELEASED (unsigned char)(32 + 3) + /* * These are the data structures internal to the tty subwindow * implementation. They are considered private to the implementation. @@ -186,6 +192,8 @@ #endif int pass_thru_modifiers; /* Modifiers we don't interpret */ int eight_bit_output; /* Print eight bit characters? */ + int enable_mouse_legacy; /* enable mouse button reporting (X10) */ + int enable_mouse; /* enable mouse button reporting */ } Ttysw; typedef Ttysw *Ttysw_folio; @@ -391,7 +399,9 @@ xv_tty_free_image_and_mode(), xv_tty_imagealloc(), xv_tty_new_size(), - ttysw_pty_output(); /* mbuck@debian.org: Moved here from int-returning functions */ + ttysw_pty_output(), /* mbuck@debian.org: Moved here from int-returning functions */ + ttysw_set_dec_private(), + ttysw_reset_dec_private(); #ifdef OW_I18N Pkg_private void diff -rNu xview-3.2p1.4-old/lib/libxview/ttysw/tty_main.c xview-3.2p1.4/lib/libxview/ttysw/tty_main.c --- xview-3.2p1.4-old/lib/libxview/ttysw/tty_main.c 2013-08-25 14:09:20.608490259 +0200 +++ xview-3.2p1.4/lib/libxview/ttysw/tty_main.c 2013-08-25 14:46:05.820522600 +0200 @@ -53,6 +53,7 @@ #include <xview_private/term_impl.h> #include <xview_private/tty_impl.h> #include <xview_private/draw_impl.h> +#include <xview_private/charscreen.h> #include <xview/sel_svc.h> #ifdef OW_I18N @@ -1387,6 +1388,31 @@ register Ttysw_folio ttysw; register struct inputevent *ie; { + if(ttysw->enable_mouse || ttysw->enable_mouse_legacy) { + /* if application wants to use mouse, then selection won't work */ + unsigned char x, y; + char buf[7]; + + x = col_to_mouse_x(x_to_col(ie->ie_locx)); + y = row_to_mouse_y(y_to_row(ie->ie_locy)); + + /* if we are using modern mouse button reporting, we will report when + * button is released or pressed. In legacy (X10) mode, we will report + * only when mouse button is pressed. */ + + if(win_inputposevent(ie) && ttysw->enable_mouse_legacy) { + sprintf(buf, "%c[M%c%c%c", TTY_ESC, TTY_LEFT_MOUSE_BTN, x, y); + ttysw_input_it(ttysw, buf, 6); + } else if(win_inputposevent(ie) && ttysw->enable_mouse) { + sprintf(buf, "%c[M%c%c%c", TTY_ESC, TTY_LEFT_MOUSE_BTN, x, y); + ttysw_input_it(ttysw, buf, 6); + } else if(win_inputnegevent(ie) && ttysw->enable_mouse) { + sprintf(buf, "%c[M%c%c%c", TTY_ESC, TTY_MOUSE_BTN_RELEASED, x, y); + ttysw_input_it(ttysw, buf, 6); + } + + return TTY_DONE; + } if (win_inputposevent(ie)) { #ifdef OW_I18N diff -rNu xview-3.2p1.4-old/lib/libxview/ttysw/ttyansi.c xview-3.2p1.4/lib/libxview/ttysw/ttyansi.c --- xview-3.2p1.4-old/lib/libxview/ttysw/ttyansi.c 2013-08-25 14:09:20.604490258 +0200 +++ xview-3.2p1.4/lib/libxview/ttysw/ttyansi.c 2013-08-25 14:36:08.260513836 +0200 @@ -1274,6 +1274,53 @@ return (olen - len); } +Pkg_private void +ttysw_set_dec_private(ttysw, code, ac, av) +Ttysw_folio ttysw; +int code, ac, *av; +{ + int i; + + for(i = 0; i < ac; i++) { + switch(av[i] & 0x00ffffff) { + case 9: /* enable mouse button reporting (X10 compatibility mode) */ + ttysw->enable_mouse_legacy = TRUE; + /* we have to disable modern mouse button reporting, because + * these modes are mutually exclusive */ + ttysw->enable_mouse = FALSE; + break; + + case 1000: /* enable mouse button reporting */ + ttysw->enable_mouse = TRUE; + /* we have to disable legacy mouse button reporting, because + * these modes are mutually exclusive */ + ttysw->enable_mouse_legacy = FALSE; + break; + } + } +} + +Pkg_private void +ttysw_reset_dec_private(ttysw, code, ac, av) +Ttysw_folio ttysw; +int code, ac, *av; +{ + int i; + + for(i = 0; i < ac; i++) { + switch(av[i] & 0x00ffffff) { + case 9: /* disable mouse button reporting (X10 compatibility mode) */ + ttysw->enable_mouse_legacy = FALSE; + break; + + case 1000: /* disable mouse button reporting */ + ttysw->enable_mouse = FALSE; + break; + } + } +} + + Pkg_private int ttysw_ansi_escape(ttysw_view_public, c, ac, av) Tty_view ttysw_view_public; @@ -1435,6 +1482,12 @@ case 'h':{ /* set mode */ int turn_on; + if(prefix == '?') { + /* DECSET */ + ttysw_set_dec_private(ttysw, c, ac, av); + break; + } + for (i = 0; i < ac; i++) { if (av[i] > 0 && (av[i] & 0xff000000) == ('>' << 24)) { @@ -1468,6 +1521,13 @@ break; case 'l': /* reset mode */ + + if(prefix == '?') { + /* DECRST */ + ttysw_reset_dec_private(ttysw, c, ac, av); + break; + } + for (i = 0; i < ac; i++) if (av[i] > 0 && (av[i] & 0xff000000) == ('>' << 24)) {
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor