X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Futils.cc;h=aa68519560534977294548c432fc9735dab9ce18;hb=2292e33ee418070c4d12971a72e01eb29dfc8de9;hp=988bd370ae7a3618391e2cd0092bfb9342fda65e;hpb=813c5f0af9d1dac32b156ef3c72b890a7cf9eab5;p=ardour.git diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc index 988bd370ae..aa68519560 100644 --- a/gtk2_ardour/utils.cc +++ b/gtk2_ardour/utils.cc @@ -25,6 +25,8 @@ #include // for fontmap resolution control for GnomeCanvas #include +#include +#include #include #include #include @@ -36,11 +38,11 @@ #include #include #include +#include #include "pbd/file_utils.h" #include -#include "ardour/configuration.h" #include "ardour/rc_configuration.h" #include "ardour/filesystem_paths.h" @@ -226,13 +228,13 @@ get_font_for_style (string widgetname) Glib::RefPtr layout = foobar.get_layout(); - PangoFontDescription *pfd = (PangoFontDescription *)pango_layout_get_font_description((PangoLayout *)layout->gobj()); + PangoFontDescription *pfd = const_cast (pango_layout_get_font_description(const_cast(layout->gobj()))); if (!pfd) { /* layout inherited its font description from a PangoContext */ - PangoContext* ctxt = (PangoContext*) pango_layout_get_context ((PangoLayout*) layout->gobj()); + PangoContext* ctxt = (PangoContext*) pango_layout_get_context (const_cast(layout->gobj())); pfd = pango_context_get_font_description (ctxt); return Pango::FontDescription (pfd); /* make a copy */ } @@ -344,11 +346,16 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev) } #ifdef GTKOSX - /* should this be universally true? */ + /* at one time this appeared to be necessary. As of July 2012, it does not + appear to be. if it ever is necessar, figure out if it should apply + to all platforms. + */ +#if 0 if (Keyboard::some_magic_widget_has_focus ()) { - allow_activating = false; + allow_activating = false; } #endif +#endif DEBUG_TRACE (DEBUG::Accelerators, string_compose ("Win = %1 focus = %7 Key event: code = %2 state = %3 special handling ? %4 magic widget focus ? %5 allow_activation ? %6\n", @@ -456,7 +463,9 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev) DEBUG_TRACE (DEBUG::Accelerators, "\tactivate, then propagate\n"); if (allow_activating) { + DEBUG_TRACE (DEBUG::Accelerators, "\tsending to window\n"); if (gtk_window_activate_key (win, ev)) { + DEBUG_TRACE (DEBUG::Accelerators, "\t\thandled\n"); return true; } } else { @@ -498,14 +507,14 @@ get_xpm (std::string name) spath.add_subdirectory_to_paths("pixmaps"); - sys::path data_file_path; + std::string data_file_path; if(!find_file_in_search_path (spath, name, data_file_path)) { fatal << string_compose (_("cannot find XPM file for %1"), name) << endmsg; } try { - xpm_map[name] = Gdk::Pixbuf::create_from_file (data_file_path.to_string()); + xpm_map[name] = Gdk::Pixbuf::create_from_file (data_file_path); } catch(const Glib::Error& e) { warning << "Caught Glib::Error: " << e.what() << endmsg; } @@ -524,13 +533,13 @@ get_icon_path (const char* cname) spath.add_subdirectory_to_paths("icons"); - sys::path data_file_path; + std::string data_file_path; if (!find_file_in_search_path (spath, name, data_file_path)) { fatal << string_compose (_("cannot find icon image for %1 using %2"), name, spath.to_string()) << endmsg; } - return data_file_path.to_string(); + return data_file_path; } Glib::RefPtr @@ -542,7 +551,7 @@ get_icon (const char* cname) } catch (const Gdk::PixbufError &e) { cerr << "Caught PixbufError: " << e.what() << endl; } catch (...) { - g_message("Caught ... "); + error << string_compose (_("Caught exception while loading icon named %1"), cname) << endmsg; } return img; @@ -579,11 +588,48 @@ longest (vector& strings) bool key_is_legal_for_numeric_entry (guint keyval) { + /* we assume that this does not change over the life of the process + */ + + static int comma_decimal = -1; + switch (keyval) { - case GDK_minus: - case GDK_plus: case GDK_period: case GDK_comma: + if (comma_decimal < 0) { + std::lconv* lc = std::localeconv(); + if (strchr (lc->decimal_point, ',') != 0) { + comma_decimal = 1; + } else { + comma_decimal = 0; + } + } + break; + default: + break; + } + + switch (keyval) { + case GDK_decimalpoint: + case GDK_KP_Separator: + return true; + + case GDK_period: + if (comma_decimal) { + return false; + } else { + return true; + } + break; + case GDK_comma: + if (comma_decimal) { + return true; + } else { + return false; + } + break; + case GDK_minus: + case GDK_plus: case GDK_0: case GDK_1: case GDK_2: @@ -681,6 +727,16 @@ escape_underscores (string const & s) return o; } +/** Replace < and > with < and > respectively to make < > display correctly in markup strings */ +string +escape_angled_brackets (string const & s) +{ + string o = s; + boost::replace_all (o, "<", "<"); + boost::replace_all (o, ">", ">"); + return o; +} + Gdk::Color unique_random_color (list& used_colors) {