Esempio n. 1
0
/*
 * Implements
 *   org.freedesktop.bindings.Environment.setenv(String variableName, String value)
 */
JNIEXPORT void  JNICALL
Java_org_freedesktop_bindings_Environment_setenv
(
	JNIEnv *env,
	jclass cls,
	jstring _name,
	jstring _value
)
{
	const gchar* name;
	const gchar* value;

	// convert parameter name
	name = bindings_java_getString(env, _name);
	if (name == NULL) {
		return; /* OutOfMemoryError already thrown */
	}

	// convert parameter value
	value =  bindings_java_getString(env, _value);
	if (value == NULL) {
		return; /* OutOfMemoryError already thrown */
	}

	// call function
	if (g_setenv(name, value, 1) == -1) {
		bindings_java_throw(env, "\nsetenv() failed: Insufficient space in environment");
	}
	
	// clean up name
	bindings_java_releaseString(name);

	// clean up name
	bindings_java_releaseString(value);
}
JNIEXPORT jlong JNICALL
Java_org_gnome_gtk_GtkRecentChooserDialog_gtk_1recent_1chooser_1dialog_1new
(
	JNIEnv* env,
	jclass cls,
	jstring _title,
	jlong _parent,
	jstring _firstButtonText
)
{
	GtkWidget* result;
	jlong _result;
	const gchar* title;
	GtkWindow* parent;
	const gchar* firstButtonText;

	// convert parameter title
	title = (const gchar*) bindings_java_getString(env, _title);
	if (title == NULL) {
		return 0L; // Java Exception already thrown
	}

	// convert parameter parent
	parent = (GtkWindow*) _parent;

	// convert parameter firstButtonText
	firstButtonText = (const gchar*) bindings_java_getString(env, _firstButtonText);
	if (firstButtonText == NULL) {
		return 0L; // Java Exception already thrown
	}

	// call function
	result = gtk_recent_chooser_dialog_new(title, parent, firstButtonText, NULL);

	// cleanup parameter title
	bindings_java_releaseString(title);

	// cleanup parameter parent

	// cleanup parameter firstButtonText
	bindings_java_releaseString(firstButtonText);

	// translate return value to JNI type
	_result = (jlong) result;

	// cleanup return value
	if (result != NULL) {
		bindings_java_memory_cleanup((GObject*)result, FALSE);
	}

	// and finally
	return _result;
}
Esempio n. 3
0
JNIEXPORT void JNICALL
Java_org_gnome_gtk_GtkSettings_gtk_1settings_1set_1string_1property
(
	JNIEnv* env,
	jclass cls,
	jlong _self,
	jstring _name,
	jstring _vString,
	jstring _origin
)
{
	GtkSettings* self;
	const gchar* name;
	const gchar* vString;
	const gchar* origin;

	// convert parameter self
	self = (GtkSettings*) _self;

	// convert parameter name
	name = (const gchar*) bindings_java_getString(env, _name);
	if (name == NULL) {
		return; // Java Exception already thrown
	}

	// convert parameter vString
	vString = (const gchar*) bindings_java_getString(env, _vString);
	if (vString == NULL) {
		return; // Java Exception already thrown
	}

	// convert parameter origin
	origin = (const gchar*) bindings_java_getString(env, _origin);
	if (origin == NULL) {
		return; // Java Exception already thrown
	}

	// call function
	gtk_settings_set_string_property(self, name, vString, origin);

	// cleanup parameter self

	// cleanup parameter name
	bindings_java_releaseString(name);

	// cleanup parameter vString
	bindings_java_releaseString(vString);

	// cleanup parameter origin
	bindings_java_releaseString(origin);
}
Esempio n. 4
0
/**
 * Implements
 *   org.gnome.glib.GObject.g_object_set_property(long instance, String name, long value)
 * called from
 *   org.gnome.glib.GObject.setProperty(Object instance, String name, Value value)
 */
