diff options
-rw-r--r-- | vcl/inc/unx/gtk/gtkframe.hxx | 1 | ||||
-rw-r--r-- | vcl/unx/gtk/gtksalmenu.cxx | 1 | ||||
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkframe.cxx | 7 |
3 files changed, 8 insertions, 1 deletions
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx index 0f22d4661373..74649cb9d45d 100644 --- a/vcl/inc/unx/gtk/gtkframe.hxx +++ b/vcl/inc/unx/gtk/gtkframe.hxx @@ -546,6 +546,7 @@ public: guint* pGdkKeyCode, GdkModifierType *pGdkModifiers); static guint32 GetLastInputEventTime(); + static void UpdateLastInputEventTime(guint32 nUserInputTime); }; #define OOO_TYPE_FIXED ooo_fixed_get_type() diff --git a/vcl/unx/gtk/gtksalmenu.cxx b/vcl/unx/gtk/gtksalmenu.cxx index c5cbb542c591..2cf072a01d5d 100644 --- a/vcl/unx/gtk/gtksalmenu.cxx +++ b/vcl/unx/gtk/gtksalmenu.cxx @@ -750,6 +750,7 @@ bool GtkSalMenu::TakeFocus() static void MenuBarReturnFocus(GtkMenuShell*, gpointer menu) { + GtkSalFrame::UpdateLastInputEventTime(gtk_get_current_event_time()); GtkSalMenu* pMenu = static_cast<GtkSalMenu*>(menu); pMenu->ReturnFocus(); } diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx index d34eeed28566..eb8b718dbef5 100644 --- a/vcl/unx/gtk3/gtk3gtkframe.cxx +++ b/vcl/unx/gtk3/gtk3gtkframe.cxx @@ -2039,8 +2039,13 @@ guint32 GtkSalFrame::GetLastInputEventTime() return nLastUserInputTime; } -static void UpdateLastInputEventTime(guint32 nUserInputTime) +void GtkSalFrame::UpdateLastInputEventTime(guint32 nUserInputTime) { + //gtk3 can generate a synthetic crossing event with a useless 0 + //(GDK_CURRENT_TIME) timestamp on showing a menu from the main + //menubar, which is unhelpful, so ignore the 0 timestamps + if (nUserInputTime == GDK_CURRENT_TIME) + return; nLastUserInputTime = nUserInputTime; } |