summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2022-01-21 15:27:35 +0800
committerPo Lu <luangruo@yahoo.com>2022-01-21 15:27:35 +0800
commit03f4a2ff640d50af11a0131498f15ebf6ed16d30 (patch)
treec529aff0851a951019a946cd67f2b265814f9e00
parent2b4f0b5f3b2e9b231b391207656df1328b13652a (diff)
parent11ea45c9e47d13e13e3e539551e2df300f995c11 (diff)
downloademacs-03f4a2ff640d50af11a0131498f15ebf6ed16d30.tar.gz
Merge from origin/emacs-28
11ea45c9e4 Fix UB in ebrowse ba57b78064 Fix execute-extended-command-for-buffer in fundamental-mode ef0c1d4c2c Add workaround to handle a problem with Enlightenment WM (...
-rw-r--r--etc/PROBLEMS7
-rw-r--r--lib-src/ebrowse.c10
-rw-r--r--lisp/simple.el4
-rw-r--r--src/xterm.c68
4 files changed, 66 insertions, 23 deletions
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index 9040c492563..2358203c3d3 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -1304,6 +1304,13 @@ and then Alt-F7). A bug for it is here:
https://bugs.launchpad.net/ubuntu/+source/metacity/+bug/231034.
Note that a permanent fix seems to be to disable "assistive technologies".
+*** Enlightenment: Frames not redrawn after switching virtual desktops
+
+With Enlightenment version 0.25, Emacs frames may no be redrawn orderly
+after switching back from another virtual desktop. Setting the variable
+'x-set-frame-visibility-more-laxly' to one of 'focus-in', 'expose' or
+'t' should fix this.
+
*** Gnome: Emacs receives input directly from the keyboard, bypassing XIM.
This seems to happen when gnome-settings-daemon version 2.12 or later
diff --git a/lib-src/ebrowse.c b/lib-src/ebrowse.c
index 04ae018464e..ac7e7901878 100644
--- a/lib-src/ebrowse.c
+++ b/lib-src/ebrowse.c
@@ -1925,7 +1925,15 @@ matching_regexp (void)
*--s = *--t;
if (*s == '"' || *s == '\\')
- *--s = '\\';
+ {
+ if (s > matching_regexp_buffer)
+ *--s = '\\';
+ else
+ {
+ s++;
+ break;
+ }
+ }
}
*(matching_regexp_end_buf - 1) = '\0';
diff --git a/lisp/simple.el b/lisp/simple.el
index dcc385c7ec6..801a3c992c8 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -2306,8 +2306,8 @@ maps."
(let* ((execute-extended-command--last-typed nil)
(keymaps
;; The major mode's keymap and any active minor modes.
- (cons
- (current-local-map)
+ (nconc
+ (and (current-local-map) (list (current-local-map)))
(mapcar
#'cdr
(seq-filter
diff --git a/src/xterm.c b/src/xterm.c
index 1cbea12b3db..244b11e0f75 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -9026,12 +9026,17 @@ handle_one_xevent (struct x_display_info *dpyinfo,
if (!FRAME_VISIBLE_P (f))
{
block_input ();
- /* The following two are commented out to avoid that a
- plain invisible frame gets reported as iconified. That
- problem occurred first for Emacs 26 and is described in
- https://lists.gnu.org/archive/html/emacs-devel/2017-02/msg00133.html. */
-/** SET_FRAME_VISIBLE (f, 1); **/
-/** SET_FRAME_ICONIFIED (f, false); **/
+ /* By default, do not set the frame's visibility here, see
+ https://lists.gnu.org/archive/html/emacs-devel/2017-02/msg00133.html.
+ The default behavior can be overridden by setting
+ 'x-set-frame-visibility-more-laxly' (Bug#49955,
+ Bug#53298). */
+ if (EQ (x_set_frame_visibility_more_laxly, Qexpose)
+ || EQ (x_set_frame_visibility_more_laxly, Qt))
+ {
+ SET_FRAME_VISIBLE (f, 1);
+ SET_FRAME_ICONIFIED (f, false);
+ }
if (FRAME_X_DOUBLE_BUFFERED_P (f))
font_drop_xrender_surfaces (f);
@@ -9650,26 +9655,33 @@ handle_one_xevent (struct x_display_info *dpyinfo,
goto OTHER;
case FocusIn:
-#ifndef USE_GTK
+#ifdef USE_GTK
/* Some WMs (e.g. Mutter in Gnome Shell), don't unmap
minimized/iconified windows; thus, for those WMs we won't get
- a MapNotify when unminimizing/deconifying. Check here if we
+ a MapNotify when unminimizing/deiconifying. Check here if we
are deiconizing a window (Bug42655).
- But don't do that on GTK since it may cause a plain invisible
- frame get reported as iconified, compare
+ But don't do that by default on GTK since it may cause a plain
+ invisible frame get reported as iconified, compare
https://lists.gnu.org/archive/html/emacs-devel/2017-02/msg00133.html.
- That is fixed above but bites us here again. */
- f = any;
- if (f && FRAME_ICONIFIED_P (f))
- {
- SET_FRAME_VISIBLE (f, 1);
- SET_FRAME_ICONIFIED (f, false);
- f->output_data.x->has_been_visible = true;
- inev.ie.kind = DEICONIFY_EVENT;
- XSETFRAME (inev.ie.frame_or_window, f);
- }
+ That is fixed above but bites us here again.
+
+ The option x_set_frame_visibility_more_laxly allows to override
+ the default behavior (Bug#49955, Bug#53298). */
+ if (EQ (x_set_frame_visibility_more_laxly, Qfocus_in)
+ || EQ (x_set_frame_visibility_more_laxly, Qt))
#endif /* USE_GTK */
+ {
+ f = any;
+ if (f && FRAME_ICONIFIED_P (f))
+ {
+ SET_FRAME_VISIBLE (f, 1);
+ SET_FRAME_ICONIFIED (f, false);
+ f->output_data.x->has_been_visible = true;
+ inev.ie.kind = DEICONIFY_EVENT;
+ XSETFRAME (inev.ie.frame_or_window, f);
+ }
+ }
x_detect_focus_change (dpyinfo, any, event, &inev.ie);
goto OTHER;
@@ -16258,6 +16270,7 @@ always uses gtk_window_move and ignores the value of this variable. */);
This option is only effective when Emacs is built with XInput 2
support. */);
Vx_scroll_event_delta_factor = make_float (1.0);
+ DEFSYM (Qexpose, "expose");
DEFVAR_BOOL ("x-gtk-use-native-input", x_gtk_use_native_input,
doc: /* Non-nil means to use GTK for input method support.
@@ -16265,6 +16278,21 @@ This provides better support for some modern input methods, and is
only effective when Emacs is built with GTK. */);
x_gtk_use_native_input = false;
+ DEFVAR_LISP ("x-set-frame-visibility-more-laxly",
+ x_set_frame_visibility_more_laxly,
+ doc: /* Non-nil means set frame visibility more laxly.
+If this is nil, Emacs is more strict when marking a frame as visible.
+Since this may cause problems on some window managers, this variable can
+be also set as follows: The value `focus-in' means to mark a frame as
+visible also when a FocusIn event is received for it on GTK builds. The
+value `expose' means to mark a frame as visible also when an Expose
+event is received for it on any X build. The value `t' means to mark a
+frame as visible in either of these two cases.
+
+Note that any non-nil setting may cause invisible frames get erroneously
+reported as iconified. */);
+ x_set_frame_visibility_more_laxly = Qnil;
+
DEFVAR_BOOL ("x-input-grab-touch-events", x_input_grab_touch_events,
doc: /* Non-nil means to actively grab touch events.
This means touch sequences that started on an Emacs frame will