JNIEXPORT void JNICALL
Java_oscats_glib_GObject_g_1object_1set_1property
(
	JNIEnv *env,
	jclass cls,
	jlong _instance,
	jstring _name,
	jlong _value
)
{
	GObject* instance;
	const gchar* name;
	const GValue* value;
	
	// translate instance
	instance = (GObject*) _instance;
	
	// translate name
	name = bindings_java_getString(env, _name);
	if (name == NULL) {
		return; /* OutOfMemoryError already thrown */
	}
	
	// translate value
	value = (GValue*) _value;
	
	// call	method
	g_object_set_property(instance, name, value);

	// clean up name
	bindings_java_releaseString(name);
}
JNIEXPORT jlong JNICALL
Java_org_gnome_pango_PangoFontDescription_pango_1font_1description_1from_1string
(
	JNIEnv* env,
	jclass cls,
	jstring _str
)
{
	PangoFontDescription* result;
	jlong _result;
	const char* str;

	// convert parameter str
	str = (const char*) bindings_java_getString(env, _str);
	if (str == NULL) {
		return 0L; // Java Exception already thrown
	}

	// call function
	result = pango_font_description_from_string(str);

	// cleanup parameter str
	bindings_java_releaseString(str);

	// translate return value to JNI type
	_result = (jlong) result;

	// and finally
	return _result;
}
JNIEXPORT void JNICALL
Java_org_gnome_pango_PangoFontDescription_pango_1font_1description_1set_1family_1static
(
	JNIEnv* env,
	jclass cls,
	jlong _self,
	jstring _family
)
{
	PangoFontDescription* self;
	const char* family;

	// convert parameter self
	self = (PangoFontDescription*) _self;

	// convert parameter family
	family = (const char*) bindings_java_getString(env, _family);
	if (family == NULL) {
		return; // Java Exception already thrown
	}

	// call function
	pango_font_description_set_family_static(self, family);

	// cleanup parameter self

	// cleanup parameter family
	bindings_java_releaseString(family);
}
Esempio n. 7
0
JNIEXPORT void JNICALL
Java_org_gnome_gtk_GtkWindow_gtk_1window_1set_1startup_1id
(
	JNIEnv* env,
	jclass cls,
	jlong _self,
	jstring _startupId
)
{
	GtkWindow* self;
	const gchar* startupId;

	// convert parameter self
	self = (GtkWindow*) _self;

	// convert parameter startupId
	startupId = (const gchar*) bindings_java_getString(env, _startupId);
	if (startupId == NULL) {
		return; // Java Exception already thrown
	}

	// call function
	gtk_window_set_startup_id(self, startupId);

	// cleanup parameter self

	// cleanup parameter startupId
	bindings_java_releaseString(startupId);
}
Esempio n. 8
0
JNIEXPORT void JNICALL
Java_org_gnome_gtk_GtkWindow_gtk_1window_1set_1icon_1name
(
	JNIEnv* env,
	jclass cls,
	jlong _self,
	jstring _name
)
{
	GtkWindow* self;
	const gchar* name;

	// convert parameter self
	self = (GtkWindow*) _self;

	// convert parameter name
	if (_name == NULL) {
		name = NULL;
	} else {
		name = (const gchar*) bindings_java_getString(env, _name);
		if (name == NULL) {
			return; // Java Exception already thrown
		}
	}

	// call function
	gtk_window_set_icon_name(self, name);

	// cleanup parameter self

	// cleanup parameter name
	if (name != NULL) {
		bindings_java_releaseString(name);
	}
}
JNIEXPORT jlong JNICALL
Java_org_gnome_gtk_GtkToggleToolButton_gtk_1toggle_1tool_1button_1new_1from_1stock
(
	JNIEnv* env,
	jclass cls,
	jstring _stockId
)
{
	GtkToolItem* result;
	jlong _result;
	const gchar* stockId;

	// convert parameter stockId
	stockId = (const gchar*) bindings_java_getString(env, _stockId);
	if (stockId == NULL) {
		return 0L; // Java Exception already thrown
	}

	// call function
	result = gtk_toggle_tool_button_new_from_stock(stockId);

	// cleanup parameter stockId
	bindings_java_releaseString(stockId);

	// translate return value to JNI type
	_result = (jlong) result;

	// cleanup return value
	if (result != NULL) {
		bindings_java_memory_cleanup((GObject*)result, TRUE);
	}

	// and finally
	return _result;
}
Esempio n. 10
0
JNIEXPORT void JNICALL
Java_org_gnome_gtk_GtkMessageDialog_gtk_1message_1dialog_1format_1secondary_1markup
(
	JNIEnv* env,
	jclass cls,
	jlong _self,
	jstring _messageFormat
)
{
	GtkMessageDialog* self;
	const gchar* messageFormat;

	// convert parameter self
	self = (GtkMessageDialog*) _self;

	// convert parameter messageFormat
	messageFormat = (const gchar*) bindings_java_getString(env, _messageFormat);
	if (messageFormat == NULL) {
		return; // Java Exception already thrown
	}

	// call function
	gtk_message_dialog_format_secondary_markup(self, messageFormat, NULL);

	// cleanup parameter self

	// cleanup parameter messageFormat
	bindings_java_releaseString(messageFormat);
}
Esempio n. 11
0
JNIEXPORT void JNICALL
Java_org_gnome_gtk_GtkMessageDialog_gtk_1message_1dialog_1set_1markup
(
	JNIEnv* env,
	jclass cls,
	jlong _self,
	jstring _str
)
{
	GtkMessageDialog* self;
	const gchar* str;

	// convert parameter self
	self = (GtkMessageDialog*) _self;

	// convert parameter str
	str = (const gchar*) bindings_java_getString(env, _str);
	if (str == NULL) {
		return; // Java Exception already thrown
	}

	// call function
	gtk_message_dialog_set_markup(self, str);

	// cleanup parameter self

	// cleanup parameter str
	bindings_java_releaseString(str);
}
Esempio n. 12
0
JNIEXPORT void JNICALL
Java_oscats_bindings_Time_tzset
(
	JNIEnv *env,
	jclass cls,
	jstring _zoneinfo
)
{
	/*
	 * Carry out the magic to switch zones by calling tzset(). It doesn't
	 * have parameters - it pulls TZ from the environment.
	 */

	const char *zoneinfo;
	int ok;

	zoneinfo = bindings_java_getString(env, _zoneinfo);
	if (zoneinfo == NULL) {
		return; /* OutOfMemoryError already thrown */
	}

	ok = g_setenv("TZ", zoneinfo, TRUE);

	bindings_java_releaseString(zoneinfo);
	if (ok != 0) {
		// throw exception
		return;
	}

	tzset();
}
Esempio n. 13
0
JNIEXPORT void JNICALL
Java_org_gnome_gtk_GtkStyleContext_gtk_1style_1context_1remove_1region
(
	JNIEnv* env,
	jclass cls,
	jlong _self,
	jstring _regionName
)
{
	GtkStyleContext* self;
	const gchar* regionName;

	// convert parameter self
	self = (GtkStyleContext*) _self;

	// convert parameter regionName
	regionName = (const gchar*) bindings_java_getString(env, _regionName);
	if (regionName == NULL) {
		return; // Java Exception already thrown
	}

	// call function
	gtk_style_context_remove_region(self, regionName);

	// cleanup parameter self

	// cleanup parameter regionName
	bindings_java_releaseString(regionName);
}
Esempio n. 14
0
/**
 * Implements
 *   org.gnome.glib.GObject.g_quark_from_string(String str)
 */
