1 #include <gtk/gtkmarshal.h>
2 #include "renderer_button.h"
4 /* Some boring function declarations: GObject type system stuff */
5 static void custom_cell_renderer_button_init (CustomCellRendererButton *cellprogress);
6 static void custom_cell_renderer_button_class_init (CustomCellRendererButtonClass *klass);
7 static void custom_cell_renderer_button_get_property (GObject *object,
11 static void custom_cell_renderer_button_set_property (GObject *object,
15 static void custom_cell_renderer_button_finalize (GObject *gobject);
17 // My customized part that adds "clicked" signal
19 custom_cell_renderer_button_activate (GtkCellRenderer *cell,
23 GdkRectangle *background_area,
24 GdkRectangle *cell_area,
25 GtkCellRendererState flags);
32 static guint button_cell_signals[LAST_SIGNAL] = { 0 };
34 static gpointer parent_class;
36 /***************************************************************************
38 * custom_cell_renderer_button_get_type: here we register our type with
39 * the GObject type system if we
40 * haven't done so yet. Everything
41 * else is done in the callbacks.
43 ***************************************************************************/
45 custom_cell_renderer_button_get_type (void)
47 static GType cell_button_type = 0;
49 if (cell_button_type == 0)
51 static const GTypeInfo cell_button_info =
53 sizeof (CustomCellRendererButtonClass),
55 NULL, /* base_finalize */
56 (GClassInitFunc) custom_cell_renderer_button_class_init,
57 NULL, /* class_finalize */
58 NULL, /* class_data */
59 sizeof (CustomCellRendererButton),
61 (GInstanceInitFunc) custom_cell_renderer_button_init,
64 /* Derive from GtkCellRendererPixbuf */
65 cell_button_type = g_type_register_static (GTK_TYPE_CELL_RENDERER_PIXBUF,
66 "CustomCellRendererButton",
71 return cell_button_type;
74 /***************************************************************************
76 * custom_cell_renderer_button_init: set some default properties of the
77 * parent (GtkCellRendererPixbuf).
79 ***************************************************************************/
81 custom_cell_renderer_button_init (CustomCellRendererButton *cellbutton)
83 GTK_CELL_RENDERER(cellbutton)->mode = GTK_CELL_RENDERER_MODE_ACTIVATABLE;
84 GTK_CELL_RENDERER(cellbutton)->xpad = 2;
85 GTK_CELL_RENDERER(cellbutton)->ypad = 2;
88 /***************************************************************************
90 * custom_cell_renderer_button_class_init:
92 * set up our own get_property and set_property functions, and
93 * override the parent's functions that we need to implement.
94 * If you want cells that can be activated on their own (ie. not
95 * just the whole row selected) or cells that are editable, you
96 * will need to override 'activate' and 'start_editing' as well.
98 ***************************************************************************/
100 custom_cell_renderer_button_class_init (CustomCellRendererButtonClass *klass)
102 GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS(klass);
103 GObjectClass *object_class = G_OBJECT_CLASS(klass);
105 parent_class = g_type_class_peek_parent (klass);
106 object_class->finalize = custom_cell_renderer_button_finalize;
108 /* Hook up functions to set and get our
109 * custom cell renderer properties */
110 object_class->get_property = custom_cell_renderer_button_get_property;
111 object_class->set_property = custom_cell_renderer_button_set_property;
114 cell_class->activate = custom_cell_renderer_button_activate;
116 button_cell_signals[CLICKED] =
117 g_signal_new (g_intern_static_string ("clicked"),
118 G_OBJECT_CLASS_TYPE (object_class),
120 G_STRUCT_OFFSET (CustomCellRendererButtonClass, clicked),
122 gtk_marshal_VOID__STRING,
127 /***************************************************************************
129 * custom_cell_renderer_button_finalize: free any resources here
131 ***************************************************************************/
133 custom_cell_renderer_button_finalize (GObject *object)
136 If you need to do anyting with the renderer button ...
137 CustomCellRendererProgress *cellrendererbutton = CUSTOM_CELL_RENDERER_BUTTON(object);
140 /* Free any dynamically allocated resources here */
142 (* G_OBJECT_CLASS (parent_class)->finalize) (object);
145 /***************************************************************************
147 * custom_cell_renderer_button_get_property: as it says
149 ***************************************************************************/
151 custom_cell_renderer_button_get_property (GObject *object,
156 //CustomCellRendererButton *cellbutton = CUSTOM_CELL_RENDERER_BUTTON(object);
161 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, psec);
166 /***************************************************************************
168 * custom_cell_renderer_button_set_property: as it says
170 ***************************************************************************/
172 custom_cell_renderer_button_set_property (GObject *object,
177 //CustomCellRendererButton *cellbutton = CUSTOM_CELL_RENDERER_BUTTON(object);
182 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec);
187 /***************************************************************************
189 * custom_cell_renderer_button_new: return a new cell renderer instance
191 ***************************************************************************/
193 custom_cell_renderer_button_new (void)
195 return g_object_new(CUSTOM_TYPE_CELL_RENDERER_BUTTON, NULL);
199 custom_cell_renderer_button_activate (GtkCellRenderer *cell,
203 GdkRectangle *background_area,
204 GdkRectangle *cell_area,
205 GtkCellRendererState flags)
207 CustomCellRendererButton *cellbutton;
209 g_debug("custom_cell_renderer_button_activate ()\n");
210 cellbutton = CUSTOM_CELL_RENDERER_BUTTON (cell);
211 g_signal_emit (cell, button_cell_signals[CLICKED], 0, path);