GtkSharp/gtk/Application.cs
Miguel de Icaza 1c5b25f9a1 2003-03-11 Miguel de Icaza <miguel@ximian.com>
* gtk/Application.cs (CurrentEvent): Property implementing the
	suggestion from Paolo.

	* glib/Object.cs (Dispose): Destructor might be invoked in a
	thread, queue the object for destruction using the Gtk idle
	handler.   We perform the real destruction of the object in the
	same thread as the Gtk+ main thread.

svn path=/trunk/gtk-sharp/; revision=12551
2003-03-15 20:49:37 +00:00

178 lines
4.5 KiB
C#
Executable file

// GTK.Application.cs - GTK Main Event Loop class implementation
//
// Author: Mike Kestner <mkestner@speakeasy.net>
//
// (c) 2001 Mike Kestner
namespace Gtk {
using System;
using System.Runtime.InteropServices;
using Gdk;
public class Application {
//
// Disables creation of instances.
//
private Application ()
{
}
[DllImport("libgtk-win32-2.0-0.dll")]
static extern void gtk_init (int argc, IntPtr argv);
public static void Init ()
{
gtk_init (0, new IntPtr(0));
}
[DllImport("libgtk-win32-2.0-0.dll")]
static extern void gtk_init (ref int argc, ref String[] argv);
[DllImport("libgtk-win32-2.0-0.dll")]
static extern bool gtk_init_check (ref int argc, ref String[] argv);
public static void Init (ref string[] args)
{
int argc = args.Length;
gtk_init (ref argc, ref args);
}
public static bool InitCheck (ref string[] args)
{
int argc = args.Length;
return gtk_init_check (ref argc, ref args);
}
[DllImport("libgtk-win32-2.0-0.dll")]
static extern void gtk_main ();
public static void Run ()
{
gtk_main ();
}
[DllImport("libgtk-win32-2.0-0.dll")]
static extern bool gtk_events_pending ();
public static bool EventsPending ()
{
return gtk_events_pending ();
}
[DllImport("libgtk-win32-2.0-0.dll")]
static extern void gtk_main_iteration ();
[DllImport("libgtk-win32-2.0-0.dll")]
static extern bool gtk_main_iteration_do (bool blocking);
public static void RunIteration ()
{
gtk_main_iteration ();
}
public static bool RunIteration (bool blocking)
{
return gtk_main_iteration_do (blocking);
}
[DllImport("libgtk-win32-2.0-0.dll")]
static extern void gtk_main_quit ();
public static void Quit ()
{
gtk_main_quit ();
}
[DllImport("libgtk-win32-2.0-0.dll")]
static extern IntPtr gtk_get_current_event ();
public object CurrentEvent {
get {
IntPtr handle = gtk_get_current_event ();
Gdk.EventType type;
type = (Gdk.EventType) Marshal.ReadInt32 (handle);
switch (type){
case EventType.Delete:
case EventType.Destroy:
// Fixme: do not know what this maps to.
break;
case EventType.Expose:
return Marshal.PtrToStructure (handle, typeof (Gdk.EventExpose));
case EventType.MotionNotify:
return Marshal.PtrToStructure (handle, typeof (Gdk.EventMotion));
case EventType.ButtonPress:
case EventType.TwoButtonPress:
case EventType.ThreeButtonPress:
case EventType.ButtonRelease:
return Marshal.PtrToStructure (handle, typeof (Gdk.EventButton));
case EventType.KeyPress:
case EventType.KeyRelease:
return Marshal.PtrToStructure (handle, typeof (Gdk.EventKey));
case EventType.EnterNotify:
case EventType.LeaveNotify:
// FIXME: Do not know what this maps to.
break;
case EventType.FocusChange:
return Marshal.PtrToStructure (handle, typeof (Gdk.EventFocus));
case EventType.Configure:
return Marshal.PtrToStructure (handle, typeof (Gdk.EventConfigure));
case EventType.Map:
case EventType.Unmap:
// FIXME: Do not know what this maps to.
break;
case EventType.PropertyNotify:
return Marshal.PtrToStructure (handle, typeof (Gdk.EventProperty));
case EventType.SelectionClear:
case EventType.SelectionRequest:
case EventType.SelectionNotify:
return Marshal.PtrToStructure (handle, typeof (Gdk.EventSelection));
case EventType.ProximityIn:
case EventType.ProximityOut:
return Marshal.PtrToStructure (handle, typeof (Gdk.EventProximity));
case EventType.DragEnter:
case EventType.DragLeave:
case EventType.DragMotion:
case EventType.DragStatus:
case EventType.DropFinished:
return Marshal.PtrToStructure (handle, typeof (Gdk.EventDND));
case EventType.ClientEvent:
return Marshal.PtrToStructure (handle, typeof (Gdk.EventClient));
case EventType.VisibilityNotify:
return Marshal.PtrToStructure (handle, typeof (Gdk.EventVisibility));
case EventType.NoExpose:
return Marshal.PtrToStructure (handle, typeof (Gdk.EventNoExpose));
case EventType.Scroll:
return Marshal.PtrToStructure (handle, typeof (Gdk.EventScroll));
case EventType.WindowState:
return Marshal.PtrToStructure (handle, typeof (Gdk.EventWindowState));
case EventType.Setting:
return Marshal.PtrToStructure (handle, typeof (Gdk.EventSetting));
}
return null;
}
}
}
}