JNIEXPORT jlong JNICALL
Java_oscats_glib_GObject_g_1quark_1from_1string
(
	JNIEnv *env,
	jclass cls,
	jstring _str
)
{
	const gchar* str;
	GQuark quark;

	// translate
	str = bindings_java_getString(env, _str);
	if (str == NULL) {
		return 0; /* OutOfMemoryError already thrown */
	}

	// make the call
	quark = g_quark_from_string(str);

	// clean up
	bindings_java_releaseString(str);

	// return value
	return (jlong) quark;
}
Esempio n. 15
0
JNIEXPORT jlong JNICALL
Java_org_gnome_gtk_GtkCheckMenuItem_gtk_1check_1menu_1item_1new_1with_1label
(
	JNIEnv* env,
	jclass cls,
	jstring _label
)
{
	GtkWidget* result;
	jlong _result;
	const gchar* label;

	// convert parameter label
	label = (const gchar*) bindings_java_getString(env, _label);
	if (label == NULL) {
		return 0L; // Java Exception already thrown
	}

	// call function
	result = gtk_check_menu_item_new_with_label(label);

	// cleanup parameter label
	bindings_java_releaseString(label);

	// translate return value to JNI type
	_result = (jlong) result;

	// cleanup return value
	if (result != NULL) {
		bindings_java_memory_cleanup((GObject*)result, TRUE);
	}

	// and finally
	return _result;
}
Esempio n. 16
0
JNIEXPORT void JNICALL
Java_org_gnome_gdk_GdkWindow_gdk_1window_1set_1role
(
	JNIEnv* env,
	jclass cls,
	jlong _self,
	jstring _role
)
{
	GdkWindow* self;
	const gchar* role;

	// convert parameter self
	self = (GdkWindow*) _self;

	// convert parameter role
	role = (const gchar*) bindings_java_getString(env, _role);
	if (role == NULL) {
		return; // Java Exception already thrown
	}

	// call function
	gdk_window_set_role(self, role);

	// cleanup parameter self

	// cleanup parameter role
	bindings_java_releaseString(role);
}
Esempio n. 17
0
JNIEXPORT void JNICALL
Java_org_gnome_gtk_GtkFileChooser_gtk_1file_1chooser_1unselect_1uri
(
	JNIEnv* env,
	jclass cls,
	jlong _self,
	jstring _uri
)
{
	GtkFileChooser* self;
	const char* uri;

	// convert parameter self
	self = (GtkFileChooser*) _self;

	// convert parameter uri
	uri = (const char*) bindings_java_getString(env, _uri);
	if (uri == NULL) {
		return; // Java Exception already thrown
	}

	// call function
	gtk_file_chooser_unselect_uri(self, uri);

	// cleanup parameter self

	// cleanup parameter uri
	bindings_java_releaseString(uri);
}
Esempio n. 18
0
JNIEXPORT void JNICALL
Java_org_gnome_gtk_GtkTextBufferOverride_g_1signal_1stop_1emission
(
	JNIEnv* env,
	jclass cls,
	jlong _self,
	jstring _name
)
{
	GtkTextBuffer* self;
	const gchar* name;

	// convert self
	self = (GtkTextBuffer*) _self;

	// convert name
	name = bindings_java_getString(env, _name);

	g_signal_stop_emission_by_name(self, name);

	// cleanup self

	// cleanup name
	bindings_java_releaseString(name);
}
Esempio n. 19
0
JNIEXPORT void JNICALL
Java_org_gnome_gtk_GtkToolItem_gtk_1tool_1item_1set_1tooltip_1markup
(
    JNIEnv* env,
    jclass cls,
    jlong _self,
    jstring _markup
)
{
    GtkToolItem* self;
    const gchar* markup;

    // convert parameter self
    self = (GtkToolItem*) _self;

    // convert parameter markup
    markup = (const gchar*) bindings_java_getString(env, _markup);
    if (markup == NULL) {
        return; // Java Exception already thrown
    }

    // call function
    gtk_tool_item_set_tooltip_markup(self, markup);

    // cleanup parameter self

    // cleanup parameter markup
    bindings_java_releaseString(markup);
}
Esempio n. 20
0
JNIEXPORT void JNICALL
Java_org_gnome_gtk_GtkFileChooser_gtk_1file_1chooser_1set_1current_1name
(
	JNIEnv* env,
	jclass cls,
	jlong _self,
	jstring _name
)
{
	GtkFileChooser* self;
	const gchar* name;

	// convert parameter self
	self = (GtkFileChooser*) _self;

	// convert parameter name
	name = (const gchar*) bindings_java_getString(env, _name);
	if (name == NULL) {
		return; // Java Exception already thrown
	}

	// call function
	gtk_file_chooser_set_current_name(self, name);

	// cleanup parameter self

	// cleanup parameter name
	bindings_java_releaseString(name);
}
Esempio n. 21
0
/*
 * Implements
 *   org.freedesktop.bindings.Environment.getenv(String variableName)
 */
