24
24
#include "cairo-dock-module-instance-manager.h" // gldi_module_instance_reload
25
25
#include "cairo-dock-callbacks.h"
26
26
#include "cairo-dock-icon-facility.h"
27
#include "cairo-dock-separator-manager.h" // cairo_dock_insert_automatic_separator_in_dock
28
#include "cairo-dock-launcher-manager.h" // cairo_dock_create_icon_from_desktop_file
27
#include "cairo-dock-separator-manager.h" // gldi_auto_separator_icon_new
28
#include "cairo-dock-user-icon-manager.h" // gldi_user_icon_new
29
29
#include "cairo-dock-backends-manager.h" // myBackendsParam.fSubDockSizeRatio
30
30
#include "cairo-dock-windows-manager.h" // gldi_window_set_thumbnail_area
31
31
#include "cairo-dock-log.h"
32
32
#include "cairo-dock-application-facility.h" // cairo_dock_detach_appli
33
33
#include "cairo-dock-dialog-manager.h" // gldi_dialogs_replace_all
34
#include "cairo-dock-launcher-manager.h" // gldi_launcher_add_conf_file
34
35
#include "cairo-dock-dock-manager.h"
35
36
#include "cairo-dock-class-manager.h" // cairo_dock_get_class_subdock
36
37
#include "cairo-dock-animations.h"
130
131
Icon *pNextIcon = cairo_dock_get_next_icon (pDock->icons, icon);
131
132
if (pNextIcon != NULL && ! CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (pNextIcon))
133
int iSeparatorGroup = cairo_dock_get_icon_order (icon) +
134
(cairo_dock_get_icon_order (icon) == cairo_dock_get_icon_order (pNextIcon) ? 0 : 1); // for separators, group = order.
135
double fOrder = (cairo_dock_get_icon_order (icon) == cairo_dock_get_icon_order (pNextIcon) ? (icon->fOrder + pNextIcon->fOrder) / 2 : 0);
136
cairo_dock_insert_automatic_separator_in_dock (iSeparatorGroup, fOrder, pNextIcon->cParentDockName, pDock);
134
Icon *pSeparatorIcon = gldi_auto_separator_icon_new (icon, pNextIcon);
135
cairo_dock_insert_icon_in_dock (pSeparatorIcon, pDock, ! CAIRO_DOCK_ANIMATE_ICON);
139
138
// insert a separator before if needed
140
139
Icon *pPrevIcon = cairo_dock_get_previous_icon (pDock->icons, icon);
141
140
if (pPrevIcon != NULL && ! CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (pPrevIcon))
143
int iSeparatorGroup = cairo_dock_get_icon_order (icon) -
144
(cairo_dock_get_icon_order (icon) == cairo_dock_get_icon_order (pPrevIcon) ? 0 : 1); // for separators, group = order.
145
double fOrder = (cairo_dock_get_icon_order (icon) == cairo_dock_get_icon_order (pPrevIcon) ? (icon->fOrder + pPrevIcon->fOrder) / 2 : 0);
146
cairo_dock_insert_automatic_separator_in_dock (iSeparatorGroup, fOrder, pPrevIcon->cParentDockName, pDock);
142
Icon *pSeparatorIcon = gldi_auto_separator_icon_new (pPrevIcon, icon);
143
cairo_dock_insert_icon_in_dock (pSeparatorIcon, pDock, ! CAIRO_DOCK_ANIMATE_ICON);
239
236
pDock->icons = g_list_delete_link (pDock->icons, next_ic);
241
238
pDock->fFlatDockWidth -= pNextIcon->fWidth + myIconsParam.iIconGap;
242
cairo_dock_free_icon (pNextIcon);
239
gldi_object_unref (GLDI_OBJECT (pNextIcon));
243
240
pNextIcon = NULL;
245
242
if ((pNextIcon == NULL || CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (pNextIcon)) && CAIRO_DOCK_IS_AUTOMATIC_SEPARATOR (pPrevIcon))
247
244
pDock->icons = g_list_delete_link (pDock->icons, prev_ic);
249
246
pDock->fFlatDockWidth -= pPrevIcon->fWidth + myIconsParam.iIconGap;
250
cairo_dock_free_icon (pPrevIcon);
247
gldi_object_unref (GLDI_OBJECT (pPrevIcon));
251
248
pPrevIcon = NULL;
305
void cairo_dock_remove_icon_from_dock_full (CairoDock *pDock, Icon *icon, gboolean bCheckUnusedSeparator)
307
g_return_if_fail (icon != NULL);
309
//\___________________ On detache l'icone du dock.
311
cairo_dock_detach_icon_from_dock_full (icon, pDock, bCheckUnusedSeparator); // on le fait maintenant, pour que l'icone ait son type correct, et ne soit pas confondue avec un separateur
313
//\___________________ On supprime l'icone du theme courant.
314
cairo_dock_delete_icon_from_current_theme (icon);
318
303
void cairo_dock_remove_automatic_separators (CairoDock *pDock)
326
311
next_ic = ic->next; // si l'icone se fait enlever, on perdrait le fil.
327
312
if (CAIRO_DOCK_IS_AUTOMATIC_SEPARATOR (icon))
329
cairo_dock_remove_one_icon_from_dock (pDock, icon);
330
cairo_dock_free_icon (icon);
314
cairo_dock_detach_icon_from_dock (icon, pDock);
315
gldi_object_delete (GLDI_OBJECT(icon));
341
326
for (ic = pDock->icons; ic != NULL; ic = ic->next)
344
if (! CAIRO_DOCK_IS_AUTOMATIC_SEPARATOR (icon))
329
if (! GLDI_OBJECT_IS_SEPARATOR_ICON (icon))
346
331
if (ic->next != NULL)
348
333
pNextIcon = ic->next->data;
349
if (! CAIRO_DOCK_IS_AUTOMATIC_SEPARATOR (pNextIcon) && icon->iGroup != pNextIcon->iGroup)
334
if (! GLDI_OBJECT_IS_SEPARATOR_ICON (pNextIcon) && icon->iGroup != pNextIcon->iGroup)
351
int iSeparatorGroup = cairo_dock_get_icon_order (icon) +
352
(cairo_dock_get_icon_order (icon) == cairo_dock_get_icon_order (pNextIcon) ? 0 : 1); // for separators, group = order.
353
double fOrder = (cairo_dock_get_icon_order (icon) == cairo_dock_get_icon_order (pNextIcon) ? (icon->fOrder + pNextIcon->fOrder) / 2 : 0);
354
cairo_dock_insert_automatic_separator_in_dock (iSeparatorGroup, fOrder, icon->cParentDockName, pDock);
336
Icon *pSeparatorIcon = gldi_auto_separator_icon_new (icon, pNextIcon);
337
cairo_dock_insert_icon_in_dock (pSeparatorIcon, pDock, ! CAIRO_DOCK_ANIMATE_ICON);
362
Icon *cairo_dock_add_new_launcher_by_uri_or_type (const gchar *cExternDesktopFileURI, CairoDockDesktopFileType iType, CairoDock *pReceivingDock, double fOrder)
364
//\_________________ On ajoute un fichier desktop dans le repertoire des lanceurs du theme courant.
365
GError *erreur = NULL;
366
const gchar *cDockName = gldi_dock_get_name (pReceivingDock);
367
if (fOrder == CAIRO_DOCK_LAST_ORDER && pReceivingDock != NULL)
369
Icon *pLastIcon = cairo_dock_get_last_launcher (pReceivingDock->icons);
370
if (pLastIcon != NULL)
371
fOrder = pLastIcon->fOrder + 1;
375
gchar *cNewDesktopFileName;
376
if (cExternDesktopFileURI != NULL)
377
cNewDesktopFileName = cairo_dock_add_desktop_file_from_uri (cExternDesktopFileURI, cDockName, fOrder, &erreur);
379
cNewDesktopFileName = cairo_dock_add_desktop_file_from_type (iType, cDockName, fOrder, &erreur);
382
cd_warning (erreur->message);
383
g_error_free (erreur);
387
//\_________________ On verifie ici l'unicite du sous-dock.
388
if (iType == CAIRO_DOCK_DESKTOP_FILE_FOR_CONTAINER && cExternDesktopFileURI == NULL)
393
//\_________________ On charge ce nouveau lanceur.
394
Icon *pNewIcon = NULL;
395
if (cNewDesktopFileName != NULL)
397
pNewIcon = cairo_dock_create_icon_from_desktop_file (cNewDesktopFileName);
398
g_free (cNewDesktopFileName);
400
if (pNewIcon != NULL)
402
cairo_dock_insert_icon_in_dock (pNewIcon, pReceivingDock, CAIRO_DOCK_ANIMATE_ICON);
404
if (pNewIcon->pSubDock != NULL)
405
cairo_dock_trigger_redraw_subdock_content (pNewIcon->pSubDock);
412
345
void cairo_dock_remove_icons_from_dock (CairoDock *pDock, CairoDock *pReceivingDock)
414
347
GList *pIconsList = pDock->icons;
427
360
if (pReceivingDock == NULL) // alors on les jete.
429
cairo_dock_delete_icon_from_current_theme (icon);
431
362
if (CAIRO_DOCK_IS_APPLET (icon))
433
cairo_dock_update_icon_s_container_name (icon, CAIRO_DOCK_MAIN_DOCK_NAME); // on decide de les remettre dans le dock principal la prochaine fois qu'ils seront actives.
364
gldi_theme_icon_write_container_name_in_conf_file (icon, CAIRO_DOCK_MAIN_DOCK_NAME); // on decide de les remettre dans le dock principal la prochaine fois qu'ils seront actives.
435
cairo_dock_free_icon (icon); // de-instancie l'applet.
366
gldi_object_delete (GLDI_OBJECT(icon));
437
368
else // on les re-attribue au dock receveur.
439
cairo_dock_update_icon_s_container_name (icon, pReceivingDock->cDockName);
441
icon->fWidth /= pDock->container.fRatio; // optimization: no need to detach the icon, we just steal all of them.
442
icon->fHeight /= pDock->container.fRatio;
370
gldi_theme_icon_write_container_name_in_conf_file (icon, pReceivingDock->cDockName);
372
/**icon->fWidth /= pDock->container.fRatio; // optimization: no need to detach the icon, we just steal all of them.
373
icon->fHeight /= pDock->container.fRatio;*/
444
374
cd_debug (" on re-attribue %s au dock %s", icon->cName, icon->cParentDockName);
445
375
cairo_dock_insert_icon_in_dock (icon, pReceivingDock, CAIRO_DOCK_ANIMATE_ICON);