X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/2a58bbc1830abaf7b51cb9d94df884dc92071ddf..b6e64c4136905ab4f00194c360bd6cd3cd767b9c:/src/xfns.c diff --git a/src/xfns.c b/src/xfns.c index ac030582ff..c68149cce1 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -2914,7 +2914,7 @@ x_free_gcs (struct frame *f) /* Handler for signals raised during x_create_frame and - x_create_top_frame. FRAME is the frame which is partially + x_create_tip_frame. FRAME is the frame which is partially constructed. */ static Lisp_Object @@ -2929,7 +2929,7 @@ unwind_create_frame (Lisp_Object frame) return Qnil; /* If frame is ``official'', nothing to do. */ - if (!CONSP (Vframe_list) || !EQ (XCAR (Vframe_list), frame)) + if (NILP (Fmemq (frame, Vframe_list))) { #if GLYPH_DEBUG && XASSERTS struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); @@ -2962,7 +2962,7 @@ x_default_font_parameter (struct frame *f, Lisp_Object parms) if (NILP (font_param)) { - /* System font should take precedendce over X resources. We suggest this + /* System font should take precedence over X resources. We suggest this regardless of font-use-system-font because .emacs may not have been read yet. */ const char *system_font = xsettings_get_system_font (); @@ -3138,7 +3138,6 @@ This function is an internal primitive--use `make-frame' instead. */) FRAME_CAN_HAVE_SCROLL_BARS (f) = 1; f->terminal = dpyinfo->terminal; - f->terminal->reference_count++; f->output_method = output_x_window; f->output_data.x = (struct x_output *) xmalloc (sizeof (struct x_output)); @@ -3308,6 +3307,12 @@ This function is an internal primitive--use `make-frame' instead. */) "scrollBarBackground", "ScrollBarBackground", 0); +#if GLYPH_DEBUG + image_cache_refcount = + FRAME_IMAGE_CACHE (f) ? FRAME_IMAGE_CACHE (f)->refcount : 0; + dpyinfo_refcount = dpyinfo->reference_count; +#endif /* GLYPH_DEBUG */ + /* Init faces before x_default_parameter is called for scroll-bar parameters because that function calls x_set_scroll_bar_width, which calls change_frame_size, which calls Fset_window_buffer, @@ -3316,11 +3321,6 @@ This function is an internal primitive--use `make-frame' instead. */) happen. */ init_frame_faces (f); -#if GLYPH_DEBUG - image_cache_refcount = FRAME_IMAGE_CACHE (f)->refcount; - dpyinfo_refcount = dpyinfo->reference_count; -#endif /* GLYPH_DEBUG */ - /* The X resources controlling the menu-bar and tool-bar are processed specially at startup, and reflected in the mode variables; ignore them here. */ @@ -3364,6 +3364,7 @@ This function is an internal primitive--use `make-frame' instead. */) x_make_gc (f); /* Now consider the frame official. */ + f->terminal->reference_count++; FRAME_X_DISPLAY_INFO (f)->reference_count++; Vframe_list = Fcons (frame, Vframe_list); @@ -3690,7 +3691,7 @@ If omitted or nil, that stands for the selected frame's display. */) DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0, doc: /* Return the "vendor ID" string of the X server of display TERMINAL. -\(Labelling every distributor as a "vendor" embodies the false assumption +\(Labeling every distributor as a "vendor" embodies the false assumption that operating systems cannot be developed and distributed noncommercially.) The optional argument TERMINAL specifies which display to ask about. TERMINAL should be a terminal object, a frame or a display name (a string). @@ -4594,7 +4595,6 @@ x_create_tip_frame (struct x_display_info *dpyinfo, record_unwind_protect (unwind_create_tip_frame, frame); f->terminal = dpyinfo->terminal; - f->terminal->reference_count++; /* By setting the output method, we're essentially saying that the frame is live, as per FRAME_LIVE_P. If we get a signal @@ -4716,6 +4716,12 @@ x_create_tip_frame (struct x_display_info *dpyinfo, x_default_parameter (f, parms, Qborder_color, build_string ("black"), "borderColor", "BorderColor", RES_TYPE_STRING); +#if GLYPH_DEBUG + image_cache_refcount = + FRAME_IMAGE_CACHE (f) ? FRAME_IMAGE_CACHE (f)->refcount : 0; + dpyinfo_refcount = dpyinfo->reference_count; +#endif /* GLYPH_DEBUG */ + /* Init faces before x_default_parameter is called for scroll-bar parameters because that function calls x_set_scroll_bar_width, which calls change_frame_size, which calls Fset_window_buffer, @@ -4724,11 +4730,6 @@ x_create_tip_frame (struct x_display_info *dpyinfo, happen. */ init_frame_faces (f); -#if GLYPH_DEBUG - image_cache_refcount = FRAME_IMAGE_CACHE (f)->refcount; - dpyinfo_refcount = dpyinfo->reference_count; -#endif /* GLYPH_DEBUG */ - f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window; x_figure_window_size (f, parms, 0); @@ -4834,14 +4835,16 @@ x_create_tip_frame (struct x_display_info *dpyinfo, UNGCPRO; + /* Now that the frame will be official, it counts as a reference to + its display and terminal. */ + FRAME_X_DISPLAY_INFO (f)->reference_count++; + f->terminal->reference_count++; + /* It is now ok to make the frame official even if we get an error below. And the frame needs to be on Vframe_list or making it visible won't work. */ Vframe_list = Fcons (frame, Vframe_list); - /* Now that the frame is official, it counts as a reference to - its display. */ - FRAME_X_DISPLAY_INFO (f)->reference_count++; /* Setting attributes of faces of the tooltip frame from resources and similar will increment face_change_count, which leads to the @@ -5911,7 +5914,7 @@ the tool bar buttons. */); x_gtk_whole_detached_tool_bar = 0; DEFVAR_BOOL ("x-gtk-use-system-tooltips", x_gtk_use_system_tooltips, - doc: /* *If non-nil with a Gtk+ built Emacs, the Gtk+ toolip is used. + doc: /* *If non-nil with a Gtk+ built Emacs, the Gtk+ tooltip is used. Otherwise use Emacs own tooltip implementation. When using Gtk+ tooltips, the tooltip face is not used. */); x_gtk_use_system_tooltips = 1;