summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-08-07 20:01:40 +0200
committerBram Moolenaar <Bram@vim.org>2018-08-07 20:01:40 +0200
commit7ebf4e1c346783b25624258e5bcc599130fd18f9 (patch)
tree628a9093edba8e80446676aa0d82cac8db41365d /src
parent8d8a65e389cef318ae661ff0fe7b1b00fd7cb25f (diff)
patch 8.1.0249: GTK: when screen DPI changes Vim does not handle itv8.1.0249
Problem: GTK: when screen DPI changes Vim does not handle it. Solution: Handle the gtk-xft-dpi signal. (Roel van de Kraats, closes #2357)
Diffstat (limited to 'src')
-rw-r--r--src/gui_gtk_x11.c32
-rw-r--r--src/version.c2
2 files changed, 34 insertions, 0 deletions
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index 9c7e8d5648..7541d79072 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -788,6 +788,29 @@ property_event(GtkWidget *widget,
}
#endif /* defined(FEAT_CLIENTSERVER) */
+/*
+ * Handle changes to the "Xft/DPI" setting
+ */
+ static void
+gtk_settings_xft_dpi_changed_cb(GtkSettings *gtk_settings UNUSED,
+ GParamSpec *pspec UNUSED,
+ gpointer data UNUSED)
+{
+ // Create a new PangoContext for this screen, and initialize it
+ // with the current font if necessary.
+ if (gui.text_context != NULL)
+ g_object_unref(gui.text_context);
+
+ gui.text_context = gtk_widget_create_pango_context(gui.mainwin);
+ pango_context_set_base_dir(gui.text_context, PANGO_DIRECTION_LTR);
+
+ if (gui.norm_font != NULL)
+ {
+ // force default font
+ gui_mch_init_font(*p_guifont == NUL ? NULL : p_guifont, FALSE);
+ gui_set_shellsize(TRUE, FALSE, RESIZE_BOTH);
+ }
+}
#if GTK_CHECK_VERSION(3,0,0)
typedef gboolean timeout_cb_type;
@@ -4383,6 +4406,15 @@ gui_mch_init(void)
/* Pretend we don't have input focus, we will get an event if we do. */
gui.in_focus = FALSE;
+ // Handle changes to the "Xft/DPI" setting.
+ {
+ GtkSettings *gtk_settings =
+ gtk_settings_get_for_screen(gdk_screen_get_default());
+
+ g_signal_connect(gtk_settings, "notify::gtk-xft-dpi",
+ G_CALLBACK(gtk_settings_xft_dpi_changed_cb), NULL);
+ }
+
return OK;
}
diff --git a/src/version.c b/src/version.c
index cc1648ff84..bb730f4e3f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -795,6 +795,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 249,
+/**/
248,
/**/
247,