Issue 110990

Summary: fullscreen presentation on all monitors is broken
Product: Impress Reporter: philipp.lohmann
Component: codeAssignee: groucho266
Status: CLOSED FIXED QA Contact: issues@graphics <issues>
Severity: Trivial    
Priority: P3 CC: issues, mdxonefour, wolframgarten
Version: OOO320m14Keywords: regression
Target Milestone: 3.4.0   
Hardware: All   
OS: All   
Issue Type: DEFECT Latest Confirmation in: ---
Developer Difficulty: ---
Issue Depends on: 116911    
Issue Blocks:    
Attachments:
Description Flags
Outline of the changes in sd none

Description philipp.lohmann 2010-04-19 16:38:39 UTC
- create new slideshow
- open slideshow->slideshow settings...
- select "All displays" for "Presentation display" (you need multiple monitors
for this)
- start slide show
-> slideshow appears on a single monitor instead of the expected combined monitors

The reason seems to be that vcl's StartPresentation gets called with "0" for the
monitor instead the expected "-1" that should indicate "all monitors".
Comment 1 philipp.lohmann 2010-04-19 16:39:47 UTC
Unkown since when this is broken, but still a regression, so setting keyword.
Comment 2 groucho266 2010-07-08 14:10:26 UTC
Have to fix this in two places.

First in sd/source/ui/dlg/present.cxx in the slide show dialog, we have to store
the display values in the listbox alongside their textural representations.  At
the moment the display values are derived by the index of each entry in the list
box (which works more by accident then by design.)

In sd/source/ui/slideshow/slideshow.cxx we have to accept -1 as valid display
index and not replace it with the default display index.

At the moment, however, we have to wait for some VCL changes to be integrated
that make the WorkWindow::SetPresentationMode function accept -1 as display index.
Comment 3 groucho266 2010-07-08 14:11:38 UTC
Created attachment 70455 [details]
Outline of the changes in sd
Comment 4 groucho266 2011-02-10 14:21:54 UTC
Submitted issue 116911 for the missing VCL support.
Comment 5 groucho266 2011-02-11 12:15:05 UTC
After trying out a solution for the VCL issue more problems emerged:

1. ::Window::ImplGetCanvas() tries to instantiate a special service when
multi-monitor support is requested: 
com.sun.star.rendering.SpriteCanvas.MultiScreen instead of 
"com.sun.star.rendering.SpriteCanvas.  This service is just not implemented
anywhere and is not registered in Canvas.xcu (offapi).

2.  When the standard service name is used (see above) then the DirectX canvas
has problems to create a proper surface for the large virtual screen.  Although
the DirectX device supports surfaces of up to size 4096x4096, the canvas
restricts itself to a maximum of 2048x2048.  This is not enough for the (in my
case) 3200x1200 pixels.  The result are paint artifacts. 
The VCL canvas works OK.
Comment 6 groucho266 2011-03-11 14:24:20 UTC
Fixed in CWS impress211.

Tackled the mentioned issues as follows:
1. When multi-monitor support is requested then
 not only com.sun.star.rendering.SpriteCanvas.MultiScreen but
 also com.sun.star.rendering.Canvas.MultiScreen service names are used.
 Support for the .MultiScreen variants has been added
 to officecfg/.../Canvas.xcu and canvas/source/factory/cf_service.cxx.

2. Only the VCL canvas is used when a .MultiScreen canvas is requested.
Comment 7 philipp.lohmann 2011-03-21 13:05:42 UTC
verified in CWS impress211 on Linux and Mac.

One glitch: using the compiz window manager will result in only one screen being use still even though we now set _NET_WM_FULLSCREEN_MONITORS hint. That however would seem to be a bug in compiz. Metacity and KWin work correctly.
Comment 8 philipp.lohmann 2011-03-22 09:28:51 UTC
Finally also verified on Windows.