summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/time_axis_view.cc70
-rw-r--r--gtk2_ardour/time_axis_view.h2
2 files changed, 24 insertions, 48 deletions
diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc
index 9e8fdfd6b0..7461035a78 100644
--- a/gtk2_ardour/time_axis_view.cc
+++ b/gtk2_ardour/time_axis_view.cc
@@ -83,7 +83,6 @@ TimeAxisView::TimeAxisView (ARDOUR::Session* sess, PublicEditor& ed, TimeAxisVie
, _canvas_display (0)
, _y_position (0)
, _editor (ed)
- , name_editor (0)
, name_entry (0)
, control_parent (0)
, _order (0)
@@ -565,7 +564,7 @@ TimeAxisView::name_entry_key_release (GdkEventKey* ev)
switch (ev->keyval) {
case GDK_Escape:
- name_editor->response (RESPONSE_CANCEL);
+ end_name_edit (RESPONSE_CANCEL);
return true;
/* Shift+Tab Keys Pressed. Note that for Shift+Tab, GDK actually
@@ -574,7 +573,7 @@ TimeAxisView::name_entry_key_release (GdkEventKey* ev)
*/
case GDK_ISO_Left_Tab:
case GDK_Tab:
- name_editor->response (RESPONSE_ACCEPT);
+ end_name_edit (RESPONSE_ACCEPT);
return true;
default:
break;
@@ -583,74 +582,49 @@ TimeAxisView::name_entry_key_release (GdkEventKey* ev)
return false;
}
+bool
+TimeAxisView::name_entry_focus_out (GdkEventFocus*)
+{
+ end_name_edit (RESPONSE_ACCEPT);
+ return false;
+}
+
void
TimeAxisView::begin_name_edit ()
{
- if (name_editor) {
+ if (name_entry) {
return;
}
if (can_edit_name()) {
- Gtk::Widget* w = name_label.get_toplevel();
- Gtk::Window* win = dynamic_cast<Gtk::Window*>(w);
-
- if (!win) {
- return;
- }
-
- name_editor = new ArdourDialog (*win, string_compose (_("Edit name for %1"), name()), true);
- name_editor->add_button (_("Cancel"), RESPONSE_CANCEL);
- name_editor->add_button (_("Save"), RESPONSE_OK);
- name_editor->add_button (_("Save & Edit Next"), RESPONSE_ACCEPT);
-
name_entry = manage (new Gtkmm2ext::FocusEntry);
name_entry->set_name ("EditorTrackNameDisplay");
name_entry->signal_key_press_event().connect (sigc::mem_fun (*this, &TimeAxisView::name_entry_key_press), false);
name_entry->signal_key_release_event().connect (sigc::mem_fun (*this, &TimeAxisView::name_entry_key_release), false);
+ name_entry->signal_focus_out_event().connect (sigc::mem_fun (*this, &TimeAxisView::name_entry_focus_out));
name_entry->set_text (name_label.get_text());
- name_entry->signal_activate().connect (sigc::bind (sigc::mem_fun (*name_editor, &ArdourDialog::response), RESPONSE_OK));
-
- Gtk::HBox* hbox = manage (new HBox);
- Gtk::Label* label = manage (new Label (_("New name:" " ")));
-
- hbox->pack_start (*label, false, false);
- hbox->pack_start (*name_entry, true, true);
- name_editor->get_vbox()->pack_start (*hbox, false, false);
+ name_entry->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &TimeAxisView::end_name_edit), RESPONSE_OK));
- label->show();
+ if (name_label.is_ancestor (name_hbox)) {
+ name_hbox.remove (name_label);
+ }
+
+ name_hbox.pack_start (*name_entry);
name_entry->show ();
- hbox->show ();
name_entry->select_region (0, -1);
name_entry->set_state (STATE_SELECTED);
name_entry->grab_focus ();
name_entry->start_editing (0);
-
- name_editor->signal_response().connect (sigc::mem_fun (*this, &TimeAxisView::end_name_edit));
-
- name_editor->set_position (WIN_POS_MOUSE);
- name_editor->present ();
-
- /* move it to line up with the name label, and some distance to
- * the right of it
- */
-
- int x, y;
- int wx, wy;
-
- name_label.translate_coordinates (_editor, 0, 0, x, y);
- _editor.get_position (wx, wy);
-
- name_editor->move (wx + x + 250, wy + y);
}
}
void
TimeAxisView::end_name_edit (int response)
{
- if (!name_editor) {
+ if (!name_entry) {
return;
}
@@ -667,11 +641,13 @@ TimeAxisView::end_name_edit (int response)
edit_next = true;
}
- delete_when_idle (name_editor);
-
- name_editor = 0;
+ /* this will delete the name_entry */
+ name_hbox.remove (*name_entry);
name_entry = 0;
+ name_hbox.pack_start (name_label);
+ name_label.show ();
+
if (edit_next) {
TrackViewList const & allviews = _editor.get_track_views ();
diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h
index 6e659e47a7..17dfec986b 100644
--- a/gtk2_ardour/time_axis_view.h
+++ b/gtk2_ardour/time_axis_view.h
@@ -224,8 +224,8 @@ class TimeAxisView : public virtual AxisView
bool name_entry_key_release (GdkEventKey *ev);
bool name_entry_key_press (GdkEventKey *ev);
+ bool name_entry_focus_out (GdkEventFocus *ev);
- ArdourDialog* name_editor;
Gtk::Entry* name_entry;
void begin_name_edit ();
void end_name_edit (int);