rpms/openoffice.org/devel openoffice.org-3.3.0.ooo111770.vcl.defaultmonitor.patch, NONE, 1.1 openoffice.org.spec, 1.2244, 1.2245
Caolan McNamara
caolanm at fedoraproject.org
Tue Jun 15 19:11:15 UTC 2010
Author: caolanm
Update of /cvs/pkgs/rpms/openoffice.org/devel
In directory cvs01.phx2.fedoraproject.org:/tmp/cvs-serv2429
Modified Files:
openoffice.org.spec
Added Files:
openoffice.org-3.3.0.ooo111770.vcl.defaultmonitor.patch
Log Message:
ensure presentation-screen preview defaults to displaying on gdk_screen_get_primary_monitor
openoffice.org-3.3.0.ooo111770.vcl.defaultmonitor.patch:
gtk/app/gtkdata.cxx | 33 ++++++++++++++++++-
inc/plugins/gtk/gtkdata.hxx | 2 +
inc/saldisp.hxx | 3 +
source/app/saldisp.cxx | 73 ++++++++++++++++++++++++--------------------
source/app/salsys.cxx | 2 -
5 files changed, 77 insertions(+), 36 deletions(-)
--- NEW FILE openoffice.org-3.3.0.ooo111770.vcl.defaultmonitor.patch ---
diff -ru vcl.orig/unx/gtk/app/gtkdata.cxx vcl/unx/gtk/app/gtkdata.cxx
--- vcl.orig/unx/gtk/app/gtkdata.cxx 2010-06-14 19:51:39.500810695 +0100
+++ vcl/unx/gtk/app/gtkdata.cxx 2010-06-15 10:07:16.669799057 +0100
@@ -220,12 +220,12 @@
{
gint nMonitors = gdk_screen_get_n_monitors(pScreen);
m_aXineramaScreens = std::vector<Rectangle>();
+ m_aXineramaScreenIndexMap = std::vector<int>(nMonitors);
for (gint i = 0; i < nMonitors; ++i)
{
GdkRectangle dest;
gdk_screen_get_monitor_geometry(pScreen, i, &dest);
- m_aXineramaScreens.push_back( Rectangle( Point(dest.x,
- dest.y ), Size( dest.width, dest.height ) ) );
+ addXineramaScreenUnique( i, dest.x, dest.y, dest.width, dest.height );
}
m_bXinerama = m_aXineramaScreens.size() > 1;
if( ! m_aFrames.empty() )
@@ -239,6 +239,35 @@
}
}
+extern "C"
+{
+ typedef gint(* screen_get_primary_monitor)(GdkScreen *screen);
+}
+
+int GtkSalDisplay::GetDefaultMonitorNumber() const
+{
+ fprintf(stderr, "GtkSalDisplay::GetDefaultMonitorNumber\n");
+
+ GdkScreen* pScreen = gdk_display_get_screen( m_pGdkDisplay, m_nDefaultScreen );
+#if GTK_CHECK_VERSION(2,20,0)
+ return m_aXineramaScreenIndexMap[gdk_screen_get_primary_monitor(pScreen)];
+#else
+ static screen_get_primary_monitor sym_gdk_screen_get_primary_monitor =
+ (screen_get_primary_monitor)osl_getAsciiFunctionSymbol( GetSalData()->m_pPlugin, "gdk_screen_get_primary_monitor" );
+ if (sym_gdk_screen_get_primary_monitor)
+ return sym_gdk_screen_get_primary_monitor( pScreen );
+ //gdk_screen_get_primary_monitor unavailable, take the first laptop monitor as the default
+ gint nMonitors = gdk_screen_get_n_monitors(pScreen);
+ for (gint i = 0; i < nMonitors; ++i)
+ {
+ fprintf(stderr, "name is %s\n", gdk_screen_get_monitor_plug_name(pScreen, i));
+ if (g_ascii_strncasecmp (gdk_screen_get_monitor_plug_name(pScreen, i), "LVDS", 4) == 0)
+ return m_aXineramaScreenIndexMap[i];
+ }
+ return 0;
+#endif
+}
+
void GtkSalDisplay::initScreen( int nScreen ) const
{
if( nScreen < 0 || nScreen >= static_cast<int>(m_aScreens.size()) )
diff -ru vcl.orig/unx/inc/plugins/gtk/gtkdata.hxx vcl/unx/inc/plugins/gtk/gtkdata.hxx
--- vcl.orig/unx/inc/plugins/gtk/gtkdata.hxx 2010-06-14 19:51:39.547798667 +0100
+++ vcl/unx/inc/plugins/gtk/gtkdata.hxx 2010-06-14 20:33:22.407799098 +0100
@@ -76,6 +76,8 @@
virtual long Dispatch( XEvent *pEvent );
virtual void initScreen( int nScreen ) const;
+ virtual int GetDefaultMonitorNumber() const;
+
static GdkFilterReturn filterGdkEvent( GdkXEvent* sys_event,
GdkEvent* event,
gpointer data );
diff -ru vcl.orig/unx/inc/saldisp.hxx vcl/unx/inc/saldisp.hxx
--- vcl.orig/unx/inc/saldisp.hxx 2010-06-14 19:51:39.548798785 +0100
+++ vcl/unx/inc/saldisp.hxx 2010-06-15 10:06:53.031798755 +0100
@@ -392,6 +392,7 @@
bool m_bXinerama;
std::vector< Rectangle > m_aXineramaScreens;
+ std::vector< int > m_aXineramaScreenIndexMap;
std::list<SalFrame*> m_aFrames;
std::list<SalObject*> m_aSalObjects;
@@ -407,6 +408,7 @@
int processRandREvent( XEvent* );
void doDestruct();
+ void addXineramaScreenUnique( int i, long i_nX, long i_nY, long i_nWidth, long i_nHeight );
public:
static SalDisplay *GetSalDisplay( Display* display );
static BOOL BestVisual( Display *pDisp,
@@ -476,6 +478,7 @@
XLIB_Window GetDrawable( int nScreen ) const { return getDataForScreen( nScreen ).m_aRefWindow; }
Display *GetDisplay() const { return pDisp_; }
int GetDefaultScreenNumber() const { return m_nDefaultScreen; }
+ virtual int GetDefaultMonitorNumber() const;
const Size& GetScreenSize( int nScreen ) const { return getDataForScreen( nScreen ).m_aSize; }
srv_vendor_t GetServerVendor() const { return meServerVendor; }
void SetServerVendor() { meServerVendor = sal_GetServerVendor(pDisp_); }
diff -ru vcl.orig/unx/source/app/saldisp.cxx vcl/unx/source/app/saldisp.cxx
--- vcl.orig/unx/source/app/saldisp.cxx 2010-06-14 19:51:39.516798973 +0100
+++ vcl/unx/source/app/saldisp.cxx 2010-06-15 10:12:39.627798619 +0100
@@ -65,9 +65,7 @@
#ifdef USE_XINERAMA
#ifdef USE_XINERAMA_XORG
-#if defined(X86) || defined(X86_64)
#include <X11/extensions/Xinerama.h>
-#endif
#elif defined USE_XINERAMA_XSUN
#if defined(SOLARIS) && defined(INTEL) // missing extension header in standard installation
#define MAXFRAMEBUFFERS 16
@@ -2600,6 +2598,30 @@
sal::static_int_cast< unsigned int >(GetVisual(m_nDefaultScreen).GetVisualId()) );
}
+void SalDisplay::addXineramaScreenUnique( int i, long i_nX, long i_nY, long i_nWidth, long i_nHeight )
+{
+ // see if any frame buffers are at the same coordinates
+ // this can happen with weird configuration e.g. on
+ // XFree86 and Clone displays
+ const size_t nScreens = m_aXineramaScreens.size();
+ for( size_t n = 0; n < nScreens; n++ )
+ {
+ if( m_aXineramaScreens[n].Left() == i_nX &&
+ m_aXineramaScreens[n].Top() == i_nY )
+ {
+ if( m_aXineramaScreens[n].GetWidth() < i_nWidth ||
+ m_aXineramaScreens[n].GetHeight() < i_nHeight )
+ {
+ m_aXineramaScreens[n].SetSize( Size( i_nWidth, i_nHeight ) );
+ m_aXineramaScreenIndexMap[i] = n;
+ }
+ return;
+ }
+ }
+ m_aXineramaScreenIndexMap[i] = m_aXineramaScreens.size();
+ m_aXineramaScreens.push_back( Rectangle( Point( i_nX, i_nY ), Size( i_nWidth, i_nHeight ) ) );
+}
+
void SalDisplay::InitXinerama()
{
if( m_aScreens.size() > 1 )
@@ -2622,16 +2644,16 @@
if( result > 0 && nFramebuffers > 1 )
{
m_bXinerama = true;
- m_aXineramaScreens = std::vector<Rectangle>( nFramebuffers );
+ m_aXineramaScreens = std::vector<Rectangle>();
+ m_aXineramaScreenIndexMap = std::vector<int>(nFramebuffers);
for( int i = 0; i < nFramebuffers; i++ )
- m_aXineramaScreens[i] = Rectangle( Point( pFramebuffers[i].x,
- pFramebuffers[i].y ),
- Size( pFramebuffers[i].width,
- pFramebuffers[i].height ) );
+ addXineramaScreenUnique( i, pFramebuffers[i].x,
+ pFramebuffers[i].y,
+ pFramebuffers[i].width,
+ pFramebuffers[i].height );
}
}
#elif defined(USE_XINERAMA_XORG)
-#if defined( X86 ) || defined( X86_64 )
if( XineramaIsActive( pDisp_ ) )
{
int nFramebuffers = 1;
@@ -2641,32 +2663,13 @@
if( nFramebuffers > 1 )
{
m_aXineramaScreens = std::vector<Rectangle>();
+ m_aXineramaScreenIndexMap = std::vector<int>(nFramebuffers);
for( int i = 0; i < nFramebuffers; i++ )
{
- // see if any frame buffers are at the same coordinates
- // this can happen with weird configuration e.g. on
- // XFree86 and Clone displays
- bool bDuplicate = false;
- for( int n = 0; n < i; n++ )
- {
- if( m_aXineramaScreens[n].Left() == pScreens[i].x_org &&
- m_aXineramaScreens[n].Top() == pScreens[i].y_org )
- {
- bDuplicate = true;
- if( m_aXineramaScreens[n].GetWidth() < pScreens[i].width ||
- m_aXineramaScreens[n].GetHeight() < pScreens[i].height )
- {
- m_aXineramaScreens[n].SetSize( Size( pScreens[i].width,
- pScreens[i].height ) );
- }
- break;
- }
- }
- if( ! bDuplicate )
- m_aXineramaScreens.push_back( Rectangle( Point( pScreens[i].x_org,
- pScreens[i].y_org ),
- Size( pScreens[i].width,
- pScreens[i].height ) ) );
+ addXineramaScreenUnique( i, pScreens[i].x_org,
+ pScreens[i].y_org,
+ pScreens[i].width,
+ pScreens[i].height );
}
m_bXinerama = m_aXineramaScreens.size() > 1;
}
@@ -2674,7 +2677,6 @@
}
}
#endif
-#endif
#if OSL_DEBUG_LEVEL > 1
if( m_bXinerama )
{
@@ -2685,6 +2687,11 @@
#endif // USE_XINERAMA
}
+int SalDisplay::GetDefaultMonitorNumber() const
+{
+ return 0;
+}
+
void SalDisplay::registerFrame( SalFrame* pFrame )
{
m_aFrames.push_front( pFrame );
diff -ru vcl.orig/unx/source/app/salsys.cxx vcl/unx/source/app/salsys.cxx
--- vcl.orig/unx/source/app/salsys.cxx 2010-06-14 19:51:39.515799413 +0100
+++ vcl/unx/source/app/salsys.cxx 2010-06-14 20:28:14.281799292 +0100
@@ -74,7 +74,7 @@
unsigned int X11SalSystem::GetDefaultDisplayNumber()
{
SalDisplay* pSalDisp = GetX11SalData()->GetDisplay();
- return pSalDisp->GetDefaultScreenNumber();
+ return pSalDisp->IsXinerama() ? pSalDisp->GetDefaultMonitorNumber() : pSalDisp->GetDefaultScreenNumber();
}
Rectangle X11SalSystem::GetDisplayScreenPosSizePixel( unsigned int nScreen )
Index: openoffice.org.spec
===================================================================
RCS file: /cvs/pkgs/rpms/openoffice.org/devel/openoffice.org.spec,v
retrieving revision 1.2244
retrieving revision 1.2245
diff -u -p -r1.2244 -r1.2245
--- openoffice.org.spec 15 Jun 2010 19:04:58 -0000 1.2244
+++ openoffice.org.spec 15 Jun 2010 19:11:15 -0000 1.2245
@@ -151,6 +151,7 @@ Patch80: openoffice.org-3.3.0.ooo112247.
Patch81: openoffice.org-3.3.0.ooo112363.accessibility.badindex.patch
Patch82: openoffice.org-3.3.0.ooo112384.sw.export.doc.styledoesntexist.patch
Patch83: workspace.gtkfpicker9.patch
+Patch84: openoffice.org-3.3.0.ooo111770.vcl.defaultmonitor.patch
%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
%define instdir %{_libdir}
@@ -1715,6 +1716,7 @@ cp -p %{SOURCE5} external/unowinreg/unow
%patch81 -p0 -b .ooo112363.accessibility.badindex.patch
%patch82 -p0 -b .ooo112384.sw.export.doc.styledoesntexist.patch
%patch83 -p0 -b .workspace.gtkfpicker9.patch
+%patch84 -p0 -b .ooo111770.vcl.defaultmonitor.patch
%build
echo build start time is `date`, diskspace: `df -h . | tail -n 1`
@@ -4208,6 +4210,8 @@ fi
%changelog
* Tue Jun 15 2010 Caolán McNamara <caolanm at redhat.com> - 1:3.2.1-19.14
- run smoketest in check
+- ensure presentation-screen preview defaults to displaying on
+ gdk_screen_get_primary_monitor
* Mon Jun 14 2010 Caolán McNamara <caolanm at redhat.com> - 1:3.2.1-19.13
- Resolves: rhbz#601890/ooo#112384 avoid crash on export to .doc
More information about the scm-commits
mailing list