[gnome-screensaver/gnome-2-28] Nullify grab window variables when windows are destroyed
- From: Ray Strode <halfline src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-screensaver/gnome-2-28] Nullify grab window variables when windows are destroyed
- Date: Fri, 12 Feb 2010 21:05:27 +0000 (UTC)
commit 0c59977a8941bce5c4f16acd66e0a651eeb24ca8
Author: Ray Strode <rstrode redhat com>
Date: Fri Feb 12 14:13:38 2010 -0500
Nullify grab window variables when windows are destroyed
If we don't do this then there is a time period where the
grab window variables contain dangling pointers which can
cause crashes.
Part of fix for
https://bugzilla.gnome.org/show_bug.cgi?id=609789
src/gs-grab-x11.c | 25 +++++++++++++++++++++++++
1 files changed, 25 insertions(+), 0 deletions(-)
---
diff --git a/src/gs-grab-x11.c b/src/gs-grab-x11.c
index 704c3f2..40a3879 100644
--- a/src/gs-grab-x11.c
+++ b/src/gs-grab-x11.c
@@ -172,7 +172,15 @@ gs_grab_get_keyboard (GSGrab *grab,
status = gdk_keyboard_grab (window, FALSE, GDK_CURRENT_TIME);
if (status == GDK_GRAB_SUCCESS) {
+ if (grab->priv->keyboard_grab_window != NULL) {
+ g_object_remove_weak_pointer (G_OBJECT (grab->priv->keyboard_grab_window),
+ (gpointer *) &grab->priv->keyboard_grab_window);
+ }
grab->priv->keyboard_grab_window = window;
+
+ g_object_add_weak_pointer (G_OBJECT (grab->priv->keyboard_grab_window),
+ (gpointer *) &grab->priv->keyboard_grab_window);
+
grab->priv->keyboard_grab_screen = screen;
} else {
gs_debug ("Couldn't grab keyboard! (%s)", grab_string (status));
@@ -201,7 +209,15 @@ gs_grab_get_mouse (GSGrab *grab,
GDK_CURRENT_TIME);
if (status == GDK_GRAB_SUCCESS) {
+ if (grab->priv->mouse_grab_window != NULL) {
+ g_object_remove_weak_pointer (G_OBJECT (grab->priv->mouse_grab_window),
+ (gpointer *) &grab->priv->mouse_grab_window);
+ }
grab->priv->mouse_grab_window = window;
+
+ g_object_add_weak_pointer (G_OBJECT (grab->priv->mouse_grab_window),
+ (gpointer *) &grab->priv->mouse_grab_window);
+
grab->priv->mouse_grab_screen = screen;
grab->priv->mouse_hide_cursor = hide_cursor;
}
@@ -214,6 +230,10 @@ gs_grab_get_mouse (GSGrab *grab,
void
gs_grab_keyboard_reset (GSGrab *grab)
{
+ if (grab->priv->keyboard_grab_window != NULL) {
+ g_object_remove_weak_pointer (G_OBJECT (grab->priv->keyboard_grab_window),
+ (gpointer *) &grab->priv->keyboard_grab_window);
+ }
grab->priv->keyboard_grab_window = NULL;
grab->priv->keyboard_grab_screen = NULL;
}
@@ -232,6 +252,11 @@ gs_grab_release_keyboard (GSGrab *grab)
void
gs_grab_mouse_reset (GSGrab *grab)
{
+ if (grab->priv->mouse_grab_window != NULL) {
+ g_object_remove_weak_pointer (G_OBJECT (grab->priv->mouse_grab_window),
+ (gpointer *) &grab->priv->mouse_grab_window);
+ }
+
grab->priv->mouse_grab_window = NULL;
grab->priv->mouse_grab_screen = NULL;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]