]> git.eshelyaron.com Git - emacs.git/commitdiff
Write a dummy event on each popup menu event
authorPo Lu <luangruo@yahoo.com>
Sat, 29 Jan 2022 07:35:48 +0000 (07:35 +0000)
committerPo Lu <luangruo@yahoo.com>
Sat, 29 Jan 2022 07:38:49 +0000 (07:38 +0000)
* 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.

src/haiku_io.c
src/haiku_support.cc
src/haiku_support.h
src/haikuterm.c

index 109aca782ad147d2b8885810ca1812d71cfc5ed1..185bd5e9ff2720984b8aaef1e46d776d7bfc9048 100644 (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 ();
index 05bc410eb288a15248c2b384b92ea64994081003..2284953517f6df743befd5fcdc7d89a5460aee8c 100644 (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 @@ public:
   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 @@ public:
            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");
        }
index 4b0456168d0e4956afe125faaf50241a63d55bd5..b98fa56415b701cede4e6bc40d22dc3c4826184d 100644 (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)
index 11b75fdde2575ba4f6bfb7c8de416dbebd3554a9..c6c92227b8dcea889081f1dee1f3d33b1a3bbe68 100644 (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;
        }