2
* Authors: Rodney Dawes <dobey.pwns@gmail.com>
4
* Copyright 2008 Rodney Dawes
14
#include <gtk/gtkbuildable.h>
16
struct _CalViewPrivate {
23
static void cal_view_finalize (GObject * object);
25
/* GtkObject Methods */
26
static void cal_view_destroy (GtkObject * object);
28
/* GtkWidget Methods */
29
static gboolean cal_view_expose (GtkWidget * widget,
30
GdkEventExpose * event);
31
static void cal_view_style_set (GtkWidget * widget,
32
GtkStyle * old_style);
34
/* GtkBuildable Methods */
35
static void cal_view_buildable_init (GtkBuildableIface * iface);
36
static void cal_view_buildable_add_child (GtkBuildable * cal_view,
41
G_DEFINE_TYPE_WITH_CODE (CalView, cal_view, GTK_TYPE_DRAWING_AREA,
42
G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
43
cal_view_buildable_init))
45
static void cal_view_class_init (CalViewClass * klass) {
46
GObjectClass * o_class;
47
GtkObjectClass * obj_class;
48
GtkWidgetClass * wid_class;
49
GtkDrawingAreaClass * parent_class;
51
o_class = (GObjectClass *) klass;
52
obj_class = (GtkObjectClass *) klass;
53
wid_class = (GtkWidgetClass *) klass;
54
parent_class = (GtkDrawingAreaClass *) klass;
57
o_class->finalize = cal_view_finalize;
59
/* GtkObject Methods */
60
obj_class->destroy = cal_view_destroy;
62
/* GtkWidget Methods */
63
wid_class->expose_event = cal_view_expose;
64
wid_class->style_set = cal_view_style_set;
67
static void cal_view_buildable_init (GtkBuildableIface * iface) {
68
iface->add_child = cal_view_buildable_add_child;
71
static void cal_view_init (CalView * cal_view) {
72
CalViewPrivate * priv;
74
priv = g_new0 (CalViewPrivate, 1);
75
cal_view->priv = priv;
77
GTK_WIDGET_SET_FLAGS (cal_view, GTK_CAN_FOCUS);
80
static void cal_view_finalize (GObject * object) {
82
CalViewPrivate * priv;
84
view = CAL_VIEW (object);
88
g_object_unref (priv->model);
92
if (G_OBJECT_CLASS (cal_view_parent_class)->finalize)
93
(* G_OBJECT_CLASS (cal_view_parent_class)->finalize) (object);
96
static void cal_view_buildable_add_child (GtkBuildable * cal_view,
102
/* GtkObject Methods */
103
static void cal_view_destroy (GtkObject * object) {
104
if (GTK_OBJECT_CLASS (cal_view_parent_class)->destroy)
105
(* GTK_OBJECT_CLASS (cal_view_parent_class)->destroy) (object);
108
/* GtkWidget Methods */
109
static gboolean cal_view_expose (GtkWidget * widget,
110
GdkEventExpose * event) {
112
CalViewPrivate * priv;
114
view = CAL_VIEW (widget);
117
if (priv->model && CAL_IS_VIEW_MODEL (priv->model)) {
118
CalViewModelClass * mclass = CAL_VIEW_MODEL_GET_CLASS (priv->model);
120
if (mclass->expose_event)
121
mclass->expose_event (priv->model, widget, event);
129
static void cal_view_style_set (GtkWidget * widget,
130
GtkStyle * old_style) {
134
GtkWidget * cal_view_new (void) {
135
return GTK_WIDGET (g_object_new (CAL_TYPE_VIEW, NULL));
138
GtkWidget * cal_view_new_with_model (CalViewModel * model) {
139
CalViewPrivate * priv;
142
g_return_val_if_fail (model != NULL, NULL);
144
calview = cal_view_new ();
145
priv = CAL_VIEW (calview)->priv;