aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPo Lu2022-03-07 21:36:25 +0800
committerPo Lu2022-03-07 21:36:25 +0800
commit418e5da5d308b4e440f28545eb139211066b48a4 (patch)
tree6061adb42a47040a10f8d36854f6e924c4202ac6 /src
parent8a7df412a640c8b2334b78ec0ca872a6d11e8b0e (diff)
downloademacs-418e5da5d308b4e440f28545eb139211066b48a4.tar.gz
emacs-418e5da5d308b4e440f28545eb139211066b48a4.zip
Correctly handle exposure in oldXMenu
* oldXMenu/Activate.c (XMenuActivate): Call set expose_func if no pane was found. (XMenuActivateSetExposeFunction): New function. * oldXMenu/XMenu.h: New typedef `expose_func'. Update prototypes. * src/xmenu.c (x_menu_expose_event): New function. (x_menu_show): Set expose event handler. * src/xterm.c (x_dispatch_event): Make `static' only on GTK. * src/xterm.h: Expose `x_dispatch_event' on no-toolkit builds.
Diffstat (limited to 'src')
-rw-r--r--src/xmenu.c9
-rw-r--r--src/xterm.c8
-rw-r--r--src/xterm.h2
3 files changed, 15 insertions, 4 deletions
diff --git a/src/xmenu.c b/src/xmenu.c
index e085fa1ace5..4d0e5bd81c2 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -280,6 +280,14 @@ x_menu_translate_generic_event (XEvent *event)
280 } 280 }
281} 281}
282#endif 282#endif
283
284#if !defined USE_X_TOOLKIT && !defined USE_GTK
285static void
286x_menu_expose_event (XEvent *event)
287{
288 x_dispatch_event (event, event->xexpose.display);
289}
290#endif
283#endif /* ! MSDOS */ 291#endif /* ! MSDOS */
284 292
285 293
@@ -2638,6 +2646,7 @@ x_menu_show (struct frame *f, int x, int y, int menuflags,
2638#ifdef HAVE_XINPUT2 2646#ifdef HAVE_XINPUT2
2639 XMenuActivateSetTranslateFunction (x_menu_translate_generic_event); 2647 XMenuActivateSetTranslateFunction (x_menu_translate_generic_event);
2640#endif 2648#endif
2649 XMenuActivateSetExposeFunction (x_menu_expose_event);
2641#endif 2650#endif
2642 2651
2643 record_unwind_protect_ptr (pop_down_menu, 2652 record_unwind_protect_ptr (pop_down_menu,
diff --git a/src/xterm.c b/src/xterm.c
index 6682d3c9a46..60cd57b8512 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -13520,14 +13520,17 @@ handle_one_xevent (struct x_display_info *dpyinfo,
13520 return count; 13520 return count;
13521} 13521}
13522 13522
13523#if defined USE_X_TOOLKIT || defined USE_MOTIF || defined USE_GTK
13524
13525/* Handles the XEvent EVENT on display DISPLAY. 13523/* Handles the XEvent EVENT on display DISPLAY.
13526 This is used for event loops outside the normal event handling, 13524 This is used for event loops outside the normal event handling,
13527 i.e. looping while a popup menu or a dialog is posted. 13525 i.e. looping while a popup menu or a dialog is posted.
13528 13526
13529 Returns the value handle_one_xevent sets in the finish argument. */ 13527 Returns the value handle_one_xevent sets in the finish argument. */
13528
13529#ifdef USE_GTK
13530static int
13531#else
13530int 13532int
13533#endif
13531x_dispatch_event (XEvent *event, Display *display) 13534x_dispatch_event (XEvent *event, Display *display)
13532{ 13535{
13533 struct x_display_info *dpyinfo; 13536 struct x_display_info *dpyinfo;
@@ -13540,7 +13543,6 @@ x_dispatch_event (XEvent *event, Display *display)
13540 13543
13541 return finish; 13544 return finish;
13542} 13545}
13543#endif
13544 13546
13545/* Read events coming from the X server. 13547/* Read events coming from the X server.
13546 Return as soon as there are no more events to be read. 13548 Return as soon as there are no more events to be read.
diff --git a/src/xterm.h b/src/xterm.h
index 846df03277c..88949b30391 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -1320,7 +1320,7 @@ extern void x_clear_area (struct frame *f, int, int, int, int);
1320extern void x_mouse_leave (struct x_display_info *); 1320extern void x_mouse_leave (struct x_display_info *);
1321#endif 1321#endif
1322 1322
1323#if defined USE_X_TOOLKIT || defined USE_MOTIF 1323#ifndef USE_GTK
1324extern int x_dispatch_event (XEvent *, Display *); 1324extern int x_dispatch_event (XEvent *, Display *);
1325#endif 1325#endif
1326extern int x_x_to_emacs_modifiers (struct x_display_info *, int); 1326extern int x_x_to_emacs_modifiers (struct x_display_info *, int);