diff options
author | Caolán McNamara <caolanm@redhat.com> | 2017-09-04 12:05:04 +0100 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2017-09-15 16:49:39 +0200 |
commit | aaa6ceb9fa91f38d1c32cfe3882255cfd1490ab9 (patch) | |
tree | 4f70ec0e365e4831f4906335da4e85dd75995a47 | |
parent | 61d85c4e7c30ea0f5242d927b7456190020b4fbe (diff) |
Resolves: tdf#110452 stop menubar processing Alt+foo if handled by core widget
Reviewed-on: https://gerrit.libreoffice.org/41884
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 3266c3bf545cc3045f843f764b4c420241d9e4da)
Change-Id: I69f975d0f7a753e55f72fcd63f6580e958a80f38
Reviewed-on: https://gerrit.libreoffice.org/41894
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Eike Rathke <erack@redhat.com>
-rw-r--r-- | vcl/inc/unx/gtk/gtkframe.hxx | 2 | ||||
-rw-r--r-- | vcl/unx/gtk/gtksalframe.cxx | 4 | ||||
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkframe.cxx | 40 |
3 files changed, 26 insertions, 20 deletions
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx index 37a4facabd0c..1f28dd0804bf 100644 --- a/vcl/inc/unx/gtk/gtkframe.hxx +++ b/vcl/inc/unx/gtk/gtkframe.hxx @@ -289,7 +289,7 @@ class GtkSalFrame : public SalFrame void Center(); void SetDefaultSize(); - void doKeyCallback( guint state, + bool doKeyCallback( guint state, guint keyval, guint16 hardware_keycode, guint8 group, diff --git a/vcl/unx/gtk/gtksalframe.cxx b/vcl/unx/gtk/gtksalframe.cxx index 95a8b8cbd7fd..6f97912171fe 100644 --- a/vcl/unx/gtk/gtksalframe.cxx +++ b/vcl/unx/gtk/gtksalframe.cxx @@ -362,7 +362,7 @@ GetAlternateKeyCode( const sal_uInt16 nKeyCode ) return aAlternate; } -void GtkSalFrame::doKeyCallback( guint state, +bool GtkSalFrame::doKeyCallback( guint state, guint keyval, guint16 hardware_keycode, guint8 group, @@ -446,6 +446,8 @@ void GtkSalFrame::doKeyCallback( guint state, } else CallCallback( SalEvent::KeyUp, &aEvent ); + + return false; } GtkSalFrame::GtkSalFrame( SalFrame* pParent, SalFrameStyleFlags nStyle ) diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx index 618b9f17caa6..5c34d4f940bc 100644 --- a/vcl/unx/gtk3/gtk3gtkframe.cxx +++ b/vcl/unx/gtk3/gtk3gtkframe.cxx @@ -369,7 +369,7 @@ GetAlternateKeyCode( const sal_uInt16 nKeyCode ) static bool dumpframes = false; -void GtkSalFrame::doKeyCallback( guint state, +bool GtkSalFrame::doKeyCallback( guint state, guint keyval, guint16 hardware_keycode, guint8 group, @@ -395,19 +395,19 @@ void GtkSalFrame::doKeyCallback( guint state, { fprintf( stderr, "force widget_queue_draw\n"); gtk_widget_queue_draw(GTK_WIDGET(m_pFixedContainer)); - return; + return false; } else if (keyval == GDK_KEY_1) { fprintf( stderr, "force repaint all\n"); TriggerPaintEvent(); - return; + return false; } else if (keyval == GDK_KEY_2) { dumpframes = !dumpframes; fprintf(stderr, "toggle dump frames to %d\n", dumpframes); - return; + return false; } } #endif @@ -456,11 +456,12 @@ void GtkSalFrame::doKeyCallback( guint state, aEvent.mnCode |= GetKeyModCode( state ); + bool bStopProcessingKey; if (bDown) { - bool bHandled = CallCallbackExc( SalEvent::KeyInput, &aEvent ); + bStopProcessingKey = CallCallbackExc(SalEvent::KeyInput, &aEvent); // #i46889# copy AlternateKeyCode handling from generic plugin - if( ! bHandled ) + if (!bStopProcessingKey) { KeyAlternate aAlternate = GetAlternateKeyCode( aEvent.mnCode ); if( aAlternate.nKeyCode ) @@ -468,16 +469,17 @@ void GtkSalFrame::doKeyCallback( guint state, aEvent.mnCode = aAlternate.nKeyCode; if( aAlternate.nCharCode ) aEvent.mnCharCode = aAlternate.nCharCode; - CallCallbackExc( SalEvent::KeyInput, &aEvent ); + bStopProcessingKey = CallCallbackExc(SalEvent::KeyInput, &aEvent); } } if( bSendRelease && ! aDel.isDeleted() ) { - CallCallbackExc( SalEvent::KeyUp, &aEvent ); + CallCallbackExc(SalEvent::KeyUp, &aEvent); } } else - CallCallbackExc( SalEvent::KeyUp, &aEvent ); + bStopProcessingKey = CallCallbackExc(SalEvent::KeyUp, &aEvent); + return bStopProcessingKey; } GtkSalFrame::GtkSalFrame( SalFrame* pParent, SalFrameStyleFlags nStyle ) @@ -3099,6 +3101,8 @@ gboolean GtkSalFrame::signalKey(GtkWidget* pWidget, GdkEventKey* pEvent, gpointe return true; } + bool bStopProcessingKey = false; + // handle modifiers if( pEvent->keyval == GDK_KEY_Shift_L || pEvent->keyval == GDK_KEY_Shift_R || pEvent->keyval == GDK_KEY_Control_L || pEvent->keyval == GDK_KEY_Control_R || @@ -3175,14 +3179,14 @@ gboolean GtkSalFrame::signalKey(GtkWidget* pWidget, GdkEventKey* pEvent, gpointe } else { - pThis->doKeyCallback( pEvent->state, - pEvent->keyval, - pEvent->hardware_keycode, - pEvent->group, - pEvent->time, - sal_Unicode(gdk_keyval_to_unicode( pEvent->keyval )), - (pEvent->type == GDK_KEY_PRESS), - false ); + bStopProcessingKey = pThis->doKeyCallback(pEvent->state, + pEvent->keyval, + pEvent->hardware_keycode, + pEvent->group, + pEvent->time, + sal_Unicode(gdk_keyval_to_unicode( pEvent->keyval )), + (pEvent->type == GDK_KEY_PRESS), + false); if( ! aDel.isDeleted() ) pThis->m_nKeyModifiers = ModKeyFlags::NONE; } @@ -3190,7 +3194,7 @@ gboolean GtkSalFrame::signalKey(GtkWidget* pWidget, GdkEventKey* pEvent, gpointe if( !aDel.isDeleted() && pThis->m_pIMHandler ) pThis->m_pIMHandler->updateIMSpotLocation(); - return false; + return bStopProcessingKey; } gboolean GtkSalFrame::signalDelete( GtkWidget*, GdkEvent*, gpointer frame ) |