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