diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-07-05 19:45:58 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2020-07-06 14:52:56 +0200 |
commit | 291f1776a661cd5d809fbe385efd1e1c8432ddd1 (patch) | |
tree | f05105cd4d6bad18bf128af62f67dec69896f7fc /svtools | |
parent | 024bdf31b17814c1c96d7376ac77564a9361be65 (diff) |
split off key processing
so we can explicitly call it rather than let implicit PreNotify
process it
Change-Id: I5f27b8c34a0be7239303307a2d5e93e5de4f4c2a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98172
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'svtools')
-rw-r--r-- | svtools/source/brwbox/editbrowsebox.cxx | 202 |
1 files changed, 104 insertions, 98 deletions
diff --git a/svtools/source/brwbox/editbrowsebox.cxx b/svtools/source/brwbox/editbrowsebox.cxx index 1f79a3686474..4328e22d5ee8 100644 --- a/svtools/source/brwbox/editbrowsebox.cxx +++ b/svtools/source/brwbox/editbrowsebox.cxx @@ -541,118 +541,124 @@ namespace svt BrowseBox::Dispatch( _nId ); } - bool EditBrowseBox::PreNotify(NotifyEvent& rEvt) - { - if (rEvt.GetType() == MouseNotifyEvent::KEYINPUT) - { - if ( (IsEditing() && Controller()->GetWindow().HasChildPathFocus()) - || rEvt.GetWindow() == &GetDataWindow() - || (!IsEditing() && HasChildPathFocus()) - ) + bool EditBrowseBox::ProcessKey(const KeyEvent& rKeyEvent) + { + sal_uInt16 nCode = rKeyEvent.GetKeyCode().GetCode(); + bool bShift = rKeyEvent.GetKeyCode().IsShift(); + bool bCtrl = rKeyEvent.GetKeyCode().IsMod1(); + bool bAlt = rKeyEvent.GetKeyCode().IsMod2(); + bool bLocalSelect = false; + bool bNonEditOnly = false; + sal_uInt16 nId = BROWSER_NONE; + + if (!bAlt && !bCtrl && !bShift ) + switch ( nCode ) { - const KeyEvent* pKeyEvent = rEvt.GetKeyEvent(); - sal_uInt16 nCode = pKeyEvent->GetKeyCode().GetCode(); - bool bShift = pKeyEvent->GetKeyCode().IsShift(); - bool bCtrl = pKeyEvent->GetKeyCode().IsMod1(); - bool bAlt = pKeyEvent->GetKeyCode().IsMod2(); - bool bLocalSelect = false; - bool bNonEditOnly = false; - sal_uInt16 nId = BROWSER_NONE; - - if (!bAlt && !bCtrl && !bShift ) - switch ( nCode ) - { - case KEY_DOWN: nId = BROWSER_CURSORDOWN; break; - case KEY_UP: nId = BROWSER_CURSORUP; break; - case KEY_PAGEDOWN: nId = BROWSER_CURSORPAGEDOWN; break; - case KEY_PAGEUP: nId = BROWSER_CURSORPAGEUP; break; - case KEY_HOME: nId = BROWSER_CURSORHOME; break; - case KEY_END: nId = BROWSER_CURSOREND; break; - - case KEY_TAB: - // ask if traveling to the next cell is allowed - if (IsTabAllowed(true)) - nId = BROWSER_CURSORRIGHT; - break; - - case KEY_RETURN: - // save the cell content (if necessary) - if (IsEditing() && aController->IsValueChangedFromSaved() && !SaveModified()) - { - // maybe we're not visible ... - EnableAndShow(); - aController->GetWindow().GrabFocus(); - return true; - } - // ask if traveling to the next cell is allowed - if (IsTabAllowed(true)) - nId = BROWSER_CURSORRIGHT; - - break; - case KEY_RIGHT: nId = BROWSER_CURSORRIGHT; break; - case KEY_LEFT: nId = BROWSER_CURSORLEFT; break; - case KEY_SPACE: nId = BROWSER_SELECT; bNonEditOnly = bLocalSelect = true; break; - } + case KEY_DOWN: nId = BROWSER_CURSORDOWN; break; + case KEY_UP: nId = BROWSER_CURSORUP; break; + case KEY_PAGEDOWN: nId = BROWSER_CURSORPAGEDOWN; break; + case KEY_PAGEUP: nId = BROWSER_CURSORPAGEUP; break; + case KEY_HOME: nId = BROWSER_CURSORHOME; break; + case KEY_END: nId = BROWSER_CURSOREND; break; + + case KEY_TAB: + // ask if traveling to the next cell is allowed + if (IsTabAllowed(true)) + nId = BROWSER_CURSORRIGHT; + break; - if ( !bAlt && !bCtrl && bShift ) - switch ( nCode ) + case KEY_RETURN: + // save the cell content (if necessary) + if (IsEditing() && aController->IsValueChangedFromSaved() && !SaveModified()) { - case KEY_DOWN: nId = BROWSER_SELECTDOWN; bLocalSelect = true; break; - case KEY_UP: nId = BROWSER_SELECTUP; bLocalSelect = true; break; - case KEY_HOME: nId = BROWSER_SELECTHOME; bLocalSelect = true; break; - case KEY_END: nId = BROWSER_SELECTEND; bLocalSelect = true; break; - case KEY_TAB: - if (IsTabAllowed(false)) - nId = BROWSER_CURSORLEFT; - break; + // maybe we're not visible ... + EnableAndShow(); + aController->GetWindow().GrabFocus(); + return true; } + // ask if traveling to the next cell is allowed + if (IsTabAllowed(true)) + nId = BROWSER_CURSORRIGHT; - if ( !bAlt && bCtrl && bShift ) - switch ( nCode ) - { - case KEY_SPACE: nId = BROWSER_SELECTCOLUMN; bLocalSelect = true; break; - } + break; + case KEY_RIGHT: nId = BROWSER_CURSORRIGHT; break; + case KEY_LEFT: nId = BROWSER_CURSORLEFT; break; + case KEY_SPACE: nId = BROWSER_SELECT; bNonEditOnly = bLocalSelect = true; break; + } + if ( !bAlt && !bCtrl && bShift ) + switch ( nCode ) + { + case KEY_DOWN: nId = BROWSER_SELECTDOWN; bLocalSelect = true; break; + case KEY_UP: nId = BROWSER_SELECTUP; bLocalSelect = true; break; + case KEY_HOME: nId = BROWSER_SELECTHOME; bLocalSelect = true; break; + case KEY_END: nId = BROWSER_SELECTEND; bLocalSelect = true; break; + case KEY_TAB: + if (IsTabAllowed(false)) + nId = BROWSER_CURSORLEFT; + break; + } - if ( !bAlt && bCtrl && !bShift ) - switch ( nCode ) - { - case KEY_DOWN: nId = BROWSER_SCROLLUP; break; - case KEY_UP: nId = BROWSER_SCROLLDOWN; break; - case KEY_PAGEDOWN: nId = BROWSER_CURSORENDOFFILE; break; - case KEY_PAGEUP: nId = BROWSER_CURSORTOPOFFILE; break; - case KEY_HOME: nId = BROWSER_CURSORTOPOFSCREEN; break; - case KEY_END: nId = BROWSER_CURSORENDOFSCREEN; break; - case KEY_SPACE: nId = BROWSER_ENHANCESELECTION; bLocalSelect = true; break; - } + if ( !bAlt && bCtrl && bShift ) + switch ( nCode ) + { + case KEY_SPACE: nId = BROWSER_SELECTCOLUMN; bLocalSelect = true; break; + } + + + if ( !bAlt && bCtrl && !bShift ) + switch ( nCode ) + { + case KEY_DOWN: nId = BROWSER_SCROLLUP; break; + case KEY_UP: nId = BROWSER_SCROLLDOWN; break; + case KEY_PAGEDOWN: nId = BROWSER_CURSORENDOFFILE; break; + case KEY_PAGEUP: nId = BROWSER_CURSORTOPOFFILE; break; + case KEY_HOME: nId = BROWSER_CURSORTOPOFSCREEN; break; + case KEY_END: nId = BROWSER_CURSORENDOFSCREEN; break; + case KEY_SPACE: nId = BROWSER_ENHANCESELECTION; bLocalSelect = true; break; + } - if ( ( nId != BROWSER_NONE ) - && ( !IsEditing() - || ( !bNonEditOnly - && aController->MoveAllowed( *pKeyEvent ) - ) - ) + if ( ( nId != BROWSER_NONE ) + && ( !IsEditing() + || ( !bNonEditOnly + && aController->MoveAllowed(rKeyEvent) ) + ) + ) + { + if (nId == BROWSER_SELECT || BROWSER_SELECTCOLUMN == nId ) + { + // save the cell content (if necessary) + if (IsEditing() && aController->IsValueChangedFromSaved() && !SaveModified()) { - if (nId == BROWSER_SELECT || BROWSER_SELECTCOLUMN == nId ) - { - // save the cell content (if necessary) - if (IsEditing() && aController->IsValueChangedFromSaved() && !SaveModified()) - { - // maybe we're not visible ... - EnableAndShow(); - aController->GetWindow().GrabFocus(); - return true; - } - } + // maybe we're not visible ... + EnableAndShow(); + aController->GetWindow().GrabFocus(); + return true; + } + } - Dispatch(nId); + Dispatch(nId); - if (bLocalSelect && (GetSelectRowCount() || GetSelection() != nullptr)) - DeactivateCell(); + if (bLocalSelect && (GetSelectRowCount() || GetSelection() != nullptr)) + DeactivateCell(); + return true; + } + return false; + } + + bool EditBrowseBox::PreNotify(NotifyEvent& rEvt) + { + if (rEvt.GetType() == MouseNotifyEvent::KEYINPUT) + { + if ( (IsEditing() && Controller()->GetWindow().HasChildPathFocus()) + || rEvt.GetWindow() == &GetDataWindow() + || (!IsEditing() && HasChildPathFocus()) + ) + { + if (ProcessKey(*rEvt.GetKeyEvent())) return true; - } } } return BrowseBox::PreNotify(rEvt); |