aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKaroly Lorentey2005-12-10 21:18:28 +0000
committerKaroly Lorentey2005-12-10 21:18:28 +0000
commit16986fcfcca94e88e620c38775e15f758aa44935 (patch)
tree1006528b714927481dc4ef9e649efa10eee17433 /src
parent9ef706664e98e37e9633712126bae99869904677 (diff)
parente67f8828f5f9c4ba3697e048c6386c5e9c0c801e (diff)
downloademacs-16986fcfcca94e88e620c38775e15f758aa44935.tar.gz
emacs-16986fcfcca94e88e620c38775e15f758aa44935.zip
Merged in changes from CVS trunk.
Patches applied: * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-664 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-665 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-666 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-447
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog67
-rw-r--r--src/buffer.c3
-rw-r--r--src/bytecode.c84
-rw-r--r--src/commands.h7
-rw-r--r--src/fileio.c14
-rw-r--r--src/keymap.c22
-rw-r--r--src/minibuf.c23
-rw-r--r--src/undo.c6
-rw-r--r--src/w32fns.c3
-rw-r--r--src/window.c118
-rw-r--r--src/xfns.c31
-rw-r--r--src/xterm.h1
12 files changed, 251 insertions, 128 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 256172630ef..4fa4093631f 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,66 @@
12005-12-07 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu>
2
3 * xfns.c (Fx_create_frame): Initialize Vdefault_minibuffer_frame,
4 when needed.
5
62005-12-06 Stefan Monnier <monnier@iro.umontreal.ca>
7
8 * minibuf.c (keys_of_minibuf): Just unbind SPC in
9 Vminibuffer_local_filename_completion_map rather than forcing it
10 explicitly to the same binding as the global map.
11
122005-12-06 Ken Raeburn <raeburn@gnu.org>
13
14 * buffer.c (Fkill_buffer): Avoid dangerous side effects in NILP
15 argument.
16 * bytecode.c (Fbyte_code): Likewise.
17 * fileio.c (internal_delete_file, Fread_file_name_internal):
18 Likewise.
19 * minibuf.c (Fminibuffer_complete_and_exit): Likewise.
20 * undo.c (truncate_undo_list): Likewise.
21
222005-12-05 Richard M. Stallman <rms@gnu.org>
23
24 * window.c (enlarge_window): Eliminate arg preserve_before.
25 Assume it is 0. All callers changed.
26 (Fenlarge_window, Fshrink_window): Likewise.
27
282005-12-02 Eli Zaretskii <eliz@gnu.org>
29
30 * w32fns.c (compute_tip_xy): Put tip above pointer if it doesn't
31 fit below.
32
332005-12-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
34
35 * xterm.h: Add prototype for xg_set_icon_from_xpm_data.
36
37 * xfns.c (x_real_positions): int ign => unsigned int.
38 (xg_set_icon_from_xpm_data): Remove unused variable err.
39 (x_set_name_internal, Fx_create_frame, xg_set_icon): Add cast
40 to remove compiler warning.
41 (compute_tip_xy): Put tip above pointer if it doesn't fit below.
42
432005-12-02 David Reitter <david.reitter@gmail.com>
44
45 * minibuf.c (Fcompleting_read): If Vminibuffer_completing_file_name is
46 non-nil, use the new keymaps Vminibuffer_local_filename_completion_map
47 and Vminibuffer_local_must_match_filename_map keymaps.
48 (keys_of_minibuf): Bind SPC in the new file-name completion keymaps.
49
50 * keymap.c (Vminibuffer_local_filename_completion_map)
51 (Vminibuffer_local_must_match_filename_map): New variables.
52 (syms_of_keymap): DEFVAR_LISP them, initialize them, and set their
53 parent to be Vminibuffer_local_completion_map and
54 Vminibuffer_local_must_match_map, respectively.
55
56 * commands.h (Vminibuffer_local_filename_completion_map)
57 (Vminibuffer_local_must_match_filename_map): Declare the new keymaps.
58
592005-12-01 Stefan Monnier <monnier@iro.umontreal.ca>
60
61 * window.c (Fset_window_configuration): Don't accidentally copy the
62 window-point of one window to another.
63
12005-11-30 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu> 642005-11-30 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu>
2 65
3 * buffer.c (Fpop_to_buffer): Remove superfluous call to record_buffer. 66 * buffer.c (Fpop_to_buffer): Remove superfluous call to record_buffer.
@@ -55,7 +118,7 @@
55 * macterm.h (cfstring_to_lisp_nodecode) [TARGET_API_MAC_CARBON]: 118 * macterm.h (cfstring_to_lisp_nodecode) [TARGET_API_MAC_CARBON]:
56 Add prototype. 119 Add prototype.
57 120
582005-11-21 Ken Raeburn <raeburn@mit.edu> 1212005-11-21 Ken Raeburn <raeburn@gnu.org>
59 122
60 * keymap.c (shadow_lookup): Use make_number to pass a number to 123 * keymap.c (shadow_lookup): Use make_number to pass a number to
61 Fsubstring. 124 Fsubstring.
@@ -16289,7 +16352,7 @@
16289 * xdisp.c (forward_to_next_line_start): Return 0 when reaching the 16352 * xdisp.c (forward_to_next_line_start): Return 0 when reaching the
16290 end of the buffer. 16353 end of the buffer.
16291 16354
162922002-08-08 Ken Raeburn <raeburn@mit.edu> 163552002-08-08 Ken Raeburn <raeburn@gnu.org>
16293 16356
16294 * coding.c (Ffind_operation_coding_system): Fix Lisp_Object/int mixup. 16357 * coding.c (Ffind_operation_coding_system): Fix Lisp_Object/int mixup.
16295 16358
diff --git a/src/buffer.c b/src/buffer.c
index a20f6a2d683..d52a710573e 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1359,7 +1359,8 @@ with SIGHUP. */)
1359 /* First run the query functions; if any query is answered no, 1359 /* First run the query functions; if any query is answered no,
1360 don't kill the buffer. */ 1360 don't kill the buffer. */
1361 arglist[0] = Qkill_buffer_query_functions; 1361 arglist[0] = Qkill_buffer_query_functions;
1362 if (NILP (Frun_hook_with_args_until_failure (1, arglist))) 1362 tem = Frun_hook_with_args_until_failure (1, arglist);
1363 if (NILP (tem))
1363 return unbind_to (count, Qnil); 1364 return unbind_to (count, Qnil);
1364 1365
1365 /* Then run the hooks. */ 1366 /* Then run the hooks. */
diff --git a/src/bytecode.c b/src/bytecode.c
index e23d835cf10..af09061dbc3 100644
--- a/src/bytecode.c
+++ b/src/bytecode.c
@@ -524,15 +524,19 @@ If the third argument is incorrect, Emacs may crash. */)
524 } 524 }
525 525
526 case Bgotoifnil: 526 case Bgotoifnil:
527 MAYBE_GC (); 527 {
528 op = FETCH2; 528 Lisp_Object v1;
529 if (NILP (POP)) 529 MAYBE_GC ();
530 { 530 op = FETCH2;
531 BYTE_CODE_QUIT; 531 v1 = POP;
532 CHECK_RANGE (op); 532 if (NILP (v1))
533 stack.pc = stack.byte_string_start + op; 533 {
534 } 534 BYTE_CODE_QUIT;
535 break; 535 CHECK_RANGE (op);
536 stack.pc = stack.byte_string_start + op;
537 }
538 break;
539 }
536 540
537 case Bcar: 541 case Bcar:
538 { 542 {
@@ -730,15 +734,19 @@ If the third argument is incorrect, Emacs may crash. */)
730 break; 734 break;
731 735
732 case Bgotoifnonnil: 736 case Bgotoifnonnil:
733 MAYBE_GC (); 737 {
734 op = FETCH2; 738 Lisp_Object v1;
735 if (!NILP (POP)) 739 MAYBE_GC ();
736 { 740 op = FETCH2;
737 BYTE_CODE_QUIT; 741 v1 = POP;
738 CHECK_RANGE (op); 742 if (!NILP (v1))
739 stack.pc = stack.byte_string_start + op; 743 {
740 } 744 BYTE_CODE_QUIT;
741 break; 745 CHECK_RANGE (op);
746 stack.pc = stack.byte_string_start + op;
747 }
748 break;
749 }
742 750
743 case Bgotoifnilelsepop: 751 case Bgotoifnilelsepop:
744 MAYBE_GC (); 752 MAYBE_GC ();
@@ -771,24 +779,32 @@ If the third argument is incorrect, Emacs may crash. */)
771 break; 779 break;
772 780
773 case BRgotoifnil: 781 case BRgotoifnil:
774 MAYBE_GC (); 782 {
775 if (NILP (POP)) 783 Lisp_Object v1;
776 { 784 MAYBE_GC ();
777 BYTE_CODE_QUIT; 785 v1 = POP;
778 stack.pc += (int) *stack.pc - 128; 786 if (NILP (v1))
779 } 787 {
780 stack.pc++; 788 BYTE_CODE_QUIT;
781 break; 789 stack.pc += (int) *stack.pc - 128;
790 }
791 stack.pc++;
792 break;
793 }
782 794
783 case BRgotoifnonnil: 795 case BRgotoifnonnil:
784 MAYBE_GC (); 796 {
785 if (!NILP (POP)) 797 Lisp_Object v1;
786 { 798 MAYBE_GC ();
787 BYTE_CODE_QUIT; 799 v1 = POP;
788 stack.pc += (int) *stack.pc - 128; 800 if (!NILP (v1))
789 } 801 {
790 stack.pc++; 802 BYTE_CODE_QUIT;
791 break; 803 stack.pc += (int) *stack.pc - 128;
804 }
805 stack.pc++;
806 break;
807 }
792 808
793 case BRgotoifnilelsepop: 809 case BRgotoifnilelsepop:
794 MAYBE_GC (); 810 MAYBE_GC ();
diff --git a/src/commands.h b/src/commands.h
index 7ad593577ad..c1330af273e 100644
--- a/src/commands.h
+++ b/src/commands.h
@@ -37,9 +37,16 @@ extern Lisp_Object Vminibuffer_local_ns_map;
37/* keymap used for minibuffers when doing completion */ 37/* keymap used for minibuffers when doing completion */
38extern Lisp_Object Vminibuffer_local_completion_map; 38extern Lisp_Object Vminibuffer_local_completion_map;
39 39
40/* keymap used for minibuffers when doing completion in filenames*/
41extern Lisp_Object Vminibuffer_local_filename_completion_map;
42
40/* keymap used for minibuffers when doing completion and require a match */ 43/* keymap used for minibuffers when doing completion and require a match */
41extern Lisp_Object Vminibuffer_local_must_match_map; 44extern Lisp_Object Vminibuffer_local_must_match_map;
42 45
46/* keymap used for minibuffers when doing completion in filenames
47 and require a match */
48extern Lisp_Object Vminibuffer_local_must_match_filename_map;
49
43/* Last character of last key sequence. */ 50/* Last character of last key sequence. */
44extern Lisp_Object last_command_char; 51extern Lisp_Object last_command_char;
45 52
diff --git a/src/fileio.c b/src/fileio.c
index b7262b6c58b..40e3a3c6e6c 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -2732,8 +2732,10 @@ int
2732internal_delete_file (filename) 2732internal_delete_file (filename)
2733 Lisp_Object filename; 2733 Lisp_Object filename;
2734{ 2734{
2735 return NILP (internal_condition_case_1 (Fdelete_file, filename, 2735 Lisp_Object tem;
2736 Qt, internal_delete_file_1)); 2736 tem = internal_condition_case_1 (Fdelete_file, filename,
2737 Qt, internal_delete_file_1);
2738 return NILP (tem);
2737} 2739}
2738 2740
2739DEFUN ("rename-file", Frename_file, Srename_file, 2, 3, 2741DEFUN ("rename-file", Frename_file, Srename_file, 2, 3,
@@ -6236,13 +6238,17 @@ DEFUN ("read-file-name-internal", Fread_file_name_internal, Sread_file_name_inte
6236#endif 6238#endif
6237 { 6239 {
6238 /* Must do it the hard (and slow) way. */ 6240 /* Must do it the hard (and slow) way. */
6241 Lisp_Object tem;
6239 GCPRO3 (all, comp, specdir); 6242 GCPRO3 (all, comp, specdir);
6240 count = SPECPDL_INDEX (); 6243 count = SPECPDL_INDEX ();
6241 record_unwind_protect (read_file_name_cleanup, current_buffer->directory); 6244 record_unwind_protect (read_file_name_cleanup, current_buffer->directory);
6242 current_buffer->directory = realdir; 6245 current_buffer->directory = realdir;
6243 for (comp = Qnil; CONSP (all); all = XCDR (all)) 6246 for (comp = Qnil; CONSP (all); all = XCDR (all))
6244 if (!NILP (call1 (Vread_file_name_predicate, XCAR (all)))) 6247 {
6245 comp = Fcons (XCAR (all), comp); 6248 tem = call1 (Vread_file_name_predicate, XCAR (all));
6249 if (!NILP (tem))
6250 comp = Fcons (XCAR (all), comp);
6251 }
6246 unbind_to (count, Qnil); 6252 unbind_to (count, Qnil);
6247 UNGCPRO; 6253 UNGCPRO;
6248 } 6254 }
diff --git a/src/keymap.c b/src/keymap.c
index a6d5ccbbc2d..36517cf0794 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -66,6 +66,13 @@ Lisp_Object Vminibuffer_local_ns_map;
66/* was MinibufLocalCompletionMap */ 66/* was MinibufLocalCompletionMap */
67Lisp_Object Vminibuffer_local_completion_map; 67Lisp_Object Vminibuffer_local_completion_map;
68 68
69/* keymap used for minibuffers when doing completion in filenames */
70Lisp_Object Vminibuffer_local_filename_completion_map;
71
72/* keymap used for minibuffers when doing completion in filenames
73 with require-match*/
74Lisp_Object Vminibuffer_local_must_match_filename_map;
75
69/* keymap used for minibuffers when doing completion and require a match */ 76/* keymap used for minibuffers when doing completion and require a match */
70/* was MinibufLocalMustMatchMap */ 77/* was MinibufLocalMustMatchMap */
71Lisp_Object Vminibuffer_local_must_match_map; 78Lisp_Object Vminibuffer_local_must_match_map;
@@ -3775,12 +3782,27 @@ don't alter it yourself. */);
3775 Vminibuffer_local_completion_map = Fmake_sparse_keymap (Qnil); 3782 Vminibuffer_local_completion_map = Fmake_sparse_keymap (Qnil);
3776 Fset_keymap_parent (Vminibuffer_local_completion_map, Vminibuffer_local_map); 3783 Fset_keymap_parent (Vminibuffer_local_completion_map, Vminibuffer_local_map);
3777 3784
3785 DEFVAR_LISP ("minibuffer-local-filename-completion-map",
3786 &Vminibuffer_local_filename_completion_map,
3787 doc: /* Local keymap for minibuffer input with completion for filenames. */);
3788 Vminibuffer_local_filename_completion_map = Fmake_sparse_keymap (Qnil);
3789 Fset_keymap_parent (Vminibuffer_local_filename_completion_map,
3790 Vminibuffer_local_completion_map);
3791
3792
3778 DEFVAR_LISP ("minibuffer-local-must-match-map", &Vminibuffer_local_must_match_map, 3793 DEFVAR_LISP ("minibuffer-local-must-match-map", &Vminibuffer_local_must_match_map,
3779 doc: /* Local keymap for minibuffer input with completion, for exact match. */); 3794 doc: /* Local keymap for minibuffer input with completion, for exact match. */);
3780 Vminibuffer_local_must_match_map = Fmake_sparse_keymap (Qnil); 3795 Vminibuffer_local_must_match_map = Fmake_sparse_keymap (Qnil);
3781 Fset_keymap_parent (Vminibuffer_local_must_match_map, 3796 Fset_keymap_parent (Vminibuffer_local_must_match_map,
3782 Vminibuffer_local_completion_map); 3797 Vminibuffer_local_completion_map);
3783 3798
3799 DEFVAR_LISP ("minibuffer-local-must-match-filename-map",
3800 &Vminibuffer_local_must_match_filename_map,
3801 doc: /* Local keymap for minibuffer input with completion for filenames with exact match. */);
3802 Vminibuffer_local_must_match_filename_map = Fmake_sparse_keymap (Qnil);
3803 Fset_keymap_parent (Vminibuffer_local_must_match_filename_map,
3804 Vminibuffer_local_must_match_map);
3805
3784 DEFVAR_LISP ("minor-mode-map-alist", &Vminor_mode_map_alist, 3806 DEFVAR_LISP ("minor-mode-map-alist", &Vminor_mode_map_alist,
3785 doc: /* Alist of keymaps to use for minor modes. 3807 doc: /* Alist of keymaps to use for minor modes.
3786Each element looks like (VARIABLE . KEYMAP); KEYMAP is used to read 3808Each element looks like (VARIABLE . KEYMAP); KEYMAP is used to read
diff --git a/src/minibuf.c b/src/minibuf.c
index 4aa6dde6cac..2efb3cf4817 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -1753,8 +1753,12 @@ Completion ignores case if the ambient value of
1753 XSETFASTINT (histpos, 0); 1753 XSETFASTINT (histpos, 0);
1754 1754
1755 val = read_minibuf (NILP (require_match) 1755 val = read_minibuf (NILP (require_match)
1756 ? Vminibuffer_local_completion_map 1756 ? (NILP (Vminibuffer_completing_file_name)
1757 : Vminibuffer_local_must_match_map, 1757 ? Vminibuffer_local_completion_map
1758 : Vminibuffer_local_filename_completion_map)
1759 : (NILP (Vminibuffer_completing_file_name)
1760 ? Vminibuffer_local_must_match_map
1761 : Vminibuffer_local_must_match_filename_map),
1758 init, prompt, make_number (pos), 0, 1762 init, prompt, make_number (pos), 0,
1759 histvar, histpos, def, 0, 1763 histvar, histpos, def, 0,
1760 !NILP (inherit_input_method), 0); 1764 !NILP (inherit_input_method), 0);
@@ -2118,16 +2122,17 @@ a repetition of this command will exit. */)
2118 () 2122 ()
2119{ 2123{
2120 register int i; 2124 register int i;
2121 Lisp_Object val; 2125 Lisp_Object val, tem;
2122 2126
2123 /* Allow user to specify null string */ 2127 /* Allow user to specify null string */
2124 if (XINT (Fminibuffer_prompt_end ()) == ZV) 2128 if (XINT (Fminibuffer_prompt_end ()) == ZV)
2125 goto exit; 2129 goto exit;
2126 2130
2127 val = Fminibuffer_contents (); 2131 val = Fminibuffer_contents ();
2128 if (!NILP (Ftest_completion (val, 2132 tem = Ftest_completion (val,
2129 Vminibuffer_completion_table, 2133 Vminibuffer_completion_table,
2130 Vminibuffer_completion_predicate))) 2134 Vminibuffer_completion_predicate);
2135 if (!NILP (tem))
2131 { 2136 {
2132 if (completion_ignore_case) 2137 if (completion_ignore_case)
2133 { /* Fixup case of the field, if necessary. */ 2138 { /* Fixup case of the field, if necessary. */
@@ -2927,10 +2932,16 @@ keys_of_minibuf ()
2927 initial_define_key (Vminibuffer_local_completion_map, '?', 2932 initial_define_key (Vminibuffer_local_completion_map, '?',
2928 "minibuffer-completion-help"); 2933 "minibuffer-completion-help");
2929 2934
2935 Fdefine_key (Vminibuffer_local_filename_completion_map,
2936 build_string (" "), Qnil);
2937
2930 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('m'), 2938 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('m'),
2931 "minibuffer-complete-and-exit"); 2939 "minibuffer-complete-and-exit");
2932 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('j'), 2940 initial_define_key (Vminibuffer_local_must_match_map, Ctl ('j'),
2933 "minibuffer-complete-and-exit"); 2941 "minibuffer-complete-and-exit");
2942
2943 initial_define_key (Vminibuffer_local_must_match_filename_map, ' ',
2944 "self-insert-command");
2934} 2945}
2935 2946
2936/* arch-tag: 8f69b601-fba3-484c-a6dd-ceaee54a7a73 2947/* arch-tag: 8f69b601-fba3-484c-a6dd-ceaee54a7a73
diff --git a/src/undo.c b/src/undo.c
index 9839906ca7e..ecbb714fddd 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -378,11 +378,11 @@ truncate_undo_list (b)
378 && size_so_far > XINT (Vundo_outer_limit) 378 && size_so_far > XINT (Vundo_outer_limit)
379 && !NILP (Vundo_outer_limit_function)) 379 && !NILP (Vundo_outer_limit_function))
380 { 380 {
381 Lisp_Object temp = last_undo_buffer; 381 Lisp_Object temp = last_undo_buffer, tem;
382 382
383 /* Normally the function this calls is undo-outer-limit-truncate. */ 383 /* Normally the function this calls is undo-outer-limit-truncate. */
384 if (! NILP (call1 (Vundo_outer_limit_function, 384 tem = call1 (Vundo_outer_limit_function, make_number (size_so_far));
385 make_number (size_so_far)))) 385 if (! NILP (tem))
386 { 386 {
387 /* The function is responsible for making 387 /* The function is responsible for making
388 any desired changes in buffer-undo-list. */ 388 any desired changes in buffer-undo-list. */
diff --git a/src/w32fns.c b/src/w32fns.c
index e18ee3d43a9..6fc6c860808 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -7413,6 +7413,9 @@ compute_tip_xy (f, parms, dx, dy, width, height, root_x, root_y)
7413 *root_y = XINT (top); 7413 *root_y = XINT (top);
7414 else if (*root_y + XINT (dy) - height < 0) 7414 else if (*root_y + XINT (dy) - height < 0)
7415 *root_y -= XINT (dy); 7415 *root_y -= XINT (dy);
7416 /* If there's not enough place below the pointer, put tip above it. */
7417 else if (*root_y + XINT (dy) >= FRAME_W32_DISPLAY_INFO (f)->height)
7418 *root_y -= XINT (dy);
7416 else 7419 else
7417 { 7420 {
7418 *root_y -= height; 7421 *root_y -= height;
diff --git a/src/window.c b/src/window.c
index 2d974b4647f..dd80f629e1e 100644
--- a/src/window.c
+++ b/src/window.c
@@ -67,7 +67,7 @@ static int window_min_size P_ ((struct window *, int, int, int *));
67static void size_window P_ ((Lisp_Object, int, int, int)); 67static void size_window P_ ((Lisp_Object, int, int, int));
68static int freeze_window_start P_ ((struct window *, void *)); 68static int freeze_window_start P_ ((struct window *, void *));
69static int window_fixed_size_p P_ ((struct window *, int, int)); 69static int window_fixed_size_p P_ ((struct window *, int, int));
70static void enlarge_window P_ ((Lisp_Object, int, int, int)); 70static void enlarge_window P_ ((Lisp_Object, int, int));
71static Lisp_Object window_list P_ ((void)); 71static Lisp_Object window_list P_ ((void));
72static int add_window_to_list P_ ((struct window *, void *)); 72static int add_window_to_list P_ ((struct window *, void *));
73static int candidate_window_p P_ ((Lisp_Object, Lisp_Object, Lisp_Object, 73static int candidate_window_p P_ ((Lisp_Object, Lisp_Object, Lisp_Object,
@@ -1971,7 +1971,7 @@ window_loop (type, obj, mini, frames)
1971 GCPRO1 (windows); 1971 GCPRO1 (windows);
1972 best_window = Qnil; 1972 best_window = Qnil;
1973 1973
1974 for (; CONSP (windows); windows = CDR (windows)) 1974 for (; CONSP (windows); windows = XCDR (windows))
1975 { 1975 {
1976 struct window *w; 1976 struct window *w;
1977 1977
@@ -3592,7 +3592,7 @@ displayed. */)
3592 + XFASTINT (XWINDOW (window)->total_lines)); 3592 + XFASTINT (XWINDOW (window)->total_lines));
3593 enlarge_window (upper, 3593 enlarge_window (upper,
3594 total / 2 - XFASTINT (XWINDOW (upper)->total_lines), 3594 total / 2 - XFASTINT (XWINDOW (upper)->total_lines),
3595 0, 0); 3595 0);
3596 } 3596 }
3597 } 3597 }
3598 } 3598 }
@@ -3669,7 +3669,7 @@ temp_output_buffer_show (buf)
3669#endif 3669#endif
3670 set_buffer_internal (old); 3670 set_buffer_internal (old);
3671 3671
3672 if (!EQ (Vtemp_buffer_show_function, Qnil)) 3672 if (!NILP (Vtemp_buffer_show_function))
3673 call1 (Vtemp_buffer_show_function, buf); 3673 call1 (Vtemp_buffer_show_function, buf);
3674 else 3674 else
3675 { 3675 {
@@ -3883,21 +3883,18 @@ See Info node `(elisp)Splitting Windows' for more details and examples.*/)
3883 return new; 3883 return new;
3884} 3884}
3885 3885
3886DEFUN ("enlarge-window", Fenlarge_window, Senlarge_window, 1, 3, "p", 3886DEFUN ("enlarge-window", Fenlarge_window, Senlarge_window, 1, 2, "p",
3887 doc: /* Make current window ARG lines bigger. 3887 doc: /* Make current window ARG lines bigger.
3888From program, optional second arg non-nil means grow sideways ARG columns. 3888From program, optional second arg non-nil means grow sideways ARG columns.
3889Interactively, if an argument is not given, make the window one line bigger. 3889Interactively, if an argument is not given, make the window one line bigger.
3890If HORIZONTAL is non-nil, enlarge horizontally instead of vertically. 3890If HORIZONTAL is non-nil, enlarge horizontally instead of vertically.
3891 3891This function can delete windows, even the second window, if they get
3892Optional third arg PRESERVE-BEFORE, if non-nil, means do not change the size 3892too small. */)
3893of the siblings above or to the left of the selected window. Only 3893 (arg, horizontal)
3894siblings to the right or below are changed. */) 3894 Lisp_Object arg, horizontal;
3895 (arg, horizontal, preserve_before)
3896 register Lisp_Object arg, horizontal, preserve_before;
3897{ 3895{
3898 CHECK_NUMBER (arg); 3896 CHECK_NUMBER (arg);
3899 enlarge_window (selected_window, XINT (arg), !NILP (horizontal), 3897 enlarge_window (selected_window, XINT (arg), !NILP (horizontal));
3900 !NILP (preserve_before));
3901 3898
3902 if (! NILP (Vwindow_configuration_change_hook)) 3899 if (! NILP (Vwindow_configuration_change_hook))
3903 call1 (Vrun_hooks, Qwindow_configuration_change_hook); 3900 call1 (Vrun_hooks, Qwindow_configuration_change_hook);
@@ -3905,20 +3902,16 @@ siblings to the right or below are changed. */)
3905 return Qnil; 3902 return Qnil;
3906} 3903}
3907 3904
3908DEFUN ("shrink-window", Fshrink_window, Sshrink_window, 1, 3, "p", 3905DEFUN ("shrink-window", Fshrink_window, Sshrink_window, 1, 2, "p",
3909 doc: /* Make current window ARG lines smaller. 3906 doc: /* Make current window ARG lines smaller.
3910From program, optional second arg non-nil means shrink sideways arg columns. 3907From program, optional second arg non-nil means shrink sideways arg columns.
3911Interactively, if an argument is not given, make the window one line smaller. 3908Interactively, if an argument is not given, make the window one line smaller. Only
3912
3913Optional third arg PRESERVE-BEFORE, if non-nil, means do not change the size
3914of the siblings above or to the left of the selected window. Only
3915siblings to the right or below are changed. */) 3909siblings to the right or below are changed. */)
3916 (arg, side, preserve_before) 3910 (arg, side)
3917 register Lisp_Object arg, side, preserve_before; 3911 Lisp_Object arg, side;
3918{ 3912{
3919 CHECK_NUMBER (arg); 3913 CHECK_NUMBER (arg);
3920 enlarge_window (selected_window, -XINT (arg), !NILP (side), 3914 enlarge_window (selected_window, -XINT (arg), !NILP (side));
3921 !NILP (preserve_before));
3922 3915
3923 if (! NILP (Vwindow_configuration_change_hook)) 3916 if (! NILP (Vwindow_configuration_change_hook))
3924 call1 (Vrun_hooks, Qwindow_configuration_change_hook); 3917 call1 (Vrun_hooks, Qwindow_configuration_change_hook);
@@ -3956,15 +3949,12 @@ window_width (window)
3956 3949
3957 Siblings of the selected window are resized to fulfill the size 3950 Siblings of the selected window are resized to fulfill the size
3958 request. If they become too small in the process, they will be 3951 request. If they become too small in the process, they will be
3959 deleted. 3952 deleted. */
3960
3961 If PRESERVE_BEFORE is nonzero, that means don't alter
3962 the siblings to the left or above WINDOW. */
3963 3953
3964static void 3954static void
3965enlarge_window (window, delta, horiz_flag, preserve_before) 3955enlarge_window (window, delta, horiz_flag)
3966 Lisp_Object window; 3956 Lisp_Object window;
3967 int delta, horiz_flag, preserve_before; 3957 int delta, horiz_flag;
3968{ 3958{
3969 Lisp_Object parent, next, prev; 3959 Lisp_Object parent, next, prev;
3970 struct window *p; 3960 struct window *p;
@@ -4011,33 +4001,18 @@ enlarge_window (window, delta, horiz_flag, preserve_before)
4011 4001
4012 /* Compute the maximum size increment this window can have. */ 4002 /* Compute the maximum size increment this window can have. */
4013 4003
4014 if (preserve_before) 4004 maxdelta = (!NILP (parent) ? (*sizefun) (parent) - XINT (*sizep)
4015 { 4005 /* This is a main window followed by a minibuffer. */
4016 if (!NILP (parent)) 4006 : !NILP (p->next) ? ((*sizefun) (p->next)
4017 { 4007 - window_min_size (XWINDOW (p->next),
4018 maxdelta = (*sizefun) (parent) - XINT (*sizep); 4008 horiz_flag, 0, 0))
4019 /* Subtract size of siblings before, since we can't take that. */ 4009 /* This is a minibuffer following a main window. */
4020 maxdelta -= XINT (CURBEG (window)) - XINT (CURBEG (parent)); 4010 : !NILP (p->prev) ? ((*sizefun) (p->prev)
4021 } 4011 - window_min_size (XWINDOW (p->prev),
4022 else 4012 horiz_flag, 0, 0))
4023 maxdelta = (!NILP (p->next) ? ((*sizefun) (p->next) 4013 /* This is a frame with only one window, a minibuffer-only
4024 - window_min_size (XWINDOW (p->next), 4014 or a minibufferless frame. */
4025 horiz_flag, 0, 0)) 4015 : (delta = 0));
4026 : (delta = 0));
4027 }
4028 else
4029 maxdelta = (!NILP (parent) ? (*sizefun) (parent) - XINT (*sizep)
4030 /* This is a main window followed by a minibuffer. */
4031 : !NILP (p->next) ? ((*sizefun) (p->next)
4032 - window_min_size (XWINDOW (p->next),
4033 horiz_flag, 0, 0))
4034 /* This is a minibuffer following a main window. */
4035 : !NILP (p->prev) ? ((*sizefun) (p->prev)
4036 - window_min_size (XWINDOW (p->prev),
4037 horiz_flag, 0, 0))
4038 /* This is a frame with only one window, a minibuffer-only
4039 or a minibufferless frame. */
4040 : (delta = 0));
4041 4016
4042 if (delta > maxdelta) 4017 if (delta > maxdelta)
4043 /* This case traps trying to make the minibuffer 4018 /* This case traps trying to make the minibuffer
@@ -4060,10 +4035,9 @@ enlarge_window (window, delta, horiz_flag, preserve_before)
4060 for (next = p->next; ! NILP (next); next = XWINDOW (next)->next) 4035 for (next = p->next; ! NILP (next); next = XWINDOW (next)->next)
4061 maximum += (*sizefun) (next) - window_min_size (XWINDOW (next), 4036 maximum += (*sizefun) (next) - window_min_size (XWINDOW (next),
4062 horiz_flag, 0, 0); 4037 horiz_flag, 0, 0);
4063 if (! preserve_before) 4038 for (prev = p->prev; ! NILP (prev); prev = XWINDOW (prev)->prev)
4064 for (prev = p->prev; ! NILP (prev); prev = XWINDOW (prev)->prev) 4039 maximum += (*sizefun) (prev) - window_min_size (XWINDOW (prev),
4065 maximum += (*sizefun) (prev) - window_min_size (XWINDOW (prev), 4040 horiz_flag, 0, 0);
4066 horiz_flag, 0, 0);
4067 4041
4068 /* If we can get it all from them without deleting them, do so. */ 4042 /* If we can get it all from them without deleting them, do so. */
4069 if (delta <= maximum) 4043 if (delta <= maximum)
@@ -4079,7 +4053,7 @@ enlarge_window (window, delta, horiz_flag, preserve_before)
4079 moving away from this window in both directions alternately, 4053 moving away from this window in both directions alternately,
4080 and take as much as we can get without deleting that sibling. */ 4054 and take as much as we can get without deleting that sibling. */
4081 while (delta != 0 4055 while (delta != 0
4082 && (!NILP (next) || (!preserve_before && !NILP (prev)))) 4056 && (!NILP (next) || !NILP (prev)))
4083 { 4057 {
4084 if (! NILP (next)) 4058 if (! NILP (next))
4085 { 4059 {
@@ -4103,7 +4077,7 @@ enlarge_window (window, delta, horiz_flag, preserve_before)
4103 if (delta == 0) 4077 if (delta == 0)
4104 break; 4078 break;
4105 4079
4106 if (!preserve_before && ! NILP (prev)) 4080 if (! NILP (prev))
4107 { 4081 {
4108 int this_one = ((*sizefun) (prev) 4082 int this_one = ((*sizefun) (prev)
4109 - window_min_size (XWINDOW (prev), 4083 - window_min_size (XWINDOW (prev),
@@ -4352,7 +4326,7 @@ adjust_window_trailing_edge (window, delta, horiz_flag)
4352DEFUN ("adjust-window-trailing-edge", Fadjust_window_trailing_edge, 4326DEFUN ("adjust-window-trailing-edge", Fadjust_window_trailing_edge,
4353 Sadjust_window_trailing_edge, 3, 3, 0, 4327 Sadjust_window_trailing_edge, 3, 3, 0,
4354 doc: /* Adjust the bottom or right edge of WINDOW by DELTA. 4328 doc: /* Adjust the bottom or right edge of WINDOW by DELTA.
4355If HORIZ_FLAG is t, that means adjust the width, moving the right edge. 4329If HORIZONTAL is non-nil, that means adjust the width, moving the right edge.
4356Otherwise, adjust the height, moving the bottom edge. 4330Otherwise, adjust the height, moving the bottom edge.
4357 4331
4358Following siblings of the selected window are resized to fulfill 4332Following siblings of the selected window are resized to fulfill
@@ -4604,7 +4578,7 @@ shrink_mini_window (w)
4604 among the other windows. */ 4578 among the other windows. */
4605 Lisp_Object window; 4579 Lisp_Object window;
4606 XSETWINDOW (window, w); 4580 XSETWINDOW (window, w);
4607 enlarge_window (window, 1 - XFASTINT (w->total_lines), 0, 0); 4581 enlarge_window (window, 1 - XFASTINT (w->total_lines), 0);
4608 } 4582 }
4609} 4583}
4610 4584
@@ -5833,7 +5807,23 @@ the return value is nil. Otherwise the value is t. */)
5833 else 5807 else
5834 { 5808 {
5835 if (XBUFFER (new_current_buffer) == current_buffer) 5809 if (XBUFFER (new_current_buffer) == current_buffer)
5836 old_point = PT; 5810 /* The code further down "preserves point" by saving here PT in
5811 old_point and then setting it later back into PT. When the
5812 current-selected-window and the final-selected-window both show
5813 the current buffer, this suffers from the problem that the
5814 current PT is the window-point of the current-selected-window,
5815 while the final PT is the point of the final-selected-window, so
5816 this copy from one PT to the other would end up moving the
5817 window-point of the final-selected-window to the window-point of
5818 the current-selected-window. So we have to be careful which
5819 point of the current-buffer we copy into old_point. */
5820 if (EQ (XWINDOW (data->current_window)->buffer, new_current_buffer)
5821 && WINDOWP (selected_window)
5822 && EQ (XWINDOW (selected_window)->buffer, new_current_buffer)
5823 && !EQ (selected_window, data->current_window))
5824 old_point = XMARKER (XWINDOW (data->current_window)->pointm)->charpos;
5825 else
5826 old_point = PT;
5837 else 5827 else
5838 /* BUF_PT (XBUFFER (new_current_buffer)) gives us the position of 5828 /* BUF_PT (XBUFFER (new_current_buffer)) gives us the position of
5839 point in new_current_buffer as of the last time this buffer was 5829 point in new_current_buffer as of the last time this buffer was
diff --git a/src/xfns.c b/src/xfns.c
index 311bc5f1bd8..a03573f7bf3 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -619,7 +619,7 @@ x_real_positions (f, xptr, yptr)
619 619
620 if (! had_errors) 620 if (! had_errors)
621 { 621 {
622 int ign; 622 unsigned int ign;
623 Window child, rootw; 623 Window child, rootw;
624 624
625 /* Get the real coordinates for the WM window upper left corner */ 625 /* Get the real coordinates for the WM window upper left corner */
@@ -805,9 +805,7 @@ xg_set_icon (f, file)
805 { 805 {
806 GdkPixbuf *pixbuf; 806 GdkPixbuf *pixbuf;
807 GError *err = NULL; 807 GError *err = NULL;
808 char *filename; 808 char *filename = (char *) SDATA (found);
809
810 filename = SDATA (found);
811 BLOCK_INPUT; 809 BLOCK_INPUT;
812 810
813 pixbuf = gdk_pixbuf_new_from_file (filename, &err); 811 pixbuf = gdk_pixbuf_new_from_file (filename, &err);
@@ -836,17 +834,12 @@ xg_set_icon_from_xpm_data (f, data)
836 char **data; 834 char **data;
837{ 835{
838 int result = 0; 836 int result = 0;
839 GError *err = NULL; 837 GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) data);
840 GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data (data);
841 838
842 if (!pixbuf) 839 if (!pixbuf)
843 { 840 return 0;
844 g_error_free (err);
845 return 0;
846 }
847 841
848 gtk_window_set_icon (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), 842 gtk_window_set_icon (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), pixbuf);
849 pixbuf);
850 g_object_unref (pixbuf); 843 g_object_unref (pixbuf);
851 return 1; 844 return 1;
852} 845}
@@ -1658,7 +1651,7 @@ x_set_name_internal (f, name)
1658 1651
1659#ifdef USE_GTK 1652#ifdef USE_GTK
1660 gtk_window_set_title (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), 1653 gtk_window_set_title (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
1661 SDATA (ENCODE_UTF_8 (name))); 1654 (char *) SDATA (ENCODE_UTF_8 (name)));
1662#else /* not USE_GTK */ 1655#else /* not USE_GTK */
1663 XSetWMName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &text); 1656 XSetWMName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &text);
1664#endif /* not USE_GTK */ 1657#endif /* not USE_GTK */
@@ -3393,10 +3386,17 @@ This function is an internal primitive--use `make-frame' instead. */)
3393 FRAME_OUTER_WINDOW (f), 3386 FRAME_OUTER_WINDOW (f),
3394 dpyinfo->Xatom_wm_client_leader, 3387 dpyinfo->Xatom_wm_client_leader,
3395 XA_WINDOW, 32, PropModeReplace, 3388 XA_WINDOW, 32, PropModeReplace,
3396 (char *) &dpyinfo->client_leader_window, 1); 3389 (unsigned char *) &dpyinfo->client_leader_window, 1);
3397 UNBLOCK_INPUT; 3390 UNBLOCK_INPUT;
3398 } 3391 }
3399 3392
3393 /* Initialize `default-minibuffer-frame' in case this is the first
3394 frame on this display device. */
3395 if (FRAME_HAS_MINIBUF_P (f)
3396 && (!FRAMEP (kb->Vdefault_minibuffer_frame)
3397 || !FRAME_LIVE_P (XFRAME (kb->Vdefault_minibuffer_frame))))
3398 kb->Vdefault_minibuffer_frame = frame;
3399
3400 UNGCPRO; 3400 UNGCPRO;
3401 3401
3402 /* Make sure windows on this frame appear in calls to next-window 3402 /* Make sure windows on this frame appear in calls to next-window
@@ -4944,6 +4944,9 @@ compute_tip_xy (f, parms, dx, dy, width, height, root_x, root_y)
4944 *root_y = XINT (top); 4944 *root_y = XINT (top);
4945 else if (*root_y + XINT (dy) - height < 0) 4945 else if (*root_y + XINT (dy) - height < 0)
4946 *root_y -= XINT (dy); 4946 *root_y -= XINT (dy);
4947 else if (*root_y + XINT (dy) >= FRAME_X_DISPLAY_INFO (f)->height)
4948 /* Put tip above the pointer. */
4949 *root_y -= XINT (dy);
4947 else 4950 else
4948 { 4951 {
4949 *root_y -= height; 4952 *root_y -= height;
diff --git a/src/xterm.h b/src/xterm.h
index 3a8c3d79d61..c96d015be4a 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -1036,6 +1036,7 @@ extern int have_menus_p P_ ((void));
1036 1036
1037#ifdef USE_GTK 1037#ifdef USE_GTK
1038extern int xg_set_icon P_ ((struct frame *, Lisp_Object)); 1038extern int xg_set_icon P_ ((struct frame *, Lisp_Object));
1039extern int xg_set_icon_from_xpm_data P_ ((struct frame *, char**));
1039#endif /* USE_GTK */ 1040#endif /* USE_GTK */
1040 1041
1041extern void x_real_positions P_ ((struct frame *, int *, int *)); 1042extern void x_real_positions P_ ((struct frame *, int *, int *));