134
134
g_clear_object(&menu->priv->win_menu_model);
135
g_clear_object(&menu->priv->win_menu);
136
if (menu->priv->win_menu) {
137
gtk_widget_destroy (GTK_WIDGET (menu->priv->win_menu));
138
g_object_unref (menu->priv->win_menu);
139
menu->priv->win_menu = NULL;
137
142
g_clear_object(&menu->priv->unity_actions);
138
143
g_clear_object(&menu->priv->win_actions);
258
263
IndicatorObjectEntry entry;
260
265
GtkMenuItem * gmi;
263
gulong sensitive_sig;
267
/* Destroy and unref the items of the object entry */
269
entry_object_free (gpointer inentry)
271
WindowMenuEntry * entry = (WindowMenuEntry *)inentry;
273
if (entry->label_sig != 0) {
274
g_signal_handler_disconnect(entry->gmi, entry->label_sig);
277
if (entry->sensitive_sig != 0) {
278
g_signal_handler_disconnect(entry->gmi, entry->sensitive_sig);
281
if (entry->visible_sig != 0) {
282
g_signal_handler_disconnect(entry->gmi, entry->visible_sig);
285
g_clear_object(&entry->entry.label);
286
g_clear_object(&entry->entry.image);
287
g_clear_object(&entry->entry.menu);
293
268
/* Sync the menu label changing to the label object */
295
270
entry_label_notify (GObject * obj, GParamSpec * pspec, gpointer user_data)
327
/* Destroy and unref the items of the object entry */
329
entry_object_free (gpointer inentry)
331
WindowMenuEntry * entry = (WindowMenuEntry *)inentry;
333
g_signal_handlers_disconnect_by_func (entry->gmi, entry_label_notify, entry);
334
g_signal_handlers_disconnect_by_func (entry->gmi, entry_sensitive_notify, entry);
335
g_signal_handlers_disconnect_by_func (entry->gmi, entry_visible_notify, entry);
337
g_clear_object(&entry->entry.label);
338
g_clear_object(&entry->entry.image);
339
g_clear_object(&entry->entry.menu);
352
345
/* Put an entry on a menu item */
354
347
entry_on_menuitem (WindowMenuModel * menu, GtkMenuItem * gmi)
356
349
WindowMenuEntry * entry = g_new0(WindowMenuEntry, 1);
358
if (menu->priv->app_actions) {
359
gtk_widget_insert_action_group(GTK_WIDGET(gmi), ACTION_MUX_PREFIX_APP, menu->priv->app_actions);
361
if (menu->priv->win_actions) {
362
gtk_widget_insert_action_group(GTK_WIDGET(gmi), ACTION_MUX_PREFIX_WIN, menu->priv->win_actions);
364
if (menu->priv->unity_actions) {
365
gtk_widget_insert_action_group(GTK_WIDGET(gmi), ACTION_MUX_PREFIX_UNITY, menu->priv->unity_actions);
368
351
entry->gmi = gmi;
370
353
entry->entry.label = mi_find_label(GTK_WIDGET(gmi));
381
364
entry->entry.label = GTK_LABEL(gtk_label_new(label));
382
365
gtk_widget_show(GTK_WIDGET(entry->entry.label));
383
entry->label_sig = g_signal_connect(G_OBJECT(gmi), "notify::label", G_CALLBACK(entry_label_notify), entry->entry.label);
366
g_signal_connect(G_OBJECT(gmi), "notify::label", G_CALLBACK(entry_label_notify), entry);
386
369
if (entry->entry.label != NULL) {
395
378
g_object_ref_sink(entry->entry.menu);
398
entry->sensitive_sig = g_signal_connect(G_OBJECT(gmi), "notify::sensitive", G_CALLBACK(entry_sensitive_notify), entry);
399
entry->visible_sig = g_signal_connect(G_OBJECT(gmi), "notify::visible", G_CALLBACK(entry_visible_notify), entry);
381
g_signal_connect(G_OBJECT(gmi), "notify::sensitive", G_CALLBACK(entry_sensitive_notify), entry);
382
g_signal_connect(G_OBJECT(gmi), "notify::visible", G_CALLBACK(entry_visible_notify), entry);
401
384
g_object_set_data_full(G_OBJECT(gmi), ENTRY_DATA, entry, entry_object_free);
440
423
g_assert(menu->priv->win_menu != NULL);
441
424
g_object_ref_sink(menu->priv->win_menu);
426
if (menu->priv->app_actions)
427
gtk_widget_insert_action_group(GTK_WIDGET(menu->priv->win_menu), ACTION_MUX_PREFIX_APP, menu->priv->app_actions);
428
if (menu->priv->win_actions)
429
gtk_widget_insert_action_group(GTK_WIDGET(menu->priv->win_menu), ACTION_MUX_PREFIX_WIN, menu->priv->win_actions);
430
if (menu->priv->unity_actions)
431
gtk_widget_insert_action_group(GTK_WIDGET(menu->priv->win_menu), ACTION_MUX_PREFIX_UNITY, menu->priv->unity_actions);
443
433
menu->priv->win_menu_insert = g_signal_connect(G_OBJECT (menu->priv->win_menu),
445
435
G_CALLBACK (item_inserted_cb),