summaryrefslogtreecommitdiff
path: root/svtools
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-07-05 19:45:58 +0100
committerCaolán McNamara <caolanm@redhat.com>2020-07-06 14:52:56 +0200
commit291f1776a661cd5d809fbe385efd1e1c8432ddd1 (patch)
treef05105cd4d6bad18bf128af62f67dec69896f7fc /svtools
parent024bdf31b17814c1c96d7376ac77564a9361be65 (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.cxx202
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);