From 06c37b7c3ff7d8a920a8a5dd27a11b538b359f15 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 29 Jul 2017 02:05:28 +0200 Subject: Fix edit-cursor in TextEntry Gtk::WINDOW_POPUP cannot be used for windows that require focus. A gtk-entry without focus does not show an edit-cursor. --- gtk2_ardour/floating_text_entry.cc | 22 ++++++---------------- gtk2_ardour/floating_text_entry.h | 2 -- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/gtk2_ardour/floating_text_entry.cc b/gtk2_ardour/floating_text_entry.cc index cd3d015110..e22e77982c 100644 --- a/gtk2_ardour/floating_text_entry.cc +++ b/gtk2_ardour/floating_text_entry.cc @@ -28,13 +28,14 @@ #include "pbd/i18n.h" FloatingTextEntry::FloatingTextEntry (Gtk::Window* parent, const std::string& initial_contents) - : Gtk::Window (Gtk::WINDOW_POPUP) - , entry_changed (false) - , by_popup_menu (false) + : Gtk::Window () + , entry_changed (false) { //set_name (X_("FloatingTextEntry")); set_position (Gtk::WIN_POS_MOUSE); set_border_width (0); + set_type_hint(Gdk::WINDOW_TYPE_HINT_POPUP_MENU); + set_resizable (false); if (!initial_contents.empty()) { entry.set_text (initial_contents); @@ -46,23 +47,16 @@ FloatingTextEntry::FloatingTextEntry (Gtk::Window* parent, const std::string& in _connections.push_back (entry.signal_key_press_event().connect (sigc::mem_fun (*this, &FloatingTextEntry::key_press), false)); _connections.push_back (entry.signal_key_release_event().connect (sigc::mem_fun (*this, &FloatingTextEntry::key_release), false)); _connections.push_back (entry.signal_button_press_event().connect (sigc::mem_fun (*this, &FloatingTextEntry::button_press))); - _connections.push_back (entry.signal_populate_popup().connect (sigc::mem_fun (*this, &FloatingTextEntry::populate_popup))); entry.select_region (0, -1); if (parent) { - _connections.push_back (parent->signal_focus_out_event().connect (sigc::mem_fun (*this, &FloatingTextEntry::entry_focus_out))); + set_transient_for (*parent); } add (entry); } -void -FloatingTextEntry::populate_popup (Gtk::Menu *) -{ - by_popup_menu = true; -} - void FloatingTextEntry::changed () { @@ -74,17 +68,13 @@ FloatingTextEntry::on_realize () { Gtk::Window::on_realize (); get_window()->set_decorations (Gdk::WMDecoration (0)); + set_keep_above (true); entry.add_modal_grab (); } bool FloatingTextEntry::entry_focus_out (GdkEventFocus* ev) { - if (by_popup_menu) { - by_popup_menu = false; - return false; - } - entry.remove_modal_grab (); if (entry_changed) { disconect_signals (); diff --git a/gtk2_ardour/floating_text_entry.h b/gtk2_ardour/floating_text_entry.h index f52447de16..0527feca99 100644 --- a/gtk2_ardour/floating_text_entry.h +++ b/gtk2_ardour/floating_text_entry.h @@ -39,7 +39,6 @@ public: private: Gtk::Entry entry; bool entry_changed; - bool by_popup_menu; /* handlers for Entry events */ bool entry_focus_out (GdkEventFocus*); @@ -48,7 +47,6 @@ private: void activated (); bool button_press (GdkEventButton*); void changed (); - void populate_popup (Gtk::Menu*); void idle_delete_self (); void disconect_signals (); -- cgit v1.2.3