diff options
author | Robin Gareus <robin@gareus.org> | 2017-07-29 02:05:28 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2017-07-29 02:05:37 +0200 |
commit | 06c37b7c3ff7d8a920a8a5dd27a11b538b359f15 (patch) | |
tree | 54294af1c29951e7fad4bc966251088fb99b8906 | |
parent | b5e0b5b09f41d2529bf4ba37f69602f914828e58 (diff) |
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.
-rw-r--r-- | gtk2_ardour/floating_text_entry.cc | 22 | ||||
-rw-r--r-- | 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,24 +47,17 @@ 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 () { entry_changed = true; @@ -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 (); |