Signal Processing in the LibreOffice sfx2 Interface
page1
Ability to process
„SID_PASTE“
SfxView
Subclass1
Ability to process
„SID_CUT“
Ability to process
„SID_PASTE“
SfxView
Subclass2
Ability to process
„SID_PASTE“
SfxView
Subclass3
Ability to process
„SID_CUT“
SID_CUT
SID_PASTE
SID_NEY
SID_VOMIT
Ability to process
„SID_VOMIT“
Ability to process
„SID_FLOAT“
Ability to process
„SID_FLOAT“
Last pushed
= lower nSlot
./sfx2/source/control/dispatch.cxx:
void SfxDispatcher::Pop receives Pushes and Pops of the shell to/from the stack.
The real Pushing/Popping, however, is done during SfxDispatcher::FlushImpl
State as of 1.12.2012
Signal processing in the sfx2 Interface
Empty:
No entry in .sdi File.
Corresponding to that subclass
Each Application Window has ONE Dispatcher.
This registers all SfxShells (or rather their subclasses) which can get commands from the user AT THE MOMENT.
Menu commands and Key accelerators are stored asynchronously into a UNO command stack and later executed seqentially.
Dispatcher's
Shell-Stack
(A Stack of Pointers)
Declared in dispatch.cxx
As SfxShellStack_Impl
These shells are created when the edit mode they are part of is first used, but not discarded until the window closes.
Main dispatching routine In ./sfx2/source/control/unoctitm.cxx
SfxDispatchController_Impl::dispatch.
SfxDispatchController::_FindServer gets the SfxInterfaces of the shells.
They are defined by macro calls to SFX_IMPL_INTERFACE, defined in sfx2/inc/sfx2/shell.hxx
Upon GetInterface, they yield their pInterface, which, upon GetSlot, returns a SfxSlot of that Shell
For that command, which is then Executed with Dispatcher::Execute.
Missing
SfxSlot
SfxSlot
SfxSlot
SfxSlot
SfxSlot
Missing
SfxSlot
Missing
Missing
SfxSlot
SfxSlot
Missing
Missing
Missing
If the program is set into another mode, for example by clicking a hovering object in writer
After Text editing, all shells are removed from the dispatcher and new shells are pushed
To match the current mode.
Changing the system:
In Order to add a function,
Add an entry to the .sdi file.
Corresponding to that SfxShell
Command ignored
Example of dispatching Process:
Signals generated by:
vcl/source/app
Application::PostUserEvent