100 lines
2.7 KiB
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;
|
|
} |