diya-shell/src/widgets/base-widgets.c

100 lines
2.7 KiB
C

#include "base-widgets.h"
#include "shell.h"
/**
* @brief Implementation of DiyaShellWindow
*
*/
enum
{
SW_NO_PROP,
SW_SHELL,
SW_N_PROPERTIES
};
static GParamSpec *g_sw_prop[SW_N_PROPERTIES] = {0};
typedef struct _DiyaShellWindowPrivate
{
GtkApplicationWindow parent;
DiyaShell * shell;
} DiyaShellWindowPrivate;
G_DEFINE_TYPE_WITH_PRIVATE(DiyaShellWindow, diya_shell_window, GTK_TYPE_APPLICATION_WINDOW)
static void diya_shell_window_dispose(GObject* object)
{
g_debug("diya_shell_window_dispose");
G_OBJECT_CLASS(diya_shell_window_parent_class)->dispose(object);
}
static void diya_shell_window_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
{
DiyaShellWindow * self = DIYA_SHELL_WINDOW(object);
DiyaShellWindowPrivate* priv = diya_shell_window_get_instance_private(self);
switch (property_id)
{
case SW_SHELL:
priv->shell = g_value_get_pointer(value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void diya_shell_window_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec)
{
DiyaShellWindow * self = DIYA_SHELL_WINDOW(object);
DiyaShellWindowPrivate* priv = diya_shell_window_get_instance_private(self);
switch (property_id)
{
case SW_SHELL:
g_value_set_pointer(value, priv->shell);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void diya_shell_window_init(DiyaShellWindow *self)
{
DiyaShellWindowPrivate* priv = diya_shell_window_get_instance_private(self);
priv->shell = NULL;
}
static void diya_shell_window_class_init(DiyaShellWindowClass *class)
{
GObjectClass *gobject_class = G_OBJECT_CLASS(class);
gobject_class->dispose = diya_shell_window_dispose;
gobject_class->set_property = diya_shell_window_set_property;
gobject_class->get_property = diya_shell_window_get_property;
class->setup = NULL;
g_sw_prop[SW_SHELL] = g_param_spec_pointer(DIYA_PROP_SHELL, NULL, "Reference to global shell", G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); //
g_object_class_install_properties (gobject_class, SW_N_PROPERTIES, g_sw_prop);
}
DiyaShellWindow* diya_shell_window_new(GType window_type, gpointer data)
{
DiyaShell* shell = data;
assert(shell);
GtkApplication * app;
g_object_get(shell, DIYA_PROP_SHELL_APPLICATION, &app, NULL);
assert(app);
DiyaShellWindow* self = DIYA_SHELL_WINDOW(g_object_new (window_type, "application", app, "shell",shell, NULL));
DiyaShellWindowClass *class = DIYA_SHELL_WINDOW_GET_CLASS(self);
if(class->setup)
{
class->setup(self);
}
return self;
}