From baf86716d1751e6c3e07fd95dd91aae64172df78 Mon Sep 17 00:00:00 2001 From: daa Date: Sun, 12 Mar 2017 22:50:03 +0300 Subject: [PATCH] Use monospace font from gnome settings by default --- src/ui.rs | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index 020ea06..a736945 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -13,6 +13,7 @@ use gtk_sys; use gdk::{ModifierType, Event, EventKey, EventConfigure, EventButton, EventMotion, EventType}; use gdk_sys; use glib; +use gio; use neovim_lib::{Neovim, NeovimApi, Value, Integer}; use ui_model::{UiModel, Cell, Attrs, Color, COLOR_BLACK, COLOR_WHITE, COLOR_RED}; @@ -20,9 +21,6 @@ use nvim::{RedrawEvents, GuiApi, ErrorReport}; use input::{convert_key, keyval_to_input_string}; -#[cfg(target_os = "linux")] -const FONT_NAME: &'static str = "Droid Sans Mono for Powerline 12"; -#[cfg(target_os = "windows")] const FONT_NAME: &'static str = "DejaVu Sans Mono 12"; thread_local!(pub static UI: RefCell = { @@ -41,6 +39,13 @@ enum NvimMode { Other, } +#[derive(PartialEq)] +enum FontSource { + Rpc, + Gnome, + Default, +} + pub struct Ui { pub model: UiModel, nvim: Option, @@ -58,6 +63,8 @@ pub struct Ui { mouse_enabled: bool, mouse_pressed: bool, font_desc: FontDescription, + font_source: FontSource, + gnome_interface_settings: gio::Settings, } impl Ui { @@ -79,6 +86,8 @@ impl Ui { mouse_enabled: false, mouse_pressed: false, font_desc: FontDescription::from_string(FONT_NAME), + gnome_interface_settings: gio::Settings::new("org.gnome.desktop.interface"), + font_source: FontSource::Default, } } @@ -95,6 +104,9 @@ impl Ui { } pub fn init(&mut self, app: >k::Application) { + self.gnome_interface_settings.connect_changed(|_, _| monospace_font_changed()); + self.update_font(); + self.header_bar.set_show_close_button(true); let save_image = Image::new_from_icon_name("document-save", @@ -161,6 +173,30 @@ impl Ui { (bg, fg) } } + + fn update_font(&mut self) { + // rpc is priority for font + if self.font_source == FontSource::Rpc { + return; + } + + if let Some(ref font_name) = self.gnome_interface_settings.get_string("monospace-font-name") { + self.set_font_desc(font_name); + self.font_source = FontSource::Gnome; + } + } +} + +fn monospace_font_changed() { + UI.with(|ui_cell| { + let mut ui = ui_cell.borrow_mut(); + + // rpc is priority for font + if ui.font_source != FontSource::Rpc { + ui.update_font(); + ui.on_redraw(); + } + }); } fn gtk_button_press(_: &DrawingArea, ev: &EventButton) -> Inhibit { @@ -506,6 +542,7 @@ fn request_width(ui: &Ui) { impl GuiApi for Ui { fn set_font(&mut self, font_desc: &str) { self.set_font_desc(font_desc); + self.font_source = FontSource::Rpc; } }