Author: mkestner
Date: 2008-01-23 22:52:05 -0500 (Wed, 23 Jan 2008)
New Revision: 93762
Modified:
branches/gtk-sharp-2-468-branch/gtk-sharp/ChangeLog
branches/gtk-sharp-2-468-branch/gtk-sharp/bootstrap-2.8
branches/gtk-sharp-2-468-branch/gtk-sharp/gconf/GConf/Makefile.am
branches/gtk-sharp-2-468-branch/gtk-sharp/glib/Object.cs
branches/gtk-sharp-2-468-branch/gtk-sharp/glib/Signal.cs
branches/gtk-sharp-2-468-branch/gtk-sharp/glib/ToggleRef.cs
Log:
2008-01-23 Mike Kestner <[EMAIL PROTECTED]>
* bootstrap-2.8: bump version
* glib/Object.cs: backport rework from trunk.
* glib/Signal.cs: backport rework from trunk.
* glib/ToggleRef.cs: backport rework from trunk.
* gconf/GConf/Makefile.am: add cleanfile
Modified: branches/gtk-sharp-2-468-branch/gtk-sharp/ChangeLog
===================================================================
--- branches/gtk-sharp-2-468-branch/gtk-sharp/ChangeLog 2008-01-24 03:50:49 UTC
(rev 93761)
+++ branches/gtk-sharp-2-468-branch/gtk-sharp/ChangeLog 2008-01-24 03:52:05 UTC
(rev 93762)
@@ -1,3 +1,11 @@
+2008-01-23 Mike Kestner <[EMAIL PROTECTED]>
+
+ * bootstrap-2.8: bump version
+ * glib/Object.cs: backport rework from trunk.
+ * glib/Signal.cs: backport rework from trunk.
+ * glib/ToggleRef.cs: backport rework from trunk.
+ * gconf/GConf/Makefile.am: add cleanfile
+
2008-01-24 Lluis Sanchez Gual <[EMAIL PROTECTED]>
* glade/XML.custom: due to a recent Mono fix (bug #322762),
Modified: branches/gtk-sharp-2-468-branch/gtk-sharp/bootstrap-2.8
===================================================================
--- branches/gtk-sharp-2-468-branch/gtk-sharp/bootstrap-2.8 2008-01-24
03:50:49 UTC (rev 93761)
+++ branches/gtk-sharp-2-468-branch/gtk-sharp/bootstrap-2.8 2008-01-24
03:52:05 UTC (rev 93762)
@@ -1,7 +1,7 @@
#!/bin/sh
# Run this to set configure.in up for an API version.
-GTK_SHARP_VERSION=2.8.4
+GTK_SHARP_VERSION=2.8.5
ASSEMBLY_VERSION=2.8.0.0
POLICY_VERSIONS="2.4 2.6"
GTK_REQUIRED_VERSION=2.8.0
Modified: branches/gtk-sharp-2-468-branch/gtk-sharp/gconf/GConf/Makefile.am
===================================================================
--- branches/gtk-sharp-2-468-branch/gtk-sharp/gconf/GConf/Makefile.am
2008-01-24 03:50:49 UTC (rev 93761)
+++ branches/gtk-sharp-2-468-branch/gtk-sharp/gconf/GConf/Makefile.am
2008-01-24 03:52:05 UTC (rev 93762)
@@ -2,7 +2,7 @@
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = gconf-sharp-2.0.pc
noinst_DATA = $(TARGET) $(POLICY_ASSEMBLIES)
-CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb gtk-sharp.snk $(POLICY_ASSEMBLIES)
$(POLICY_CONFIGS)
+CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb gtk-sharp.snk $(POLICY_ASSEMBLIES)
$(POLICY_CONFIGS) AssemblyInfo.cs
DISTCLEANFILES = gconf-sharp-2.0.pc $(ASSEMBLY).config
POLICY_ASSEMBLIES = $(addsuffix .$(ASSEMBLY), $(addprefix policy.,
$(POLICY_VERSIONS)))
Modified: branches/gtk-sharp-2-468-branch/gtk-sharp/glib/Object.cs
===================================================================
--- branches/gtk-sharp-2-468-branch/gtk-sharp/glib/Object.cs 2008-01-24
03:50:49 UTC (rev 93761)
+++ branches/gtk-sharp-2-468-branch/gtk-sharp/glib/Object.cs 2008-01-24
03:52:05 UTC (rev 93762)
@@ -32,6 +32,7 @@
public class Object : IWrapper, IDisposable {
IntPtr handle;
+ ToggleRef tref;
bool disposed = false;
Hashtable data;
static Hashtable Objects = new Hashtable();
@@ -40,11 +41,11 @@
~Object ()
{
- lock (PendingDestroys){
+ lock (PendingDestroys) {
lock (Objects) {
if (Objects[Handle] is ToggleRef)
- PendingDestroys.Add
(Objects[Handle]);
- Objects.Remove(Handle);
+ PendingDestroys.Add (Objects
[Handle]);
+ Objects.Remove (Handle);
}
if (!idle_queued){
Timeout.Add (50, new TimeoutHandler
(PerformQueuedUnrefs));
@@ -58,7 +59,7 @@
static bool PerformQueuedUnrefs ()
{
- object[] references;
+ object [] references;
lock (PendingDestroys){
references = new object [PendingDestroys.Count];
@@ -79,15 +80,15 @@
return;
disposed = true;
+ ToggleRef toggle_ref = Objects [Handle] as ToggleRef;
+ Objects.Remove (Handle);
try {
- ToggleRef toggle_ref = Objects [Handle] as
ToggleRef;
if (toggle_ref != null)
toggle_ref.Free ();
} catch (Exception e) {
Console.WriteLine ("Exception while disposing a
" + this + " in Gtk#");
throw e;
}
- Objects.Remove (Handle);
handle = IntPtr.Zero;
GC.SuppressFinalize (this);
}
@@ -117,7 +118,7 @@
if (!owned_ref)
g_object_ref (o);
- obj = GLib.ObjectManager.CreateObject (o);
+ obj = GLib.ObjectManager.CreateObject(o);
if (obj == null) {
g_object_unref (o);
return null;
@@ -161,7 +162,7 @@
if (m != null)
m.Invoke (null, parms);
}
-
+
for (Type curr = t; curr != typeof(GLib.Object); curr =
curr.BaseType) {
if (curr.Assembly.IsDefined (typeof
(IgnoreClassInitializersAttribute), false))
@@ -276,14 +277,17 @@
return;
if (handle != IntPtr.Zero) {
- ToggleRef tref = Objects [handle] as
ToggleRef;
- if (tref != null)
+ Objects.Remove (handle);
+ if (tref != null) {
tref.Free ();
- Objects.Remove (handle);
+ tref = null;
+ }
}
handle = value;
- if (value != IntPtr.Zero)
- Objects [value] = new ToggleRef (this);
+ if (value != IntPtr.Zero) {
+ tref = new ToggleRef (this);
+ Objects [value] = tref;
+ }
}
}
@@ -308,23 +312,19 @@
}
}
- public IntPtr Handle {
+ internal ToggleRef ToggleRef {
get {
- return handle;
+ return tref;
}
}
- Hashtable signals;
- internal Hashtable Signals {
+ public IntPtr Handle {
get {
- if (signals == null)
- signals = new Hashtable ();
- return signals;
+ return handle;
}
}
Hashtable before_signals;
-
[Obsolete ("Replaced by GLib.Signal marshaling mechanism.")]
protected Hashtable BeforeSignals {
get {
Modified: branches/gtk-sharp-2-468-branch/gtk-sharp/glib/Signal.cs
===================================================================
--- branches/gtk-sharp-2-468-branch/gtk-sharp/glib/Signal.cs 2008-01-24
03:50:49 UTC (rev 93761)
+++ branches/gtk-sharp-2-468-branch/gtk-sharp/glib/Signal.cs 2008-01-24
03:52:05 UTC (rev 93762)
@@ -22,9 +22,16 @@
namespace GLib {
using System;
+ using System.Collections;
using System.Runtime.InteropServices;
[Flags]
+ public enum ConnectFlags {
+ After = 1 << 0,
+ Swapped = 1 << 1,
+ }
+
+ [Flags]
internal enum SignalFlags {
RunFirst = 1 << 0,
RunLast = 1 << 1,
@@ -45,7 +52,7 @@
public class Signal {
GCHandle gc_handle;
- GLib.Object obj;
+ ToggleRef tref;
string name;
uint before_id = UInt32.MaxValue;
uint after_id = UInt32.MaxValue;
@@ -58,13 +65,22 @@
private Signal (GLib.Object obj, string signal_name, Delegate
marshaler)
{
- this.obj = obj;
+ tref = obj.ToggleRef;
name = signal_name;
this.marshaler = marshaler;
gc_handle = GCHandle.Alloc (this, GCHandleType.Weak);
- obj.Signals [name] = this;
+ tref.Signals [name] = this;
}
+ internal void Free ()
+ {
+ DisconnectHandler (before_id);
+ DisconnectHandler (after_id);
+ before_handler = after_handler = marshaler = null;
+ gc_handle.Free ();
+ GC.SuppressFinalize (this);
+ }
+
public static Signal Lookup (GLib.Object obj, string name)
{
return Lookup (obj, name, EventHandlerDelegate);
@@ -72,7 +88,7 @@
public static Signal Lookup (GLib.Object obj, string name,
Delegate marshaler)
{
- Signal result = obj.Signals [name] as Signal;
+ Signal result = obj.ToggleRef.Signals [name] as Signal;
if (result == null)
result = new Signal (obj, name, marshaler);
return result as Signal;
@@ -83,7 +99,7 @@
public Delegate Handler {
get {
- InvocationHint hint = (InvocationHint)
Marshal.PtrToStructure (g_signal_get_invocation_hint (obj.Handle), typeof
(InvocationHint));
+ InvocationHint hint = (InvocationHint)
Marshal.PtrToStructure (g_signal_get_invocation_hint (tref.Handle), typeof
(InvocationHint));
if (hint.run_type == SignalFlags.RunFirst)
return before_handler;
else
@@ -94,7 +110,7 @@
uint Connect (int flags)
{
IntPtr native_name = GLib.Marshaller.StringToPtrGStrdup
(name);
- uint id = g_signal_connect_data (obj.Handle,
native_name, marshaler, (IntPtr) gc_handle, IntPtr.Zero, flags);
+ uint id = g_signal_connect_data (tref.Handle,
native_name, marshaler, (IntPtr) gc_handle, IntPtr.Zero, flags);
GLib.Marshaller.Free (native_name);
return id;
}
@@ -133,13 +149,13 @@
}
if (after_id == UInt32.MaxValue && before_id ==
UInt32.MaxValue)
- obj.Signals.Remove (name);
+ tref.Signals.Remove (name);
}
void DisconnectHandler (uint handler_id)
{
- if (handler_id != UInt32.MaxValue &&
g_signal_handler_is_connected (obj.Handle, handler_id))
- g_signal_handler_disconnect (obj.Handle,
handler_id);
+ if (handler_id != UInt32.MaxValue &&
g_signal_handler_is_connected (tref.Handle, handler_id))
+ g_signal_handler_disconnect (tref.Handle,
handler_id);
}
[CDeclCallback]
Modified: branches/gtk-sharp-2-468-branch/gtk-sharp/glib/ToggleRef.cs
===================================================================
--- branches/gtk-sharp-2-468-branch/gtk-sharp/glib/ToggleRef.cs 2008-01-24
03:50:49 UTC (rev 93761)
+++ branches/gtk-sharp-2-468-branch/gtk-sharp/glib/ToggleRef.cs 2008-01-24
03:52:05 UTC (rev 93762)
@@ -22,6 +22,7 @@
namespace GLib {
using System;
+ using System.Collections;
using System.Runtime.InteropServices;
internal class ToggleRef {
@@ -29,6 +30,7 @@
IntPtr handle;
object reference;
GCHandle gch;
+ Hashtable signals;
public ToggleRef (GLib.Object target)
{
@@ -44,11 +46,26 @@
if (reference is WeakReference) {
WeakReference weak = reference as
WeakReference;
return weak.IsAlive;
- }
+ } else if (reference == null)
+ return false;
return true;
}
}
+ public IntPtr Handle {
+ get {
+ return handle;
+ }
+ }
+
+ public Hashtable Signals {
+ get {
+ if (signals == null)
+ signals = new Hashtable ();
+ return signals;
+ }
+ }
+
public GLib.Object Target {
get {
if (reference is GLib.Object)
@@ -61,6 +78,9 @@
public void Free ()
{
+ foreach (Signal s in Signals.Values)
+ s.Free ();
+ Signals.Clear ();
g_object_remove_toggle_ref (handle,
ToggleNotifyCallback, (IntPtr) gch);
reference = null;
gch.Free ();
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches