Add custom GObject template

master
Markus Koch 2019-05-25 21:50:48 +02:00
parent 143ac48982
commit 251be4803b
6 changed files with 112 additions and 0 deletions

2
c/.gitignore vendored 100644
View File

@ -0,0 +1,2 @@
*.user
build-*

3
c/README.MD 100644
View File

@ -0,0 +1,3 @@
# C Templates
## gobject_template
The basic framework of a custom GObject. Including CMakeList and everything.

View File

@ -0,0 +1,17 @@
cmake_minimum_required(VERSION 2.8)
project(gobject-template)
#set(CMAKE_BUILD_TYPE Release)
set(CMAKE_C_FLAGS "-Wall")
find_package(PkgConfig REQUIRED)
pkg_check_modules(GLIB2 REQUIRED glib-2.0)
pkg_check_modules(GOBJECT2 REQUIRED gobject-2.0)
INCLUDE_DIRECTORIES (${GLIB2_INCLUDE_DIRS} ${GOBJECT2_INCLUDE_DIRS})
LINK_DIRECTORIES (${GLIB2_LIBRARY_DIRS} ${GOBJECT2_LIBRARY_DIRS})
add_definitions(${GLIB2_CFLAGS_OTHER} ${GOBJECT2_CFLAGS_OTHER})
aux_source_directory(./src SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
target_link_libraries(${PROJECT_NAME} ${GLIB2_LIBRARIES} ${GOBJECT2_LIBRARIES})

View File

@ -0,0 +1,20 @@
#include <stdio.h>
#include "my_gobj.h"
int main()
{
MyGobj *obj, *obk;
fprintf(stderr, "DECLARED.\n");
obj = my_gobj_new();
obk = my_gobj_new();
fprintf(stderr, "CREATED.\n");
g_object_unref(obj);
g_object_unref(obk);
fprintf(stderr, "DESTROYED.\n");
return 0;
}

View File

@ -0,0 +1,55 @@
#include "my_gobj.h"
struct _MyGobj {
GObject parent_instance;
// Private data goes here
};
G_DEFINE_TYPE (MyGobj, my_gobj, G_TYPE_OBJECT)
static void my_gobj_dispose (GObject *gobject)
{
MyGobj *obj = my_gobj_get_instance_private(MY_GOBJ(gobject));
// Called multiple times after last unref
G_OBJECT_CLASS(my_gobj_parent_class)->dispose(gobject);
}
static void my_gobj_finalize (GObject *gobject)
{
MyGobj *obj = my_gobj_get_instance_private(MY_GOBJ(gobject));
// Called once after last unref
G_OBJECT_CLASS(my_gobj_parent_class)->finalize(gobject);
}
static void my_gobj_constructed (GObject *gobject)
{
// Called once per g_object_new
G_OBJECT_CLASS(my_gobj_parent_class)->constructed(gobject);
}
static void my_gobj_class_init(MyGobjClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS(klass);
object_class->dispose = my_gobj_dispose;
object_class->finalize = my_gobj_finalize;
object_class->constructed = my_gobj_constructed;
// Called once upon first g_object_new of this type
}
static void my_gobj_init(MyGobj *self)
{
// Called once per g_object_new
}
MyGobj *my_gobj_new(void)
{
return g_object_new (MY_TYPE_GOBJ,
0);
}

View File

@ -0,0 +1,15 @@
#ifndef MY_GOBJ_H
#define MY_GOBJ_H
#include <glib-object.h>
G_BEGIN_DECLS
#define MY_TYPE_GOBJ my_gobj_get_type()
G_DECLARE_FINAL_TYPE (MyGobj, my_gobj, MY, GOBJ, GObject)
MyGobj *my_gobj_new(void);
G_END_DECLS
#endif // MY_GOBJ_H