Write a dummy event on each popup menu event

* src/haiku_io.c (haiku_len): Add new event.
* src/haiku_support.cc (be_popup_menu_thread_entry):
(Highlight): Write a dummy event to the event port.
* src/haiku_support.h (enum haiku_event_type): New `DUMMY_EVENT'
type.
(struct haiku_dummy_event): New structure.
* src/haikuterm.c (haiku_read_socket): Handle dummy events.
This commit is contained in:
Po Lu 2022-01-29 07:35:48 +00:00
parent c4e66bb2b5
commit 278bacad69
4 changed files with 20 additions and 8 deletions

View file

@ -94,6 +94,8 @@ haiku_len (enum haiku_event_type type)
return sizeof (struct haiku_refs_event);
case APP_QUIT_REQUESTED_EVENT:
return sizeof (struct haiku_app_quit_requested_event);
case DUMMY_EVENT:
return sizeof (struct haiku_dummy_event);
}
emacs_abort ();

View file

@ -149,6 +149,7 @@ static int32
be_popup_menu_thread_entry (void *thread_data)
{
struct be_popup_menu_data *data;
struct haiku_dummy_event dummy;
BMenuItem *it;
data = (struct be_popup_menu_data *) thread_data;
@ -160,6 +161,7 @@ be_popup_menu_thread_entry (void *thread_data)
else
popup_track_message = NULL;
haiku_write (DUMMY_EVENT, &dummy);
return 0;
}
@ -1697,6 +1699,7 @@ class EmacsMenuItem : public BMenuItem
Highlight (bool highlight_p)
{
struct haiku_menu_bar_help_event rq;
struct haiku_dummy_event dummy;
BMenu *menu = Menu ();
BRect r;
BPoint pt;
@ -1719,7 +1722,10 @@ class EmacsMenuItem : public BMenuItem
if (menu_bar_id > 0)
haiku_write (MENU_BAR_HELP_EVENT, &rq);
else
haiku_write_without_signal (MENU_BAR_HELP_EVENT, &rq, true);
{
haiku_write_without_signal (MENU_BAR_HELP_EVENT, &rq, true);
haiku_write (DUMMY_EVENT, &dummy);
}
}
}
@ -2490,16 +2496,13 @@ BMenu_run (void *menu, int x, int y,
while (true)
{
process_pending_signals_function ();
if ((stat = wait_for_objects_etc ((object_wait_info *) &infos, 2,
B_RELATIVE_TIMEOUT, 10000)) < B_OK)
{
if (stat == B_INTERRUPTED)
if (stat == B_INTERRUPTED || stat == B_TIMED_OUT)
continue;
else if (stat == B_TIMED_OUT)
{
process_pending_signals_function ();
continue;
}
else
gui_abort ("Failed to wait for popup");
}

View file

@ -86,7 +86,8 @@ enum haiku_event_type
MENU_BAR_HELP_EVENT,
ZOOM_EVENT,
REFS_EVENT,
APP_QUIT_REQUESTED_EVENT
APP_QUIT_REQUESTED_EVENT,
DUMMY_EVENT
};
struct haiku_quit_requested_event
@ -123,6 +124,11 @@ struct haiku_app_quit_requested_event
char dummy;
};
struct haiku_dummy_event
{
char dummy;
};
#define HAIKU_MODIFIER_ALT (1)
#define HAIKU_MODIFIER_CTRL (1 << 1)
#define HAIKU_MODIFIER_SHIFT (1 << 2)

View file

@ -3263,6 +3263,7 @@ haiku_read_socket (struct terminal *terminal, struct input_event *hold_quit)
}
case APP_QUIT_REQUESTED_EVENT:
case KEY_UP:
case DUMMY_EVENT:
default:
break;
}