JNIEXPORT jobject JNICALL
Java_org_freedesktop_bindings_Environment_getenv
(
	JNIEnv *env,
	jclass cls,
	jstring _name
)
{
	const gchar* name;
	gchar* result;

	// convert parameter name
	name = bindings_java_getString(env, _name);
	if (name == NULL) {
		return NULL; /* OutOfMemoryError already thrown */
	}

	// call function
	result = (gchar*) g_getenv(name); 

	// clean up name
	bindings_java_releaseString(name);

	// and return	
	return bindings_java_newString(env, result);
}
Esempio n. 22
0
JNIEXPORT void JNICALL
Java_org_gnome_gtk_GtkToolItem_gtk_1tool_1item_1set_1tooltip_1text
(
    JNIEnv* env,
    jclass cls,
    jlong _self,
    jstring _text
)
{
    GtkToolItem* self;
    const gchar* text;

    // convert parameter self
    self = (GtkToolItem*) _self;

    // convert parameter text
    text = (const gchar*) bindings_java_getString(env, _text);
    if (text == NULL) {
        return; // Java Exception already thrown
    }

    // call function
    gtk_tool_item_set_tooltip_text(self, text);

    // cleanup parameter self

    // cleanup parameter text
    bindings_java_releaseString(text);
}
Esempio n. 23
0
/**
 * Implements
 *   org.gnome.glib.GValue.g_value_init(String str)
 * called from
 *   org.gnome.glib.GValue.createValue(String str)
 *
 * Allocate a GValue for a char* with GSlice, then initialize it and return
 * the pointer.
 */
