convert property_foo().set_value(bar) to property_foo() = bar
[ardour.git] / gtk2_ardour / audio_clock.cc
index 860e80af5d72d0ba3de49a20ed7e789daa31499f..83d8f6644cd84cc562a927f4930825fc3e4774e8 100644 (file)
 
 #include <cstdio> // for sprintf
 #include <cmath>
-#include <gtkmmext/utils.h>
+#include <gtkmm2ext/utils.h>
 
 #include <ardour/ardour.h>
 #include <ardour/session.h>
 #include <ardour/tempo.h>
+#include <sigc++/bind.h>
 
 #include "ardour_ui.h"
 #include "audio_clock.h"
@@ -33,7 +34,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
-using namespace SigC;
+using namespace sigc;
 using namespace Gtk;
 
 const uint32_t AudioClock::field_length[(int) AudioClock::AudioFrames+1] = {
@@ -164,7 +165,7 @@ AudioClock::AudioClock (const string& name, bool allow_edit, bool duration, bool
        b1.set_name (name);
        b2.set_name (name);
 
-       clock_frame.set_shadow_type (GTK_SHADOW_IN);
+       clock_frame.set_shadow_type (Gtk::SHADOW_IN);
        clock_frame.set_name ("BaseFrame");
 
        clock_frame.add (clock_base);
@@ -185,8 +186,8 @@ AudioClock::AudioClock (const string& name, bool allow_edit, bool duration, bool
           stays disabled.
        */
 
-       clock_base.add_events (GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK);
-       clock_base.button_release_event.connect (bind (slot (*this, &AudioClock::field_button_release_event), SMPTE_Hours));
+       clock_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
+       clock_base.signal_button_release_event().connect (bind (mem_fun (*this, &AudioClock::field_button_release_event), SMPTE_Hours));
 
        if (editable) {
                setup_events ();
@@ -198,120 +199,120 @@ AudioClock::AudioClock (const string& name, bool allow_edit, bool duration, bool
 void
 AudioClock::setup_events ()
 {
-       clock_base.set_flags (GTK_CAN_FOCUS);
-
-       hours_ebox.add_events (GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK|GDK_FOCUS_CHANGE_MASK|GDK_POINTER_MOTION_MASK);
-       minutes_ebox.add_events (GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK|GDK_FOCUS_CHANGE_MASK|GDK_POINTER_MOTION_MASK);
-       seconds_ebox.add_events (GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK|GDK_FOCUS_CHANGE_MASK|GDK_POINTER_MOTION_MASK);
-       frames_ebox.add_events (GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK|GDK_FOCUS_CHANGE_MASK|GDK_POINTER_MOTION_MASK);
-       bars_ebox.add_events (GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK|GDK_FOCUS_CHANGE_MASK|GDK_POINTER_MOTION_MASK);
-       beats_ebox.add_events (GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK|GDK_FOCUS_CHANGE_MASK|GDK_POINTER_MOTION_MASK);
-       ticks_ebox.add_events (GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK|GDK_FOCUS_CHANGE_MASK|GDK_POINTER_MOTION_MASK);
-       ms_hours_ebox.add_events (GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK|GDK_FOCUS_CHANGE_MASK|GDK_POINTER_MOTION_MASK);
-       ms_minutes_ebox.add_events (GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK|GDK_FOCUS_CHANGE_MASK|GDK_POINTER_MOTION_MASK);
-       ms_seconds_ebox.add_events (GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK|GDK_FOCUS_CHANGE_MASK|GDK_POINTER_MOTION_MASK);
-       audio_frames_ebox.add_events (GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK|GDK_FOCUS_CHANGE_MASK|GDK_POINTER_MOTION_MASK);
-
-       hours_ebox.set_flags (GTK_CAN_FOCUS);
-       minutes_ebox.set_flags (GTK_CAN_FOCUS);
-       seconds_ebox.set_flags (GTK_CAN_FOCUS);
-       frames_ebox.set_flags (GTK_CAN_FOCUS);
-       audio_frames_ebox.set_flags (GTK_CAN_FOCUS);
-       bars_ebox.set_flags (GTK_CAN_FOCUS);
-       beats_ebox.set_flags (GTK_CAN_FOCUS);
-       ticks_ebox.set_flags (GTK_CAN_FOCUS);
-       ms_hours_ebox.set_flags (GTK_CAN_FOCUS);
-       ms_minutes_ebox.set_flags (GTK_CAN_FOCUS);
-       ms_seconds_ebox.set_flags (GTK_CAN_FOCUS);
-
-       hours_ebox.motion_notify_event.connect (bind (slot (*this, &AudioClock::field_motion_notify_event), SMPTE_Hours));
-       minutes_ebox.motion_notify_event.connect (bind (slot (*this, &AudioClock::field_motion_notify_event), SMPTE_Minutes));
-       seconds_ebox.motion_notify_event.connect (bind (slot (*this, &AudioClock::field_motion_notify_event), SMPTE_Seconds));
-       frames_ebox.motion_notify_event.connect (bind (slot (*this, &AudioClock::field_motion_notify_event), SMPTE_Frames));
-       audio_frames_ebox.motion_notify_event.connect (bind (slot (*this, &AudioClock::field_motion_notify_event), AudioFrames));
-       bars_ebox.motion_notify_event.connect (bind (slot (*this, &AudioClock::field_motion_notify_event), Bars));
-       beats_ebox.motion_notify_event.connect (bind (slot (*this, &AudioClock::field_motion_notify_event), Beats));
-       ticks_ebox.motion_notify_event.connect (bind (slot (*this, &AudioClock::field_motion_notify_event), Ticks));
-       ms_hours_ebox.motion_notify_event.connect (bind (slot (*this, &AudioClock::field_motion_notify_event), MS_Hours));
-       ms_minutes_ebox.motion_notify_event.connect (bind (slot (*this, &AudioClock::field_motion_notify_event), MS_Minutes));
-       ms_seconds_ebox.motion_notify_event.connect (bind (slot (*this, &AudioClock::field_motion_notify_event), MS_Seconds));
-
-       hours_ebox.button_press_event.connect (bind (slot (*this, &AudioClock::field_button_press_event), SMPTE_Hours));
-       minutes_ebox.button_press_event.connect (bind (slot (*this, &AudioClock::field_button_press_event), SMPTE_Minutes));
-       seconds_ebox.button_press_event.connect (bind (slot (*this, &AudioClock::field_button_press_event), SMPTE_Seconds));
-       frames_ebox.button_press_event.connect (bind (slot (*this, &AudioClock::field_button_press_event), SMPTE_Frames));
-       audio_frames_ebox.button_press_event.connect (bind (slot (*this, &AudioClock::field_button_press_event), AudioFrames));
-       bars_ebox.button_press_event.connect (bind (slot (*this, &AudioClock::field_button_press_event), Bars));
-       beats_ebox.button_press_event.connect (bind (slot (*this, &AudioClock::field_button_press_event), Beats));
-       ticks_ebox.button_press_event.connect (bind (slot (*this, &AudioClock::field_button_press_event), Ticks));
-       ms_hours_ebox.button_press_event.connect (bind (slot (*this, &AudioClock::field_button_press_event), MS_Hours));
-       ms_minutes_ebox.button_press_event.connect (bind (slot (*this, &AudioClock::field_button_press_event), MS_Minutes));
-       ms_seconds_ebox.button_press_event.connect (bind (slot (*this, &AudioClock::field_button_press_event), MS_Seconds));
-
-       hours_ebox.button_release_event.connect (bind (slot (*this, &AudioClock::field_button_release_event), SMPTE_Hours));
-       minutes_ebox.button_release_event.connect (bind (slot (*this, &AudioClock::field_button_release_event), SMPTE_Minutes));
-       seconds_ebox.button_release_event.connect (bind (slot (*this, &AudioClock::field_button_release_event), SMPTE_Seconds));
-       frames_ebox.button_release_event.connect (bind (slot (*this, &AudioClock::field_button_release_event), SMPTE_Frames));
-       audio_frames_ebox.button_release_event.connect (bind (slot (*this, &AudioClock::field_button_release_event), AudioFrames));
-       bars_ebox.button_release_event.connect (bind (slot (*this, &AudioClock::field_button_release_event), Bars));
-       beats_ebox.button_release_event.connect (bind (slot (*this, &AudioClock::field_button_release_event), Beats));
-       ticks_ebox.button_release_event.connect (bind (slot (*this, &AudioClock::field_button_release_event), Ticks));
-       ms_hours_ebox.button_release_event.connect (bind (slot (*this, &AudioClock::field_button_release_event), MS_Hours));
-       ms_minutes_ebox.button_release_event.connect (bind (slot (*this, &AudioClock::field_button_release_event), MS_Minutes));
-       ms_seconds_ebox.button_release_event.connect (bind (slot (*this, &AudioClock::field_button_release_event), MS_Seconds));
-
-       hours_ebox.key_release_event.connect (bind (slot (*this, &AudioClock::field_key_release_event), SMPTE_Hours));
-       minutes_ebox.key_release_event.connect (bind (slot (*this, &AudioClock::field_key_release_event), SMPTE_Minutes));
-       seconds_ebox.key_release_event.connect (bind (slot (*this, &AudioClock::field_key_release_event), SMPTE_Seconds));
-       frames_ebox.key_release_event.connect (bind (slot (*this, &AudioClock::field_key_release_event), SMPTE_Frames));
-       audio_frames_ebox.key_release_event.connect (bind (slot (*this, &AudioClock::field_key_release_event), AudioFrames));
-       bars_ebox.key_release_event.connect (bind (slot (*this, &AudioClock::field_key_release_event), Bars));
-       beats_ebox.key_release_event.connect (bind (slot (*this, &AudioClock::field_key_release_event), Beats));
-       ticks_ebox.key_release_event.connect (bind (slot (*this, &AudioClock::field_key_release_event), Ticks));
-       ms_hours_ebox.key_release_event.connect (bind (slot (*this, &AudioClock::field_key_release_event), MS_Hours));
-       ms_minutes_ebox.key_release_event.connect (bind (slot (*this, &AudioClock::field_key_release_event), MS_Minutes));
-       ms_seconds_ebox.key_release_event.connect (bind (slot (*this, &AudioClock::field_key_release_event), MS_Seconds));
-
-       hours_ebox.focus_in_event.connect (bind (slot (*this, &AudioClock::field_focus_in_event), SMPTE_Hours));
-       minutes_ebox.focus_in_event.connect (bind (slot (*this, &AudioClock::field_focus_in_event), SMPTE_Minutes));
-       seconds_ebox.focus_in_event.connect (bind (slot (*this, &AudioClock::field_focus_in_event), SMPTE_Seconds));
-       frames_ebox.focus_in_event.connect (bind (slot (*this, &AudioClock::field_focus_in_event), SMPTE_Frames));
-       audio_frames_ebox.focus_in_event.connect (bind (slot (*this, &AudioClock::field_focus_in_event), AudioFrames));
-       bars_ebox.focus_in_event.connect (bind (slot (*this, &AudioClock::field_focus_in_event), Bars));
-       beats_ebox.focus_in_event.connect (bind (slot (*this, &AudioClock::field_focus_in_event), Beats));
-       ticks_ebox.focus_in_event.connect (bind (slot (*this, &AudioClock::field_focus_in_event), Ticks));
-       ms_hours_ebox.focus_in_event.connect (bind (slot (*this, &AudioClock::field_focus_in_event), MS_Hours));
-       ms_minutes_ebox.focus_in_event.connect (bind (slot (*this, &AudioClock::field_focus_in_event), MS_Minutes));
-       ms_seconds_ebox.focus_in_event.connect (bind (slot (*this, &AudioClock::field_focus_in_event), MS_Seconds));
-
-       hours_ebox.focus_out_event.connect (bind (slot (*this, &AudioClock::field_focus_out_event), SMPTE_Hours));
-       minutes_ebox.focus_out_event.connect (bind (slot (*this, &AudioClock::field_focus_out_event), SMPTE_Minutes));
-       seconds_ebox.focus_out_event.connect (bind (slot (*this, &AudioClock::field_focus_out_event), SMPTE_Seconds));
-       frames_ebox.focus_out_event.connect (bind (slot (*this, &AudioClock::field_focus_out_event), SMPTE_Frames));
-       audio_frames_ebox.focus_out_event.connect (bind (slot (*this, &AudioClock::field_focus_out_event), AudioFrames));
-       bars_ebox.focus_out_event.connect (bind (slot (*this, &AudioClock::field_focus_out_event), Bars));
-       beats_ebox.focus_out_event.connect (bind (slot (*this, &AudioClock::field_focus_out_event), Beats));
-       ticks_ebox.focus_out_event.connect (bind (slot (*this, &AudioClock::field_focus_out_event), Ticks));
-       ms_hours_ebox.focus_out_event.connect (bind (slot (*this, &AudioClock::field_focus_out_event), MS_Hours));
-       ms_minutes_ebox.focus_out_event.connect (bind (slot (*this, &AudioClock::field_focus_out_event), MS_Minutes));
-       ms_seconds_ebox.focus_out_event.connect (bind (slot (*this, &AudioClock::field_focus_out_event), MS_Seconds));
-
-       Gtkmmext::set_usize_to_display_given_text (hours_label, "-88", 0, 2);
-       Gtkmmext::set_usize_to_display_given_text (minutes_label, "88", 0, 2);
-       Gtkmmext::set_usize_to_display_given_text (seconds_label, "88", 0, 2);
-       Gtkmmext::set_usize_to_display_given_text (frames_label, "88", 0, 2);
-
-       Gtkmmext::set_usize_to_display_given_text (bars_label, "-888", 0, 2);
-       Gtkmmext::set_usize_to_display_given_text (beats_label, "88", 0, 2);
-       Gtkmmext::set_usize_to_display_given_text (ticks_label, "8888", 0, 2);
-
-       Gtkmmext::set_usize_to_display_given_text (audio_frames_label, "4294967296", 0, 2);
+       clock_base.set_flags (Gtk::CAN_FOCUS);
+
+       hours_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
+       minutes_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
+       seconds_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
+       frames_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
+       bars_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
+       beats_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
+       ticks_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
+       ms_hours_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
+       ms_minutes_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
+       ms_seconds_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
+       audio_frames_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
+
+       hours_ebox.set_flags (Gtk::CAN_FOCUS);
+       minutes_ebox.set_flags (Gtk::CAN_FOCUS);
+       seconds_ebox.set_flags (Gtk::CAN_FOCUS);
+       frames_ebox.set_flags (Gtk::CAN_FOCUS);
+       audio_frames_ebox.set_flags (Gtk::CAN_FOCUS);
+       bars_ebox.set_flags (Gtk::CAN_FOCUS);
+       beats_ebox.set_flags (Gtk::CAN_FOCUS);
+       ticks_ebox.set_flags (Gtk::CAN_FOCUS);
+       ms_hours_ebox.set_flags (Gtk::CAN_FOCUS);
+       ms_minutes_ebox.set_flags (Gtk::CAN_FOCUS);
+       ms_seconds_ebox.set_flags (Gtk::CAN_FOCUS);
+
+       hours_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), SMPTE_Hours));
+       minutes_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), SMPTE_Minutes));
+       seconds_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), SMPTE_Seconds));
+       frames_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), SMPTE_Frames));
+       audio_frames_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), AudioFrames));
+       bars_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), Bars));
+       beats_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), Beats));
+       ticks_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), Ticks));
+       ms_hours_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), MS_Hours));
+       ms_minutes_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), MS_Minutes));
+       ms_seconds_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), MS_Seconds));
+
+       hours_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), SMPTE_Hours));
+       minutes_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), SMPTE_Minutes));
+       seconds_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), SMPTE_Seconds));
+       frames_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), SMPTE_Frames));
+       audio_frames_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), AudioFrames));
+       bars_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), Bars));
+       beats_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), Beats));
+       ticks_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), Ticks));
+       ms_hours_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), MS_Hours));
+       ms_minutes_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), MS_Minutes));
+       ms_seconds_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), MS_Seconds));
+
+       hours_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), SMPTE_Hours));
+       minutes_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), SMPTE_Minutes));
+       seconds_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), SMPTE_Seconds));
+       frames_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), SMPTE_Frames));
+       audio_frames_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), AudioFrames));
+       bars_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), Bars));
+       beats_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), Beats));
+       ticks_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), Ticks));
+       ms_hours_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), MS_Hours));
+       ms_minutes_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), MS_Minutes));
+       ms_seconds_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), MS_Seconds));
+
+       hours_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), SMPTE_Hours));
+       minutes_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), SMPTE_Minutes));
+       seconds_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), SMPTE_Seconds));
+       frames_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), SMPTE_Frames));
+       audio_frames_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), AudioFrames));
+       bars_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), Bars));
+       beats_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), Beats));
+       ticks_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), Ticks));
+       ms_hours_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), MS_Hours));
+       ms_minutes_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), MS_Minutes));
+       ms_seconds_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), MS_Seconds));
+
+       hours_ebox.signal_focus_in_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_in_event), SMPTE_Hours));
+       minutes_ebox.signal_focus_in_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_in_event), SMPTE_Minutes));
+       seconds_ebox.signal_focus_in_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_in_event), SMPTE_Seconds));
+       frames_ebox.signal_focus_in_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_in_event), SMPTE_Frames));
+       audio_frames_ebox.signal_focus_in_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_in_event), AudioFrames));
+       bars_ebox.signal_focus_in_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_in_event), Bars));
+       beats_ebox.signal_focus_in_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_in_event), Beats));
+       ticks_ebox.signal_focus_in_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_in_event), Ticks));
+       ms_hours_ebox.signal_focus_in_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_in_event), MS_Hours));
+       ms_minutes_ebox.signal_focus_in_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_in_event), MS_Minutes));
+       ms_seconds_ebox.signal_focus_in_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_in_event), MS_Seconds));
+
+       hours_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), SMPTE_Hours));
+       minutes_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), SMPTE_Minutes));
+       seconds_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), SMPTE_Seconds));
+       frames_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), SMPTE_Frames));
+       audio_frames_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), AudioFrames));
+       bars_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), Bars));
+       beats_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), Beats));
+       ticks_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), Ticks));
+       ms_hours_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), MS_Hours));
+       ms_minutes_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), MS_Minutes));
+       ms_seconds_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), MS_Seconds));
+
+       Gtkmm2ext::set_size_request_to_display_given_text (hours_label, "-88", 0, 2);
+       Gtkmm2ext::set_size_request_to_display_given_text (minutes_label, "88", 0, 2);
+       Gtkmm2ext::set_size_request_to_display_given_text (seconds_label, "88", 0, 2);
+       Gtkmm2ext::set_size_request_to_display_given_text (frames_label, "88", 0, 2);
+
+       Gtkmm2ext::set_size_request_to_display_given_text (bars_label, "-888", 0, 2);
+       Gtkmm2ext::set_size_request_to_display_given_text (beats_label, "88", 0, 2);
+       Gtkmm2ext::set_size_request_to_display_given_text (ticks_label, "8888", 0, 2);
+
+       Gtkmm2ext::set_size_request_to_display_given_text (audio_frames_label, "4294967296", 0, 2);
 }
 
 void
