示例#1
0
        public static void WindowDestroy(Gdk.Window window)
        {
            // There is a bug in GDK, and subsequently in Gdk# 2.8.5 through 2.12.1
            // where the managed Gdk.Window.Destroy function does not obtain a
            // normal reference (non-toggle) on the GdkWindow before calling
            // _destroy on it, which the native function apparently expects.

            // https://bugzilla.novell.com/show_bug.cgi?id=382186
            // http://anonsvn.mono-project.com/viewcvs/trunk/gtk-sharp/gdk/Window.custom?rev=101734&r1=42529&r2=101734

            if (window == null)
            {
                return;
            }

            if (!toggle_ref_supported)
            {
                window.Destroy();
                return;
            }

            // If this ever happens I will move out west and start farming...
            if (g_object_ref == null || gdk_window_destroy == null)
            {
                window.Destroy();
                return;
            }

            if (invoke_args == null)
            {
                invoke_args = new object[1];
            }

            invoke_args[0] = window.Handle;
            g_object_ref.Invoke(null, invoke_args);
            gdk_window_destroy.Invoke(null, invoke_args);

            window.Dispose();
        }