aboutsummaryrefslogtreecommitdiffstats
path: root/src/keyboard.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/keyboard.c')
-rw-r--r--src/keyboard.c87
1 files changed, 8 insertions, 79 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index 51040f067df..8b7c473690d 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -2385,7 +2385,8 @@ read_char (int commandflag, Lisp_Object map,
2385 if (used_mouse_menu 2385 if (used_mouse_menu
2386 /* Also check was_disabled so last-nonmenu-event won't return 2386 /* Also check was_disabled so last-nonmenu-event won't return
2387 a bad value when submenus are involved. (Bug#447) */ 2387 a bad value when submenus are involved. (Bug#447) */
2388 && (EQ (c, Qtool_bar) || EQ (c, Qtab_bar) || EQ (c, Qmenu_bar) || was_disabled)) 2388 && (EQ (c, Qtool_bar) || EQ (c, Qtab_bar) || EQ (c, Qmenu_bar)
2389 || was_disabled))
2389 *used_mouse_menu = true; 2390 *used_mouse_menu = true;
2390 2391
2391 goto reread_for_input_method; 2392 goto reread_for_input_method;
@@ -5043,14 +5044,15 @@ make_lispy_position (struct frame *f, Lisp_Object x, Lisp_Object y,
5043 /* For mode line and header line clicks, return X, Y relative to 5044 /* For mode line and header line clicks, return X, Y relative to
5044 the left window edge. Use mode_line_string to look for a 5045 the left window edge. Use mode_line_string to look for a
5045 string on the click position. */ 5046 string on the click position. */
5046 else if (part == ON_MODE_LINE || part == ON_TAB_LINE || part == ON_HEADER_LINE) 5047 else if (part == ON_MODE_LINE || part == ON_TAB_LINE
5048 || part == ON_HEADER_LINE)
5047 { 5049 {
5048 Lisp_Object string; 5050 Lisp_Object string;
5049 ptrdiff_t charpos; 5051 ptrdiff_t charpos;
5050 5052
5051 posn = (part == ON_MODE_LINE ? Qmode_line 5053 posn = (part == ON_MODE_LINE ? Qmode_line
5052 : (part == ON_TAB_LINE ? Qtab_line 5054 : (part == ON_TAB_LINE ? Qtab_line
5053 : Qheader_line)); 5055 : Qheader_line));
5054 5056
5055 /* Note that mode_line_string takes COL, ROW as pixels and 5057 /* Note that mode_line_string takes COL, ROW as pixels and
5056 converts them to characters. */ 5058 converts them to characters. */
@@ -8115,7 +8117,6 @@ parse_tab_bar_item (Lisp_Object key, Lisp_Object item)
8115 Lisp_Object filter = Qnil; 8117 Lisp_Object filter = Qnil;
8116 Lisp_Object caption; 8118 Lisp_Object caption;
8117 int i; 8119 int i;
8118 bool have_label = false;
8119 8120
8120 /* Definition looks like `(menu-item CAPTION BINDING PROPS...)'. 8121 /* Definition looks like `(menu-item CAPTION BINDING PROPS...)'.
8121 Rule out items that aren't lists, don't start with 8122 Rule out items that aren't lists, don't start with
@@ -8164,12 +8165,6 @@ parse_tab_bar_item (Lisp_Object key, Lisp_Object item)
8164 { 8165 {
8165 if (menu_separator_name_p (SSDATA (caption))) 8166 if (menu_separator_name_p (SSDATA (caption)))
8166 { 8167 {
8167 set_prop_tab_bar (TAB_BAR_ITEM_TYPE, Qt);
8168 /* If we use build_desired_tab_bar_string to render the
8169 tab bar, the separator is rendered as an image. */
8170 set_prop_tab_bar (TAB_BAR_ITEM_IMAGES,
8171 (menu_item_eval_property
8172 (Vtab_bar_separator_image_expression)));
8173 set_prop_tab_bar (TAB_BAR_ITEM_ENABLED_P, Qnil); 8168 set_prop_tab_bar (TAB_BAR_ITEM_ENABLED_P, Qnil);
8174 set_prop_tab_bar (TAB_BAR_ITEM_SELECTED_P, Qnil); 8169 set_prop_tab_bar (TAB_BAR_ITEM_SELECTED_P, Qnil);
8175 set_prop_tab_bar (TAB_BAR_ITEM_CAPTION, Qnil); 8170 set_prop_tab_bar (TAB_BAR_ITEM_CAPTION, Qnil);
@@ -8212,17 +8207,6 @@ parse_tab_bar_item (Lisp_Object key, Lisp_Object item)
8212 else if (EQ (ikey, QChelp)) 8207 else if (EQ (ikey, QChelp))
8213 /* `:help HELP-STRING'. */ 8208 /* `:help HELP-STRING'. */
8214 set_prop_tab_bar (TAB_BAR_ITEM_HELP, value); 8209 set_prop_tab_bar (TAB_BAR_ITEM_HELP, value);
8215 else if (EQ (ikey, QCvert_only))
8216 /* `:vert-only t/nil'. */
8217 set_prop_tab_bar (TAB_BAR_ITEM_VERT_ONLY, value);
8218 else if (EQ (ikey, QClabel))
8219 {
8220 const char *bad_label = "!!?GARBLED ITEM?!!";
8221 /* `:label LABEL-STRING'. */
8222 set_prop_tab_bar (TAB_BAR_ITEM_LABEL,
8223 STRINGP (value) ? value : build_string (bad_label));
8224 have_label = true;
8225 }
8226 else if (EQ (ikey, QCfilter)) 8210 else if (EQ (ikey, QCfilter))
8227 /* ':filter FORM'. */ 8211 /* ':filter FORM'. */
8228 filter = value; 8212 filter = value;
@@ -8236,64 +8220,8 @@ parse_tab_bar_item (Lisp_Object key, Lisp_Object item)
8236 if (EQ (type, QCtoggle) || EQ (type, QCradio)) 8220 if (EQ (type, QCtoggle) || EQ (type, QCradio))
8237 { 8221 {
8238 set_prop_tab_bar (TAB_BAR_ITEM_SELECTED_P, selected); 8222 set_prop_tab_bar (TAB_BAR_ITEM_SELECTED_P, selected);
8239 set_prop_tab_bar (TAB_BAR_ITEM_TYPE, type);
8240 } 8223 }
8241 } 8224 }
8242 else if (EQ (ikey, QCimage)
8243 && (CONSP (value)
8244 || (VECTORP (value) && ASIZE (value) == 4)))
8245 /* Value is either a single image specification or a vector
8246 of 4 such specifications for the different button states. */
8247 set_prop_tab_bar (TAB_BAR_ITEM_IMAGES, value);
8248 else if (EQ (ikey, QCrtl))
8249 /* ':rtl STRING' */
8250 set_prop_tab_bar (TAB_BAR_ITEM_RTL_IMAGE, value);
8251 }
8252
8253
8254 if (!have_label)
8255 {
8256 /* Try to make one from caption and key. */
8257 Lisp_Object tkey = PROP (TAB_BAR_ITEM_KEY);
8258 Lisp_Object tcapt = PROP (TAB_BAR_ITEM_CAPTION);
8259 const char *label = SYMBOLP (tkey) ? SSDATA (SYMBOL_NAME (tkey)) : "";
8260 const char *capt = STRINGP (tcapt) ? SSDATA (tcapt) : "";
8261 ptrdiff_t max_lbl_size =
8262 2 * max (0, min (tab_bar_max_label_size, STRING_BYTES_BOUND / 2)) + 1;
8263 char *buf = xmalloc (max_lbl_size);
8264 Lisp_Object new_lbl;
8265 ptrdiff_t caption_len = strnlen (capt, max_lbl_size);
8266
8267 if (0 < caption_len && caption_len < max_lbl_size)
8268 {
8269 strcpy (buf, capt);
8270 while (caption_len > 0 && buf[caption_len - 1] == '.')
8271 caption_len--;
8272 buf[caption_len] = '\0';
8273 label = capt = buf;
8274 }
8275
8276 ptrdiff_t label_len = strnlen (label, max_lbl_size);
8277 if (0 < label_len && label_len < max_lbl_size)
8278 {
8279 ptrdiff_t j;
8280 if (label != buf)
8281 strcpy (buf, label);
8282
8283 for (j = 0; buf[j] != '\0'; ++j)
8284 if (buf[j] == '-')
8285 buf[j] = ' ';
8286 label = buf;
8287 }
8288 else
8289 label = "";
8290
8291 new_lbl = Fupcase_initials (build_string (label));
8292 if (SCHARS (new_lbl) <= tab_bar_max_label_size)
8293 set_prop_tab_bar (TAB_BAR_ITEM_LABEL, new_lbl);
8294 else
8295 set_prop_tab_bar (TAB_BAR_ITEM_LABEL, empty_unibyte_string);
8296 xfree (buf);
8297 } 8225 }
8298 8226
8299 /* If got a filter apply it on binding. */ 8227 /* If got a filter apply it on binding. */
@@ -10711,7 +10639,8 @@ On such systems, Emacs starts a subshell instead of suspending. */)
10711 get_tty_size (fileno (CURTTY ()->input), &width, &height); 10639 get_tty_size (fileno (CURTTY ()->input), &width, &height);
10712 if (width != old_width || height != old_height) 10640 if (width != old_width || height != old_height)
10713 change_frame_size (SELECTED_FRAME (), width, 10641 change_frame_size (SELECTED_FRAME (), width,
10714 height - FRAME_MENU_BAR_LINES (SELECTED_FRAME ()) - FRAME_TAB_BAR_LINES (SELECTED_FRAME ()), 10642 height - FRAME_MENU_BAR_LINES (SELECTED_FRAME ())
10643 - FRAME_TAB_BAR_LINES (SELECTED_FRAME ()),
10715 0, 0, 0, 0); 10644 0, 0, 0, 0);
10716 10645
10717 run_hook (intern ("suspend-resume-hook")); 10646 run_hook (intern ("suspend-resume-hook"));