From 6725e8b661a9d27ab140fc10d8b1d93f2efe8044 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 15 Dec 2022 18:04:55 +0100 Subject: [PATCH] GTK treeview: click to DnD (not edit), specialize per column --- gtk2_ardour/region_list_base.cc | 13 +++++++------ gtk2_ardour/region_list_base.h | 2 +- gtk2_ardour/route_list_base.cc | 13 +++++++------ gtk2_ardour/route_list_base.h | 2 +- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/gtk2_ardour/region_list_base.cc b/gtk2_ardour/region_list_base.cc index 7c84ae51e1..f757da7887 100644 --- a/gtk2_ardour/region_list_base.cc +++ b/gtk2_ardour/region_list_base.cc @@ -76,10 +76,6 @@ RegionListBase::RegionListBase () _display.set_fixed_height_mode (true); _display.set_reorderable (false); - /* Try to prevent single mouse presses from initiating edits. - * This relies on a hack in gtktreeview.c:gtk_treeview_button_press() */ - _display.set_data ("mouse-edits-require-mod1", (gpointer)0x1); - _model = TreeStore::create (_columns); _model->set_sort_column (0, SORT_ASCENDING); @@ -115,7 +111,7 @@ RegionListBase::RegionListBase () } void -RegionListBase::setup_col (TreeViewColumn* col, int sort_idx, Gtk::AlignmentEnum al, const char* label, const char* tooltip) +RegionListBase::setup_col (TreeViewColumn* col, int sort_idx, Gtk::AlignmentEnum al, const char* label, const char* tooltip, bool require_mod_to_edit) { /* add the label */ Gtk::Label* l = manage (new Label (label)); @@ -135,6 +131,11 @@ RegionListBase::setup_col (TreeViewColumn* col, int sort_idx, Gtk::AlignmentEnum if (renderer) { renderer->property_xalign () = (al == ALIGN_END ? 1.0 : (al == ALIGN_START ? 0.0 : 0.5)); } + if (require_mod_to_edit) { + /* Try to prevent single mouse presses from initiating edits. + * This relies on a hack in gtktreeview.c:gtk_treeview_button_press() */ + col->set_data ("mouse-edits-require-mod1", (gpointer)0x1); + } } void @@ -149,7 +150,7 @@ void RegionListBase::add_name_column () { TreeViewColumn* tvc = append_col (_columns.name, 120); - setup_col (tvc, 0, ALIGN_START, _("Name"), ("Region name")); + setup_col (tvc, 0, ALIGN_START, _("Name"), ("Region name"), true); tvc->set_resizable (true); diff --git a/gtk2_ardour/region_list_base.h b/gtk2_ardour/region_list_base.h index dce5401d94..4950ab3cde 100644 --- a/gtk2_ardour/region_list_base.h +++ b/gtk2_ardour/region_list_base.h @@ -161,7 +161,7 @@ protected: return append_col (col, w); } - void setup_col (Gtk::TreeViewColumn*, int, Gtk::AlignmentEnum, const char*, const char*); + void setup_col (Gtk::TreeViewColumn*, int, Gtk::AlignmentEnum, const char*, const char*, bool require_mod_to_edit = false); void setup_toggle (Gtk::TreeViewColumn*, sigc::slot); void freeze_tree_model (); diff --git a/gtk2_ardour/route_list_base.cc b/gtk2_ardour/route_list_base.cc index 72cd469591..c0b724e004 100644 --- a/gtk2_ardour/route_list_base.cc +++ b/gtk2_ardour/route_list_base.cc @@ -99,10 +99,6 @@ RouteListBase::RouteListBase () _display.set_rules_hint (true); _display.set_size_request (100, -1); - /* Try to prevent single mouse presses from initiating edits. - * This relies on a hack in gtktreeview.c:gtk_treeview_button_press() */ - _display.set_data ("mouse-edits-require-mod1", (gpointer)0x1); - _scroller.add (_display); _scroller.set_policy (POLICY_NEVER, POLICY_AUTOMATIC); @@ -133,12 +129,17 @@ RouteListBase::~RouteListBase () } void -RouteListBase::setup_col (Gtk::TreeViewColumn* tvc, const char* label, const char* tooltip) +RouteListBase::setup_col (Gtk::TreeViewColumn* tvc, const char* label, const char* tooltip, bool require_mod_to_edit) { Gtk::Label* l = manage (new Label (label)); set_tooltip (*l, tooltip); tvc->set_widget (*l); l->show (); + if (require_mod_to_edit) { + /* Try to prevent single mouse presses from initiating edits. + * This relies on a hack in gtktreeview.c:gtk_treeview_button_press() */ + tvc->set_data ("mouse-edits-require-mod1", (gpointer)0x1); + } } void @@ -146,7 +147,7 @@ RouteListBase::add_name_column () { Gtk::TreeViewColumn* tvc = manage (new Gtk::TreeViewColumn ("", _columns.text)); - setup_col (tvc, _("Name"), ("Track/Bus name")); + setup_col (tvc, _("Name"), ("Track/Bus name"), true); CellRendererText* cell = dynamic_cast (tvc->get_first_cell ()); cell->signal_editing_started ().connect (sigc::mem_fun (*this, &RouteListBase::name_edit_started)); diff --git a/gtk2_ardour/route_list_base.h b/gtk2_ardour/route_list_base.h index 9a34a02cf2..0a593c125f 100644 --- a/gtk2_ardour/route_list_base.h +++ b/gtk2_ardour/route_list_base.h @@ -64,7 +64,7 @@ protected: void append_col_mute (); void append_col_solo (); - void setup_col (Gtk::TreeViewColumn*, const char*, const char*); + void setup_col (Gtk::TreeViewColumn*, const char*, const char*, bool require_mod_to_edit = false); template Gtk::TreeViewColumn* append_toggle (Gtk::TreeModelColumn const& col_state, Gtk::TreeModelColumn const& col_viz, sigc::slot cb)