emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 278bacad69: Write a dummy event on each popup menu event


From: Po Lu
Subject: master 278bacad69: Write a dummy event on each popup menu event
Date: Sat, 29 Jan 2022 02:41:35 -0500 (EST)

branch: master
commit 278bacad691f4d5ba05b55c83e3e8ccd7f524e59
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    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.
---
 src/haiku_io.c       |  2 ++
 src/haiku_support.cc | 17 ++++++++++-------
 src/haiku_support.h  |  8 +++++++-
 src/haikuterm.c      |  1 +
 4 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/src/haiku_io.c b/src/haiku_io.c
index 109aca782a..185bd5e9ff 100644
--- a/src/haiku_io.c
+++ b/src/haiku_io.c
@@ -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 ();
diff --git a/src/haiku_support.cc b/src/haiku_support.cc
index 05bc410eb2..2284953517 100644
--- a/src/haiku_support.cc
+++ b/src/haiku_support.cc
@@ -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");
        }
diff --git a/src/haiku_support.h b/src/haiku_support.h
index 4b0456168d..b98fa56415 100644
--- a/src/haiku_support.h
+++ b/src/haiku_support.h
@@ -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)
diff --git a/src/haikuterm.c b/src/haikuterm.c
index 11b75fdde2..c6c92227b8 100644
--- a/src/haikuterm.c
+++ b/src/haikuterm.c
@@ -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;
        }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]