glib: Have SourceProxy implement the Dispose pattern
Its 2 subclasses, IdleProxy and TimeoutProxy, were already implementing it, so we factor this implementation into the base class.
This commit is contained in:
parent
813f56e00a
commit
f5211acb74
3 changed files with 25 additions and 49 deletions
24
glib/Idle.cs
24
glib/Idle.cs
|
@ -44,30 +44,6 @@ namespace GLib {
|
||||||
proxy_handler = new IdleHandlerInternal (Handler);
|
proxy_handler = new IdleHandlerInternal (Handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
~IdleProxy ()
|
|
||||||
{
|
|
||||||
Dispose (false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Dispose ()
|
|
||||||
{
|
|
||||||
Dispose (true);
|
|
||||||
GC.SuppressFinalize (this);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual void Dispose (bool disposing)
|
|
||||||
{
|
|
||||||
// Both branches remove our delegate from the
|
|
||||||
// managed list of handlers, but only
|
|
||||||
// Source.Remove will remove it from the
|
|
||||||
// unmanaged list also.
|
|
||||||
|
|
||||||
if (disposing)
|
|
||||||
Remove ();
|
|
||||||
else
|
|
||||||
Source.Remove (ID);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Handler ()
|
public bool Handler ()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -31,11 +31,35 @@ namespace GLib {
|
||||||
//
|
//
|
||||||
// Base class for IdleProxy and TimeoutProxy
|
// Base class for IdleProxy and TimeoutProxy
|
||||||
//
|
//
|
||||||
internal class SourceProxy {
|
internal class SourceProxy : IDisposable {
|
||||||
internal Delegate real_handler;
|
internal Delegate real_handler;
|
||||||
internal Delegate proxy_handler;
|
internal Delegate proxy_handler;
|
||||||
internal uint ID;
|
internal uint ID;
|
||||||
|
|
||||||
|
~SourceProxy ()
|
||||||
|
{
|
||||||
|
Dispose (false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose ()
|
||||||
|
{
|
||||||
|
Dispose (true);
|
||||||
|
GC.SuppressFinalize (this);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void Dispose (bool disposing)
|
||||||
|
{
|
||||||
|
// Both branches remove our delegate from the
|
||||||
|
// managed list of handlers, but only
|
||||||
|
// Source.Remove will remove it from the
|
||||||
|
// unmanaged list also.
|
||||||
|
|
||||||
|
if (disposing)
|
||||||
|
Remove ();
|
||||||
|
else
|
||||||
|
Source.Remove (ID);
|
||||||
|
}
|
||||||
|
|
||||||
internal void Remove ()
|
internal void Remove ()
|
||||||
{
|
{
|
||||||
Source.RemoveSourceHandler (ID);
|
Source.RemoveSourceHandler (ID);
|
||||||
|
|
|
@ -42,30 +42,6 @@ namespace GLib {
|
||||||
proxy_handler = new TimeoutHandlerInternal (Handler);
|
proxy_handler = new TimeoutHandlerInternal (Handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
~TimeoutProxy ()
|
|
||||||
{
|
|
||||||
Dispose (false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Dispose ()
|
|
||||||
{
|
|
||||||
Dispose (true);
|
|
||||||
GC.SuppressFinalize (this);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual void Dispose (bool disposing)
|
|
||||||
{
|
|
||||||
// Both branches remove our delegate from the
|
|
||||||
// managed list of handlers, but only
|
|
||||||
// Source.Remove will remove it from the
|
|
||||||
// unmanaged list also.
|
|
||||||
|
|
||||||
if (disposing)
|
|
||||||
Remove ();
|
|
||||||
else
|
|
||||||
Source.Remove (ID);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Handler ()
|
public bool Handler ()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
|
Loading…
Reference in a new issue