Most of the contents of these files come from their *.custom counterparts of the 0.9.x version of the bindings, so I'm reinstating their author/licence info here. In some cases, the content is pristine to the previous version (no modification since then), so for these cases the current licence is replaced completely with the previous licence. These were spotted while creating a first version of a debian package (creating a debian/copyright info file requires you to audit all this). This is not (yet) part of BGO#725937.
101 lines
3.1 KiB
C#
101 lines
3.1 KiB
C#
//
|
|
// Authors:
|
|
// Andrés G. Aragoneses <knocte@gmail.com>
|
|
// Sebastian Dröge <slomo@circular-chaos.org>
|
|
// Stephan Sundermann <stephansundermann@gmail.com>
|
|
//
|
|
// Copyright (c) 2009 Sebastian Dröge
|
|
// Copyright (c) 2013 Andrés G. Aragoneses
|
|
// Copyright (C) 2013 Stephan Sundermann
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU Affero General Public License as
|
|
// published by the Free Software Foundation, either version 3 of the
|
|
// License, or (at your option) any later version.
|
|
//
|
|
// 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 Affero General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Affero General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace Gst {
|
|
|
|
public class PropertyNotFoundException : Exception {}
|
|
|
|
partial class Object
|
|
{
|
|
private Dictionary <string, bool> PropertyNameCache = new Dictionary<string, bool> ();
|
|
|
|
[DllImport ("libgobject-2.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
|
|
static extern IntPtr g_object_class_find_property (IntPtr klass, IntPtr name);
|
|
|
|
bool PropertyExists (string name) {
|
|
if (PropertyNameCache.ContainsKey (name))
|
|
return PropertyNameCache [name];
|
|
|
|
var ptr = g_object_class_find_property (Marshal.ReadIntPtr (Handle), GLib.Marshaller.StringToPtrGStrdup (name));
|
|
var result = ptr != IntPtr.Zero;
|
|
|
|
// just cache the positive results because there might
|
|
// actually be new properties getting installed
|
|
if (result)
|
|
PropertyNameCache [name] = result;
|
|
|
|
return result;
|
|
}
|
|
|
|
public object this[string property] {
|
|
get {
|
|
if (PropertyExists (property)) {
|
|
using (GLib.Value v = GetProperty (property)) {
|
|
return v.Val;
|
|
}
|
|
} else
|
|
throw new PropertyNotFoundException ();
|
|
} set {
|
|
if (PropertyExists (property)) {
|
|
if (value == null) {
|
|
throw new ArgumentNullException ();
|
|
}
|
|
var type = value.GetType ();
|
|
var gtype = (GLib.GType)type;
|
|
if (gtype == null) {
|
|
throw new Exception ("Could not find a GType for type " + type.FullName);
|
|
}
|
|
GLib.Value v = new GLib.Value ((GLib.GType)value.GetType ());
|
|
v.Val = value;
|
|
SetProperty (property, v);
|
|
v.Dispose ();
|
|
} else
|
|
throw new PropertyNotFoundException ();
|
|
}
|
|
}
|
|
|
|
public void Connect (string signal, SignalHandler handler) {
|
|
DynamicSignal.Connect (this, signal, handler);
|
|
}
|
|
|
|
public void Disconnect (string signal, SignalHandler handler) {
|
|
DynamicSignal.Disconnect (this, signal, handler);
|
|
}
|
|
|
|
public void Connect (string signal, Delegate handler) {
|
|
DynamicSignal.Connect (this, signal, handler);
|
|
}
|
|
|
|
public void Disconnect (string signal, Delegate handler) {
|
|
DynamicSignal.Disconnect (this, signal, handler);
|
|
}
|
|
|
|
public object Emit (string signal, params object[] parameters) {
|
|
return DynamicSignal.Emit (this, signal, parameters);
|
|
}
|
|
}
|
|
} |