Coverage Report

Created: 2026-08-14 10:22

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/sc/source/ui/view/cellsh4.cxx
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/*
3
 * This file is part of the LibreOffice project.
4
 *
5
 * This Source Code Form is subject to the terms of the Mozilla Public
6
 * License, v. 2.0. If a copy of the MPL was not distributed with this
7
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
 *
9
 * This file incorporates work covered by the following license notice:
10
 *
11
 *   Licensed to the Apache Software Foundation (ASF) under one or more
12
 *   contributor license agreements. See the NOTICE file distributed
13
 *   with this work for additional information regarding copyright
14
 *   ownership. The ASF licenses this file to you under the Apache
15
 *   License, Version 2.0 (the "License"); you may not use this file
16
 *   except in compliance with the License. You may obtain a copy of
17
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18
 */
19
20
#include <sfx2/request.hxx>
21
#include <osl/diagnose.h>
22
23
#include <cellsh.hxx>
24
#include <tabvwsh.hxx>
25
#include <global.hxx>
26
#include <scmod.hxx>
27
#include <inputhdl.hxx>
28
#include <inputwin.hxx>
29
#include <document.hxx>
30
#include <officecfg/Office/Calc.hxx>
31
#include <sc.hrc>
32
33
void ScCellShell::ExecuteCursor( SfxRequest& rReq )
34
0
{
35
0
    ScViewData& rData = GetViewData();
36
0
    ScTabViewShell* pTabViewShell = rData.GetViewShell();
37
0
    const SfxItemSet*   pReqArgs = rReq.GetArgs();
38
0
    sal_uInt16          nSlotId  = rReq.GetSlot();
39
0
    SCCOLROW            nRepeat = 1;
40
0
    bool                bSel = false;
41
0
    bool                bKeep = false;
42
43
0
    if ( pReqArgs != nullptr )
44
0
    {
45
0
        const   SfxPoolItem* pItem;
46
0
        if (pReqArgs->HasItem(FN_PARAM_1, &pItem))
47
0
            nRepeat = static_cast<SCCOLROW>(static_cast<const SfxInt16Item*>(pItem)->GetValue());
48
0
        if (pReqArgs->HasItem(FN_PARAM_2, &pItem))
49
0
            bSel = static_cast<const SfxBoolItem*>(pItem)->GetValue();
50
0
    }
51
0
    else
52
0
    {
53
        //  evaluate locked selection mode
54
55
0
        sal_uInt16 nLocked = pTabViewShell->GetLockedModifiers();
56
0
        if ( nLocked & KEY_SHIFT )
57
0
            bSel = true;                // EXT
58
0
        else if ( nLocked & KEY_MOD1 )
59
0
        {
60
            // ADD mode: keep the selection, start a new block when marking with shift again
61
0
            bKeep = true;
62
0
        }
63
0
    }
64
65
0
    if (bSel)
66
0
    {
67
0
        switch (nSlotId)
68
0
        {
69
0
            case SID_CURSORDOWN:
70
0
                rReq.SetSlot(SID_CURSORDOWN_SEL);
71
0
            break;
72
0
            case SID_CURSORUP:
73
0
                rReq.SetSlot(SID_CURSORUP_SEL);
74
0
            break;
75
0
            case SID_CURSORRIGHT:
76
0
                rReq.SetSlot(SID_CURSORRIGHT_SEL);
77
0
            break;
78
0
            case SID_CURSORLEFT:
79
0
                rReq.SetSlot(SID_CURSORLEFT_SEL);
80
0
            break;
81
0
            case SID_CURSORPAGEDOWN:
82
0
                rReq.SetSlot(SID_CURSORPAGEDOWN_SEL);
83
0
            break;
84
0
            case SID_CURSORPAGEUP:
85
0
                rReq.SetSlot(SID_CURSORPAGEUP_SEL);
86
0
            break;
87
0
            case SID_CURSORBLKDOWN:
88
0
                rReq.SetSlot(SID_CURSORBLKDOWN_SEL);
89
0
            break;
90
0
            case SID_CURSORBLKUP:
91
0
                rReq.SetSlot(SID_CURSORBLKUP_SEL);
92
0
            break;
93
0
            case SID_CURSORBLKRIGHT:
94
0
                rReq.SetSlot(SID_CURSORBLKRIGHT_SEL);
95
0
            break;
96
0
            case SID_CURSORBLKLEFT:
97
0
                rReq.SetSlot(SID_CURSORBLKLEFT_SEL);
98
0
            break;
99
0
            default:
100
0
                ;
101
0
        }
102
0
        ExecuteCursorSel(rReq);
103
0
        return;
104
0
    }
105
106
0
    SCCOLROW nRTLSign = 1;
107
0
    if ( rData.GetDocument().IsLayoutRTL( rData.CurrentTabForData() ) )
108
0
    {
109
        //! evaluate cursor movement option?
110
0
        nRTLSign = -1;
111
0
    }
112
113
    // once extra, so that the cursor will not be painted too often with ExecuteInputDirect:
114
0
    pTabViewShell->HideAllCursors();
115
116
    // #i123629#
117
0
    if( pTabViewShell->GetCurObjectSelectionType() == OST_Editing )
118
0
        pTabViewShell->SetForceFocusOnCurCell(true);
119
0
    else
120
0
        pTabViewShell->SetForceFocusOnCurCell(false);
121
122
    // If ScrollLock key is active, cell cursor stays on the current cell while
123
    // scrolling the grid.
124
0
    bool bScrollLock = false;
125
    // tdf#112876 - allow to disable for special keyboards
126
0
    if (officecfg::Office::Calc::Input::UseScrollLock::get())
127
0
    {
128
0
        KeyIndicatorState eState = pFrameWin->GetIndicatorState();
129
0
        if (eState & KeyIndicatorState::SCROLLLOCK)
130
0
            bScrollLock = true;
131
0
    }
132
    //OS: once for all should do, however!
133
0
    pTabViewShell->ExecuteInputDirect();
134
0
    switch ( nSlotId )
135
0
    {
136
0
        case SID_CURSORDOWN:
137
0
            if (bScrollLock)
138
0
                pTabViewShell->ScrollY( nRepeat, SC_SPLIT_BOTTOM );
139
0
            else
140
0
                pTabViewShell->MoveCursorRel( 0, nRepeat, SC_FOLLOW_LINE, bSel, bKeep );
141
0
            break;
142
143
0
        case SID_CURSORBLKDOWN:
144
0
            pTabViewShell->MoveCursorArea( 0, nRepeat, SC_FOLLOW_JUMP, bSel, bKeep, !rReq.IsAPI() );
145
0
            break;
146
147
0
        case SID_CURSORUP:
148
0
            if (bScrollLock)
149
0
                pTabViewShell->ScrollY( -nRepeat, SC_SPLIT_BOTTOM);
150
0
            else
151
0
                pTabViewShell->MoveCursorRel( 0, -nRepeat, SC_FOLLOW_LINE, bSel, bKeep );
152
0
            break;
153
154
0
        case SID_CURSORBLKUP:
155
0
            pTabViewShell->MoveCursorArea( 0, -nRepeat, SC_FOLLOW_JUMP, bSel, bKeep, !rReq.IsAPI() );
156
0
            break;
157
158
0
        case SID_CURSORLEFT:
159
0
            if (bScrollLock)
160
0
                pTabViewShell->ScrollX( static_cast<SCCOL>(-nRepeat * nRTLSign), SC_SPLIT_LEFT);
161
0
            else
162
0
                pTabViewShell->MoveCursorRel( static_cast<SCCOL>(-nRepeat * nRTLSign), 0, SC_FOLLOW_LINE, bSel, bKeep );
163
0
            break;
164
165
0
        case SID_CURSORBLKLEFT:
166
0
            pTabViewShell->MoveCursorArea( static_cast<SCCOL>(-nRepeat * nRTLSign), 0, SC_FOLLOW_JUMP, bSel, bKeep, !rReq.IsAPI() );
167
0
            break;
168
169
0
        case SID_CURSORRIGHT:
170
0
            if (bScrollLock)
171
0
                pTabViewShell->ScrollX( static_cast<SCCOL>(nRepeat * nRTLSign), SC_SPLIT_LEFT);
172
0
            else
173
0
                pTabViewShell->MoveCursorRel( static_cast<SCCOL>(nRepeat * nRTLSign), 0, SC_FOLLOW_LINE, bSel, bKeep );
174
0
            break;
175
176
0
        case SID_CURSORBLKRIGHT:
177
0
            pTabViewShell->MoveCursorArea( static_cast<SCCOL>(nRepeat * nRTLSign), 0, SC_FOLLOW_JUMP, bSel, bKeep, !rReq.IsAPI() );
178
0
            break;
179
180
0
        case SID_CURSORPAGEDOWN:
181
0
            if (bScrollLock)
182
0
            {
183
0
                SCCOL nPageX;
184
0
                SCROW nPageY;
185
0
                pTabViewShell->GetPageMoveEndPosition( 0, nRepeat, nPageX, nPageY);
186
0
                pTabViewShell->ScrollY( nPageY, SC_SPLIT_BOTTOM);
187
0
            }
188
0
            else
189
0
                pTabViewShell->MoveCursorPage( 0, nRepeat, SC_FOLLOW_FIX, bSel, bKeep );
190
0
            break;
191
192
0
        case SID_CURSORPAGEUP:
193
0
            if (bScrollLock)
194
0
            {
195
0
                SCCOL nPageX;
196
0
                SCROW nPageY;
197
0
                pTabViewShell->GetPageMoveEndPosition( 0, nRepeat, nPageX, nPageY);
198
0
                pTabViewShell->ScrollY( -nPageY, SC_SPLIT_BOTTOM);
199
0
            }
200
0
            else
201
0
                pTabViewShell->MoveCursorPage( 0, -nRepeat, SC_FOLLOW_FIX, bSel, bKeep );
202
0
            break;
203
204
0
        case SID_CURSORPAGERIGHT_: //XXX !!!
205
0
            if (bScrollLock)
206
0
            {
207
0
                SCCOL nPageX;
208
0
                SCROW nPageY;
209
0
                pTabViewShell->GetPageMoveEndPosition( static_cast<SCCOL>(nRepeat), 0, nPageX, nPageY);
210
0
                pTabViewShell->ScrollX( nPageX, SC_SPLIT_LEFT);
211
0
            }
212
0
            else
213
0
                pTabViewShell->MoveCursorPage( static_cast<SCCOL>(nRepeat), 0, SC_FOLLOW_FIX, bSel, bKeep );
214
0
            break;
215
216
0
        case SID_CURSORPAGELEFT_: //XXX !!!
217
0
            if (bScrollLock)
218
0
            {
219
0
                SCCOL nPageX;
220
0
                SCROW nPageY;
221
0
                pTabViewShell->GetPageMoveEndPosition( static_cast<SCCOL>(nRepeat), 0, nPageX, nPageY);
222
0
                pTabViewShell->ScrollX( -nPageX, SC_SPLIT_LEFT);
223
0
            }
224
0
            else
225
0
                pTabViewShell->MoveCursorPage( static_cast<SCCOL>(-nRepeat), 0, SC_FOLLOW_FIX, bSel, bKeep );
226
0
            break;
227
228
0
        default:
229
0
            OSL_FAIL("Unknown message in ViewShell (Cursor)");
230
0
            return;
231
0
    }
232
233
0
    pTabViewShell->ShowAllCursors();
234
235
0
    rReq.AppendItem( SfxInt16Item(FN_PARAM_1, static_cast<sal_Int16>(nRepeat)) );
236
0
    rReq.AppendItem( SfxBoolItem(FN_PARAM_2, bSel) );
237
0
    rReq.Done();
238
0
}
239
240
void ScCellShell::GetStateCursor( SAL_UNUSED_PARAMETER SfxItemSet& /* rSet */ )
241
0
{
242
0
}
243
244
void ScCellShell::ExecuteCursorSel( SfxRequest& rReq )
245
0
{
246
0
    sal_uInt16 nSlotId  = rReq.GetSlot();
247
0
    ScTabViewShell* pViewShell = GetViewData().GetViewShell();
248
0
    ScInputHandler* pInputHdl = pViewShell->GetInputHandler();
249
0
    pViewShell->HideAllCursors();
250
0
    if (pInputHdl && pInputHdl->IsInputMode())
251
0
    {
252
        // the current cell is in edit mode.  Commit the text before moving on.
253
0
        pViewShell->ExecuteInputDirect();
254
0
    }
255
256
0
    SCCOLROW nRepeat = 1;
257
0
    const SfxItemSet* pReqArgs = rReq.GetArgs();
258
    // get repetition
259
0
    if ( pReqArgs != nullptr )
260
0
    {
261
0
        const SfxPoolItem* pItem;
262
0
        if (pReqArgs->HasItem(FN_PARAM_1, &pItem))
263
0
            nRepeat = static_cast<SCCOLROW>(static_cast<const SfxInt16Item*>(pItem)->GetValue());
264
0
    }
265
266
0
    SCROW nMovY = nRepeat;
267
    // Horizontal direction depends on whether or not the UI language is RTL.
268
0
    SCCOL nMovX = nRepeat;
269
0
    if (GetViewData().GetDocument().IsLayoutRTL(GetViewData().CurrentTabForData()))
270
0
    {
271
        // mirror horizontal movement for right-to-left mode.
272
0
        nMovX = -nRepeat;
273
0
    }
274
275
0
    switch (nSlotId)
276
0
    {
277
0
        case SID_CURSORDOWN_SEL:
278
0
            pViewShell->ExpandBlock(0, nMovY, SC_FOLLOW_LINE);
279
0
        break;
280
0
        case SID_CURSORUP_SEL:
281
0
            pViewShell->ExpandBlock(0, -nMovY, SC_FOLLOW_LINE);
282
0
        break;
283
0
        case SID_CURSORRIGHT_SEL:
284
0
            pViewShell->ExpandBlock(nMovX, 0, SC_FOLLOW_LINE);
285
0
        break;
286
0
        case SID_CURSORLEFT_SEL:
287
0
            pViewShell->ExpandBlock(-nMovX, 0, SC_FOLLOW_LINE);
288
0
        break;
289
0
        case SID_CURSORPAGEUP_SEL:
290
0
            pViewShell->ExpandBlockPage(0, -nMovY);
291
0
        break;
292
0
        case SID_CURSORPAGEDOWN_SEL:
293
0
            pViewShell->ExpandBlockPage(0, nMovY);
294
0
        break;
295
0
        case SID_CURSORPAGERIGHT_SEL:
296
0
            pViewShell->ExpandBlockPage(nMovX, 0);
297
0
        break;
298
0
        case SID_CURSORPAGELEFT_SEL:
299
0
            pViewShell->ExpandBlockPage(-nMovX, 0);
300
0
        break;
301
0
        case SID_CURSORBLKDOWN_SEL:
302
0
            pViewShell->ExpandBlockArea(0, nMovY);
303
0
        break;
304
0
        case SID_CURSORBLKUP_SEL:
305
0
            pViewShell->ExpandBlockArea(0, -nMovY);
306
0
        break;
307
0
        case SID_CURSORBLKRIGHT_SEL:
308
0
            pViewShell->ExpandBlockArea(nMovX , 0);
309
0
        break;
310
0
        case SID_CURSORBLKLEFT_SEL:
311
0
            pViewShell->ExpandBlockArea(-nMovX, 0);
312
0
        break;
313
0
        default:
314
0
            ;
315
0
    }
316
0
    pViewShell->ShowAllCursors();
317
318
0
    rReq.AppendItem( SfxInt16Item(FN_PARAM_1,static_cast<sal_Int16>(nRepeat)) );
319
0
    rReq.Done();
320
0
}
321
322
void ScCellShell::ExecuteMove( SfxRequest& rReq )
323
0
{
324
0
    ScTabViewShell* pTabViewShell   = GetViewData().GetViewShell();
325
0
    sal_uInt16 nSlotId  = rReq.GetSlot();
326
0
    const SfxItemSet* pReqArgs = rReq.GetArgs();
327
328
0
    if(nSlotId != SID_CURSORTOPOFSCREEN && nSlotId != SID_CURSORENDOFSCREEN && nSlotId != SID_SETINPUTMODE)
329
0
        pTabViewShell->ExecuteInputDirect();
330
0
    switch ( nSlotId )
331
0
    {
332
0
        case SID_NEXT_TABLE:
333
0
        case SID_NEXT_TABLE_SEL:
334
0
            pTabViewShell->SelectNextTab( 1, (nSlotId == SID_NEXT_TABLE_SEL) );
335
0
            break;
336
337
0
        case SID_PREV_TABLE:
338
0
        case SID_PREV_TABLE_SEL:
339
0
            pTabViewShell->SelectNextTab( -1, (nSlotId == SID_PREV_TABLE_SEL) );
340
0
            break;
341
342
        //  cursor movements in range do not originate from Basic,
343
        //  because the ScSbxRange-object changes the marking at input
344
345
0
        case SID_NEXT_UNPROTECT:
346
0
            pTabViewShell->FindNextUnprot( false, !rReq.IsAPI() );
347
0
            break;
348
349
0
        case SID_PREV_UNPROTECT:
350
0
            pTabViewShell->FindNextUnprot( true, !rReq.IsAPI() );
351
0
            break;
352
353
0
        case SID_CURSORENTERUP:
354
0
            if (rReq.IsAPI())
355
0
                pTabViewShell->MoveCursorRel( 0, -1, SC_FOLLOW_LINE, false );
356
0
            else
357
0
                pTabViewShell->MoveCursorEnter( true );
358
0
            break;
359
360
0
        case SID_CURSORENTERDOWN:
361
0
            if (rReq.IsAPI())
362
0
                pTabViewShell->MoveCursorRel( 0, 1, SC_FOLLOW_LINE, false );
363
0
            else
364
0
                pTabViewShell->MoveCursorEnter( false );
365
0
            break;
366
367
0
        case SID_SELECT_COL:
368
0
            if (const SfxPoolItem *pColItem, *pModifierItem;
369
0
                pReqArgs && pReqArgs->HasItem(FN_PARAM_1, &pColItem)
370
0
                && pReqArgs->HasItem(FN_PARAM_2, &pModifierItem))
371
0
            {
372
0
                SCCOL nCol = static_cast<SCCOL>(static_cast<const SfxInt32Item*>(pColItem)->GetValue());
373
0
                sal_Int16 nModifier = static_cast<const SfxInt16Item*>(pModifierItem)->GetValue();
374
375
0
                pTabViewShell->MarkColumns( nCol, nModifier );
376
0
            }
377
0
            else
378
0
                pTabViewShell->MarkColumns();
379
0
            break;
380
381
0
        case SID_SELECT_ROW:
382
0
            if (const SfxPoolItem *pRowItem, *pModifierItem;
383
0
                pReqArgs && pReqArgs->HasItem(FN_PARAM_1, &pRowItem)
384
0
                && pReqArgs->HasItem(FN_PARAM_2, &pModifierItem))
385
0
            {
386
0
                SCROW nRow = static_cast<SCROW>(static_cast<const SfxInt32Item*>(pRowItem)->GetValue());
387
0
                sal_Int16 nModifier = static_cast<const SfxInt16Item*>(pModifierItem)->GetValue();
388
389
0
                pTabViewShell->MarkRows( nRow, nModifier );
390
0
            }
391
0
            else
392
0
                pTabViewShell->MarkRows();
393
0
            break;
394
395
0
        case SID_SELECT_NONE:
396
0
            pTabViewShell->Unmark();
397
0
            break;
398
399
0
        case SID_ALIGNCURSOR:
400
0
            pTabViewShell->AlignToCursor( GetViewData().GetCurX(), GetViewData().GetCurY(), SC_FOLLOW_JUMP );
401
0
            break;
402
403
0
        case SID_MARKDATAAREA:
404
0
            pTabViewShell->MarkDataArea();
405
0
            break;
406
407
0
        case SID_MARKARRAYFORMULA:
408
0
            pTabViewShell->MarkMatrixFormula();
409
0
            break;
410
411
0
        case SID_SETINPUTMODE:
412
0
            if (ScInputHandler* pHdl = ScModule::get()->GetInputHdl(pTabViewShell))
413
0
            {
414
                // We don’t want to call ExecuteInputDirect if we’re
415
                // actually trying to toggle between TABLE and TYPE
416
                // modes because it would reset the mode back to NONE
417
                // and the toggle won’t work.
418
0
                if (!pHdl->IsInputMode() || pHdl->IsTopMode())
419
0
                    pTabViewShell->ExecuteInputDirect();
420
0
                pHdl->StartOrToggleEditMode();
421
0
            }
422
0
            break;
423
424
0
        case SID_FOCUS_INPUTLINE:
425
0
            if (ScInputHandler* pHdl = ScModule::get()->GetInputHdl(pTabViewShell))
426
0
                if (ScInputWindow* pWin = pHdl->GetInputWindow())
427
0
                    pWin->SwitchToTextWin();
428
0
            break;
429
430
0
        case SID_CURSORTOPOFSCREEN:
431
0
            pTabViewShell->MoveCursorScreen( 0, -1, SC_FOLLOW_LINE, false );
432
0
            break;
433
434
0
        case SID_CURSORENDOFSCREEN:
435
0
            pTabViewShell->MoveCursorScreen( 0, 1, SC_FOLLOW_LINE, false );
436
0
            break;
437
438
0
        default:
439
0
            OSL_FAIL("Unknown message in ViewShell (Cursor)");
440
0
            return;
441
0
    }
442
443
0
    rReq.Done();
444
0
}
445
446
void ScCellShell::ExecutePageSel( SfxRequest& rReq )
447
0
{
448
0
    sal_uInt16              nSlotId  = rReq.GetSlot();
449
0
    switch ( nSlotId )
450
0
    {
451
0
        case SID_CURSORHOME_SEL:        rReq.SetSlot( SID_CURSORHOME );  break;
452
0
        case SID_CURSOREND_SEL:         rReq.SetSlot( SID_CURSOREND );  break;
453
0
        case SID_CURSORTOPOFFILE_SEL:   rReq.SetSlot( SID_CURSORTOPOFFILE );  break;
454
0
        case SID_CURSORENDOFFILE_SEL:   rReq.SetSlot( SID_CURSORENDOFFILE );  break;
455
0
        default:
456
0
            OSL_FAIL("Unknown message in ViewShell (ExecutePageSel)");
457
0
            return;
458
0
    }
459
0
    rReq.AppendItem( SfxBoolItem(FN_PARAM_2, true) );
460
0
    ExecuteSlot( rReq, GetInterface() );
461
0
}
462
463
void ScCellShell::ExecutePage( SfxRequest& rReq )
464
0
{
465
0
    ScTabViewShell* pTabViewShell   = GetViewData().GetViewShell();
466
0
    const SfxItemSet*   pReqArgs = rReq.GetArgs();
467
0
    sal_uInt16              nSlotId  = rReq.GetSlot();
468
0
    bool                bSel = false;
469
0
    bool                bKeep = false;
470
471
0
    if ( pReqArgs != nullptr )
472
0
    {
473
0
        const   SfxPoolItem* pItem;
474
0
        if (pReqArgs->HasItem(FN_PARAM_2, &pItem))
475
0
            bSel = static_cast<const SfxBoolItem*>(pItem)->GetValue();
476
0
    }
477
0
    else
478
0
    {
479
        //  evaluate locked selection mode
480
481
0
        sal_uInt16 nLocked = pTabViewShell->GetLockedModifiers();
482
0
        if ( nLocked & KEY_SHIFT )
483
0
            bSel = true;                // EXT
484
0
        else if ( nLocked & KEY_MOD1 )
485
0
        {
486
            // ADD mode: keep the selection, start a new block when marking with shift again
487
0
            bKeep = true;
488
0
        }
489
0
    }
490
491
0
    pTabViewShell->ExecuteInputDirect();
492
0
    switch ( nSlotId )
493
0
    {
494
0
        case SID_CURSORHOME:
495
0
            pTabViewShell->MoveCursorEnd( -1, 0, SC_FOLLOW_LINE, bSel, bKeep );
496
0
            break;
497
498
0
        case SID_CURSOREND:
499
0
            pTabViewShell->MoveCursorEnd( 1, 0, SC_FOLLOW_JUMP, bSel, bKeep );
500
0
            break;
501
502
0
        case SID_CURSORTOPOFFILE:
503
0
            pTabViewShell->MoveCursorEnd( -1, -1, SC_FOLLOW_LINE, bSel, bKeep );
504
0
            break;
505
506
0
        case SID_CURSORENDOFFILE:
507
0
            pTabViewShell->MoveCursorEnd( 1, 1, SC_FOLLOW_JUMP_END, bSel, bKeep );
508
0
            break;
509
510
0
        default:
511
0
            OSL_FAIL("Unknown message in ViewShell (ExecutePage)");
512
0
            return;
513
0
    }
514
515
0
    rReq.AppendItem( SfxBoolItem(FN_PARAM_2, bSel) );
516
0
    rReq.Done();
517
0
}
518
519
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */