From 333c28e0662e1af406d3040f87d89fb8f8aca569 Mon Sep 17 00:00:00 2001 From: daa Date: Sat, 18 Nov 2017 23:15:03 +0300 Subject: [PATCH] Use popup instead of dialog --- src/cmd_line.rs | 24 +++++++++++++++--------- src/popup_menu.rs | 1 - src/shell.rs | 5 +++-- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/cmd_line.rs b/src/cmd_line.rs index 78c2894..4180bb2 100644 --- a/src/cmd_line.rs +++ b/src/cmd_line.rs @@ -1,23 +1,29 @@ use gtk; use gtk::prelude::*; +//TODO: levels pub struct CmdLine { - dlg: gtk::Dialog, + popover: gtk::Popover, } impl CmdLine { - pub fn new() -> Self { - let dlg = gtk::Dialog::new(); - dlg.set_modal(true); - dlg.set_destroy_with_parent(true); + pub fn new(drawing: >k::DrawingArea) -> Self { + let popover = gtk::Popover::new(Some(drawing)); + popover.set_modal(false); + let edit_frame = gtk::Frame::new(None); + edit_frame.set_shadow_type(gtk::ShadowType::In); + let drawing_area = gtk::DrawingArea::new(); + edit_frame.add(&drawing_area); + edit_frame.show_all(); + + popover.add(&edit_frame); CmdLine { - dlg, + popover, } } - pub fn show>(&self, parent: &W) { - self.dlg.set_transient_for(parent); - self.dlg.show(); + pub fn show(&self) { + self.popover.popup(); } } diff --git a/src/popup_menu.rs b/src/popup_menu.rs index d3a10ed..18e45ae 100644 --- a/src/popup_menu.rs +++ b/src/popup_menu.rs @@ -11,7 +11,6 @@ use neovim_lib::{Neovim, NeovimApi}; use color::ColorModel; use nvim::{self, ErrorReport, NeovimClient}; -use shell; use input; use render; diff --git a/src/shell.rs b/src/shell.rs index ddb3275..5fcd907 100644 --- a/src/shell.rs +++ b/src/shell.rs @@ -90,6 +90,7 @@ impl State { pub fn new(settings: Rc>, options: ShellOptions) -> State { let drawing_area = gtk::DrawingArea::new(); let popup_menu = PopupMenu::new(&drawing_area); + let cmd_line = CmdLine::new(&drawing_area); let font_ctx = render::Context::new(FontDescription::from_string(DEFAULT_FONT_NAME)); State { @@ -101,7 +102,7 @@ impl State { font_ctx, cursor: None, popup_menu, - cmd_line: CmdLine::new(), + cmd_line, settings, mode: mode::Mode::new(), @@ -1089,7 +1090,7 @@ impl RedrawEvents for State { indent: u64, level: u64, ) -> RepaintMode { - self.cmd_line.show(&self.get_window()); + self.cmd_line.show(); // TODO: implement RepaintMode::Nothing }