-AudioClock::realize_impl ()
+AudioClock::on_realize ()
 {
-       HBox::realize_impl ();
+       HBox::on_realize ();
 }
 
 void
@@ -695,56 +696,54 @@ AudioClock::field_key_release_event (GdkEventKey *ev, Field field)
 gint
 AudioClock::field_focus_in_event (GdkEventFocus *ev, Field field)
 {
-       ARDOUR_UI::instance()->allow_focus (true);
-
        key_entry_state = 0;
 
        switch (field) {
        case SMPTE_Hours:
-               hours_ebox.set_flags (GTK_HAS_FOCUS);
-               hours_ebox.set_state (GTK_STATE_ACTIVE);
+               hours_ebox.set_flags (Gtk::HAS_FOCUS);
+               hours_ebox.set_state (Gtk::STATE_ACTIVE);
                break;
        case SMPTE_Minutes:
-               minutes_ebox.set_flags (GTK_HAS_FOCUS);
-               minutes_ebox.set_state (GTK_STATE_ACTIVE);
+               minutes_ebox.set_flags (Gtk::HAS_FOCUS);
+               minutes_ebox.set_state (Gtk::STATE_ACTIVE);
                break;
        case SMPTE_Seconds:
-               seconds_ebox.set_flags (GTK_HAS_FOCUS);
-               seconds_ebox.set_state (GTK_STATE_ACTIVE);
+               seconds_ebox.set_flags (Gtk::HAS_FOCUS);
+               seconds_ebox.set_state (Gtk::STATE_ACTIVE);
                break;
        case SMPTE_Frames:
-               frames_ebox.set_flags (GTK_HAS_FOCUS);
-               frames_ebox.set_state (GTK_STATE_ACTIVE);
+               frames_ebox.set_flags (Gtk::HAS_FOCUS);
+               frames_ebox.set_state (Gtk::STATE_ACTIVE);
                break;
 
        case AudioFrames:
-               audio_frames_ebox.set_flags (GTK_HAS_FOCUS);
-               audio_frames_ebox.set_state (GTK_STATE_ACTIVE);
+               audio_frames_ebox.set_flags (Gtk::HAS_FOCUS);
+               audio_frames_ebox.set_state (Gtk::STATE_ACTIVE);
                break;
 
        case MS_Hours:
-               ms_hours_ebox.set_flags (GTK_HAS_FOCUS);
-               ms_hours_ebox.set_state (GTK_STATE_ACTIVE);
+               ms_hours_ebox.set_flags (Gtk::HAS_FOCUS);
+               ms_hours_ebox.set_state (Gtk::STATE_ACTIVE);
                break;
        case MS_Minutes:
-               ms_minutes_ebox.set_flags (GTK_HAS_FOCUS);
-               ms_minutes_ebox.set_state (GTK_STATE_ACTIVE);
+               ms_minutes_ebox.set_flags (Gtk::HAS_FOCUS);
+               ms_minutes_ebox.set_state (Gtk::STATE_ACTIVE);
                break;
        case MS_Seconds:
-               ms_seconds_ebox.set_flags (GTK_HAS_FOCUS);
-               ms_seconds_ebox.set_state (GTK_STATE_ACTIVE);
+               ms_seconds_ebox.set_flags (Gtk::HAS_FOCUS);
+               ms_seconds_ebox.set_state (Gtk::STATE_ACTIVE);
                break;
        case Bars:
-               bars_ebox.set_flags (GTK_HAS_FOCUS);
-               bars_ebox.set_state (GTK_STATE_ACTIVE);
+               bars_ebox.set_flags (Gtk::HAS_FOCUS);
+               bars_ebox.set_state (Gtk::STATE_ACTIVE);
                break;
        case Beats:
-               beats_ebox.set_flags (GTK_HAS_FOCUS);
-               beats_ebox.set_state (GTK_STATE_ACTIVE);
+               beats_ebox.set_flags (Gtk::HAS_FOCUS);
+               beats_ebox.set_state (Gtk::STATE_ACTIVE);
                break;
        case Ticks:
-               ticks_ebox.set_flags (GTK_HAS_FOCUS);
-               ticks_ebox.set_state (GTK_STATE_ACTIVE);
+               ticks_ebox.set_flags (Gtk::HAS_FOCUS);
+               ticks_ebox.set_state (Gtk::STATE_ACTIVE);
                break;
        }
 
@@ -754,56 +753,54 @@ AudioClock::field_focus_in_event (GdkEventFocus *ev, Field field)
 gint
 AudioClock::field_focus_out_event (GdkEventFocus *ev, Field field)
 {
-       ARDOUR_UI::instance()->allow_focus (false);
-
        switch (field) {
 
        case SMPTE_Hours:
-               hours_ebox.unset_flags (GTK_HAS_FOCUS);
-               hours_ebox.set_state (GTK_STATE_NORMAL);
+               hours_ebox.unset_flags (Gtk::HAS_FOCUS);
+               hours_ebox.set_state (Gtk::STATE_NORMAL);
                break;
        case SMPTE_Minutes:
-               minutes_ebox.unset_flags (GTK_HAS_FOCUS);
-               minutes_ebox.set_state (GTK_STATE_NORMAL);
+               minutes_ebox.unset_flags (Gtk::HAS_FOCUS);
+               minutes_ebox.set_state (Gtk::STATE_NORMAL);
                break;
        case SMPTE_Seconds:
-               seconds_ebox.unset_flags (GTK_HAS_FOCUS);
-               seconds_ebox.set_state (GTK_STATE_NORMAL);
+               seconds_ebox.unset_flags (Gtk::HAS_FOCUS);
+               seconds_ebox.set_state (Gtk::STATE_NORMAL);
                break;
        case SMPTE_Frames:
-               frames_ebox.unset_flags (GTK_HAS_FOCUS);
-               frames_ebox.set_state (GTK_STATE_NORMAL);
+               frames_ebox.unset_flags (Gtk::HAS_FOCUS);
+               frames_ebox.set_state (Gtk::STATE_NORMAL);
                break;
 
        case AudioFrames:
-               audio_frames_ebox.unset_flags (GTK_HAS_FOCUS);
-               audio_frames_ebox.set_state (GTK_STATE_NORMAL);
+               audio_frames_ebox.unset_flags (Gtk::HAS_FOCUS);
+               audio_frames_ebox.set_state (Gtk::STATE_NORMAL);
                break;
 
        case MS_Hours:
-               ms_hours_ebox.unset_flags (GTK_HAS_FOCUS);
-               ms_hours_ebox.set_state (GTK_STATE_NORMAL);
+               ms_hours_ebox.unset_flags (Gtk::HAS_FOCUS);
+               ms_hours_ebox.set_state (Gtk::STATE_NORMAL);
                break;
        case MS_Minutes:
-               ms_minutes_ebox.unset_flags (GTK_HAS_FOCUS);
-               ms_minutes_ebox.set_state (GTK_STATE_NORMAL);
+               ms_minutes_ebox.unset_flags (Gtk::HAS_FOCUS);
+               ms_minutes_ebox.set_state (Gtk::STATE_NORMAL);
                break;
        case MS_Seconds:
-               ms_seconds_ebox.unset_flags (GTK_HAS_FOCUS);
-               ms_seconds_ebox.set_state (GTK_STATE_NORMAL);
+               ms_seconds_ebox.unset_flags (Gtk::HAS_FOCUS);
+               ms_seconds_ebox.set_state (Gtk::STATE_NORMAL);
                break;
 
        case Bars:
-               bars_ebox.unset_flags (GTK_HAS_FOCUS);
-               bars_ebox.set_state (GTK_STATE_NORMAL);
+               bars_ebox.unset_flags (Gtk::HAS_FOCUS);
+               bars_ebox.set_state (Gtk::STATE_NORMAL);
                break;
        case Beats:
-               beats_ebox.unset_flags (GTK_HAS_FOCUS);
-               beats_ebox.set_state (GTK_STATE_NORMAL);
+               beats_ebox.unset_flags (Gtk::HAS_FOCUS);
+               beats_ebox.set_state (Gtk::STATE_NORMAL);
                break;
        case Ticks:
-               ticks_ebox.unset_flags (GTK_HAS_FOCUS);
-               ticks_ebox.set_state (GTK_STATE_NORMAL);
+               ticks_ebox.unset_flags (Gtk::HAS_FOCUS);
+               ticks_ebox.set_state (Gtk::STATE_NORMAL);
                break;
        }
 
@@ -906,7 +903,7 @@ AudioClock::field_button_press_event (GdkEventButton *ev, Field field)
        
                 /* make absolutely sure that the pointer is grabbed */
                gdk_pointer_grab(ev->window,FALSE ,
-                                GdkEventMask( GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK |GDK_BUTTON_RELEASE_MASK), 
+                                GdkEventMask( Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK |Gdk::BUTTON_RELEASE_MASK), 
                                 NULL,NULL,ev->time);
                dragging = true;
                drag_accum = 0;
@@ -1637,11 +1634,11 @@ AudioClock::build_ops_menu ()
        MenuList& mode_items = mode_menu->items();
        mode_menu->set_name ("ArdourContextMenu");
        
-       mode_items.push_back (MenuElem (_("SMPTE"), bind (slot (*this, &AudioClock::set_mode), SMPTE)));
-       mode_items.push_back (MenuElem (_("Bars:Beats"), bind (slot (*this, &AudioClock::set_mode), BBT)));
-       mode_items.push_back (MenuElem (_("Minutes:Seconds"), bind (slot (*this, &AudioClock::set_mode), MinSec)));
-       mode_items.push_back (MenuElem (_("Audio Frames"), bind (slot (*this, &AudioClock::set_mode), Frames)));
-       mode_items.push_back (MenuElem (_("Off"), bind (slot (*this, &AudioClock::set_mode), Off)));
+       mode_items.push_back (MenuElem (_("SMPTE"), bind (mem_fun(*this, &AudioClock::set_mode), SMPTE)));
+       mode_items.push_back (MenuElem (_("Bars:Beats"), bind (mem_fun(*this, &AudioClock::set_mode), BBT)));
+       mode_items.push_back (MenuElem (_("Minutes:Seconds"), bind (mem_fun(*this, &AudioClock::set_mode), MinSec)));
+       mode_items.push_back (MenuElem (_("Audio Frames"), bind (mem_fun(*this, &AudioClock::set_mode), Frames)));
+       mode_items.push_back (MenuElem (_("Off"), bind (mem_fun(*this, &AudioClock::set_mode), Off)));
 
        ops_items.push_back (MenuElem (_("Mode"), *mode_menu));
 }
@@ -1656,9 +1653,8 @@ AudioClock::set_mode (Mode m)
           started editing the clock and then we switch clock mode.
        */
 
-       if (ARDOUR_UI::instance()) {
-               ARDOUR_UI::instance()->allow_focus (false);
-       }
+       // GTK2FIX might need an equivalent here for drop focus
+
 
        if (_mode == m) {
                return;