From: Po Lu Date: Wed, 27 Apr 2022 11:19:01 +0000 (+0800) Subject: Cleanups to PGTK code X-Git-Tag: emacs-29.0.90~1931^2~276 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=5aef2623a37d9fe452b7072dbd12c7a24dd971e2;p=emacs.git Cleanups to PGTK code * src/pgtkfns.c (pgtk_explicitly_set_name, pgtk_set_tab_bar_lines) (pgtk_change_tab_bar_height, pgtk_set_child_frame_border_width) (pgtk_set_internal_border_width, pgtk_set_cursor_type) (pgtk_set_mouse_color, pgtk_set_override_redirect, xg_set_icon) (pgtk_frame_parm_handlers, Fpgtk_set_monitor_scale_factor) (pgtk_set_scroll_bar_default_width, pgtk_get_focus_frame) (pgtk_hide_tip, Fx_show_tip, Fx_hide_tip, frame_geometry) (syms_of_pgtkfns): Clean up coding style and delete incorrect comments that mostly duplicate what is in xfns.c, and fix comment coding style. Also rename functions from `x_' to `pgtk_'. * src/pgtkterm.c (pgtk_setup_relief_colors): Fix relief caching with new flag. (pgtk_draw_relief_rect, flip_cr_context, pgtk_wait_for_map_event) (pgtk_make_frame_visible, pgtk_make_frame_invisible) (pgtk_set_parent_frame, pgtk_draw_glyph_string_foreground) (pgtk_draw_composite_glyph_string_foreground) (pgtk_draw_glyphless_glyph_string_foreground) (pgtk_set_clip_rectangles, pgtk_draw_glyph_string_bg_rect) (pgtk_draw_image_foreground, pgtk_draw_image_glyph_string) (pgtk_draw_stretch_glyph_string, pgtk_draw_glyph_string) (pgtk_copy_bits, pgtk_bitmap_icon, pgtk_define_fringe_bitmap) (pgtk_show_hourglass, pgtk_flash, pgtk_send_scroll_bar_event) (pgtk_free_pixmap, set_opacity_recursively, frame_highlight) (frame_unhighlight, pgtk_toggle_invisible_pointer) (pgtk_create_terminal, pgtk_window_is_of_frame_recursive) (pgtk_window_is_of_frame, pgtk_any_window_to_frame) (pgtk_handle_draw, size_allocate, pgtk_enqueue_string) (key_press_event, motion_notify_event): Fix coding style and some minor bugs. * src/pgtkterm.h (struct pgtk_output): New field for tracking relief color status, update prototypes. --- diff --git a/src/pgtkfns.c b/src/pgtkfns.c index 1cab954a076..d1a72804cfe 100644 --- a/src/pgtkfns.c +++ b/src/pgtkfns.c @@ -360,7 +360,8 @@ pgtk_set_name (struct frame *f, Lisp_Object name, int explicit) specified a name for the frame; the name will override any set by the redisplay code. */ static void -x_explicitly_set_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval) +pgtk_explicitly_set_name (struct frame *f, Lisp_Object arg, + Lisp_Object oldval) { pgtk_set_name (f, arg, true); } @@ -467,13 +468,12 @@ pgtk_set_tab_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) else nlines = 0; - x_change_tab_bar_height (f, nlines * FRAME_LINE_HEIGHT (f)); + pgtk_change_tab_bar_height (f, nlines * FRAME_LINE_HEIGHT (f)); } - /* Set the pixel height of the tab bar of frame F to HEIGHT. */ void -x_change_tab_bar_height (struct frame *f, int height) +pgtk_change_tab_bar_height (struct frame *f, int height) { int unit = FRAME_LINE_HEIGHT (f); int old_height = FRAME_TAB_BAR_HEIGHT (f); @@ -578,12 +578,11 @@ pgtk_set_child_frame_border_width (struct frame *f, Lisp_Object arg, Lisp_Object pgtk_clear_under_internal_border (f); } } - } static void pgtk_set_internal_border_width (struct frame *f, Lisp_Object arg, - Lisp_Object oldval) + Lisp_Object oldval) { int border = check_int_nonnegative (arg); @@ -661,32 +660,17 @@ pgtk_set_icon_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval) unblock_input (); } -/* This is the same as the xfns.c definition. */ static void pgtk_set_cursor_type (struct frame *f, Lisp_Object arg, Lisp_Object oldval) { set_frame_cursor_types (f, arg); } -/* called to set mouse pointer color, but all other terms use it to - initialize pointer types (and don't set the color ;) */ static void pgtk_set_mouse_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval) { } -/** - * pgtk_set_undecorated: - * - * Set frame F's `undecorated' parameter. If non-nil, F's window-system - * window is drawn without decorations, title, minimize/maximize boxes - * and external borders. This usually means that the window cannot be - * dragged, resized, iconified, maximized or deleted with the mouse. If - * nil, draw the frame with all the elements listed above unless these - * have been suspended via window manager settings. - * - * Some window managers may not honor this parameter. - */ static void pgtk_set_undecorated (struct frame *f, Lisp_Object new_value, Lisp_Object old_value) @@ -698,16 +682,6 @@ pgtk_set_undecorated (struct frame *f, Lisp_Object new_value, } } -/** - * pgtk_set_skip_taskbar: - * - * Set frame F's `skip-taskbar' parameter. If non-nil, this should - * remove F's icon from the taskbar associated with the display of F's - * window-system window and inhibit switching to F's window via - * -. If nil, lift these restrictions. - * - * Some window managers may not honor this parameter. - */ static void pgtk_set_skip_taskbar (struct frame *f, Lisp_Object new_value, Lisp_Object old_value) @@ -719,18 +693,9 @@ pgtk_set_skip_taskbar (struct frame *f, Lisp_Object new_value, } } -/** - * pgtk_set_override_redirect: - * - * Set frame F's `override_redirect' parameter which, if non-nil, hints - * that the window manager doesn't want to deal with F. Usually, such - * frames have no decorations and always appear on top of all frames. - * - * Some window managers may not honor this parameter. - */ static void pgtk_set_override_redirect (struct frame *f, Lisp_Object new_value, - Lisp_Object old_value) + Lisp_Object old_value) { if (!EQ (new_value, old_value)) { @@ -745,9 +710,7 @@ pgtk_set_override_redirect (struct frame *f, Lisp_Object new_value, } } -/* Set icon from FILE for frame F. By using GTK functions the icon - may be any format that GdkPixbuf knows about, i.e. not just bitmaps. */ - +/* Set icon from FILE for frame F. */ bool xg_set_icon (struct frame *f, Lisp_Object file) { @@ -969,59 +932,58 @@ unless TYPE is `png'. */) return pgtk_cr_export_frames (frames, surface_type); } - -/* Note: see frame.c for template, also where generic functions are impl */ -frame_parm_handler pgtk_frame_parm_handlers[] = { - gui_set_autoraise, /* generic OK */ - gui_set_autolower, /* generic OK */ - pgtk_set_background_color, - pgtk_set_border_color, - gui_set_border_width, - pgtk_set_cursor_color, - pgtk_set_cursor_type, - gui_set_font, /* generic OK */ - pgtk_set_foreground_color, - pgtk_set_icon_name, - pgtk_set_icon_type, - pgtk_set_child_frame_border_width, - pgtk_set_internal_border_width, /* generic OK */ - gui_set_right_divider_width, - gui_set_bottom_divider_width, - pgtk_set_menu_bar_lines, - pgtk_set_mouse_color, - x_explicitly_set_name, - gui_set_scroll_bar_width, /* generic OK */ - gui_set_scroll_bar_height, /* generic OK */ - pgtk_set_title, - gui_set_unsplittable, /* generic OK */ - gui_set_vertical_scroll_bars, /* generic OK */ - gui_set_horizontal_scroll_bars, /* generic OK */ - gui_set_visibility, /* generic OK */ - pgtk_set_tab_bar_lines, - pgtk_set_tool_bar_lines, - pgtk_set_scroll_bar_foreground, - pgtk_set_scroll_bar_background, - gui_set_screen_gamma, /* generic OK */ - gui_set_line_spacing, /* generic OK, sets f->extra_line_spacing to int */ - gui_set_left_fringe, /* generic OK */ - gui_set_right_fringe, /* generic OK */ - 0, /* x_set_wait_for_wm */ - gui_set_fullscreen, /* generic OK */ - gui_set_font_backend, /* generic OK */ - gui_set_alpha, - pgtk_set_sticky, - pgtk_set_tool_bar_position, - 0, /* x_set_inhibit_double_buffering */ - pgtk_set_undecorated, - pgtk_set_parent_frame, - pgtk_set_skip_taskbar, - pgtk_set_no_focus_on_map, - pgtk_set_no_accept_focus, - pgtk_set_z_group, - pgtk_set_override_redirect, - gui_set_no_special_glyphs, - pgtk_set_alpha_background, -}; +frame_parm_handler pgtk_frame_parm_handlers[] = + { + gui_set_autoraise, /* generic OK */ + gui_set_autolower, /* generic OK */ + pgtk_set_background_color, + pgtk_set_border_color, + gui_set_border_width, + pgtk_set_cursor_color, + pgtk_set_cursor_type, + gui_set_font, /* generic OK */ + pgtk_set_foreground_color, + pgtk_set_icon_name, + pgtk_set_icon_type, + pgtk_set_child_frame_border_width, + pgtk_set_internal_border_width, /* generic OK */ + gui_set_right_divider_width, + gui_set_bottom_divider_width, + pgtk_set_menu_bar_lines, + pgtk_set_mouse_color, + pgtk_explicitly_set_name, + gui_set_scroll_bar_width, /* generic OK */ + gui_set_scroll_bar_height, /* generic OK */ + pgtk_set_title, + gui_set_unsplittable, /* generic OK */ + gui_set_vertical_scroll_bars, /* generic OK */ + gui_set_horizontal_scroll_bars, /* generic OK */ + gui_set_visibility, /* generic OK */ + pgtk_set_tab_bar_lines, + pgtk_set_tool_bar_lines, + pgtk_set_scroll_bar_foreground, + pgtk_set_scroll_bar_background, + gui_set_screen_gamma, /* generic OK */ + gui_set_line_spacing, /* generic OK, sets f->extra_line_spacing to int */ + gui_set_left_fringe, /* generic OK */ + gui_set_right_fringe, /* generic OK */ + 0, + gui_set_fullscreen, /* generic OK */ + gui_set_font_backend, /* generic OK */ + gui_set_alpha, + pgtk_set_sticky, + pgtk_set_tool_bar_position, + 0, + pgtk_set_undecorated, + pgtk_set_parent_frame, + pgtk_set_skip_taskbar, + pgtk_set_no_focus_on_map, + pgtk_set_no_accept_focus, + pgtk_set_z_group, + pgtk_set_override_redirect, + gui_set_no_special_glyphs, + pgtk_set_alpha_background, + }; /* Handler for signals raised during x_create_frame and @@ -1186,7 +1148,7 @@ incorrect when you specify fractional scale factor in compositor. If you set scale factor by this function, it is used instead of Gdk's one. Pass nil as SCALE-FACTOR if you want to reset the specified monitor's -scale factor. */ ) +scale factor. */) (Lisp_Object monitor_model, Lisp_Object scale_factor) { CHECK_STRING (monitor_model); @@ -2255,27 +2217,6 @@ DEFUN ("x-display-list", Fx_display_list, Sx_display_list, 0, 0, 0, return result; } - -DEFUN ("pgtk-hide-others", Fpgtk_hide_others, Spgtk_hide_others, 0, 0, 0, - doc: /* Hides all applications other than Emacs. */) - (void) -{ - check_window_system (NULL); - return Qnil; -} - -DEFUN ("pgtk-hide-emacs", Fpgtk_hide_emacs, Spgtk_hide_emacs, 1, 1, 0, - doc: /* If ON is non-nil, the entire Emacs application is hidden. -Otherwise if Emacs is hidden, it is unhidden. -If ON is equal to `activate', Emacs is unhidden and becomes -the active application. */) - (Lisp_Object on) -{ - check_window_system (NULL); - return Qnil; -} - - DEFUN ("pgtk-font-name", Fpgtk_font_name, Spgtk_font_name, 1, 1, 0, doc: /* Determine font PostScript or family name for font NAME. NAME should be a string containing either the font name or an XLFD @@ -2311,7 +2252,6 @@ check_x_display_info (Lisp_Object frame) return check_pgtk_display_info (frame); } - void pgtk_set_scroll_bar_default_width (struct frame *f) { @@ -2359,9 +2299,8 @@ pgtk_get_string_resource (XrmDatabase rdb, const char *name, return res; } - Lisp_Object -x_get_focus_frame (struct frame *frame) +pgtk_get_focus_frame (struct frame *frame) { struct pgtk_display_info *dpyinfo = FRAME_DISPLAY_INFO (frame); Lisp_Object focus; @@ -2404,7 +2343,6 @@ DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0, return Qnil; } - DEFUN ("xw-display-color-p", Fxw_display_color_p, Sxw_display_color_p, 0, 1, 0, doc: /* Internal function called by `display-color-p', which see. */) (Lisp_Object terminal) @@ -2413,7 +2351,6 @@ DEFUN ("xw-display-color-p", Fxw_display_color_p, Sxw_display_color_p, 0, 1, 0, return Qt; } - DEFUN ("x-display-grayscale-p", Fx_display_grayscale_p, Sx_display_grayscale_p, 0, 1, 0, doc: /* Return t if the display supports shades of gray. Note that color displays do support shades of gray. @@ -2425,7 +2362,6 @@ If omitted or nil, that stands for the selected frame's display. */) return Qnil; } - DEFUN ("x-display-pixel-width", Fx_display_pixel_width, Sx_display_pixel_width, 0, 1, 0, doc: /* Return the width in pixels of the display TERMINAL. The optional argument TERMINAL specifies which display to ask about. @@ -2471,7 +2407,6 @@ each physical monitor, use `display-monitor-attributes-list'. */) return make_fixnum (width); } - DEFUN ("x-display-pixel-height", Fx_display_pixel_height, Sx_display_pixel_height, 0, 1, 0, doc: /* Return the height in pixels of the display TERMINAL. The optional argument TERMINAL specifies which display to ask about. @@ -3066,7 +3001,7 @@ compute_tip_xy (struct frame *f, Lisp_Object parms, Lisp_Object dx, /* Hide tooltip. Delete its frame if DELETE is true. */ static Lisp_Object -x_hide_tip (bool delete) +pgtk_hide_tip (bool delete) { if (!NILP (tip_timer)) { @@ -3306,13 +3241,13 @@ Text larger than the specified size is clipped. */) } } - x_hide_tip (delete); + pgtk_hide_tip (delete); } else - x_hide_tip (true); + pgtk_hide_tip (true); } else - x_hide_tip (true); + pgtk_hide_tip (true); tip_last_frame = frame; tip_last_string = string; @@ -3439,7 +3374,7 @@ DEFUN ("x-hide-tip", Fx_hide_tip, Sx_hide_tip, 0, 0, 0, Value is t if tooltip was open, nil otherwise. */) (void) { - return x_hide_tip (!tooltip_reuse_hidden_frame); + return pgtk_hide_tip (!tooltip_reuse_hidden_frame); } /* Return geometric attributes of FRAME. According to the value of @@ -3465,10 +3400,8 @@ frame_geometry (Lisp_Object frame, Lisp_Object attribute) int left_pos, top_pos; if (FRAME_GTK_OUTER_WIDGET (f)) - { - gtk_window_get_position (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), - &left_pos, &top_pos); - } + gtk_window_get_position (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), + &left_pos, &top_pos); else { GtkAllocation alloc; @@ -3912,7 +3845,6 @@ syms_of_pgtkfns (void) g_free (ver); } - defsubr (&Spgtk_set_resource); defsubr (&Sxw_display_color_p); /* this and next called directly by C code */ defsubr (&Sx_display_grayscale_p); @@ -3942,9 +3874,6 @@ syms_of_pgtkfns (void) defsubr (&Sx_display_list); defsubr (&Sx_gtk_debug); - defsubr (&Spgtk_hide_others); - defsubr (&Spgtk_hide_emacs); - defsubr (&Sx_show_tip); defsubr (&Sx_hide_tip); diff --git a/src/pgtkterm.c b/src/pgtkterm.c index cf8a7c4816d..c8c8bd0d85e 100644 --- a/src/pgtkterm.c +++ b/src/pgtkterm.c @@ -1,4 +1,4 @@ -/* Pure Gtk+-3 communication module. -*- coding: utf-8 -*- +/* Communication module for window systems using GTK. Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2022 Free Software Foundation, Inc. @@ -278,8 +278,9 @@ flip_cr_context (struct frame *f) if (cr != FRAME_CR_CONTEXT (f)) { cairo_destroy (cr); - FRAME_CR_ACTIVE_CONTEXT (f) = cairo_reference (FRAME_CR_CONTEXT (f)); + FRAME_CR_ACTIVE_CONTEXT (f) + = cairo_reference (FRAME_CR_CONTEXT (f)); } unblock_input (); } @@ -738,19 +739,19 @@ pgtk_wait_for_map_event (struct frame *f, bool multiple_times) { if (FLOATP (Vpgtk_wait_for_event_timeout)) { - guint msec = - (guint) (XFLOAT_DATA (Vpgtk_wait_for_event_timeout) * 1000); + guint msec + = (guint) (XFLOAT_DATA (Vpgtk_wait_for_event_timeout) * 1000); int found = 0; int timed_out = 0; - gulong id = - g_signal_connect (FRAME_WIDGET (f), "map-event", - G_CALLBACK - (pgtk_make_frame_visible_wait_for_map_event_cb), - &found); - guint src = - g_timeout_add (msec, - pgtk_make_frame_visible_wait_for_map_event_timeout, - &timed_out); + gulong id + = g_signal_connect (FRAME_WIDGET (f), "map-event", + G_CALLBACK + (pgtk_make_frame_visible_wait_for_map_event_cb), + &found); + guint src + = g_timeout_add (msec, + pgtk_make_frame_visible_wait_for_map_event_timeout, + &timed_out); if (!multiple_times) { @@ -764,6 +765,7 @@ pgtk_wait_for_map_event (struct frame *f, bool multiple_times) } g_signal_handler_disconnect (FRAME_WIDGET (f), id); + if (!timed_out) g_source_remove (src); } @@ -771,9 +773,6 @@ pgtk_wait_for_map_event (struct frame *f, bool multiple_times) void pgtk_make_frame_visible (struct frame *f) -/* -------------------------------------------------------------------------- - External: Show the window (X11 semantics) - -------------------------------------------------------------------------- */ { GtkWidget *win = FRAME_GTK_OUTER_WIDGET (f); @@ -790,17 +789,11 @@ pgtk_make_frame_visible (struct frame *f) void pgtk_make_frame_invisible (struct frame *f) -/* -------------------------------------------------------------------------- - External: Hide the window (X11 semantics) - -------------------------------------------------------------------------- */ { gtk_widget_hide (FRAME_WIDGET (f)); - /* Map events are emitted many times, and - * map_event() do SET_FRAME_VISIBLE(f, 1). - * I expect visible = 0, so process those map events here and - * SET_FRAME_VISIBLE(f, 0) after that. - */ + /* Handle any pending map event(s), then make the frame visible + manually, to avoid race conditions. */ pgtk_wait_for_map_event (f, true); SET_FRAME_VISIBLE (f, 0); @@ -938,7 +931,8 @@ pgtk_set_parent_frame (struct frame *f, Lisp_Object new_value, { GtkWidget *whbox_of_f = gtk_widget_get_parent (fixed); - /* Here, unhighlight can be called and may change border_color_css_provider. */ + /* Here, unhighlight can be called and may change + border_color_css_provider. */ gtk_container_remove (GTK_CONTAINER (whbox_of_f), fixed); if (FRAME_GTK_OUTER_WIDGET (f)) @@ -959,7 +953,8 @@ pgtk_set_parent_frame (struct frame *f, Lisp_Object new_value, { xg_create_frame_outer_widgets (f); pgtk_set_event_handler (f); - gtk_box_pack_start (GTK_BOX (f->output_data.pgtk->hbox_widget), fixed, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (f->output_data.pgtk->hbox_widget), + fixed, TRUE, TRUE, 0); f->output_data.pgtk->preferred_width = alloc.width; f->output_data.pgtk->preferred_height = alloc.height; xg_wm_set_size_hint (f, 0, 0); @@ -1216,7 +1211,6 @@ pgtk_set_glyph_string_clipping (struct glyph_string *s, cairo_t * cr) } } - /* Set SRC's clipping for output of glyph string DST. This is called when we are drawing DST's left_overhang or right_overhang only in the area of SRC. */ @@ -1235,7 +1229,6 @@ pgtk_set_glyph_string_clipping_exactly (struct glyph_string *src, cairo_clip (cr); } - /* RIF: Compute left and right overhang of glyph string S. */ @@ -1276,9 +1269,8 @@ pgtk_compute_glyph_string_overhangs (struct glyph_string *s) } } - -/* Fill rectangle X, Y, W, H with background color of glyph string S. */ - +/* Fill rectangle X, Y, W, H with background color of glyph string + S. */ static void pgtk_clear_glyph_string_rect (struct glyph_string *s, int x, int y, int w, int h) @@ -1288,7 +1280,6 @@ pgtk_clear_glyph_string_rect (struct glyph_string *s, int x, int y, || s->hl != DRAW_CURSOR)); } - static void fill_background_by_face (struct frame *f, struct face *face, int x, int y, int width, int height) @@ -1330,7 +1321,6 @@ fill_background (struct glyph_string *s, int x, int y, int width, int height) background even if it wouldn't be drawn normally. This is used when a string preceding S draws into the background of S, or S contains the first component of a composition. */ - static void pgtk_draw_glyph_string_background (struct glyph_string *s, bool force_p) { @@ -1383,7 +1373,6 @@ pgtk_draw_rectangle (struct frame *f, unsigned long color, int x, int y, } /* Draw the foreground of glyph string S. */ - static void pgtk_draw_glyph_string_foreground (struct glyph_string *s) { @@ -1430,7 +1419,6 @@ pgtk_draw_glyph_string_foreground (struct glyph_string *s) } /* Draw the foreground of composite glyph string S. */ - static void pgtk_draw_composite_glyph_string_foreground (struct glyph_string *s) { @@ -1521,7 +1509,6 @@ pgtk_draw_composite_glyph_string_foreground (struct glyph_string *s) /* Draw the foreground of glyph string S for glyphless characters. */ - static void pgtk_draw_glyphless_glyph_string_foreground (struct glyph_string *s) { @@ -1783,8 +1770,10 @@ pgtk_setup_relief_colors (struct glyph_string *s) color = s->xgcv.background; } - if (TRUE) + if (!di->relief_background_valid_p + || di->relief_background != color) { + di->relief_background_valid_p = true; di->relief_background = color; pgtk_setup_relief_color (s->f, &di->white_relief, 1.2, 0x8000, WHITE_PIX_DEFAULT (s->f)); @@ -1800,12 +1789,8 @@ pgtk_set_clip_rectangles (struct frame *f, cairo_t *cr, if (n > 0) { for (int i = 0; i < n; i++) - { - cairo_rectangle (cr, - rectangles[i].x, - rectangles[i].y, - rectangles[i].width, rectangles[i].height); - } + cairo_rectangle (cr, rectangles[i].x, rectangles[i].y, + rectangles[i].width, rectangles[i].height); cairo_clip (cr); } } @@ -1823,7 +1808,7 @@ pgtk_draw_relief_rect (struct frame *f, int left_x, int top_y, int right_x, int bottom_y, int hwidth, int vwidth, bool raised_p, bool top_p, bool bot_p, bool left_p, bool right_p, - XRectangle * clip_rect) + XRectangle *clip_rect) { unsigned long top_left_color, bottom_right_color; int corners = 0; @@ -2142,11 +2127,7 @@ pgtk_draw_glyph_string_bg_rect (struct glyph_string *s, int x, int y, int w, int h) { if (s->stippled_p) - { - /* Fill background with a stipple pattern. */ - - fill_background (s, x, y, w, h); - } + fill_background (s, x, y, w, h); else pgtk_clear_glyph_string_rect (s, x, y, w, h); } @@ -2227,9 +2208,9 @@ pgtk_draw_image_foreground (struct glyph_string *s) if (s->hl == DRAW_CURSOR) { int relief = eabs (s->img->relief); - pgtk_draw_rectangle (s->f, s->xgcv.foreground, x - relief, y - relief, - s->slice.width + relief*2 - 1, - s->slice.height + relief*2 - 1, false); + pgtk_draw_rectangle (s->f, s->xgcv.foreground, x - relief, + y - relief, s->slice.width + relief * 2 - 1, + s->slice.height + relief * 2 - 1, false); } } pgtk_end_cr_clip (s->f); @@ -2278,23 +2259,21 @@ pgtk_draw_image_glyph_string (struct glyph_string *s) || s->img->pixmap == 0 || s->width != s->background_width) { - { - int x = s->x; - int y = s->y; - int width = s->background_width; + int x = s->x; + int y = s->y; + int width = s->background_width; - if (s->first_glyph->left_box_line_p - && s->slice.x == 0) - { - x += box_line_hwidth; - width -= box_line_hwidth; - } + if (s->first_glyph->left_box_line_p + && s->slice.x == 0) + { + x += box_line_hwidth; + width -= box_line_hwidth; + } - if (s->slice.y == 0) - y += box_line_vwidth; + if (s->slice.y == 0) + y += box_line_vwidth; - pgtk_draw_glyph_string_bg_rect (s, x, y, width, height); - } + pgtk_draw_glyph_string_bg_rect (s, x, y, width, height); s->background_filled_p = true; } @@ -2376,15 +2355,10 @@ pgtk_draw_stretch_glyph_string (struct glyph_string *s) pgtk_set_clip_rectangles (s->f, cr, &r, 1); if (s->face->stipple) - { - /* Fill background with a stipple pattern. */ - fill_background (s, x, y, w, h); - } + fill_background (s, x, y, w, h); else - { - pgtk_fill_rectangle (s->f, color, x, y, w, h, - true); - } + pgtk_fill_rectangle (s->f, color, x, y, w, h, + true); pgtk_end_cr_clip (s->f); } @@ -2402,6 +2376,7 @@ pgtk_draw_stretch_glyph_string (struct glyph_string *s) background_width -= text_left_x - x; x = text_left_x; } + if (background_width > 0) pgtk_draw_glyph_string_bg_rect (s, x, s->y, background_width, s->height); } @@ -2465,9 +2440,9 @@ pgtk_draw_glyph_string (struct glyph_string *s) /* We must clip just this glyph. left_overhang part has already drawn when s->prev was drawn, and right_overhang part will be drawn later when s->next is drawn. */ - pgtk_set_glyph_string_clipping_exactly (s, s, cr); + pgtk_set_glyph_string_clipping_exactly (s, s, cr); else - pgtk_set_glyph_string_clipping (s, cr); + pgtk_set_glyph_string_clipping (s, cr); switch (s->first_glyph->type) { @@ -2614,10 +2589,8 @@ pgtk_draw_glyph_string (struct glyph_string *s) pgtk_fill_rectangle (s->f, s->xgcv.foreground, s->x, s->y + dy, s->width, h, false); else - { - pgtk_fill_rectangle (s->f, s->face->overline_color, s->x, - s->y + dy, s->width, h, false); - } + pgtk_fill_rectangle (s->f, s->face->overline_color, s->x, + s->y + dy, s->width, h, false); } /* Draw strike-through. */ @@ -2639,10 +2612,8 @@ pgtk_draw_glyph_string (struct glyph_string *s) pgtk_fill_rectangle (s->f, s->xgcv.foreground, s->x, glyph_y + dy, s->width, h, false); else - { - pgtk_fill_rectangle (s->f, s->face->strike_through_color, s->x, - glyph_y + dy, s->width, h, false); - } + pgtk_fill_rectangle (s->f, s->face->strike_through_color, s->x, + glyph_y + dy, s->width, h, false); } if (s->prev) @@ -2962,11 +2933,11 @@ pgtk_copy_bits (struct frame *f, cairo_rectangle_t *src_rect, cairo_t *cr; cairo_surface_t *surface; /* temporary surface */ - surface = - cairo_surface_create_similar (FRAME_CR_SURFACE (f), - CAIRO_CONTENT_COLOR_ALPHA, - (int) src_rect->width, - (int) src_rect->height); + surface + = cairo_surface_create_similar (FRAME_CR_SURFACE (f), + CAIRO_CONTENT_COLOR_ALPHA, + (int) src_rect->width, + (int) src_rect->height); cr = cairo_create (surface); cairo_set_source_surface (cr, FRAME_CR_SURFACE (f), -src_rect->x, @@ -3186,10 +3157,9 @@ pgtk_bitmap_icon (struct frame *f, Lisp_Object file) } if (FRAME_DISPLAY_INFO (f)->bitmaps[bitmap_id - 1].img != NULL) - { - gtk_window_set_icon (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), - FRAME_DISPLAY_INFO (f)->bitmaps[bitmap_id - 1].img); - } + gtk_window_set_icon (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), + FRAME_DISPLAY_INFO (f)->bitmaps[bitmap_id - 1].img); + f->output_data.pgtk->icon_bitmap = bitmap_id; return false; @@ -3453,10 +3423,10 @@ pgtk_define_fringe_bitmap (int which, unsigned short *bits, int h, int wd) { i = max_fringe_bmp; max_fringe_bmp = which + 20; - fringe_bmp = - (cairo_pattern_t **) xrealloc (fringe_bmp, - max_fringe_bmp * - sizeof (cairo_pattern_t *)); + fringe_bmp + = (cairo_pattern_t **) xrealloc (fringe_bmp, + max_fringe_bmp * + sizeof (cairo_pattern_t *)); while (i < max_fringe_bmp) fringe_bmp[i++] = 0; } @@ -3608,11 +3578,9 @@ pgtk_show_hourglass (struct frame *f) struct timespec ts = make_timespec (0, 50 * 1000 * 1000); if (hourglass_atimer != NULL) cancel_atimer (hourglass_atimer); - hourglass_atimer = - start_atimer (ATIMER_CONTINUOUS, ts, hourglass_cb, NULL); + hourglass_atimer + = start_atimer (ATIMER_CONTINUOUS, ts, hourglass_cb, NULL); } - - /* Cursor frequently stops animation. gtk's bug? */ } static void @@ -3706,83 +3674,85 @@ recover_from_visible_bell (struct atimer *timer) static void pgtk_flash (struct frame *f) { - { - if (!FRAME_CR_CONTEXT (f)) - return; + cairo_surface_t *surface_orig, *surface; + cairo_t *cr; + int width, height, flash_height, flash_left, flash_right; + struct timespec delay; - block_input (); + if (!FRAME_CR_CONTEXT (f)) + return; - cairo_surface_t *surface_orig = FRAME_CR_SURFACE (f); + block_input (); - int width = FRAME_CR_SURFACE_DESIRED_WIDTH (f); - int height = FRAME_CR_SURFACE_DESIRED_HEIGHT (f); - cairo_surface_t *surface - = cairo_surface_create_similar (surface_orig, CAIRO_CONTENT_COLOR_ALPHA, - width, height); + surface_orig = FRAME_CR_SURFACE (f); - cairo_t *cr = cairo_create (surface); - cairo_set_source_surface (cr, surface_orig, 0, 0); - cairo_rectangle (cr, 0, 0, width, height); - cairo_clip (cr); - cairo_paint (cr); + width = FRAME_CR_SURFACE_DESIRED_WIDTH (f); + height = FRAME_CR_SURFACE_DESIRED_HEIGHT (f); + surface = cairo_surface_create_similar (surface_orig, + CAIRO_CONTENT_COLOR_ALPHA, + width, height); - cairo_set_source_rgb (cr, 1, 1, 1); - cairo_set_operator (cr, CAIRO_OPERATOR_DIFFERENCE); + cr = cairo_create (surface); + cairo_set_source_surface (cr, surface_orig, 0, 0); + cairo_rectangle (cr, 0, 0, width, height); + cairo_clip (cr); + cairo_paint (cr); + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_set_operator (cr, CAIRO_OPERATOR_DIFFERENCE); + + /* Get the height not including a menu bar widget. */ + height = FRAME_PIXEL_HEIGHT (f); + /* Height of each line to flash. */ + flash_height = FRAME_LINE_HEIGHT (f); + /* These will be the left and right margins of the rectangles. */ + flash_left = FRAME_INTERNAL_BORDER_WIDTH (f); + flash_right = (FRAME_PIXEL_WIDTH (f) + - FRAME_INTERNAL_BORDER_WIDTH (f)); + width = flash_right - flash_left; + + /* If window is tall, flash top and bottom line. */ + if (height > 3 * FRAME_LINE_HEIGHT (f)) + { + cairo_rectangle (cr, + flash_left, + (FRAME_INTERNAL_BORDER_WIDTH (f) + + FRAME_TOP_MARGIN_HEIGHT (f)), + width, flash_height); + cairo_fill (cr); + + cairo_rectangle (cr, + flash_left, + (height - flash_height + - FRAME_INTERNAL_BORDER_WIDTH (f)), + width, flash_height); + cairo_fill (cr); + } + else { - /* Get the height not including a menu bar widget. */ - int height = FRAME_PIXEL_HEIGHT (f); - /* Height of each line to flash. */ - int flash_height = FRAME_LINE_HEIGHT (f); - /* These will be the left and right margins of the rectangles. */ - int flash_left = FRAME_INTERNAL_BORDER_WIDTH (f); - int flash_right = - FRAME_PIXEL_WIDTH (f) - FRAME_INTERNAL_BORDER_WIDTH (f); - int width = flash_right - flash_left; - - /* If window is tall, flash top and bottom line. */ - if (height > 3 * FRAME_LINE_HEIGHT (f)) - { - cairo_rectangle (cr, - flash_left, - (FRAME_INTERNAL_BORDER_WIDTH (f) - + FRAME_TOP_MARGIN_HEIGHT (f)), - width, flash_height); - cairo_fill (cr); + /* If it is short, flash it all. */ + cairo_rectangle (cr, + flash_left, FRAME_INTERNAL_BORDER_WIDTH (f), + width, height - 2 * FRAME_INTERNAL_BORDER_WIDTH (f)); + cairo_fill (cr); + } - cairo_rectangle (cr, - flash_left, - (height - flash_height - - FRAME_INTERNAL_BORDER_WIDTH (f)), - width, flash_height); - cairo_fill (cr); - } - else - { - /* If it is short, flash it all. */ - cairo_rectangle (cr, - flash_left, FRAME_INTERNAL_BORDER_WIDTH (f), - width, height - 2 * FRAME_INTERNAL_BORDER_WIDTH (f)); - cairo_fill (cr); - } + FRAME_X_OUTPUT (f)->cr_surface_visible_bell = surface; - FRAME_X_OUTPUT (f)->cr_surface_visible_bell = surface; - { - struct timespec delay = make_timespec (0, 50 * 1000 * 1000); - if (FRAME_X_OUTPUT (f)->atimer_visible_bell != NULL) - { - cancel_atimer (FRAME_X_OUTPUT (f)->atimer_visible_bell); - FRAME_X_OUTPUT (f)->atimer_visible_bell = NULL; - } - FRAME_X_OUTPUT (f)->atimer_visible_bell = - start_atimer (ATIMER_RELATIVE, delay, recover_from_visible_bell, f); - } + delay = make_timespec (0, 50 * 1000 * 1000); + if (FRAME_X_OUTPUT (f)->atimer_visible_bell != NULL) + { + cancel_atimer (FRAME_X_OUTPUT (f)->atimer_visible_bell); + FRAME_X_OUTPUT (f)->atimer_visible_bell = NULL; } - cairo_destroy (cr); - unblock_input (); - } + FRAME_X_OUTPUT (f)->atimer_visible_bell + = start_atimer (ATIMER_RELATIVE, delay, recover_from_visible_bell, f); + + + cairo_destroy (cr); + unblock_input (); } /* Make audible bell. */ @@ -3863,8 +3833,9 @@ pgtk_send_scroll_bar_event (Lisp_Object window, enum scroll_bar_part part, EVENT_INIT (inev.ie); - inev.ie.kind = - horizontal ? HORIZONTAL_SCROLL_BAR_CLICK_EVENT : SCROLL_BAR_CLICK_EVENT; + inev.ie.kind = (horizontal + ? HORIZONTAL_SCROLL_BAR_CLICK_EVENT + : SCROLL_BAR_CLICK_EVENT); inev.ie.frame_or_window = window; inev.ie.arg = Qnil; inev.ie.timestamp = 0; @@ -4013,8 +3984,6 @@ pgtk_set_toolkit_horizontal_scroll_bar_thumb (struct scroll_bar *bar, xg_set_toolkit_horizontal_scroll_bar_thumb (bar, portion, position, whole); } - - /* Create a scroll bar and return the scroll bar vector for it. W is the Emacs window on which to create the scroll bar. TOP, LEFT, WIDTH and HEIGHT are the pixel coordinates and dimensions of the @@ -4166,7 +4135,6 @@ pgtk_set_vertical_scroll_bar (struct window *w, int portion, int whole, wset_vertical_scroll_bar (w, barobj); } - static void pgtk_set_horizontal_scroll_bar (struct window *w, int portion, int whole, int position) @@ -4281,7 +4249,6 @@ pgtk_condemn_scroll_bars (struct frame *frame) } } - /* Un-mark WINDOW's scroll bar for deletion in this judgment cycle. Note that WINDOW isn't necessarily condemned at all. */ @@ -4505,7 +4472,7 @@ pgtk_query_frame_background_color (struct frame *f, Emacs_Color * bgcolor) } static void -pgtk_free_pixmap (struct frame *_f, Emacs_Pixmap pixmap) +pgtk_free_pixmap (struct frame *f, Emacs_Pixmap pixmap) { if (pixmap) { @@ -4529,13 +4496,14 @@ pgtk_focus_frame (struct frame *f, bool noactivate) } } - static void -set_opacity_recursively (GtkWidget * w, gpointer data) +set_opacity_recursively (GtkWidget *w, gpointer data) { gtk_widget_set_opacity (w, *(double *) data); + if (GTK_IS_CONTAINER (w)) - gtk_container_foreach (GTK_CONTAINER (w), set_opacity_recursively, data); + gtk_container_foreach (GTK_CONTAINER (w), + set_opacity_recursively, data); } static void @@ -4571,22 +4539,13 @@ pgtk_set_frame_alpha (struct frame *f) static void frame_highlight (struct frame *f) { - /* We used to only do this if Vx_no_window_manager was non-nil, but - the ICCCM (section 4.1.6) says that the window's border pixmap - and border pixel are window attributes which are "private to the - client", so we can always change it to whatever we want. */ block_input (); - /* I recently started to get errors in this XSetWindowBorder, depending on - the window-manager in use, tho something more is at play since I've been - using that same window-manager binary for ever. Let's not crash just - because of this (bug#9310). */ - GtkWidget *w = FRAME_WIDGET (f); - char *css = - g_strdup_printf ("decoration { border: solid %dpx #%06x; }", - f->border_width, - (unsigned int) FRAME_X_OUTPUT (f)->border_pixel & 0x00ffffff); + char *css = g_strdup_printf ("decoration { border: solid %dpx #%06x; }", + f->border_width, + ((unsigned int) FRAME_X_OUTPUT (f)->border_pixel + & 0x00ffffff)); GtkStyleContext *ctxt = gtk_widget_get_style_context (w); GtkCssProvider *css_provider = gtk_css_provider_new (); @@ -4611,27 +4570,26 @@ frame_highlight (struct frame *f) static void frame_unhighlight (struct frame *f) { - /* We used to only do this if Vx_no_window_manager was non-nil, but - the ICCCM (section 4.1.6) says that the window's border pixmap - and border pixel are window attributes which are "private to the - client", so we can always change it to whatever we want. */ + GtkWidget *w; + char *css; + GtkStyleContext *ctxt; + GtkCssProvider *css_provider, *old; + block_input (); - /* Same as above for XSetWindowBorder (bug#9310). */ - GtkWidget *w = FRAME_WIDGET (f); + w = FRAME_WIDGET (f); - char *css = - g_strdup_printf ("decoration { border: dotted %dpx #ffffff; }", - f->border_width); + css = g_strdup_printf ("decoration { border: dotted %dpx #ffffff; }", + f->border_width); - GtkStyleContext *ctxt = gtk_widget_get_style_context (w); - GtkCssProvider *css_provider = gtk_css_provider_new (); + ctxt = gtk_widget_get_style_context (w); + css_provider = gtk_css_provider_new (); gtk_css_provider_load_from_data (css_provider, css, -1, NULL); gtk_style_context_add_provider (ctxt, GTK_STYLE_PROVIDER (css_provider), GTK_STYLE_PROVIDER_PRIORITY_USER); g_free (css); - GtkCssProvider *old = FRAME_X_OUTPUT (f)->border_color_css_provider; + old = FRAME_X_OUTPUT (f)->border_color_css_provider; FRAME_X_OUTPUT (f)->border_color_css_provider = css_provider; if (old != NULL) { @@ -4685,10 +4643,8 @@ pgtk_frame_rehighlight_hook (struct frame *frame) pgtk_frame_rehighlight (FRAME_DISPLAY_INFO (frame)); } - /* Set whether or not the mouse pointer should be visible on frame F. */ - static void pgtk_toggle_invisible_pointer (struct frame *f, bool invisible) { @@ -4700,6 +4656,10 @@ pgtk_toggle_invisible_pointer (struct frame *f, bool invisible) gdk_window_set_cursor (gtk_widget_get_window (FRAME_GTK_WIDGET (f)), cursor); f->pointer_invisible = invisible; + + /* This is needed to make the pointer visible upon receiving a + motion notify event. */ + gdk_display_flush (FRAME_X_DISPLAY (f)); } /* The focus has changed. Update the frames as necessary to reflect @@ -4745,9 +4705,6 @@ pgtk_buffer_flipping_unblocked_hook (struct frame *f) static struct terminal * pgtk_create_terminal (struct pgtk_display_info *dpyinfo) -/* -------------------------------------------------------------------------- - Set up use of Gtk before we make the first connection. - -------------------------------------------------------------------------- */ { struct terminal *terminal; @@ -4772,7 +4729,7 @@ pgtk_create_terminal (struct pgtk_display_info *dpyinfo) terminal->menu_show_hook = pgtk_menu_show; terminal->activate_menubar_hook = pgtk_activate_menubar; terminal->popup_dialog_hook = pgtk_popup_dialog; - terminal->change_tab_bar_height_hook = x_change_tab_bar_height; + terminal->change_tab_bar_height_hook = pgtk_change_tab_bar_height; terminal->set_vertical_scroll_bar_hook = pgtk_set_vertical_scroll_bar; terminal->set_horizontal_scroll_bar_hook = pgtk_set_horizontal_scroll_bar; terminal->condemn_scroll_bars_hook = pgtk_condemn_scroll_bars; @@ -4793,7 +4750,7 @@ pgtk_create_terminal (struct pgtk_display_info *dpyinfo) = pgtk_set_scroll_bar_default_height; terminal->set_window_size_hook = pgtk_set_window_size; terminal->query_colors = pgtk_query_colors; - terminal->get_focus_frame = x_get_focus_frame; + terminal->get_focus_frame = pgtk_get_focus_frame; terminal->focus_frame_hook = pgtk_focus_frame; terminal->set_frame_offset_hook = pgtk_set_offset; terminal->free_pixmap = pgtk_free_pixmap; @@ -4812,7 +4769,7 @@ struct pgtk_window_is_of_frame_recursive_t }; static void -pgtk_window_is_of_frame_recursive (GtkWidget * widget, gpointer data) +pgtk_window_is_of_frame_recursive (GtkWidget *widget, gpointer data) { struct pgtk_window_is_of_frame_recursive_t *datap = data; @@ -4828,14 +4785,13 @@ pgtk_window_is_of_frame_recursive (GtkWidget * widget, gpointer data) return; } - if (GTK_IS_CONTAINER (widget)) { + if (GTK_IS_CONTAINER (widget)) gtk_container_foreach (GTK_CONTAINER (widget), pgtk_window_is_of_frame_recursive, datap); - } } static bool -pgtk_window_is_of_frame (struct frame *f, GdkWindow * window) +pgtk_window_is_of_frame (struct frame *f, GdkWindow *window) { struct pgtk_window_is_of_frame_recursive_t data; data.window = window; @@ -4848,7 +4804,7 @@ pgtk_window_is_of_frame (struct frame *f, GdkWindow * window) /* Like x_window_to_frame but also compares the window with the widget's windows. */ static struct frame * -pgtk_any_window_to_frame (GdkWindow * window) +pgtk_any_window_to_frame (GdkWindow *window) { Lisp_Object tail, frame; struct frame *f, *found = NULL; @@ -4973,7 +4929,7 @@ pgtk_clear_under_internal_border (struct frame *f) } static gboolean -pgtk_handle_draw (GtkWidget * widget, cairo_t * cr, gpointer * data) +pgtk_handle_draw (GtkWidget *widget, cairo_t *cr, gpointer *data) { struct frame *f; @@ -4999,19 +4955,11 @@ pgtk_handle_draw (GtkWidget * widget, cairo_t * cr, gpointer * data) } static void -size_allocate (GtkWidget * widget, GtkAllocation * alloc, +size_allocate (GtkWidget *widget, GtkAllocation *alloc, gpointer user_data) { struct frame *f = pgtk_any_window_to_frame (gtk_widget_get_window (widget)); - /* Between a frame is created and not shown, size is allocated and - * this handler is called. When that, since the widget's window is - * NULL, we can't get f, pgtk_cr_update_surface_desired_size is not - * called, and its size is 0x0. That causes empty frame. - * - * Fortunately since we know f in pgtk_set_event_handler, we can get - * it through user_data; - */ if (!f) f = user_data; @@ -5118,7 +5066,7 @@ pgtk_emacs_to_gtk_modifiers (struct pgtk_display_info *dpyinfo, int state) void -pgtk_enqueue_string (struct frame *f, gchar * str) +pgtk_enqueue_string (struct frame *f, gchar *str) { gunichar *ustr, *uptr; @@ -5210,9 +5158,8 @@ key_press_event (GtkWidget *widget, GdkEvent *event, gpointer *user_data) return TRUE; } - state |= - pgtk_emacs_to_gtk_modifiers (FRAME_DISPLAY_INFO (f), - extra_keyboard_modifiers); + state |= pgtk_emacs_to_gtk_modifiers (FRAME_DISPLAY_INFO (f), + extra_keyboard_modifiers); modifiers = state; /* This will have to go some day... */ @@ -5339,9 +5286,6 @@ key_press_event (GtkWidget *widget, GdkEvent *event, gpointer *user_data) || (orig_keysym & (1 << 28)) || (keysym != GDK_KEY_VoidSymbol && nbytes == 0)) && !(event->key.is_modifier - /* Gtk's modifier keys are different from Xlib's ones. - * I need to exclude them. - */ || IsModifierKey (orig_keysym) /* The symbols from GDK_KEY_ISO_Lock to GDK_KEY_ISO_Last_Group_Lock @@ -5795,17 +5739,14 @@ note_mouse_movement (struct frame *frame, } static gboolean -motion_notify_event (GtkWidget * widget, GdkEvent * event, - gpointer * user_data) +motion_notify_event (GtkWidget *widget, GdkEvent *event, + gpointer *user_data) { union buffered_input_event inev; struct frame *f, *frame; struct pgtk_display_info *dpyinfo; Mouse_HLInfo *hlinfo; - /* This is needed to make pointer visible when motion_notify event */ - pending_signals = true; - EVENT_INIT (inev.ie); inev.ie.kind = NO_EVENT; inev.ie.arg = Qnil; @@ -5827,6 +5768,7 @@ motion_notify_event (GtkWidget * widget, GdkEvent * event, if (f && xg_event_is_for_scrollbar (f, event, false)) f = 0; + if (f) { /* Maybe generate a SELECT_WINDOW_EVENT for @@ -5871,11 +5813,9 @@ motion_notify_event (GtkWidget * widget, GdkEvent * event, help_echo_string = previous_help_echo_string; } else - { - /* If we move outside the frame, then we're - certainly no longer on any text in the frame. */ - clear_mouse_face (hlinfo); - } + /* If we move outside the frame, then we're + certainly no longer on any text in the frame. */ + clear_mouse_face (hlinfo); /* If the contents of the global variable help_echo_string has changed, generate a HELP_EVENT. */ diff --git a/src/pgtkterm.h b/src/pgtkterm.h index 16fd688288e..20c161e63b9 100644 --- a/src/pgtkterm.h +++ b/src/pgtkterm.h @@ -392,6 +392,10 @@ struct pgtk_output They are changed only when a different background is involved. */ unsigned long relief_background; + /* Whether or not a relief background has been computed for this + frame. */ + bool_bf relief_background_valid_p : 1; + /* Keep track of focus. May be EXPLICIT if we received a FocusIn for this frame, or IMPLICIT if we received an EnterNotify. FocusOut and LeaveNotify clears EXPLICIT/IMPLICIT. */ @@ -566,11 +570,11 @@ extern void pgtk_iconify_frame (struct frame *f); extern void pgtk_focus_frame (struct frame *f, bool noactivate); extern void pgtk_set_scroll_bar_default_width (struct frame *f); extern void pgtk_set_scroll_bar_default_height (struct frame *f); -extern Lisp_Object x_get_focus_frame (struct frame *frame); +extern Lisp_Object pgtk_get_focus_frame (struct frame *frame); extern void pgtk_frame_rehighlight (struct pgtk_display_info *dpyinfo); -extern void x_change_tab_bar_height (struct frame *, int); +extern void pgtk_change_tab_bar_height (struct frame *, int); extern struct pgtk_display_info *check_pgtk_display_info (Lisp_Object object);