aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorYuuki Harano2021-05-05 19:00:37 +0900
committerYuuki Harano2021-05-05 19:00:37 +0900
commit5b97b98daa7f61311c3662beecbeca7037505992 (patch)
treefc86c0a5fd61fdbd97451eae10ff081f2293eb86 /src
parent704b765eaaee82176e26ab084c26d65311fd46d3 (diff)
parent58b0bcd16df83d914fe4d538e6be88cac9574906 (diff)
downloademacs-5b97b98daa7f61311c3662beecbeca7037505992.tar.gz
emacs-5b97b98daa7f61311c3662beecbeca7037505992.zip
Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs into feature/pgtk
Diffstat (limited to 'src')
-rw-r--r--src/buffer.c9
-rw-r--r--src/callproc.c13
-rw-r--r--src/gtkutil.c2
-rw-r--r--src/indent.c5
-rw-r--r--src/nsterm.m36
-rw-r--r--src/verbose.mk.in2
-rw-r--r--src/xfns.c9
-rw-r--r--src/xterm.c86
8 files changed, 108 insertions, 54 deletions
diff --git a/src/buffer.c b/src/buffer.c
index 9e417bf555c..df302db0e52 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -5673,9 +5673,12 @@ Linefeed indents to this column in Fundamental mode. */);
5673 DEFVAR_PER_BUFFER ("tab-width", &BVAR (current_buffer, tab_width), 5673 DEFVAR_PER_BUFFER ("tab-width", &BVAR (current_buffer, tab_width),
5674 Qintegerp, 5674 Qintegerp,
5675 doc: /* Distance between tab stops (for display of tab characters), in columns. 5675 doc: /* Distance between tab stops (for display of tab characters), in columns.
5676NOTE: This controls the display width of a TAB character, and not 5676This controls the width of a TAB character on display.
5677the size of an indentation step. 5677The value should be a positive integer.
5678This should be an integer greater than zero. */); 5678Note that this variable doesn't necessarily affect the size of the
5679indentation step. However, if the major mode's indentation facility
5680inserts one or more TAB characters, this variable will affect the
5681indentation step as well, even if `indent-tabs-mode' is non-nil. */);
5679 5682
5680 DEFVAR_PER_BUFFER ("ctl-arrow", &BVAR (current_buffer, ctl_arrow), Qnil, 5683 DEFVAR_PER_BUFFER ("ctl-arrow", &BVAR (current_buffer, ctl_arrow), Qnil,
5681 doc: /* Non-nil means display control chars with uparrow. 5684 doc: /* Non-nil means display control chars with uparrow.
diff --git a/src/callproc.c b/src/callproc.c
index 5aa2cbafb4c..e44e243680d 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -276,6 +276,9 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) *
276 else 276 else
277 infile = build_string (NULL_DEVICE); 277 infile = build_string (NULL_DEVICE);
278 278
279 /* Remove "/:" from INFILE. */
280 infile = remove_slash_colon (infile);
281
279 encoded_infile = ENCODE_FILE (infile); 282 encoded_infile = ENCODE_FILE (infile);
280 283
281 filefd = emacs_open (SSDATA (encoded_infile), O_RDONLY, 0); 284 filefd = emacs_open (SSDATA (encoded_infile), O_RDONLY, 0);
@@ -439,9 +442,15 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int filefd,
439 current_dir = encode_current_directory (); 442 current_dir = encode_current_directory ();
440 443
441 if (STRINGP (error_file)) 444 if (STRINGP (error_file))
442 error_file = ENCODE_FILE (error_file); 445 {
446 error_file = remove_slash_colon (error_file);
447 error_file = ENCODE_FILE (error_file);
448 }
443 if (STRINGP (output_file)) 449 if (STRINGP (output_file))
444 output_file = ENCODE_FILE (output_file); 450 {
451 output_file = remove_slash_colon (output_file);
452 output_file = ENCODE_FILE (output_file);
453 }
445 454
446 display_p = INTERACTIVE && nargs >= 4 && !NILP (args[3]); 455 display_p = INTERACTIVE && nargs >= 4 && !NILP (args[3]);
447 456
diff --git a/src/gtkutil.c b/src/gtkutil.c
index 81033b2b12b..7760c8ed0a2 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -93,8 +93,6 @@ typedef struct pgtk_output xp_output;
93 gtk_font_selection_dialog_set_font_name (x, y) 93 gtk_font_selection_dialog_set_font_name (x, y)
94#endif 94#endif
95 95
96#define gdk_window_get_geometry(w, a, b, c, d) \
97 gdk_window_get_geometry (w, a, b, c, d, 0)
98#define gtk_box_new(ori, spacing) \ 96#define gtk_box_new(ori, spacing) \
99 ((ori) == GTK_ORIENTATION_HORIZONTAL \ 97 ((ori) == GTK_ORIENTATION_HORIZONTAL \
100 ? gtk_hbox_new (FALSE, (spacing)) : gtk_vbox_new (FALSE, (spacing))) 98 ? gtk_hbox_new (FALSE, (spacing)) : gtk_vbox_new (FALSE, (spacing)))
diff --git a/src/indent.c b/src/indent.c
index 6246b544fbd..de6b4895616 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -1967,9 +1967,13 @@ line_number_display_width (struct window *w, int *width, int *pixel_width)
1967 struct it it; 1967 struct it it;
1968 struct text_pos startpos; 1968 struct text_pos startpos;
1969 bool saved_restriction = false; 1969 bool saved_restriction = false;
1970 struct buffer *old_buf = current_buffer;
1970 ptrdiff_t count = SPECPDL_INDEX (); 1971 ptrdiff_t count = SPECPDL_INDEX ();
1971 SET_TEXT_POS_FROM_MARKER (startpos, w->start); 1972 SET_TEXT_POS_FROM_MARKER (startpos, w->start);
1972 void *itdata = bidi_shelve_cache (); 1973 void *itdata = bidi_shelve_cache ();
1974
1975 /* Make sure W's buffer is the current one. */
1976 set_buffer_internal_1 (XBUFFER (w->contents));
1973 /* We want to start from window's start point, but it could be 1977 /* We want to start from window's start point, but it could be
1974 outside the accessible region, in which case we widen the 1978 outside the accessible region, in which case we widen the
1975 buffer temporarily. It could even be beyond the buffer's end 1979 buffer temporarily. It could even be beyond the buffer's end
@@ -1998,6 +2002,7 @@ line_number_display_width (struct window *w, int *width, int *pixel_width)
1998 *pixel_width = it.lnum_pixel_width; 2002 *pixel_width = it.lnum_pixel_width;
1999 if (saved_restriction) 2003 if (saved_restriction)
2000 unbind_to (count, Qnil); 2004 unbind_to (count, Qnil);
2005 set_buffer_internal_1 (old_buf);
2001 bidi_unshelve_cache (itdata, 0); 2006 bidi_unshelve_cache (itdata, 0);
2002 } 2007 }
2003} 2008}
diff --git a/src/nsterm.m b/src/nsterm.m
index 6e7ab1266ba..bb20886ab1d 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -7303,16 +7303,34 @@ not_in_argv (NSString *arg)
7303 7303
7304 NSTRACE ("[EmacsView viewDidResize]"); 7304 NSTRACE ("[EmacsView viewDidResize]");
7305 7305
7306#ifdef NS_DRAW_TO_BUFFER
7307 /* If the buffer size doesn't match the view's backing size, destroy
7308 the buffer and let it be recreated at the correct size later. */
7309 if ([self wantsUpdateLayer] && surface)
7310 {
7311 NSRect surfaceRect = {{0, 0}, [surface getSize]};
7312 NSRect frameRect = [[self window] convertRectToBacking:frame];
7313
7314 if (!NSEqualRects (frameRect, surfaceRect))
7315 {
7316 [surface release];
7317 surface = nil;
7318
7319 [self setNeedsDisplay:YES];
7320 }
7321 }
7322#endif
7323
7306 neww = (int)NSWidth (frame); 7324 neww = (int)NSWidth (frame);
7307 newh = (int)NSHeight (frame); 7325 newh = (int)NSHeight (frame);
7308 oldw = FRAME_PIXEL_WIDTH (emacsframe); 7326 oldw = FRAME_PIXEL_WIDTH (emacsframe);
7309 oldh = FRAME_PIXEL_HEIGHT (emacsframe); 7327 oldh = FRAME_PIXEL_HEIGHT (emacsframe);
7310 7328
7311 /* Don't want to do anything when the view size hasn't changed. */ 7329 /* Don't want to do anything when the view size hasn't changed. */
7312 if ((oldh == newh && oldw == neww) 7330 if (emacsframe->new_size_p
7313 || (emacsframe->new_size_p 7331 ? (newh == emacsframe->new_height
7314 && newh == emacsframe->new_height 7332 && neww == emacsframe->new_width)
7315 && neww == emacsframe->new_width)) 7333 : (oldh == newh && oldw == neww))
7316 { 7334 {
7317 NSTRACE_MSG ("No change"); 7335 NSTRACE_MSG ("No change");
7318 return; 7336 return;
@@ -7321,16 +7339,6 @@ not_in_argv (NSString *arg)
7321 NSTRACE_SIZE ("New size", NSMakeSize (neww, newh)); 7339 NSTRACE_SIZE ("New size", NSMakeSize (neww, newh));
7322 NSTRACE_SIZE ("Original size", NSMakeSize (oldw, oldh)); 7340 NSTRACE_SIZE ("Original size", NSMakeSize (oldw, oldh));
7323 7341
7324#ifdef NS_DRAW_TO_BUFFER
7325 if ([self wantsUpdateLayer])
7326 {
7327 [surface release];
7328 surface = nil;
7329
7330 [self setNeedsDisplay:YES];
7331 }
7332#endif
7333
7334 change_frame_size (emacsframe, neww, newh, false, YES, false); 7342 change_frame_size (emacsframe, neww, newh, false, YES, false);
7335 7343
7336 SET_FRAME_GARBAGED (emacsframe); 7344 SET_FRAME_GARBAGED (emacsframe);
diff --git a/src/verbose.mk.in b/src/verbose.mk.in
index 085a05a2fa6..50d6ea32000 100644
--- a/src/verbose.mk.in
+++ b/src/verbose.mk.in
@@ -38,7 +38,7 @@ ifeq ($(HAVE_NATIVE_COMP),yes)
38ifeq ($(NATIVE_DISABLED),1) 38ifeq ($(NATIVE_DISABLED),1)
39AM_V_ELC = @echo " ELC " $@; 39AM_V_ELC = @echo " ELC " $@;
40else 40else
41AM_V_ELC = @echo " ELC+ELN " $@; 41AM_V_ELC = @echo " ELC+ELN " $@;
42endif 42endif
43else 43else
44AM_V_ELC = @echo " ELC " $@; 44AM_V_ELC = @echo " ELC " $@;
diff --git a/src/xfns.c b/src/xfns.c
index 2c95065d3ea..782e0a483c4 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -1608,13 +1608,15 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
1608 1608
1609/* Set the number of lines used for the tab bar of frame F to VALUE. 1609/* Set the number of lines used for the tab bar of frame F to VALUE.
1610 VALUE not an integer, or < 0 means set the lines to zero. OLDVAL 1610 VALUE not an integer, or < 0 means set the lines to zero. OLDVAL
1611 is the old number of tab bar lines. This function changes the 1611 is the old number of tab bar lines. This function may change the
1612 height of all windows on frame F to match the new tab bar height. 1612 height of all windows on frame F to match the new tab bar height.
1613 The frame's height doesn't change. */ 1613 The frame's height may change if frame_inhibit_implied_resize was
1614 set accordingly. */
1614 1615
1615static void 1616static void
1616x_set_tab_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) 1617x_set_tab_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
1617{ 1618{
1619 int olines = FRAME_TAB_BAR_LINES (f);
1618 int nlines; 1620 int nlines;
1619 1621
1620 /* Treat tab bars like menu bars. */ 1622 /* Treat tab bars like menu bars. */
@@ -1627,7 +1629,8 @@ x_set_tab_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
1627 else 1629 else
1628 nlines = 0; 1630 nlines = 0;
1629 1631
1630 x_change_tab_bar_height (f, nlines * FRAME_LINE_HEIGHT (f)); 1632 if (nlines != olines && (olines == 0 || nlines == 0))
1633 x_change_tab_bar_height (f, nlines * FRAME_LINE_HEIGHT (f));
1631} 1634}
1632 1635
1633 1636
diff --git a/src/xterm.c b/src/xterm.c
index 189e3a47eea..9edaed9a34b 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -8178,6 +8178,12 @@ handle_one_xevent (struct x_display_info *dpyinfo,
8178 8178
8179 f->output_data.x->has_been_visible = true; 8179 f->output_data.x->has_been_visible = true;
8180 inev.ie.kind = DEICONIFY_EVENT; 8180 inev.ie.kind = DEICONIFY_EVENT;
8181#if defined USE_GTK && defined HAVE_GTK3
8182 /* If GTK3 wants to impose some old size here (Bug#24526),
8183 tell it that the current size is what we want. */
8184 xg_frame_set_char_size
8185 (f, FRAME_PIXEL_WIDTH (f), FRAME_PIXEL_HEIGHT (f));
8186#endif
8181 XSETFRAME (inev.ie.frame_or_window, f); 8187 XSETFRAME (inev.ie.frame_or_window, f);
8182 } 8188 }
8183 else if (!not_hidden && !FRAME_ICONIFIED_P (f)) 8189 else if (!not_hidden && !FRAME_ICONIFIED_P (f))
@@ -8232,33 +8238,36 @@ handle_one_xevent (struct x_display_info *dpyinfo,
8232 if (!FRAME_VISIBLE_P (f)) 8238 if (!FRAME_VISIBLE_P (f))
8233 { 8239 {
8234 block_input (); 8240 block_input ();
8235 SET_FRAME_VISIBLE (f, 1); 8241 /* The following two are commented out to avoid that a
8236 SET_FRAME_ICONIFIED (f, false); 8242 plain invisible frame gets reported as iconified. That
8237 if (FRAME_X_DOUBLE_BUFFERED_P (f)) 8243 problem occurred first for Emacs 26 and is described in
8244 https://lists.gnu.org/archive/html/emacs-devel/2017-02/msg00133.html. */
8245/** SET_FRAME_VISIBLE (f, 1); **/
8246/** SET_FRAME_ICONIFIED (f, false); **/
8247
8248 if (FRAME_X_DOUBLE_BUFFERED_P (f))
8238 font_drop_xrender_surfaces (f); 8249 font_drop_xrender_surfaces (f);
8239 f->output_data.x->has_been_visible = true; 8250 f->output_data.x->has_been_visible = true;
8240 SET_FRAME_GARBAGED (f); 8251 SET_FRAME_GARBAGED (f);
8241 unblock_input (); 8252 unblock_input ();
8242 } 8253 }
8243 else if (FRAME_GARBAGED_P (f)) 8254 else if (FRAME_GARBAGED_P (f))
8244 { 8255 {
8245#ifdef USE_GTK 8256#ifdef USE_GTK
8246 /* Go around the back buffer and manually clear the 8257 /* Go around the back buffer and manually clear the
8247 window the first time we show it. This way, we avoid 8258 window the first time we show it. This way, we avoid
8248 showing users the sanity-defying horror of whatever 8259 showing users the sanity-defying horror of whatever
8249 GtkWindow is rendering beneath us. We've garbaged 8260 GtkWindow is rendering beneath us. We've garbaged
8250 the frame, so we'll redraw the whole thing on next 8261 the frame, so we'll redraw the whole thing on next
8251 redisplay anyway. Yuck. */ 8262 redisplay anyway. Yuck. */
8252 x_clear_area1 ( 8263 x_clear_area1 (FRAME_X_DISPLAY (f),
8253 FRAME_X_DISPLAY (f), 8264 FRAME_X_WINDOW (f),
8254 FRAME_X_WINDOW (f), 8265 event->xexpose.x, event->xexpose.y,
8255 event->xexpose.x, event->xexpose.y, 8266 event->xexpose.width, event->xexpose.height,
8256 event->xexpose.width, event->xexpose.height, 8267 0);
8257 0);
8258 x_clear_under_internal_border (f); 8268 x_clear_under_internal_border (f);
8259#endif 8269#endif
8260 } 8270 }
8261
8262 8271
8263 if (!FRAME_GARBAGED_P (f)) 8272 if (!FRAME_GARBAGED_P (f))
8264 { 8273 {
@@ -8351,7 +8360,8 @@ handle_one_xevent (struct x_display_info *dpyinfo,
8351 the frame was deleted. */ 8360 the frame was deleted. */
8352 { 8361 {
8353 bool visible = FRAME_VISIBLE_P (f); 8362 bool visible = FRAME_VISIBLE_P (f);
8354 /* While a frame is unmapped, display generation is 8363
8364 /* While a frame is unmapped, display generation is
8355 disabled; you don't want to spend time updating a 8365 disabled; you don't want to spend time updating a
8356 display that won't ever be seen. */ 8366 display that won't ever be seen. */
8357 SET_FRAME_VISIBLE (f, 0); 8367 SET_FRAME_VISIBLE (f, 0);
@@ -8426,11 +8436,20 @@ handle_one_xevent (struct x_display_info *dpyinfo,
8426 x_set_z_group (f, Qbelow, Qnil); 8436 x_set_z_group (f, Qbelow, Qnil);
8427 } 8437 }
8428 8438
8429 SET_FRAME_VISIBLE (f, 1); 8439 if (not_hidden)
8430 SET_FRAME_ICONIFIED (f, false); 8440 {
8431 f->output_data.x->has_been_visible = true; 8441 SET_FRAME_VISIBLE (f, 1);
8442 SET_FRAME_ICONIFIED (f, false);
8443#if defined USE_GTK && defined HAVE_GTK3
8444 /* If GTK3 wants to impose some old size here (Bug#24526),
8445 tell it that the current size is what we want. */
8446 xg_frame_set_char_size
8447 (f, FRAME_PIXEL_WIDTH (f), FRAME_PIXEL_HEIGHT (f));
8448#endif
8449 f->output_data.x->has_been_visible = true;
8450 }
8432 8451
8433 if (iconified) 8452 if (not_hidden && iconified)
8434 { 8453 {
8435 inev.ie.kind = DEICONIFY_EVENT; 8454 inev.ie.kind = DEICONIFY_EVENT;
8436 XSETFRAME (inev.ie.frame_or_window, f); 8455 XSETFRAME (inev.ie.frame_or_window, f);
@@ -8808,10 +8827,16 @@ handle_one_xevent (struct x_display_info *dpyinfo,
8808 goto OTHER; 8827 goto OTHER;
8809 8828
8810 case FocusIn: 8829 case FocusIn:
8830#ifndef USE_GTK
8811 /* Some WMs (e.g. Mutter in Gnome Shell), don't unmap 8831 /* Some WMs (e.g. Mutter in Gnome Shell), don't unmap
8812 minimized/iconified windows; thus, for those WMs we won't get 8832 minimized/iconified windows; thus, for those WMs we won't get
8813 a MapNotify when unminimizing/deconifying. Check here if we 8833 a MapNotify when unminimizing/deconifying. Check here if we
8814 are deconizing a window (Bug42655). */ 8834 are deiconizing a window (Bug42655).
8835
8836 But don't do that on GTK since it may cause a plain invisible
8837 frame get reported as iconified, compare
8838 https://lists.gnu.org/archive/html/emacs-devel/2017-02/msg00133.html.
8839 That is fixed above but bites us here again. */
8815 f = any; 8840 f = any;
8816 if (f && FRAME_ICONIFIED_P (f)) 8841 if (f && FRAME_ICONIFIED_P (f))
8817 { 8842 {
@@ -8821,6 +8846,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
8821 inev.ie.kind = DEICONIFY_EVENT; 8846 inev.ie.kind = DEICONIFY_EVENT;
8822 XSETFRAME (inev.ie.frame_or_window, f); 8847 XSETFRAME (inev.ie.frame_or_window, f);
8823 } 8848 }
8849#endif /* USE_GTK */
8824 8850
8825 x_detect_focus_change (dpyinfo, any, event, &inev.ie); 8851 x_detect_focus_change (dpyinfo, any, event, &inev.ie);
8826 goto OTHER; 8852 goto OTHER;
@@ -11823,12 +11849,14 @@ x_make_frame_visible (struct frame *f)
11823 poll_suppress_count = old_poll_suppress_count; 11849 poll_suppress_count = old_poll_suppress_count;
11824#endif 11850#endif
11825 11851
11826 if (CONSP (frame_size_history)) 11852 if (!FRAME_VISIBLE_P (f))
11827 frame_size_history_plain 11853 {
11828 (f, build_string ("x_make_frame_visible")); 11854 if (CONSP (frame_size_history))
11855 frame_size_history_plain
11856 (f, build_string ("x_make_frame_visible"));
11829 11857
11830 if (! FRAME_VISIBLE_P (f)) 11858 x_wait_for_event (f, MapNotify);
11831 x_wait_for_event (f, MapNotify); 11859 }
11832 } 11860 }
11833} 11861}
11834 11862