summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-09-04 12:05:04 +0100
committerEike Rathke <erack@redhat.com>2017-09-15 16:49:39 +0200
commitaaa6ceb9fa91f38d1c32cfe3882255cfd1490ab9 (patch)
tree4f70ec0e365e4831f4906335da4e85dd75995a47
parent61d85c4e7c30ea0f5242d927b7456190020b4fbe (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.hxx2
-rw-r--r--vcl/unx/gtk/gtksalframe.cxx4
-rw-r--r--vcl/unx/gtk3/gtk3gtkframe.cxx40
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 )