diff options
author | David Robillard <d@drobilla.net> | 2009-10-22 19:53:22 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2009-10-22 19:53:22 +0000 |
commit | 02f2755e602647a8392d9ffc8bdfb67772c722aa (patch) | |
tree | 50de14205c997c32ac26beb5455099032f45e72a /libs/gtkmm2ext/gtk_ui.cc | |
parent | b3a80523d32dfd3be2cf11ddfebdbe9bedf27cc2 (diff) |
Fix colours of log window messages.
If anyone has a better way of making this actually work than the absurd kludge in gtk_ui.cc, feel free.
git-svn-id: svn://localhost/ardour2/branches/3.0@5864 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/gtkmm2ext/gtk_ui.cc')
-rw-r--r-- | libs/gtkmm2ext/gtk_ui.cc | 115 |
1 files changed, 63 insertions, 52 deletions
diff --git a/libs/gtkmm2ext/gtk_ui.cc b/libs/gtkmm2ext/gtk_ui.cc index 1620226ccc..35a6036245 100644 --- a/libs/gtkmm2ext/gtk_ui.cc +++ b/libs/gtkmm2ext/gtk_ui.cc @@ -119,6 +119,15 @@ UI::caller_is_ui_thread () int UI::load_rcfile (string path, bool themechange) { + /* Yes, pointers to Glib::RefPtr. If these are not kept around, + * a segfault somewhere deep in the wonderfully robust glib will result. + * This does not occur if wiget.get_style is used instead of rc.get_style below, + * except that doesn't actually work... */ + static Glib::RefPtr<Style>* fatal_style = 0; + static Glib::RefPtr<Style>* error_style = 0; + static Glib::RefPtr<Style>* warning_style = 0; + static Glib::RefPtr<Style>* info_style = 0; + if (path.length() == 0) { return -1; } @@ -132,7 +141,7 @@ UI::load_rcfile (string path, bool themechange) } RC rc (path.c_str()); - // RC::reset_styles (Gtk::Settings::get_default()); + //RC::reset_styles (Gtk::Settings::get_default()); gtk_rc_reset_styles (gtk_settings_get_default()); theme_changed.emit(); @@ -143,18 +152,20 @@ UI::load_rcfile (string path, bool themechange) /* have to pack widgets into a toplevel window so that styles will stick */ Window temp_window (WINDOW_TOPLEVEL); + temp_window.ensure_style (); + HBox box; - Label a_widget1; - Label a_widget2; - Label a_widget3; - Label a_widget4; + Label fatal_widget; + Label error_widget; + Label warning_widget; + Label info_widget; RefPtr<Gtk::Style> style; RefPtr<TextBuffer> buffer (errors->text().get_buffer()); - box.pack_start (a_widget1); - box.pack_start (a_widget2); - box.pack_start (a_widget3); - box.pack_start (a_widget4); + box.pack_start (fatal_widget); + box.pack_start (error_widget); + box.pack_start (warning_widget); + box.pack_start (info_widget); error_ptag = buffer->create_tag(); error_mtag = buffer->create_tag(); @@ -165,49 +176,49 @@ UI::load_rcfile (string path, bool themechange) info_ptag = buffer->create_tag(); info_mtag = buffer->create_tag(); - a_widget1.set_name ("FatalMessage"); - a_widget1.ensure_style (); - style = a_widget1.get_style(); - - fatal_ptag->property_font_desc().set_value(style->get_font()); - fatal_ptag->property_foreground_gdk().set_value(style->get_fg(STATE_ACTIVE)); - fatal_ptag->property_background_gdk().set_value(style->get_bg(STATE_ACTIVE)); - fatal_mtag->property_font_desc().set_value(style->get_font()); - fatal_mtag->property_foreground_gdk().set_value(style->get_fg(STATE_NORMAL)); - fatal_mtag->property_background_gdk().set_value(style->get_bg(STATE_NORMAL)); - - a_widget2.set_name ("ErrorMessage"); - a_widget2.ensure_style (); - style = a_widget2.get_style(); - - error_ptag->property_font_desc().set_value(style->get_font()); - error_ptag->property_foreground_gdk().set_value(style->get_fg(STATE_ACTIVE)); - error_ptag->property_background_gdk().set_value(style->get_bg(STATE_ACTIVE)); - error_mtag->property_font_desc().set_value(style->get_font()); - error_mtag->property_foreground_gdk().set_value(style->get_fg(STATE_NORMAL)); - error_mtag->property_background_gdk().set_value(style->get_bg(STATE_NORMAL)); - - a_widget3.set_name ("WarningMessage"); - a_widget3.ensure_style (); - style = a_widget3.get_style(); - - warning_ptag->property_font_desc().set_value(style->get_font()); - warning_ptag->property_foreground_gdk().set_value(style->get_fg(STATE_ACTIVE)); - warning_ptag->property_background_gdk().set_value(style->get_bg(STATE_ACTIVE)); - warning_mtag->property_font_desc().set_value(style->get_font()); - warning_mtag->property_foreground_gdk().set_value(style->get_fg(STATE_NORMAL)); - warning_mtag->property_background_gdk().set_value(style->get_bg(STATE_NORMAL)); - - a_widget4.set_name ("InfoMessage"); - a_widget4.ensure_style (); - style = a_widget4.get_style(); - - info_ptag->property_font_desc().set_value(style->get_font()); - info_ptag->property_foreground_gdk().set_value(style->get_fg(STATE_ACTIVE)); - info_ptag->property_background_gdk().set_value(style->get_bg(STATE_ACTIVE)); - info_mtag->property_font_desc().set_value(style->get_font()); - info_mtag->property_foreground_gdk().set_value(style->get_fg(STATE_NORMAL)); - info_mtag->property_background_gdk().set_value(style->get_bg(STATE_NORMAL)); + fatal_widget.set_name ("FatalMessage"); + delete fatal_style; + fatal_style = new Glib::RefPtr<Style>(rc.get_style(fatal_widget)); + + fatal_ptag->property_font_desc().set_value((*fatal_style)->get_font()); + fatal_ptag->property_foreground_gdk().set_value((*fatal_style)->get_fg(STATE_ACTIVE)); + fatal_ptag->property_background_gdk().set_value((*fatal_style)->get_bg(STATE_ACTIVE)); + fatal_mtag->property_font_desc().set_value((*fatal_style)->get_font()); + fatal_mtag->property_foreground_gdk().set_value((*fatal_style)->get_fg(STATE_NORMAL)); + fatal_mtag->property_background_gdk().set_value((*fatal_style)->get_bg(STATE_NORMAL)); + + error_widget.set_name ("ErrorMessage"); + delete error_style; + error_style = new Glib::RefPtr<Style>(rc.get_style(error_widget)); + + error_ptag->property_font_desc().set_value((*error_style)->get_font()); + error_ptag->property_foreground_gdk().set_value((*error_style)->get_fg(STATE_ACTIVE)); + error_ptag->property_background_gdk().set_value((*error_style)->get_bg(STATE_ACTIVE)); + error_mtag->property_font_desc().set_value((*error_style)->get_font()); + error_mtag->property_foreground_gdk().set_value((*error_style)->get_fg(STATE_NORMAL)); + error_mtag->property_background_gdk().set_value((*error_style)->get_bg(STATE_NORMAL)); + + warning_widget.set_name ("WarningMessage"); + delete warning_style; + warning_style = new Glib::RefPtr<Style>(rc.get_style(warning_widget)); + + warning_ptag->property_font_desc().set_value((*warning_style)->get_font()); + warning_ptag->property_foreground_gdk().set_value((*warning_style)->get_fg(STATE_ACTIVE)); + warning_ptag->property_background_gdk().set_value((*warning_style)->get_bg(STATE_ACTIVE)); + warning_mtag->property_font_desc().set_value((*warning_style)->get_font()); + warning_mtag->property_foreground_gdk().set_value((*warning_style)->get_fg(STATE_NORMAL)); + warning_mtag->property_background_gdk().set_value((*warning_style)->get_bg(STATE_NORMAL)); + + info_widget.set_name ("InfoMessage"); + delete info_style; + info_style = new Glib::RefPtr<Style>(rc.get_style(info_widget)); + + info_ptag->property_font_desc().set_value((*info_style)->get_font()); + info_ptag->property_foreground_gdk().set_value((*info_style)->get_fg(STATE_ACTIVE)); + info_ptag->property_background_gdk().set_value((*info_style)->get_bg(STATE_ACTIVE)); + info_mtag->property_font_desc().set_value((*info_style)->get_font()); + info_mtag->property_foreground_gdk().set_value((*info_style)->get_fg(STATE_NORMAL)); + info_mtag->property_background_gdk().set_value((*info_style)->get_bg(STATE_NORMAL)); return 0; } |