JNIEXPORT jlong JNICALL
Java_org_gnome_glib_GValue_g_1value_1init__Ljava_lang_String_2
(
	JNIEnv *env,
	jclass cls,
	jstring _str
)
{
	const gchar* str;
	GValue* value;

	// translate
	str = bindings_java_getString(env, _str);
	if (str == NULL) {
		return 0; /* OutOfMemoryError already thrown */
	}

	// allocate and set to zeros, per what g_value_init requires
	value =	g_slice_new0(GValue);
	g_value_init(value, G_TYPE_STRING);

	// set the value
	g_value_set_string(value, str);

	// clean up
	bindings_java_releaseString(str);

	// return address
	return (jlong) value;
}
Esempio n. 24
0
JNIEXPORT void JNICALL
Java_org_gnome_gtk_GtkFontButton_gtk_1font_1button_1set_1title
(
	JNIEnv* env,
	jclass cls,
	jlong _self,
	jstring _title
)
{
	GtkFontButton* self;
	const gchar* title;

	// convert parameter self
	self = (GtkFontButton*) _self;

	// convert parameter title
	title = (const gchar*) bindings_java_getString(env, _title);
	if (title == NULL) {
		return; // Java Exception already thrown
	}

	// call function
	gtk_font_button_set_title(self, title);

	// cleanup parameter self

	// cleanup parameter title
	bindings_java_releaseString(title);
}
Esempio n. 25
0
/**
 * Implements
 *   org.gnome.glib.GObject.g_signal_connect(long instance, Object handler, String name, boolean after)
 * called from
 *   org.gnome.glib.Plumbing.connectSignal(Object instance, Signal handler, String name, boolean after)
 * called from
 *   <generated package scope classes>.connect(Object instance, Signal handler, boolean after)
 *
 * This is where the magic to create a GClosure and hook it up to the GSignal
 * handling mechanisms is taken care of. A reference is created to the passed
 * Java object which is used as the callback when the signal is fired.
 */
