diff --git a/ChangeLog b/ChangeLog index 7ecf68b61..67836abf3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-04-15 Mike Kestner + + * gtk/Gtk.metadata: hide GtkKey_ for manual impl. + * gtk/Key.cs: manual implementation to manage delegate wrapper + persistence. [Fixes #378989] + 2008-04-15 Mike Kestner * gtk/FileSystemModel.custom: remove dead file. diff --git a/gtk/Gtk.metadata b/gtk/Gtk.metadata index fbbd86203..8739135f5 100644 --- a/gtk/Gtk.metadata +++ b/gtk/Gtk.metadata @@ -95,6 +95,7 @@ 1 1 1 + 1 async 1 1 diff --git a/gtk/Key.cs b/gtk/Key.cs new file mode 100644 index 000000000..89ac84074 --- /dev/null +++ b/gtk/Key.cs @@ -0,0 +1,51 @@ +// Key.cs - Key class implementation +// +// Author: Mike Kestner +// +// Copyright (c) 2008 Novell, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of version 2 of the Lesser GNU General +// Public License as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this program; if not, write to the +// Free Software Foundation, Inc., 59 Temple Place - Suite 330, +// Boston, MA 02111-1307, USA. + +namespace Gtk { + + using System; + using System.Collections; + using System.Runtime.InteropServices; + + public class Key { + + static Hashtable wrappers = new Hashtable (); + + [DllImport("libgtk-win32-2.0-0.dll")] + static extern uint gtk_key_snooper_install (GtkSharp.KeySnoopFuncNative snooper, IntPtr func_data); + + public static uint SnooperInstall (Gtk.KeySnoopFunc snooper) + { + GtkSharp.KeySnoopFuncWrapper snooper_wrapper = new GtkSharp.KeySnoopFuncWrapper (snooper); + uint ret = gtk_key_snooper_install (snooper_wrapper.NativeDelegate, IntPtr.Zero); + wrappers [ret] = snooper_wrapper; + return ret; + } + + [DllImport("libgtk-win32-2.0-0.dll")] + static extern void gtk_key_snooper_remove (uint snooper_handler_id); + + public static void SnooperRemove (uint snooper_handler_id) + { + gtk_key_snooper_remove(snooper_handler_id); + wrappers.Remove (snooper_handler_id); + } + } +} diff --git a/gtk/Makefile.am b/gtk/Makefile.am index b6b6e3ad0..1bfaaf8da 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -16,6 +16,7 @@ sources = \ BindingAttribute.cs \ ChildPropertyAttribute.cs \ ITreeNode.cs \ + Key.cs \ MoveFocusHandler.cs \ NodeCellDataFunc.cs \ NodeSelection.cs \