[gtk: 1/2] Gdk-Win32: Correct handling of transient state changes
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk: 1/2] Gdk-Win32: Correct handling of transient state changes
- Date: Tue, 31 Jul 2018 11:39:42 +0000 (UTC)
commit d29b378fa0f8009d9f8dcf0bd310105837006ebd
Author: Luca Bacci <luca bacci982 gmail com>
Date: Tue Jul 31 10:50:06 2018 +0200
Gdk-Win32: Correct handling of transient state changes
See merge request !248
gdk/win32/gdksurface-win32.c | 38 +++++++++++++++++---------------------
1 file changed, 17 insertions(+), 21 deletions(-)
---
diff --git a/gdk/win32/gdksurface-win32.c b/gdk/win32/gdksurface-win32.c
index ee922825fe..d47d67bfdb 100644
--- a/gdk/win32/gdksurface-win32.c
+++ b/gdk/win32/gdksurface-win32.c
@@ -760,17 +760,11 @@ gdk_win32_surface_destroy (GdkSurface *window,
_gdk_remove_modal_window (window);
/* Remove all our transient children */
- tmp = surface_impl->transient_children;
- while (tmp != NULL)
+ while (surface_impl->transient_children != NULL)
{
- GdkSurface *child = tmp->data;
- GdkSurfaceImplWin32 *child_impl = GDK_SURFACE_IMPL_WIN32 (GDK_SURFACE (child)->impl);
-
- child_impl->transient_owner = NULL;
- tmp = tmp->next;
+ GdkSurface *child = surface_impl->transient_children->data;
+ gdk_surface_set_transient_for (child, NULL);
}
- g_slist_free (surface_impl->transient_children);
- surface_impl->transient_children = NULL;
/* Remove ourself from our transient owner */
if (surface_impl->transient_owner != NULL)
@@ -1672,27 +1666,29 @@ gdk_win32_surface_set_transient_for (GdkSurface *window,
return;
}
- if (parent == NULL)
+ if (surface_impl->transient_owner == parent)
+ return;
+
+ if (GDK_IS_SURFACE (surface_impl->transient_owner))
{
GdkSurfaceImplWin32 *trans_impl = GDK_SURFACE_IMPL_WIN32 (surface_impl->transient_owner->impl);
- if (trans_impl->transient_children != NULL)
- {
- item = g_slist_find (trans_impl->transient_children, window);
- item->data = NULL;
- trans_impl->transient_children = g_slist_delete_link (trans_impl->transient_children, item);
- trans_impl->num_transients--;
+ item = g_slist_find (trans_impl->transient_children, window);
+ item->data = NULL;
+ trans_impl->transient_children = g_slist_delete_link (trans_impl->transient_children, item);
+ trans_impl->num_transients--;
- if (!trans_impl->num_transients)
- {
- trans_impl->transient_children = NULL;
- }
+ if (!trans_impl->num_transients)
+ {
+ trans_impl->transient_children = NULL;
}
+
g_object_unref (G_OBJECT (surface_impl->transient_owner));
g_object_unref (G_OBJECT (window));
surface_impl->transient_owner = NULL;
}
- else
+
+ if (parent)
{
parent_impl = GDK_SURFACE_IMPL_WIN32 (parent->impl);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]