-/* $Id: macterm.c,v 1.53 2003/01/25 15:15:40 ben Exp $ */
+/* $Id: macterm.c,v 1.54 2003/01/25 16:16:44 ben Exp $ */
/*
* Copyright (c) 1999 Simon Tatham
* Copyright (c) 1999, 2002 Ben Harris
lastact == MA_3CLK ? MA_CLICK : MA_NOTHING);
else
lastact = MA_CLICK;
- /* Fake right button with shift key */
- term_mouse(s->term, event->modifiers & shiftKey ? MBT_RIGHT : MBT_LEFT,
+ term_mouse(s->term, MBT_LEFT,
+ event->modifiers & shiftKey ? MBT_EXTEND : MBT_SELECT,
lastact, col, row, event->modifiers & shiftKey,
event->modifiers & controlKey, event->modifiers & optionKey);
lastsess = s;
GetMouse(&localwhere);
col = PTOCC(localwhere.h);
row = PTOCR(localwhere.v);
- term_mouse(s->term,
- event->modifiers & shiftKey ? MBT_RIGHT : MBT_LEFT,
+ term_mouse(s->term, MBT_LEFT,
+ event->modifiers & shiftKey ? MBT_EXTEND : MBT_SELECT,
MA_DRAG, col, row, event->modifiers & shiftKey,
event->modifiers & controlKey,
event->modifiers & optionKey);
else if (row < 0)
term_scroll(s->term, 0, row);
}
- term_mouse(s->term, event->modifiers & shiftKey ? MBT_RIGHT : MBT_LEFT,
+ term_mouse(s->term, MBT_LEFT,
+ event->modifiers & shiftKey ? MBT_EXTEND : MBT_SELECT,
MA_RELEASE, col, row, event->modifiers & shiftKey,
event->modifiers & controlKey, event->modifiers & optionKey);
lastwhen = TickCount();
}
-Mouse_Button translate_button(void *frontend, Mouse_Button button)
-{
-
- switch (button) {
- case MBT_LEFT:
- return MBT_SELECT;
- case MBT_RIGHT:
- return MBT_EXTEND;
- default:
- return 0;
- }
-}
-
void write_clip(void *cookie, wchar_t *data, int len, int must_deselect) {
/*
void get_clip(void *frontend, wchar_t **, int *);
void optimised_move(void *frontend, int, int, int);
void set_raw_mouse_mode(void *frontend, int);
-Mouse_Button translate_button(void *frontend, Mouse_Button b);
void connection_fatal(void *frontend, char *, ...);
void fatalbox(char *, ...);
void modalfatalbox(char *, ...);
void term_scroll(Terminal *, int, int);
void term_pwron(Terminal *);
void term_clrsb(Terminal *);
-void term_mouse(Terminal *, Mouse_Button, Mouse_Action, int,int,int,int,int);
+void term_mouse(Terminal *, Mouse_Button, Mouse_Button, Mouse_Action,
+ int,int,int,int,int);
void term_deselect(Terminal *);
void term_update(Terminal *);
void term_invalidate(Terminal *);
get_clip(term->frontend, NULL, NULL);
}
-void term_mouse(Terminal *term, Mouse_Button b, Mouse_Action a, int x, int y,
- int shift, int ctrl, int alt)
+void term_mouse(Terminal *term, Mouse_Button braw, Mouse_Button bcooked,
+ Mouse_Action a, int x, int y, int shift, int ctrl, int alt)
{
pos selpoint;
unsigned long *ldata;
if (term->ldisc) {
- switch (b) {
+ switch (braw) {
case MBT_LEFT:
encstate = 0x20; /* left button down */
break;
term->mouse_is_down = 0;
break;
case MA_CLICK:
- if (term->mouse_is_down == b)
+ if (term->mouse_is_down == braw)
return;
- term->mouse_is_down = b;
+ term->mouse_is_down = braw;
break;
default: break; /* placate gcc warning about enum use */
}
return;
}
- b = translate_button(term->frontend, b);
-
/*
* Set the selection type (rectangular or normal) at the start
* of a selection attempt, from the state of Alt.
term->seltype = default_seltype;
}
- if (b == MBT_SELECT && a == MA_CLICK) {
+ if (bcooked == MBT_SELECT && a == MA_CLICK) {
deselect(term);
term->selstate = ABOUT_TO;
term->seltype = default_seltype;
term->selanchor = selpoint;
term->selmode = SM_CHAR;
- } else if (b == MBT_SELECT && (a == MA_2CLK || a == MA_3CLK)) {
+ } else if (bcooked == MBT_SELECT && (a == MA_2CLK || a == MA_3CLK)) {
deselect(term);
term->selmode = (a == MA_2CLK ? SM_WORD : SM_LINE);
term->selstate = DRAGGING;
term->selend = term->selstart;
incpos(term->selend);
sel_spread(term);
- } else if ((b == MBT_SELECT && a == MA_DRAG) ||
- (b == MBT_EXTEND && a != MA_RELEASE)) {
+ } else if ((bcooked == MBT_SELECT && a == MA_DRAG) ||
+ (bcooked == MBT_EXTEND && a != MA_RELEASE)) {
if (term->selstate == ABOUT_TO && poseq(term->selanchor, selpoint))
return;
- if (b == MBT_EXTEND && a != MA_DRAG && term->selstate == SELECTED) {
+ if (bcooked == MBT_EXTEND && a != MA_DRAG &&
+ term->selstate == SELECTED) {
if (term->seltype == LEXICOGRAPHIC) {
/*
* For normal selection, we extend by moving
term->selend.y = max(term->selanchor.y, selpoint.y);
}
sel_spread(term);
- } else if ((b == MBT_SELECT || b == MBT_EXTEND) && a == MA_RELEASE) {
+ } else if ((bcooked == MBT_SELECT || bcooked == MBT_EXTEND) &&
+ a == MA_RELEASE) {
if (term->selstate == DRAGGING) {
/*
* We've completed a selection. We now transfer the
term->selstate = SELECTED;
} else
term->selstate = NO_SELECTION;
- } else if (b == MBT_PASTE
+ } else if (bcooked == MBT_PASTE
&& (a == MA_CLICK
#if MULTICLICK_ONLY_EVENT
|| a == MA_2CLK || a == MA_3CLK
* mouse or a means of faking it, and there is no need to switch
* buttons around at all.
*/
-Mouse_Button translate_button(void *frontend, Mouse_Button button)
+static Mouse_Button translate_button(void *frontend, Mouse_Button button)
{
/* struct gui_data *inst = (struct gui_data *)frontend; */
x = (event->x - inst->cfg.window_border) / inst->font_width;
y = (event->y - inst->cfg.window_border) / inst->font_height;
- term_mouse(inst->term, button, act, x, y, shift, ctrl, alt);
+ term_mouse(inst->term, button, translate_button(button), act,
+ x, y, shift, ctrl, alt);
return TRUE;
}
x = (event->x - inst->cfg.window_border) / inst->font_width;
y = (event->y - inst->cfg.window_border) / inst->font_height;
- term_mouse(inst->term, button, MA_DRAG, x, y, shift, ctrl, alt);
+ term_mouse(inst->term, button, translate_button(button), MA_DRAG,
+ x, y, shift, ctrl, alt);
return TRUE;
}
#define WHEEL_DELTA 120
#endif
+static Mouse_Button translate_button(void *frontend, Mouse_Button button);
static LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
unsigned char *output);
if (send_raw_mouse && !(cfg.mouse_override && shift)) {
lastbtn = MBT_NOTHING;
- term_mouse(term, b, MA_CLICK, x, y, shift, ctrl, alt);
+ term_mouse(term, b, translate_button(b), MA_CLICK,
+ x, y, shift, ctrl, alt);
return;
}
lastact = MA_CLICK;
}
if (lastact != MA_NOTHING)
- term_mouse(term, b, lastact, x, y, shift, ctrl, alt);
+ term_mouse(term, b, translate_button(b), lastact,
+ x, y, shift, ctrl, alt);
lasttime = thistime;
}
* Translate a raw mouse button designation (LEFT, MIDDLE, RIGHT)
* into a cooked one (SELECT, EXTEND, PASTE).
*/
-Mouse_Button translate_button(void *frontend, Mouse_Button button)
+static Mouse_Button translate_button(void *frontend, Mouse_Button button)
{
if (button == MBT_LEFT)
return MBT_SELECT;
is_alt_pressed());
SetCapture(hwnd);
} else {
- term_mouse(term, button, MA_RELEASE,
+ term_mouse(term, button, translate_button(button), MA_RELEASE,
TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)), wParam & MK_SHIFT,
wParam & MK_CONTROL, is_alt_pressed());
b = MBT_MIDDLE;
else
b = MBT_RIGHT;
- term_mouse(term, b, MA_DRAG, TO_CHR_X(X_POS(lParam)),
+ term_mouse(term, b, translate_button(b), MA_DRAG,
+ TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)), wParam & MK_SHIFT,
wParam & MK_CONTROL, is_alt_pressed());
}
if (send_raw_mouse &&
!(cfg.mouse_override && shift_pressed)) {
/* send a mouse-down followed by a mouse up */
- term_mouse(term, b,
+ term_mouse(term, b, translate_button(b),
MA_CLICK,
TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)), shift_pressed,
control_pressed, is_alt_pressed());
- term_mouse(term, b, MA_RELEASE, TO_CHR_X(X_POS(lParam)),
+ term_mouse(term, b, translate_button(b),
+ MA_RELEASE, TO_CHR_X(X_POS(lParam)),
TO_CHR_Y(Y_POS(lParam)), shift_pressed,
control_pressed, is_alt_pressed());
} else {