X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fscrollbar-msw.c;h=b6ac215f50631b54d00f1874c2b1046f37e9b96a;hb=57eecac7a5bb6c31460e67c4b63425974db96a68;hp=2d7e9a921ebb24ed6f7ea6b1e3130a63c062c158;hpb=76143592836b20b1feceeebb355259dfc9e93dea;p=chise%2Fxemacs-chise.git- diff --git a/src/scrollbar-msw.c b/src/scrollbar-msw.c index 2d7e9a9..b6ac215 100644 --- a/src/scrollbar-msw.c +++ b/src/scrollbar-msw.c @@ -41,6 +41,7 @@ Boston, MA 02111-1307, USA. */ #define VERTICAL_SCROLLBAR_DRAG_HACK static int vertical_drag_in_progress = 0; +extern Lisp_Object mswindows_find_frame (HWND hwnd); static void mswindows_create_scrollbar_instance (struct frame *f, int vertical, @@ -203,23 +204,36 @@ mswindows_handle_scrollbar_event (HWND hwnd, int code, int pos) } sb = (struct scrollbar_instance *)GetWindowLong (hwnd, GWL_USERDATA); - win = real_window ((sb==NULL) ? GetFocus() : sb->mirror, 1); - /* "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 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 something that causes a - scrollbar to disappear (e.g. Alt-TAB, causing recomputation of - everything in the new frame) and then immediately uses the mouse - wheel, generating scrollbar events. Both events get posted before - we have a chance to process them, and in processing the first, the - scrollbar mentioned in the second disappears. */ - if (NILP (win)) - return; - frame = XWINDOW (win)->frame; - f = XFRAME (frame); + if (sb != NULL) + { + win = real_window (sb->mirror, 1); + /* "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 + 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 + something that causes a scrollbar to disappear (e.g. Alt-TAB, + causing recomputation of everything in the new frame) and then + immediately uses the mouse wheel, generating scrollbar events. + Both events get posted before we have a chance to process them, + and in processing the first, the scrollbar mentioned in the + second disappears. */ + if (NILP (win)) + return; + frame = XWINDOW (win)->frame; + f = XFRAME (frame); + } + else + { + /* I'm not sure if this is right, but its much better than + passing an HNWD to real_window() - which is what the previous + code did -- andyp */ + frame = mswindows_find_frame (GetFocus()); + f = XFRAME (frame); + win = FRAME_SELECTED_WINDOW (f); + } /* SB_LINEDOWN == SB_CHARLEFT etc. This is the way they will always be - any Windows is binary compatible backward with