@@ -511,7 +511,7 @@ bool WayfireMenu::on_sort(Gtk::FlowBoxChild *a, Gtk::FlowBoxChild *b)
511511
512512void WayfireMenu::on_popover_shown ()
513513{
514- search_entry.delete_text (0 , search_entry.get_text_length ());
514+ search_entry.delete_text (0 , search_entry.get_text (). length ());
515515 on_search_changed ();
516516 set_category (" All" );
517517 flowbox.unselect_all ();
@@ -594,6 +594,12 @@ void WayfireMenu::setup_popover_layout()
594594 signals.push_back (typing_gesture->signal_key_pressed ().connect ([=] (guint keyval, guint keycode,
595595 Gdk::ModifierType state)
596596 {
597+ Gtk::Widget* focused = nullptr ;
598+ auto root = popover_layout_box.get_root ();
599+ if (root)
600+ {
601+ focused = root->get_focus ();
602+ }
597603 if ((keyval == GDK_KEY_Return) || (keyval == GDK_KEY_KP_Enter))
598604 {
599605 auto children = flowbox.get_selected_children ();
@@ -608,22 +614,29 @@ void WayfireMenu::setup_popover_layout()
608614 {
609615 button->get_popover ()->hide ();
610616 fullscreen.hide ();
617+ return true ;
611618 } else if ((keyval == GDK_KEY_Up) ||
612619 (keyval == GDK_KEY_Down) ||
613620 (keyval == GDK_KEY_Left) ||
614621 (keyval == GDK_KEY_Right))
615622 {
616623 return false ;
617- } else if (search_entry. has_focus ( ))
624+ } else if (focused && focused-> is_ancestor (search_entry ))
618625 {
619626 return false ;
620627 } else
621628 {
622- search_entry.grab_focus ();
629+ std::string input = gdk_keyval_name (keyval);
630+ if (!search_entry.grab_focus ())
631+ {
632+ std::cerr << " Unable to steal focus to entry" << std::endl;
633+ }
634+ search_entry.set_text (search_entry.get_text ()+ input);
635+ auto pos = search_entry.get_text ().length ();
636+ search_entry.select_region (pos, pos);
623637 on_search_changed ();
638+ return false ;
624639 }
625-
626- return false ;
627640 }, false ));
628641 popover_layout_box.add_controller (typing_gesture);
629642 signals.push_back (button->get_popover ()->signal_closed ().connect ([=] ()
0 commit comments