255
255
g_source_remove (pDock->iSidUpdateWMIcons);
256
256
if (pDock->iSidLoadBg != 0)
257
257
g_source_remove (pDock->iSidLoadBg);
258
if (pDock->iSidDestroyEmptyDock != 0)
259
g_source_remove (pDock->iSidDestroyEmptyDock);
260
if (pDock->iSidTestMouseOutside != 0)
261
g_source_remove (pDock->iSidTestMouseOutside);
258
262
cairo_dock_notify (CAIRO_DOCK_STOP_DOCK, pDock);
260
264
g_list_foreach (pDock->icons, (GFunc) cairo_dock_free_icon, NULL);
261
265
g_list_free (pDock->icons);
262
266
pDock->icons = NULL;
264
cairo_dock_finish_container (CAIRO_CONTAINER (pDock));
266
268
if (pDock->pShapeBitmap != NULL)
267
269
g_object_unref ((gpointer) pDock->pShapeBitmap);
442
static gboolean _destroy_empty_dock (CairoDock *pDock)
444
const gchar *cDockName = cairo_dock_search_dock_name (pDock); // safe meme si le dock n'existe plus.
445
g_return_val_if_fail (cDockName != NULL, FALSE); // si NULL, cela signifie que le dock n'existe plus, donc on n'y touche pas. Ce cas ne devrait jamais arriver, c'est de la pure parano.
447
if (pDock->bIconIsFlyingAway)
449
pDock->iSidDestroyEmptyDock = 0;
450
if (pDock->icons == NULL && pDock->iRefCount == 0 && ! pDock->bIsMainDock) // le dock est toujours a detruire.
452
g_print ("The dock '%s' is empty. No icon, no dock.\n", cDockName);
453
cairo_dock_destroy_dock (pDock, cDockName);
438
457
gboolean cairo_dock_detach_icon_from_dock (Icon *icon, CairoDock *pDock, gboolean bCheckUnusedSeparator)
440
459
if (pDock == NULL)
532
551
//\___________________ On la remet a la taille normale en vue d'une reinsertion quelque part.
533
552
icon->fWidth /= pDock->container.fRatio;
534
553
icon->fHeight /= pDock->container.fRatio;
536
//\___________________ On enleve le separateur si c'est la derniere icone de son type.
537
/**if (bCheckUnusedSeparator && ! CAIRO_DOCK_IS_AUTOMATIC_SEPARATOR (icon))
539
//g_print ("on cherche une icone de ce groupe : %d (%d)\n", icon->iType, cairo_dock_get_icon_order (icon));
540
Icon *pSameTypeIcon = cairo_dock_get_first_icon_of_order (pDock->icons, icon->iType);
541
if (pSameTypeIcon == NULL)
543
Icon * pSeparatorIcon = NULL;
544
int iOrder = cairo_dock_get_icon_order (icon);
545
//g_print ("plus d'icone de cet ordre : %d\n", iOrder);
547
pSeparatorIcon = cairo_dock_get_first_icon_of_order (pDock->icons, iOrder - 1);
548
if (iOrder + 1 < CAIRO_DOCK_NB_TYPES && pSeparatorIcon == NULL)
549
pSeparatorIcon = cairo_dock_get_first_icon_of_order (pDock->icons, iOrder + 1);
551
if (pSeparatorIcon != NULL)
553
//g_print (" -> on enleve un separateur\n");
554
cairo_dock_detach_icon_from_dock (pSeparatorIcon, pDock, FALSE);
555
cairo_dock_free_icon (pSeparatorIcon);
559
//g_print ("il reste encore %s (%d, %d, %x)\n", pSameTypeIcon->cName, pSameTypeIcon->iType, cairo_dock_get_icon_order (pSameTypeIcon), pSameTypeIcon->pModuleInstance);
562
555
//\___________________ On prevoit le redessin de l'icone pointant sur le sous-dock.
563
556
if (pDock->iRefCount != 0 && ! CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (icon))
565
558
cairo_dock_trigger_redraw_subdock_content (pDock);
561
//\___________________ On prevoit la destruction du dock si c'est un dock principal qui devient vide.
562
if (pDock->iRefCount == 0 && pDock->icons == NULL && ! pDock->bIsMainDock) // on supprime les docks principaux vides.
564
if (pDock->iSidDestroyEmptyDock == 0)
565
pDock->iSidDestroyEmptyDock = g_idle_add ((GSourceFunc) _destroy_empty_dock, pDock); // on ne passe pas le nom du dock en parametre, car le dock peut se faire renommer (improbable, mais bon).
568
568
//\___________________ On prevoit le rafraichissement de la fenetre de config des lanceurs.
569
569
if (CAIRO_DOCK_IS_STORED_LAUNCHER (icon) || CAIRO_DOCK_IS_USER_SEPARATOR (icon) || CAIRO_DOCK_ICON_TYPE_IS_APPLET (icon))
570
570
cairo_dock_trigger_refresh_launcher_gui ();