mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-26 07:33:47 +00:00
Fix grab view persisting on Haiku after popup menu closes
* src/haiku_support.cc (BasicMouseUp): Improve handling of wait_for_release_message. (be_clear_grab_view): New function. * src/haiku_support.h: Update prototypes. * src/haikumenu.c (haiku_menu_show): Call it here.
This commit is contained in:
parent
b8fdef7aa6
commit
977aed9f79
@ -1930,11 +1930,14 @@ class EmacsView : public BView
|
||||
button = (grabbed_buttons & ~buttons);
|
||||
grabbed_buttons = buttons;
|
||||
|
||||
if (!grabbed_buttons && wait_for_release_message)
|
||||
if (wait_for_release_message)
|
||||
{
|
||||
wait_for_release_message->SendReply (wait_for_release_message);
|
||||
delete wait_for_release_message;
|
||||
wait_for_release_message = NULL;
|
||||
if (!grabbed_buttons)
|
||||
{
|
||||
wait_for_release_message->SendReply (wait_for_release_message);
|
||||
delete wait_for_release_message;
|
||||
wait_for_release_message = NULL;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
@ -5457,3 +5460,17 @@ be_get_explicit_workarea (int *x, int *y, int *width, int *height)
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Clear the grab view. This has to be called manually from some
|
||||
places, since we don't get B_MOUSE_UP messages after a popup menu
|
||||
is run. */
|
||||
|
||||
void
|
||||
be_clear_grab_view (void)
|
||||
{
|
||||
if (grab_view_locker.Lock ())
|
||||
{
|
||||
grab_view = NULL;
|
||||
grab_view_locker.Unlock ();
|
||||
}
|
||||
}
|
||||
|
@ -727,6 +727,7 @@ extern void be_set_window_fullscreen_mode (void *, enum haiku_fullscreen_mode);
|
||||
extern void be_lock_window (void *);
|
||||
extern void be_unlock_window (void *);
|
||||
extern bool be_get_explicit_workarea (int *, int *, int *, int *);
|
||||
extern void be_clear_grab_view (void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
|
@ -432,6 +432,11 @@ haiku_menu_show (struct frame *f, int x, int y, int menuflags,
|
||||
|
||||
FRAME_DISPLAY_INFO (f)->grabbed = 0;
|
||||
|
||||
/* Clear the grab view manually. There is a race condition here if
|
||||
the window thread receives a button press between here and the
|
||||
end of BMenu_run. */
|
||||
be_clear_grab_view ();
|
||||
|
||||
if (menu_item_selection)
|
||||
{
|
||||
prefix = entry = Qnil;
|
||||
|
Loading…
Reference in New Issue
Block a user