comparison src/w32fns.c @ 36000:f4a0b086cc5d

(Fx_show_tip): Fix calls to make_number. (x_set_font): If font hasn't changed, avoid recomputing faces and other things. (x_set_tool_bar_lines): Do nothing if frame is minibuffer-only, (Fx_create_frame): Add the tool bar height to the frame height. (x_create_tip_frame): Prevent changing the tooltip's background color by specifying a color for the default font in .Xdefaults. (Qcancel_timer): New variable. (syms_of_w32fns): Initialize and staticpro it. (Fx_hide_tip, Fx_show_tip): Use it. (Fx_show_tip): Make sure to set tip_timer to nil when canceling the timer. (toplevel): Lisp code for generating parts of syms_of_w32fns removed. (Fx_show_tip): Fix calls to make_number. (x_set_font): If font hasn't changed, avoid recomputing faces and other things. (x_set_tool_bar_lines): Do nothing if frame is minibuffer-only, (Fx_create_frame): Add the tool bar height to the frame height. (x_create_tip_frame): Prevent changing the tooltip's background color by specifying a color for the default font in .Xdefaults. (Qcancel_timer): New variable. (syms_of_w32fns): Initialize and staticpro it. (Fx_hide_tip, Fx_show_tip): Use it. (Fx_show_tip): Make sure to set tip_timer to nil when canceling the timer. (toplevel): Lisp code for generating parts of syms_of_w32fns removed.
author Jason Rumney <jasonr@gnu.org>
date Fri, 09 Feb 2001 09:55:43 +0000
parents 62b578dd28ce
children 743534626f73
comparison
equal deleted inserted replaced
35999:6b1e74f1fcce 36000:f4a0b086cc5d
194 /* VIETNAMESE_CHARSET is not defined in some versions of MSVC. */ 194 /* VIETNAMESE_CHARSET is not defined in some versions of MSVC. */
195 #ifndef VIETNAMESE_CHARSET 195 #ifndef VIETNAMESE_CHARSET
196 #define VIETNAMESE_CHARSET 163 196 #define VIETNAMESE_CHARSET 163
197 #endif 197 #endif
198 198
199
200 /* Evaluate this expression to rebuild the section of syms_of_w32fns
201 that initializes and staticpros the symbols declared below. Note
202 that Emacs 18 has a bug that keeps C-x C-e from being able to
203 evaluate this expression.
204
205 (progn
206 ;; Accumulate a list of the symbols we want to initialize from the
207 ;; declarations at the top of the file.
208 (goto-char (point-min))
209 (search-forward "/\*&&& symbols declared here &&&*\/\n")
210 (let (symbol-list)
211 (while (looking-at "Lisp_Object \\(Q[a-z_]+\\)")
212 (setq symbol-list
213 (cons (buffer-substring (match-beginning 1) (match-end 1))
214 symbol-list))
215 (forward-line 1))
216 (setq symbol-list (nreverse symbol-list))
217 ;; Delete the section of syms_of_... where we initialize the symbols.
218 (search-forward "\n /\*&&& init symbols here &&&*\/\n")
219 (let ((start (point)))
220 (while (looking-at "^ Q")
221 (forward-line 2))
222 (kill-region start (point)))
223 ;; Write a new symbol initialization section.
224 (while symbol-list
225 (insert (format " %s = intern (\"" (car symbol-list)))
226 (let ((start (point)))
227 (insert (substring (car symbol-list) 1))
228 (subst-char-in-region start (point) ?_ ?-))
229 (insert (format "\");\n staticpro (&%s);\n" (car symbol-list)))
230 (setq symbol-list (cdr symbol-list)))))
231
232 */
233
234 /*&&& symbols declared here &&&*/
235 Lisp_Object Qauto_raise; 199 Lisp_Object Qauto_raise;
236 Lisp_Object Qauto_lower; 200 Lisp_Object Qauto_lower;
237 Lisp_Object Qbar; 201 Lisp_Object Qbar;
238 Lisp_Object Qborder_color; 202 Lisp_Object Qborder_color;
239 Lisp_Object Qborder_width; 203 Lisp_Object Qborder_width;
262 Lisp_Object Quser_position; 226 Lisp_Object Quser_position;
263 Lisp_Object Quser_size; 227 Lisp_Object Quser_size;
264 Lisp_Object Qscreen_gamma; 228 Lisp_Object Qscreen_gamma;
265 Lisp_Object Qline_spacing; 229 Lisp_Object Qline_spacing;
266 Lisp_Object Qcenter; 230 Lisp_Object Qcenter;
231 Lisp_Object Qcancel_timer;
267 Lisp_Object Qhyper; 232 Lisp_Object Qhyper;
268 Lisp_Object Qsuper; 233 Lisp_Object Qsuper;
269 Lisp_Object Qmeta; 234 Lisp_Object Qmeta;
270 Lisp_Object Qalt; 235 Lisp_Object Qalt;
271 Lisp_Object Qctrl; 236 Lisp_Object Qctrl;
2417 error ("Font `%s' is not defined", XSTRING (arg)->data); 2382 error ("Font `%s' is not defined", XSTRING (arg)->data);
2418 else if (EQ (result, Qt)) 2383 else if (EQ (result, Qt))
2419 error ("The characters of the given font have varying widths"); 2384 error ("The characters of the given font have varying widths");
2420 else if (STRINGP (result)) 2385 else if (STRINGP (result))
2421 { 2386 {
2387 if (!NILP (Fequal (result, oldval)))
2388 return;
2422 store_frame_param (f, Qfont, result); 2389 store_frame_param (f, Qfont, result);
2423 recompute_basic_faces (f); 2390 recompute_basic_faces (f);
2424 } 2391 }
2425 else 2392 else
2426 abort (); 2393 abort ();
2574 struct frame *f; 2541 struct frame *f;
2575 Lisp_Object value, oldval; 2542 Lisp_Object value, oldval;
2576 { 2543 {
2577 int delta, nlines, root_height; 2544 int delta, nlines, root_height;
2578 Lisp_Object root_window; 2545 Lisp_Object root_window;
2546
2547 /* Treat tool bars like menu bars. */
2548 if (FRAME_MINIBUF_ONLY_P (f))
2549 return;
2579 2550
2580 /* Use VALUE only if an integer >= 0. */ 2551 /* Use VALUE only if an integer >= 0. */
2581 if (INTEGERP (value) && XINT (value) >= 0) 2552 if (INTEGERP (value) && XINT (value) >= 0)
2582 nlines = XFASTINT (value); 2553 nlines = XFASTINT (value);
2583 else 2554 else
5168 Lisp_Object frame, tem; 5139 Lisp_Object frame, tem;
5169 Lisp_Object name; 5140 Lisp_Object name;
5170 int minibuffer_only = 0; 5141 int minibuffer_only = 0;
5171 long window_prompting = 0; 5142 long window_prompting = 0;
5172 int width, height; 5143 int width, height;
5173 int count = specpdl_ptr - specpdl; 5144 int count = BINDING_STACK_SIZE ();
5174 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; 5145 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
5175 Lisp_Object display; 5146 Lisp_Object display;
5176 struct w32_display_info *dpyinfo = NULL; 5147 struct w32_display_info *dpyinfo = NULL;
5177 Lisp_Object parent; 5148 Lisp_Object parent;
5178 struct kboard *kb; 5149 struct kboard *kb;
5425 /* Dimensions, especially f->height, must be done via change_frame_size. 5396 /* Dimensions, especially f->height, must be done via change_frame_size.
5426 Change will not be effected unless different from the current 5397 Change will not be effected unless different from the current
5427 f->height. */ 5398 f->height. */
5428 width = f->width; 5399 width = f->width;
5429 height = f->height; 5400 height = f->height;
5401
5402 /* Add the tool-bar height to the initial frame height so that the
5403 user gets a text display area of the size he specified with -g or
5404 via .Xdefaults. Later changes of the tool-bar height don't
5405 change the frame size. This is done so that users can create
5406 tall Emacs frames without having to guess how tall the tool-bar
5407 will get. */
5408 if (FRAME_TOOL_BAR_LINES (f))
5409 {
5410 int margin, relief, bar_height;
5411
5412 relief = (tool_bar_button_relief > 0
5413 ? tool_bar_button_relief
5414 : DEFAULT_TOOL_BAR_BUTTON_RELIEF);
5415
5416 if (INTEGERP (Vtool_bar_button_margin)
5417 && XINT (Vtool_bar_button_margin) > 0)
5418 margin = XFASTINT (Vtool_bar_button_margin);
5419 else if (CONSP (Vtool_bar_button_margin)
5420 && INTEGERP (XCDR (Vtool_bar_button_margin))
5421 && XINT (XCDR (Vtool_bar_button_margin)) > 0)
5422 margin = XFASTINT (XCDR (Vtool_bar_button_margin));
5423 else
5424 margin = 0;
5425
5426 bar_height = DEFAULT_TOOL_BAR_IMAGE_HEIGHT + 2 * margin + 2 * relief;
5427 height += (bar_height + CANON_Y_UNIT (f) - 1) / CANON_Y_UNIT (f);
5428 }
5429
5430 f->height = 0; 5430 f->height = 0;
5431 SET_FRAME_WIDTH (f, 0); 5431 SET_FRAME_WIDTH (f, 0);
5432 change_frame_size (f, height, width, 1, 0, 0); 5432 change_frame_size (f, height, width, 1, 0, 0);
5433 5433
5434 /* Tell the server what size and position, etc, we want, and how 5434 /* Tell the server what size and position, etc, we want, and how
6722 frame, which means we can't get proper size info, as we don't have 6722 frame, which means we can't get proper size info, as we don't have
6723 a device context to use for GetTextMetrics. 6723 a device context to use for GetTextMetrics.
6724 MAXNAMES sets a limit on how many fonts to match. */ 6724 MAXNAMES sets a limit on how many fonts to match. */
6725 6725
6726 Lisp_Object 6726 Lisp_Object
6727 w32_list_fonts (FRAME_PTR f, Lisp_Object pattern, int size, int maxnames ) 6727 w32_list_fonts (f, pattern, size, maxnames)
6728 struct frame *f;
6729 Lisp_Object pattern;
6730 int size;
6731 int maxnames;
6728 { 6732 {
6729 Lisp_Object patterns, key = Qnil, tem, tpat; 6733 Lisp_Object patterns, key = Qnil, tem, tpat;
6730 Lisp_Object list = Qnil, newlist = Qnil, second_best = Qnil; 6734 Lisp_Object list = Qnil, newlist = Qnil, second_best = Qnil;
6731 struct w32_display_info *dpyinfo = &one_w32_display_info; 6735 struct w32_display_info *dpyinfo = &one_w32_display_info;
6732 int n_fonts = 0; 6736 int n_fonts = 0;
12219 Lisp_Object rest, frame; 12223 Lisp_Object rest, frame;
12220 12224
12221 BLOCK_INPUT; 12225 BLOCK_INPUT;
12222 12226
12223 FOR_EACH_FRAME (rest, frame) 12227 FOR_EACH_FRAME (rest, frame)
12224 if (FRAME_X_P (XFRAME (frame))) 12228 if (FRAME_W32_P (XFRAME (frame)))
12225 { 12229 {
12226 struct frame *f = XFRAME (frame); 12230 struct frame *f = XFRAME (frame);
12227 12231
12228 f->output_data.w32->busy_p = 1; 12232 f->output_data.w32->busy_p = 1;
12229 12233
12267 BLOCK_INPUT; 12271 BLOCK_INPUT;
12268 FOR_EACH_FRAME (rest, frame) 12272 FOR_EACH_FRAME (rest, frame)
12269 { 12273 {
12270 struct frame *f = XFRAME (frame); 12274 struct frame *f = XFRAME (frame);
12271 12275
12272 if (FRAME_X_P (f) 12276 if (FRAME_W32_P (f)
12273 /* Watch out for newly created frames. */ 12277 /* Watch out for newly created frames. */
12274 && f->output_data.x->busy_window) 12278 && f->output_data.x->busy_window)
12275 { 12279 {
12276 XUnmapWindow (FRAME_X_DISPLAY (f), f->output_data.x->busy_window); 12280 XUnmapWindow (FRAME_X_DISPLAY (f), f->output_data.x->busy_window);
12277 /* Sync here because XTread_socket looks at the busy_p flag 12281 /* Sync here because XTread_socket looks at the busy_p flag
12340 struct frame *f; 12344 struct frame *f;
12341 Lisp_Object frame, tem; 12345 Lisp_Object frame, tem;
12342 Lisp_Object name; 12346 Lisp_Object name;
12343 long window_prompting = 0; 12347 long window_prompting = 0;
12344 int width, height; 12348 int width, height;
12345 int count = specpdl_ptr - specpdl; 12349 int count = BINDING_STACK_SIZE ();
12346 struct gcpro gcpro1, gcpro2, gcpro3; 12350 struct gcpro gcpro1, gcpro2, gcpro3;
12347 struct kboard *kb; 12351 struct kboard *kb;
12348 12352
12349 check_x (); 12353 check_x ();
12350 12354
12573 } 12577 }
12574 12578
12575 #ifdef TODO /* Tooltip support not complete. */ 12579 #ifdef TODO /* Tooltip support not complete. */
12576 DEFUN ("x-show-tip", Fx_show_tip, Sx_show_tip, 1, 6, 0, 12580 DEFUN ("x-show-tip", Fx_show_tip, Sx_show_tip, 1, 6, 0,
12577 "Show STRING in a \"tooltip\" window on frame FRAME.\n\ 12581 "Show STRING in a \"tooltip\" window on frame FRAME.\n\
12578 A tooltip window is a small X window displaying a string.\n\ 12582 A tooltip window is a small window displaying a string.\n\
12579 \n\ 12583 \n\
12580 FRAME nil or omitted means use the selected frame.\n\ 12584 FRAME nil or omitted means use the selected frame.\n\
12581 \n\ 12585 \n\
12582 PARMS is an optional list of frame parameters which can be\n\ 12586 PARMS is an optional list of frame parameters which can be\n\
12583 used to change the tooltip's appearance.\n\ 12587 used to change the tooltip's appearance.\n\
12589 the tooltip is displayed at that x-position. Otherwise it is\n\ 12593 the tooltip is displayed at that x-position. Otherwise it is\n\
12590 displayed at the mouse position, with offset DX added (default is 5 if\n\ 12594 displayed at the mouse position, with offset DX added (default is 5 if\n\
12591 DX isn't specified). Likewise for the y-position; if a `top' frame\n\ 12595 DX isn't specified). Likewise for the y-position; if a `top' frame\n\
12592 parameter is specified, it determines the y-position of the tooltip\n\ 12596 parameter is specified, it determines the y-position of the tooltip\n\
12593 window, otherwise it is displayed at the mouse position, with offset\n\ 12597 window, otherwise it is displayed at the mouse position, with offset\n\
12594 DY added (default is -5).") 12598 DY added (default is 10).")
12595 (string, frame, parms, timeout, dx, dy) 12599 (string, frame, parms, timeout, dx, dy)
12596 Lisp_Object string, frame, parms, timeout, dx, dy; 12600 Lisp_Object string, frame, parms, timeout, dx, dy;
12597 { 12601 {
12598 struct frame *f; 12602 struct frame *f;
12599 struct window *w; 12603 struct window *w;
12623 dx = make_number (5); 12627 dx = make_number (5);
12624 else 12628 else
12625 CHECK_NUMBER (dx, 5); 12629 CHECK_NUMBER (dx, 5);
12626 12630
12627 if (NILP (dy)) 12631 if (NILP (dy))
12628 dy = make_number (-5); 12632 dy = make_number (-10);
12629 else 12633 else
12630 CHECK_NUMBER (dy, 6); 12634 CHECK_NUMBER (dy, 6);
12631 12635
12636 if (NILP (last_show_tip_args))
12637 last_show_tip_args = Fmake_vector (make_number (3), Qnil);
12638
12639 if (!NILP (tip_frame))
12640 {
12641 Lisp_Object last_string = AREF (last_show_tip_args, 0);
12642 Lisp_Object last_frame = AREF (last_show_tip_args, 1);
12643 Lisp_Object last_parms = AREF (last_show_tip_args, 2);
12644
12645 if (EQ (frame, last_frame)
12646 && !NILP (Fequal (last_string, string))
12647 && !NILP (Fequal (last_parms, parms)))
12648 {
12649 struct frame *f = XFRAME (tip_frame);
12650
12651 /* Only DX and DY have changed. */
12652 if (!NILP (tip_timer))
12653 {
12654 Lisp_Object timer = tip_timer;
12655 tip_timer = Qnil;
12656 call1 (Qcancel_timer, timer);
12657 }
12658
12659 BLOCK_INPUT;
12660 compute_tip_xy (f, parms, dx, dy, &root_x, &root_y);
12661 XMoveWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
12662 root_x, root_y - PIXEL_HEIGHT (f));
12663 UNBLOCK_INPUT;
12664 goto start_timer;
12665 }
12666 }
12667
12632 /* Hide a previous tip, if any. */ 12668 /* Hide a previous tip, if any. */
12633 Fx_hide_tip (); 12669 Fx_hide_tip ();
12670
12671 ASET (last_show_tip_args, 0, string);
12672 ASET (last_show_tip_args, 1, frame);
12673 ASET (last_show_tip_args, 2, parms);
12634 12674
12635 /* Add default values to frame parameters. */ 12675 /* Add default values to frame parameters. */
12636 if (NILP (Fassq (Qname, parms))) 12676 if (NILP (Fassq (Qname, parms)))
12637 parms = Fcons (Fcons (Qname, build_string ("tooltip")), parms); 12677 parms = Fcons (Fcons (Qname, build_string ("tooltip")), parms);
12638 if (NILP (Fassq (Qinternal_border_width, parms))) 12678 if (NILP (Fassq (Qinternal_border_width, parms)))
12653 /* Set up the frame's root window. Currently we use a size of 80 12693 /* Set up the frame's root window. Currently we use a size of 80
12654 columns x 40 lines. If someone wants to show a larger tip, he 12694 columns x 40 lines. If someone wants to show a larger tip, he
12655 will loose. I don't think this is a realistic case. */ 12695 will loose. I don't think this is a realistic case. */
12656 w = XWINDOW (FRAME_ROOT_WINDOW (f)); 12696 w = XWINDOW (FRAME_ROOT_WINDOW (f));
12657 w->left = w->top = make_number (0); 12697 w->left = w->top = make_number (0);
12658 w->width = 80; 12698 w->width = make_number (80);
12659 w->height = 40; 12699 w->height = make_number (40);
12660 adjust_glyphs (f); 12700 adjust_glyphs (f);
12661 w->pseudo_window_p = 1; 12701 w->pseudo_window_p = 1;
12662 12702
12663 /* Display the tooltip text in a temporary buffer. */ 12703 /* Display the tooltip text in a temporary buffer. */
12664 buffer = Fget_buffer_create (build_string (" *tip*")); 12704 buffer = Fget_buffer_create (build_string (" *tip*"));
12665 Fset_window_buffer (FRAME_ROOT_WINDOW (f), buffer); 12705 Fset_window_buffer (FRAME_ROOT_WINDOW (f), buffer);
12666 old_buffer = current_buffer; 12706 old_buffer = current_buffer;
12667 set_buffer_internal_1 (XBUFFER (buffer)); 12707 set_buffer_internal_1 (XBUFFER (buffer));
12668 Ferase_buffer (); 12708 Ferase_buffer ();
12669 Finsert (make_number (1), &string); 12709 Finsert (1, &string);
12670 clear_glyph_matrix (w->desired_matrix); 12710 clear_glyph_matrix (w->desired_matrix);
12671 clear_glyph_matrix (w->current_matrix); 12711 clear_glyph_matrix (w->current_matrix);
12672 SET_TEXT_POS (pos, BEGV, BEGV_BYTE); 12712 SET_TEXT_POS (pos, BEGV, BEGV_BYTE);
12673 try_window (FRAME_ROOT_WINDOW (f), pos); 12713 try_window (FRAME_ROOT_WINDOW (f), pos);
12674 12714
12704 /* Add the frame's internal border to the width and height the X 12744 /* Add the frame's internal border to the width and height the X
12705 window should have. */ 12745 window should have. */
12706 height += 2 * FRAME_INTERNAL_BORDER_WIDTH (f); 12746 height += 2 * FRAME_INTERNAL_BORDER_WIDTH (f);
12707 width += 2 * FRAME_INTERNAL_BORDER_WIDTH (f); 12747 width += 2 * FRAME_INTERNAL_BORDER_WIDTH (f);
12708 12748
12709 /* User-specified position? */
12710 left = Fcdr (Fassq (Qleft, parms));
12711 top = Fcdr (Fassq (Qtop, parms));
12712
12713 /* Move the tooltip window where the mouse pointer is. Resize and 12749 /* Move the tooltip window where the mouse pointer is. Resize and
12714 show it. */ 12750 show it. */
12751 compute_tip_xy (f, parms, dx, dy, &root_x, &root_y);
12752
12715 #if 0 /* TODO : W32 specifics */ 12753 #if 0 /* TODO : W32 specifics */
12716 BLOCK_INPUT;
12717 XQueryPointer (FRAME_X_DISPLAY (f), FRAME_X_DISPLAY_INFO (f)->root_window,
12718 &root, &child, &root_x, &root_y, &win_x, &win_y, &pmask);
12719 UNBLOCK_INPUT;
12720
12721 root_x += XINT (dx);
12722 root_y += XINT (dy);
12723
12724 if (INTEGERP (left))
12725 root_x = XINT (left);
12726 if (INTEGERP (top))
12727 root_y = XINT (top);
12728
12729 BLOCK_INPUT; 12754 BLOCK_INPUT;
12730 XMoveResizeWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), 12755 XMoveResizeWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
12731 root_x, root_y - height, width, height); 12756 root_x, root_y - height, width, height);
12732 XMapRaised (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f)); 12757 XMapRaised (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f));
12733 UNBLOCK_INPUT; 12758 UNBLOCK_INPUT;
12739 12764
12740 /* Restore original current buffer. */ 12765 /* Restore original current buffer. */
12741 set_buffer_internal_1 (old_buffer); 12766 set_buffer_internal_1 (old_buffer);
12742 windows_or_buffers_changed = old_windows_or_buffers_changed; 12767 windows_or_buffers_changed = old_windows_or_buffers_changed;
12743 12768
12769 start_timer:
12744 /* Let the tip disappear after timeout seconds. */ 12770 /* Let the tip disappear after timeout seconds. */
12745 tip_timer = call3 (intern ("run-at-time"), timeout, Qnil, 12771 tip_timer = call3 (intern ("run-at-time"), timeout, Qnil,
12746 intern ("x-hide-tip")); 12772 intern ("x-hide-tip"));
12747 12773
12748 UNGCPRO; 12774 UNGCPRO;
12771 count = BINDING_STACK_SIZE (); 12797 count = BINDING_STACK_SIZE ();
12772 specbind (Qinhibit_redisplay, Qt); 12798 specbind (Qinhibit_redisplay, Qt);
12773 specbind (Qinhibit_quit, Qt); 12799 specbind (Qinhibit_quit, Qt);
12774 12800
12775 if (!NILP (timer)) 12801 if (!NILP (timer))
12776 call1 (intern ("cancel-timer"), timer); 12802 call1 (Qcancel_timer, timer);
12777 12803
12778 if (FRAMEP (frame)) 12804 if (FRAMEP (frame))
12779 { 12805 {
12780 Fdelete_frame (frame, Qnil); 12806 Fdelete_frame (frame, Qnil);
12781 deleted = Qt; 12807 deleted = Qt;
13430 staticpro (&Qscreen_gamma); 13456 staticpro (&Qscreen_gamma);
13431 Qline_spacing = intern ("line-spacing"); 13457 Qline_spacing = intern ("line-spacing");
13432 staticpro (&Qline_spacing); 13458 staticpro (&Qline_spacing);
13433 Qcenter = intern ("center"); 13459 Qcenter = intern ("center");
13434 staticpro (&Qcenter); 13460 staticpro (&Qcenter);
13461 Qcancel_timer = intern ("cancel-timer");
13462 staticpro (&Qcancel_timer);
13435 /* This is the end of symbol initialization. */ 13463 /* This is the end of symbol initialization. */
13436 13464
13437 Qhyper = intern ("hyper"); 13465 Qhyper = intern ("hyper");
13438 staticpro (&Qhyper); 13466 staticpro (&Qhyper);
13439 Qsuper = intern ("super"); 13467 Qsuper = intern ("super");