diff options
Diffstat (limited to 'src/xfns.c')
| -rw-r--r-- | src/xfns.c | 204 |
1 files changed, 144 insertions, 60 deletions
diff --git a/src/xfns.c b/src/xfns.c index cb6733e8fa1..32e390e1e1e 100644 --- a/src/xfns.c +++ b/src/xfns.c | |||
| @@ -1,7 +1,8 @@ | |||
| 1 | /* Functions for the X window system. | 1 | /* Functions for the X window system. |
| 2 | Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, | 2 | |
| 3 | 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 | 3 | Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, |
| 4 | Free Software Foundation, Inc. | 4 | 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 |
| 5 | Free Software Foundation, Inc. | ||
| 5 | 6 | ||
| 6 | This file is part of GNU Emacs. | 7 | This file is part of GNU Emacs. |
| 7 | 8 | ||
| @@ -99,6 +100,8 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ | |||
| 99 | #include <Xm/Xm.h> | 100 | #include <Xm/Xm.h> |
| 100 | #include <Xm/DialogS.h> | 101 | #include <Xm/DialogS.h> |
| 101 | #include <Xm/FileSB.h> | 102 | #include <Xm/FileSB.h> |
| 103 | #include <Xm/List.h> | ||
| 104 | #include <Xm/TextF.h> | ||
| 102 | #endif | 105 | #endif |
| 103 | 106 | ||
| 104 | #ifdef USE_LUCID | 107 | #ifdef USE_LUCID |
| @@ -516,12 +519,20 @@ x_real_positions (FRAME_PTR f, int *xptr, int *yptr) | |||
| 516 | int real_x = 0, real_y = 0; | 519 | int real_x = 0, real_y = 0; |
| 517 | int had_errors = 0; | 520 | int had_errors = 0; |
| 518 | Window win = f->output_data.x->parent_desc; | 521 | Window win = f->output_data.x->parent_desc; |
| 522 | Atom actual_type; | ||
| 523 | unsigned long actual_size, bytes_remaining; | ||
| 524 | int i, rc, actual_format; | ||
| 525 | struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); | ||
| 526 | long max_len = 400; | ||
| 527 | Display *dpy = FRAME_X_DISPLAY (f); | ||
| 528 | unsigned char *tmp_data = NULL; | ||
| 529 | Atom target_type = XA_CARDINAL; | ||
| 519 | 530 | ||
| 520 | BLOCK_INPUT; | 531 | BLOCK_INPUT; |
| 521 | 532 | ||
| 522 | x_catch_errors (FRAME_X_DISPLAY (f)); | 533 | x_catch_errors (dpy); |
| 523 | 534 | ||
| 524 | if (win == FRAME_X_DISPLAY_INFO (f)->root_window) | 535 | if (win == dpyinfo->root_window) |
| 525 | win = FRAME_OUTER_WINDOW (f); | 536 | win = FRAME_OUTER_WINDOW (f); |
| 526 | 537 | ||
| 527 | /* This loop traverses up the containment tree until we hit the root | 538 | /* This loop traverses up the containment tree until we hit the root |
| @@ -606,6 +617,33 @@ x_real_positions (FRAME_PTR f, int *xptr, int *yptr) | |||
| 606 | had_errors = x_had_errors_p (FRAME_X_DISPLAY (f)); | 617 | had_errors = x_had_errors_p (FRAME_X_DISPLAY (f)); |
| 607 | } | 618 | } |
| 608 | 619 | ||
| 620 | |||
| 621 | if (dpyinfo->root_window == f->output_data.x->parent_desc) | ||
| 622 | { | ||
| 623 | /* Try _NET_FRAME_EXTENTS if our parent is the root window. */ | ||
| 624 | rc = XGetWindowProperty (dpy, win, dpyinfo->Xatom_net_frame_extents, | ||
| 625 | 0, max_len, False, target_type, | ||
| 626 | &actual_type, &actual_format, &actual_size, | ||
| 627 | &bytes_remaining, &tmp_data); | ||
| 628 | |||
| 629 | if (rc == Success && actual_type == target_type && !x_had_errors_p (dpy) | ||
| 630 | && actual_size == 4 && actual_format == 32) | ||
| 631 | { | ||
| 632 | int ign; | ||
| 633 | Window rootw; | ||
| 634 | long *fe = (long *)tmp_data; | ||
| 635 | |||
| 636 | XGetGeometry (FRAME_X_DISPLAY (f), win, | ||
| 637 | &rootw, &real_x, &real_y, &ign, &ign, &ign, &ign); | ||
| 638 | outer_x = -fe[0]; | ||
| 639 | outer_y = -fe[2]; | ||
| 640 | real_x -= fe[0]; | ||
| 641 | real_y -= fe[2]; | ||
| 642 | } | ||
| 643 | } | ||
| 644 | |||
| 645 | if (tmp_data) XFree (tmp_data); | ||
| 646 | |||
| 609 | x_uncatch_errors (); | 647 | x_uncatch_errors (); |
| 610 | 648 | ||
| 611 | UNBLOCK_INPUT; | 649 | UNBLOCK_INPUT; |
| @@ -3075,25 +3113,11 @@ If FRAME is nil, use the selected frame. */) | |||
| 3075 | static void | 3113 | static void |
| 3076 | set_machine_and_pid_properties (struct frame *f) | 3114 | set_machine_and_pid_properties (struct frame *f) |
| 3077 | { | 3115 | { |
| 3078 | /* See the above comment "Note: Encoding strategy". */ | ||
| 3079 | XTextProperty text; | ||
| 3080 | int bytes, stringp; | ||
| 3081 | int do_free_text_value = 0; | ||
| 3082 | long pid = (long) getpid (); | 3116 | long pid = (long) getpid (); |
| 3083 | 3117 | ||
| 3084 | text.value = x_encode_text (Vsystem_name, | 3118 | /* This will set WM_CLIENT_MACHINE and WM_LOCALE_NAME. */ |
| 3085 | Qcompound_text, 0, &bytes, &stringp, | 3119 | XSetWMProperties (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), NULL, NULL, |
| 3086 | &do_free_text_value); | 3120 | NULL, 0, NULL, NULL, NULL); |
| 3087 | text.encoding = (stringp ? XA_STRING | ||
| 3088 | : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT); | ||
| 3089 | text.format = 8; | ||
| 3090 | text.nitems = bytes; | ||
| 3091 | XSetWMClientMachine (FRAME_X_DISPLAY (f), | ||
| 3092 | FRAME_OUTER_WINDOW (f), | ||
| 3093 | &text); | ||
| 3094 | if (do_free_text_value) | ||
| 3095 | xfree (text.value); | ||
| 3096 | |||
| 3097 | XChangeProperty (FRAME_X_DISPLAY (f), | 3121 | XChangeProperty (FRAME_X_DISPLAY (f), |
| 3098 | FRAME_OUTER_WINDOW (f), | 3122 | FRAME_OUTER_WINDOW (f), |
| 3099 | XInternAtom (FRAME_X_DISPLAY (f), | 3123 | XInternAtom (FRAME_X_DISPLAY (f), |
| @@ -3343,8 +3367,6 @@ This function is an internal primitive--use `make-frame' instead. */) | |||
| 3343 | "background", "Background", RES_TYPE_STRING); | 3367 | "background", "Background", RES_TYPE_STRING); |
| 3344 | x_default_parameter (f, parms, Qmouse_color, build_string ("black"), | 3368 | x_default_parameter (f, parms, Qmouse_color, build_string ("black"), |
| 3345 | "pointerColor", "Foreground", RES_TYPE_STRING); | 3369 | "pointerColor", "Foreground", RES_TYPE_STRING); |
| 3346 | x_default_parameter (f, parms, Qcursor_color, build_string ("black"), | ||
| 3347 | "cursorColor", "Foreground", RES_TYPE_STRING); | ||
| 3348 | x_default_parameter (f, parms, Qborder_color, build_string ("black"), | 3370 | x_default_parameter (f, parms, Qborder_color, build_string ("black"), |
| 3349 | "borderColor", "BorderColor", RES_TYPE_STRING); | 3371 | "borderColor", "BorderColor", RES_TYPE_STRING); |
| 3350 | x_default_parameter (f, parms, Qscreen_gamma, Qnil, | 3372 | x_default_parameter (f, parms, Qscreen_gamma, Qnil, |
| @@ -3578,7 +3600,8 @@ FRAME nil means use the selected frame. */) | |||
| 3578 | 3600 | ||
| 3579 | 3601 | ||
| 3580 | DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0, | 3602 | DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0, |
| 3581 | doc: /* Internal function called by `color-defined-p', which see. */) | 3603 | doc: /* Internal function called by `color-defined-p', which see |
| 3604 | .\(Note that the Nextstep version of this function ignores FRAME.) */) | ||
| 3582 | (Lisp_Object color, Lisp_Object frame) | 3605 | (Lisp_Object color, Lisp_Object frame) |
| 3583 | { | 3606 | { |
| 3584 | XColor foo; | 3607 | XColor foo; |
| @@ -4096,11 +4119,12 @@ x_display_info_for_name (Lisp_Object name) | |||
| 4096 | 4119 | ||
| 4097 | DEFUN ("x-open-connection", Fx_open_connection, Sx_open_connection, | 4120 | DEFUN ("x-open-connection", Fx_open_connection, Sx_open_connection, |
| 4098 | 1, 3, 0, | 4121 | 1, 3, 0, |
| 4099 | doc: /* Open a connection to an X server. | 4122 | doc: /* Open a connection to a display server. |
| 4100 | DISPLAY is the name of the display to connect to. | 4123 | DISPLAY is the name of the display to connect to. |
| 4101 | Optional second arg XRM-STRING is a string of resources in xrdb format. | 4124 | Optional second arg XRM-STRING is a string of resources in xrdb format. |
| 4102 | If the optional third arg MUST-SUCCEED is non-nil, | 4125 | If the optional third arg MUST-SUCCEED is non-nil, |
| 4103 | terminate Emacs if we can't open the connection. */) | 4126 | terminate Emacs if we can't open the connection. |
| 4127 | \(In the Nextstep version, the last two arguments are currently ignored.) */) | ||
| 4104 | (Lisp_Object display, Lisp_Object xrm_string, Lisp_Object must_succeed) | 4128 | (Lisp_Object display, Lisp_Object xrm_string, Lisp_Object must_succeed) |
| 4105 | { | 4129 | { |
| 4106 | unsigned char *xrm_option; | 4130 | unsigned char *xrm_option; |
| @@ -4179,6 +4203,9 @@ DEFUN ("x-display-list", Fx_display_list, Sx_display_list, 0, 0, 0, | |||
| 4179 | 4203 | ||
| 4180 | DEFUN ("x-synchronize", Fx_synchronize, Sx_synchronize, 1, 2, 0, | 4204 | DEFUN ("x-synchronize", Fx_synchronize, Sx_synchronize, 1, 2, 0, |
| 4181 | doc: /* If ON is non-nil, report X errors as soon as the erring request is made. | 4205 | doc: /* If ON is non-nil, report X errors as soon as the erring request is made. |
| 4206 | This function only has an effect on X Windows. With MS Windows, it is | ||
| 4207 | defined but does nothing. | ||
| 4208 | |||
| 4182 | If ON is nil, allow buffering of requests. | 4209 | If ON is nil, allow buffering of requests. |
| 4183 | Turning on synchronization prohibits the Xlib routines from buffering | 4210 | Turning on synchronization prohibits the Xlib routines from buffering |
| 4184 | requests and seriously degrades performance, but makes debugging much | 4211 | requests and seriously degrades performance, but makes debugging much |
| @@ -4213,12 +4240,12 @@ x_sync (FRAME_PTR f) | |||
| 4213 | DEFUN ("x-change-window-property", Fx_change_window_property, | 4240 | DEFUN ("x-change-window-property", Fx_change_window_property, |
| 4214 | Sx_change_window_property, 2, 6, 0, | 4241 | Sx_change_window_property, 2, 6, 0, |
| 4215 | doc: /* Change window property PROP to VALUE on the X window of FRAME. | 4242 | doc: /* Change window property PROP to VALUE on the X window of FRAME. |
| 4216 | PROP must be a string. | 4243 | PROP must be a string. VALUE may be a string or a list of conses, |
| 4217 | VALUE may be a string or a list of conses, numbers and/or strings. | 4244 | numbers and/or strings. If an element in the list is a string, it is |
| 4218 | If an element in the list is a string, it is converted to | 4245 | converted to an atom and the value of the atom is used. If an element |
| 4219 | an Atom and the value of the Atom is used. If an element is a cons, | 4246 | is a cons, it is converted to a 32 bit number where the car is the 16 |
| 4220 | it is converted to a 32 bit number where the car is the 16 top bits and the | 4247 | top bits and the cdr is the lower 16 bits. |
| 4221 | cdr is the lower 16 bits. | 4248 | |
| 4222 | FRAME nil or omitted means use the selected frame. | 4249 | FRAME nil or omitted means use the selected frame. |
| 4223 | If TYPE is given and non-nil, it is the name of the type of VALUE. | 4250 | If TYPE is given and non-nil, it is the name of the type of VALUE. |
| 4224 | If TYPE is not given or nil, the type is STRING. | 4251 | If TYPE is not given or nil, the type is STRING. |
| @@ -4226,9 +4253,7 @@ FORMAT gives the size in bits of each element if VALUE is a list. | |||
| 4226 | It must be one of 8, 16 or 32. | 4253 | It must be one of 8, 16 or 32. |
| 4227 | If VALUE is a string or FORMAT is nil or not given, FORMAT defaults to 8. | 4254 | If VALUE is a string or FORMAT is nil or not given, FORMAT defaults to 8. |
| 4228 | If OUTER_P is non-nil, the property is changed for the outer X window of | 4255 | If OUTER_P is non-nil, the property is changed for the outer X window of |
| 4229 | FRAME. Default is to change on the edit X window. | 4256 | FRAME. Default is to change on the edit X window. */) |
| 4230 | |||
| 4231 | Value is VALUE. */) | ||
| 4232 | (Lisp_Object prop, Lisp_Object value, Lisp_Object frame, Lisp_Object type, Lisp_Object format, Lisp_Object outer_p) | 4257 | (Lisp_Object prop, Lisp_Object value, Lisp_Object frame, Lisp_Object type, Lisp_Object format, Lisp_Object outer_p) |
| 4233 | { | 4258 | { |
| 4234 | struct frame *f = check_x_frame (frame); | 4259 | struct frame *f = check_x_frame (frame); |
| @@ -4329,15 +4354,19 @@ DEFUN ("x-window-property", Fx_window_property, Sx_window_property, | |||
| 4329 | 1, 6, 0, | 4354 | 1, 6, 0, |
| 4330 | doc: /* Value is the value of window property PROP on FRAME. | 4355 | doc: /* Value is the value of window property PROP on FRAME. |
| 4331 | If FRAME is nil or omitted, use the selected frame. | 4356 | If FRAME is nil or omitted, use the selected frame. |
| 4332 | If TYPE is nil or omitted, get the property as a string. Otherwise TYPE | 4357 | |
| 4333 | is the name of the Atom that denotes the type expected. | 4358 | On MS Windows, this function only accepts the PROP and FRAME arguments. |
| 4359 | |||
| 4360 | On X Windows, the following optional arguments are also accepted: | ||
| 4361 | If TYPE is nil or omitted, get the property as a string. | ||
| 4362 | Otherwise TYPE is the name of the atom that denotes the type expected. | ||
| 4334 | If SOURCE is non-nil, get the property on that window instead of from | 4363 | If SOURCE is non-nil, get the property on that window instead of from |
| 4335 | FRAME. The number 0 denotes the root window. | 4364 | FRAME. The number 0 denotes the root window. |
| 4336 | If DELETE_P is non-nil, delete the property after retreiving it. | 4365 | If DELETE_P is non-nil, delete the property after retreiving it. |
| 4337 | If VECTOR_RET_P is non-nil, don't return a string but a vector of values. | 4366 | If VECTOR_RET_P is non-nil, don't return a string but a vector of values. |
| 4338 | 4367 | ||
| 4339 | Value is nil if FRAME hasn't a property with name PROP or if PROP has | 4368 | Value is nil if FRAME hasn't a property with name PROP or if PROP has |
| 4340 | no value of TYPE. */) | 4369 | no value of TYPE (always string in the MS Windows case). */) |
| 4341 | (Lisp_Object prop, Lisp_Object frame, Lisp_Object type, Lisp_Object source, Lisp_Object delete_p, Lisp_Object vector_ret_p) | 4370 | (Lisp_Object prop, Lisp_Object frame, Lisp_Object type, Lisp_Object source, Lisp_Object delete_p, Lisp_Object vector_ret_p) |
| 4342 | { | 4371 | { |
| 4343 | struct frame *f = check_x_frame (frame); | 4372 | struct frame *f = check_x_frame (frame); |
| @@ -4990,7 +5019,7 @@ change the tooltip's appearance. | |||
| 4990 | Automatically hide the tooltip after TIMEOUT seconds. TIMEOUT nil | 5019 | Automatically hide the tooltip after TIMEOUT seconds. TIMEOUT nil |
| 4991 | means use the default timeout of 5 seconds. | 5020 | means use the default timeout of 5 seconds. |
| 4992 | 5021 | ||
| 4993 | If the list of frame parameters PARAMS contains a `left' parameters, | 5022 | If the list of frame parameters PARMS contains a `left' parameters, |
| 4994 | the tooltip is displayed at that x-position. Otherwise it is | 5023 | the tooltip is displayed at that x-position. Otherwise it is |
| 4995 | displayed at the mouse position, with offset DX added (default is 5 if | 5024 | displayed at the mouse position, with offset DX added (default is 5 if |
| 4996 | DX isn't specified). Likewise for the y-position; if a `top' frame | 5025 | DX isn't specified). Likewise for the y-position; if a `top' frame |
| @@ -5007,7 +5036,7 @@ Text larger than the specified size is clipped. */) | |||
| 5007 | int root_x, root_y; | 5036 | int root_x, root_y; |
| 5008 | struct buffer *old_buffer; | 5037 | struct buffer *old_buffer; |
| 5009 | struct text_pos pos; | 5038 | struct text_pos pos; |
| 5010 | int i, width, height; | 5039 | int i, width, height, seen_reversed_p; |
| 5011 | struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; | 5040 | struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
| 5012 | int old_windows_or_buffers_changed = windows_or_buffers_changed; | 5041 | int old_windows_or_buffers_changed = windows_or_buffers_changed; |
| 5013 | int count = SPECPDL_INDEX (); | 5042 | int count = SPECPDL_INDEX (); |
| @@ -5148,7 +5177,7 @@ Text larger than the specified size is clipped. */) | |||
| 5148 | try_window (FRAME_ROOT_WINDOW (f), pos, TRY_WINDOW_IGNORE_FONTS_CHANGE); | 5177 | try_window (FRAME_ROOT_WINDOW (f), pos, TRY_WINDOW_IGNORE_FONTS_CHANGE); |
| 5149 | 5178 | ||
| 5150 | /* Compute width and height of the tooltip. */ | 5179 | /* Compute width and height of the tooltip. */ |
| 5151 | width = height = 0; | 5180 | width = height = seen_reversed_p = 0; |
| 5152 | for (i = 0; i < w->desired_matrix->nrows; ++i) | 5181 | for (i = 0; i < w->desired_matrix->nrows; ++i) |
| 5153 | { | 5182 | { |
| 5154 | struct glyph_row *row = &w->desired_matrix->rows[i]; | 5183 | struct glyph_row *row = &w->desired_matrix->rows[i]; |
| @@ -5163,19 +5192,74 @@ Text larger than the specified size is clipped. */) | |||
| 5163 | row->full_width_p = 1; | 5192 | row->full_width_p = 1; |
| 5164 | 5193 | ||
| 5165 | row_width = row->pixel_width; | 5194 | row_width = row->pixel_width; |
| 5166 | /* There's a glyph at the end of rows that is used to place | ||
| 5167 | the cursor there. Don't include the width of this glyph. */ | ||
| 5168 | if (row->used[TEXT_AREA]) | 5195 | if (row->used[TEXT_AREA]) |
| 5169 | { | 5196 | { |
| 5170 | last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1]; | 5197 | /* There's a glyph at the end of rows that is used to place |
| 5171 | if (INTEGERP (last->object)) | 5198 | the cursor there. Don't include the width of this glyph. */ |
| 5172 | row_width -= last->pixel_width; | 5199 | if (!row->reversed_p) |
| 5200 | { | ||
| 5201 | last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1]; | ||
| 5202 | if (INTEGERP (last->object)) | ||
| 5203 | row_width -= last->pixel_width; | ||
| 5204 | } | ||
| 5205 | else | ||
| 5206 | { | ||
| 5207 | /* There could be a stretch glyph at the beginning of R2L | ||
| 5208 | rows that is produced by extend_face_to_end_of_line. | ||
| 5209 | Don't count that glyph. */ | ||
| 5210 | struct glyph *g = row->glyphs[TEXT_AREA]; | ||
| 5211 | |||
| 5212 | if (g->type == STRETCH_GLYPH && INTEGERP (g->object)) | ||
| 5213 | { | ||
| 5214 | row_width -= g->pixel_width; | ||
| 5215 | seen_reversed_p = 1; | ||
| 5216 | } | ||
| 5217 | } | ||
| 5173 | } | 5218 | } |
| 5174 | 5219 | ||
| 5175 | height += row->height; | 5220 | height += row->height; |
| 5176 | width = max (width, row_width); | 5221 | width = max (width, row_width); |
| 5177 | } | 5222 | } |
| 5178 | 5223 | ||
| 5224 | /* If we've seen partial-length R2L rows, we need to re-adjust the | ||
| 5225 | tool-tip frame width and redisplay it again, to avoid over-wide | ||
| 5226 | tips due to the stretch glyph that extends R2L lines to full | ||
| 5227 | width of the frame. */ | ||
| 5228 | if (seen_reversed_p) | ||
| 5229 | { | ||
| 5230 | /* w->total_cols and FRAME_TOTAL_COLS want the width in columns, | ||
| 5231 | not in pixels. */ | ||
| 5232 | width /= WINDOW_FRAME_COLUMN_WIDTH (w); | ||
| 5233 | w->total_cols = make_number (width); | ||
| 5234 | FRAME_TOTAL_COLS (f) = width; | ||
| 5235 | adjust_glyphs (f); | ||
| 5236 | clear_glyph_matrix (w->desired_matrix); | ||
| 5237 | clear_glyph_matrix (w->current_matrix); | ||
| 5238 | try_window (FRAME_ROOT_WINDOW (f), pos, 0); | ||
| 5239 | width = height = 0; | ||
| 5240 | /* Recompute width and height of the tooltip. */ | ||
| 5241 | for (i = 0; i < w->desired_matrix->nrows; ++i) | ||
| 5242 | { | ||
| 5243 | struct glyph_row *row = &w->desired_matrix->rows[i]; | ||
| 5244 | struct glyph *last; | ||
| 5245 | int row_width; | ||
| 5246 | |||
| 5247 | if (!row->enabled_p || !row->displays_text_p) | ||
| 5248 | break; | ||
| 5249 | row->full_width_p = 1; | ||
| 5250 | row_width = row->pixel_width; | ||
| 5251 | if (row->used[TEXT_AREA] && !row->reversed_p) | ||
| 5252 | { | ||
| 5253 | last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1]; | ||
| 5254 | if (INTEGERP (last->object)) | ||
| 5255 | row_width -= last->pixel_width; | ||
| 5256 | } | ||
| 5257 | |||
| 5258 | height += row->height; | ||
| 5259 | width = max (width, row_width); | ||
| 5260 | } | ||
| 5261 | } | ||
| 5262 | |||
| 5179 | /* Add the frame's internal border to the width and height the X | 5263 | /* Add the frame's internal border to the width and height the X |
| 5180 | window should have. */ | 5264 | window should have. */ |
| 5181 | height += 2 * FRAME_INTERNAL_BORDER_WIDTH (f); | 5265 | height += 2 * FRAME_INTERNAL_BORDER_WIDTH (f); |
| @@ -5299,9 +5383,7 @@ DEFUN ("x-uses-old-gtk-dialog", Fx_uses_old_gtk_dialog, | |||
| 5299 | /* Callback for "OK" and "Cancel" on file selection dialog. */ | 5383 | /* Callback for "OK" and "Cancel" on file selection dialog. */ |
| 5300 | 5384 | ||
| 5301 | static void | 5385 | static void |
| 5302 | file_dialog_cb (widget, client_data, call_data) | 5386 | file_dialog_cb (Widget widget, XtPointer client_data, XtPointer call_data) |
| 5303 | Widget widget; | ||
| 5304 | XtPointer call_data, client_data; | ||
| 5305 | { | 5387 | { |
| 5306 | int *result = (int *) client_data; | 5388 | int *result = (int *) client_data; |
| 5307 | XmAnyCallbackStruct *cb = (XmAnyCallbackStruct *) call_data; | 5389 | XmAnyCallbackStruct *cb = (XmAnyCallbackStruct *) call_data; |
| @@ -5315,17 +5397,14 @@ file_dialog_cb (widget, client_data, call_data) | |||
| 5315 | in this case. */ | 5397 | in this case. */ |
| 5316 | 5398 | ||
| 5317 | static void | 5399 | static void |
| 5318 | file_dialog_unmap_cb (widget, client_data, call_data) | 5400 | file_dialog_unmap_cb (Widget widget, XtPointer client_data, XtPointer call_data) |
| 5319 | Widget widget; | ||
| 5320 | XtPointer call_data, client_data; | ||
| 5321 | { | 5401 | { |
| 5322 | int *result = (int *) client_data; | 5402 | int *result = (int *) client_data; |
| 5323 | *result = XmCR_CANCEL; | 5403 | *result = XmCR_CANCEL; |
| 5324 | } | 5404 | } |
| 5325 | 5405 | ||
| 5326 | static Lisp_Object | 5406 | static Lisp_Object |
| 5327 | clean_up_file_dialog (arg) | 5407 | clean_up_file_dialog (Lisp_Object arg) |
| 5328 | Lisp_Object arg; | ||
| 5329 | { | 5408 | { |
| 5330 | struct Lisp_Save_Value *p = XSAVE_VALUE (arg); | 5409 | struct Lisp_Save_Value *p = XSAVE_VALUE (arg); |
| 5331 | Widget dialog = (Widget) p->pointer; | 5410 | Widget dialog = (Widget) p->pointer; |
| @@ -5345,7 +5424,11 @@ DEFUN ("x-file-dialog", Fx_file_dialog, Sx_file_dialog, 2, 5, 0, | |||
| 5345 | doc: /* Read file name, prompting with PROMPT in directory DIR. | 5424 | doc: /* Read file name, prompting with PROMPT in directory DIR. |
| 5346 | Use a file selection dialog. Select DEFAULT-FILENAME in the dialog's file | 5425 | Use a file selection dialog. Select DEFAULT-FILENAME in the dialog's file |
| 5347 | selection box, if specified. If MUSTMATCH is non-nil, the returned file | 5426 | selection box, if specified. If MUSTMATCH is non-nil, the returned file |
| 5348 | or directory must exist. ONLY-DIR-P is ignored." */) | 5427 | or directory must exist. |
| 5428 | |||
| 5429 | This function is only defined on MS Windows, and X Windows with the | ||
| 5430 | Motif or Gtk toolkits. With the Motif toolkit, ONLY-DIR-P is ignored. | ||
| 5431 | Otherwise, if ONLY-DIR-P is non-nil, the user can only select directories. */) | ||
| 5349 | (Lisp_Object prompt, Lisp_Object dir, Lisp_Object default_filename, Lisp_Object mustmatch, Lisp_Object only_dir_p) | 5432 | (Lisp_Object prompt, Lisp_Object dir, Lisp_Object default_filename, Lisp_Object mustmatch, Lisp_Object only_dir_p) |
| 5350 | { | 5433 | { |
| 5351 | int result; | 5434 | int result; |
| @@ -5514,8 +5597,11 @@ DEFUN ("x-file-dialog", Fx_file_dialog, Sx_file_dialog, 2, 5, 0, | |||
| 5514 | doc: /* Read file name, prompting with PROMPT in directory DIR. | 5597 | doc: /* Read file name, prompting with PROMPT in directory DIR. |
| 5515 | Use a file selection dialog. Select DEFAULT-FILENAME in the dialog's file | 5598 | Use a file selection dialog. Select DEFAULT-FILENAME in the dialog's file |
| 5516 | selection box, if specified. If MUSTMATCH is non-nil, the returned file | 5599 | selection box, if specified. If MUSTMATCH is non-nil, the returned file |
| 5517 | or directory must exist. If ONLY-DIR-P is non-nil, the user can only select | 5600 | or directory must exist. |
| 5518 | directories. */) | 5601 | |
| 5602 | This function is only defined on MS Windows, and X Windows with the | ||
| 5603 | Motif or Gtk toolkits. With the Motif toolkit, ONLY-DIR-P is ignored. | ||
| 5604 | Otherwise, if ONLY-DIR-P is non-nil, the user can only select directories. */) | ||
| 5519 | (Lisp_Object prompt, Lisp_Object dir, Lisp_Object default_filename, Lisp_Object mustmatch, Lisp_Object only_dir_p) | 5605 | (Lisp_Object prompt, Lisp_Object dir, Lisp_Object default_filename, Lisp_Object mustmatch, Lisp_Object only_dir_p) |
| 5520 | { | 5606 | { |
| 5521 | FRAME_PTR f = SELECTED_FRAME (); | 5607 | FRAME_PTR f = SELECTED_FRAME (); |
| @@ -6019,5 +6105,3 @@ When using Gtk+ tooltips, the tooltip face is not used. */); | |||
| 6019 | 6105 | ||
| 6020 | #endif /* HAVE_X_WINDOWS */ | 6106 | #endif /* HAVE_X_WINDOWS */ |
| 6021 | 6107 | ||
| 6022 | /* arch-tag: 55040d02-5485-4d58-8b22-95a7a05f3288 | ||
| 6023 | (do not change this comment) */ | ||