static gboolean _on_window_destroyed (G_GNUC_UNUSED gpointer data, GldiWindowActor *actor) { cd_debug ("window %s (%p) is destroyed", actor->cName, actor); Icon *icon = _get_appli_icon (actor); if (icon != NULL) { if (actor->bDemandsAttention) // force the stop demanding attention, in case the icon was in a sub-dock (the main icon is also animating). gldi_appli_icon_stop_demanding_attention (icon); CairoDock *pParentDock = CAIRO_DOCK(cairo_dock_get_icon_container (icon)); if (pParentDock != NULL) { cd_message (" va etre supprimee"); cairo_dock_unregister_appli (icon); // unregister the icon immediately, since it doesn't represent anything any more; it unsets pAppli, so that when the animation is over, the icon will be destroyed. cairo_dock_trigger_icon_removal_from_dock (icon); } else // inhibited or not shown -> destroy it immediately { cd_message (" pas dans un container, on la detruit donc immediatement"); ///cairo_dock_update_name_on_inhibitors (icon->cClass, actor, NULL); gldi_window_inhibitors_set_name (actor, NULL); gldi_object_unref (GLDI_OBJECT (icon)); // will call cairo_dock_unregister_appli and update the inhibitors. } } if (s_pCurrentActiveWindow == actor) s_pCurrentActiveWindow = NULL; return GLDI_NOTIFICATION_LET_PASS; }
void cairo_dock_free_icon (Icon *icon) { if (icon == NULL) return ; cd_debug ("%s (%s , %s)", __func__, icon->acName, icon->cClass); cairo_dock_remove_dialog_if_any (icon); if (CAIRO_DOCK_IS_NORMAL_APPLI (icon)) cairo_dock_unregister_appli (icon); else if (icon->cClass != NULL) // c'est un inhibiteur. cairo_dock_deinhibate_class (icon->cClass, icon); if (icon->pModuleInstance != NULL) cairo_dock_deinstanciate_module (icon->pModuleInstance); cairo_dock_stop_icon_animation (icon); cairo_dock_free_notification_table (icon->pNotificationsTab); cd_debug ("icon stopped\n"); cairo_dock_free_icon_buffers (icon); cd_debug ("icon freeed\n"); g_free (icon); }
static void reset_object (GldiObject *obj) { Icon *pIcon = (Icon*)obj; cairo_dock_unregister_appli (pIcon); }