From 6aba93d8c055ad26a467a2283e5b40928e118583 Mon Sep 17 00:00:00 2001 From: Luca Bacci <luca.bacci982@gmail.com> Date: Tue, 22 Jan 2019 15:45:58 +0100 Subject: [PATCH 22/26] Change Gtk::ProgressBar appearance by providing custom CSS (#7) In Gtk3 the progress bar height is fixed and defined by the CSS theme in use. Changing the widget allocation size does nothing, it is always rendered the same way. In many themes, including Adwaita, the progressbar is very, very thin. Provide custom CSS to specify a height of 8 pixels. The CSS source string has to be differentiated for Gtk pre and post 3.20, because Gtk 3.20 introduced some breaking changes in the way CSS is handled. References: [1] Migrating from GTK+ 2.x to GTK+ 3 - Parsing of custom resources https://developer.gnome.org/gtk3/stable/gtk-migrating-GtkStyleContext-parsing.html [2] Gtk3 Reference Documentation - Changes in GTK+ 3.20 https://developer.gnome.org/gtk3/stable/ch32s10.html [3] Gnome/HowDoI - Custom Style https://wiki.gnome.org/HowDoI/CustomStyle Closes #7 - Port to Gtk3 --- include/Win_GParted.h | 1 + src/Win_GParted.cc | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/include/Win_GParted.h b/include/Win_GParted.h index c2cb5b0c..80341317 100644 --- a/include/Win_GParted.h +++ b/include/Win_GParted.h @@ -64,6 +64,7 @@ private: void create_format_menu_add_item( FSType filesystem, bool activate ); void init_device_info() ; void init_hpaned_main() ; + void add_custom_css(); void refresh_combo_devices() ; void show_pulsebar( const Glib::ustring & status_message ) ; diff --git a/src/Win_GParted.cc b/src/Win_GParted.cc index 0d82cc82..08924567 100644 --- a/src/Win_GParted.cc +++ b/src/Win_GParted.cc @@ -48,6 +48,7 @@ #include "../config.h" #include <string.h> +#include <gtkmm/cssprovider.h> #include <gtkmm/aboutdialog.h> #include <gtkmm/messagedialog.h> #include <gtkmm/radiobuttongroup.h> @@ -141,6 +142,8 @@ Win_GParted::Win_GParted( const std::vector<Glib::ustring> & user_devices ) //make sure harddisk information is closed.. hpaned_main .get_child1() ->hide() ; + + add_custom_css(); } Win_GParted::~Win_GParted() @@ -669,6 +672,31 @@ void Win_GParted::init_hpaned_main() hpaned_main .pack2( *scrollwindow, true, true ); } +void Win_GParted::add_custom_css() +{ + Glib::RefPtr<Gdk::Screen> default_screen = Gdk::Screen::get_default(); + Glib::RefPtr<Gtk::CssProvider> provider = Gtk::CssProvider::create(); + + Glib::ustring custom_css; + if (gtk_get_minor_version() >= 20) + custom_css = "progressbar progress, trough { min-height: 8px; }"; + else + custom_css = "GtkProgressBar { -GtkProgressBar-min-horizontal-bar-height: 8px; }"; + + try + { + provider->load_from_data(custom_css); + } + catch (Glib::Error& e) + { + std::cerr << e.what() << std::endl; + } + + Gtk::StyleContext::add_provider_for_screen(default_screen, + provider, + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); +} + void Win_GParted::refresh_combo_devices() { // Temporarily block the on change callback while re-creating the device list -- 2.21.0