.NET wrapper for Gtk and other related libraries
Find a file
Andrés G. Aragoneses 7ce1457c13 gtk: Fix a KeyNotFoundException regression in Destroyed event
The migration to generic collections [1] caused another regression: a
KeyNotFoundException was being thrown (instead of returning null like
HashTable did) when using the Destroyed event of the Gtk.Widget class.

[1] 6850b343ca

A particular example of this problem is Banshee's Import Media feature,
which was generating the following stacktrace:

[1 Debug 23:24:36.898] Starting - Importing Media
Marshaling activate signal
Exception in Gtk# callback delegate
  Note: Applications can use GLib.ExceptionManager.UnhandledException
to handle the exception.
System.Reflection.TargetInvocationException: Exception has been thrown
by the target of an invocation. --->
System.Collections.Generic.KeyNotFoundException: The given key was not
present in the dictionary.
  at System.Collections.Generic.Dictionary`2[System.IntPtr,System.Delegate].get_Item
(IntPtr key) [0x00000] in <filename unknown>:0
  at Gtk.Widget.add_Destroyed (System.EventHandler value) [0x00000] in
/home/knocte/gtk-sharp/gtk/Widget.cs:333
  at Hyena.Widgets.AnimatedWidget..ctor (Gtk.Widget widget, UInt32
duration, Easing easing, Blocking blocking, Boolean horizontal)
[0x0004d] in /home/knocte/banshee/src/Hyena/Hyena.Gui/Hyena.Widgets/AnimatedWidget.cs:78
2013-09-24 18:58:33 +02:00
atk MSBuild: remove AssemblyInfo.cs where it's not present 2013-09-24 01:24:39 +02:00
audit audit: Add a README file 2013-03-29 19:17:54 +01:00
cairo MSBuild: change some projects to Library type, not Executable 2013-09-24 01:24:33 +02:00
doc doc: Run the automatic documentation updater 2012-08-05 20:06:32 +02:00
gdk MSBuild: remove AssemblyInfo.cs where it's not present 2013-09-24 01:24:39 +02:00
generator generator: fix possible unhandled KeyNotFoundException (regression) 2013-08-23 22:09:06 +02:00
gio MSBuild: remove AssemblyInfo.cs where it's not present 2013-09-24 01:24:39 +02:00
glib glib: reference .NET 3.5's System.Core in MSBuild project 2013-09-24 01:28:08 +02:00
gtk gtk: Fix a KeyNotFoundException regression in Destroyed event 2013-09-24 18:58:33 +02:00
gtkdotnet gtkdotnet: Fixed P/Invokes and Dllmap to use GDK 3.0 instead of 2.0 2012-10-02 17:20:45 +02:00
pango MSBuild: remove AssemblyInfo.cs where it's not present 2013-09-24 01:24:39 +02:00
parser Add support for class const fields 2011-09-26 13:52:12 +02:00
sample Add some missing files in sample.csproj 2013-09-22 16:44:26 +02:00
sources Update various bits of documentation in READMEs and HACKING 2012-10-14 15:22:47 +02:00
.gitignore Add audit/data to .gitignore 2013-03-29 18:58:23 +01:00
AssemblyInfo.cs.in Remove ClassInitializer attributes. 2011-02-09 10:05:40 -06:00
AUTHORS release: Update AUTHORS for 2.99.1 2013-09-22 15:41:11 +02:00
autogen.sh build: Fix autogen.sh for recent changes in configure.ac 2013-09-08 17:10:50 +02:00
ChangeLog.old Archive Changelog as Changelog.old 2012-10-14 16:10:05 +02:00
configure.ac build: Update and remove some obsolete automake macro calls 2013-08-18 18:32:21 +02:00
COPYING Replaced COPYING with LGPL2-only license 2012-11-17 23:24:56 +01:00
gapi.xsd gapi.xsd: Reorder attribute definitions so that the name comes first 2013-03-24 11:18:25 +01:00
gtk-sharp-2.0-dev.wxs.in 2008-10-13 Brad Taylor <brad@getcoded.net> 2008-10-13 16:36:33 +00:00
gtk-sharp-2.0-lib.wxs.in 2008-10-13 Brad Taylor <brad@getcoded.net> 2008-10-13 16:36:33 +00:00
gtk-sharp.sln Add an audit.csproj to the MonoDevelop solution 2013-03-29 17:57:34 +01:00
gtk-sharp.snk Add gtk-sharp.snk 2004-06-08 17:32:50 +00:00
HACKING Update various bits of documentation in READMEs and HACKING 2012-10-14 15:22:47 +02:00
Makefile.am Add and use gapi.xsd to validate GAPI XML files 2013-02-23 14:32:04 +01:00
Makefile.include Add and use gapi.xsd to validate GAPI XML files 2013-02-23 14:32:04 +01:00
NEWS release: Use the new interface name in NEWS 2013-09-24 18:58:06 +02:00
policy.config.in 2005-09-21 Mike Kestner <mkestner@novell.com> 2005-09-22 04:26:52 +00:00
README gui-thread-check: Merge README with gtk-sharp's 2012-11-04 00:42:01 +00:00
README.generator silly typo 2006-04-16 02:43:41 +00:00
TODO Update TODO 2012-10-14 15:11:43 +02:00

The Gtk# website can be found at: http://www.mono-project.com/GtkSharp

Gtk# is a .NET language binding for the GTK+ toolkit and assorted GNOME
libraries. Gtk# is free software, licensed under the GNU LGPL.

Building & Installing Gtk#:
---------------------------

    Install the gtk-3 development headers first. On Debian, this can be done using:
    apt-get install libgtk-3-dev

    The build is the traditional:

        ./configure
        make
        make install

    You may want to consider using configure's prefix option to install
    Gtk# using the same prefix as Mono.  That way all of your .NET assemblies
    get placed in the same place, and you don't need to do any extra "configuring"
    to make it so mono (and mint) can find your assemblies.  In other words,
    doing something like:

        ./configure --prefix=/the/path/that/was/used/for/mono
        make
        make install

    (Of course, replace "/the/path/that/was/used/for/mono" with whatever path
    which was used for Mono.  This might have been "/usr", "/usr/local", or
    something similar.)

    If you are compiling from GIT, you will need libtool and the auto* tools
    and will need to replace the configure above with autogen.sh.


The gui-thread-check profiler module.
-------------------------------------

    Since version 3 of gtk# a profiler called "gui-thread-check" is included as
    part of the install for debugging purposes. (It's located in the subfolder
    gtk/gui-thread-check .)

    This profiler module can be used to check if a GTK# application is trying to
    invoke gtk or gdk methods from a thread which is not the main GUI thread.

    To use it, run your application with the command:

        mono --profile=gui-thread-check yourapp.exe

    If the profiler is properly installed, you'll see an output like this:

        *** Running with gui-thread-check ***
        *** GUI THREAD INITIALIZED: 2861676352

    While the application is running, if the profiler detects a non-gui thread
    invoking gtk methods, it will print a warning message together with a
    stack trace. For example:

        *** GTK CALL NOT IN GUI THREAD: Widget.gtk_widget_get_parent
           Widget.get_Parent
           SourceEditorWidget.SetLastActiveEditor
           SourceEditorWidget.get_TextEditor
           SourceEditorWidget.get_Document
           SourceEditorWidget.HandleParseInformationUpdaterWorkerThreadDoWork
           BackgroundWorker.OnDoWork
           BackgroundWorker.ProcessWorker


Discussion & Support:
---------------------

    A mailing list for Gtk# discussion is available.

    You can subscribe to the mailing list by visiting:

        http://lists.ximian.com/mailman/listinfo/gtk-sharp-list

    And following the instructions (on that page) to subscribe.
    Messages are posted on this mailing list by sending them to:

        gtk-sharp-list@ximian.com

    (The mailing list requires you to subscribe in order to post
    messages.)

    An archive of this mailing list can be found at:

        http://lists.ximian.com/archives/public/gtk-sharp-list/

    Also, people can get help with and discuss Gtk# on IRC via the
    #gtk# or #mono channels on the irc.gnome.org IRC server.

    People looking for general help with C# should visit the
    #c# channel on irc.freenode.net IRC server.


Developers:
-----------

    For developers wishing to "get started" with Gtk#, they are encouraged
    to read the Mono Hand Book:

        http://www.mono-project.com/Monkeyguide


Hackers:
--------

    For those who wish to help with the development of Gtk#, they should
    read the file named: HACKING.

    Also, anyone wishing to hack Gtk# is encouraged to join the Gtk#
    mailing list. And to visit the #gtk# IRC channel (on irc.gnome.org).