static void
mswindows_free_scrollbar_instance (struct scrollbar_instance *sb)
{
- DestroyWindow (SCROLLBAR_MSW_HANDLE (sb));
if (sb->scrollbar_data)
- xfree (sb->scrollbar_data);
+ {
+ DestroyWindow (SCROLLBAR_MSW_HANDLE (sb));
+ xfree (sb->scrollbar_data);
+ }
}
static void
/* "0 as the second parameter" refers to the call to real_window
above. This comment was taken from Ben's 21.5 code that differs
somewhat from this, I don't think the 21.4 code ever had a 0
- there. #### we're still hitting an abort here with 0 as the
+ there. #### we're still hitting an ABORT here with 0 as the
second parameter, although only occasionally. It seems that
sometimes we receive events for scrollbars that don't exist
anymore. I assume it must happen like this: The user does
{
int hasVertBar, hasHorzBar; /* Indicates presence of scroll bars */
unsigned wheelScrollLines = 0; /* Number of lines per wheel notch */
- Lisp_Object win;
+ Lisp_Object win, corpore, sano;
struct window_mirror *mirror;
+ int mene, _mene, tekel, upharsin;
+ Bufpos mens, sana;
+ Charcount in;
+ struct window *needle_in_haystack = 0;
POINT donde_esta;
donde_esta.x = where.x;
donde_esta.y = where.y;
- ScreenToClient (FRAME_MSWINDOWS_HANDLE (XFRAME (frame)), &donde_esta);
-
/* Find the window to scroll */
- {
- int mene, _mene, tekel, upharsin;
- Bufpos mens, sana;
- Charcount in;
- Lisp_Object corpore, sano;
- struct window *needle_in_haystack;
-
- // stderr_out ("donde_esta: %d %d\n", donde_esta.x, donde_esta.y);
- pixel_to_glyph_translation (XFRAME (frame), donde_esta.x, donde_esta.y,
- &mene, &_mene, &tekel, &upharsin,
- &needle_in_haystack,
- &mens, &sana, &in, &corpore, &sano);
-
- if (needle_in_haystack)
- {
- XSETWINDOW (win, needle_in_haystack);
- // stderr_out ("found needle\n");
- // debug_print (win);
- }
- else
- {
- win = FRAME_SELECTED_WINDOW (XFRAME (frame));
- needle_in_haystack = XWINDOW (win);
- }
- mirror = find_window_mirror (needle_in_haystack);
- }
+ /* The mouse event could actually occur outside of the emacs
+ frame. */
+ if (ScreenToClient (FRAME_MSWINDOWS_HANDLE (XFRAME (frame)),
+ &donde_esta) != 0)
+ {
+ /* stderr_out ("donde_esta: %d %d\n", donde_esta.x, donde_esta.y); */
+ pixel_to_glyph_translation (XFRAME (frame), donde_esta.x, donde_esta.y,
+ &mene, &_mene, &tekel, &upharsin,
+ &needle_in_haystack,
+ &mens, &sana, &in, &corpore, &sano);
+
+ if (needle_in_haystack)
+ {
+ XSETWINDOW (win, needle_in_haystack);
+ /* stderr_out ("found needle\n");
+ debug_print (win); */
+ }
+ }
+
+ if (!needle_in_haystack)
+ {
+ win = FRAME_SELECTED_WINDOW (XFRAME (frame));
+ needle_in_haystack = XWINDOW (win);
+ }
+
+ mirror = find_window_mirror (needle_in_haystack);
/* Check that there is something to scroll */
hasVertBar = can_scroll (mirror->scrollbar_vertical_instance);