Hello Aleksander, helo all!!

So my journey continues. :)
Sorry for deleting the quoted text every time, but without doing so, answers 
may result complicated to read confortably for me.

So, in the end I came to the conclusion that using GObjects is probably the 
best course of cation :)

So I am studying the GLib GObjects page for details, and started writing some 
code to try to understand things better.

Goal: implement a GObject who can act as a container for:
- MMObjects, MMModem objects, MMModemVoice objects
- (long) integers for GSignals handlers and other data.
I managed to get my code to compile, but would like some hints / 
recommendations on how I may proceed.

My header:
#ifndef __main_h__
#define __main_h__

#include <glib-object.h>
#include <libmm-glib.h>

G_BEGIN_DECLS
#define AV_TYPE_MODEM av_modem_get_type()
G_DECLARE_DERIVABLE_TYPE(AvModem, av_modem, AV, MODEM, GObject)

struct _AvModemClass {
        MMObjectClass parent_class;

        /* functions ... */
        /* padding with things like
        gpointer padding[12];
        */
};

AvModem *av_modem_new(void);

G_END_DECLS

#endif


Source:
#include <glib.h>
#include <main.h>
#include <libmm-glib.h>

typedef struct {
        gchar *filename;
} AvModemPrivate;

G_DEFINE_TYPE_WITH_PRIVATE (AvModem, av_modem, G_TYPE_OBJECT)

static void av_modem_init(AvModem *self) {
        g_print("__FUNCTION__ invoked\n");
        AvModemPrivate *priv = av_modem_get_instance_private(self);

        /* here we would g_object_new and things */
        /* initialize all public and private members to reasonable default 
values.
         * They are all automatically initialized to 0 to begin with. */
}

static void av_modem_dispose(GObject *gobject) {
        g_print("__FUNCTION__ invoked\n");
        AvModemPrivate *priv = av_modem_get_instance_private(AV_MODEM(gobject));

        /* In dispose(), you are supposed to free all types referenced from this
         * object which might themselves hold a reference to self. Generally,
         * the most simple solution is to unref all members on which you own a
         * reference.
         */

        /* time to g_object_clear things */
        G_OBJECT_CLASS (av_modem_parent_class)->dispose (gobject);
}

static void av_modem_finalize(GObject *gobject) {
        g_print("__FUNCTION__ invoked\n");
        AvModemPrivate *priv = av_modem_get_instance_private(AV_MODEM(gobject));

        /* e.g.: g_free for filename */
        G_OBJECT_CLASS (av_modem_parent_class)->finalize (gobject);
}

static void av_modem_class_init(AvModemClass *klass) {
        g_print("__FUNCTION__ invoked\n");
        GObjectClass *object_class = G_OBJECT_CLASS (klass);
        object_class->dispose = av_modem_dispose;
        object_class->finalize = av_modem_finalize;
}



gint main(void) {
        return 0;
}

I see you use various convenience macros in libmm-glib headers, but I am trying 
to do things step by step to understand them.
I may have used GBoxed to wrap my own structs instead, but I am trying to do 
what's better.
I absoulutely need refcounting in this scenario. :)

Thanks again!!!!

Enrico
_______________________________________________
ModemManager-devel mailing list
ModemManager-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/modemmanager-devel

Reply via email to