vcl/unx/gtk3/gtk3gtkframe.cxx | 3 +++ 1 file changed, 3 insertions(+) New commits: commit b7411079bb833aa2857aa4b0de7cd4eeb6dc06fa Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Mon Jan 27 16:26:56 2020 +0000 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Mon Jan 27 21:07:08 2020 +0100
vcl: ignore floating window set-focus events because they generate unwanted lose focus events in their parent. We only want these set-focus events for native widgets hosted in the sidebar. This happens with the font widget in Writer, it displays a substituted font and ComboBox::Impl::ImplUpdateFloatSelection() can't find it as aSearchStr because it's substituted so there's no entry. Something like this should reproduce it: 1. select fonts until the MRU list is full 2. apply a substituted font 3. click on font combo box and select any font that's not in MRU list 4. click on font combo box, notice empty string This is called when losing focus: 0 ComboBox::Impl::ImplUpdateFloatSelection() (this=0x6fcd9e0) at vcl/source/control/combobox.cxx:858 1 ComboBox::SetText(rtl::OUString const&) (this=0x6ffa1c0, rStr="Calibri") at vcl/source/control/combobox.cxx:800 2 (anonymous namespace)::SvxFontNameBox_Impl::EventNotify(NotifyEvent&) (this=0x6ffa1c0, rNEvt=...) at svx/source/tbxctrls/tbcontrl.cxx:1476 3 vcl::Window::CompatNotify(NotifyEvent&) (this=0x6ffa1c0, rNEvt=...) at vcl/source/window/window.cxx:3874 4 vcl::Window::EventNotify(NotifyEvent&) (this=0x7004f10, rNEvt=...) at vcl/source/window/event.cxx:207 5 Control::EventNotify(NotifyEvent&) (this=0x7004f10, rNEvt=...) at vcl/source/control/ctrl.cxx:257 6 vcl::Window::CompatNotify(NotifyEvent&) (this=0x7004f10, rNEvt=...) at vcl/source/window/window.cxx:3874 7 vcl::Window::LoseFocus() (this=0x7004f10) at vcl/source/window/window.cxx:1822 8 Edit::LoseFocus() (this=0x7004f10) at vcl/source/control/edit.cxx:1899 9 vcl::Window::CompatLoseFocus() (this=0x7004f10) at vcl/source/window/window.cxx:3848 10 vcl::Window::ImplGrabFocus(GetFocusFlags) (this=0x6ffb9d0, nFlags=GetFocusFlags::NONE) at vcl/source/window/mouse.cxx:350 11 vcl::Window::GrabFocus() (this=0x6ffb9d0) at vcl/source/window/window.cxx:2979 But then later the mouse-button-up event causes some MRU handling to get the currently selected entry, and if that is LISTBOX_ENTRY_NOTFOUND an empty string is added instead of what was selected, and then later we get asserts about out-of-bounds accesses because this sitation is unexpected. 0 ImplListBoxWindow::ImplCallSelect() (this=0x7006750) at vcl/source/control/imp_listbox.cxx:701 1 ImplListBoxWindow::Tracking(TrackingEvent const&) (this=0x7006750, rTEvt=...) at vcl/source/control/imp_listbox.cxx:1186 2 vcl::Window::EndTracking(TrackingEventFlags) (this=0x7006750, nFlags=TrackingEventFlags::NONE) at vcl/source/window/window2.cxx:307 3 ImplHandleMouseEvent(VclPtr<vcl::Window> const&, MouseNotifyEvent, bool, long, long, unsigned long, unsigned short, MouseEventModifiers) (xWindow=..., nSVEvent=MouseNotifyEvent::MOUSEBUTTONUP, bMouseLeave=false, nX=191, nY=292, nMsgTime=157599233, nCode=1, nMode=(MouseEventModifiers::SIMPLECLICK | MouseEventModifiers::SELECT)) at vcl/source/window/winproc.cxx:715 4 ImplHandleSalMouseButtonUp(vcl::Window*, SalMouseEvent const*) (pWindow=0x6ffc300, pEvent=0x7ffea6457a70) at vcl/source/window/winproc.cxx:2072 Change-Id: I2c23889ea1bbb9a20c948d31b04bf22b68a62248 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87539 Tested-by: Michael Stahl <michael.st...@cib.de> Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx index 8b1d165520dc..6096dbd09ba0 100644 --- a/vcl/unx/gtk3/gtk3gtkframe.cxx +++ b/vcl/unx/gtk3/gtk3gtkframe.cxx @@ -3053,6 +3053,9 @@ gboolean GtkSalFrame::signalFocus( GtkWidget*, GdkEventFocus* pEvent, gpointer f void GtkSalFrame::signalSetFocus(GtkWindow*, GtkWidget* pWidget, gpointer frame) { + // do not propagate focus get/lose if floats are open + if (m_nFloats) + return; // change of focus between native widgets within the toplevel GtkSalFrame* pThis = static_cast<GtkSalFrame*>(frame); // tdf#129634 interpret losing focus as focus passing explicitly to another widget _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits