From 0f4234a622d01b79fac4afd94e6561a15c68e1e8 Mon Sep 17 00:00:00 2001 From: daa84 Date: Tue, 26 Sep 2017 16:59:28 +0300 Subject: [PATCH] Limit tab title len (fix #16) --- src/tabline.rs | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/src/tabline.rs b/src/tabline.rs index 5397633..327bcc8 100644 --- a/src/tabline.rs +++ b/src/tabline.rs @@ -7,6 +7,8 @@ use gtk::prelude::*; use glib::signal; +use pango; + use neovim_lib::NeovimApi; use neovim_lib::neovim_api::Tabpage; @@ -66,10 +68,12 @@ impl Tabline { } } - fn update_state(&self, - nvim: &Rc>, - selected: &Tabpage, - tabs: &[(Tabpage, Option)]) { + fn update_state( + &self, + nvim: &Rc>, + selected: &Tabpage, + tabs: &[(Tabpage, Option)], + ) { let mut state = self.state.borrow_mut(); if state.nvim.is_none() { @@ -81,10 +85,12 @@ impl Tabline { state.data = tabs.iter().map(|item| item.0.clone()).collect(); } - pub fn update_tabs(&self, - nvim: &Rc>, - selected: &Tabpage, - tabs: &[(Tabpage, Option)]) { + pub fn update_tabs( + &self, + nvim: &Rc>, + selected: &Tabpage, + tabs: &[(Tabpage, Option)], + ) { if tabs.len() <= 1 { self.tabs.hide(); return; @@ -102,7 +108,10 @@ impl Tabline { for _ in count..tabs.len() { let empty = gtk::Box::new(gtk::Orientation::Vertical, 0); empty.show_all(); - self.tabs.append_page(&empty, Some(>k::Label::new(None))); + let title = gtk::Label::new(None); + title.set_ellipsize(pango::EllipsizeMode::Middle); + title.set_width_chars(25); + self.tabs.append_page(&empty, Some(&title)); } } else if count > tabs.len() { for _ in tabs.len()..count { @@ -112,8 +121,12 @@ impl Tabline { for (idx, tab) in tabs.iter().enumerate() { let tab_child = self.tabs.get_nth_page(Some(idx as u32)); - self.tabs - .set_tab_label_text(&tab_child.unwrap(), tab.1.as_ref().unwrap_or(&"??".to_owned())); + let tab_label = self.tabs + .get_tab_label(&tab_child.unwrap()) + .unwrap() + .downcast::() + .unwrap(); + tab_label.set_text(tab.1.as_ref().unwrap_or(&"??".to_owned())); if *selected == tab.0 { self.tabs.set_current_page(Some(idx as u32));