109
im_desktop_menu_source_added (ImApplicationList *applist,
111
const gchar *source_id,
109
im_desktop_menu_source_section_insert_source (GMenu *source_section,
110
const gchar *source_id,
116
ImDesktopMenu *menu = user_data;
117
GMenu *source_section;
121
source_section = g_hash_table_lookup (menu->source_sections, app_id);
122
g_return_if_fail (source_section != NULL);
124
118
action = g_strconcat ("src.", source_id, NULL);
125
119
item = g_menu_item_new (label, NULL);
126
g_menu_item_set_action_and_target_value(item, action, NULL);
120
g_menu_item_set_action_and_target_value (item, action, NULL);
127
121
g_menu_item_set_attribute (item, "x-canonical-type", "s", "com.canonical.indicator.messages.source");
128
122
if (icon && *icon)
129
123
g_menu_item_set_attribute (item, "icon", "s", icon);
131
g_menu_append_item (source_section, item);
126
g_menu_insert_item (source_section, pos, item);
128
g_menu_append_item (source_section, item);
134
131
g_object_unref (item);
138
im_desktop_menu_source_removed (ImApplicationList *applist,
140
const gchar *source_id,
135
im_desktop_menu_source_section_find_source (GMenu *source_section,
136
const gchar *source_id)
143
ImDesktopMenu *menu = user_data;
144
GMenu *source_section;
149
source_section = g_hash_table_lookup (menu->source_sections, app_id);
150
g_return_if_fail (source_section != NULL);
152
142
n_items = g_menu_model_get_n_items (G_MENU_MODEL (source_section));
153
143
action = g_strconcat ("src.", source_id, NULL);
159
149
if (g_menu_model_get_item_attribute (G_MENU_MODEL (source_section), i, "action", "s", &item_action))
161
if (g_str_equal (action, item_action))
162
g_menu_remove (source_section, i);
153
equal = g_str_equal (action, item_action);
164
154
g_free (item_action);
163
return i < n_items ? i : -1;
168
im_desktop_menu_source_added (ImApplicationList *applist,
170
const gchar *source_id,
175
ImDesktopMenu *menu = user_data;
176
GMenu *source_section;
178
source_section = g_hash_table_lookup (menu->source_sections, app_id);
179
g_return_if_fail (source_section != NULL);
181
im_desktop_menu_source_section_insert_source (source_section, source_id, label, icon, -1);
185
im_desktop_menu_source_removed (ImApplicationList *applist,
187
const gchar *source_id,
190
ImDesktopMenu *menu = user_data;
191
GMenu *source_section;
194
source_section = g_hash_table_lookup (menu->source_sections, app_id);
195
g_return_if_fail (source_section != NULL);
197
pos = im_desktop_menu_source_section_find_source (source_section, source_id);
199
g_menu_remove (source_section, pos);
203
im_desktop_menu_source_changed (ImApplicationList *applist,
205
const gchar *source_id,
211
ImDesktopMenu *menu = user_data;
215
section = g_hash_table_lookup (menu->source_sections, app_id);
216
g_return_if_fail (section != NULL);
218
pos = im_desktop_menu_source_section_find_source (section, source_id);
221
g_menu_remove (section, pos);
224
im_desktop_menu_source_section_insert_source (section, source_id, label, icon, pos);
244
im_desktop_menu_app_stopped (ImApplicationList *applist,
248
ImDesktopMenu *menu = user_data;
251
section = g_hash_table_lookup (menu->source_sections, app_id);
252
g_return_if_fail (section != NULL);
254
while (g_menu_model_get_n_items (G_MENU_MODEL (section)) > 0)
255
g_menu_remove (section, 0);
188
259
create_status_section (void)
262
333
g_signal_connect (applist, "app-added", G_CALLBACK (im_desktop_menu_app_added), menu);
263
334
g_signal_connect (applist, "source-added", G_CALLBACK (im_desktop_menu_source_added), menu);
264
335
g_signal_connect (applist, "source-removed", G_CALLBACK (im_desktop_menu_source_removed), menu);
336
g_signal_connect (applist, "source-changed", G_CALLBACK (im_desktop_menu_source_changed), menu);
265
337
g_signal_connect (applist, "remove-all", G_CALLBACK (im_desktop_menu_remove_all), menu);
338
g_signal_connect (applist, "app-stopped", G_CALLBACK (im_desktop_menu_app_stopped), menu);
267
340
G_OBJECT_CLASS (im_desktop_menu_parent_class)->constructed (object);