pidgin/pidgindisplayitem.c

changeset 42797
767b7685a4a4
parent 42767
8cf1d11b59c1
child 43192
e690274aee75
equal deleted inserted replaced
42796:96d1ed6df91c 42797:767b7685a4a4
30 char *id; 30 char *id;
31 char *title; 31 char *title;
32 32
33 char *icon_name; 33 char *icon_name;
34 34
35 GMenuModel *menu;
36
35 gboolean needs_attention; 37 gboolean needs_attention;
36
37 guint badge_number; 38 guint badge_number;
38 39
39 GListModel *children; 40 GListModel *children;
40 }; 41 };
41 42
46 PROP_TITLE, 47 PROP_TITLE,
47 PROP_ICON_NAME, 48 PROP_ICON_NAME,
48 PROP_NEEDS_ATTENTION, 49 PROP_NEEDS_ATTENTION,
49 PROP_BADGE_NUMBER, 50 PROP_BADGE_NUMBER,
50 PROP_CHILDREN, 51 PROP_CHILDREN,
52 PROP_MENU,
51 N_PROPERTIES, 53 N_PROPERTIES,
52 }; 54 };
53 static GParamSpec *properties[N_PROPERTIES] = {NULL, }; 55 static GParamSpec *properties[N_PROPERTIES] = {NULL, };
54 56
55 G_DEFINE_FINAL_TYPE(PidginDisplayItem, pidgin_display_item, G_TYPE_OBJECT) 57 G_DEFINE_FINAL_TYPE(PidginDisplayItem, pidgin_display_item, G_TYPE_OBJECT)
83 pidgin_display_item_dispose(GObject *obj) { 85 pidgin_display_item_dispose(GObject *obj) {
84 PidginDisplayItem *item = PIDGIN_DISPLAY_ITEM(obj); 86 PidginDisplayItem *item = PIDGIN_DISPLAY_ITEM(obj);
85 87
86 g_clear_object(&item->widget); 88 g_clear_object(&item->widget);
87 g_clear_object(&item->children); 89 g_clear_object(&item->children);
90 g_clear_object(&item->menu);
88 91
89 G_OBJECT_CLASS(pidgin_display_item_parent_class)->dispose(obj); 92 G_OBJECT_CLASS(pidgin_display_item_parent_class)->dispose(obj);
90 } 93 }
91 94
92 static void 95 static void
105 GParamSpec *pspec) 108 GParamSpec *pspec)
106 { 109 {
107 PidginDisplayItem *item = PIDGIN_DISPLAY_ITEM(obj); 110 PidginDisplayItem *item = PIDGIN_DISPLAY_ITEM(obj);
108 111
109 switch(param_id) { 112 switch(param_id) {
110 case PROP_WIDGET: 113 case PROP_WIDGET:
111 g_value_set_object(value, pidgin_display_item_get_widget(item)); 114 g_value_set_object(value, pidgin_display_item_get_widget(item));
112 break; 115 break;
113 case PROP_ID: 116 case PROP_ID:
114 g_value_set_string(value, pidgin_display_item_get_id(item)); 117 g_value_set_string(value, pidgin_display_item_get_id(item));
115 break; 118 break;
116 case PROP_TITLE: 119 case PROP_TITLE:
117 g_value_set_string(value, pidgin_display_item_get_title(item)); 120 g_value_set_string(value, pidgin_display_item_get_title(item));
118 break; 121 break;
119 case PROP_ICON_NAME: 122 case PROP_ICON_NAME:
120 g_value_set_string(value, pidgin_display_item_get_icon_name(item)); 123 g_value_set_string(value, pidgin_display_item_get_icon_name(item));
121 break; 124 break;
122 case PROP_NEEDS_ATTENTION: 125 case PROP_NEEDS_ATTENTION:
123 g_value_set_boolean(value, 126 g_value_set_boolean(value,
124 pidgin_display_item_get_needs_attention(item)); 127 pidgin_display_item_get_needs_attention(item));
125 break; 128 break;
126 case PROP_BADGE_NUMBER: 129 case PROP_BADGE_NUMBER:
127 g_value_set_uint(value, 130 g_value_set_uint(value,
128 pidgin_display_item_get_badge_number(item)); 131 pidgin_display_item_get_badge_number(item));
129 break; 132 break;
130 case PROP_CHILDREN: 133 case PROP_CHILDREN:
131 g_value_set_object(value, pidgin_display_item_get_children(item)); 134 g_value_set_object(value, pidgin_display_item_get_children(item));
132 break; 135 break;
133 default: 136 case PROP_MENU:
134 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec); 137 g_value_set_object(value, pidgin_display_item_get_menu(item));
135 break; 138 break;
139 default:
140 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
141 break;
136 } 142 }
137 } 143 }
138 144
139 static void 145 static void
140 pidgin_display_item_set_property(GObject *obj, guint param_id, 146 pidgin_display_item_set_property(GObject *obj, guint param_id,
141 const GValue *value, GParamSpec *pspec) 147 const GValue *value, GParamSpec *pspec)
142 { 148 {
143 PidginDisplayItem *item = PIDGIN_DISPLAY_ITEM(obj); 149 PidginDisplayItem *item = PIDGIN_DISPLAY_ITEM(obj);
144 150
145 switch(param_id) { 151 switch(param_id) {
146 case PROP_WIDGET: 152 case PROP_WIDGET:
147 pidgin_display_item_set_widget(item, g_value_get_object(value)); 153 pidgin_display_item_set_widget(item, g_value_get_object(value));
148 break; 154 break;
149 case PROP_ID: 155 case PROP_ID:
150 pidgin_display_item_set_id(item, g_value_get_string(value)); 156 pidgin_display_item_set_id(item, g_value_get_string(value));
151 break; 157 break;
152 case PROP_TITLE: 158 case PROP_TITLE:
153 pidgin_display_item_set_title(item, g_value_get_string(value)); 159 pidgin_display_item_set_title(item, g_value_get_string(value));
154 break; 160 break;
155 case PROP_ICON_NAME: 161 case PROP_ICON_NAME:
156 pidgin_display_item_set_icon_name(item, g_value_get_string(value)); 162 pidgin_display_item_set_icon_name(item, g_value_get_string(value));
157 break; 163 break;
158 case PROP_NEEDS_ATTENTION: 164 case PROP_NEEDS_ATTENTION:
159 pidgin_display_item_set_needs_attention(item, 165 pidgin_display_item_set_needs_attention(item,
160 g_value_get_boolean(value)); 166 g_value_get_boolean(value));
161 break; 167 break;
162 case PROP_BADGE_NUMBER: 168 case PROP_BADGE_NUMBER:
163 pidgin_display_item_set_badge_number(item, 169 pidgin_display_item_set_badge_number(item,
164 g_value_get_uint(value)); 170 g_value_get_uint(value));
165 break; 171 break;
166 case PROP_CHILDREN: 172 case PROP_CHILDREN:
167 pidgin_display_item_set_children(item, g_value_get_object(value)); 173 pidgin_display_item_set_children(item, g_value_get_object(value));
168 break; 174 break;
169 default: 175 case PROP_MENU:
170 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec); 176 pidgin_display_item_set_menu(item, g_value_get_object(value));
171 break; 177 break;
178 default:
179 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
180 break;
172 } 181 }
173 } 182 }
174 183
175 static void 184 static void
176 pidgin_display_item_init(G_GNUC_UNUSED PidginDisplayItem *window) { 185 pidgin_display_item_init(G_GNUC_UNUSED PidginDisplayItem *window) {
191 * The [class@Gtk.Widget] that this item is for. 200 * The [class@Gtk.Widget] that this item is for.
192 * 201 *
193 * Since: 3.0 202 * Since: 3.0
194 */ 203 */
195 properties[PROP_WIDGET] = g_param_spec_object( 204 properties[PROP_WIDGET] = g_param_spec_object(
196 "widget", "widget", 205 "widget", NULL, NULL,
197 "The widget for this item",
198 GTK_TYPE_WIDGET, 206 GTK_TYPE_WIDGET,
199 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); 207 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
200 208
201 /** 209 /**
202 * PidginDisplayItem:id: 210 * PidginDisplayItem:id:
205 * remembering positions and selections. 213 * remembering positions and selections.
206 * 214 *
207 * Since: 3.0 215 * Since: 3.0
208 */ 216 */
209 properties[PROP_ID] = g_param_spec_string( 217 properties[PROP_ID] = g_param_spec_string(
210 "id", "id", 218 "id", NULL, NULL,
211 "A unique identifier for the item",
212 NULL, 219 NULL,
213 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); 220 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
214 221
215 /** 222 /**
216 * PidginDisplayItem:title: 223 * PidginDisplayItem:title:
218 * The title that should be displayed for this item. 225 * The title that should be displayed for this item.
219 * 226 *
220 * Since: 3.0 227 * Since: 3.0
221 */ 228 */
222 properties[PROP_TITLE] = g_param_spec_string( 229 properties[PROP_TITLE] = g_param_spec_string(
223 "title", "title", 230 "title", NULL, NULL,
224 "The title for the item",
225 NULL, 231 NULL,
226 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); 232 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
227 233
228 /** 234 /**
229 * PidginDisplayItem:icon-name: 235 * PidginDisplayItem:icon-name:
231 * The icon name to use for this item. 237 * The icon name to use for this item.
232 * 238 *
233 * Since: 3.0 239 * Since: 3.0
234 */ 240 */
235 properties[PROP_ICON_NAME] = g_param_spec_string( 241 properties[PROP_ICON_NAME] = g_param_spec_string(
236 "icon-name", "icon-name", 242 "icon-name", NULL, NULL,
237 "The icon-name to use for this item",
238 NULL, 243 NULL,
239 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); 244 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
240 245
241 /** 246 /**
242 * PidginDisplayItem:needs-attention: 247 * PidginDisplayItem:needs-attention:
244 * Determines whether the item should show that it needs attention or not. 249 * Determines whether the item should show that it needs attention or not.
245 * 250 *
246 * Since: 3.0 251 * Since: 3.0
247 */ 252 */
248 properties[PROP_NEEDS_ATTENTION] = g_param_spec_boolean( 253 properties[PROP_NEEDS_ATTENTION] = g_param_spec_boolean(
249 "needs-attention", "needs-attention", 254 "needs-attention", NULL, NULL,
250 "Whether or not the item needs attention",
251 FALSE, 255 FALSE,
252 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); 256 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
253 257
254 /** 258 /**
255 * PidginDisplayItem:badge-number: 259 * PidginDisplayItem:badge-number:
258 * unread count. If this is 0 it should not be displayed. 262 * unread count. If this is 0 it should not be displayed.
259 * 263 *
260 * Since: 3.0 264 * Since: 3.0
261 */ 265 */
262 properties[PROP_BADGE_NUMBER] = g_param_spec_uint( 266 properties[PROP_BADGE_NUMBER] = g_param_spec_uint(
263 "badge-number", "badge-number", 267 "badge-number", NULL, NULL,
264 "The number to show in the badge",
265 0, G_MAXUINT, 0, 268 0, G_MAXUINT, 0,
266 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); 269 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
267 270
268 /** 271 /**
269 * PidginDisplayItem:children: 272 * PidginDisplayItem:children:
272 * be [class@Pidgin.DisplayItem]. 275 * be [class@Pidgin.DisplayItem].
273 * 276 *
274 * Since: 3.0 277 * Since: 3.0
275 */ 278 */
276 properties[PROP_CHILDREN] = g_param_spec_object( 279 properties[PROP_CHILDREN] = g_param_spec_object(
277 "children", "children", 280 "children", NULL, NULL,
278 "A GListModel of child items",
279 G_TYPE_LIST_MODEL, 281 G_TYPE_LIST_MODEL,
282 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
283
284 /**
285 * PidginDisplayItem:menu:
286 *
287 * An optional menu to show on the item.
288 *
289 * Since: 3.0
290 */
291 properties[PROP_MENU] = g_param_spec_object(
292 "menu", NULL, NULL,
293 G_TYPE_MENU_MODEL,
280 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); 294 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
281 295
282 g_object_class_install_properties(obj_class, N_PROPERTIES, properties); 296 g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
283 } 297 }
284 298
402 416
403 if(g_set_object(&item->children, children)) { 417 if(g_set_object(&item->children, children)) {
404 g_object_notify_by_pspec(G_OBJECT(item), properties[PROP_CHILDREN]); 418 g_object_notify_by_pspec(G_OBJECT(item), properties[PROP_CHILDREN]);
405 } 419 }
406 } 420 }
421
422 GMenuModel *
423 pidgin_display_item_get_menu(PidginDisplayItem *item) {
424 g_return_val_if_fail(PIDGIN_IS_DISPLAY_ITEM(item), NULL);
425
426 return item->menu;
427 }
428
429 void
430 pidgin_display_item_set_menu(PidginDisplayItem *item, GMenuModel *model) {
431 g_return_if_fail(PIDGIN_IS_DISPLAY_ITEM(item));
432
433 if(g_set_object(&item->menu, model)) {
434 g_object_notify_by_pspec(G_OBJECT(item), properties[PROP_MENU]);
435 }
436 }

mercurial