TeplAbstractFactoryVala

TeplAbstractFactoryVala — TeplAbstractFactory subclass to work-around Vala bugs

Object Hierarchy

    GObject
    ╰── TeplAbstractFactory
        ╰── TeplAbstractFactoryVala

Includes

#include <tepl/tepl.h>

Description

TeplAbstractFactoryVala is a subclass of TeplAbstractFactory to work-around Vala bugs.

There are two bugs:

  • See tepl_abstract_factory_vala_set_singleton_vala().

  • For the functions or vfuncs in TeplAbstractFactory which have a (transfer floating) return value: apparently when a Vala function returns a newly created GInitiallyUnowned object, the return value is (transfer full). Which is not correct, it should be (transfer floating) instead (i.e. equal to (transfer none)). So to be able to implement easily those vfuncs in Vala, new Vala-specific vfuncs have been added which have a (transfer full) return value. The original vfuncs are implemented by TeplAbstractFactoryVala by calling the Vala ones and transforming the strong ref into a floating ref.

It would have been possible to modify the TeplAbstractFactory API so that it's usable in Vala as well, but in that case the API would be less convenient and less natural in C. So TeplAbstractFactoryVala has been implemented as something separate, to not clutter TeplAbstractFactory.

Functions

tepl_abstract_factory_vala_set_singleton_vala ()

void
tepl_abstract_factory_vala_set_singleton_vala
                               (TeplAbstractFactoryVala *factory_vala);

Like tepl_abstract_factory_set_singleton(), but with (transfer none) for the factory_vala parameter.

Apparently Vala doesn't support (transfer full) for the self parameter, resulting to a double unref if tepl_abstract_factory_set_singleton() is called in Vala...

Parameters

factory_vala

a TeplAbstractFactoryVala.

[transfer none]

Since: 4.0


tepl_abstract_factory_vala_create_main_window_vala ()

GtkApplicationWindow *
tepl_abstract_factory_vala_create_main_window_vala
                               (TeplAbstractFactoryVala *factory_vala,
                                GtkApplication *app);

Like tepl_abstract_factory_create_main_window(), but with a (transfer full) return value.

Parameters

factory_vala

the TeplAbstractFactoryVala.

 

app

a GtkApplication.

 

Returns

a new main application window, or NULL if the vfunc is not implemented.

[transfer full][nullable]

Since: 4.0

Types and Values

TeplAbstractFactoryVala

typedef struct _TeplAbstractFactoryVala TeplAbstractFactoryVala;

struct TeplAbstractFactoryValaClass

struct TeplAbstractFactoryValaClass {
	TeplAbstractFactoryClass parent_class;

	GtkApplicationWindow * (* create_main_window_vala) (TeplAbstractFactoryVala *factory_vala,
								 GtkApplication          *app);
};

Members

create_main_window_vala ()

Virtual function pointer for tepl_abstract_factory_vala_create_main_window_vala(). It is not implemented by default. The TeplAbstractFactory ::create_main_window vfunc is implemented by TeplAbstractFactoryVala by calling tepl_abstract_factory_vala_create_main_window_vala() and adapting the ref.