diff --git a/CMakeLists.txt b/CMakeLists.txt index a589b3e..73a8e14 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required (VERSION 2.8.8) project(juci) -set(JUCI_VERSION "1.6.0.3") +set(JUCI_VERSION "1.6.0.4") set(CPACK_PACKAGE_NAME "jucipp") set(CPACK_PACKAGE_CONTACT "Ole Christian Eidheim ") diff --git a/README.md b/README.md index 2f81489..44ef9ea 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ can use juCi++ through POSIX compatibility layers such as MSYS2. * Auto-indentation through [clang-format](http://clang.llvm.org/docs/ClangFormat.html) or [Prettier](https://github.com/prettier/prettier) if installed * Source minimap * Split view +* Zen mode * Full UTF-8 support * Wayland supported with GTK+ 3.20 or newer diff --git a/src/files.hpp b/src/files.hpp index de2d5c5..d4b271a 100644 --- a/src/files.hpp +++ b/src/files.hpp @@ -173,6 +173,7 @@ const std::string default_config_file = R"RAW({ #endif R"RAW( "window_toggle_tabs": "", + "window_toggle_zen_mode": "", "window_clear_terminal": "" }, "project": { diff --git a/src/menu.cpp b/src/menu.cpp index 9e21dd2..5760594 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -521,6 +521,10 @@ const Glib::ustring menu_xml = R"RAW( _Toggle _Tabs _Visibility app.window_toggle_tabs + + _Toggle _Zen _Mode + app.window_toggle_zen_mode +
diff --git a/src/notebook.cpp b/src/notebook.cpp index 32c3862..e189e78 100644 --- a/src/notebook.cpp +++ b/src/notebook.cpp @@ -632,11 +632,6 @@ void Notebook::toggle_split() { } split = !split; } -void Notebook::toggle_tabs() { - //Show / Hide tabs for each notebook. - for(auto ¬ebook : Notebook::notebooks) - notebook.set_show_tabs(!notebook.get_show_tabs()); -} std::vector> Notebook::get_notebook_views() { std::vector> notebook_views; diff --git a/src/notebook.hpp b/src/notebook.hpp index feec9f0..9b6394c 100644 --- a/src/notebook.hpp +++ b/src/notebook.hpp @@ -23,7 +23,6 @@ class Notebook : public Gtk::Paned { Source::Mark mark; }; -private: Notebook(); public: @@ -32,6 +31,8 @@ public: return singleton; } + std::vector notebooks; + size_t size(); Source::View *get_view(size_t index); Source::View *get_current_view(); @@ -49,8 +50,6 @@ public: void next(); void previous(); void toggle_split(); - /// Hide/Show tabs. - void toggle_tabs(); std::vector> get_notebook_views(); Gtk::Label status_location; @@ -82,7 +81,6 @@ private: /// Throws if view is not found std::pair get_notebook_page(Source::View *view); - std::vector notebooks; std::vector source_views; //Is NOT freed in destructor, this is intended for quick program exit. std::vector> source_maps; std::vector> scrolled_windows; diff --git a/src/terminal.cpp b/src/terminal.cpp index 68308dc..52cf6e5 100644 --- a/src/terminal.cpp +++ b/src/terminal.cpp @@ -259,6 +259,14 @@ boost::optional Terminal::find_link(const std::string &line, siz } void Terminal::print(std::string message, bool bold) { + if(message.empty()) + return; + + if(auto parent = get_parent()) { + if(!parent->is_visible()) + parent->show(); + } + #ifdef _WIN32 // Remove color codes size_t pos = 0; diff --git a/src/window.cpp b/src/window.cpp index ce10eda..38d4bea 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1658,7 +1658,26 @@ void Window::set_menu_actions() { fullscreen(); }); menu.add_action("window_toggle_tabs", [] { - Notebook::get().toggle_tabs(); + for(auto ¬ebook : Notebook::get().notebooks) + notebook.set_show_tabs(!notebook.get_show_tabs()); + }); + menu.add_action("window_toggle_zen_mode", [this] { + bool not_zen_mode = std::any_of(Notebook::get().notebooks.begin(), + Notebook::get().notebooks.end(), + [](const Gtk::Notebook ¬ebook) { return notebook.get_show_tabs(); }) || + directories_scrolled_window.is_visible() || terminal_scrolled_window.is_visible() || get_show_menubar(); + + for(auto ¬ebook : Notebook::get().notebooks) + notebook.set_show_tabs(!not_zen_mode); + if(not_zen_mode) { + directories_scrolled_window.hide(); + terminal_scrolled_window.hide(); + } + else { + directories_scrolled_window.show(); + terminal_scrolled_window.show(); + } + set_show_menubar(!not_zen_mode); }); menu.add_action("window_clear_terminal", [] { Terminal::get().clear(); @@ -1699,16 +1718,14 @@ void Window::set_menu_actions() { } void Window::add_widgets() { - auto directories_scrolled_window = Gtk::manage(new Gtk::ScrolledWindow()); - directories_scrolled_window->add(Directories::get()); + directories_scrolled_window.add(Directories::get()); auto notebook_vbox = Gtk::manage(new Gtk::Box(Gtk::Orientation::ORIENTATION_VERTICAL)); notebook_vbox->pack_start(Notebook::get()); notebook_vbox->pack_end(EntryBox::get(), Gtk::PACK_SHRINK); - auto terminal_scrolled_window = Gtk::manage(new Gtk::ScrolledWindow()); - terminal_scrolled_window->get_style_context()->add_class("juci_terminal_scrolledwindow"); - terminal_scrolled_window->add(Terminal::get()); + terminal_scrolled_window.get_style_context()->add_class("juci_terminal_scrolledwindow"); + terminal_scrolled_window.add(Terminal::get()); int width, height; get_default_size(width, height); @@ -1716,11 +1733,11 @@ void Window::add_widgets() { auto notebook_and_terminal_vpaned = Gtk::manage(new Gtk::Paned(Gtk::Orientation::ORIENTATION_VERTICAL)); notebook_and_terminal_vpaned->set_position(static_cast(0.75 * height)); notebook_and_terminal_vpaned->pack1(*notebook_vbox, Gtk::SHRINK); - notebook_and_terminal_vpaned->pack2(*terminal_scrolled_window, Gtk::SHRINK); + notebook_and_terminal_vpaned->pack2(terminal_scrolled_window, Gtk::SHRINK); auto hpaned = Gtk::manage(new Gtk::Paned()); hpaned->set_position(static_cast(0.2 * width)); - hpaned->pack1(*directories_scrolled_window, Gtk::SHRINK); + hpaned->pack1(directories_scrolled_window, Gtk::SHRINK); hpaned->pack2(*notebook_and_terminal_vpaned, Gtk::SHRINK); auto status_hbox = Gtk::manage(new Gtk::Box()); @@ -1769,18 +1786,18 @@ void Window::add_widgets() { // Scroll to end of terminal whenever info is printed and end of terminal is shown auto scrolled_to_bottom = std::make_shared(true); - terminal_scrolled_window->get_vadjustment()->signal_value_changed().connect([terminal_scrolled_window, scrolled_to_bottom] { - auto adjustment = terminal_scrolled_window->get_vadjustment(); + terminal_scrolled_window.get_vadjustment()->signal_value_changed().connect([this, scrolled_to_bottom] { + auto adjustment = terminal_scrolled_window.get_vadjustment(); *scrolled_to_bottom = adjustment->get_value() == adjustment->get_upper() - adjustment->get_page_size(); }); - terminal_scrolled_window->get_vadjustment()->signal_changed().connect([terminal_scrolled_window, scrolled_to_bottom] { - auto adjustment = terminal_scrolled_window->get_vadjustment(); + terminal_scrolled_window.get_vadjustment()->signal_changed().connect([this, scrolled_to_bottom] { + auto adjustment = terminal_scrolled_window.get_vadjustment(); if(adjustment->get_value() == adjustment->get_upper() - adjustment->get_page_size()) // If for instance the terminal has been cleared *scrolled_to_bottom = true; }); - Terminal::get().signal_size_allocate().connect([terminal_scrolled_window, scrolled_to_bottom](Gtk::Allocation &allocation) mutable { + Terminal::get().signal_size_allocate().connect([this, scrolled_to_bottom](Gtk::Allocation &allocation) mutable { if(*scrolled_to_bottom) { - auto adjustment = terminal_scrolled_window->get_vadjustment(); + auto adjustment = terminal_scrolled_window.get_vadjustment(); adjustment->set_value(adjustment->get_upper() - adjustment->get_page_size()); *scrolled_to_bottom = true; Terminal::get().queue_draw(); diff --git a/src/window.hpp b/src/window.hpp index a04ce44..20b37a0 100644 --- a/src/window.hpp +++ b/src/window.hpp @@ -22,6 +22,7 @@ protected: private: Gtk::AboutDialog about; + Gtk::ScrolledWindow directories_scrolled_window, terminal_scrolled_window; void configure(); void set_menu_actions();