Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/3695

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/95/3695/1

fdo#62815 - tolerate crazy / out-of-bound ScreenNumbers for FullScreen

Thus making the gtk+ backend more similar to the generic backend
in this regard; also be more strict about invalid monitors -> empty
screens.

Change-Id: Ia4f2e1205cb1d309fb1bb01f9631167339a3478e
Signed-off-by: Petr Mladek <pmladek@suse.cz>
---
M vcl/unx/gtk/app/gtksys.cxx
M vcl/unx/gtk/window/gtkframe.cxx
2 files changed, 23 insertions(+), 0 deletions(-)



diff --git a/vcl/unx/gtk/app/gtksys.cxx b/vcl/unx/gtk/app/gtksys.cxx
index bc06b25..c822fd2 100644
--- a/vcl/unx/gtk/app/gtksys.cxx
+++ b/vcl/unx/gtk/app/gtksys.cxx
@@ -70,6 +70,13 @@
 
 }
 
+/**
+ * GtkSalSystem::countScreenMonitors()
+ *
+ * This method builds the vector which allows us to map from VCL's
+ * idea of linear integer ScreenNumber to to gtk+'s rather more
+ * complicated screen + monitor concept.
+ */
 void
 GtkSalSystem::countScreenMonitors()
 {
@@ -134,6 +141,11 @@
             break;
     }
     nMonitor = nIdx;
+
+    // handle invalid monitor indexes as non-existent screens
+    if (nMonitor < 0 || (pScreen && nMonitor >= gdk_screen_get_n_monitors (pScreen)))
+        pScreen = NULL;
+
     return pScreen;
 }
 
diff --git a/vcl/unx/gtk/window/gtkframe.cxx b/vcl/unx/gtk/window/gtkframe.cxx
index 03f8c59..61d3f78 100644
--- a/vcl/unx/gtk/window/gtkframe.cxx
+++ b/vcl/unx/gtk/window/gtkframe.cxx
@@ -2059,7 +2059,15 @@
         return;
 
     gint nMonitor;
+    bool bSameMonitor = false;
     GdkScreen *pScreen = getDisplay()->getSystem()->getScreenMonitorFromIdx( nNewScreen, nMonitor 
);
+    if (!pScreen)
+    {
+        g_warning ("Attempt to move GtkSalFrame to invalid screen %d => "
+                   "fallback to current\n", nNewScreen);
+        pScreen = gtk_widget_get_screen( m_pWindow );
+        bSameMonitor = true;
+    }
 
     // Heavy lifting, need to move screen ...
     if( pScreen != gtk_widget_get_screen( m_pWindow ))
@@ -2067,6 +2075,9 @@
 
     gint nOldMonitor = gdk_screen_get_monitor_at_window(
                             pScreen, widget_get_window( m_pWindow ) );
+    if (bSameMonitor)
+        nMonitor = nOldMonitor;
+
 #if OSL_DEBUG_LEVEL > 1
     if( nMonitor == nOldMonitor )
         g_warning( "An apparently pointless SetScreen - should we elide it ?" );

-- 
To view, visit https://gerrit.libreoffice.org/3695
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia4f2e1205cb1d309fb1bb01f9631167339a3478e
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-4-0-3
Gerrit-Owner: Petr Mladek <pmladek@suse.cz>
Gerrit-Reviewer: Michael Meeks <michael.meeks@suse.com>


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.