JNIEXPORT void JNICALL
Java_oscats_glib_GObject_g_1signal_1connect
(
	JNIEnv *env,
	jclass cls,
	jlong _instance,
	jobject _handler,
	jobject _receiver,
	jstring _name,
	jboolean _after
)
{
	GObject* instance;
  	const gchar* name;
  	gboolean after;

  	guint id;
  	GQuark detail = 0;
  	GClosure* closure;
  	gboolean ok;

	// translate instance  	
  	instance = (GObject*) _instance;

	// translate the signal name
	name = bindings_java_getString(env, _name);

	// translate after  	
  	after = (gboolean) _after;

	/*
	 * Lookup the signal information. We use this rather than g_signal_lookup() because
	 * it allows us to sidestep the issue of detailed signal names.
	 */

	ok = g_signal_parse_name(name, G_OBJECT_TYPE(instance), &id, &detail, TRUE);
	
	if (!ok) {
		bindings_java_throw(env, "Unknown signal name %s for object %s", name, G_OBJECT_TYPE_NAME(instance));
    		return;
  	}
  	
  	closure = bindings_java_closure_new(env, _handler, (jclass) _receiver, name, id);
  	if (closure == NULL) {
  		// and an exception has already been thrown
	    	return;
  	}

	// returns the handler id, but we don't need it.
	g_signal_connect_closure_by_id(instance, id, detail, closure, after);
	
	// cleanup. Not really necessary as will happen automatically in a moment.
	bindings_java_releaseString(name);
}
Esempio n. 26
0
JNIEXPORT void JNICALL
Java_org_gnome_gtk_GtkWindow_gtk_1window_1set_1wmclass
(
	JNIEnv* env,
	jclass cls,
	jlong _self,
	jstring _wmclassName,
	jstring _wmclassClass
)
{
	GtkWindow* self;
	const gchar* wmclassName;
	const gchar* wmclassClass;

	// convert parameter self
	self = (GtkWindow*) _self;

	// convert parameter wmclassName
	wmclassName = (const gchar*) bindings_java_getString(env, _wmclassName);
	if (wmclassName == NULL) {
		return; // Java Exception already thrown
	}

	// convert parameter wmclassClass
	wmclassClass = (const gchar*) bindings_java_getString(env, _wmclassClass);
	if (wmclassClass == NULL) {
		return; // Java Exception already thrown
	}

	// call function
	gtk_window_set_wmclass(self, wmclassName, wmclassClass);

	// cleanup parameter self

	// cleanup parameter wmclassName
	bindings_java_releaseString(wmclassName);

	// cleanup parameter wmclassClass
	bindings_java_releaseString(wmclassClass);
}
Esempio n. 27
0
JNIEXPORT jlong JNICALL
Java_org_gnome_gtk_GtkRadioButton_gtk_1radio_1button_1new_1with_1mnemonic
(
	JNIEnv* env,
	jclass cls,
	jlongArray _group,
	jstring _label
)
{
	GtkWidget* result;
	jlong _result;
	GSList* group;
	const gchar* label;

	// convert parameter group
	if (_group == NULL) {
		group = NULL;
	} else {
		group = (GSList*) bindings_java_convert_jarray_to_gslist(env, _group);
		if (group == NULL) {
			return 0L; // Java Exception already thrown
		}
	}

	// convert parameter label
	label = (const gchar*) bindings_java_getString(env, _label);
	if (label == NULL) {
		return 0L; // Java Exception already thrown
	}

	// call function
	result = gtk_radio_button_new_with_mnemonic(group, label);

	// cleanup parameter group
	if (group != NULL) {
		g_slist_free(group);
	}

	// cleanup parameter label
	bindings_java_releaseString(label);

	// translate return value to JNI type
	_result = (jlong) result;

	// cleanup return value
	if (result != NULL) {
		bindings_java_memory_cleanup((GObject*)result, TRUE);
	}

	// and finally
	return _result;
}
Esempio n. 28
0
JNIEXPORT jlong JNICALL
Java_org_gnome_gtk_GtkInfoBar_gtk_1info_1bar_1add_1button
(
    JNIEnv* env,
    jclass cls,
    jlong _self,
    jstring _buttonText,
    jint _responseId
)
{
    GtkWidget* result;
    jlong _result;
    GtkInfoBar* self;
    const gchar* buttonText;
    gint responseId;

    // convert parameter self
    self = (GtkInfoBar*) _self;

    // convert parameter buttonText
    buttonText = (const gchar*) bindings_java_getString(env, _buttonText);
    if (buttonText == NULL) {
        return 0L; // Java Exception already thrown
    }

    // convert parameter responseId
    responseId = (gint) _responseId;

    // call function
    result = gtk_info_bar_add_button(self, buttonText, responseId);

    // cleanup parameter self

    // cleanup parameter buttonText
    bindings_java_releaseString(buttonText);

    // cleanup parameter responseId

    // translate return value to JNI type
    _result = (jlong) result;

    // cleanup return value
    if (result != NULL) {
        bindings_java_memory_cleanup((GObject*)result, FALSE);
    }

    // and finally
    return _result;
}
Esempio n. 29
0
JNIEXPORT void JNICALL Java_org_gnome_webKit_WebView_setExtensionsDirectory
  (JNIEnv *env, jclass cls, jstring _directory)
{
  	gchar* directory;
	directory = (gchar*) bindings_java_getString(env, _directory);
	if (directory == NULL) {
		return; // Java Exception already thrown
	}

    g_printf("Extensions Directory:%s\n", directory);

    webkit_web_context_set_web_extensions_directory(webkit_web_context_get_default (), directory);

    bindings_java_releaseString(directory);
}
Esempio n. 30
0
/**
 * Implements
 *   org.gnome.glib.GObject.g_object_get_property(long instance, String name)
 * called from
 *   org.gnome.glib.GObject.getProperty(Object instance, String name)
 * 
 * The idea of using g_object_class_find_property() to get at an appropriate
 * GType for the empty GValue we need to pass as an out parameter to
 * g_object_get_property() is borrowed from java-gnome 2.x's implementation.  
 */
JNIEXPORT jlong JNICALL Java_oscats_glib_GObject_g_1object_1get_1property
(
	JNIEnv* env,
	jclass cls,
	jlong _instance,
	jstring _name
)
{
	GObject* instance;
	const gchar* name;
	GValue* value;
	GParamSpec* spec;
	
	// translate instance
	instance = (GObject*) _instance;
	
	// translate name
	name = bindings_java_getString(env, _name);
	if (name == NULL) {
		return 0L; /* OutOfMemoryError already thrown */
	}

	// initialize value
	spec = g_object_class_find_property(G_OBJECT_GET_CLASS(instance), name);
	if (spec == NULL) {
		bindings_java_throw(env, "GParamSpec for %s was NULL", name);
		return 0L;
	}

	value =	g_slice_new0(GValue);
	g_value_init(value, spec->value_type);

	// call	method
	g_object_get_property(instance, name, value);

	// clean up name
	bindings_java_releaseString(name);
	
	/*
	 * we do not need to clean up value; it will eventually be underneath a
	 * Fundamental extends Value extends Proxy which will ultimately call
	 * g_value_free() when it is ready to be disposed.
	 */
	 	
	return (jlong) value;
}