annotate src/gui.c @ 3087:3ecf9e91d88a v7.3.315

updated for version 7.3.315 Problem: Opening a window before forking causes problems for GTK. Solution: Fork first, create the window in the child and report back to the parent process whether it worked. If successful the parent exits, if unsuccessful the child exits and the parent continues in the terminal. (Tim Starling)
author Bram Moolenaar <bram@vim.org>
date Wed, 14 Sep 2011 19:04:39 +0200
parents 342b17608967
children 7ba2f171cdac
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1 /* vi:set ts=8 sts=4 sw=4:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 * GUI/Motif support by Robert Webb
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 * Do ":help uganda" in Vim to read copying and usage conditions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 * Do ":help credits" in Vim to see a list of people who contributed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 * See README.txt for an overview of the Vim source code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13 /* Structure containing all the GUI information */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 gui_T gui;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
16 #if defined(FEAT_MBYTE) && !defined(FEAT_GUI_GTK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17 static void set_guifontwide __ARGS((char_u *font_name));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 static void gui_check_pos __ARGS((void));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20 static void gui_position_components __ARGS((int));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21 static void gui_outstr __ARGS((char_u *, int));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22 static int gui_screenchar __ARGS((int off, int flags, guicolor_T fg, guicolor_T bg, int back));
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
23 #ifdef FEAT_GUI_GTK
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24 static int gui_screenstr __ARGS((int off, int len, int flags, guicolor_T fg, guicolor_T bg, int back));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 static void gui_delete_lines __ARGS((int row, int count));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 static void gui_insert_lines __ARGS((int row, int count));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28 static void fill_mouse_coord __ARGS((char_u *p, int col, int row));
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
29 #if defined(FEAT_GUI_TABLINE) || defined(PROTO)
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
30 static int gui_has_tabline __ARGS((void));
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
31 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 static void gui_do_scrollbar __ARGS((win_T *wp, int which, int enable));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33 static colnr_T scroll_line_len __ARGS((linenr_T lnum));
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
34 static linenr_T gui_find_longest_lnum __ARGS((void));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 static void gui_update_horiz_scrollbar __ARGS((int));
203
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
36 static void gui_set_fg_color __ARGS((char_u *name));
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
37 static void gui_set_bg_color __ARGS((char_u *name));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 static win_T *xy2win __ARGS((int x, int y));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39
3087
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
40 #if defined(UNIX) && !defined(__BEOS__) && !defined(MACOS_X) \
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
41 && !defined(__APPLE__)
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
42 # define MAY_FORK
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
43 static void gui_do_fork __ARGS((void));
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
44
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
45 static int gui_read_child_pipe __ARGS((int fd));
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
46
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
47 /* Return values for gui_read_child_pipe */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
48 enum {
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
49 GUI_CHILD_IO_ERROR,
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
50 GUI_CHILD_OK,
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
51 GUI_CHILD_FAILED
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
52 };
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
53
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
54 #endif /* MAY_FORK */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
55
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
56 static void gui_attempt_start __ARGS((void));
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
57
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 static int can_update_cursor = TRUE; /* can display the cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61 * The Athena scrollbars can move the thumb to after the end of the scrollbar,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 * this makes the thumb indicate the part of the text that is shown. Motif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 * can't do this.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 #if defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_MAC)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
66 # define SCROLL_PAST_END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70 * gui_start -- Called when user wants to start the GUI.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
71 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72 * Careful: This function can be called recursively when there is a ":gui"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
73 * command in the .gvimrc file. Only the first call should fork, not the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
74 * recursive call.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
75 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
76 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
77 gui_start()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
78 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79 char_u *old_term;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80 static int recursive = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
81
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
82 old_term = vim_strsave(T_NAME);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
83
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
84 settmode(TMODE_COOK); /* stop RAW mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
85 if (full_screen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
86 cursor_on(); /* needed for ":gui" in .vimrc */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
87 full_screen = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
88
3087
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
89 ++recursive;
2923
7653420fdc45 updated for version 7.3.234
Bram Moolenaar <bram@vim.org>
parents: 2913
diff changeset
90
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
91 #ifdef MAY_FORK
3087
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
92 /*
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
93 * Quit the current process and continue in the child.
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
94 * Makes "gvim file" disconnect from the shell it was started in.
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
95 * Don't do this when Vim was started with "-f" or the 'f' flag is present
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
96 * in 'guioptions'.
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
97 */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
98 if (gui.dofork && !vim_strchr(p_go, GO_FORG) && recursive <= 1)
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
99 {
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
100 gui_do_fork();
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
101 }
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
102 else
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
103 #endif
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
104 {
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
105 gui_attempt_start();
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
106 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 if (!gui.in_use) /* failed to start GUI */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
109 {
3087
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
110 /* Back to old term settings
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
111 *
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
112 * FIXME: If we got here because a child process failed and flagged to
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
113 * the parent to resume, and X11 is enabled with FEAT_TITLE, this will
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
114 * hit an X11 I/O error and do a longjmp(), leaving recursive
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
115 * permanently set to 1. This is probably not as big a problem as it
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
116 * sounds, because gui_mch_init() in both gui_x11.c and gui_gtk_x11.c
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
117 * return "OK" unconditionally, so it would be very difficult to
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
118 * actually hit this case.
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
119 */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
120 termcapinit(old_term);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
121 settmode(TMODE_RAW); /* restart RAW mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
122 #ifdef FEAT_TITLE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
123 set_title_defaults(); /* set 'title' and 'icon' again */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
124 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
125 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
126
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
127 vim_free(old_term);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128
3087
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
129 #ifdef FEAT_AUTOCMD
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
130 /* If the GUI started successfully, trigger the GUIEnter event, otherwise
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
131 * the GUIFailed event. */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
132 gui_mch_update();
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
133 apply_autocmds(gui.in_use ? EVENT_GUIENTER : EVENT_GUIFAILED,
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
134 NULL, NULL, FALSE, curbuf);
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
135 #endif
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
136 --recursive;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
137 }
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
138
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
139 /*
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
140 * Set_termname() will call gui_init() to start the GUI.
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
141 * Set the "starting" flag, to indicate that the GUI will start.
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
142 *
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
143 * We don't want to open the GUI shell until after we've read .gvimrc,
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
144 * otherwise we don't know what font we will use, and hence we don't know
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
145 * what size the shell should be. So if there are errors in the .gvimrc
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
146 * file, they will have to go to the terminal: Set full_screen to FALSE.
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
147 * full_screen will be set to TRUE again by a successful termcapinit().
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
148 */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
149 static void
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
150 gui_attempt_start()
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
151 {
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
152 static int recursive = 0;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
153
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
154 ++recursive;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
155 gui.starting = TRUE;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
156
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
157 #ifdef FEAT_GUI_GTK
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
158 gui.event_time = GDK_CURRENT_TIME;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
159 #endif
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
160
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
161 termcapinit((char_u *)"builtin_gui");
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
162 gui.starting = recursive - 1;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
163
574
25a70b1cd2da updated for version 7.0163
vimboss
parents: 540
diff changeset
164 #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
165 if (gui.in_use)
2609
758822790b43 updated for version 7.3.031
Bram Moolenaar <bram@vim.org>
parents: 2592
diff changeset
166 {
758822790b43 updated for version 7.3.031
Bram Moolenaar <bram@vim.org>
parents: 2592
diff changeset
167 # ifdef FEAT_EVAL
758822790b43 updated for version 7.3.031
Bram Moolenaar <bram@vim.org>
parents: 2592
diff changeset
168 Window x11_window;
758822790b43 updated for version 7.3.031
Bram Moolenaar <bram@vim.org>
parents: 2592
diff changeset
169 Display *x11_display;
758822790b43 updated for version 7.3.031
Bram Moolenaar <bram@vim.org>
parents: 2592
diff changeset
170
758822790b43 updated for version 7.3.031
Bram Moolenaar <bram@vim.org>
parents: 2592
diff changeset
171 if (gui_get_x11_windis(&x11_window, &x11_display) == OK)
758822790b43 updated for version 7.3.031
Bram Moolenaar <bram@vim.org>
parents: 2592
diff changeset
172 set_vim_var_nr(VV_WINDOWID, (long)x11_window);
758822790b43 updated for version 7.3.031
Bram Moolenaar <bram@vim.org>
parents: 2592
diff changeset
173 # endif
758822790b43 updated for version 7.3.031
Bram Moolenaar <bram@vim.org>
parents: 2592
diff changeset
174
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175 /* Display error messages in a dialog now. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176 display_errors();
2609
758822790b43 updated for version 7.3.031
Bram Moolenaar <bram@vim.org>
parents: 2592
diff changeset
177 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
178 #endif
3087
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
179 --recursive;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
180 }
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
181
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
182 #ifdef MAY_FORK
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
183
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
184 /* for waitpid() */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
185 # if defined(HAVE_SYS_WAIT_H) || defined(HAVE_UNION_WAIT)
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
186 # include <sys/wait.h>
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
187 # endif
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
188
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
189 /*
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
190 * Create a new process, by forking. In the child, start the GUI, and in
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
191 * the parent, exit.
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
192 *
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
193 * If something goes wrong, this will return with gui.in_use still set
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
194 * to FALSE, in which case the caller should continue execution without
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
195 * the GUI.
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
196 *
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
197 * If the child fails to start the GUI, then the child will exit and the
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
198 * parent will return. If the child succeeds, then the parent will exit
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
199 * and the child will return.
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
200 */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
201 static void
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
202 gui_do_fork()
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
203 {
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
204 #ifdef __QNXNTO__
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
205 procmgr_daemon(0, PROCMGR_DAEMON_KEEPUMASK | PROCMGR_DAEMON_NOCHDIR |
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
206 PROCMGR_DAEMON_NOCLOSE | PROCMGR_DAEMON_NODEVNULL);
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
207 gui_attempt_start();
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
208 return;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
209 #else
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
210 int pipefd[2]; /* pipe between parent and child */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
211 int pipe_error;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
212 int status;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
213 int exit_status;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
214 pid_t pid = -1;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
215 FILE *parent_file;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
216
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
217 /* Setup a pipe between the child and the parent, so that the parent
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
218 * knows when the child has done the setsid() call and is allowed to
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
219 * exit. */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
220 pipe_error = (pipe(pipefd) < 0);
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
221 pid = fork();
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
222 if (pid < 0) /* Fork error */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
223 {
3087
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
224 EMSG(_("E851: Failed to create a new process for the GUI"));
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
225 return;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
226 }
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
227 else if (pid > 0) /* Parent */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
228 {
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
229 /* Give the child some time to do the setsid(), otherwise the
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
230 * exit() may kill the child too (when starting gvim from inside a
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
231 * gvim). */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
232 if (!pipe_error)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233 {
3087
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
234 /* The read returns when the child closes the pipe (or when
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
235 * the child dies for some reason). */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
236 close(pipefd[1]);
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
237 status = gui_read_child_pipe(pipefd[0]);
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
238 if (status == GUI_CHILD_FAILED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
239 {
3087
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
240 /* The child failed to start the GUI, so the caller must
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
241 * continue. There may be more error information written
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
242 * to stderr by the child. */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
243 # ifdef __NeXT__
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
244 wait4(pid, &exit_status, 0, (struct rusage *)0);
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
245 # else
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
246 waitpid(pid, &exit_status, 0);
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
247 # endif
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
248 EMSG(_("E852: The child process failed to start the GUI"));
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
249 return;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 }
3087
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
251 else if (status == GUI_CHILD_IO_ERROR)
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
252 {
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
253 pipe_error = TRUE;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
254 }
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
255 /* else GUI_CHILD_OK: parent exit */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
256 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
257
3087
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
258 if (pipe_error)
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
259 ui_delay(300L, TRUE);
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
260
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
261 /* When swapping screens we may need to go to the next line, e.g.,
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
262 * after a hit-enter prompt and using ":gui". */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
263 if (newline_on_exit)
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
264 mch_errmsg("\r\n");
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
265
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
266 /*
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
267 * The parent must skip the normal exit() processing, the child
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
268 * will do it. For example, GTK messes up signals when exiting.
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
269 */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
270 _exit(0);
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
271 }
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
272 /* Child */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
273
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
274 # if defined(HAVE_SETSID) || defined(HAVE_SETPGID)
3087
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
275 /*
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
276 * Change our process group. On some systems/shells a CTRL-C in the
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
277 * shell where Vim was started would otherwise kill gvim!
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
278 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
279 # if defined(HAVE_SETSID)
3087
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
280 (void)setsid();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
281 # else
3087
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
282 (void)setpgid(0, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
283 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
284 # endif
3087
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
285 if (!pipe_error)
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
286 close(pipefd[0]);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
287
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
288 # if defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION)
3087
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
289 /* Tell the session manager our new PID */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
290 gui_mch_forked();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
291 # endif
3087
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
292
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
293 if (!pipe_error)
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
294 parent_file = fdopen(pipefd[1], "w");
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
295 else
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
296 parent_file = NULL;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
297
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
298 /* Try to start the GUI */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
299 gui_attempt_start();
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
300
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
301 /* Notify the parent */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
302 if (parent_file != NULL)
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
303 {
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
304 fputs(gui.in_use ? "ok" : "fail", parent_file);
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
305 fclose(parent_file);
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
306 }
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
307
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
308 /* If we failed to start the GUI, exit now. */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
309 if (!gui.in_use)
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
310 exit(1);
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
311 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
312 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
313
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
314 /*
3087
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
315 * Read from a pipe assumed to be connected to the child process (this
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
316 * function is called from the parent).
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
317 * Return GUI_CHILD_OK if the child successfully started the GUI,
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
318 * GUY_CHILD_FAILED if the child failed, or GUI_CHILD_IO_ERROR if there was
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
319 * some other error.
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
320 *
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
321 * The file descriptor will be closed before the function returns.
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
322 */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
323 static int
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
324 gui_read_child_pipe(int fd)
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
325 {
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
326 size_t bytes_read;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
327 FILE *file;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
328 char buffer[10];
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
329
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
330 file = fdopen(fd, "r");
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
331 if (!file)
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
332 return GUI_CHILD_IO_ERROR;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
333
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
334 bytes_read = fread(buffer, sizeof(char), sizeof(buffer)-1, file);
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
335 buffer[bytes_read] = '\0';
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
336 fclose(file);
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
337 if (strcmp(buffer, "ok") == 0)
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
338 return GUI_CHILD_OK;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
339 return GUI_CHILD_FAILED;
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
340 }
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
341
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
342 #endif /* MAY_FORK */
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
343
3ecf9e91d88a updated for version 7.3.315
Bram Moolenaar <bram@vim.org>
parents: 3014
diff changeset
344 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
345 * Call this when vim starts up, whether or not the GUI is started
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
346 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
347 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
348 gui_prepare(argc, argv)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
349 int *argc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
350 char **argv;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
351 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
352 gui.in_use = FALSE; /* No GUI yet (maybe later) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
353 gui.starting = FALSE; /* No GUI yet (maybe later) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
354 gui_mch_prepare(argc, argv);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
355 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
356
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
357 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
358 * Try initializing the GUI and check if it can be started.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
359 * Used from main() to check early if "vim -g" can start the GUI.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
360 * Used from gui_init() to prepare for starting the GUI.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
361 * Returns FAIL or OK.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
362 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
363 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
364 gui_init_check()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
365 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
366 static int result = MAYBE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
367
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
368 if (result != MAYBE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
369 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
370 if (result == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
371 EMSG(_("E229: Cannot start the GUI"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
372 return result;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
373 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375 gui.shell_created = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376 gui.dying = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
377 gui.in_focus = TRUE; /* so the guicursor setting works */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
378 gui.dragged_sb = SBAR_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
379 gui.dragged_wp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
380 gui.pointer_hidden = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
381 gui.col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
382 gui.row = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
383 gui.num_cols = Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
384 gui.num_rows = Rows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
385
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
386 gui.cursor_is_valid = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
387 gui.scroll_region_top = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
388 gui.scroll_region_bot = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
389 gui.scroll_region_left = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
390 gui.scroll_region_right = Columns - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
391 gui.highlight_mask = HL_NORMAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
392 gui.char_width = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
393 gui.char_height = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
394 gui.char_ascent = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
395 gui.border_width = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
396
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
397 gui.norm_font = NOFONT;
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
398 #ifndef FEAT_GUI_GTK
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
399 gui.bold_font = NOFONT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
400 gui.ital_font = NOFONT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
401 gui.boldital_font = NOFONT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
402 # ifdef FEAT_XFONTSET
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
403 gui.fontset = NOFONTSET;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
404 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
405 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
407 #ifdef FEAT_MENU
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
408 # ifndef FEAT_GUI_GTK
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
409 # ifdef FONTSET_ALWAYS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
410 gui.menu_fontset = NOFONTSET;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
411 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
412 gui.menu_font = NOFONT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
413 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
414 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
415 gui.menu_is_active = TRUE; /* default: include menu */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
416 # ifndef FEAT_GUI_GTK
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
417 gui.menu_height = MENU_DEFAULT_HEIGHT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
418 gui.menu_width = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
419 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
420 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
421 #if defined(FEAT_TOOLBAR) && (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
422 gui.toolbar_height = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
423 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
424 #if defined(FEAT_FOOTER) && defined(FEAT_GUI_MOTIF)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
425 gui.footer_height = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
426 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
427 #ifdef FEAT_BEVAL_TIP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
428 gui.tooltip_fontset = NOFONTSET;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
429 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
430
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
431 gui.scrollbar_width = gui.scrollbar_height = SB_DEFAULT_WIDTH;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
432 gui.prev_wrap = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
433
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
434 #ifdef ALWAYS_USE_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
435 result = OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
436 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
437 result = gui_mch_init_check();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
438 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
439 return result;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
440 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
441
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
442 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
443 * This is the call which starts the GUI.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
444 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
445 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
446 gui_init()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
447 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
448 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
449 static int recursive = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
450
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
451 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
452 * It's possible to use ":gui" in a .gvimrc file. The first halve of this
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
453 * function will then be executed at the first call, the rest by the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
454 * recursive call. This allow the shell to be opened halfway reading a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
455 * gvimrc file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
456 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
457 if (!recursive)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
458 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
459 ++recursive;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
460
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
461 clip_init(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
462
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
463 /* If can't initialize, don't try doing the rest */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
464 if (gui_init_check() == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
465 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
466 --recursive;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
467 clip_init(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
468 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
469 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
470
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
471 /*
147
2f5a3b881ada updated for version 7.0046
vimboss
parents: 87
diff changeset
472 * Reset 'paste'. It's useful in the terminal, but not in the GUI. It
2f5a3b881ada updated for version 7.0046
vimboss
parents: 87
diff changeset
473 * breaks the Paste toolbar button.
2f5a3b881ada updated for version 7.0046
vimboss
parents: 87
diff changeset
474 */
2f5a3b881ada updated for version 7.0046
vimboss
parents: 87
diff changeset
475 set_option_value((char_u *)"paste", 0L, NULL, 0);
2f5a3b881ada updated for version 7.0046
vimboss
parents: 87
diff changeset
476
2f5a3b881ada updated for version 7.0046
vimboss
parents: 87
diff changeset
477 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
478 * Set up system-wide default menus.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
479 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
480 #if defined(SYS_MENU_FILE) && defined(FEAT_MENU)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
481 if (vim_strchr(p_go, GO_NOSYSMENU) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
482 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
483 sys_menu = TRUE;
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 811
diff changeset
484 do_source((char_u *)SYS_MENU_FILE, FALSE, DOSO_NONE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
485 sys_menu = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
486 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
487 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
488
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
489 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
490 * Switch on the mouse by default, unless the user changed it already.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
491 * This can then be changed in the .gvimrc.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
492 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
493 if (!option_was_set((char_u *)"mouse"))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
494 set_string_option_direct((char_u *)"mouse", -1,
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 691
diff changeset
495 (char_u *)"a", OPT_FREE, SID_NONE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
496
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
497 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
498 * If -U option given, use only the initializations from that file and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
499 * nothing else. Skip all initializations for "-U NONE" or "-u NORC".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
500 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
501 if (use_gvimrc != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
502 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
503 if (STRCMP(use_gvimrc, "NONE") != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
504 && STRCMP(use_gvimrc, "NORC") != 0
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 811
diff changeset
505 && do_source(use_gvimrc, FALSE, DOSO_NONE) != OK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
506 EMSG2(_("E230: Cannot read from \"%s\""), use_gvimrc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
507 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
508 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
509 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
510 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
511 * Get system wide defaults for gvim, only when file name defined.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
512 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
513 #ifdef SYS_GVIMRC_FILE
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 811
diff changeset
514 do_source((char_u *)SYS_GVIMRC_FILE, FALSE, DOSO_NONE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
515 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
516
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
517 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
518 * Try to read GUI initialization commands from the following
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
519 * places:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
520 * - environment variable GVIMINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
521 * - the user gvimrc file (~/.gvimrc)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
522 * - the second user gvimrc file ($VIM/.gvimrc for Dos)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
523 * - the third user gvimrc file ($VIM/.gvimrc for Amiga)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
524 * The first that exists is used, the rest is ignored.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
525 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
526 if (process_env((char_u *)"GVIMINIT", FALSE) == FAIL
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 811
diff changeset
527 && do_source((char_u *)USR_GVIMRC_FILE, TRUE,
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 811
diff changeset
528 DOSO_GVIMRC) == FAIL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
529 #ifdef USR_GVIMRC_FILE2
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 811
diff changeset
530 && do_source((char_u *)USR_GVIMRC_FILE2, TRUE,
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 811
diff changeset
531 DOSO_GVIMRC) == FAIL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
532 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
533 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
534 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
535 #ifdef USR_GVIMRC_FILE3
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 811
diff changeset
536 (void)do_source((char_u *)USR_GVIMRC_FILE3, TRUE, DOSO_GVIMRC);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
537 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
538 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
539
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
540 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
541 * Read initialization commands from ".gvimrc" in current
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
542 * directory. This is only done if the 'exrc' option is set.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
543 * Because of security reasons we disallow shell and write
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
544 * commands now, except for unix if the file is owned by the user
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
545 * or 'secure' option has been reset in environment of global
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
546 * ".gvimrc".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
547 * Only do this if GVIMRC_FILE is not the same as USR_GVIMRC_FILE,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
548 * USR_GVIMRC_FILE2, USR_GVIMRC_FILE3 or SYS_GVIMRC_FILE.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
549 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
550 if (p_exrc)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
551 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
552 #ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
553 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
554 struct stat s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
555
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
556 /* if ".gvimrc" file is not owned by user, set 'secure'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
557 * mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
558 if (mch_stat(GVIMRC_FILE, &s) || s.st_uid != getuid())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
559 secure = p_secure;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
560 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
561 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
562 secure = p_secure;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
563 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
564
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
565 if ( fullpathcmp((char_u *)USR_GVIMRC_FILE,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
566 (char_u *)GVIMRC_FILE, FALSE) != FPC_SAME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
567 #ifdef SYS_GVIMRC_FILE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
568 && fullpathcmp((char_u *)SYS_GVIMRC_FILE,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
569 (char_u *)GVIMRC_FILE, FALSE) != FPC_SAME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
570 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
571 #ifdef USR_GVIMRC_FILE2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
572 && fullpathcmp((char_u *)USR_GVIMRC_FILE2,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
573 (char_u *)GVIMRC_FILE, FALSE) != FPC_SAME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
574 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
575 #ifdef USR_GVIMRC_FILE3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
576 && fullpathcmp((char_u *)USR_GVIMRC_FILE3,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
577 (char_u *)GVIMRC_FILE, FALSE) != FPC_SAME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
578 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
579 )
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 811
diff changeset
580 do_source((char_u *)GVIMRC_FILE, TRUE, DOSO_GVIMRC);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
581
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
582 if (secure == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
583 need_wait_return = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
584 secure = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
585 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
586 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
587
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
588 if (need_wait_return || msg_didany)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
589 wait_return(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
590
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
591 --recursive;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
592 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
593
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
594 /* If recursive call opened the shell, return here from the first call */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
595 if (gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
596 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
597
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
598 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
599 * Create the GUI shell.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
600 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
601 gui.in_use = TRUE; /* Must be set after menus have been set up */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
602 if (gui_mch_init() == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
603 goto error;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
604
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
605 /* Avoid a delay for an error message that was printed in the terminal
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
606 * where Vim was started. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
607 emsg_on_display = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
608 msg_scrolled = 0;
446
7472c565592a updated for version 7.0117
vimboss
parents: 444
diff changeset
609 clear_sb_text();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
610 need_wait_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
611 msg_didany = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
614 * Check validity of any generic resources that may have been loaded.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
615 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
616 if (gui.border_width < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
617 gui.border_width = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
618
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
619 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
620 * Set up the fonts. First use a font specified with "-fn" or "-font".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
621 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
622 if (font_argument != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
623 set_option_value((char_u *)"gfn", 0L, (char_u *)font_argument, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
624 if (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
625 #ifdef FEAT_XFONTSET
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
626 (*p_guifontset == NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
627 || gui_init_font(p_guifontset, TRUE) == FAIL) &&
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
628 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
629 gui_init_font(*p_guifont == NUL ? hl_get_font_name()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
630 : p_guifont, FALSE) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
631 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
632 EMSG(_("E665: Cannot start GUI, no valid font found"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
633 goto error2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
634 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
635 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
636 if (gui_get_wide_font() == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
637 EMSG(_("E231: 'guifontwide' invalid"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
638 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
639
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
640 gui.num_cols = Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
641 gui.num_rows = Rows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
642 gui_reset_scroll_region();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
643
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
644 /* Create initial scrollbars */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
645 FOR_ALL_WINDOWS(wp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
646 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
647 gui_create_scrollbar(&wp->w_scrollbars[SBAR_LEFT], SBAR_LEFT, wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
648 gui_create_scrollbar(&wp->w_scrollbars[SBAR_RIGHT], SBAR_RIGHT, wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
649 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
650 gui_create_scrollbar(&gui.bottom_sbar, SBAR_BOTTOM, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
651
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
652 #ifdef FEAT_MENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
653 gui_create_initial_menus(root_menu);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
654 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
655 #ifdef FEAT_SUN_WORKSHOP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
656 if (usingSunWorkShop)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
657 workshop_init();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
658 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
659 #ifdef FEAT_SIGN_ICONS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
660 sign_gui_started();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
661 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
662
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
663 /* Configure the desired menu and scrollbars */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
664 gui_init_which_components(NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
665
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
666 /* All components of the GUI have been created now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
667 gui.shell_created = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
668
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
669 #ifndef FEAT_GUI_GTK
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
670 /* Set the shell size, adjusted for the screen size. For GTK this only
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
671 * works after the shell has been opened, thus it is further down. */
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
672 gui_set_shellsize(FALSE, TRUE, RESIZE_BOTH);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
673 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
674 #if defined(FEAT_GUI_MOTIF) && defined(FEAT_MENU)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
675 /* Need to set the size of the menubar after all the menus have been
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
676 * created. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
677 gui_mch_compute_menu_height((Widget)0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
678 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
679
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
680 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
681 * Actually open the GUI shell.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
682 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
683 if (gui_mch_open() != FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
684 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
685 #ifdef FEAT_TITLE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
686 maketitle();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
687 resettitle();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
688 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
689 init_gui_options();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
690 #ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
691 /* Our GUI can't do bidi. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
692 p_tbidi = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
693 #endif
574
25a70b1cd2da updated for version 7.0163
vimboss
parents: 540
diff changeset
694 #if defined(FEAT_GUI_GTK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
695 /* Give GTK+ a chance to put all widget's into place. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
696 gui_mch_update();
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 825
diff changeset
697
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 825
diff changeset
698 # ifdef FEAT_MENU
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 825
diff changeset
699 /* If there is no 'm' in 'guioptions' we need to remove the menu now.
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 825
diff changeset
700 * It was still there to make F10 work. */
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 825
diff changeset
701 if (vim_strchr(p_go, GO_MENUS) == NULL)
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 825
diff changeset
702 {
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 825
diff changeset
703 --gui.starting;
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 825
diff changeset
704 gui_mch_enable_menu(FALSE);
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 825
diff changeset
705 ++gui.starting;
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 825
diff changeset
706 gui_mch_update();
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 825
diff changeset
707 }
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 825
diff changeset
708 # endif
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 825
diff changeset
709
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
710 /* Now make sure the shell fits on the screen. */
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
711 gui_set_shellsize(FALSE, TRUE, RESIZE_BOTH);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
712 #endif
261
2a5dcaea719a updated for version 7.0071
vimboss
parents: 236
diff changeset
713 /* When 'lines' was set while starting up the topframe may have to be
2a5dcaea719a updated for version 7.0071
vimboss
parents: 236
diff changeset
714 * resized. */
2a5dcaea719a updated for version 7.0071
vimboss
parents: 236
diff changeset
715 win_new_shellsize();
187
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
716
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
717 #ifdef FEAT_BEVAL
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
718 /* Always create the Balloon Evaluation area, but disable it when
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
719 * 'ballooneval' is off */
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
720 # ifdef FEAT_GUI_GTK
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
721 balloonEval = gui_mch_create_beval_area(gui.drawarea, NULL,
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
722 &general_beval_cb, NULL);
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
723 # else
216
da182deebec7 updated for version 7.0061
vimboss
parents: 203
diff changeset
724 # if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)
187
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
725 {
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
726 extern Widget textArea;
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
727 balloonEval = gui_mch_create_beval_area(textArea, NULL,
216
da182deebec7 updated for version 7.0061
vimboss
parents: 203
diff changeset
728 &general_beval_cb, NULL);
187
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
729 }
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
730 # else
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
731 # ifdef FEAT_GUI_W32
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
732 balloonEval = gui_mch_create_beval_area(NULL, NULL,
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
733 &general_beval_cb, NULL);
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
734 # endif
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
735 # endif
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
736 # endif
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
737 if (!p_beval)
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
738 gui_mch_disable_beval_area(balloonEval);
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
739 #endif
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
740
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
741 #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
742 if (!im_xim_isvalid_imactivate())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
743 EMSG(_("E599: Value of 'imactivatekey' is invalid"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
744 #endif
37
fdf55076c53f updated for version 7.0022
vimboss
parents: 28
diff changeset
745 /* When 'cmdheight' was set during startup it may not have taken
fdf55076c53f updated for version 7.0022
vimboss
parents: 28
diff changeset
746 * effect yet. */
fdf55076c53f updated for version 7.0022
vimboss
parents: 28
diff changeset
747 if (p_ch != 1L)
824
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
748 command_height();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
749
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
750 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
751 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
752
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
753 error2:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
754 #ifdef FEAT_GUI_X11
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
755 /* undo gui_mch_init() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
756 gui_mch_uninit();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
757 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
758
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
759 error:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
760 gui.in_use = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
761 clip_init(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
762 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
763
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
764
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
765 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
766 gui_exit(rc)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
767 int rc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
768 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
769 #ifndef __BEOS__
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
770 /* don't free the fonts, it leads to a BUS error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
771 * richard@whitequeen.com Jul 99 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
772 free_highlight_fonts();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
773 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
774 gui.in_use = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
775 gui_mch_exit(rc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
776 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
777
574
25a70b1cd2da updated for version 7.0163
vimboss
parents: 540
diff changeset
778 #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11) || defined(FEAT_GUI_MSWIN) \
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
779 || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC) || defined(PROTO)
1002
41ab6b381572 updated for version 7.0-128
vimboss
parents: 995
diff changeset
780 # define NEED_GUI_UPDATE_SCREEN 1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
781 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
782 * Called when the GUI shell is closed by the user. If there are no changed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
783 * files Vim exits, otherwise there will be a dialog to ask the user what to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
784 * do.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
785 * When this function returns, Vim should NOT exit!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
786 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
787 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
788 gui_shell_closed()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
789 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
790 cmdmod_T save_cmdmod;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
791
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
792 save_cmdmod = cmdmod;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
793
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
794 /* Only exit when there are no changed files */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
795 exiting = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
796 # ifdef FEAT_BROWSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
797 cmdmod.browse = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
798 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
799 # if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
800 cmdmod.confirm = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
801 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
802 /* If there are changed buffers, present the user with a dialog if
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
803 * possible, otherwise give an error message. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
804 if (!check_changed_any(FALSE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
805 getout(0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
806
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
807 exiting = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
808 cmdmod = save_cmdmod;
1002
41ab6b381572 updated for version 7.0-128
vimboss
parents: 995
diff changeset
809 gui_update_screen(); /* redraw, window may show changed buffer */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
810 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
811 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
812
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
813 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
814 * Set the font. "font_list" is a a comma separated list of font names. The
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
815 * first font name that works is used. If none is found, use the default
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
816 * font.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
817 * If "fontset" is TRUE, the "font_list" is used as one name for the fontset.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
818 * Return OK when able to set the font. When it failed FAIL is returned and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
819 * the fonts are unchanged.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
820 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
821 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
822 gui_init_font(font_list, fontset)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
823 char_u *font_list;
1884
3dd986bfef63 updated for version 7.2-181
vimboss
parents: 1767
diff changeset
824 int fontset UNUSED;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
825 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
826 #define FONTLEN 320
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
827 char_u font_name[FONTLEN];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
828 int font_list_empty = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
829 int ret = FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
830
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
831 if (!gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
832 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
833
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
834 font_name[0] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
835 if (*font_list == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
836 font_list_empty = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
837 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
838 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
839 #ifdef FEAT_XFONTSET
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
840 /* When using a fontset, the whole list of fonts is one name. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
841 if (fontset)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
842 ret = gui_mch_init_font(font_list, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
843 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
844 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
845 while (*font_list != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
846 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
847 /* Isolate one comma separated font name. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
848 (void)copy_option_part(&font_list, font_name, FONTLEN, ",");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
849
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
850 /* Careful!!! The Win32 version of gui_mch_init_font(), when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
851 * called with "*" will change p_guifont to the selected font
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
852 * name, which frees the old value. This makes font_list
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
853 * invalid. Thus when OK is returned here, font_list must no
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
854 * longer be used! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
855 if (gui_mch_init_font(font_name, FALSE) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
856 {
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
857 #if defined(FEAT_MBYTE) && !defined(FEAT_GUI_GTK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
858 /* If it's a Unicode font, try setting 'guifontwide' to a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
859 * similar double-width font. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
860 if ((p_guifontwide == NULL || *p_guifontwide == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
861 && strstr((char *)font_name, "10646") != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
862 set_guifontwide(font_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
863 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
864 ret = OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
865 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
866 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
867 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
868 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
869
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
870 if (ret != OK
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
871 && STRCMP(font_list, "*") != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
872 && (font_list_empty || gui.norm_font == NOFONT))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
873 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
874 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
875 * Couldn't load any font in 'font_list', keep the current font if
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
876 * there is one. If 'font_list' is empty, or if there is no current
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
877 * font, tell gui_mch_init_font() to try to find a font we can load.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
878 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
879 ret = gui_mch_init_font(NULL, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
880 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
881
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
882 if (ret == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
883 {
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
884 #ifndef FEAT_GUI_GTK
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
885 /* Set normal font as current font */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
886 # ifdef FEAT_XFONTSET
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
887 if (gui.fontset != NOFONTSET)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
888 gui_mch_set_fontset(gui.fontset);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
889 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
890 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
891 gui_mch_set_font(gui.norm_font);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
892 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
893 gui_set_shellsize(FALSE,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
894 #ifdef MSWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
895 TRUE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
896 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
897 FALSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
898 #endif
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
899 , RESIZE_BOTH);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
900 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
901
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
902 return ret;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
903 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
904
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
905 #if defined(FEAT_MBYTE) || defined(PROTO)
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
906 # ifndef FEAT_GUI_GTK
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
907 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
908 * Try setting 'guifontwide' to a font twice as wide as "name".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
909 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
910 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
911 set_guifontwide(name)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
912 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
913 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
914 int i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
915 char_u wide_name[FONTLEN + 10]; /* room for 2 * width and '*' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
916 char_u *wp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
917 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
918 GuiFont font;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
919
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
920 wp = wide_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
921 for (p = name; *p != NUL; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
922 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
923 *wp++ = *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
924 if (*p == '-')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
925 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
926 ++i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
927 if (i == 6) /* font type: change "--" to "-*-" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
928 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
929 if (p[1] == '-')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
930 *wp++ = '*';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
931 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
932 else if (i == 12) /* found the width */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
933 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
934 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
935 i = getdigits(&p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
936 if (i != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
937 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
938 /* Double the width specification. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
939 sprintf((char *)wp, "%d%s", i * 2, p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
940 font = gui_mch_get_font(wide_name, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
941 if (font != NOFONT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
942 {
37
fdf55076c53f updated for version 7.0022
vimboss
parents: 28
diff changeset
943 gui_mch_free_font(gui.wide_font);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
944 gui.wide_font = font;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
945 set_string_option_direct((char_u *)"gfw", -1,
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 691
diff changeset
946 wide_name, OPT_FREE, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
947 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
948 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
949 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
950 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
951 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
952 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
953 }
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
954 # endif /* !FEAT_GUI_GTK */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
955
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
956 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
957 * Get the font for 'guifontwide'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
958 * Return FAIL for an invalid font name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
959 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
960 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
961 gui_get_wide_font()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
962 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
963 GuiFont font = NOFONT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
964 char_u font_name[FONTLEN];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
965 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
966
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
967 if (!gui.in_use) /* Can't allocate font yet, assume it's OK. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
968 return OK; /* Will give an error message later. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
969
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
970 if (p_guifontwide != NULL && *p_guifontwide != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
971 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
972 for (p = p_guifontwide; *p != NUL; )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
973 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
974 /* Isolate one comma separated font name. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
975 (void)copy_option_part(&p, font_name, FONTLEN, ",");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
976 font = gui_mch_get_font(font_name, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
977 if (font != NOFONT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
978 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
979 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
980 if (font == NOFONT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
981 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
982 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
983
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
984 gui_mch_free_font(gui.wide_font);
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
985 #ifdef FEAT_GUI_GTK
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
986 /* Avoid unnecessary overhead if 'guifontwide' is equal to 'guifont'. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
987 if (font != NOFONT && gui.norm_font != NOFONT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
988 && pango_font_description_equal(font, gui.norm_font))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
989 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
990 gui.wide_font = NOFONT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
991 gui_mch_free_font(font);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
992 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
993 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
994 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
995 gui.wide_font = font;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
996 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
997 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
998 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
999
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1000 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1001 gui_set_cursor(row, col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1002 int row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1003 int col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1004 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1005 gui.row = row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1006 gui.col = col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1007 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1008
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1009 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1010 * gui_check_pos - check if the cursor is on the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1011 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1012 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1013 gui_check_pos()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1014 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1015 if (gui.row >= screen_Rows)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1016 gui.row = screen_Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1017 if (gui.col >= screen_Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1018 gui.col = screen_Columns - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1019 if (gui.cursor_row >= screen_Rows || gui.cursor_col >= screen_Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1020 gui.cursor_is_valid = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1021 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1022
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1023 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1024 * Redraw the cursor if necessary or when forced.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1025 * Careful: The contents of ScreenLines[] must match what is on the screen,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1026 * otherwise this goes wrong. May need to call out_flush() first.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1027 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1028 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1029 gui_update_cursor(force, clear_selection)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1030 int force; /* when TRUE, update even when not moved */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1031 int clear_selection;/* clear selection under cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1032 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1033 int cur_width = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1034 int cur_height = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1035 int old_hl_mask;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1036 int idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1037 int id;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1038 guicolor_T cfg, cbg, cc; /* cursor fore-/background color */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1039 int cattr; /* cursor attributes */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1040 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1041 attrentry_T *aep = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1042
1695
0dbc46d14443 updated for version 7.2b-028
vimboss
parents: 1668
diff changeset
1043 /* Don't update the cursor when halfway busy scrolling or the screen size
0dbc46d14443 updated for version 7.2b-028
vimboss
parents: 1668
diff changeset
1044 * doesn't match 'columns' and 'lines. ScreenLines[] isn't valid then. */
0dbc46d14443 updated for version 7.2b-028
vimboss
parents: 1668
diff changeset
1045 if (!can_update_cursor || screen_Columns != gui.num_cols
0dbc46d14443 updated for version 7.2b-028
vimboss
parents: 1668
diff changeset
1046 || screen_Rows != gui.num_rows)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1047 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1048
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1049 gui_check_pos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1050 if (!gui.cursor_is_valid || force
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1051 || gui.row != gui.cursor_row || gui.col != gui.cursor_col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1052 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1053 gui_undraw_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1054 if (gui.row < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1055 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1056 #ifdef USE_IM_CONTROL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1057 if (gui.row != gui.cursor_row || gui.col != gui.cursor_col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1058 im_set_position(gui.row, gui.col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1059 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1060 gui.cursor_row = gui.row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1061 gui.cursor_col = gui.col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1062
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1063 /* Only write to the screen after ScreenLines[] has been initialized */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1064 if (!screen_cleared || ScreenLines == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1065 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1066
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1067 /* Clear the selection if we are about to write over it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1068 if (clear_selection)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1069 clip_may_clear_selection(gui.row, gui.row);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1070 /* Check that the cursor is inside the shell (resizing may have made
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1071 * it invalid) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1072 if (gui.row >= screen_Rows || gui.col >= screen_Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1073 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1074
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1075 gui.cursor_is_valid = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1076
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1077 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1078 * How the cursor is drawn depends on the current mode.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1079 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1080 idx = get_shape_idx(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1081 if (State & LANGMAP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1082 id = shape_table[idx].id_lm;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1083 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1084 id = shape_table[idx].id;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1085
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1086 /* get the colors and attributes for the cursor. Default is inverted */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1087 cfg = INVALCOLOR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1088 cbg = INVALCOLOR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1089 cattr = HL_INVERSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1090 gui_mch_set_blinking(shape_table[idx].blinkwait,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1091 shape_table[idx].blinkon,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1092 shape_table[idx].blinkoff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1093 if (id > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1094 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1095 cattr = syn_id2colors(id, &cfg, &cbg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1096 #if defined(USE_IM_CONTROL) || defined(FEAT_HANGULIN)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1097 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1098 static int iid;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1099 guicolor_T fg, bg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1100
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1620
diff changeset
1101 if (
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
1102 # if defined(FEAT_GUI_GTK) && !defined(FEAT_HANGULIN)
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1620
diff changeset
1103 preedit_get_status()
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1620
diff changeset
1104 # else
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1620
diff changeset
1105 im_get_status()
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1620
diff changeset
1106 # endif
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1620
diff changeset
1107 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1108 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1109 iid = syn_name2id((char_u *)"CursorIM");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1110 if (iid > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1111 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1112 syn_id2colors(iid, &fg, &bg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1113 if (bg != INVALCOLOR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1114 cbg = bg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1115 if (fg != INVALCOLOR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1116 cfg = fg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1117 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1118 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1119 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1120 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1121 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1122
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1123 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1124 * Get the attributes for the character under the cursor.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1125 * When no cursor color was given, use the character color.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1126 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1127 attr = ScreenAttrs[LineOffset[gui.row] + gui.col];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1128 if (attr > HL_ALL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1129 aep = syn_gui_attr2entry(attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1130 if (aep != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1131 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1132 attr = aep->ae_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1133 if (cfg == INVALCOLOR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1134 cfg = ((attr & HL_INVERSE) ? aep->ae_u.gui.bg_color
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1135 : aep->ae_u.gui.fg_color);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1136 if (cbg == INVALCOLOR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1137 cbg = ((attr & HL_INVERSE) ? aep->ae_u.gui.fg_color
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1138 : aep->ae_u.gui.bg_color);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1139 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1140 if (cfg == INVALCOLOR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1141 cfg = (attr & HL_INVERSE) ? gui.back_pixel : gui.norm_pixel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1142 if (cbg == INVALCOLOR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1143 cbg = (attr & HL_INVERSE) ? gui.norm_pixel : gui.back_pixel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1144
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1145 #ifdef FEAT_XIM
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1146 if (aep != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1147 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1148 xim_bg_color = ((attr & HL_INVERSE) ? aep->ae_u.gui.fg_color
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1149 : aep->ae_u.gui.bg_color);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1150 xim_fg_color = ((attr & HL_INVERSE) ? aep->ae_u.gui.bg_color
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1151 : aep->ae_u.gui.fg_color);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1152 if (xim_bg_color == INVALCOLOR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1153 xim_bg_color = (attr & HL_INVERSE) ? gui.norm_pixel
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1154 : gui.back_pixel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1155 if (xim_fg_color == INVALCOLOR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1156 xim_fg_color = (attr & HL_INVERSE) ? gui.back_pixel
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1157 : gui.norm_pixel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1158 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1159 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1160 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1161 xim_bg_color = (attr & HL_INVERSE) ? gui.norm_pixel
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1162 : gui.back_pixel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1163 xim_fg_color = (attr & HL_INVERSE) ? gui.back_pixel
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1164 : gui.norm_pixel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1165 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1166 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1167
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1168 attr &= ~HL_INVERSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1169 if (cattr & HL_INVERSE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1170 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1171 cc = cbg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1172 cbg = cfg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1173 cfg = cc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1174 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1175 cattr &= ~HL_INVERSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1176
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1177 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1178 * When we don't have window focus, draw a hollow cursor.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1179 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1180 if (!gui.in_focus)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1181 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1182 gui_mch_draw_hollow_cursor(cbg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1183 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1184 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1185
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1186 old_hl_mask = gui.highlight_mask;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1187 if (shape_table[idx].shape == SHAPE_BLOCK
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1188 #ifdef FEAT_HANGULIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1189 || composing_hangul
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1190 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1191 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1192 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1193 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1194 * Draw the text character with the cursor colors. Use the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1195 * character attributes plus the cursor attributes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1196 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1197 gui.highlight_mask = (cattr | attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1198 #ifdef FEAT_HANGULIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1199 if (composing_hangul)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1200 (void)gui_outstr_nowrap(composing_hangul_buffer, 2,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1201 GUI_MON_IS_CURSOR | GUI_MON_NOCLEAR, cfg, cbg, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1202 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1203 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1204 (void)gui_screenchar(LineOffset[gui.row] + gui.col,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1205 GUI_MON_IS_CURSOR | GUI_MON_NOCLEAR, cfg, cbg, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1206 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1207 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1208 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1209 #if defined(FEAT_MBYTE) && defined(FEAT_RIGHTLEFT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1210 int col_off = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1211 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1212 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1213 * First draw the partial cursor, then overwrite with the text
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1214 * character, using a transparent background.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1215 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1216 if (shape_table[idx].shape == SHAPE_VER)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1217 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1218 cur_height = gui.char_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1219 cur_width = (gui.char_width * shape_table[idx].percentage
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1220 + 99) / 100;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1221 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1222 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1223 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1224 cur_height = (gui.char_height * shape_table[idx].percentage
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1225 + 99) / 100;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1226 cur_width = gui.char_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1227 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1228 #ifdef FEAT_MBYTE
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1364
diff changeset
1229 if (has_mbyte && (*mb_off2cells)(LineOffset[gui.row] + gui.col,
a4365075d05c updated for version 7.1-093
vimboss
parents: 1364
diff changeset
1230 LineOffset[gui.row] + screen_Columns) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1231 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1232 /* Double wide character. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1233 if (shape_table[idx].shape != SHAPE_VER)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1234 cur_width += gui.char_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1235 # ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1236 if (CURSOR_BAR_RIGHT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1237 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1238 /* gui.col points to the left halve of the character but
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1239 * the vertical line needs to be on the right halve.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1240 * A double-wide horizontal line is also drawn from the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1241 * right halve in gui_mch_draw_part_cursor(). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1242 col_off = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1243 ++gui.col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1244 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1245 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1246 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1247 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1248 gui_mch_draw_part_cursor(cur_width, cur_height, cbg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1249 #if defined(FEAT_MBYTE) && defined(FEAT_RIGHTLEFT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1250 if (col_off)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1251 --gui.col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1252 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1253
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1254 #ifndef FEAT_GUI_MSWIN /* doesn't seem to work for MSWindows */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1255 gui.highlight_mask = ScreenAttrs[LineOffset[gui.row] + gui.col];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1256 (void)gui_screenchar(LineOffset[gui.row] + gui.col,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1257 GUI_MON_TRS_CURSOR | GUI_MON_NOCLEAR,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1258 (guicolor_T)0, (guicolor_T)0, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1259 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1260 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1261 gui.highlight_mask = old_hl_mask;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1262 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1263 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1264
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1265 #if defined(FEAT_MENU) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1266 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1267 gui_position_menu()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1268 {
574
25a70b1cd2da updated for version 7.0163
vimboss
parents: 540
diff changeset
1269 # if !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_MOTIF)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1270 if (gui.menu_is_active && gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1271 gui_mch_set_menu_pos(0, 0, gui.menu_width, gui.menu_height);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1272 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1273 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1274 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1275
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1276 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1277 * Position the various GUI components (text area, menu). The vertical
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1278 * scrollbars are NOT handled here. See gui_update_scrollbars().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1279 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1280 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1281 gui_position_components(total_width)
1884
3dd986bfef63 updated for version 7.2-181
vimboss
parents: 1767
diff changeset
1282 int total_width UNUSED;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1283 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1284 int text_area_x;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1285 int text_area_y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1286 int text_area_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1287 int text_area_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1288
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1289 /* avoid that moving components around generates events */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1290 ++hold_gui_events;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1291
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1292 text_area_x = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1293 if (gui.which_scrollbars[SBAR_LEFT])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1294 text_area_x += gui.scrollbar_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1295
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1296 text_area_y = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1297 #if defined(FEAT_MENU) && !(defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1298 gui.menu_width = total_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1299 if (gui.menu_is_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1300 text_area_y += gui.menu_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1301 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1302 #if defined(FEAT_TOOLBAR) && defined(FEAT_GUI_MSWIN)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1303 if (vim_strchr(p_go, GO_TOOLBAR) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1304 text_area_y = TOOLBAR_BUTTON_HEIGHT + TOOLBAR_BORDER_HEIGHT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1305 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1306
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 811
diff changeset
1307 # if defined(FEAT_GUI_TABLINE) && (defined(FEAT_GUI_MSWIN) \
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1364
diff changeset
1308 || defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_MAC))
810
9f345c48220b updated for version 7.0c
vimboss
parents: 797
diff changeset
1309 if (gui_has_tabline())
843
9f279ebda751 updated for version 7.0f01
vimboss
parents: 839
diff changeset
1310 text_area_y += gui.tabline_height;
810
9f345c48220b updated for version 7.0c
vimboss
parents: 797
diff changeset
1311 #endif
9f345c48220b updated for version 7.0c
vimboss
parents: 797
diff changeset
1312
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1313 #if defined(FEAT_TOOLBAR) && (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1314 if (vim_strchr(p_go, GO_TOOLBAR) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1315 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1316 # ifdef FEAT_GUI_ATHENA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1317 gui_mch_set_toolbar_pos(0, text_area_y,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1318 gui.menu_width, gui.toolbar_height);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1319 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1320 text_area_y += gui.toolbar_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1321 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1322 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1323
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1324 text_area_width = gui.num_cols * gui.char_width + gui.border_offset * 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1325 text_area_height = gui.num_rows * gui.char_height + gui.border_offset * 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1326
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1327 gui_mch_set_text_area_pos(text_area_x,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1328 text_area_y,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1329 text_area_width,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1330 text_area_height
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
1331 #if defined(FEAT_XIM) && !defined(FEAT_GUI_GTK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1332 + xim_get_status_area_height()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1333 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1334 );
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1335 #ifdef FEAT_MENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1336 gui_position_menu();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1337 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1338 if (gui.which_scrollbars[SBAR_BOTTOM])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1339 gui_mch_set_scrollbar_pos(&gui.bottom_sbar,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1340 text_area_x,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1341 text_area_y + text_area_height,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1342 text_area_width,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1343 gui.scrollbar_height);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1344 gui.left_sbar_x = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1345 gui.right_sbar_x = text_area_x + text_area_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1346
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1347 --hold_gui_events;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1348 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1349
444
d0d15b184c56 updated for version 7.0116
vimboss
parents: 377
diff changeset
1350 /*
d0d15b184c56 updated for version 7.0116
vimboss
parents: 377
diff changeset
1351 * Get the width of the widgets and decorations to the side of the text area.
d0d15b184c56 updated for version 7.0116
vimboss
parents: 377
diff changeset
1352 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1353 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1354 gui_get_base_width()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1355 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1356 int base_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1357
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1358 base_width = 2 * gui.border_offset;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1359 if (gui.which_scrollbars[SBAR_LEFT])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1360 base_width += gui.scrollbar_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1361 if (gui.which_scrollbars[SBAR_RIGHT])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1362 base_width += gui.scrollbar_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1363 return base_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1364 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1365
444
d0d15b184c56 updated for version 7.0116
vimboss
parents: 377
diff changeset
1366 /*
d0d15b184c56 updated for version 7.0116
vimboss
parents: 377
diff changeset
1367 * Get the height of the widgets and decorations above and below the text area.
d0d15b184c56 updated for version 7.0116
vimboss
parents: 377
diff changeset
1368 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1369 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1370 gui_get_base_height()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1371 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1372 int base_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1373
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1374 base_height = 2 * gui.border_offset;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1375 if (gui.which_scrollbars[SBAR_BOTTOM])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1376 base_height += gui.scrollbar_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1377 #ifdef FEAT_GUI_GTK
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1378 /* We can't take the sizes properly into account until anything is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1379 * realized. Therefore we recalculate all the values here just before
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1380 * setting the size. (--mdcki) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1381 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1382 # ifdef FEAT_MENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1383 if (gui.menu_is_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1384 base_height += gui.menu_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1385 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1386 # ifdef FEAT_TOOLBAR
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1387 if (vim_strchr(p_go, GO_TOOLBAR) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1388 # if defined(FEAT_GUI_MSWIN) && defined(FEAT_TOOLBAR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1389 base_height += (TOOLBAR_BUTTON_HEIGHT + TOOLBAR_BORDER_HEIGHT);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1390 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1391 base_height += gui.toolbar_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1392 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1393 # endif
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 811
diff changeset
1394 # if defined(FEAT_GUI_TABLINE) && (defined(FEAT_GUI_MSWIN) \
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 811
diff changeset
1395 || defined(FEAT_GUI_MOTIF))
810
9f345c48220b updated for version 7.0c
vimboss
parents: 797
diff changeset
1396 if (gui_has_tabline())
843
9f279ebda751 updated for version 7.0f01
vimboss
parents: 839
diff changeset
1397 base_height += gui.tabline_height;
810
9f345c48220b updated for version 7.0c
vimboss
parents: 797
diff changeset
1398 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1399 # ifdef FEAT_FOOTER
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1400 if (vim_strchr(p_go, GO_FOOTER) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1401 base_height += gui.footer_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1402 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1403 # if defined(FEAT_GUI_MOTIF) && defined(FEAT_MENU)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1404 base_height += gui_mch_text_area_extra_height();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1405 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1406 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1407 return base_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1408 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1409
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1410 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1411 * Should be called after the GUI shell has been resized. Its arguments are
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1412 * the new width and height of the shell in pixels.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1413 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1414 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1415 gui_resize_shell(pixel_width, pixel_height)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1416 int pixel_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1417 int pixel_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1418 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1419 static int busy = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1420
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1421 if (!gui.shell_created) /* ignore when still initializing */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1422 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1423
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1424 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1425 * Can't resize the screen while it is being redrawn. Remember the new
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1426 * size and handle it later.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1427 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1428 if (updating_screen || busy)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1429 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1430 new_pixel_width = pixel_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1431 new_pixel_height = pixel_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1432 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1433 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1434
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1435 again:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1436 busy = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1437
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1438 /* Flush pending output before redrawing */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1439 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1440
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1441 gui.num_cols = (pixel_width - gui_get_base_width()) / gui.char_width;
1529
4353593fc2c0 updated for version 7.1-244
vimboss
parents: 1521
diff changeset
1442 gui.num_rows = (pixel_height - gui_get_base_height()) / gui.char_height;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1443
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1444 gui_position_components(pixel_width);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1445
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1446 gui_reset_scroll_region();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1447 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1448 * At the "more" and ":confirm" prompt there is no redraw, put the cursor
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1449 * at the last line here (why does it have to be one row too low?).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1450 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1451 if (State == ASKMORE || State == CONFIRM)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1452 gui.row = gui.num_rows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1453
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1454 /* Only comparing Rows and Columns may be sufficient, but let's stay on
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1455 * the safe side. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1456 if (gui.num_rows != screen_Rows || gui.num_cols != screen_Columns
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1457 || gui.num_rows != Rows || gui.num_cols != Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1458 shell_resized();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1459
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1460 gui_update_scrollbars(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1461 gui_update_cursor(FALSE, TRUE);
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
1462 #if defined(FEAT_XIM) && !defined(FEAT_GUI_GTK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1463 xim_set_status_area();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1464 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1465
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1466 busy = FALSE;
669
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
1467
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1468 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1469 * We could have been called again while redrawing the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1470 * Need to do it all again with the latest size then.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1471 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1472 if (new_pixel_height)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1473 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1474 pixel_width = new_pixel_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1475 pixel_height = new_pixel_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1476 new_pixel_width = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1477 new_pixel_height = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1478 goto again;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1479 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1480 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1481
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1482 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1483 * Check if gui_resize_shell() must be called.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1484 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1485 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1486 gui_may_resize_shell()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1487 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1488 int h, w;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1489
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1490 if (new_pixel_height)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1491 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1492 /* careful: gui_resize_shell() may postpone the resize again if we
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1493 * were called indirectly by it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1494 w = new_pixel_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1495 h = new_pixel_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1496 new_pixel_width = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1497 new_pixel_height = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1498 gui_resize_shell(w, h);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1499 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1500 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1501
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1502 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1503 gui_get_shellsize()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1504 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1505 Rows = gui.num_rows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1506 Columns = gui.num_cols;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1507 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1508 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1509
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1510 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1511 * Set the size of the Vim shell according to Rows and Columns.
444
d0d15b184c56 updated for version 7.0116
vimboss
parents: 377
diff changeset
1512 * If "fit_to_display" is TRUE then the size may be reduced to fit the window
d0d15b184c56 updated for version 7.0116
vimboss
parents: 377
diff changeset
1513 * on the screen.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1514 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1515 void
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
1516 gui_set_shellsize(mustset, fit_to_display, direction)
1884
3dd986bfef63 updated for version 7.2-181
vimboss
parents: 1767
diff changeset
1517 int mustset UNUSED; /* set by the user */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1518 int fit_to_display;
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
1519 int direction; /* RESIZE_HOR, RESIZE_VER */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1520 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1521 int base_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1522 int base_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1523 int width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1524 int height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1525 int min_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1526 int min_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1527 int screen_w;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1528 int screen_h;
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
1529 #ifdef FEAT_GUI_GTK
1967
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1530 int un_maximize = mustset;
2311
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2282
diff changeset
1531 int did_adjust = 0;
1967
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1532 #endif
2065
9b78bb3794ba updated for version 7.2.350
Bram Moolenaar <bram@zimbu.org>
parents: 1967
diff changeset
1533 int x = -1, y = -1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1534
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1535 if (!gui.shell_created)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1536 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1537
3014
342b17608967 updated for version 7.3.279
Bram Moolenaar <bram@vim.org>
parents: 2923
diff changeset
1538 #if defined(MSWIN) || defined(FEAT_GUI_GTK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1539 /* If not setting to a user specified size and maximized, calculate the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1540 * number of characters that fit in the maximized window. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1541 if (!mustset && gui_mch_maximized())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1542 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1543 gui_mch_newfont();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1544 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1545 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1546 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1547
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1548 base_width = gui_get_base_width();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1549 base_height = gui_get_base_height();
2065
9b78bb3794ba updated for version 7.2.350
Bram Moolenaar <bram@zimbu.org>
parents: 1967
diff changeset
1550 if (fit_to_display)
9b78bb3794ba updated for version 7.2.350
Bram Moolenaar <bram@zimbu.org>
parents: 1967
diff changeset
1551 /* Remember the original window position. */
9b78bb3794ba updated for version 7.2.350
Bram Moolenaar <bram@zimbu.org>
parents: 1967
diff changeset
1552 gui_mch_get_winpos(&x, &y);
9b78bb3794ba updated for version 7.2.350
Bram Moolenaar <bram@zimbu.org>
parents: 1967
diff changeset
1553
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1554 #ifdef USE_SUN_WORKSHOP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1555 if (!mustset && usingSunWorkShop
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1556 && workshop_get_width_height(&width, &height))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1557 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1558 Columns = (width - base_width + gui.char_width - 1) / gui.char_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1559 Rows = (height - base_height + gui.char_height - 1) / gui.char_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1560 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1561 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1562 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1563 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1564 width = Columns * gui.char_width + base_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1565 height = Rows * gui.char_height + base_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1566 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1567
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1568 if (fit_to_display)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1569 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1570 gui_mch_get_screen_dimensions(&screen_w, &screen_h);
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
1571 if ((direction & RESIZE_HOR) && width > screen_w)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1572 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1573 Columns = (screen_w - base_width) / gui.char_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1574 if (Columns < MIN_COLUMNS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1575 Columns = MIN_COLUMNS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1576 width = Columns * gui.char_width + base_width;
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
1577 #ifdef FEAT_GUI_GTK
1967
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1578 ++did_adjust;
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1579 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1580 }
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
1581 if ((direction & RESIZE_VERT) && height > screen_h)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1582 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1583 Rows = (screen_h - base_height) / gui.char_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1584 check_shellsize();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1585 height = Rows * gui.char_height + base_height;
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
1586 #ifdef FEAT_GUI_GTK
1967
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1587 ++did_adjust;
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1588 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1589 }
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
1590 #ifdef FEAT_GUI_GTK
1967
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1591 if (did_adjust == 2 || (width + gui.char_width >= screen_w
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1592 && height + gui.char_height >= screen_h))
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1593 /* don't unmaximize if at maximum size */
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1594 un_maximize = FALSE;
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1595 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1596 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1597 gui.num_cols = Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1598 gui.num_rows = Rows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1599
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1600 min_width = base_width + MIN_COLUMNS * gui.char_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1601 min_height = base_height + MIN_LINES * gui.char_height;
1967
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1602 #ifdef FEAT_WINDOWS
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
1603 min_height += tabline_height() * gui.char_height;
1967
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1604 #endif
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1605
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
1606 #ifdef FEAT_GUI_GTK
1967
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1607 if (un_maximize)
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1608 {
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1609 /* If the window size is smaller than the screen unmaximize the
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1610 * window, otherwise resizing won't work. */
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1611 gui_mch_get_screen_dimensions(&screen_w, &screen_h);
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1612 if ((width + gui.char_width < screen_w
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1613 || height + gui.char_height * 2 < screen_h)
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1614 && gui_mch_maximized())
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1615 gui_mch_unmaximize();
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1616 }
4f3857aa1785 updated for version 7.2-264
vimboss
parents: 1943
diff changeset
1617 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1618
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1619 gui_mch_set_shellsize(width, height, min_width, min_height,
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
1620 base_width, base_height, direction);
2065
9b78bb3794ba updated for version 7.2.350
Bram Moolenaar <bram@zimbu.org>
parents: 1967
diff changeset
1621
9b78bb3794ba updated for version 7.2.350
Bram Moolenaar <bram@zimbu.org>
parents: 1967
diff changeset
1622 if (fit_to_display && x >= 0 && y >= 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1623 {
2065
9b78bb3794ba updated for version 7.2.350
Bram Moolenaar <bram@zimbu.org>
parents: 1967
diff changeset
1624 /* Some window managers put the Vim window left of/above the screen.
9b78bb3794ba updated for version 7.2.350
Bram Moolenaar <bram@zimbu.org>
parents: 1967
diff changeset
1625 * Only change the position if it wasn't already negative before
9b78bb3794ba updated for version 7.2.350
Bram Moolenaar <bram@zimbu.org>
parents: 1967
diff changeset
1626 * (happens on MS-Windows with a secondary monitor). */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1627 gui_mch_update();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1628 if (gui_mch_get_winpos(&x, &y) == OK && (x < 0 || y < 0))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1629 gui_mch_set_winpos(x < 0 ? 0 : x, y < 0 ? 0 : y);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1630 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1631
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1632 gui_position_components(width);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1633 gui_update_scrollbars(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1634 gui_reset_scroll_region();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1635 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1636
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1637 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1638 * Called when Rows and/or Columns has changed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1639 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1640 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1641 gui_new_shellsize()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1642 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1643 gui_reset_scroll_region();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1644 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1645
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1646 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1647 * Make scroll region cover whole screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1648 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1649 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1650 gui_reset_scroll_region()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1651 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1652 gui.scroll_region_top = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1653 gui.scroll_region_bot = gui.num_rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1654 gui.scroll_region_left = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1655 gui.scroll_region_right = gui.num_cols - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1656 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1657
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1658 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1659 gui_start_highlight(mask)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1660 int mask;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1661 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1662 if (mask > HL_ALL) /* highlight code */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1663 gui.highlight_mask = mask;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1664 else /* mask */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1665 gui.highlight_mask |= mask;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1666 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1667
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1668 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1669 gui_stop_highlight(mask)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1670 int mask;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1671 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1672 if (mask > HL_ALL) /* highlight code */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1673 gui.highlight_mask = HL_NORMAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1674 else /* mask */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1675 gui.highlight_mask &= ~mask;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1676 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1677
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1678 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1679 * Clear a rectangular region of the screen from text pos (row1, col1) to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1680 * (row2, col2) inclusive.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1681 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1682 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1683 gui_clear_block(row1, col1, row2, col2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1684 int row1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1685 int col1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1686 int row2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1687 int col2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1688 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1689 /* Clear the selection if we are about to write over it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1690 clip_may_clear_selection(row1, row2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1691
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1692 gui_mch_clear_block(row1, col1, row2, col2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1693
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1694 /* Invalidate cursor if it was in this block */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1695 if ( gui.cursor_row >= row1 && gui.cursor_row <= row2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1696 && gui.cursor_col >= col1 && gui.cursor_col <= col2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1697 gui.cursor_is_valid = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1698 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1699
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1700 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1701 * Write code to update the cursor later. This avoids the need to flush the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1702 * output buffer before calling gui_update_cursor().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1703 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1704 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1705 gui_update_cursor_later()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1706 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1707 OUT_STR(IF_EB("\033|s", ESC_STR "|s"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1708 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1709
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1710 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1711 gui_write(s, len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1712 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1713 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1714 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1715 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1716 int arg1 = 0, arg2 = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1717 int force_cursor = FALSE; /* force cursor update */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1718 int force_scrollbar = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1719 static win_T *old_curwin = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1720
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1721 /* #define DEBUG_GUI_WRITE */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1722 #ifdef DEBUG_GUI_WRITE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1723 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1724 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1725 char_u *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1726
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1727 printf("gui_write(%d):\n ", len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1728 for (i = 0; i < len; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1729 if (s[i] == ESC)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1730 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1731 if (i != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1732 printf("\n ");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1733 printf("<ESC>");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1734 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1735 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1736 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1737 str = transchar_byte(s[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1738 if (str[0] && str[1])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1739 printf("<%s>", (char *)str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1740 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1741 printf("%s", (char *)str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1742 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1743 printf("\n");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1744 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1745 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1746 while (len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1747 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1748 if (s[0] == ESC && s[1] == '|')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1749 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1750 p = s + 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1751 if (VIM_ISDIGIT(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1752 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1753 arg1 = getdigits(&p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1754 if (p > s + len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1755 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1756 if (*p == ';')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1757 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1758 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1759 arg2 = getdigits(&p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1760 if (p > s + len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1761 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1762 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1763 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1764 switch (*p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1765 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1766 case 'C': /* Clear screen */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1767 clip_scroll_selection(9999);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1768 gui_mch_clear_all();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1769 gui.cursor_is_valid = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1770 force_scrollbar = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1771 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1772 case 'M': /* Move cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1773 gui_set_cursor(arg1, arg2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1774 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1775 case 's': /* force cursor (shape) update */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1776 force_cursor = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1777 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1778 case 'R': /* Set scroll region */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1779 if (arg1 < arg2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1780 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1781 gui.scroll_region_top = arg1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1782 gui.scroll_region_bot = arg2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1783 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1784 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1785 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1786 gui.scroll_region_top = arg2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1787 gui.scroll_region_bot = arg1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1788 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1789 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1790 #ifdef FEAT_VERTSPLIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1791 case 'V': /* Set vertical scroll region */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1792 if (arg1 < arg2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1793 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1794 gui.scroll_region_left = arg1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1795 gui.scroll_region_right = arg2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1796 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1797 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1798 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1799 gui.scroll_region_left = arg2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1800 gui.scroll_region_right = arg1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1801 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1802 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1803 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1804 case 'd': /* Delete line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1805 gui_delete_lines(gui.row, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1806 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1807 case 'D': /* Delete lines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1808 gui_delete_lines(gui.row, arg1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1809 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1810 case 'i': /* Insert line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1811 gui_insert_lines(gui.row, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1812 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1813 case 'I': /* Insert lines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1814 gui_insert_lines(gui.row, arg1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1815 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1816 case '$': /* Clear to end-of-line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1817 gui_clear_block(gui.row, gui.col, gui.row,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1818 (int)Columns - 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1819 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1820 case 'h': /* Turn on highlighting */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1821 gui_start_highlight(arg1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1822 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1823 case 'H': /* Turn off highlighting */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1824 gui_stop_highlight(arg1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1825 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1826 case 'f': /* flash the window (visual bell) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1827 gui_mch_flash(arg1 == 0 ? 20 : arg1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1828 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1829 default:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1830 p = s + 1; /* Skip the ESC */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1831 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1832 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1833 len -= (int)(++p - s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1834 s = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1835 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1836 else if (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1837 #ifdef EBCDIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1838 CtrlChar(s[0]) != 0 /* Ctrl character */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1839 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1840 s[0] < 0x20 /* Ctrl character */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1841 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1842 #ifdef FEAT_SIGN_ICONS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1843 && s[0] != SIGN_BYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1844 # ifdef FEAT_NETBEANS_INTG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1845 && s[0] != MULTISIGN_BYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1846 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1847 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1848 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1849 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1850 if (s[0] == '\n') /* NL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1851 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1852 gui.col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1853 if (gui.row < gui.scroll_region_bot)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1854 gui.row++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1855 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1856 gui_delete_lines(gui.scroll_region_top, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1857 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1858 else if (s[0] == '\r') /* CR */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1859 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1860 gui.col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1861 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1862 else if (s[0] == '\b') /* Backspace */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1863 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1864 if (gui.col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1865 --gui.col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1866 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1867 else if (s[0] == Ctrl_L) /* cursor-right */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1868 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1869 ++gui.col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1870 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1871 else if (s[0] == Ctrl_G) /* Beep */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1872 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1873 gui_mch_beep();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1874 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1875 /* Other Ctrl character: shouldn't happen! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1876
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1877 --len; /* Skip this char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1878 ++s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1879 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1880 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1881 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1882 p = s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1883 while (len > 0 && (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1884 #ifdef EBCDIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1885 CtrlChar(*p) == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1886 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1887 *p >= 0x20
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1888 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1889 #ifdef FEAT_SIGN_ICONS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1890 || *p == SIGN_BYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1891 # ifdef FEAT_NETBEANS_INTG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1892 || *p == MULTISIGN_BYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1893 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1894 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1895 ))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1896 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1897 len--;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1898 p++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1899 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1900 gui_outstr(s, (int)(p - s));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1901 s = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1902 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1903 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1904
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1905 /* Postponed update of the cursor (won't work if "can_update_cursor" isn't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1906 * set). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1907 if (force_cursor)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1908 gui_update_cursor(TRUE, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1909
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1910 /* When switching to another window the dragging must have stopped.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1911 * Required for GTK, dragged_sb isn't reset. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1912 if (old_curwin != curwin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1913 gui.dragged_sb = SBAR_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1914
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1915 /* Update the scrollbars after clearing the screen or when switched
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1916 * to another window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1917 * Update the horizontal scrollbar always, it's difficult to check all
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1918 * situations where it might change. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1919 if (force_scrollbar || old_curwin != curwin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1920 gui_update_scrollbars(force_scrollbar);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1921 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1922 gui_update_horiz_scrollbar(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1923 old_curwin = curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1924
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1925 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1926 * We need to make sure this is cleared since Athena doesn't tell us when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1927 * he is done dragging. Do the same for GTK.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1928 */
574
25a70b1cd2da updated for version 7.0163
vimboss
parents: 540
diff changeset
1929 #if defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1930 gui.dragged_sb = SBAR_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1931 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1932
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1933 gui_mch_flush(); /* In case vim decides to take a nap */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1934 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1935
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1936 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1937 * When ScreenLines[] is invalid, updating the cursor should not be done, it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1938 * produces wrong results. Call gui_dont_update_cursor() before that code and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1939 * gui_can_update_cursor() afterwards.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1940 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1941 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1942 gui_dont_update_cursor()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1943 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1944 if (gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1945 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1946 /* Undraw the cursor now, we probably can't do it after the change. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1947 gui_undraw_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1948 can_update_cursor = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1949 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1950 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1951
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1952 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1953 gui_can_update_cursor()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1954 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1955 can_update_cursor = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1956 /* No need to update the cursor right now, there is always more output
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1957 * after scrolling. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1958 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1959
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1960 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1961 gui_outstr(s, len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1962 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1963 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1964 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1965 int this_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1966 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1967 int cells;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1968 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1969
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1970 if (len == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1971 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1972
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1973 if (len < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1974 len = (int)STRLEN(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1975
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1976 while (len > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1977 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1978 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1979 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1980 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1981 /* Find out how many chars fit in the current line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1982 cells = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1983 for (this_len = 0; this_len < len; )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1984 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1985 cells += (*mb_ptr2cells)(s + this_len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1986 if (gui.col + cells > Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1987 break;
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
1988 this_len += (*mb_ptr2len)(s + this_len);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1989 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1990 if (this_len > len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1991 this_len = len; /* don't include following composing char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1992 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1993 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1994 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1995 if (gui.col + len > Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1996 this_len = Columns - gui.col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1997 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1998 this_len = len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1999
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2000 (void)gui_outstr_nowrap(s, this_len,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2001 0, (guicolor_T)0, (guicolor_T)0, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2002 s += this_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2003 len -= this_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2004 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2005 /* fill up for a double-width char that doesn't fit. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2006 if (len > 0 && gui.col < Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2007 (void)gui_outstr_nowrap((char_u *)" ", 1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2008 0, (guicolor_T)0, (guicolor_T)0, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2009 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2010 /* The cursor may wrap to the next line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2011 if (gui.col >= Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2012 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2013 gui.col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2014 gui.row++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2015 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2016 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2017 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2018
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2019 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2020 * Output one character (may be one or two display cells).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2021 * Caller must check for valid "off".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2022 * Returns FAIL or OK, just like gui_outstr_nowrap().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2023 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2024 static int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2025 gui_screenchar(off, flags, fg, bg, back)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2026 int off; /* Offset from start of screen */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2027 int flags;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2028 guicolor_T fg, bg; /* colors for cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2029 int back; /* backup this many chars when using bold trick */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2030 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2031 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2032 char_u buf[MB_MAXBYTES + 1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2033
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2034 /* Don't draw right halve of a double-width UTF-8 char. "cannot happen" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2035 if (enc_utf8 && ScreenLines[off] == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2036 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2037
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2038 if (enc_utf8 && ScreenLinesUC[off] != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2039 /* Draw UTF-8 multi-byte character. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2040 return gui_outstr_nowrap(buf, utfc_char2bytes(off, buf),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2041 flags, fg, bg, back);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2042
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2043 if (enc_dbcs == DBCS_JPNU && ScreenLines[off] == 0x8e)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2044 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2045 buf[0] = ScreenLines[off];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2046 buf[1] = ScreenLines2[off];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2047 return gui_outstr_nowrap(buf, 2, flags, fg, bg, back);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2048 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2049
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2050 /* Draw non-multi-byte character or DBCS character. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2051 return gui_outstr_nowrap(ScreenLines + off,
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
2052 enc_dbcs ? (*mb_ptr2len)(ScreenLines + off) : 1,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2053 flags, fg, bg, back);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2054 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2055 return gui_outstr_nowrap(ScreenLines + off, 1, flags, fg, bg, back);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2056 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2057 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2058
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
2059 #ifdef FEAT_GUI_GTK
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2060 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2061 * Output the string at the given screen position. This is used in place
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2062 * of gui_screenchar() where possible because Pango needs as much context
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2063 * as possible to work nicely. It's a lot faster as well.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2064 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2065 static int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2066 gui_screenstr(off, len, flags, fg, bg, back)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2067 int off; /* Offset from start of screen */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2068 int len; /* string length in screen cells */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2069 int flags;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2070 guicolor_T fg, bg; /* colors for cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2071 int back; /* backup this many chars when using bold trick */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2072 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2073 char_u *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2074 int outlen = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2075 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2076 int retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2077
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2078 if (len <= 0) /* "cannot happen"? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2079 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2080
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2081 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2082 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2083 buf = alloc((unsigned)(len * MB_MAXBYTES + 1));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2084 if (buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2085 return OK; /* not much we could do here... */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2086
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2087 for (i = off; i < off + len; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2088 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2089 if (ScreenLines[i] == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2090 continue; /* skip second half of double-width char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2091
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2092 if (ScreenLinesUC[i] == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2093 buf[outlen++] = ScreenLines[i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2094 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2095 outlen += utfc_char2bytes(i, buf + outlen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2096 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2097
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2098 buf[outlen] = NUL; /* only to aid debugging */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2099 retval = gui_outstr_nowrap(buf, outlen, flags, fg, bg, back);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2100 vim_free(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2101
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2102 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2103 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2104 else if (enc_dbcs == DBCS_JPNU)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2105 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2106 buf = alloc((unsigned)(len * 2 + 1));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2107 if (buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2108 return OK; /* not much we could do here... */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2109
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2110 for (i = off; i < off + len; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2111 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2112 buf[outlen++] = ScreenLines[i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2113
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2114 /* handle double-byte single-width char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2115 if (ScreenLines[i] == 0x8e)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2116 buf[outlen++] = ScreenLines2[i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2117 else if (MB_BYTE2LEN(ScreenLines[i]) == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2118 buf[outlen++] = ScreenLines[++i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2119 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2120
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2121 buf[outlen] = NUL; /* only to aid debugging */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2122 retval = gui_outstr_nowrap(buf, outlen, flags, fg, bg, back);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2123 vim_free(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2124
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2125 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2126 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2127 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2128 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2129 return gui_outstr_nowrap(&ScreenLines[off], len,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2130 flags, fg, bg, back);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2131 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2132 }
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
2133 #endif /* FEAT_GUI_GTK */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2134
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2135 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2136 * Output the given string at the current cursor position. If the string is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2137 * too long to fit on the line, then it is truncated.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2138 * "flags":
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2139 * GUI_MON_IS_CURSOR should only be used when this function is being called to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2140 * actually draw (an inverted) cursor.
1199
3acf7c922a04 updated for version 7.1b
vimboss
parents: 1137
diff changeset
2141 * GUI_MON_TRS_CURSOR is used to draw the cursor text with a transparent
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2142 * background.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2143 * GUI_MON_NOCLEAR is used to avoid clearing the selection when drawing over
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2144 * it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2145 * Returns OK, unless "back" is non-zero and using the bold trick, then return
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2146 * FAIL (the caller should start drawing "back" chars back).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2147 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2148 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2149 gui_outstr_nowrap(s, len, flags, fg, bg, back)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2150 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2151 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2152 int flags;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2153 guicolor_T fg, bg; /* colors for cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2154 int back; /* backup this many chars when using bold trick */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2155 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2156 long_u highlight_mask;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2157 long_u hl_mask_todo;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2158 guicolor_T fg_color;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2159 guicolor_T bg_color;
203
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2160 guicolor_T sp_color;
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
2161 #if !defined(MSWIN16_FASTTEXT) && !defined(FEAT_GUI_GTK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2162 GuiFont font = NOFONT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2163 # ifdef FEAT_XFONTSET
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2164 GuiFontset fontset = NOFONTSET;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2165 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2166 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2167 attrentry_T *aep = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2168 int draw_flags;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2169 int col = gui.col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2170 #ifdef FEAT_SIGN_ICONS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2171 int draw_sign = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2172 # ifdef FEAT_NETBEANS_INTG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2173 int multi_sign = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2174 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2175 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2176
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2177 if (len < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2178 len = (int)STRLEN(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2179 if (len == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2180 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2181
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2182 #ifdef FEAT_SIGN_ICONS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2183 if (*s == SIGN_BYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2184 # ifdef FEAT_NETBEANS_INTG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2185 || *s == MULTISIGN_BYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2186 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2187 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2188 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2189 # ifdef FEAT_NETBEANS_INTG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2190 if (*s == MULTISIGN_BYTE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2191 multi_sign = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2192 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2193 /* draw spaces instead */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2194 s = (char_u *)" ";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2195 if (len == 1 && col > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2196 --col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2197 len = 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2198 draw_sign = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2199 highlight_mask = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2200 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2201 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2202 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2203 if (gui.highlight_mask > HL_ALL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2204 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2205 aep = syn_gui_attr2entry(gui.highlight_mask);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2206 if (aep == NULL) /* highlighting not set */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2207 highlight_mask = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2208 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2209 highlight_mask = aep->ae_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2210 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2211 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2212 highlight_mask = gui.highlight_mask;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2213 hl_mask_todo = highlight_mask;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2214
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
2215 #if !defined(MSWIN16_FASTTEXT) && !defined(FEAT_GUI_GTK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2216 /* Set the font */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2217 if (aep != NULL && aep->ae_u.gui.font != NOFONT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2218 font = aep->ae_u.gui.font;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2219 # ifdef FEAT_XFONTSET
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2220 else if (aep != NULL && aep->ae_u.gui.fontset != NOFONTSET)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2221 fontset = aep->ae_u.gui.fontset;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2222 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2223 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2224 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2225 # ifdef FEAT_XFONTSET
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2226 if (gui.fontset != NOFONTSET)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2227 fontset = gui.fontset;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2228 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2229 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2230 if (hl_mask_todo & (HL_BOLD | HL_STANDOUT))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2231 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2232 if ((hl_mask_todo & HL_ITALIC) && gui.boldital_font != NOFONT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2233 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2234 font = gui.boldital_font;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2235 hl_mask_todo &= ~(HL_BOLD | HL_STANDOUT | HL_ITALIC);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2236 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2237 else if (gui.bold_font != NOFONT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2238 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2239 font = gui.bold_font;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2240 hl_mask_todo &= ~(HL_BOLD | HL_STANDOUT);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2241 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2242 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2243 font = gui.norm_font;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2244 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2245 else if ((hl_mask_todo & HL_ITALIC) && gui.ital_font != NOFONT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2246 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2247 font = gui.ital_font;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2248 hl_mask_todo &= ~HL_ITALIC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2249 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2250 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2251 font = gui.norm_font;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2252 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2253 # ifdef FEAT_XFONTSET
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2254 if (fontset != NOFONTSET)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2255 gui_mch_set_fontset(fontset);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2256 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2257 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2258 gui_mch_set_font(font);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2259 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2260
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2261 draw_flags = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2262
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2263 /* Set the color */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2264 bg_color = gui.back_pixel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2265 if ((flags & GUI_MON_IS_CURSOR) && gui.in_focus)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2266 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2267 draw_flags |= DRAW_CURSOR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2268 fg_color = fg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2269 bg_color = bg;
203
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2270 sp_color = fg;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2271 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2272 else if (aep != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2273 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2274 fg_color = aep->ae_u.gui.fg_color;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2275 if (fg_color == INVALCOLOR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2276 fg_color = gui.norm_pixel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2277 bg_color = aep->ae_u.gui.bg_color;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2278 if (bg_color == INVALCOLOR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2279 bg_color = gui.back_pixel;
203
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2280 sp_color = aep->ae_u.gui.sp_color;
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2281 if (sp_color == INVALCOLOR)
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2282 sp_color = fg_color;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2283 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2284 else
203
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2285 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2286 fg_color = gui.norm_pixel;
203
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2287 sp_color = fg_color;
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2288 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2289
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2290 if (highlight_mask & (HL_INVERSE | HL_STANDOUT))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2291 {
2823
8bd38abda314 updated for version 7.3.187
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
2292 #if defined(AMIGA)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2293 gui_mch_set_colors(bg_color, fg_color);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2294 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2295 gui_mch_set_fg_color(bg_color);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2296 gui_mch_set_bg_color(fg_color);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2297 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2298 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2299 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2300 {
2823
8bd38abda314 updated for version 7.3.187
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
2301 #if defined(AMIGA)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2302 gui_mch_set_colors(fg_color, bg_color);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2303 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2304 gui_mch_set_fg_color(fg_color);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2305 gui_mch_set_bg_color(bg_color);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2306 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2307 }
203
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2308 gui_mch_set_sp_color(sp_color);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2309
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2310 /* Clear the selection if we are about to write over it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2311 if (!(flags & GUI_MON_NOCLEAR))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2312 clip_may_clear_selection(gui.row, gui.row);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2313
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2314
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2315 #ifndef MSWIN16_FASTTEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2316 /* If there's no bold font, then fake it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2317 if (hl_mask_todo & (HL_BOLD | HL_STANDOUT))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2318 draw_flags |= DRAW_BOLD;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2319 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2320
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2321 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2322 * When drawing bold or italic characters the spill-over from the left
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2323 * neighbor may be destroyed. Let the caller backup to start redrawing
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2324 * just after a blank.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2325 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2326 if (back != 0 && ((draw_flags & DRAW_BOLD) || (highlight_mask & HL_ITALIC)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2327 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2328
2823
8bd38abda314 updated for version 7.3.187
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
2329 #if defined(FEAT_GUI_GTK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2330 /* If there's no italic font, then fake it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2331 * For GTK2, we don't need a different font for italic style. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2332 if (hl_mask_todo & HL_ITALIC)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2333 draw_flags |= DRAW_ITALIC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2334
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2335 /* Do we underline the text? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2336 if (hl_mask_todo & HL_UNDERLINE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2337 draw_flags |= DRAW_UNDERL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2338 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2339 /* Do we underline the text? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2340 if ((hl_mask_todo & HL_UNDERLINE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2341 # ifndef MSWIN16_FASTTEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2342 || (hl_mask_todo & HL_ITALIC)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2343 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2344 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2345 draw_flags |= DRAW_UNDERL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2346 #endif
203
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2347 /* Do we undercurl the text? */
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2348 if (hl_mask_todo & HL_UNDERCURL)
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2349 draw_flags |= DRAW_UNDERC;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2350
1199
3acf7c922a04 updated for version 7.1b
vimboss
parents: 1137
diff changeset
2351 /* Do we draw transparently? */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2352 if (flags & GUI_MON_TRS_CURSOR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2353 draw_flags |= DRAW_TRANSP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2354
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2355 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2356 * Draw the text.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2357 */
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
2358 #ifdef FEAT_GUI_GTK
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2359 /* The value returned is the length in display cells */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2360 len = gui_gtk2_draw_string(gui.row, col, s, len, draw_flags);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2361 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2362 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2363 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2364 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2365 int start; /* index of bytes to be drawn */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2366 int cells; /* cellwidth of bytes to be drawn */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2367 int thislen; /* length of bytes to be drawin */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2368 int cn; /* cellwidth of current char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2369 int i; /* index of current char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2370 int c; /* current char value */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2371 int cl; /* byte length of current char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2372 int comping; /* current char is composing */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2373 int scol = col; /* screen column */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2374 int dowide; /* use 'guifontwide' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2375
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2376 /* Break the string at a composing character, it has to be drawn on
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2377 * top of the previous character. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2378 start = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2379 cells = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2380 for (i = 0; i < len; i += cl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2381 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2382 c = utf_ptr2char(s + i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2383 cn = utf_char2cells(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2384 if (cn > 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2385 # ifdef FEAT_XFONTSET
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2386 && fontset == NOFONTSET
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2387 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2388 && gui.wide_font != NOFONT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2389 dowide = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2390 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2391 dowide = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2392 comping = utf_iscomposing(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2393 if (!comping) /* count cells from non-composing chars */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2394 cells += cn;
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
2395 cl = utf_ptr2len(s + i);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2396 if (cl == 0) /* hit end of string */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2397 len = i + cl; /* len must be wrong "cannot happen" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2398
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2399 /* print the string so far if it's the last character or there is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2400 * a composing character. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2401 if (i + cl >= len || (comping && i > start) || dowide
2275
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
2402 # if defined(FEAT_GUI_X11)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2403 || (cn > 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2404 # ifdef FEAT_XFONTSET
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2405 /* No fontset: At least draw char after wide char at
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2406 * right position. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2407 && fontset == NOFONTSET
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2408 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2409 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2410 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2411 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2412 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2413 if (comping || dowide)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2414 thislen = i - start;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2415 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2416 thislen = i - start + cl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2417 if (thislen > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2418 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2419 gui_mch_draw_string(gui.row, scol, s + start, thislen,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2420 draw_flags);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2421 start += thislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2422 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2423 scol += cells;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2424 cells = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2425 if (dowide)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2426 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2427 gui_mch_set_font(gui.wide_font);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2428 gui_mch_draw_string(gui.row, scol - cn,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2429 s + start, cl, draw_flags);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2430 gui_mch_set_font(font);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2431 start += cl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2432 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2433
2275
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
2434 # if defined(FEAT_GUI_X11)
11
4424b47a0797 updated for version 7.0003
vimboss
parents: 7
diff changeset
2435 /* No fontset: draw a space to fill the gap after a wide char
4424b47a0797 updated for version 7.0003
vimboss
parents: 7
diff changeset
2436 * */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2437 if (cn > 1 && (draw_flags & DRAW_TRANSP) == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2438 # ifdef FEAT_XFONTSET
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2439 && fontset == NOFONTSET
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2440 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2441 && !dowide)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2442 gui_mch_draw_string(gui.row, scol - 1, (char_u *)" ",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2443 1, draw_flags);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2444 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2445 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2446 /* Draw a composing char on top of the previous char. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2447 if (comping)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2448 {
536
c1d5993c7d9f updated for version 7.0152
vimboss
parents: 519
diff changeset
2449 # if (defined(__APPLE_CC__) || defined(__MRC__)) && TARGET_API_MAC_CARBON
c1d5993c7d9f updated for version 7.0152
vimboss
parents: 519
diff changeset
2450 /* Carbon ATSUI autodraws composing char over previous char */
c1d5993c7d9f updated for version 7.0152
vimboss
parents: 519
diff changeset
2451 gui_mch_draw_string(gui.row, scol, s + i, cl,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2452 draw_flags | DRAW_TRANSP);
187
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
2453 # else
536
c1d5993c7d9f updated for version 7.0152
vimboss
parents: 519
diff changeset
2454 gui_mch_draw_string(gui.row, scol - cn, s + i, cl,
187
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
2455 draw_flags | DRAW_TRANSP);
c757ec217a09 updated for version 7.0057
vimboss
parents: 170
diff changeset
2456 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2457 start = i + cl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2458 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2459 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2460 /* The stuff below assumes "len" is the length in screen columns. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2461 len = scol - col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2462 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2463 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2464 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2465 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2466 gui_mch_draw_string(gui.row, col, s, len, draw_flags);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2467 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2468 if (enc_dbcs == DBCS_JPNU)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2469 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2470 /* Get the length in display cells, this can be different from the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2471 * number of bytes for "euc-jp". */
2338
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
2472 len = mb_string2cells(s, len);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2473 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2474 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2475 }
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
2476 #endif /* !FEAT_GUI_GTK */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2477
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2478 if (!(flags & (GUI_MON_IS_CURSOR | GUI_MON_TRS_CURSOR)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2479 gui.col = col + len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2480
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2481 /* May need to invert it when it's part of the selection. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2482 if (flags & GUI_MON_NOCLEAR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2483 clip_may_redraw_selection(gui.row, col, len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2484
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2485 if (!(flags & (GUI_MON_IS_CURSOR | GUI_MON_TRS_CURSOR)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2486 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2487 /* Invalidate the old physical cursor position if we wrote over it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2488 if (gui.cursor_row == gui.row
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2489 && gui.cursor_col >= col
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2490 && gui.cursor_col < col + len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2491 gui.cursor_is_valid = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2492 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2493
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2494 #ifdef FEAT_SIGN_ICONS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2495 if (draw_sign)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2496 /* Draw the sign on top of the spaces. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2497 gui_mch_drawsign(gui.row, col, gui.highlight_mask);
2592
2c5e70e2858f updated for version 7.3.016
Bram Moolenaar <bram@vim.org>
parents: 2520
diff changeset
2498 # if defined(FEAT_NETBEANS_INTG) && (defined(FEAT_GUI_X11) \
2209
d0ddf7ba1630 Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents: 2208
diff changeset
2499 || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_W32))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2500 if (multi_sign)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2501 netbeans_draw_multisign_indicator(gui.row);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2502 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2503 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2504
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2505 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2506 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2507
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2508 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2509 * Un-draw the cursor. Actually this just redraws the character at the given
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2510 * position. The character just before it too, for when it was in bold.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2511 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2512 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2513 gui_undraw_cursor()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2514 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2515 if (gui.cursor_is_valid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2516 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2517 #ifdef FEAT_HANGULIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2518 if (composing_hangul
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2519 && gui.col == gui.cursor_col && gui.row == gui.cursor_row)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2520 (void)gui_outstr_nowrap(composing_hangul_buffer, 2,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2521 GUI_MON_IS_CURSOR | GUI_MON_NOCLEAR,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2522 gui.norm_pixel, gui.back_pixel, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2523 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2524 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2525 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2526 if (gui_redraw_block(gui.cursor_row, gui.cursor_col,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2527 gui.cursor_row, gui.cursor_col, GUI_MON_NOCLEAR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2528 && gui.cursor_col > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2529 (void)gui_redraw_block(gui.cursor_row, gui.cursor_col - 1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2530 gui.cursor_row, gui.cursor_col - 1, GUI_MON_NOCLEAR);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2531 #ifdef FEAT_HANGULIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2532 if (composing_hangul)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2533 (void)gui_redraw_block(gui.cursor_row, gui.cursor_col + 1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2534 gui.cursor_row, gui.cursor_col + 1, GUI_MON_NOCLEAR);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2535 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2536 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2537 /* Cursor_is_valid is reset when the cursor is undrawn, also reset it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2538 * here in case it wasn't needed to undraw it. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2539 gui.cursor_is_valid = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2540 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2541 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2542
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2543 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2544 gui_redraw(x, y, w, h)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2545 int x;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2546 int y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2547 int w;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2548 int h;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2549 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2550 int row1, col1, row2, col2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2551
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2552 row1 = Y_2_ROW(y);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2553 col1 = X_2_COL(x);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2554 row2 = Y_2_ROW(y + h - 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2555 col2 = X_2_COL(x + w - 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2556
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2557 (void)gui_redraw_block(row1, col1, row2, col2, GUI_MON_NOCLEAR);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2558
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2559 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2560 * We may need to redraw the cursor, but don't take it upon us to change
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2561 * its location after a scroll.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2562 * (maybe be more strict even and test col too?)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2563 * These things may be outside the update/clipping region and reality may
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2564 * not reflect Vims internal ideas if these operations are clipped away.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2565 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2566 if (gui.row == gui.cursor_row)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2567 gui_update_cursor(TRUE, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2568 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2569
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2570 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2571 * Draw a rectangular block of characters, from row1 to row2 (inclusive) and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2572 * from col1 to col2 (inclusive).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2573 * Return TRUE when the character before the first drawn character has
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2574 * different attributes (may have to be redrawn too).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2575 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2576 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2577 gui_redraw_block(row1, col1, row2, col2, flags)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2578 int row1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2579 int col1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2580 int row2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2581 int col2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2582 int flags; /* flags for gui_outstr_nowrap() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2583 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2584 int old_row, old_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2585 long_u old_hl_mask;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2586 int off;
203
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2587 sattr_T first_attr;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2588 int idx, len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2589 int back, nback;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2590 int retval = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2591 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2592 int orig_col1, orig_col2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2593 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2594
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2595 /* Don't try to update when ScreenLines is not valid */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2596 if (!screen_cleared || ScreenLines == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2597 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2598
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2599 /* Don't try to draw outside the shell! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2600 /* Check everything, strange values may be caused by a big border width */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2601 col1 = check_col(col1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2602 col2 = check_col(col2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2603 row1 = check_row(row1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2604 row2 = check_row(row2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2605
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2606 /* Remember where our cursor was */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2607 old_row = gui.row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2608 old_col = gui.col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2609 old_hl_mask = gui.highlight_mask;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2610 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2611 orig_col1 = col1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2612 orig_col2 = col2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2613 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2614
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2615 for (gui.row = row1; gui.row <= row2; gui.row++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2616 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2617 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2618 /* When only half of a double-wide character is in the block, include
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2619 * the other half. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2620 col1 = orig_col1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2621 col2 = orig_col2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2622 off = LineOffset[gui.row];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2623 if (enc_dbcs != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2624 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2625 if (col1 > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2626 col1 -= dbcs_screen_head_off(ScreenLines + off,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2627 ScreenLines + off + col1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2628 col2 += dbcs_screen_tail_off(ScreenLines + off,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2629 ScreenLines + off + col2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2630 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2631 else if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2632 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2633 if (ScreenLines[off + col1] == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2634 --col1;
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
2635 # ifdef FEAT_GUI_GTK
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2636 if (col2 + 1 < Columns && ScreenLines[off + col2 + 1] == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2637 ++col2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2638 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2639 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2640 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2641 gui.col = col1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2642 off = LineOffset[gui.row] + gui.col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2643 len = col2 - col1 + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2644
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2645 /* Find how many chars back this highlighting starts, or where a space
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2646 * is. Needed for when the bold trick is used */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2647 for (back = 0; back < col1; ++back)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2648 if (ScreenAttrs[off - 1 - back] != ScreenAttrs[off]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2649 || ScreenLines[off - 1 - back] == ' ')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2650 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2651 retval = (col1 > 0 && ScreenAttrs[off - 1] != 0 && back == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2652 && ScreenLines[off - 1] != ' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2653
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2654 /* Break it up in strings of characters with the same attributes. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2655 /* Print UTF-8 characters individually. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2656 while (len > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2657 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2658 first_attr = ScreenAttrs[off];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2659 gui.highlight_mask = first_attr;
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
2660 #if defined(FEAT_MBYTE) && !defined(FEAT_GUI_GTK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2661 if (enc_utf8 && ScreenLinesUC[off] != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2662 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2663 /* output multi-byte character separately */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2664 nback = gui_screenchar(off, flags,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2665 (guicolor_T)0, (guicolor_T)0, back);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2666 if (gui.col < Columns && ScreenLines[off + 1] == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2667 idx = 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2668 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2669 idx = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2670 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2671 else if (enc_dbcs == DBCS_JPNU && ScreenLines[off] == 0x8e)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2672 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2673 /* output double-byte, single-width character separately */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2674 nback = gui_screenchar(off, flags,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2675 (guicolor_T)0, (guicolor_T)0, back);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2676 idx = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2677 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2678 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2679 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2680 {
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
2681 #ifdef FEAT_GUI_GTK
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2682 for (idx = 0; idx < len; ++idx)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2683 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2684 if (enc_utf8 && ScreenLines[off + idx] == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2685 continue; /* skip second half of double-width char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2686 if (ScreenAttrs[off + idx] != first_attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2687 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2688 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2689 /* gui_screenstr() takes care of multibyte chars */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2690 nback = gui_screenstr(off, idx, flags,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2691 (guicolor_T)0, (guicolor_T)0, back);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2692 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2693 for (idx = 0; idx < len && ScreenAttrs[off + idx] == first_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2694 idx++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2695 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2696 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2697 /* Stop at a multi-byte Unicode character. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2698 if (enc_utf8 && ScreenLinesUC[off + idx] != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2699 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2700 if (enc_dbcs == DBCS_JPNU)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2701 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2702 /* Stop at a double-byte single-width char. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2703 if (ScreenLines[off + idx] == 0x8e)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2704 break;
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
2705 if (len > 1 && (*mb_ptr2len)(ScreenLines
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2706 + off + idx) == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2707 ++idx; /* skip second byte of double-byte char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2708 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2709 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2710 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2711 nback = gui_outstr_nowrap(ScreenLines + off, idx, flags,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2712 (guicolor_T)0, (guicolor_T)0, back);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2713 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2714 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2715 if (nback == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2716 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2717 /* Must back up to start drawing where a bold or italic word
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2718 * starts. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2719 off -= back;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2720 len += back;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2721 gui.col -= back;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2722 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2723 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2724 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2725 off += idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2726 len -= idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2727 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2728 back = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2729 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2730 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2731
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2732 /* Put the cursor back where it was */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2733 gui.row = old_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2734 gui.col = old_col;
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 827
diff changeset
2735 gui.highlight_mask = (int)old_hl_mask;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2736
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2737 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2738 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2739
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2740 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2741 gui_delete_lines(row, count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2742 int row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2743 int count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2744 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2745 if (count <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2746 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2747
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2748 if (row + count > gui.scroll_region_bot)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2749 /* Scrolled out of region, just blank the lines out */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2750 gui_clear_block(row, gui.scroll_region_left,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2751 gui.scroll_region_bot, gui.scroll_region_right);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2752 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2753 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2754 gui_mch_delete_lines(row, count);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2755
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2756 /* If the cursor was in the deleted lines it's now gone. If the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2757 * cursor was in the scrolled lines adjust its position. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2758 if (gui.cursor_row >= row
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2759 && gui.cursor_col >= gui.scroll_region_left
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2760 && gui.cursor_col <= gui.scroll_region_right)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2761 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2762 if (gui.cursor_row < row + count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2763 gui.cursor_is_valid = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2764 else if (gui.cursor_row <= gui.scroll_region_bot)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2765 gui.cursor_row -= count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2766 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2767 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2768 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2769
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2770 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2771 gui_insert_lines(row, count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2772 int row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2773 int count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2774 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2775 if (count <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2776 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2777
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2778 if (row + count > gui.scroll_region_bot)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2779 /* Scrolled out of region, just blank the lines out */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2780 gui_clear_block(row, gui.scroll_region_left,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2781 gui.scroll_region_bot, gui.scroll_region_right);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2782 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2783 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2784 gui_mch_insert_lines(row, count);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2785
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2786 if (gui.cursor_row >= gui.row
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2787 && gui.cursor_col >= gui.scroll_region_left
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2788 && gui.cursor_col <= gui.scroll_region_right)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2789 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2790 if (gui.cursor_row <= gui.scroll_region_bot - count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2791 gui.cursor_row += count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2792 else if (gui.cursor_row <= gui.scroll_region_bot)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2793 gui.cursor_is_valid = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2794 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2795 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2796 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2797
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2798 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2799 * The main GUI input routine. Waits for a character from the keyboard.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2800 * wtime == -1 Wait forever.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2801 * wtime == 0 Don't wait.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2802 * wtime > 0 Wait wtime milliseconds for a character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2803 * Returns OK if a character was found to be available within the given time,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2804 * or FAIL otherwise.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2805 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2806 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2807 gui_wait_for_chars(wtime)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2808 long wtime;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2809 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2810 int retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2811
2208
495995b9ce7d Fix: window title not updated after file dropped.
Bram Moolenaar <bram@vim.org>
parents: 2178
diff changeset
2812 #ifdef FEAT_MENU
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2813 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2814 * If we're going to wait a bit, update the menus and mouse shape for the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2815 * current State.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2816 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2817 if (wtime != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2818 gui_update_menus(0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2819 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2820
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2821 gui_mch_update();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2822 if (input_available()) /* Got char, return immediately */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2823 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2824 if (wtime == 0) /* Don't wait for char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2825 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2826
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2827 /* Before waiting, flush any output to the screen. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2828 gui_mch_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2829
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2830 if (wtime > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2831 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2832 /* Blink when waiting for a character. Probably only does something
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2833 * for showmatch() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2834 gui_mch_start_blink();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2835 retval = gui_mch_wait_for_chars(wtime);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2836 gui_mch_stop_blink();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2837 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2838 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2839
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2840 /*
1199
3acf7c922a04 updated for version 7.1b
vimboss
parents: 1137
diff changeset
2841 * While we are waiting indefinitely for a character, blink the cursor.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2842 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2843 gui_mch_start_blink();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2844
203
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2845 retval = FAIL;
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2846 /*
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2847 * We may want to trigger the CursorHold event. First wait for
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2848 * 'updatetime' and if nothing is typed within that time put the
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2849 * K_CURSORHOLD key in the input buffer.
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2850 */
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2851 if (gui_mch_wait_for_chars(p_ut) == OK)
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2852 retval = OK;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2853 #ifdef FEAT_AUTOCMD
609
ba54311bc43e updated for version 7.0173
vimboss
parents: 574
diff changeset
2854 else if (trigger_cursorhold())
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2855 {
203
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2856 char_u buf[3];
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2857
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2858 /* Put K_CURSORHOLD in the input buffer. */
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2859 buf[0] = CSI;
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2860 buf[1] = KS_EXTRA;
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2861 buf[2] = (int)KE_CURSORHOLD;
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2862 add_to_input_buf(buf, 3);
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2863
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2864 retval = OK;
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2865 }
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2866 #endif
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2867
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2868 if (retval == FAIL)
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2869 {
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
2870 /* Blocking wait. */
368
a7d1d61e5417 updated for version 7.0095
vimboss
parents: 292
diff changeset
2871 before_blocking();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2872 retval = gui_mch_wait_for_chars(-1L);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2873 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2874
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2875 gui_mch_stop_blink();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2876 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2877 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2878
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2879 /*
1137
26a577a823aa updated for version 7.1a
vimboss
parents: 1106
diff changeset
2880 * Fill p[4] with mouse coordinates encoded for check_termcode().
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2881 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2882 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2883 fill_mouse_coord(p, col, row)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2884 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2885 int col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2886 int row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2887 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2888 p[0] = (char_u)(col / 128 + ' ' + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2889 p[1] = (char_u)(col % 128 + ' ' + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2890 p[2] = (char_u)(row / 128 + ' ' + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2891 p[3] = (char_u)(row % 128 + ' ' + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2892 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2893
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2894 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2895 * Generic mouse support function. Add a mouse event to the input buffer with
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2896 * the given properties.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2897 * button --- may be any of MOUSE_LEFT, MOUSE_MIDDLE, MOUSE_RIGHT,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2898 * MOUSE_X1, MOUSE_X2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2899 * MOUSE_DRAG, or MOUSE_RELEASE.
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
2900 * MOUSE_4 and MOUSE_5 are used for vertical scroll wheel,
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
2901 * MOUSE_6 and MOUSE_7 for horizontal scroll wheel.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2902 * x, y --- Coordinates of mouse in pixels.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2903 * repeated_click --- TRUE if this click comes only a short time after a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2904 * previous click.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2905 * modifiers --- Bit field which may be any of the following modifiers
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2906 * or'ed together: MOUSE_SHIFT | MOUSE_CTRL | MOUSE_ALT.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2907 * This function will ignore drag events where the mouse has not moved to a new
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2908 * character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2909 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2910 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2911 gui_send_mouse_event(button, x, y, repeated_click, modifiers)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2912 int button;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2913 int x;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2914 int y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2915 int repeated_click;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2916 int_u modifiers;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2917 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2918 static int prev_row = 0, prev_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2919 static int prev_button = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2920 static int num_clicks = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2921 char_u string[10];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2922 enum key_extra button_char;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2923 int row, col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2924 #ifdef FEAT_CLIPBOARD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2925 int checkfor;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2926 int did_clip = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2927 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2928
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2929 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2930 * Scrolling may happen at any time, also while a selection is present.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2931 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2932 switch (button)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2933 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2934 case MOUSE_X1:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2935 button_char = KE_X1MOUSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2936 goto button_set;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2937 case MOUSE_X2:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2938 button_char = KE_X2MOUSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2939 goto button_set;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2940 case MOUSE_4:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2941 button_char = KE_MOUSEDOWN;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2942 goto button_set;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2943 case MOUSE_5:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2944 button_char = KE_MOUSEUP;
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
2945 goto button_set;
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
2946 case MOUSE_6:
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
2947 button_char = KE_MOUSELEFT;
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
2948 goto button_set;
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
2949 case MOUSE_7:
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
2950 button_char = KE_MOUSERIGHT;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2951 button_set:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2952 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2953 /* Don't put events in the input queue now. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2954 if (hold_gui_events)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2955 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2956
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2957 string[3] = CSI;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2958 string[4] = KS_EXTRA;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2959 string[5] = (int)button_char;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2960
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2961 /* Pass the pointer coordinates of the scroll event so that we
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2962 * know which window to scroll. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2963 row = gui_xy2colrow(x, y, &col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2964 string[6] = (char_u)(col / 128 + ' ' + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2965 string[7] = (char_u)(col % 128 + ' ' + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2966 string[8] = (char_u)(row / 128 + ' ' + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2967 string[9] = (char_u)(row % 128 + ' ' + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2968
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2969 if (modifiers == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2970 add_to_input_buf(string + 3, 7);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2971 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2972 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2973 string[0] = CSI;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2974 string[1] = KS_MODIFIER;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2975 string[2] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2976 if (modifiers & MOUSE_SHIFT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2977 string[2] |= MOD_MASK_SHIFT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2978 if (modifiers & MOUSE_CTRL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2979 string[2] |= MOD_MASK_CTRL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2980 if (modifiers & MOUSE_ALT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2981 string[2] |= MOD_MASK_ALT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2982 add_to_input_buf(string, 10);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2983 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2984 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2985 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2986 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2987
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2988 #ifdef FEAT_CLIPBOARD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2989 /* If a clipboard selection is in progress, handle it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2990 if (clip_star.state == SELECT_IN_PROGRESS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2991 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2992 clip_process_selection(button, X_2_COL(x), Y_2_ROW(y), repeated_click);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2993 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2994 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2995
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2996 /* Determine which mouse settings to look for based on the current mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2997 switch (get_real_state())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2998 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2999 case NORMAL_BUSY:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3000 case OP_PENDING:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3001 case NORMAL: checkfor = MOUSE_NORMAL; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3002 case VISUAL: checkfor = MOUSE_VISUAL; break;
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
3003 case SELECTMODE: checkfor = MOUSE_VISUAL; break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3004 case REPLACE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3005 case REPLACE+LANGMAP:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3006 #ifdef FEAT_VREPLACE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3007 case VREPLACE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3008 case VREPLACE+LANGMAP:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3009 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3010 case INSERT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3011 case INSERT+LANGMAP: checkfor = MOUSE_INSERT; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3012 case ASKMORE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3013 case HITRETURN: /* At the more- and hit-enter prompt pass the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3014 mouse event for a click on or below the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3015 message line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3016 if (Y_2_ROW(y) >= msg_row)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3017 checkfor = MOUSE_NORMAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3018 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3019 checkfor = MOUSE_RETURN;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3020 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3021
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3022 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3023 * On the command line, use the clipboard selection on all lines
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3024 * but the command line. But not when pasting.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3025 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3026 case CMDLINE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3027 case CMDLINE+LANGMAP:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3028 if (Y_2_ROW(y) < cmdline_row && button != MOUSE_MIDDLE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3029 checkfor = MOUSE_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3030 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3031 checkfor = MOUSE_COMMAND;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3032 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3033
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3034 default:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3035 checkfor = MOUSE_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3036 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3037 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3038
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3039 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3040 * Allow clipboard selection of text on the command line in "normal"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3041 * modes. Don't do this when dragging the status line, or extending a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3042 * Visual selection.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3043 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3044 if ((State == NORMAL || State == NORMAL_BUSY || (State & INSERT))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3045 && Y_2_ROW(y) >= topframe->fr_height
995
9aec644c45dc updated for version 7.0-121
vimboss
parents: 973
diff changeset
3046 # ifdef FEAT_WINDOWS
9aec644c45dc updated for version 7.0-121
vimboss
parents: 973
diff changeset
3047 + firstwin->w_winrow
9aec644c45dc updated for version 7.0-121
vimboss
parents: 973
diff changeset
3048 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3049 && button != MOUSE_DRAG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3050 # ifdef FEAT_MOUSESHAPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3051 && !drag_status_line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3052 # ifdef FEAT_VERTSPLIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3053 && !drag_sep_line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3054 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3055 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3056 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3057 checkfor = MOUSE_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3058
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3059 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3060 * Use modeless selection when holding CTRL and SHIFT pressed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3061 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3062 if ((modifiers & MOUSE_CTRL) && (modifiers & MOUSE_SHIFT))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3063 checkfor = MOUSE_NONEF;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3064
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3065 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3066 * In Ex mode, always use modeless selection.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3067 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3068 if (exmode_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3069 checkfor = MOUSE_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3070
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3071 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3072 * If the mouse settings say to not use the mouse, use the modeless
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3073 * selection. But if Visual is active, assume that only the Visual area
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3074 * will be selected.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3075 * Exception: On the command line, both the selection is used and a mouse
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3076 * key is send.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3077 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3078 if (!mouse_has(checkfor) || checkfor == MOUSE_COMMAND)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3079 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3080 #ifdef FEAT_VISUAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3081 /* Don't do modeless selection in Visual mode. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3082 if (checkfor != MOUSE_NONEF && VIsual_active && (State & NORMAL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3083 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3084 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3085
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3086 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3087 * When 'mousemodel' is "popup", shift-left is translated to right.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3088 * But not when also using Ctrl.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3089 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3090 if (mouse_model_popup() && button == MOUSE_LEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3091 && (modifiers & MOUSE_SHIFT) && !(modifiers & MOUSE_CTRL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3092 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3093 button = MOUSE_RIGHT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3094 modifiers &= ~ MOUSE_SHIFT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3095 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3096
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3097 /* If the selection is done, allow the right button to extend it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3098 * If the selection is cleared, allow the right button to start it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3099 * from the cursor position. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3100 if (button == MOUSE_RIGHT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3101 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3102 if (clip_star.state == SELECT_CLEARED)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3103 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3104 if (State & CMDLINE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3105 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3106 col = msg_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3107 row = msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3108 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3109 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3110 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3111 col = curwin->w_wcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3112 row = curwin->w_wrow + W_WINROW(curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3113 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3114 clip_start_selection(col, row, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3115 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3116 clip_process_selection(button, X_2_COL(x), Y_2_ROW(y),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3117 repeated_click);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3118 did_clip = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3119 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3120 /* Allow the left button to start the selection */
2823
8bd38abda314 updated for version 7.3.187
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
3121 else if (button == MOUSE_LEFT)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3122 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3123 clip_start_selection(X_2_COL(x), Y_2_ROW(y), repeated_click);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3124 did_clip = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3125 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3126
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3127 /* Always allow pasting */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3128 if (button != MOUSE_MIDDLE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3129 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3130 if (!mouse_has(checkfor) || button == MOUSE_RELEASE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3131 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3132 if (checkfor != MOUSE_COMMAND)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3133 button = MOUSE_LEFT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3134 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3135 repeated_click = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3136 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3137
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3138 if (clip_star.state != SELECT_CLEARED && !did_clip)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3139 clip_clear_selection();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3140 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3141
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3142 /* Don't put events in the input queue now. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3143 if (hold_gui_events)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3144 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3145
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3146 row = gui_xy2colrow(x, y, &col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3147
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3148 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3149 * If we are dragging and the mouse hasn't moved far enough to be on a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3150 * different character, then don't send an event to vim.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3151 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3152 if (button == MOUSE_DRAG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3153 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3154 if (row == prev_row && col == prev_col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3155 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3156 /* Dragging above the window, set "row" to -1 to cause a scroll. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3157 if (y < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3158 row = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3159 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3160
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3161 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3162 * If topline has changed (window scrolled) since the last click, reset
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3163 * repeated_click, because we don't want starting Visual mode when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3164 * clicking on a different character in the text.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3165 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3166 if (curwin->w_topline != gui_prev_topline
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3167 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3168 || curwin->w_topfill != gui_prev_topfill
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3169 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3170 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3171 repeated_click = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3172
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3173 string[0] = CSI; /* this sequence is recognized by check_termcode() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3174 string[1] = KS_MOUSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3175 string[2] = KE_FILLER;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3176 if (button != MOUSE_DRAG && button != MOUSE_RELEASE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3177 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3178 if (repeated_click)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3179 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3180 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3181 * Handle multiple clicks. They only count if the mouse is still
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3182 * pointing at the same character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3183 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3184 if (button != prev_button || row != prev_row || col != prev_col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3185 num_clicks = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3186 else if (++num_clicks > 4)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3187 num_clicks = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3188 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3189 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3190 num_clicks = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3191 prev_button = button;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3192 gui_prev_topline = curwin->w_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3193 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3194 gui_prev_topfill = curwin->w_topfill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3195 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3196
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3197 string[3] = (char_u)(button | 0x20);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3198 SET_NUM_MOUSE_CLICKS(string[3], num_clicks);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3199 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3200 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3201 string[3] = (char_u)button;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3202
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3203 string[3] |= modifiers;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3204 fill_mouse_coord(string + 4, col, row);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3205 add_to_input_buf(string, 8);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3206
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3207 if (row < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3208 prev_row = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3209 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3210 prev_row = row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3211 prev_col = col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3212
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3213 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3214 * We need to make sure this is cleared since Athena doesn't tell us when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3215 * he is done dragging. Neither does GTK+ 2 -- at least for now.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3216 */
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
3217 #if defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3218 gui.dragged_sb = SBAR_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3219 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3220 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3221
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3222 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3223 * Convert x and y coordinate to column and row in text window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3224 * Corrects for multi-byte character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3225 * returns column in "*colp" and row as return value;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3226 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3227 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3228 gui_xy2colrow(x, y, colp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3229 int x;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3230 int y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3231 int *colp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3232 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3233 int col = check_col(X_2_COL(x));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3234 int row = check_row(Y_2_ROW(y));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3235
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3236 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3237 *colp = mb_fix_col(col, row);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3238 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3239 *colp = col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3240 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3241 return row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3242 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3243
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3244 #if defined(FEAT_MENU) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3245 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3246 * Callback function for when a menu entry has been selected.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3247 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3248 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3249 gui_menu_cb(menu)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3250 vimmenu_T *menu;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3251 {
664
ce5a759cc907 updated for version 7.0196
vimboss
parents: 609
diff changeset
3252 char_u bytes[sizeof(long_u)];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3253
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3254 /* Don't put events in the input queue now. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3255 if (hold_gui_events)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3256 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3257
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3258 bytes[0] = CSI;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3259 bytes[1] = KS_MENU;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3260 bytes[2] = KE_FILLER;
664
ce5a759cc907 updated for version 7.0196
vimboss
parents: 609
diff changeset
3261 add_to_input_buf(bytes, 3);
ce5a759cc907 updated for version 7.0196
vimboss
parents: 609
diff changeset
3262 add_long_to_buf((long_u)menu, bytes);
ce5a759cc907 updated for version 7.0196
vimboss
parents: 609
diff changeset
3263 add_to_input_buf_csi(bytes, sizeof(long_u));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3264 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3265 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3266
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3267 static int prev_which_scrollbars[3];
669
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3268
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3269 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3270 * Set which components are present.
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3271 * If "oldval" is not NULL, "oldval" is the previous value, the new value is
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3272 * in p_go.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3273 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3274 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3275 gui_init_which_components(oldval)
1887
fc89a4f98a8b updated for version 7.2-184
vimboss
parents: 1884
diff changeset
3276 char_u *oldval UNUSED;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3277 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3278 #ifdef FEAT_MENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3279 static int prev_menu_is_active = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3280 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3281 #ifdef FEAT_TOOLBAR
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3282 static int prev_toolbar = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3283 int using_toolbar = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3284 #endif
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3285 #ifdef FEAT_GUI_TABLINE
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3286 int using_tabline;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3287 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3288 #ifdef FEAT_FOOTER
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3289 static int prev_footer = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3290 int using_footer = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3291 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3292 #if defined(FEAT_MENU) && !defined(WIN16)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3293 static int prev_tearoff = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3294 int using_tearoff = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3295 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3296
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3297 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3298 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3299 #ifdef FEAT_MENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3300 int grey_old, grey_new;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3301 char_u *temp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3302 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3303 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3304 int need_set_size;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3305 int fix_size;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3306
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3307 #ifdef FEAT_MENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3308 if (oldval != NULL && gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3309 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3310 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3311 * Check if the menu's go from grey to non-grey or vise versa.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3312 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3313 grey_old = (vim_strchr(oldval, GO_GREY) != NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3314 grey_new = (vim_strchr(p_go, GO_GREY) != NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3315 if (grey_old != grey_new)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3316 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3317 temp = p_go;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3318 p_go = oldval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3319 gui_update_menus(MENU_ALL_MODES);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3320 p_go = temp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3321 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3322 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3323 gui.menu_is_active = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3324 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3325
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3326 for (i = 0; i < 3; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3327 gui.which_scrollbars[i] = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3328 for (p = p_go; *p; p++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3329 switch (*p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3330 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3331 case GO_LEFT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3332 gui.which_scrollbars[SBAR_LEFT] = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3333 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3334 case GO_RIGHT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3335 gui.which_scrollbars[SBAR_RIGHT] = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3336 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3337 #ifdef FEAT_VERTSPLIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3338 case GO_VLEFT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3339 if (win_hasvertsplit())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3340 gui.which_scrollbars[SBAR_LEFT] = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3341 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3342 case GO_VRIGHT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3343 if (win_hasvertsplit())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3344 gui.which_scrollbars[SBAR_RIGHT] = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3345 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3346 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3347 case GO_BOT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3348 gui.which_scrollbars[SBAR_BOTTOM] = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3349 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3350 #ifdef FEAT_MENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3351 case GO_MENUS:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3352 gui.menu_is_active = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3353 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3354 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3355 case GO_GREY:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3356 /* make menu's have grey items, ignored here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3357 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3358 #ifdef FEAT_TOOLBAR
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3359 case GO_TOOLBAR:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3360 using_toolbar = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3361 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3362 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3363 #ifdef FEAT_FOOTER
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3364 case GO_FOOTER:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3365 using_footer = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3366 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3367 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3368 case GO_TEAROFF:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3369 #if defined(FEAT_MENU) && !defined(WIN16)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3370 using_tearoff = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3371 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3372 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3373 default:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3374 /* Ignore options that are not supported */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3375 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3376 }
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3377
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3378 if (gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3379 {
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3380 need_set_size = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3381 fix_size = FALSE;
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3382
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3383 #ifdef FEAT_GUI_TABLINE
687
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3384 /* Update the GUI tab line, it may appear or disappear. This may
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3385 * cause the non-GUI tab line to disappear or appear. */
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3386 using_tabline = gui_has_tabline();
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3387 if (!gui_mch_showing_tabline() != !using_tabline)
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3388 {
797
a1a08851eac8 updated for version 7.0232
vimboss
parents: 788
diff changeset
3389 /* We don't want a resize event change "Rows" here, save and
a1a08851eac8 updated for version 7.0232
vimboss
parents: 788
diff changeset
3390 * restore it. Resizing is handled below. */
a1a08851eac8 updated for version 7.0232
vimboss
parents: 788
diff changeset
3391 i = Rows;
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3392 gui_update_tabline();
797
a1a08851eac8 updated for version 7.0232
vimboss
parents: 788
diff changeset
3393 Rows = i;
1767
59edc8429da0 updated for version 7.2-065
vimboss
parents: 1757
diff changeset
3394 need_set_size |= RESIZE_VERT;
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3395 if (using_tabline)
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3396 fix_size = TRUE;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3397 if (!gui_use_tabline())
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3398 redraw_tabline = TRUE; /* may draw non-GUI tab line */
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3399 }
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3400 #endif
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3401
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3402 for (i = 0; i < 3; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3403 {
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3404 /* The scrollbar needs to be updated when it is shown/unshown and
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3405 * when switching tab pages. But the size only changes when it's
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3406 * shown/unshown. Thus we need two places to remember whether a
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3407 * scrollbar is there or not. */
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3408 if (gui.which_scrollbars[i] != prev_which_scrollbars[i]
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
3409 #ifdef FEAT_WINDOWS
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3410 || gui.which_scrollbars[i]
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3411 != curtab->tp_prev_which_scrollbars[i]
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
3412 #endif
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
3413 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3414 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3415 if (i == SBAR_BOTTOM)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3416 gui_mch_enable_scrollbar(&gui.bottom_sbar,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3417 gui.which_scrollbars[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3418 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3419 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3420 FOR_ALL_WINDOWS(wp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3421 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3422 gui_do_scrollbar(wp, i, gui.which_scrollbars[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3423 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3424 }
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3425 if (gui.which_scrollbars[i] != prev_which_scrollbars[i])
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3426 {
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3427 if (i == SBAR_BOTTOM)
1767
59edc8429da0 updated for version 7.2-065
vimboss
parents: 1757
diff changeset
3428 need_set_size |= RESIZE_VERT;
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3429 else
1767
59edc8429da0 updated for version 7.2-065
vimboss
parents: 1757
diff changeset
3430 need_set_size |= RESIZE_HOR;
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3431 if (gui.which_scrollbars[i])
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3432 fix_size = TRUE;
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3433 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3434 }
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
3435 #ifdef FEAT_WINDOWS
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3436 curtab->tp_prev_which_scrollbars[i] = gui.which_scrollbars[i];
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
3437 #endif
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3438 prev_which_scrollbars[i] = gui.which_scrollbars[i];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3439 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3440
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3441 #ifdef FEAT_MENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3442 if (gui.menu_is_active != prev_menu_is_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3443 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3444 /* We don't want a resize event change "Rows" here, save and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3445 * restore it. Resizing is handled below. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3446 i = Rows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3447 gui_mch_enable_menu(gui.menu_is_active);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3448 Rows = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3449 prev_menu_is_active = gui.menu_is_active;
1767
59edc8429da0 updated for version 7.2-065
vimboss
parents: 1757
diff changeset
3450 need_set_size |= RESIZE_VERT;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3451 if (gui.menu_is_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3452 fix_size = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3453 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3454 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3455
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3456 #ifdef FEAT_TOOLBAR
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3457 if (using_toolbar != prev_toolbar)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3458 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3459 gui_mch_show_toolbar(using_toolbar);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3460 prev_toolbar = using_toolbar;
1767
59edc8429da0 updated for version 7.2-065
vimboss
parents: 1757
diff changeset
3461 need_set_size |= RESIZE_VERT;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3462 if (using_toolbar)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3463 fix_size = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3464 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3465 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3466 #ifdef FEAT_FOOTER
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3467 if (using_footer != prev_footer)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3468 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3469 gui_mch_enable_footer(using_footer);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3470 prev_footer = using_footer;
1767
59edc8429da0 updated for version 7.2-065
vimboss
parents: 1757
diff changeset
3471 need_set_size |= RESIZE_VERT;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3472 if (using_footer)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3473 fix_size = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3474 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3475 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3476 #if defined(FEAT_MENU) && !defined(WIN16) && !(defined(WIN3264) && !defined(FEAT_TEAROFF))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3477 if (using_tearoff != prev_tearoff)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3478 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3479 gui_mch_toggle_tearoffs(using_tearoff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3480 prev_tearoff = using_tearoff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3481 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3482 #endif
1767
59edc8429da0 updated for version 7.2-065
vimboss
parents: 1757
diff changeset
3483 if (need_set_size != 0)
276
b15976488069 updated for version 7.0074
vimboss
parents: 273
diff changeset
3484 {
b15976488069 updated for version 7.0074
vimboss
parents: 273
diff changeset
3485 #ifdef FEAT_GUI_GTK
1767
59edc8429da0 updated for version 7.2-065
vimboss
parents: 1757
diff changeset
3486 long prev_Columns = Columns;
59edc8429da0 updated for version 7.2-065
vimboss
parents: 1757
diff changeset
3487 long prev_Rows = Rows;
276
b15976488069 updated for version 7.0074
vimboss
parents: 273
diff changeset
3488 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3489 /* Adjust the size of the window to make the text area keep the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3490 * same size and to avoid that part of our window is off-screen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3491 * and a scrollbar can't be used, for example. */
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3492 gui_set_shellsize(FALSE, fix_size, need_set_size);
276
b15976488069 updated for version 7.0074
vimboss
parents: 273
diff changeset
3493
b15976488069 updated for version 7.0074
vimboss
parents: 273
diff changeset
3494 #ifdef FEAT_GUI_GTK
b15976488069 updated for version 7.0074
vimboss
parents: 273
diff changeset
3495 /* GTK has the annoying habit of sending us resize events when
b15976488069 updated for version 7.0074
vimboss
parents: 273
diff changeset
3496 * changing the window size ourselves. This mostly happens when
b15976488069 updated for version 7.0074
vimboss
parents: 273
diff changeset
3497 * waiting for a character to arrive, quite unpredictably, and may
b15976488069 updated for version 7.0074
vimboss
parents: 273
diff changeset
3498 * change Columns and Rows when we don't want it. Wait for a
b15976488069 updated for version 7.0074
vimboss
parents: 273
diff changeset
3499 * character here to avoid this effect.
b15976488069 updated for version 7.0074
vimboss
parents: 273
diff changeset
3500 * If you remove this, please test this command for resizing
292
bf6ee000a80c updated for version 7.0077
vimboss
parents: 287
diff changeset
3501 * effects (with optional left scrollbar): ":vsp|q|vsp|q|vsp|q".
687
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3502 * Don't do this while starting up though.
1767
59edc8429da0 updated for version 7.2-065
vimboss
parents: 1757
diff changeset
3503 * Don't change Rows when adding menu/toolbar/tabline.
59edc8429da0 updated for version 7.2-065
vimboss
parents: 1757
diff changeset
3504 * Don't change Columns when adding vertical toolbar. */
59edc8429da0 updated for version 7.2-065
vimboss
parents: 1757
diff changeset
3505 if (!gui.starting && need_set_size != (RESIZE_VERT | RESIZE_HOR))
287
77f5bac52921 updated for version 7.0076
vimboss
parents: 276
diff changeset
3506 (void)char_avail();
1767
59edc8429da0 updated for version 7.2-065
vimboss
parents: 1757
diff changeset
3507 if ((need_set_size & RESIZE_VERT) == 0)
59edc8429da0 updated for version 7.2-065
vimboss
parents: 1757
diff changeset
3508 Rows = prev_Rows;
59edc8429da0 updated for version 7.2-065
vimboss
parents: 1757
diff changeset
3509 if ((need_set_size & RESIZE_HOR) == 0)
59edc8429da0 updated for version 7.2-065
vimboss
parents: 1757
diff changeset
3510 Columns = prev_Columns;
276
b15976488069 updated for version 7.0074
vimboss
parents: 273
diff changeset
3511 #endif
b15976488069 updated for version 7.0074
vimboss
parents: 273
diff changeset
3512 }
687
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3513 #ifdef FEAT_WINDOWS
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3514 /* When the console tabline appears or disappears the window positions
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3515 * change. */
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3516 if (firstwin->w_winrow != tabline_height())
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3517 shell_new_rows(); /* recompute window positions and heights */
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3518 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3519 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3520 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3521
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3522 #if defined(FEAT_GUI_TABLINE) || defined(PROTO)
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3523 /*
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3524 * Return TRUE if the GUI is taking care of the tabline.
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3525 * It may still be hidden if 'showtabline' is zero.
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3526 */
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3527 int
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3528 gui_use_tabline()
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3529 {
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3530 return gui.in_use && vim_strchr(p_go, GO_TABLINE) != NULL;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3531 }
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3532
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3533 /*
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3534 * Return TRUE if the GUI is showing the tabline.
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3535 * This uses 'showtabline'.
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3536 */
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3537 static int
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3538 gui_has_tabline()
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3539 {
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3540 if (!gui_use_tabline()
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3541 || p_stal == 0
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3542 || (p_stal == 1 && first_tabpage->tp_next == NULL))
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3543 return FALSE;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3544 return TRUE;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3545 }
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3546
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3547 /*
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3548 * Update the tabline.
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3549 * This may display/undisplay the tabline and update the labels.
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3550 */
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3551 void
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3552 gui_update_tabline()
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3553 {
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3554 int showit = gui_has_tabline();
797
a1a08851eac8 updated for version 7.0232
vimboss
parents: 788
diff changeset
3555 int shown = gui_mch_showing_tabline();
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3556
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3557 if (!gui.starting && starting == 0)
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3558 {
848
f4d8553715f7 updated for version 7.0f04
vimboss
parents: 844
diff changeset
3559 /* Updating the tabline uses direct GUI commands, flush
f4d8553715f7 updated for version 7.0f04
vimboss
parents: 844
diff changeset
3560 * outstanding instructions first. (esp. clear screen) */
f4d8553715f7 updated for version 7.0f04
vimboss
parents: 844
diff changeset
3561 out_flush();
f4d8553715f7 updated for version 7.0f04
vimboss
parents: 844
diff changeset
3562 gui_mch_flush();
f4d8553715f7 updated for version 7.0f04
vimboss
parents: 844
diff changeset
3563
797
a1a08851eac8 updated for version 7.0232
vimboss
parents: 788
diff changeset
3564 if (!showit != !shown)
a1a08851eac8 updated for version 7.0232
vimboss
parents: 788
diff changeset
3565 gui_mch_show_tabline(showit);
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3566 if (showit != 0)
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3567 gui_mch_update_tabline();
797
a1a08851eac8 updated for version 7.0232
vimboss
parents: 788
diff changeset
3568
a1a08851eac8 updated for version 7.0232
vimboss
parents: 788
diff changeset
3569 /* When the tabs change from hidden to shown or from shown to
a1a08851eac8 updated for version 7.0232
vimboss
parents: 788
diff changeset
3570 * hidden the size of the text area should remain the same. */
a1a08851eac8 updated for version 7.0232
vimboss
parents: 788
diff changeset
3571 if (!showit != !shown)
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 810
diff changeset
3572 gui_set_shellsize(FALSE, showit, RESIZE_VERT);
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3573 }
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3574 }
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3575
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3576 /*
839
1f3b1021f002 updated for version 7.0e05
vimboss
parents: 838
diff changeset
3577 * Get the label or tooltip for tab page "tp" into NameBuff[].
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3578 */
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3579 void
839
1f3b1021f002 updated for version 7.0e05
vimboss
parents: 838
diff changeset
3580 get_tabline_label(tp, tooltip)
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3581 tabpage_T *tp;
839
1f3b1021f002 updated for version 7.0e05
vimboss
parents: 838
diff changeset
3582 int tooltip; /* TRUE: get tooltip */
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3583 {
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3584 int modified = FALSE;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3585 char_u buf[40];
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3586 int wincount;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3587 win_T *wp;
857
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
3588 char_u **opt;
839
1f3b1021f002 updated for version 7.0e05
vimboss
parents: 838
diff changeset
3589
1f3b1021f002 updated for version 7.0e05
vimboss
parents: 838
diff changeset
3590 /* Use 'guitablabel' or 'guitabtooltip' if it's set. */
857
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
3591 opt = (tooltip ? &p_gtt : &p_gtl);
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
3592 if (**opt != NUL)
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3593 {
687
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3594 int use_sandbox = FALSE;
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3595 int save_called_emsg = called_emsg;
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3596 char_u res[MAXPATHL];
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3597 tabpage_T *save_curtab;
839
1f3b1021f002 updated for version 7.0e05
vimboss
parents: 838
diff changeset
3598 char_u *opt_name = (char_u *)(tooltip ? "guitabtooltip"
1f3b1021f002 updated for version 7.0e05
vimboss
parents: 838
diff changeset
3599 : "guitablabel");
687
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3600
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3601 called_emsg = FALSE;
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3602
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3603 printer_page_num = tabpage_index(tp);
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3604 # ifdef FEAT_EVAL
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3605 set_vim_var_nr(VV_LNUM, printer_page_num);
839
1f3b1021f002 updated for version 7.0e05
vimboss
parents: 838
diff changeset
3606 use_sandbox = was_set_insecurely(opt_name, 0);
687
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3607 # endif
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3608 /* It's almost as going to the tabpage, but without autocommands. */
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3609 curtab->tp_firstwin = firstwin;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3610 curtab->tp_lastwin = lastwin;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3611 curtab->tp_curwin = curwin;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3612 save_curtab = curtab;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3613 curtab = tp;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3614 topframe = curtab->tp_topframe;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3615 firstwin = curtab->tp_firstwin;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3616 lastwin = curtab->tp_lastwin;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3617 curwin = curtab->tp_curwin;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3618 curbuf = curwin->w_buffer;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3619
687
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3620 /* Can't use NameBuff directly, build_stl_str_hl() uses it. */
857
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
3621 build_stl_str_hl(curwin, res, MAXPATHL, *opt, use_sandbox,
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3622 0, (int)Columns, NULL, NULL);
687
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3623 STRCPY(NameBuff, res);
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3624
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3625 /* Back to the original curtab. */
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3626 curtab = save_curtab;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3627 topframe = curtab->tp_topframe;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3628 firstwin = curtab->tp_firstwin;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3629 lastwin = curtab->tp_lastwin;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3630 curwin = curtab->tp_curwin;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3631 curbuf = curwin->w_buffer;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 694
diff changeset
3632
687
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3633 if (called_emsg)
839
1f3b1021f002 updated for version 7.0e05
vimboss
parents: 838
diff changeset
3634 set_string_option_direct(opt_name, -1,
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 691
diff changeset
3635 (char_u *)"", OPT_FREE, SID_ERROR);
687
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3636 called_emsg |= save_called_emsg;
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3637 }
857
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
3638
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
3639 /* If 'guitablabel'/'guitabtooltip' is not set or the result is empty then
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
3640 * use a default label. */
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
3641 if (**opt == NUL || *NameBuff == NUL)
687
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3642 {
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 811
diff changeset
3643 /* Get the buffer name into NameBuff[] and shorten it. */
687
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3644 get_trans_bufname(tp == curtab ? curbuf : tp->tp_curwin->w_buffer);
839
1f3b1021f002 updated for version 7.0e05
vimboss
parents: 838
diff changeset
3645 if (!tooltip)
1f3b1021f002 updated for version 7.0e05
vimboss
parents: 838
diff changeset
3646 shorten_dir(NameBuff);
687
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3647
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3648 wp = (tp == curtab) ? firstwin : tp->tp_firstwin;
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3649 for (wincount = 0; wp != NULL; wp = wp->w_next, ++wincount)
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3650 if (bufIsChanged(wp->w_buffer))
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3651 modified = TRUE;
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3652 if (modified || wincount > 1)
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3653 {
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3654 if (wincount > 1)
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3655 vim_snprintf((char *)buf, sizeof(buf), "%d", wincount);
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3656 else
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3657 buf[0] = NUL;
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3658 if (modified)
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3659 STRCAT(buf, "+");
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3660 STRCAT(buf, " ");
1620
73fe8baea242 updated for version 7.2a
vimboss
parents: 1584
diff changeset
3661 STRMOVE(NameBuff + STRLEN(buf), NameBuff);
687
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3662 mch_memmove(NameBuff, buf, STRLEN(buf));
d4b8e06e7c96 updated for version 7.0207
vimboss
parents: 685
diff changeset
3663 }
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3664 }
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3665 }
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3666
691
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3667 /*
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3668 * Send the event for clicking to select tab page "nr".
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3669 * Returns TRUE if it was done, FALSE when skipped because we are already at
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 835
diff changeset
3670 * that tab page or the cmdline window is open.
691
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3671 */
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3672 int
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3673 send_tabline_event(nr)
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3674 int nr;
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3675 {
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3676 char_u string[3];
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3677
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3678 if (nr == tabpage_index(curtab))
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3679 return FALSE;
844
d3bbb5dd3913 updated for version 7.0f02
vimboss
parents: 843
diff changeset
3680
d3bbb5dd3913 updated for version 7.0f02
vimboss
parents: 843
diff changeset
3681 /* Don't put events in the input queue now. */
d3bbb5dd3913 updated for version 7.0f02
vimboss
parents: 843
diff changeset
3682 if (hold_gui_events
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 835
diff changeset
3683 # ifdef FEAT_CMDWIN
844
d3bbb5dd3913 updated for version 7.0f02
vimboss
parents: 843
diff changeset
3684 || cmdwin_type != 0
d3bbb5dd3913 updated for version 7.0f02
vimboss
parents: 843
diff changeset
3685 # endif
d3bbb5dd3913 updated for version 7.0f02
vimboss
parents: 843
diff changeset
3686 )
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 835
diff changeset
3687 {
8e5830943bff updated for version 7.0e04
vimboss
parents: 835
diff changeset
3688 /* Set it back to the current tab page. */
8e5830943bff updated for version 7.0e04
vimboss
parents: 835
diff changeset
3689 gui_mch_set_curtab(tabpage_index(curtab));
8e5830943bff updated for version 7.0e04
vimboss
parents: 835
diff changeset
3690 return FALSE;
8e5830943bff updated for version 7.0e04
vimboss
parents: 835
diff changeset
3691 }
844
d3bbb5dd3913 updated for version 7.0f02
vimboss
parents: 843
diff changeset
3692
691
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3693 string[0] = CSI;
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3694 string[1] = KS_TABLINE;
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3695 string[2] = KE_FILLER;
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3696 add_to_input_buf(string, 3);
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3697 string[0] = nr;
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3698 add_to_input_buf_csi(string, 1);
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3699 return TRUE;
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3700 }
8106f3da02d0 updated for version 7.0208
vimboss
parents: 687
diff changeset
3701
824
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3702 /*
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3703 * Send a tabline menu event
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3704 */
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3705 void
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3706 send_tabline_menu_event(tabidx, event)
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3707 int tabidx;
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3708 int event;
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3709 {
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3710 char_u string[3];
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3711
844
d3bbb5dd3913 updated for version 7.0f02
vimboss
parents: 843
diff changeset
3712 /* Don't put events in the input queue now. */
d3bbb5dd3913 updated for version 7.0f02
vimboss
parents: 843
diff changeset
3713 if (hold_gui_events)
d3bbb5dd3913 updated for version 7.0f02
vimboss
parents: 843
diff changeset
3714 return;
d3bbb5dd3913 updated for version 7.0f02
vimboss
parents: 843
diff changeset
3715
824
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3716 string[0] = CSI;
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3717 string[1] = KS_TABMENU;
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3718 string[2] = KE_FILLER;
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3719 add_to_input_buf(string, 3);
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3720 string[0] = tabidx;
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3721 string[1] = (char_u)(long)event;
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3722 add_to_input_buf_csi(string, 2);
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3723 }
8dd456c1e283 updated for version 7.0c13
vimboss
parents: 819
diff changeset
3724
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
3725 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3726
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3727 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3728 * Scrollbar stuff:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3729 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3730
669
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3731 #if defined(FEAT_WINDOWS) || defined(PROTO)
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3732 /*
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3733 * Remove all scrollbars. Used before switching to another tab page.
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3734 */
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3735 void
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3736 gui_remove_scrollbars()
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3737 {
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3738 int i;
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3739 win_T *wp;
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3740
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3741 for (i = 0; i < 3; i++)
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3742 {
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3743 if (i == SBAR_BOTTOM)
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3744 gui_mch_enable_scrollbar(&gui.bottom_sbar, FALSE);
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3745 else
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3746 {
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3747 FOR_ALL_WINDOWS(wp)
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3748 {
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3749 gui_do_scrollbar(wp, i, FALSE);
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3750 }
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3751 }
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
3752 curtab->tp_prev_which_scrollbars[i] = -1;
669
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3753 }
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3754 }
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3755 #endif
b945c6d9f3c7 updated for version 7.0198
vimboss
parents: 664
diff changeset
3756
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3757 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3758 gui_create_scrollbar(sb, type, wp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3759 scrollbar_T *sb;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3760 int type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3761 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3762 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3763 static int sbar_ident = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3764
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3765 sb->ident = sbar_ident++; /* No check for too big, but would it happen? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3766 sb->wp = wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3767 sb->type = type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3768 sb->value = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3769 #ifdef FEAT_GUI_ATHENA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3770 sb->pixval = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3771 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3772 sb->size = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3773 sb->max = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3774 sb->top = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3775 sb->height = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3776 #ifdef FEAT_VERTSPLIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3777 sb->width = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3778 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3779 sb->status_height = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3780 gui_mch_create_scrollbar(sb, (wp == NULL) ? SBAR_HORIZ : SBAR_VERT);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3781 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3782
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3783 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3784 * Find the scrollbar with the given index.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3785 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3786 scrollbar_T *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3787 gui_find_scrollbar(ident)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3788 long ident;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3789 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3790 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3791
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3792 if (gui.bottom_sbar.ident == ident)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3793 return &gui.bottom_sbar;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3794 FOR_ALL_WINDOWS(wp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3795 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3796 if (wp->w_scrollbars[SBAR_LEFT].ident == ident)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3797 return &wp->w_scrollbars[SBAR_LEFT];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3798 if (wp->w_scrollbars[SBAR_RIGHT].ident == ident)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3799 return &wp->w_scrollbars[SBAR_RIGHT];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3800 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3801 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3802 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3803
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3804 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3805 * For most systems: Put a code in the input buffer for a dragged scrollbar.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3806 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3807 * For Win32, Macintosh and GTK+ 2:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3808 * Scrollbars seem to grab focus and vim doesn't read the input queue until
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3809 * you stop dragging the scrollbar. We get here each time the scrollbar is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3810 * dragged another pixel, but as far as the rest of vim goes, it thinks
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3811 * we're just hanging in the call to DispatchMessage() in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3812 * process_message(). The DispatchMessage() call that hangs was passed a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3813 * mouse button click event in the scrollbar window. -- webb.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3814 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3815 * Solution: Do the scrolling right here. But only when allowed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3816 * Ignore the scrollbars while executing an external command or when there
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3817 * are still characters to be processed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3818 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3819 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3820 gui_drag_scrollbar(sb, value, still_dragging)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3821 scrollbar_T *sb;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3822 long value;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3823 int still_dragging;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3824 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3825 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3826 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3827 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3828 int sb_num;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3829 #ifdef USE_ON_FLY_SCROLL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3830 colnr_T old_leftcol = curwin->w_leftcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3831 # ifdef FEAT_SCROLLBIND
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3832 linenr_T old_topline = curwin->w_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3833 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3834 # ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3835 int old_topfill = curwin->w_topfill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3836 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3837 #else
664
ce5a759cc907 updated for version 7.0196
vimboss
parents: 609
diff changeset
3838 char_u bytes[sizeof(long_u)];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3839 int byte_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3840 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3841
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3842 if (sb == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3843 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3844
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3845 /* Don't put events in the input queue now. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3846 if (hold_gui_events)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3847 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3848
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3849 #ifdef FEAT_CMDWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3850 if (cmdwin_type != 0 && sb->wp != curwin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3851 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3852 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3853
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3854 if (still_dragging)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3855 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3856 if (sb->wp == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3857 gui.dragged_sb = SBAR_BOTTOM;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3858 else if (sb == &sb->wp->w_scrollbars[SBAR_LEFT])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3859 gui.dragged_sb = SBAR_LEFT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3860 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3861 gui.dragged_sb = SBAR_RIGHT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3862 gui.dragged_wp = sb->wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3863 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3864 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3865 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3866 gui.dragged_sb = SBAR_NONE;
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
3867 #ifdef FEAT_GUI_GTK
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3868 /* Keep the "dragged_wp" value until after the scrolling, for when the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3869 * moust button is released. GTK2 doesn't send the button-up event. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3870 gui.dragged_wp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3871 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3872 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3873
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3874 /* Vertical sbar info is kept in the first sbar (the left one) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3875 if (sb->wp != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3876 sb = &sb->wp->w_scrollbars[0];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3877
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3878 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3879 * Check validity of value
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3880 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3881 if (value < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3882 value = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3883 #ifdef SCROLL_PAST_END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3884 else if (value > sb->max)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3885 value = sb->max;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3886 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3887 if (value > sb->max - sb->size + 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3888 value = sb->max - sb->size + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3889 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3890
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3891 sb->value = value;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3892
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3893 #ifdef USE_ON_FLY_SCROLL
1476
ea1a2950ed16 updated for version 7.1-191
vimboss
parents: 1434
diff changeset
3894 /* When not allowed to do the scrolling right now, return.
ea1a2950ed16 updated for version 7.1-191
vimboss
parents: 1434
diff changeset
3895 * This also checked input_available(), but that causes the first click in
ea1a2950ed16 updated for version 7.1-191
vimboss
parents: 1434
diff changeset
3896 * a scrollbar to be ignored when Vim doesn't have focus. */
ea1a2950ed16 updated for version 7.1-191
vimboss
parents: 1434
diff changeset
3897 if (dont_scroll)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3898 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3899 #endif
973
d607b48414b7 updated for version 7.0-099
vimboss
parents: 946
diff changeset
3900 #ifdef FEAT_INS_EXPAND
d607b48414b7 updated for version 7.0-099
vimboss
parents: 946
diff changeset
3901 /* Disallow scrolling the current window when the completion popup menu is
d607b48414b7 updated for version 7.0-099
vimboss
parents: 946
diff changeset
3902 * visible. */
d607b48414b7 updated for version 7.0-099
vimboss
parents: 946
diff changeset
3903 if ((sb->wp == NULL || sb->wp == curwin) && pum_visible())
d607b48414b7 updated for version 7.0-099
vimboss
parents: 946
diff changeset
3904 return;
d607b48414b7 updated for version 7.0-099
vimboss
parents: 946
diff changeset
3905 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3906
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3907 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3908 if (sb->wp == NULL && curwin->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3909 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3910 value = sb->max + 1 - sb->size - value;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3911 if (value < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3912 value = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3913 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3914 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3915
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3916 if (sb->wp != NULL) /* vertical scrollbar */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3917 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3918 sb_num = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3919 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3920 for (wp = firstwin; wp != sb->wp && wp != NULL; wp = wp->w_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3921 sb_num++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3922 if (wp == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3923 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3924 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3925 if (sb->wp != curwin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3926 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3927 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3928
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3929 #ifdef USE_ON_FLY_SCROLL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3930 current_scrollbar = sb_num;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3931 scrollbar_value = value;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3932 if (State & NORMAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3933 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3934 gui_do_scroll();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3935 setcursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3936 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3937 else if (State & INSERT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3938 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3939 ins_scroll();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3940 setcursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3941 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3942 else if (State & CMDLINE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3943 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3944 if (msg_scrolled == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3945 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3946 gui_do_scroll();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3947 redrawcmdline();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3948 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3949 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3950 # ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3951 /* Value may have been changed for closed fold. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3952 sb->value = sb->wp->w_topline - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3953 # endif
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
3954
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
3955 /* When dragging one scrollbar and there is another one at the other
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
3956 * side move the thumb of that one too. */
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
3957 if (gui.which_scrollbars[SBAR_RIGHT] && gui.which_scrollbars[SBAR_LEFT])
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
3958 gui_mch_set_scrollbar_thumb(
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
3959 &sb->wp->w_scrollbars[
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
3960 sb == &sb->wp->w_scrollbars[SBAR_RIGHT]
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
3961 ? SBAR_LEFT : SBAR_RIGHT],
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
3962 sb->value, sb->size, sb->max);
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
3963
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3964 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3965 bytes[0] = CSI;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3966 bytes[1] = KS_VER_SCROLLBAR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3967 bytes[2] = KE_FILLER;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3968 bytes[3] = (char_u)sb_num;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3969 byte_count = 4;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3970 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3971 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3972 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3973 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3974 #ifdef USE_ON_FLY_SCROLL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3975 scrollbar_value = value;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3976
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3977 if (State & NORMAL)
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
3978 gui_do_horiz_scroll(scrollbar_value, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3979 else if (State & INSERT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3980 ins_horscroll();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3981 else if (State & CMDLINE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3982 {
540
2df7f3a5eb96 updated for version 7.0153
vimboss
parents: 536
diff changeset
3983 if (msg_scrolled == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3984 {
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
3985 gui_do_horiz_scroll(scrollbar_value, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3986 redrawcmdline();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3987 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3988 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3989 if (old_leftcol != curwin->w_leftcol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3990 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3991 updateWindow(curwin); /* update window, status and cmdline */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3992 setcursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3993 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3994 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3995 bytes[0] = CSI;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3996 bytes[1] = KS_HOR_SCROLLBAR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3997 bytes[2] = KE_FILLER;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3998 byte_count = 3;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3999 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4000 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4001
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4002 #ifdef USE_ON_FLY_SCROLL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4003 # ifdef FEAT_SCROLLBIND
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4004 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4005 * synchronize other windows, as necessary according to 'scrollbind'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4006 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4007 if (curwin->w_p_scb
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4008 && ((sb->wp == NULL && curwin->w_leftcol != old_leftcol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4009 || (sb->wp == curwin && (curwin->w_topline != old_topline
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4010 # ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4011 || curwin->w_topfill != old_topfill
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4012 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4013 ))))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4014 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4015 do_check_scrollbind(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4016 /* need to update the window right here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4017 for (wp = firstwin; wp != NULL; wp = wp->w_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4018 if (wp->w_redr_type > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4019 updateWindow(wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4020 setcursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4021 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4022 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4023 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4024 gui_update_cursor(FALSE, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4025 #else
664
ce5a759cc907 updated for version 7.0196
vimboss
parents: 609
diff changeset
4026 add_to_input_buf(bytes, byte_count);
ce5a759cc907 updated for version 7.0196
vimboss
parents: 609
diff changeset
4027 add_long_to_buf((long_u)value, bytes);
ce5a759cc907 updated for version 7.0196
vimboss
parents: 609
diff changeset
4028 add_to_input_buf_csi(bytes, sizeof(long_u));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4029 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4030 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4031
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4032 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4033 * Scrollbar stuff:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4034 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4035
2237
770485470e59 Add a few #ifdefs to exclude functions that are not used. (Domnique Pelle)
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
4036 #if defined(FEAT_AUTOCMD) || defined(FEAT_WINDOWS) || defined(PROTO)
1906
ff9ecf14efe3 updated for version 7.2-203
vimboss
parents: 1887
diff changeset
4037 /*
ff9ecf14efe3 updated for version 7.2-203
vimboss
parents: 1887
diff changeset
4038 * Called when something in the window layout has changed.
ff9ecf14efe3 updated for version 7.2-203
vimboss
parents: 1887
diff changeset
4039 */
ff9ecf14efe3 updated for version 7.2-203
vimboss
parents: 1887
diff changeset
4040 void
ff9ecf14efe3 updated for version 7.2-203
vimboss
parents: 1887
diff changeset
4041 gui_may_update_scrollbars()
ff9ecf14efe3 updated for version 7.2-203
vimboss
parents: 1887
diff changeset
4042 {
ff9ecf14efe3 updated for version 7.2-203
vimboss
parents: 1887
diff changeset
4043 if (gui.in_use && starting == 0)
ff9ecf14efe3 updated for version 7.2-203
vimboss
parents: 1887
diff changeset
4044 {
ff9ecf14efe3 updated for version 7.2-203
vimboss
parents: 1887
diff changeset
4045 out_flush();
ff9ecf14efe3 updated for version 7.2-203
vimboss
parents: 1887
diff changeset
4046 gui_init_which_components(NULL);
ff9ecf14efe3 updated for version 7.2-203
vimboss
parents: 1887
diff changeset
4047 gui_update_scrollbars(TRUE);
ff9ecf14efe3 updated for version 7.2-203
vimboss
parents: 1887
diff changeset
4048 }
ff9ecf14efe3 updated for version 7.2-203
vimboss
parents: 1887
diff changeset
4049 need_mouse_correct = TRUE;
ff9ecf14efe3 updated for version 7.2-203
vimboss
parents: 1887
diff changeset
4050 }
2237
770485470e59 Add a few #ifdefs to exclude functions that are not used. (Domnique Pelle)
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
4051 #endif
1906
ff9ecf14efe3 updated for version 7.2-203
vimboss
parents: 1887
diff changeset
4052
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4053 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4054 gui_update_scrollbars(force)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4055 int force; /* Force all scrollbars to get updated */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4056 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4057 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4058 scrollbar_T *sb;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4059 long val, size, max; /* need 32 bits here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4060 int which_sb;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4061 int h, y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4062 #ifdef FEAT_VERTSPLIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4063 static win_T *prev_curwin = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4064 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4065
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4066 /* Update the horizontal scrollbar */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4067 gui_update_horiz_scrollbar(force);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4068
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4069 #ifndef WIN3264
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4070 /* Return straight away if there is neither a left nor right scrollbar.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4071 * On MS-Windows this is required anyway for scrollwheel messages. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4072 if (!gui.which_scrollbars[SBAR_LEFT] && !gui.which_scrollbars[SBAR_RIGHT])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4073 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4074 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4075
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4076 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4077 * Don't want to update a scrollbar while we're dragging it. But if we
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4078 * have both a left and right scrollbar, and we drag one of them, we still
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4079 * need to update the other one.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4080 */
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 669
diff changeset
4081 if (!force && (gui.dragged_sb == SBAR_LEFT || gui.dragged_sb == SBAR_RIGHT)
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 669
diff changeset
4082 && gui.which_scrollbars[SBAR_LEFT]
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 669
diff changeset
4083 && gui.which_scrollbars[SBAR_RIGHT])
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4084 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4085 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4086 * If we have two scrollbars and one of them is being dragged, just
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4087 * copy the scrollbar position from the dragged one to the other one.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4088 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4089 which_sb = SBAR_LEFT + SBAR_RIGHT - gui.dragged_sb;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4090 if (gui.dragged_wp != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4091 gui_mch_set_scrollbar_thumb(
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4092 &gui.dragged_wp->w_scrollbars[which_sb],
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4093 gui.dragged_wp->w_scrollbars[0].value,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4094 gui.dragged_wp->w_scrollbars[0].size,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4095 gui.dragged_wp->w_scrollbars[0].max);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4096 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4097
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4098 /* avoid that moving components around generates events */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4099 ++hold_gui_events;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4100
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4101 for (wp = firstwin; wp != NULL; wp = W_NEXT(wp))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4102 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4103 if (wp->w_buffer == NULL) /* just in case */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4104 continue;
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 669
diff changeset
4105 /* Skip a scrollbar that is being dragged. */
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 669
diff changeset
4106 if (!force && (gui.dragged_sb == SBAR_LEFT
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 669
diff changeset
4107 || gui.dragged_sb == SBAR_RIGHT)
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 669
diff changeset
4108 && gui.dragged_wp == wp)
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 669
diff changeset
4109 continue;
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 669
diff changeset
4110
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4111 #ifdef SCROLL_PAST_END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4112 max = wp->w_buffer->b_ml.ml_line_count - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4113 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4114 max = wp->w_buffer->b_ml.ml_line_count + wp->w_height - 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4115 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4116 if (max < 0) /* empty buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4117 max = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4118 val = wp->w_topline - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4119 size = wp->w_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4120 #ifdef SCROLL_PAST_END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4121 if (val > max) /* just in case */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4122 val = max;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4123 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4124 if (size > max + 1) /* just in case */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4125 size = max + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4126 if (val > max - size + 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4127 val = max - size + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4128 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4129 if (val < 0) /* minimal value is 0 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4130 val = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4131
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4132 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4133 * Scrollbar at index 0 (the left one) contains all the information.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4134 * It would be the same info for left and right so we just store it for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4135 * one of them.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4136 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4137 sb = &wp->w_scrollbars[0];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4138
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4139 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4140 * Note: no check for valid w_botline. If it's not valid the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4141 * scrollbars will be updated later anyway.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4142 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4143 if (size < 1 || wp->w_botline - 2 > max)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4144 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4145 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4146 * This can happen during changing files. Just don't update the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4147 * scrollbar for now.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4148 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4149 sb->height = 0; /* Force update next time */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4150 if (gui.which_scrollbars[SBAR_LEFT])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4151 gui_do_scrollbar(wp, SBAR_LEFT, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4152 if (gui.which_scrollbars[SBAR_RIGHT])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4153 gui_do_scrollbar(wp, SBAR_RIGHT, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4154 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4155 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4156 if (force || sb->height != wp->w_height
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4157 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4158 || sb->top != wp->w_winrow
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4159 || sb->status_height != wp->w_status_height
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4160 # ifdef FEAT_VERTSPLIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4161 || sb->width != wp->w_width
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4162 || prev_curwin != curwin
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4163 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4164 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4165 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4166 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4167 /* Height, width or position of scrollbar has changed. For
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4168 * vertical split: curwin changed. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4169 sb->height = wp->w_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4170 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4171 sb->top = wp->w_winrow;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4172 sb->status_height = wp->w_status_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4173 # ifdef FEAT_VERTSPLIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4174 sb->width = wp->w_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4175 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4176 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4177
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4178 /* Calculate height and position in pixels */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4179 h = (sb->height + sb->status_height) * gui.char_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4180 y = sb->top * gui.char_height + gui.border_offset;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4181 #if defined(FEAT_MENU) && !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_MOTIF) && !defined(FEAT_GUI_PHOTON)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4182 if (gui.menu_is_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4183 y += gui.menu_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4184 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4185
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4186 #if defined(FEAT_TOOLBAR) && (defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_ATHENA))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4187 if (vim_strchr(p_go, GO_TOOLBAR) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4188 # ifdef FEAT_GUI_ATHENA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4189 y += gui.toolbar_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4190 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4191 # ifdef FEAT_GUI_MSWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4192 y += TOOLBAR_BUTTON_HEIGHT + TOOLBAR_BORDER_HEIGHT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4193 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4194 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4195 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4196
810
9f345c48220b updated for version 7.0c
vimboss
parents: 797
diff changeset
4197 #if defined(FEAT_GUI_TABLINE) && defined(FEAT_GUI_MSWIN)
9f345c48220b updated for version 7.0c
vimboss
parents: 797
diff changeset
4198 if (gui_has_tabline())
843
9f279ebda751 updated for version 7.0f01
vimboss
parents: 839
diff changeset
4199 y += gui.tabline_height;
810
9f345c48220b updated for version 7.0c
vimboss
parents: 797
diff changeset
4200 #endif
9f345c48220b updated for version 7.0c
vimboss
parents: 797
diff changeset
4201
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4202 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4203 if (wp->w_winrow == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4204 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4205 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4206 /* Height of top scrollbar includes width of top border */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4207 h += gui.border_offset;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4208 y -= gui.border_offset;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4209 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4210 if (gui.which_scrollbars[SBAR_LEFT])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4211 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4212 gui_mch_set_scrollbar_pos(&wp->w_scrollbars[SBAR_LEFT],
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4213 gui.left_sbar_x, y,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4214 gui.scrollbar_width, h);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4215 gui_do_scrollbar(wp, SBAR_LEFT, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4216 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4217 if (gui.which_scrollbars[SBAR_RIGHT])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4218 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4219 gui_mch_set_scrollbar_pos(&wp->w_scrollbars[SBAR_RIGHT],
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4220 gui.right_sbar_x, y,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4221 gui.scrollbar_width, h);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4222 gui_do_scrollbar(wp, SBAR_RIGHT, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4223 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4224 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4225
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4226 /* Reduce the number of calls to gui_mch_set_scrollbar_thumb() by
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4227 * checking if the thumb moved at least a pixel. Only do this for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4228 * Athena, most other GUIs require the update anyway to make the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4229 * arrows work. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4230 #ifdef FEAT_GUI_ATHENA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4231 if (max == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4232 y = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4233 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4234 y = (val * (sb->height + 2) * gui.char_height + max / 2) / max;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4235 if (force || sb->pixval != y || sb->size != size || sb->max != max)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4236 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4237 if (force || sb->value != val || sb->size != size || sb->max != max)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4238 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4239 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4240 /* Thumb of scrollbar has moved */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4241 sb->value = val;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4242 #ifdef FEAT_GUI_ATHENA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4243 sb->pixval = y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4244 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4245 sb->size = size;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4246 sb->max = max;
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 669
diff changeset
4247 if (gui.which_scrollbars[SBAR_LEFT]
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 669
diff changeset
4248 && (gui.dragged_sb != SBAR_LEFT || gui.dragged_wp != wp))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4249 gui_mch_set_scrollbar_thumb(&wp->w_scrollbars[SBAR_LEFT],
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4250 val, size, max);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4251 if (gui.which_scrollbars[SBAR_RIGHT]
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 669
diff changeset
4252 && (gui.dragged_sb != SBAR_RIGHT || gui.dragged_wp != wp))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4253 gui_mch_set_scrollbar_thumb(&wp->w_scrollbars[SBAR_RIGHT],
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4254 val, size, max);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4255 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4256 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4257 #ifdef FEAT_VERTSPLIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4258 prev_curwin = curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4259 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4260 --hold_gui_events;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4261 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4262
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4263 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4264 * Enable or disable a scrollbar.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4265 * Check for scrollbars for vertically split windows which are not enabled
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4266 * sometimes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4267 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4268 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4269 gui_do_scrollbar(wp, which, enable)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4270 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4271 int which; /* SBAR_LEFT or SBAR_RIGHT */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4272 int enable; /* TRUE to enable scrollbar */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4273 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4274 #ifdef FEAT_VERTSPLIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4275 int midcol = curwin->w_wincol + curwin->w_width / 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4276 int has_midcol = (wp->w_wincol <= midcol
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4277 && wp->w_wincol + wp->w_width >= midcol);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4278
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4279 /* Only enable scrollbars that contain the middle column of the current
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4280 * window. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4281 if (gui.which_scrollbars[SBAR_RIGHT] != gui.which_scrollbars[SBAR_LEFT])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4282 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4283 /* Scrollbars only on one side. Don't enable scrollbars that don't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4284 * contain the middle column of the current window. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4285 if (!has_midcol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4286 enable = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4287 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4288 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4289 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4290 /* Scrollbars on both sides. Don't enable scrollbars that neither
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4291 * contain the middle column of the current window nor are on the far
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4292 * side. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4293 if (midcol > Columns / 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4294 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4295 if (which == SBAR_LEFT ? wp->w_wincol != 0 : !has_midcol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4296 enable = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4297 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4298 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4299 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4300 if (which == SBAR_RIGHT ? wp->w_wincol + wp->w_width != Columns
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4301 : !has_midcol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4302 enable = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4303 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4304 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4305 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4306 gui_mch_enable_scrollbar(&wp->w_scrollbars[which], enable);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4307 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4308
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4309 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4310 * Scroll a window according to the values set in the globals current_scrollbar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4311 * and scrollbar_value. Return TRUE if the cursor in the current window moved
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4312 * or FALSE otherwise.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4313 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4314 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4315 gui_do_scroll()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4316 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4317 win_T *wp, *save_wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4318 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4319 long nlines;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4320 pos_T old_cursor;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4321 linenr_T old_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4322 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4323 int old_topfill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4324 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4325
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4326 for (wp = firstwin, i = 0; i < current_scrollbar; wp = W_NEXT(wp), i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4327 if (wp == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4328 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4329 if (wp == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4330 /* Couldn't find window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4331 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4332
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4333 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4334 * Compute number of lines to scroll. If zero, nothing to do.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4335 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4336 nlines = (long)scrollbar_value + 1 - (long)wp->w_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4337 if (nlines == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4338 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4339
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4340 save_wp = curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4341 old_topline = wp->w_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4342 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4343 old_topfill = wp->w_topfill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4344 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4345 old_cursor = wp->w_cursor;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4346 curwin = wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4347 curbuf = wp->w_buffer;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4348 if (nlines < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4349 scrolldown(-nlines, gui.dragged_wp == NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4350 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4351 scrollup(nlines, gui.dragged_wp == NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4352 /* Reset dragged_wp after using it. "dragged_sb" will have been reset for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4353 * the mouse-up event already, but we still want it to behave like when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4354 * dragging. But not the next click in an arrow. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4355 if (gui.dragged_sb == SBAR_NONE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4356 gui.dragged_wp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4357
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4358 if (old_topline != wp->w_topline
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4359 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4360 || old_topfill != wp->w_topfill
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4361 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4362 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4363 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4364 if (p_so != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4365 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4366 cursor_correct(); /* fix window for 'so' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4367 update_topline(); /* avoid up/down jump */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4368 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4369 if (old_cursor.lnum != wp->w_cursor.lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4370 coladvance(wp->w_curswant);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4371 #ifdef FEAT_SCROLLBIND
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4372 wp->w_scbind_pos = wp->w_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4373 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4374 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4375
519
d50452846776 updated for version 7.0145
vimboss
parents: 496
diff changeset
4376 /* Make sure wp->w_leftcol and wp->w_skipcol are correct. */
d50452846776 updated for version 7.0145
vimboss
parents: 496
diff changeset
4377 validate_cursor();
d50452846776 updated for version 7.0145
vimboss
parents: 496
diff changeset
4378
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4379 curwin = save_wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4380 curbuf = save_wp->w_buffer;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4381
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4382 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4383 * Don't call updateWindow() when nothing has changed (it will overwrite
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4384 * the status line!).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4385 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4386 if (old_topline != wp->w_topline
519
d50452846776 updated for version 7.0145
vimboss
parents: 496
diff changeset
4387 || wp->w_redr_type != 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4388 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4389 || old_topfill != wp->w_topfill
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4390 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4391 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4392 {
1434
40aa7ae37901 updated for version 7.1-149
vimboss
parents: 1380
diff changeset
4393 int type = VALID;
40aa7ae37901 updated for version 7.1-149
vimboss
parents: 1380
diff changeset
4394
40aa7ae37901 updated for version 7.1-149
vimboss
parents: 1380
diff changeset
4395 #ifdef FEAT_INS_EXPAND
40aa7ae37901 updated for version 7.1-149
vimboss
parents: 1380
diff changeset
4396 if (pum_visible())
40aa7ae37901 updated for version 7.1-149
vimboss
parents: 1380
diff changeset
4397 {
40aa7ae37901 updated for version 7.1-149
vimboss
parents: 1380
diff changeset
4398 type = NOT_VALID;
40aa7ae37901 updated for version 7.1-149
vimboss
parents: 1380
diff changeset
4399 wp->w_lines_valid = 0;
40aa7ae37901 updated for version 7.1-149
vimboss
parents: 1380
diff changeset
4400 }
40aa7ae37901 updated for version 7.1-149
vimboss
parents: 1380
diff changeset
4401 #endif
40aa7ae37901 updated for version 7.1-149
vimboss
parents: 1380
diff changeset
4402 /* Don't set must_redraw here, it may cause the popup menu to
40aa7ae37901 updated for version 7.1-149
vimboss
parents: 1380
diff changeset
4403 * disappear when losing focus after a scrollbar drag. */
40aa7ae37901 updated for version 7.1-149
vimboss
parents: 1380
diff changeset
4404 if (wp->w_redr_type < type)
40aa7ae37901 updated for version 7.1-149
vimboss
parents: 1380
diff changeset
4405 wp->w_redr_type = type;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4406 updateWindow(wp); /* update window, status line, and cmdline */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4407 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4408
973
d607b48414b7 updated for version 7.0-099
vimboss
parents: 946
diff changeset
4409 #ifdef FEAT_INS_EXPAND
d607b48414b7 updated for version 7.0-099
vimboss
parents: 946
diff changeset
4410 /* May need to redraw the popup menu. */
d607b48414b7 updated for version 7.0-099
vimboss
parents: 946
diff changeset
4411 if (pum_visible())
d607b48414b7 updated for version 7.0-099
vimboss
parents: 946
diff changeset
4412 pum_redraw();
d607b48414b7 updated for version 7.0-099
vimboss
parents: 946
diff changeset
4413 #endif
d607b48414b7 updated for version 7.0-099
vimboss
parents: 946
diff changeset
4414
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4415 return (wp == curwin && !equalpos(curwin->w_cursor, old_cursor));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4416 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4417
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4418
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4419 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4420 * Horizontal scrollbar stuff:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4421 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4422
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4423 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4424 * Return length of line "lnum" for horizontal scrolling.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4425 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4426 static colnr_T
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4427 scroll_line_len(lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4428 linenr_T lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4429 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4430 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4431 colnr_T col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4432 int w;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4433
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4434 p = ml_get(lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4435 col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4436 if (*p != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4437 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4438 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4439 w = chartabsize(p, col);
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 37
diff changeset
4440 mb_ptr_adv(p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4441 if (*p == NUL) /* don't count the last character */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4442 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4443 col += w;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4444 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4445 return col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4446 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4447
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4448 /* Remember which line is currently the longest, so that we don't have to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4449 * search for it when scrolling horizontally. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4450 static linenr_T longest_lnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4451
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4452 /*
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4453 * Find longest visible line number. If this is not possible (or not desired,
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4454 * by setting 'h' in "guioptions") then the current line number is returned.
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4455 */
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4456 static linenr_T
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4457 gui_find_longest_lnum()
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4458 {
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4459 linenr_T ret = 0;
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4460
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4461 /* Calculate maximum for horizontal scrollbar. Check for reasonable
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4462 * line numbers, topline and botline can be invalid when displaying is
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4463 * postponed. */
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4464 if (vim_strchr(p_go, GO_HORSCROLL) == NULL
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4465 && curwin->w_topline <= curwin->w_cursor.lnum
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4466 && curwin->w_botline > curwin->w_cursor.lnum
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4467 && curwin->w_botline <= curbuf->b_ml.ml_line_count + 1)
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4468 {
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4469 linenr_T lnum;
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4470 colnr_T n;
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4471 long max = 0;
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4472
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4473 /* Use maximum of all visible lines. Remember the lnum of the
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4474 * longest line, closest to the cursor line. Used when scrolling
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4475 * below. */
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4476 for (lnum = curwin->w_topline; lnum < curwin->w_botline; ++lnum)
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4477 {
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4478 n = scroll_line_len(lnum);
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4479 if (n > (colnr_T)max)
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4480 {
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4481 max = n;
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4482 ret = lnum;
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4483 }
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4484 else if (n == (colnr_T)max
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4485 && abs((int)(lnum - curwin->w_cursor.lnum))
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4486 < abs((int)(ret - curwin->w_cursor.lnum)))
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4487 ret = lnum;
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4488 }
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4489 }
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4490 else
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4491 /* Use cursor line only. */
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4492 ret = curwin->w_cursor.lnum;
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4493
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4494 return ret;
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4495 }
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4496
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4497 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4498 gui_update_horiz_scrollbar(force)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4499 int force;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4500 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4501 long value, size, max; /* need 32 bit ints here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4502
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4503 if (!gui.which_scrollbars[SBAR_BOTTOM])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4504 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4505
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4506 if (!force && gui.dragged_sb == SBAR_BOTTOM)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4507 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4508
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4509 if (!force && curwin->w_p_wrap && gui.prev_wrap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4510 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4511
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4512 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4513 * It is possible for the cursor to be invalid if we're in the middle of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4514 * something (like changing files). If so, don't do anything for now.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4515 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4516 if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4517 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4518 gui.bottom_sbar.value = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4519 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4520 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4521
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4522 size = W_WIDTH(curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4523 if (curwin->w_p_wrap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4524 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4525 value = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4526 #ifdef SCROLL_PAST_END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4527 max = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4528 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4529 max = W_WIDTH(curwin) - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4530 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4531 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4532 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4533 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4534 value = curwin->w_leftcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4535
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4536 longest_lnum = gui_find_longest_lnum();
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4537 max = scroll_line_len(longest_lnum);
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4538
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4539 #ifdef FEAT_VIRTUALEDIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4540 if (virtual_active())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4541 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4542 /* May move the cursor even further to the right. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4543 if (curwin->w_virtcol >= (colnr_T)max)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4544 max = curwin->w_virtcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4545 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4546 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4547
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4548 #ifndef SCROLL_PAST_END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4549 max += W_WIDTH(curwin) - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4550 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4551 /* The line number isn't scrolled, thus there is less space when
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2065
diff changeset
4552 * 'number' or 'relativenumber' is set (also for 'foldcolumn'). */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4553 size -= curwin_col_off();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4554 #ifndef SCROLL_PAST_END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4555 max -= curwin_col_off();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4556 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4557 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4558
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4559 #ifndef SCROLL_PAST_END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4560 if (value > max - size + 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4561 value = max - size + 1; /* limit the value to allowable range */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4562 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4563
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4564 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4565 if (curwin->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4566 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4567 value = max + 1 - size - value;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4568 if (value < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4569 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4570 size += value;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4571 value = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4572 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4573 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4574 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4575 if (!force && value == gui.bottom_sbar.value && size == gui.bottom_sbar.size
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4576 && max == gui.bottom_sbar.max)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4577 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4578
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4579 gui.bottom_sbar.value = value;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4580 gui.bottom_sbar.size = size;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4581 gui.bottom_sbar.max = max;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4582 gui.prev_wrap = curwin->w_p_wrap;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4583
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4584 gui_mch_set_scrollbar_thumb(&gui.bottom_sbar, value, size, max);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4585 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4586
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4587 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4588 * Do a horizontal scroll. Return TRUE if the cursor moved, FALSE otherwise.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4589 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4590 int
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4591 gui_do_horiz_scroll(leftcol, compute_longest_lnum)
2416
1a9c16dd76d4 Fix compiler warnings on 64 bit systems.
Bram Moolenaar <bram@vim.org>
parents: 2409
diff changeset
4592 long_u leftcol;
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4593 int compute_longest_lnum;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4594 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4595 /* no wrapping, no scrolling */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4596 if (curwin->w_p_wrap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4597 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4598
2416
1a9c16dd76d4 Fix compiler warnings on 64 bit systems.
Bram Moolenaar <bram@vim.org>
parents: 2409
diff changeset
4599 if (curwin->w_leftcol == (colnr_T)leftcol)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4600 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4601
2416
1a9c16dd76d4 Fix compiler warnings on 64 bit systems.
Bram Moolenaar <bram@vim.org>
parents: 2409
diff changeset
4602 curwin->w_leftcol = (colnr_T)leftcol;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4603
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4604 /* When the line of the cursor is too short, move the cursor to the
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4605 * longest visible line. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4606 if (vim_strchr(p_go, GO_HORSCROLL) == NULL
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4607 && !virtual_active()
2416
1a9c16dd76d4 Fix compiler warnings on 64 bit systems.
Bram Moolenaar <bram@vim.org>
parents: 2409
diff changeset
4608 && (colnr_T)leftcol > scroll_line_len(curwin->w_cursor.lnum))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4609 {
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4610 if (compute_longest_lnum)
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4611 {
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4612 curwin->w_cursor.lnum = gui_find_longest_lnum();
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4613 curwin->w_cursor.col = 0;
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4614 }
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4615 /* Do a sanity check on "longest_lnum", just in case. */
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4616 else if (longest_lnum >= curwin->w_topline
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2378
diff changeset
4617 && longest_lnum < curwin->w_botline)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4618 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4619 curwin->w_cursor.lnum = longest_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4620 curwin->w_cursor.col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4621 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4622 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4623
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4624 return leftcol_changed();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4625 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4626
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4627 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4628 * Check that none of the colors are the same as the background color
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4629 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4630 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4631 gui_check_colors()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4632 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4633 if (gui.norm_pixel == gui.back_pixel || gui.norm_pixel == INVALCOLOR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4634 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4635 gui_set_bg_color((char_u *)"White");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4636 if (gui.norm_pixel == gui.back_pixel || gui.norm_pixel == INVALCOLOR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4637 gui_set_fg_color((char_u *)"Black");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4638 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4639 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4640
203
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
4641 static void
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4642 gui_set_fg_color(name)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4643 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4644 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4645 gui.norm_pixel = gui_get_color(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4646 hl_set_fg_color_name(vim_strsave(name));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4647 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4648
203
80000fb16feb updated for version 7.0060
vimboss
parents: 199
diff changeset
4649 static void
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4650 gui_set_bg_color(name)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4651 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4652 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4653 gui.back_pixel = gui_get_color(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4654 hl_set_bg_color_name(vim_strsave(name));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4655 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4656
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4657 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4658 * Allocate a color by name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4659 * Returns INVALCOLOR and gives an error message when failed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4660 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4661 guicolor_T
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4662 gui_get_color(name)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4663 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4664 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4665 guicolor_T t;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4666
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4667 if (*name == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4668 return INVALCOLOR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4669 t = gui_mch_get_color(name);
11
4424b47a0797 updated for version 7.0003
vimboss
parents: 7
diff changeset
4670
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4671 if (t == INVALCOLOR
574
25a70b1cd2da updated for version 7.0163
vimboss
parents: 540
diff changeset
4672 #if defined(FEAT_GUI_X11) || defined(FEAT_GUI_GTK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4673 && gui.in_use
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4674 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4675 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4676 EMSG2(_("E254: Cannot allocate color %s"), name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4677 return t;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4678 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4679
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4680 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4681 * Return the grey value of a color (range 0-255).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4682 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4683 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4684 gui_get_lightness(pixel)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4685 guicolor_T pixel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4686 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4687 long_u rgb = gui_mch_get_rgb(pixel);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4688
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 827
diff changeset
4689 return (int)( (((rgb >> 16) & 0xff) * 299)
856
8cd729851562 updated for version 7.0g
vimboss
parents: 848
diff changeset
4690 + (((rgb >> 8) & 0xff) * 587)
8cd729851562 updated for version 7.0g
vimboss
parents: 848
diff changeset
4691 + ((rgb & 0xff) * 114)) / 1000;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4692 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4693
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4694 #if defined(FEAT_GUI_X11) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4695 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4696 gui_new_scrollbar_colors()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4697 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4698 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4699
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4700 /* Nothing to do if GUI hasn't started yet. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4701 if (!gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4702 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4703
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4704 FOR_ALL_WINDOWS(wp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4705 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4706 gui_mch_set_scrollbar_colors(&(wp->w_scrollbars[SBAR_LEFT]));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4707 gui_mch_set_scrollbar_colors(&(wp->w_scrollbars[SBAR_RIGHT]));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4708 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4709 gui_mch_set_scrollbar_colors(&gui.bottom_sbar);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4710 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4711 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4712
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4713 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4714 * Call this when focus has changed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4715 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4716 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4717 gui_focus_change(in_focus)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4718 int in_focus;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4719 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4720 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4721 * Skip this code to avoid drawing the cursor when debugging and switching
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4722 * between the debugger window and gvim.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4723 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4724 #if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4725 gui.in_focus = in_focus;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4726 out_flush(); /* make sure output has been written */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4727 gui_update_cursor(TRUE, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4728
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4729 # ifdef FEAT_XIM
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4730 xim_set_focus(in_focus);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4731 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4732
1380
99a9e42e5688 updated for version 7.1-095
vimboss
parents: 1378
diff changeset
4733 /* Put events in the input queue only when allowed.
99a9e42e5688 updated for version 7.1-095
vimboss
parents: 1378
diff changeset
4734 * ui_focus_change() isn't called directly, because it invokes
99a9e42e5688 updated for version 7.1-095
vimboss
parents: 1378
diff changeset
4735 * autocommands and that must not happen asynchronously. */
99a9e42e5688 updated for version 7.1-095
vimboss
parents: 1378
diff changeset
4736 if (!hold_gui_events)
99a9e42e5688 updated for version 7.1-095
vimboss
parents: 1378
diff changeset
4737 {
99a9e42e5688 updated for version 7.1-095
vimboss
parents: 1378
diff changeset
4738 char_u bytes[3];
99a9e42e5688 updated for version 7.1-095
vimboss
parents: 1378
diff changeset
4739
99a9e42e5688 updated for version 7.1-095
vimboss
parents: 1378
diff changeset
4740 bytes[0] = CSI;
99a9e42e5688 updated for version 7.1-095
vimboss
parents: 1378
diff changeset
4741 bytes[1] = KS_EXTRA;
99a9e42e5688 updated for version 7.1-095
vimboss
parents: 1378
diff changeset
4742 bytes[2] = in_focus ? (int)KE_FOCUSGAINED : (int)KE_FOCUSLOST;
99a9e42e5688 updated for version 7.1-095
vimboss
parents: 1378
diff changeset
4743 add_to_input_buf(bytes, 3);
99a9e42e5688 updated for version 7.1-095
vimboss
parents: 1378
diff changeset
4744 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4745 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4746 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4747
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4748 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4749 * Called when the mouse moved (but not when dragging).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4750 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4751 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4752 gui_mouse_moved(x, y)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4753 int x;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4754 int y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4755 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4756 win_T *wp;
894
edb3bc186e97 updated for version 7.0-020
vimboss
parents: 877
diff changeset
4757 char_u st[8];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4758
771
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 706
diff changeset
4759 /* Ignore this while still starting up. */
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 706
diff changeset
4760 if (!gui.in_use || gui.starting)
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 706
diff changeset
4761 return;
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 706
diff changeset
4762
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4763 #ifdef FEAT_MOUSESHAPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4764 /* Get window pointer, and update mouse shape as well. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4765 wp = xy2win(x, y);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4766 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4767
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4768 /* Only handle this when 'mousefocus' set and ... */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4769 if (p_mousef
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4770 && !hold_gui_events /* not holding events */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4771 && (State & (NORMAL|INSERT))/* Normal/Visual/Insert mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4772 && State != HITRETURN /* but not hit-return prompt */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4773 && msg_scrolled == 0 /* no scrolled message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4774 && !need_mouse_correct /* not moving the pointer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4775 && gui.in_focus) /* gvim in focus */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4776 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4777 /* Don't move the mouse when it's left or right of the Vim window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4778 if (x < 0 || x > Columns * gui.char_width)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4779 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4780 #ifndef FEAT_MOUSESHAPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4781 wp = xy2win(x, y);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4782 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4783 if (wp == curwin || wp == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4784 return; /* still in the same old window, or none at all */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4785
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
4786 #ifdef FEAT_WINDOWS
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
4787 /* Ignore position in the tab pages line. */
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
4788 if (Y_2_ROW(y) < tabline_height())
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
4789 return;
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
4790 #endif
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
4791
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4792 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4793 * format a mouse click on status line input
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4794 * ala gui_send_mouse_event(0, x, y, 0, 0);
261
2a5dcaea719a updated for version 7.0071
vimboss
parents: 236
diff changeset
4795 * Trick: Use a column number -1, so that get_pseudo_mouse_code() will
2a5dcaea719a updated for version 7.0071
vimboss
parents: 236
diff changeset
4796 * generate a K_LEFTMOUSE_NM key code.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4797 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4798 if (finish_op)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4799 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4800 /* abort the current operator first */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4801 st[0] = ESC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4802 add_to_input_buf(st, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4803 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4804 st[0] = CSI;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4805 st[1] = KS_MOUSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4806 st[2] = KE_FILLER;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4807 st[3] = (char_u)MOUSE_LEFT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4808 fill_mouse_coord(st + 4,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4809 #ifdef FEAT_VERTSPLIT
261
2a5dcaea719a updated for version 7.0071
vimboss
parents: 236
diff changeset
4810 wp->w_wincol == 0 ? -1 : wp->w_wincol + MOUSE_COLOFF,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4811 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4812 -1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4813 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4814 wp->w_height + W_WINROW(wp));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4815
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4816 add_to_input_buf(st, 8);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4817 st[3] = (char_u)MOUSE_RELEASE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4818 add_to_input_buf(st, 8);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4819 #ifdef FEAT_GUI_GTK
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4820 /* Need to wake up the main loop */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4821 if (gtk_main_level() > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4822 gtk_main_quit();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4823 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4824 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4825 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4826
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4827 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4828 * Called when mouse should be moved to window with focus.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4829 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4830 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4831 gui_mouse_correct()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4832 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4833 int x, y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4834 win_T *wp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4835
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4836 need_mouse_correct = FALSE;
87
014ba200db86 updated for version 7.0035
vimboss
parents: 62
diff changeset
4837
014ba200db86 updated for version 7.0035
vimboss
parents: 62
diff changeset
4838 if (!(gui.in_use && p_mousef))
014ba200db86 updated for version 7.0035
vimboss
parents: 62
diff changeset
4839 return;
014ba200db86 updated for version 7.0035
vimboss
parents: 62
diff changeset
4840
014ba200db86 updated for version 7.0035
vimboss
parents: 62
diff changeset
4841 gui_mch_getmouse(&x, &y);
014ba200db86 updated for version 7.0035
vimboss
parents: 62
diff changeset
4842 /* Don't move the mouse when it's left or right of the Vim window */
014ba200db86 updated for version 7.0035
vimboss
parents: 62
diff changeset
4843 if (x < 0 || x > Columns * gui.char_width)
014ba200db86 updated for version 7.0035
vimboss
parents: 62
diff changeset
4844 return;
877
af98ef7f5a39 updated for version 7.0-003
vimboss
parents: 859
diff changeset
4845 if (y >= 0
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
4846 # ifdef FEAT_WINDOWS
877
af98ef7f5a39 updated for version 7.0-003
vimboss
parents: 859
diff changeset
4847 && Y_2_ROW(y) >= tabline_height()
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
4848 # endif
877
af98ef7f5a39 updated for version 7.0-003
vimboss
parents: 859
diff changeset
4849 )
87
014ba200db86 updated for version 7.0035
vimboss
parents: 62
diff changeset
4850 wp = xy2win(x, y);
014ba200db86 updated for version 7.0035
vimboss
parents: 62
diff changeset
4851 if (wp != curwin && wp != NULL) /* If in other than current window */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4852 {
87
014ba200db86 updated for version 7.0035
vimboss
parents: 62
diff changeset
4853 validate_cline_row();
014ba200db86 updated for version 7.0035
vimboss
parents: 62
diff changeset
4854 gui_mch_setmouse((int)W_ENDCOL(curwin) * gui.char_width - 3,
014ba200db86 updated for version 7.0035
vimboss
parents: 62
diff changeset
4855 (W_WINROW(curwin) + curwin->w_wrow) * gui.char_height
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4856 + (gui.char_height) / 2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4857 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4858 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4859
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4860 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4861 * Find window where the mouse pointer "y" coordinate is in.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4862 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4863 static win_T *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4864 xy2win(x, y)
1887
fc89a4f98a8b updated for version 7.2-184
vimboss
parents: 1884
diff changeset
4865 int x UNUSED;
fc89a4f98a8b updated for version 7.2-184
vimboss
parents: 1884
diff changeset
4866 int y UNUSED;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4867 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4868 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4869 int row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4870 int col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4871 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4872
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4873 row = Y_2_ROW(y);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4874 col = X_2_COL(x);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4875 if (row < 0 || col < 0) /* before first window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4876 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4877 wp = mouse_find_win(&row, &col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4878 # ifdef FEAT_MOUSESHAPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4879 if (State == HITRETURN || State == ASKMORE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4880 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4881 if (Y_2_ROW(y) >= msg_row)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4882 update_mouseshape(SHAPE_IDX_MOREL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4883 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4884 update_mouseshape(SHAPE_IDX_MORE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4885 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4886 else if (row > wp->w_height) /* below status line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4887 update_mouseshape(SHAPE_IDX_CLINE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4888 # ifdef FEAT_VERTSPLIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4889 else if (!(State & CMDLINE) && W_VSEP_WIDTH(wp) > 0 && col == wp->w_width
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 811
diff changeset
4890 && (row != wp->w_height || !stl_connected(wp)) && msg_scrolled == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4891 update_mouseshape(SHAPE_IDX_VSEP);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4892 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4893 else if (!(State & CMDLINE) && W_STATUS_HEIGHT(wp) > 0
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 811
diff changeset
4894 && row == wp->w_height && msg_scrolled == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4895 update_mouseshape(SHAPE_IDX_STATUS);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4896 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4897 update_mouseshape(-2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4898 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4899 return wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4900 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4901 return firstwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4902 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4903 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4904
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4905 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4906 * ":gui" and ":gvim": Change from the terminal version to the GUI version.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4907 * File names may be given to redefine the args list.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4908 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4909 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4910 ex_gui(eap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4911 exarg_T *eap;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4912 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4913 char_u *arg = eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4914
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4915 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4916 * Check for "-f" argument: foreground, don't fork.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4917 * Also don't fork when started with "gvim -f".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4918 * Do fork when using "gui -b".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4919 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4920 if (arg[0] == '-'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4921 && (arg[1] == 'f' || arg[1] == 'b')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4922 && (arg[2] == NUL || vim_iswhite(arg[2])))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4923 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4924 gui.dofork = (arg[1] == 'b');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4925 eap->arg = skipwhite(eap->arg + 2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4926 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4927 if (!gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4928 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4929 /* Clear the command. Needed for when forking+exiting, to avoid part
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4930 * of the argument ending up after the shell prompt. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4931 msg_clr_eos_force();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4932 gui_start();
2209
d0ddf7ba1630 Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents: 2208
diff changeset
4933 #ifdef FEAT_NETBEANS_INTG
2210
8c6a66e2b3cc Add :nbstart and :nbclose.
Bram Moolenaar <bram@vim.org>
parents: 2209
diff changeset
4934 netbeans_gui_register();
2209
d0ddf7ba1630 Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents: 2208
diff changeset
4935 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4936 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4937 if (!ends_excmd(*eap->arg))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4938 ex_next(eap);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4939 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4940
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4941 #if ((defined(FEAT_GUI_X11) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_W32) \
574
25a70b1cd2da updated for version 7.0163
vimboss
parents: 540
diff changeset
4942 || defined(FEAT_GUI_PHOTON)) && defined(FEAT_TOOLBAR)) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4943 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4944 * This is shared between Athena, Motif and GTK.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4945 */
236
4707450c2b33 updated for version 7.0066
vimboss
parents: 216
diff changeset
4946 static void gfp_setname __ARGS((char_u *fname, void *cookie));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4947
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4948 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4949 * Callback function for do_in_runtimepath().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4950 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4951 static void
236
4707450c2b33 updated for version 7.0066
vimboss
parents: 216
diff changeset
4952 gfp_setname(fname, cookie)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4953 char_u *fname;
236
4707450c2b33 updated for version 7.0066
vimboss
parents: 216
diff changeset
4954 void *cookie;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4955 {
236
4707450c2b33 updated for version 7.0066
vimboss
parents: 216
diff changeset
4956 char_u *gfp_buffer = cookie;
4707450c2b33 updated for version 7.0066
vimboss
parents: 216
diff changeset
4957
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4958 if (STRLEN(fname) >= MAXPATHL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4959 *gfp_buffer = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4960 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4961 STRCPY(gfp_buffer, fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4962 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4963
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4964 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4965 * Find the path of bitmap "name" with extension "ext" in 'runtimepath'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4966 * Return FAIL for failure and OK if buffer[MAXPATHL] contains the result.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4967 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4968 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4969 gui_find_bitmap(name, buffer, ext)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4970 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4971 char_u *buffer;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4972 char *ext;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4973 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4974 if (STRLEN(name) > MAXPATHL - 14)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4975 return FAIL;
273
2463194c8cdd updated for version 7.0073
vimboss
parents: 261
diff changeset
4976 vim_snprintf((char *)buffer, MAXPATHL, "bitmaps/%s.%s", name, ext);
236
4707450c2b33 updated for version 7.0066
vimboss
parents: 216
diff changeset
4977 if (do_in_runtimepath(buffer, FALSE, gfp_setname, buffer) == FAIL
4707450c2b33 updated for version 7.0066
vimboss
parents: 216
diff changeset
4978 || *buffer == NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4979 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4980 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4981 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4982
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
4983 # if !defined(FEAT_GUI_GTK) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4984 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4985 * Given the name of the "icon=" argument, try finding the bitmap file for the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4986 * icon. If it is an absolute path name, use it as it is. Otherwise append
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4987 * "ext" and search for it in 'runtimepath'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4988 * The result is put in "buffer[MAXPATHL]". If something fails "buffer"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4989 * contains "name".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4990 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4991 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4992 gui_find_iconfile(name, buffer, ext)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4993 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4994 char_u *buffer;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4995 char *ext;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4996 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4997 char_u buf[MAXPATHL + 1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4998
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4999 expand_env(name, buffer, MAXPATHL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5000 if (!mch_isFullName(buffer) && gui_find_bitmap(buffer, buf, ext) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5001 STRCPY(buffer, buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5002 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5003 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5004 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5005
574
25a70b1cd2da updated for version 7.0163
vimboss
parents: 540
diff changeset
5006 #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5007 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5008 display_errors()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5009 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5010 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5011
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5012 if (isatty(2))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5013 fflush(stderr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5014 else if (error_ga.ga_data != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5015 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5016 /* avoid putting up a message box with blanks only */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5017 for (p = (char_u *)error_ga.ga_data; *p != NUL; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5018 if (!isspace(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5019 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5020 /* Truncate a very long message, it will go off-screen. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5021 if (STRLEN(p) > 2000)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5022 STRCPY(p + 2000 - 14, "...(truncated)");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5023 (void)do_dialog(VIM_ERROR, (char_u *)_("Error"),
2684
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2609
diff changeset
5024 p, (char_u *)_("&Ok"), 1, NULL, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5025 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5026 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5027 ga_clear(&error_ga);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5028 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5029 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5030 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5031
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5032 #if defined(NO_CONSOLE_INPUT) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5033 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5034 * Return TRUE if still starting up and there is no place to enter text.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5035 * For GTK and X11 we check if stderr is not a tty, which means we were
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5036 * (probably) started from the desktop. Also check stdin, "vim >& file" does
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5037 * allow typing on stdin.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5038 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5039 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5040 no_console_input()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5041 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5042 return ((!gui.in_use || gui.starting)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5043 # ifndef NO_CONSOLE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5044 && !isatty(0) && !isatty(2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5045 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5046 );
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5047 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5048 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5049
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5050 #if defined(FIND_REPLACE_DIALOG) || defined(FEAT_SUN_WORKSHOP) \
1002
41ab6b381572 updated for version 7.0-128
vimboss
parents: 995
diff changeset
5051 || defined(NEED_GUI_UPDATE_SCREEN) \
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5052 || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5053 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5054 * Update the current window and the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5055 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5056 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5057 gui_update_screen()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5058 {
2282
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5059 #ifdef FEAT_CONCEAL
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5060 linenr_T conceal_old_cursor_line = 0;
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5061 linenr_T conceal_new_cursor_line = 0;
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5062 int conceal_update_lines = FALSE;
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5063 #endif
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5064
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5065 update_topline();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5066 validate_cursor();
2282
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5067
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5068 #if defined(FEAT_AUTOCMD) || defined(FEAT_CONCEAL)
1584
7387540b6e52 updated for version 7.1-297
vimboss
parents: 1529
diff changeset
5069 /* Trigger CursorMoved if the cursor moved. */
2282
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5070 if (!finish_op && (
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5071 # ifdef FEAT_AUTOCMD
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5072 has_cursormoved()
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5073 # endif
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5074 # if defined(FEAT_AUTOCMD) && defined(FEAT_CONCEAL)
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5075 ||
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5076 # endif
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5077 # ifdef FEAT_CONCEAL
2378
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2348
diff changeset
5078 curwin->w_p_cole > 0
2282
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5079 # endif
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5080 )
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5081 && !equalpos(last_cursormoved, curwin->w_cursor))
1584
7387540b6e52 updated for version 7.1-297
vimboss
parents: 1529
diff changeset
5082 {
2282
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5083 # ifdef FEAT_AUTOCMD
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5084 if (has_cursormoved())
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5085 apply_autocmds(EVENT_CURSORMOVED, NULL, NULL, FALSE, curbuf);
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5086 # endif
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5087 # ifdef FEAT_CONCEAL
2378
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2348
diff changeset
5088 if (curwin->w_p_cole > 0)
2282
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5089 {
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5090 conceal_old_cursor_line = last_cursormoved.lnum;
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5091 conceal_new_cursor_line = curwin->w_cursor.lnum;
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5092 conceal_update_lines = TRUE;
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5093 }
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5094 # endif
1584
7387540b6e52 updated for version 7.1-297
vimboss
parents: 1529
diff changeset
5095 last_cursormoved = curwin->w_cursor;
7387540b6e52 updated for version 7.1-297
vimboss
parents: 1529
diff changeset
5096 }
7387540b6e52 updated for version 7.1-297
vimboss
parents: 1529
diff changeset
5097 #endif
2282
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5098
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5099 update_screen(0); /* may need to update the screen */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5100 setcursor();
2282
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5101 # if defined(FEAT_CONCEAL)
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5102 if (conceal_update_lines
2378
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2348
diff changeset
5103 && (conceal_old_cursor_line != conceal_new_cursor_line
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2348
diff changeset
5104 || conceal_cursor_line(curwin)
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2348
diff changeset
5105 || need_cursor_line_redraw))
2282
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5106 {
2378
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2348
diff changeset
5107 if (conceal_old_cursor_line != conceal_new_cursor_line)
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2348
diff changeset
5108 update_single_line(curwin, conceal_old_cursor_line);
2282
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5109 update_single_line(curwin, conceal_new_cursor_line);
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5110 curwin->w_valid &= ~VALID_CROW;
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5111 }
a888ed7ba375 Make updating text for conceal mode simpler. A few compiler warning fixes.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5112 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5113 out_flush(); /* make sure output has been written */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5114 gui_update_cursor(TRUE, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5115 gui_mch_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5116 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5117 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5118
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5119 #if defined(FIND_REPLACE_DIALOG) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5120 static void concat_esc __ARGS((garray_T *gap, char_u *text, int what));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5121
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5122 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5123 * Get the text to use in a find/replace dialog. Uses the last search pattern
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5124 * if the argument is empty.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5125 * Returns an allocated string.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5126 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5127 char_u *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5128 get_find_dialog_text(arg, wwordp, mcasep)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5129 char_u *arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5130 int *wwordp; /* return: TRUE if \< \> found */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5131 int *mcasep; /* return: TRUE if \C found */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5132 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5133 char_u *text;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5134
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5135 if (*arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5136 text = last_search_pat();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5137 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5138 text = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5139 if (text != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5140 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5141 text = vim_strsave(text);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5142 if (text != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5143 {
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 827
diff changeset
5144 int len = (int)STRLEN(text);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5145 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5146
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5147 /* Remove "\V" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5148 if (len >= 2 && STRNCMP(text, "\\V", 2) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5149 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5150 mch_memmove(text, text + 2, (size_t)(len - 1));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5151 len -= 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5152 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5153
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5154 /* Recognize "\c" and "\C" and remove. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5155 if (len >= 2 && *text == '\\' && (text[1] == 'c' || text[1] == 'C'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5156 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5157 *mcasep = (text[1] == 'C');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5158 mch_memmove(text, text + 2, (size_t)(len - 1));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5159 len -= 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5160 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5161
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5162 /* Recognize "\<text\>" and remove. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5163 if (len >= 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5164 && STRNCMP(text, "\\<", 2) == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5165 && STRNCMP(text + len - 2, "\\>", 2) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5166 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5167 *wwordp = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5168 mch_memmove(text, text + 2, (size_t)(len - 4));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5169 text[len - 4] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5170 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5171
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5172 /* Recognize "\/" or "\?" and remove. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5173 for (i = 0; i + 1 < len; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5174 if (text[i] == '\\' && (text[i + 1] == '/'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5175 || text[i + 1] == '?'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5176 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5177 mch_memmove(text + i, text + i + 1, (size_t)(len - i));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5178 --len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5179 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5180 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5181 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5182 return text;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5183 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5184
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5185 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5186 * Concatenate "text" to grow array "gap", escaping "what" with a backslash.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5187 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5188 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5189 concat_esc(gap, text, what)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5190 garray_T *gap;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5191 char_u *text;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5192 int what;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5193 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5194 while (*text != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5195 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5196 #ifdef FEAT_MBYTE
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
5197 int l = (*mb_ptr2len)(text);
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 811
diff changeset
5198
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5199 if (l > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5200 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5201 while (--l >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5202 ga_append(gap, *text++);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5203 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5204 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5205 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5206 if (*text == what)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5207 ga_append(gap, '\\');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5208 ga_append(gap, *text);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5209 ++text;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5210 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5211 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5212
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5213 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5214 * Handle the press of a button in the find-replace dialog.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5215 * Return TRUE when something was added to the input buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5216 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5217 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5218 gui_do_findrepl(flags, find_text, repl_text, down)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5219 int flags; /* one of FRD_REPLACE, FRD_FINDNEXT, etc. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5220 char_u *find_text;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5221 char_u *repl_text;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5222 int down; /* Search downwards. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5223 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5224 garray_T ga;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5225 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5226 int type = (flags & FRD_TYPE_MASK);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5227 char_u *p;
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5228 regmatch_T regmatch;
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
5229 int save_did_emsg = did_emsg;
1943
96276cc11d8e updated for version 7.2-240
vimboss
parents: 1921
diff changeset
5230 static int busy = FALSE;
96276cc11d8e updated for version 7.2-240
vimboss
parents: 1921
diff changeset
5231
96276cc11d8e updated for version 7.2-240
vimboss
parents: 1921
diff changeset
5232 /* When the screen is being updated we should not change buffers and
96276cc11d8e updated for version 7.2-240
vimboss
parents: 1921
diff changeset
5233 * windows structures, it may cause freed memory to be used. Also don't
96276cc11d8e updated for version 7.2-240
vimboss
parents: 1921
diff changeset
5234 * do this recursively (pressing "Find" quickly several times. */
96276cc11d8e updated for version 7.2-240
vimboss
parents: 1921
diff changeset
5235 if (updating_screen || busy)
96276cc11d8e updated for version 7.2-240
vimboss
parents: 1921
diff changeset
5236 return FALSE;
96276cc11d8e updated for version 7.2-240
vimboss
parents: 1921
diff changeset
5237
96276cc11d8e updated for version 7.2-240
vimboss
parents: 1921
diff changeset
5238 /* refuse replace when text cannot be changed */
96276cc11d8e updated for version 7.2-240
vimboss
parents: 1921
diff changeset
5239 if ((type == FRD_REPLACE || type == FRD_REPLACEALL) && text_locked())
96276cc11d8e updated for version 7.2-240
vimboss
parents: 1921
diff changeset
5240 return FALSE;
96276cc11d8e updated for version 7.2-240
vimboss
parents: 1921
diff changeset
5241
96276cc11d8e updated for version 7.2-240
vimboss
parents: 1921
diff changeset
5242 busy = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5243
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5244 ga_init2(&ga, 1, 100);
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5245 if (type == FRD_REPLACEALL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5246 ga_concat(&ga, (char_u *)"%s/");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5247
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5248 ga_concat(&ga, (char_u *)"\\V");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5249 if (flags & FRD_MATCH_CASE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5250 ga_concat(&ga, (char_u *)"\\C");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5251 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5252 ga_concat(&ga, (char_u *)"\\c");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5253 if (flags & FRD_WHOLE_WORD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5254 ga_concat(&ga, (char_u *)"\\<");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5255 if (type == FRD_REPLACEALL || down)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5256 concat_esc(&ga, find_text, '/'); /* escape slashes */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5257 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5258 concat_esc(&ga, find_text, '?'); /* escape '?' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5259 if (flags & FRD_WHOLE_WORD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5260 ga_concat(&ga, (char_u *)"\\>");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5261
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5262 if (type == FRD_REPLACEALL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5263 {
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5264 ga_concat(&ga, (char_u *)"/");
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 691
diff changeset
5265 /* escape / and \ */
07d199fe02ed updated for version 7.0209
vimboss
parents: 691
diff changeset
5266 p = vim_strsave_escaped(repl_text, (char_u *)"/\\");
07d199fe02ed updated for version 7.0209
vimboss
parents: 691
diff changeset
5267 if (p != NULL)
07d199fe02ed updated for version 7.0209
vimboss
parents: 691
diff changeset
5268 ga_concat(&ga, p);
07d199fe02ed updated for version 7.0209
vimboss
parents: 691
diff changeset
5269 vim_free(p);
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5270 ga_concat(&ga, (char_u *)"/g");
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5271 }
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5272 ga_append(&ga, NUL);
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5273
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5274 if (type == FRD_REPLACE)
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5275 {
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5276 /* Do the replacement when the text at the cursor matches. Thus no
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5277 * replacement is done if the cursor was moved! */
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5278 regmatch.regprog = vim_regcomp(ga.ga_data, RE_MAGIC + RE_STRING);
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5279 regmatch.rm_ic = 0;
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5280 if (regmatch.regprog != NULL)
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5281 {
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5282 p = ml_get_cursor();
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5283 if (vim_regexec_nl(&regmatch, p, (colnr_T)0)
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5284 && regmatch.startp[0] == p)
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5285 {
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5286 /* Clear the command line to remove any old "No match"
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5287 * error. */
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5288 msg_end_prompt();
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5289
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5290 if (u_save_cursor() == OK)
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5291 {
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5292 /* A button was pressed thus undo should be synced. */
825
6675076019ae updated for version 7.0d
vimboss
parents: 824
diff changeset
5293 u_sync(FALSE);
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5294
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5295 del_bytes((long)(regmatch.endp[0] - regmatch.startp[0]),
609
ba54311bc43e updated for version 7.0173
vimboss
parents: 574
diff changeset
5296 FALSE, FALSE);
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5297 ins_str(repl_text);
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5298 }
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5299 }
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5300 else
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5301 MSG(_("No match at cursor, finding next"));
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5302 vim_free(regmatch.regprog);
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5303 }
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5304 }
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5305
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5306 if (type == FRD_REPLACEALL)
726bdc53fa49 updated for version 7.0018
vimboss
parents: 21
diff changeset
5307 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5308 /* A button was pressed, thus undo should be synced. */
825
6675076019ae updated for version 7.0d
vimboss
parents: 824
diff changeset
5309 u_sync(FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5310 do_cmdline_cmd(ga.ga_data);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5311 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5312 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5313 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5314 /* Search for the next match. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5315 i = msg_scroll;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5316 do_search(NULL, down ? '/' : '?', ga.ga_data, 1L,
1521
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1476
diff changeset
5317 SEARCH_MSG + SEARCH_MARK, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5318 msg_scroll = i; /* don't let an error message set msg_scroll */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5319 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5320
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
5321 /* Don't want to pass did_emsg to other code, it may cause disabling
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
5322 * syntax HL if we were busy redrawing. */
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
5323 did_emsg = save_did_emsg;
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
5324
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5325 if (State & (NORMAL | INSERT))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5326 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5327 gui_update_screen(); /* update the screen */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5328 msg_didout = 0; /* overwrite any message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5329 need_wait_return = FALSE; /* don't wait for return */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5330 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5331
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5332 vim_free(ga.ga_data);
1943
96276cc11d8e updated for version 7.2-240
vimboss
parents: 1921
diff changeset
5333 busy = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5334 return (ga.ga_len > 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5335 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5336
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5337 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5338
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5339 #if (defined(FEAT_DND) && defined(FEAT_GUI_GTK)) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5340 || defined(FEAT_GUI_MSWIN) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5341 || defined(FEAT_GUI_MAC) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5342 || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5343
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5344 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5345 static void gui_wingoto_xy __ARGS((int x, int y));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5346
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5347 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5348 * Jump to the window at specified point (x, y).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5349 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5350 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5351 gui_wingoto_xy(x, y)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5352 int x;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5353 int y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5354 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5355 int row = Y_2_ROW(y);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5356 int col = X_2_COL(x);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5357 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5358
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5359 if (row >= 0 && col >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5360 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5361 wp = mouse_find_win(&row, &col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5362 if (wp != NULL && wp != curwin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5363 win_goto(wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5364 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5365 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5366 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5367
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5368 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5369 * Process file drop. Mouse cursor position, key modifiers, name of files
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5370 * and count of files are given. Argument "fnames[count]" has full pathnames
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5371 * of dropped files, they will be freed in this function, and caller can't use
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5372 * fnames after call this function.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5373 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5374 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5375 gui_handle_drop(x, y, modifiers, fnames, count)
1887
fc89a4f98a8b updated for version 7.2-184
vimboss
parents: 1884
diff changeset
5376 int x UNUSED;
fc89a4f98a8b updated for version 7.2-184
vimboss
parents: 1884
diff changeset
5377 int y UNUSED;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5378 int_u modifiers;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5379 char_u **fnames;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5380 int count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5381 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5382 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5383 char_u *p;
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1620
diff changeset
5384 static int entered = FALSE;
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1620
diff changeset
5385
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1620
diff changeset
5386 /*
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1620
diff changeset
5387 * This function is called by event handlers. Just in case we get a
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1620
diff changeset
5388 * second event before the first one is handled, ignore the second one.
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1620
diff changeset
5389 * Not sure if this can ever happen, just in case.
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1620
diff changeset
5390 */
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1620
diff changeset
5391 if (entered)
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1620
diff changeset
5392 return;
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1620
diff changeset
5393 entered = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5394
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5395 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5396 * When the cursor is at the command line, add the file names to the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5397 * command line, don't edit the files.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5398 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5399 if (State & CMDLINE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5400 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5401 shorten_filenames(fnames, count);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5402 for (i = 0; i < count; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5403 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5404 if (fnames[i] != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5405 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5406 if (i > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5407 add_to_input_buf((char_u*)" ", 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5408
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5409 /* We don't know what command is used thus we can't be sure
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5410 * about which characters need to be escaped. Only escape the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5411 * most common ones. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5412 # ifdef BACKSLASH_IN_FILENAME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5413 p = vim_strsave_escaped(fnames[i], (char_u *)" \t\"|");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5414 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5415 p = vim_strsave_escaped(fnames[i], (char_u *)"\\ \t\"|");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5416 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5417 if (p != NULL)
1364
9947133ce85b updated for version 7.1-078
vimboss
parents: 1199
diff changeset
5418 add_to_input_buf_csi(p, (int)STRLEN(p));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5419 vim_free(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5420 vim_free(fnames[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5421 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5422 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5423 vim_free(fnames);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5424 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5425 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5426 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5427 /* Go to the window under mouse cursor, then shorten given "fnames" by
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5428 * current window, because a window can have local current dir. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5429 # ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5430 gui_wingoto_xy(x, y);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5431 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5432 shorten_filenames(fnames, count);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5433
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5434 /* If Shift held down, remember the first item. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5435 if ((modifiers & MOUSE_SHIFT) != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5436 p = vim_strsave(fnames[0]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5437 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5438 p = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5439
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5440 /* Handle the drop, :edit or :split to get to the file. This also
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5441 * frees fnames[]. Skip this if there is only one item it's a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5442 * directory and Shift is held down. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5443 if (count == 1 && (modifiers & MOUSE_SHIFT) != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5444 && mch_isdir(fnames[0]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5445 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5446 vim_free(fnames[0]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5447 vim_free(fnames);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5448 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5449 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5450 handle_drop(count, fnames, (modifiers & MOUSE_CTRL) != 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5451
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5452 /* If Shift held down, change to first file's directory. If the first
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5453 * item is a directory, change to that directory (and let the explorer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5454 * plugin show the contents). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5455 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5456 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5457 if (mch_isdir(p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5458 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5459 if (mch_chdir((char *)p) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5460 shorten_fnames(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5461 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5462 else if (vim_chdirfile(p) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5463 shorten_fnames(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5464 vim_free(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5465 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5466
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5467 /* Update the screen display */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5468 update_screen(NOT_VALID);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5469 # ifdef FEAT_MENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5470 gui_update_menus(0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5471 # endif
2208
495995b9ce7d Fix: window title not updated after file dropped.
Bram Moolenaar <bram@vim.org>
parents: 2178
diff changeset
5472 #ifdef FEAT_TITLE
495995b9ce7d Fix: window title not updated after file dropped.
Bram Moolenaar <bram@vim.org>
parents: 2178
diff changeset
5473 maketitle();
495995b9ce7d Fix: window title not updated after file dropped.
Bram Moolenaar <bram@vim.org>
parents: 2178
diff changeset
5474 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5475 setcursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5476 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5477 gui_update_cursor(FALSE, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5478 gui_mch_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5479 }
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1620
diff changeset
5480
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1620
diff changeset
5481 entered = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5482 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5483 #endif