[mutter] Handle meta_screen_get_monitor_for_point() returning NULL
- From: Rui Matos <rtcm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] Handle meta_screen_get_monitor_for_point() returning NULL
- Date: Thu, 10 Mar 2016 15:11:18 +0000 (UTC)
commit 8b801aac772f92b2c6d8341931b03bbe8d5f8cd6
Author: Rui Matos <tiagomatos gmail com>
Date: Mon Mar 7 17:24:13 2016 +0100
Handle meta_screen_get_monitor_for_point() returning NULL
On the X11 backend we don't track the pointer position in
priv->current_x/y which remain set to zero. That means we never set
the clutter stage cursor if point 0,0 isn't covered by any monitor
since we return early.
Commit 4bebc5e5fa8aade8a96c769bf2365abe0948f6ce introduced this to
avoid crashing on the prepare-at handlers when the cursor position
doesn't fall inside any monitor area but we can handle that higher up
in the stack. In that case, the sprite's scale doesn't matter since
the cursor won't be shown anyway so we can skip setting it.
https://bugzilla.gnome.org/show_bug.cgi?id=763159
src/backends/meta-cursor-renderer.c | 15 ---------------
src/core/screen.c | 3 ++-
src/wayland/meta-wayland-pointer.c | 5 +++--
3 files changed, 5 insertions(+), 18 deletions(-)
---
diff --git a/src/backends/meta-cursor-renderer.c b/src/backends/meta-cursor-renderer.c
index a76241b..48cd239 100644
--- a/src/backends/meta-cursor-renderer.c
+++ b/src/backends/meta-cursor-renderer.c
@@ -27,8 +27,6 @@
#include "meta-cursor-renderer.h"
#include <meta/meta-backend.h>
-#include <backends/meta-backend-private.h>
-#include <backends/meta-monitor-manager-private.h>
#include <meta/util.h>
#include <cogl/cogl.h>
@@ -118,14 +116,6 @@ meta_cursor_renderer_calculate_rect (MetaCursorRenderer *renderer,
};
}
-static gboolean
-is_cursor_in_monitors_area (int x, int y)
-{
- MetaMonitorManager *monitor_manager = meta_backend_get_monitor_manager (meta_get_backend ());
- return meta_monitor_manager_get_monitor_at_point (monitor_manager,
- (gfloat) x, (gfloat) y) >= 0;
-}
-
static void
update_cursor (MetaCursorRenderer *renderer,
MetaCursorSprite *cursor_sprite)
@@ -134,11 +124,6 @@ update_cursor (MetaCursorRenderer *renderer,
gboolean handled_by_backend;
gboolean should_redraw = FALSE;
- /* do not render cursor if it is not on any monitor. Such situation
- * can occur e. g. after monitor hot-plug */
- if (!is_cursor_in_monitors_area (priv->current_x, priv->current_y))
- return;
-
if (cursor_sprite)
meta_cursor_sprite_prepare_at (cursor_sprite,
priv->current_x,
diff --git a/src/core/screen.c b/src/core/screen.c
index 934b3af..0e056b3 100644
--- a/src/core/screen.c
+++ b/src/core/screen.c
@@ -1233,7 +1233,8 @@ root_cursor_prepare_at (MetaCursorSprite *cursor_sprite,
monitor = meta_screen_get_monitor_for_point (screen, x, y);
/* Reload the cursor texture if the scale has changed. */
- meta_cursor_sprite_set_theme_scale (cursor_sprite, monitor->scale);
+ if (monitor)
+ meta_cursor_sprite_set_theme_scale (cursor_sprite, monitor->scale);
}
static void
diff --git a/src/wayland/meta-wayland-pointer.c b/src/wayland/meta-wayland-pointer.c
index 2936afc..b8a1385 100644
--- a/src/wayland/meta-wayland-pointer.c
+++ b/src/wayland/meta-wayland-pointer.c
@@ -1011,8 +1011,9 @@ cursor_sprite_prepare_at (MetaCursorSprite *cursor_sprite,
if (!meta_xwayland_is_xwayland_surface (surface))
{
monitor = meta_screen_get_monitor_for_point (screen, x, y);
- meta_cursor_sprite_set_texture_scale (cursor_sprite,
- (float)monitor->scale / surface->scale);
+ if (monitor)
+ meta_cursor_sprite_set_texture_scale (cursor_sprite,
+ (float)monitor->scale / surface->scale);
}
meta_wayland_surface_update_outputs (surface);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]