[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/keyboard.c
From: |
Jason Rumney |
Subject: |
[Emacs-diffs] Changes to emacs/src/keyboard.c |
Date: |
Sun, 01 Jun 2003 17:48:54 -0400 |
Index: emacs/src/keyboard.c
diff -c emacs/src/keyboard.c:1.748 emacs/src/keyboard.c:1.749
*** emacs/src/keyboard.c:1.748 Sun Jun 1 17:40:38 2003
--- emacs/src/keyboard.c Sun Jun 1 17:48:53 2003
***************
*** 5429,5611 ****
Lisp_Object window;
Lisp_Object head;
position = Qnil;
! /* Build the position as appropriate for this mouse click. */
! enum window_part part;
! struct frame *f = XFRAME (event->frame_or_window);
! Lisp_Object posn;
! Lisp_Object string_info = Qnil;
! int row, column;
! int wx, wy;
!
! /* Ignore wheel events that were made on frame that have been
! deleted. */
! if (! FRAME_LIVE_P (f))
! return Qnil;
!
! /* EVENT->x and EVENT->y are frame-relative pixel
! coordinates at this place. Under old redisplay, COLUMN
! and ROW are set to frame relative glyph coordinates
! which are then used to determine whether this click is
! in a menu (non-toolkit version). */
! pixel_to_glyph_coords (f, XINT (event->x), XINT (event->y),
! &column, &row, NULL, 1);
!
! /* Set `window' to the window under frame pixel coordinates
! event->x/event->y. */
! window = window_from_coordinates (f, XINT (event->x),
! XINT (event->y),
! &part, &wx, &wy, 0);
!
! if (!WINDOWP (window))
! {
! window = event->frame_or_window;
! posn = Qnil;
! }
! else
! {
! /* It's a click in window window at frame coordinates
! event->x/ event->y. */
! struct window *w = XWINDOW (window);
!
! /* Set event coordinates to window-relative coordinates
! for constructing the Lisp event below. */
! XSETINT (event->x, wx);
! XSETINT (event->y, wy);
!
! if (part == ON_MODE_LINE || part == ON_HEADER_LINE)
! {
! /* Mode line or header line. Look for a string under
! the mouse that may have a `local-map' property. */
! Lisp_Object string;
! int charpos;
!
! posn = part == ON_MODE_LINE ? Qmode_line : Qheader_line;
! string = mode_line_string (w, wx, wy, part, &charpos);
! if (STRINGP (string))
! string_info = Fcons (string, make_number (charpos));
! }
! else if (part == ON_VERTICAL_BORDER)
! posn = Qvertical_line;
! else if (part == ON_LEFT_MARGIN || part == ON_RIGHT_MARGIN)
! {
! int charpos;
! Lisp_Object object = marginal_area_string (w, wx, wy, part,
! &charpos);
! posn = (part == ON_LEFT_MARGIN) ? Qleft_margin : Qright_margin;
! if (STRINGP (object))
! string_info = Fcons (object, make_number (charpos));
! }
! else
! {
! Lisp_Object object;
! struct display_pos p;
! buffer_posn_from_coords (w, &wx, &wy, &object, &p);
! posn = make_number (CHARPOS (p.pos));
! if (STRINGP (object))
! string_info
! = Fcons (object,
! make_number (CHARPOS (p.string_pos)));
! }
! }
!
! position
! = Fcons (window,
! Fcons (posn,
! Fcons (Fcons (event->x, event->y),
! Fcons (make_number (event->timestamp),
! (NILP (string_info)
! ? Qnil
! : Fcons (string_info, Qnil))))));
!
! /* Set double or triple modifiers to indicate the wheel speed. */
! {
! /* On window-system frames, use the value of
! double-click-fuzz as is. On other frames, interpret it
! as a multiple of 1/8 characters. */
! struct frame *f;
! int fuzz;
! int is_double;
!
! if (WINDOWP (event->frame_or_window))
! f = XFRAME (XWINDOW (event->frame_or_window)->frame);
! else if (FRAMEP (event->frame_or_window))
! f = XFRAME (event->frame_or_window);
! else
! abort ();
!
! if (FRAME_WINDOW_P (f))
! fuzz = double_click_fuzz;
! else
! fuzz = double_click_fuzz / 8;
!
! is_double = (last_mouse_button < 0
! && (abs (XINT (event->x) - last_mouse_x) <= fuzz)
! && (abs (XINT (event->y) - last_mouse_y) <= fuzz)
! && button_down_time != 0
! && (EQ (Vdouble_click_time, Qt)
! || (INTEGERP (Vdouble_click_time)
! && ((int)(event->timestamp - button_down_time)
! < XINT (Vdouble_click_time)))));
! if (is_double)
! {
! double_click_count++;
! event->modifiers |= ((double_click_count > 2)
! ? triple_modifier
! : double_modifier);
! }
! else
! {
! double_click_count = 1;
! event->modifiers |= click_modifier;
! }
!
! button_down_time = event->timestamp;
! /* Use a negative value to distinguish wheel from mouse button. */
! last_mouse_button = -1;
! last_mouse_x = XINT (event->x);
! last_mouse_y = XINT (event->y);
! }
!
! {
! int symbol_num;
!
! if (event->modifiers & up_modifier)
! {
! /* Emit a wheel-up event. */
! event->modifiers &= ~up_modifier;
! symbol_num = 0;
! }
! else if (event->modifiers & down_modifier)
! {
! /* Emit a wheel-down event. */
! event->modifiers &= ~down_modifier;
! symbol_num = 1;
! }
! else
! /* Every wheel event should either have the down_modifier or
! the up_modifier set. */
! abort ();
!
! /* Get the symbol we should use for the wheel event. */
! head = modify_event_symbol (symbol_num,
! event->modifiers,
! Qmouse_click,
! Qnil,
! lispy_wheel_names,
! &wheel_syms,
! ASIZE (wheel_syms));
! }
!
! if (event->modifiers & (double_modifier | triple_modifier))
! return Fcons (head,
! Fcons (position,
! Fcons (make_number (double_click_count),
! Qnil)));
! else
! return Fcons (head,
! Fcons (position,
! Qnil));
}
--- 5429,5611 ----
Lisp_Object window;
Lisp_Object head;
+ /* Build the position as appropriate for this mouse click. */
+ enum window_part part;
+ struct frame *f = XFRAME (event->frame_or_window);
+ Lisp_Object posn;
+ Lisp_Object string_info = Qnil;
+ int row, column;
+ int wx, wy;
position = Qnil;
!
! /* Ignore wheel events that were made on frame that have been
! deleted. */
! if (! FRAME_LIVE_P (f))
! return Qnil;
!
! /* EVENT->x and EVENT->y are frame-relative pixel
! coordinates at this place. Under old redisplay, COLUMN
! and ROW are set to frame relative glyph coordinates
! which are then used to determine whether this click is
! in a menu (non-toolkit version). */
! pixel_to_glyph_coords (f, XINT (event->x), XINT (event->y),
! &column, &row, NULL, 1);
!
! /* Set `window' to the window under frame pixel coordinates
! event->x/event->y. */
! window = window_from_coordinates (f, XINT (event->x),
! XINT (event->y),
! &part, &wx, &wy, 0);
!
! if (!WINDOWP (window))
! {
! window = event->frame_or_window;
! posn = Qnil;
! }
! else
! {
! /* It's a click in window window at frame coordinates
! event->x/ event->y. */
! struct window *w = XWINDOW (window);
!
! /* Set event coordinates to window-relative coordinates
! for constructing the Lisp event below. */
! XSETINT (event->x, wx);
! XSETINT (event->y, wy);
!
! if (part == ON_MODE_LINE || part == ON_HEADER_LINE)
! {
! /* Mode line or header line. Look for a string under
! the mouse that may have a `local-map' property. */
! Lisp_Object string;
! int charpos;
!
! posn = part == ON_MODE_LINE ? Qmode_line : Qheader_line;
! string = mode_line_string (w, wx, wy, part, &charpos);
! if (STRINGP (string))
! string_info = Fcons (string, make_number (charpos));
! }
! else if (part == ON_VERTICAL_BORDER)
! posn = Qvertical_line;
! else if (part == ON_LEFT_MARGIN || part == ON_RIGHT_MARGIN)
! {
! int charpos;
! Lisp_Object object = marginal_area_string (w, wx, wy, part,
! &charpos);
! posn = (part == ON_LEFT_MARGIN) ? Qleft_margin : Qright_margin;
! if (STRINGP (object))
! string_info = Fcons (object, make_number (charpos));
! }
! else
! {
! Lisp_Object object;
! struct display_pos p;
! buffer_posn_from_coords (w, &wx, &wy, &object, &p);
! posn = make_number (CHARPOS (p.pos));
! if (STRINGP (object))
! string_info
! = Fcons (object,
! make_number (CHARPOS (p.string_pos)));
! }
! }
!
! position
! = Fcons (window,
! Fcons (posn,
! Fcons (Fcons (event->x, event->y),
! Fcons (make_number (event->timestamp),
! (NILP (string_info)
! ? Qnil
! : Fcons (string_info, Qnil))))));
!
! /* Set double or triple modifiers to indicate the wheel speed. */
! {
! /* On window-system frames, use the value of
! double-click-fuzz as is. On other frames, interpret it
! as a multiple of 1/8 characters. */
! struct frame *f;
! int fuzz;
! int is_double;
!
! if (WINDOWP (event->frame_or_window))
! f = XFRAME (XWINDOW (event->frame_or_window)->frame);
! else if (FRAMEP (event->frame_or_window))
! f = XFRAME (event->frame_or_window);
! else
! abort ();
!
! if (FRAME_WINDOW_P (f))
! fuzz = double_click_fuzz;
! else
! fuzz = double_click_fuzz / 8;
!
! is_double = (last_mouse_button < 0
! && (abs (XINT (event->x) - last_mouse_x) <= fuzz)
! && (abs (XINT (event->y) - last_mouse_y) <= fuzz)
! && button_down_time != 0
! && (EQ (Vdouble_click_time, Qt)
! || (INTEGERP (Vdouble_click_time)
! && ((int)(event->timestamp - button_down_time)
! < XINT (Vdouble_click_time)))));
! if (is_double)
! {
! double_click_count++;
! event->modifiers |= ((double_click_count > 2)
! ? triple_modifier
! : double_modifier);
! }
! else
! {
! double_click_count = 1;
! event->modifiers |= click_modifier;
! }
!
! button_down_time = event->timestamp;
! /* Use a negative value to distinguish wheel from mouse button. */
! last_mouse_button = -1;
! last_mouse_x = XINT (event->x);
! last_mouse_y = XINT (event->y);
! }
!
! {
! int symbol_num;
!
! if (event->modifiers & up_modifier)
! {
! /* Emit a wheel-up event. */
! event->modifiers &= ~up_modifier;
! symbol_num = 0;
! }
! else if (event->modifiers & down_modifier)
! {
! /* Emit a wheel-down event. */
! event->modifiers &= ~down_modifier;
! symbol_num = 1;
! }
! else
! /* Every wheel event should either have the down_modifier or
! the up_modifier set. */
! abort ();
!
! /* Get the symbol we should use for the wheel event. */
! head = modify_event_symbol (symbol_num,
! event->modifiers,
! Qmouse_click,
! Qnil,
! lispy_wheel_names,
! &wheel_syms,
! ASIZE (wheel_syms));
! }
!
! if (event->modifiers & (double_modifier | triple_modifier))
! return Fcons (head,
! Fcons (position,
! Fcons (make_number (double_click_count),
! Qnil)));
! else
! return Fcons (head,
! Fcons (position,
! Qnil));
}