X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/699c782b7668c44d0fa4446331b0590a6d5dac82..3e0b94e7ff1fc69b077322d672ef5d0b668541c3:/src/xsettings.c?ds=sidebyside diff --git a/src/xsettings.c b/src/xsettings.c index 066c6e795e..8fe82fec74 100644 --- a/src/xsettings.c +++ b/src/xsettings.c @@ -1,6 +1,6 @@ /* Functions for handling font and other changes dynamically. -Copyright (C) 2009-2012 Free Software Foundation, Inc. +Copyright (C) 2009-2013 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -21,7 +21,6 @@ along with GNU Emacs. If not, see . */ #include #include -#include #include #include "lisp.h" #include "xterm.h" @@ -30,7 +29,6 @@ along with GNU Emacs. If not, see . */ #include "keyboard.h" #include "blockinput.h" #include "termhooks.h" -#include "termopts.h" #include @@ -159,8 +157,9 @@ store_tool_bar_style_changed (const char *newstyle, XCAR (dpyinfo->name_list_element)); } - +#ifdef HAVE_XFT #define XSETTINGS_FONT_NAME "Gtk/FontName" +#endif #define XSETTINGS_TOOL_BAR_STYLE "Gtk/ToolbarStyle" enum { @@ -171,7 +170,7 @@ enum { SEEN_HINTSTYLE = 0x10, SEEN_DPI = 0x20, SEEN_FONT = 0x40, - SEEN_TB_STYLE = 0x80, + SEEN_TB_STYLE = 0x80 }; struct xsettings { @@ -337,9 +336,6 @@ get_prop_window (struct x_display_info *dpyinfo) XUngrabServer (dpy); } -#define SWAP32(nr) (((nr) << 24) | (((nr) << 8) & 0xff0000) \ - | (((nr) >> 8) & 0xff00) | ((nr) >> 24)) -#define SWAP16(nr) (((nr) << 8) | ((nr) >> 8)) #define PAD(nr) (((nr) + 3) & ~3) /* Parse xsettings and extract those that deal with Xft. @@ -409,7 +405,7 @@ parse_settings (unsigned char *prop, if (bytes < 12) return BadLength; memcpy (&n_settings, prop+8, 4); - if (my_bo != that_bo) n_settings = SWAP32 (n_settings); + if (my_bo != that_bo) n_settings = swap32 (n_settings); bytes_parsed = 12; memset (settings, 0, sizeof (*settings)); @@ -431,7 +427,7 @@ parse_settings (unsigned char *prop, memcpy (&nlen, prop+bytes_parsed, 2); bytes_parsed += 2; - if (my_bo != that_bo) nlen = SWAP16 (nlen); + if (my_bo != that_bo) nlen = swap16 (nlen); if (bytes_parsed+nlen > bytes) return BadLength; to_cpy = nlen > 127 ? 127 : nlen; memcpy (name, prop+bytes_parsed, to_cpy); @@ -458,7 +454,7 @@ parse_settings (unsigned char *prop, if (want_this) { memcpy (&ival, prop+bytes_parsed, 4); - if (my_bo != that_bo) ival = SWAP32 (ival); + if (my_bo != that_bo) ival = swap32 (ival); } bytes_parsed += 4; break; @@ -467,7 +463,7 @@ parse_settings (unsigned char *prop, if (bytes_parsed+4 > bytes) return BadLength; memcpy (&vlen, prop+bytes_parsed, 4); bytes_parsed += 4; - if (my_bo != that_bo) vlen = SWAP32 (vlen); + if (my_bo != that_bo) vlen = swap32 (vlen); if (want_this) { to_cpy = vlen > 127 ? 127 : vlen; @@ -674,26 +670,21 @@ apply_xft_settings (struct x_display_info *dpyinfo, if ((settings->seen & SEEN_DPI) != 0 && oldsettings.dpi != settings->dpi && settings->dpi > 0) { - Lisp_Object frame, tail; - FcPatternDel (pat, FC_DPI); FcPatternAddDouble (pat, FC_DPI, settings->dpi); ++changed; oldsettings.dpi = settings->dpi; - /* Change the DPI on this display and all frames on the display. */ + /* Changing the DPI on this display affects all frames on it. + Check FRAME_RES_X and FRAME_RES_Y in frame.h to see how. */ dpyinfo->resy = dpyinfo->resx = settings->dpi; - FOR_EACH_FRAME (tail, frame) - if (FRAME_X_P (XFRAME (frame)) - && FRAME_X_DISPLAY_INFO (XFRAME (frame)) == dpyinfo) - XFRAME (frame)->resy = XFRAME (frame)->resx = settings->dpi; } if (changed) { static char const format[] = "Antialias: %d, Hinting: %d, RGBA: %d, LCDFilter: %d, " - "Hintstyle: %d, DPI: %lf"; + "Hintstyle: %d, DPI: %f"; enum { d_formats = 5, @@ -702,7 +693,7 @@ apply_xft_settings (struct x_display_info *dpyinfo, max_f_integer_digits = DBL_MAX_10_EXP + 1, f_precision = 6, lf_growth = (sizeof "-." + max_f_integer_digits + f_precision - - sizeof "%lf") + - sizeof "%f") }; char buf[sizeof format + d_formats * d_growth + lf_formats * lf_growth]; @@ -710,10 +701,12 @@ apply_xft_settings (struct x_display_info *dpyinfo, if (send_event_p) store_config_changed_event (Qfont_render, XCAR (dpyinfo->name_list_element)); - sprintf (buf, format, oldsettings.aa, oldsettings.hinting, - oldsettings.rgba, oldsettings.lcdfilter, - oldsettings.hintstyle, oldsettings.dpi); - Vxft_settings = build_string (buf); + Vxft_settings + = make_formatted_string (buf, format, + oldsettings.aa, oldsettings.hinting, + oldsettings.rgba, oldsettings.lcdfilter, + oldsettings.hintstyle, oldsettings.dpi); + } else FcPatternDestroy (pat); @@ -758,10 +751,9 @@ read_and_apply_settings (struct x_display_info *dpyinfo, int send_event_p) /* Check if EVENT for the display in DPYINFO is XSettings related. */ void -xft_settings_event (struct x_display_info *dpyinfo, XEvent *event) +xft_settings_event (struct x_display_info *dpyinfo, const XEvent *event) { - int check_window_p = 0; - int apply_settings = 0; + bool check_window_p = 0, apply_settings_p = 0; switch (event->type) { @@ -781,7 +773,7 @@ xft_settings_event (struct x_display_info *dpyinfo, XEvent *event) if (event->xproperty.window == dpyinfo->xsettings_window && event->xproperty.state == PropertyNewValue && event->xproperty.atom == dpyinfo->Xatom_xsettings_prop) - apply_settings = 1; + apply_settings_p = 1; break; } @@ -791,10 +783,10 @@ xft_settings_event (struct x_display_info *dpyinfo, XEvent *event) dpyinfo->xsettings_window = None; get_prop_window (dpyinfo); if (dpyinfo->xsettings_window != None) - apply_settings = 1; + apply_settings_p = 1; } - if (apply_settings) + if (apply_settings_p) read_and_apply_settings (dpyinfo, True); } @@ -808,7 +800,7 @@ init_gsettings (void) const gchar *const *schemas; int schema_found = 0; -#ifdef HAVE_G_TYPE_INIT +#if ! GLIB_CHECK_VERSION (2, 36, 0) g_type_init (); #endif @@ -865,7 +857,7 @@ init_gconf (void) #if defined (HAVE_GCONF) char *s; -#ifdef HAVE_G_TYPE_INIT +#if ! GLIB_CHECK_VERSION (2, 36, 0) g_type_init (); #endif @@ -927,7 +919,7 @@ init_xsettings (struct x_display_info *dpyinfo) { Display *dpy = dpyinfo->display; - BLOCK_INPUT; + block_input (); /* Select events so we can detect client messages sent when selection owner changes. */ @@ -937,7 +929,7 @@ init_xsettings (struct x_display_info *dpyinfo) if (dpyinfo->xsettings_window != None) read_and_apply_settings (dpyinfo, False); - UNBLOCK_INPUT; + unblock_input (); } void @@ -1024,7 +1016,7 @@ syms_of_xsettings (void) defsubr (&Sfont_get_system_normal_font); DEFVAR_BOOL ("font-use-system-font", use_system_font, - doc: /* *Non-nil means to apply the system defined font dynamically. + doc: /* Non-nil means to apply the system defined font dynamically. When this is non-nil and the system defined fixed width font changes, we update frames dynamically. If this variable is nil, Emacs ignores system font changes. */); @@ -1032,7 +1024,7 @@ If this variable is nil, Emacs ignores system font changes. */); DEFVAR_LISP ("xft-settings", Vxft_settings, doc: /* Font settings applied to Xft. */); - Vxft_settings = make_string ("", 0); + Vxft_settings = empty_unibyte_string; #ifdef HAVE_XFT Fprovide (intern_c_string ("font-render-setting"), Qnil);