#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; }