From: Eli Zaretskii Date: Fri, 18 Oct 2013 13:33:25 +0000 (+0300) Subject: Fix clicks on the menu bar when GPM mouse is in use. X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~1220 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=c4e3099ff42a0c9d888d5cc36eed202f5c076738;p=emacs.git Fix clicks on the menu bar when GPM mouse is in use. src/keyboard.c (make_lispy_event): Remove GPM-specific code that handles mouse clicks. Instead, let GPM use the same code as all the other mice use. See the discussion starting at http://lists.gnu.org/archive/html/emacs-devel/2013-10/msg00521.html for the details of the problem with the menu bar this fixes. --- diff --git a/src/ChangeLog b/src/ChangeLog index 53b9188dba9..b973b5b8d04 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2013-10-18 Eli Zaretskii + + * keyboard.c (make_lispy_event): Remove GPM-specific code that + handles mouse clicks. Instead, let GPM use the same code as all + the other mice use. See the discussion starting at + http://lists.gnu.org/archive/html/emacs-devel/2013-10/msg00521.html + for the details of the problem with the menu bar this fixes. + 2013-10-18 Dmitry Antipov Remove port-specific display name lists to avoid extra diff --git a/src/keyboard.c b/src/keyboard.c index 6b39dfe1019..0ff4cda034a 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -5547,6 +5547,9 @@ make_lispy_event (struct input_event *event) /* A mouse click. Figure out where it is, decide whether it's a press, click or drag, and build the appropriate structure. */ case MOUSE_CLICK_EVENT: +#ifdef HAVE_GPM + case GPM_CLICK_EVENT: +#endif #ifndef USE_TOOLKIT_SCROLL_BARS case SCROLL_BAR_CLICK_EVENT: #endif @@ -5560,7 +5563,11 @@ make_lispy_event (struct input_event *event) position = Qnil; /* Build the position as appropriate for this mouse click. */ - if (event->kind == MOUSE_CLICK_EVENT) + if (event->kind == MOUSE_CLICK_EVENT +#ifdef HAVE_GPM + || event->kind == GPM_CLICK_EVENT +#endif + ) { struct frame *f = XFRAME (event->frame_or_window); int row, column; @@ -6025,55 +6032,6 @@ make_lispy_event (struct input_event *event) case CONFIG_CHANGED_EVENT: return list3 (Qconfig_changed_event, event->arg, event->frame_or_window); -#ifdef HAVE_GPM - case GPM_CLICK_EVENT: - { - struct frame *f = XFRAME (event->frame_or_window); - Lisp_Object head, position; - Lisp_Object *start_pos_ptr; - Lisp_Object start_pos; - int button = event->code; - - if (button >= ASIZE (button_down_location)) - { - ptrdiff_t incr = button - ASIZE (button_down_location) + 1; - button_down_location = larger_vector (button_down_location, - incr, -1); - mouse_syms = larger_vector (mouse_syms, incr, -1); - } - - start_pos_ptr = aref_addr (button_down_location, button); - start_pos = *start_pos_ptr; - - position = make_lispy_position (f, event->x, event->y, - event->timestamp); - - if (event->modifiers & down_modifier) - *start_pos_ptr = Fcopy_alist (position); - else if (event->modifiers & (up_modifier | drag_modifier)) - { - if (!CONSP (start_pos)) - return Qnil; - event->modifiers &= ~up_modifier; - } - - head = modify_event_symbol (button, - event->modifiers, - Qmouse_click, Vlispy_mouse_stem, - NULL, - &mouse_syms, - ASIZE (mouse_syms)); - - if (event->modifiers & drag_modifier) - return list3 (head, start_pos, position); - else if (event->modifiers & double_modifier) - return list3 (head, position, make_number (2)); - else if (event->modifiers & triple_modifier) - return list3 (head, position, make_number (3)); - else - return list2 (head, position); - } -#endif /* HAVE_GPM */ /* The 'kind' field of the event is something we don't recognize. */ default: