X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Futils.cc;h=9378b6727c1cb4dfc9acb2bd4edf408dba1427d1;hb=6001b8d28dd764bada8b9198a5f91e0a2f5251f6;hp=020bc6f4d6c3ab1a636b8e6759b1ca600463e057;hpb=caa305ed2b5f2b5ed976a1e0b18b3794c2ab2465;p=ardour.git diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc index 020bc6f4d6..9378b6727c 100644 --- a/gtk2_ardour/utils.cc +++ b/gtk2_ardour/utils.cc @@ -32,13 +32,13 @@ #include #include -#include +#include "pbd/file_utils.h" #include -#include -#include +#include "ardour/configuration.h" +#include "ardour/configuration.h" -#include +#include "ardour/filesystem_paths.h" #include "ardour_ui.h" #include "keyboard.h" @@ -384,6 +384,61 @@ color_from_style (string widget_style_name, int state, string attr) return Gdk::Color ("red"); } +Glib::RefPtr +gc_from_style (string widget_style_name, int state, string attr) +{ + GtkStyle* style; + + style = gtk_rc_get_style_by_paths (gtk_settings_get_default(), + widget_style_name.c_str(), + 0, G_TYPE_NONE); + + if (!style) { + error << string_compose (_("no style found for %1, using red"), style) << endmsg; + Glib::RefPtr ret = Gdk::GC::create(); + ret->set_rgb_fg_color(Gdk::Color("red")); + return ret; + } + + if (attr == "fg") { + return Glib::wrap(style->fg_gc[state]); + } + + if (attr == "bg") { + return Glib::wrap(style->bg_gc[state]); + } + + if (attr == "light") { + return Glib::wrap(style->light_gc[state]); + } + + if (attr == "dark") { + return Glib::wrap(style->dark_gc[state]); + } + + if (attr == "mid") { + return Glib::wrap(style->mid_gc[state]); + } + + if (attr == "text") { + return Glib::wrap(style->text_gc[state]); + } + + if (attr == "base") { + return Glib::wrap(style->base_gc[state]); + } + + if (attr == "text_aa") { + return Glib::wrap(style->text_aa_gc[state]); + } + + error << string_compose (_("unknown style attribute %1 requested for color; using \"red\""), attr) << endmsg; + Glib::RefPtr ret = Gdk::GC::create(); + ret->set_rgb_fg_color(Gdk::Color("red")); + return ret; +} + + bool canvas_item_visible (ArdourCanvas::Item* item) { @@ -408,10 +463,12 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev) GtkWindow* win = window.gobj(); GtkWidget* focus = gtk_window_get_focus (win); bool special_handling_of_unmodified_accelerators = false; + bool allow_activating = true; #undef DEBUG_ACCELERATOR_HANDLING #ifdef DEBUG_ACCELERATOR_HANDLING - bool debug = (getenv ("ARDOUR_DEBUG_ACCELERATOR_HANDLING") != 0); + //bool debug = (getenv ("ARDOUR_DEBUG_ACCELERATOR_HANDLING") != 0); + bool debug=true; #endif if (focus) { if (GTK_IS_ENTRY(focus) || Keyboard::some_magic_widget_has_focus()) { @@ -419,10 +476,21 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev) } } +#ifdef GTKOSX + /* should this be universally true? */ + if (Keyboard::some_magic_widget_has_focus ()) { + allow_activating = false; + } +#endif + #ifdef DEBUG_ACCELERATOR_HANDLING if (debug) { cerr << "Win = " << win << " Key event: code = " << ev->keyval << " state = " << hex << ev->state << dec << " special handling ? " << special_handling_of_unmodified_accelerators + << " magic widget focus ? " + << Keyboard::some_magic_widget_has_focus() + << " allow_activation ? " + << allow_activating << endl; } #endif @@ -469,17 +537,19 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev) uint32_t fakekey = ev->keyval; if (possibly_translate_keyval_to_make_legal_accelerator (fakekey)) { - if (gtk_accel_groups_activate(G_OBJECT(win), fakekey, GdkModifierType(ev->state))) { + if (allow_activating && gtk_accel_groups_activate(G_OBJECT(win), fakekey, GdkModifierType(ev->state))) { return true; } #ifdef GTKOSX - int oldval = ev->keyval; - ev->keyval = fakekey; - if (gdk_quartz_possibly_forward ((GdkEvent*) ev)) { - return true; + if (allow_activating) { + int oldval = ev->keyval; + ev->keyval = fakekey; + if (gdk_quartz_possibly_forward ((GdkEvent*) ev)) { + return true; + } + ev->keyval = oldval; } - ev->keyval = oldval; #endif } } @@ -497,26 +567,24 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev) cerr << "\tactivate, then propagate\n"; } #endif + + if (allow_activating) { #ifdef GTKOSX - if (gdk_quartz_possibly_forward ((GdkEvent*) ev)) { - return true; - } -#endif - if (!gtk_window_activate_key (win, ev)) { -#ifdef DEBUG_ACCELERATOR_HANDLING - if (debug) { - cerr << "\tnot accelerated, now propagate\n"; + if (gdk_quartz_possibly_forward ((GdkEvent*) ev)) { + return true; } #endif - return gtk_window_propagate_key_event (win, ev); - } else { -#ifdef DEBUG_ACCELERATOR_HANDLING - if (debug) { - cerr << "\taccelerated - done.\n"; + if (gtk_window_activate_key (win, ev)) { + return true; } + } + +#ifdef DEBUG_ACCELERATOR_HANDLING + if (debug) { + cerr << "\tnot accelerated, now propagate\n"; + } #endif - return true; - } + return gtk_window_propagate_key_event (win, ev); } /* no modifiers, propagate first */ @@ -532,12 +600,17 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev) cerr << "\tpropagation didn't handle, so activate\n"; } #endif + + if (allow_activating) { + #ifdef GTKOSX - if (gdk_quartz_possibly_forward ((GdkEvent*) ev)) { - return true; - } + if (gdk_quartz_possibly_forward ((GdkEvent*) ev)) { + return true; + } #endif - return gtk_window_activate_key (win, ev); + return gtk_window_activate_key (win, ev); + } + } else { #ifdef DEBUG_ACCELERATOR_HANDLING if (debug) {