Subject: Re: bug#55970: 29.0.50; Emacs crashes when dragging the scroll bar with "--with-pgtk" and "--without-toolkit-scroll-bars" configure flags

From: Eli Zaretskii <[email-masked]>
Date: Tue, 14 Jun 2022 21:30:19 +0300

> From: समीर सिंह Sameer Singh <[email-masked]>
> Date: Tue, 14 Jun 2022 23:18:42 +0530
> Cc: [email-masked]
> 
> Thread 1 "emacs" hit Breakpoint 1, terminate_due_to_signal (sig=6, backtrace_limit=40) at emacs.c:420
> 420     {
> (gdb) frame 2
> #2  0x000055555571ba26 in make_lispy_event (event=0x555555e25300 <kbd_buffer+256>) at
> keyboard.c:6140
> 6140              emacs_abort ();
> (gdb) p *event
> $1 = {
>  kind = SCROLL_BAR_CLICK_EVENT,
>  part = scroll_bar_handle,
>  code = 0,
>  modifiers = 0,
>  x = make_fixnum(17531),
>  y = make_fixnum(1244637),
>  timestamp = 0,
>  frame_or_window = XIL(0x5555560794a5),
>  arg = XIL(0),
>  device = XIL(0x30)
> }

Thanks.  I think the problem is here:

  static void
  pgtk_send_scroll_bar_event (Lisp_Object window, enum scroll_bar_part part,
			      int portion, int whole, bool horizontal)
  {
    union buffered_input_event inev;

    EVENT_INIT (inev.ie);

    inev.ie.kind = (horizontal
		    ? HORIZONTAL_SCROLL_BAR_CLICK_EVENT
		    : SCROLL_BAR_CLICK_EVENT);
    inev.ie.frame_or_window = window;
    inev.ie.arg = Qnil;
    inev.ie.timestamp = 0;
    inev.ie.code = 0;
    inev.ie.part = part;
    inev.ie.x = make_fixnum (portion);
    inev.ie.y = make_fixnum (whole);
    inev.ie.modifiers = 0;

    evq_enqueue (&inev);
  }

This sets the modifiers to zero, which causes the abort.  Instead, I
suggest to do this:

    inev.ie.modifiers =
      part == scroll_bar_end_scroll ? up_modifier : down_modifier;

Can you try this?