Skip to content

Commit 0dde262

Browse files
committed
panel: menu: fixed is_focus always being false
panel: menu: first character after focus steal needs to be set
1 parent b63ed36 commit 0dde262

1 file changed

Lines changed: 18 additions & 5 deletions

File tree

src/panel/widgets/menu.cpp

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,7 @@ bool WayfireMenu::on_sort(Gtk::FlowBoxChild *a, Gtk::FlowBoxChild *b)
511511

512512
void 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

Comments
 (0)