~cairo-dock-team/cairo-dock-core/popup_from_shortkey

« back to all changes in this revision

Viewing changes to src/gldit/cairo-dock-dock-factory.c

  • Committer: Fabrice Rey
  • Date: 2013-06-04 22:58:28 UTC
  • Revision ID: fabounet03@gmail.com-20130604225828-x8lg3mv9135jr114
updated various parts of the core to the new API (new icons type, 'delete' method, simplified functions, etc)

Show diffs side-by-side

added added

removed removed

Lines of Context:
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))
132
133
                {
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);
137
136
                }
138
137
                
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))
142
141
                {
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);
147
144
                }
148
145
        }
149
146
        
239
236
                        pDock->icons = g_list_delete_link (pDock->icons, next_ic);
240
237
                        next_ic = NULL;
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;
244
241
                }
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);
248
245
                        prev_ic = NULL;
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;
252
249
                }
253
250
        }
302
299
        return TRUE;
303
300
}
304
301
 
305
 
void cairo_dock_remove_icon_from_dock_full (CairoDock *pDock, Icon *icon, gboolean bCheckUnusedSeparator)
306
 
{
307
 
        g_return_if_fail (icon != NULL);
308
 
        
309
 
        //\___________________ On detache l'icone du dock.
310
 
        if (pDock != NULL)
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
312
 
        
313
 
        //\___________________ On supprime l'icone du theme courant.
314
 
        cairo_dock_delete_icon_from_current_theme (icon);
315
 
}
316
 
 
317
302
 
318
303
void cairo_dock_remove_automatic_separators (CairoDock *pDock)
319
304
{
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))
328
313
                {
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));
331
316
                }
332
317
                ic = next_ic;
333
318
        }
341
326
        for (ic = pDock->icons; ic != NULL; ic = ic->next)
342
327
        {
343
328
                icon = ic->data;
344
 
                if (! CAIRO_DOCK_IS_AUTOMATIC_SEPARATOR (icon))
 
329
                if (! GLDI_OBJECT_IS_SEPARATOR_ICON (icon))
345
330
                {
346
331
                        if (ic->next != NULL)
347
332
                        {
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)
350
335
                                {
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);
355
338
                                }
356
339
                        }
357
340
                }
359
342
}
360
343
 
361
344
 
362
 
Icon *cairo_dock_add_new_launcher_by_uri_or_type (const gchar *cExternDesktopFileURI, CairoDockDesktopFileType iType, CairoDock *pReceivingDock, double fOrder)
363
 
{
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)
368
 
        {
369
 
                Icon *pLastIcon = cairo_dock_get_last_launcher (pReceivingDock->icons);
370
 
                if (pLastIcon != NULL)
371
 
                        fOrder = pLastIcon->fOrder + 1;
372
 
                else
373
 
                        fOrder = 1;
374
 
        }
375
 
        gchar *cNewDesktopFileName;
376
 
        if (cExternDesktopFileURI != NULL)
377
 
                cNewDesktopFileName = cairo_dock_add_desktop_file_from_uri (cExternDesktopFileURI, cDockName, fOrder, &erreur);
378
 
        else
379
 
                cNewDesktopFileName = cairo_dock_add_desktop_file_from_type (iType, cDockName, fOrder, &erreur);
380
 
        if (erreur != NULL)
381
 
        {
382
 
                cd_warning (erreur->message);
383
 
                g_error_free (erreur);
384
 
                return NULL;
385
 
        }
386
 
        
387
 
        //\_________________ On verifie ici l'unicite du sous-dock.
388
 
        if (iType == CAIRO_DOCK_DESKTOP_FILE_FOR_CONTAINER && cExternDesktopFileURI == NULL)
389
 
        {
390
 
                
391
 
        }
392
 
        
393
 
        //\_________________ On charge ce nouveau lanceur.
394
 
        Icon *pNewIcon = NULL;
395
 
        if (cNewDesktopFileName != NULL)
396
 
        {
397
 
                pNewIcon = cairo_dock_create_icon_from_desktop_file (cNewDesktopFileName);
398
 
                g_free (cNewDesktopFileName);
399
 
 
400
 
                if (pNewIcon != NULL)
401
 
                {
402
 
                        cairo_dock_insert_icon_in_dock (pNewIcon, pReceivingDock, CAIRO_DOCK_ANIMATE_ICON);
403
 
                        
404
 
                        if (pNewIcon->pSubDock != NULL)
405
 
                                cairo_dock_trigger_redraw_subdock_content (pNewIcon->pSubDock);
406
 
                }
407
 
        }
408
 
        return pNewIcon;
409
 
}
410
 
 
411
 
 
412
345
void cairo_dock_remove_icons_from_dock (CairoDock *pDock, CairoDock *pReceivingDock)
413
346
{
414
347
        GList *pIconsList = pDock->icons;
426
359
 
427
360
                if (pReceivingDock == NULL)  // alors on les jete.
428
361
                {
429
 
                        cairo_dock_delete_icon_from_current_theme (icon);
430
 
                        
431
362
                        if (CAIRO_DOCK_IS_APPLET (icon))
432
363
                        {
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.
434
365
                        }
435
 
                        cairo_dock_free_icon (icon);  // de-instancie l'applet.
 
366
                        gldi_object_delete (GLDI_OBJECT(icon));
436
367
                }
437
368
                else  // on les re-attribue au dock receveur.
438
369
                {
439
 
                        cairo_dock_update_icon_s_container_name (icon, pReceivingDock->cDockName);
440
 
                        
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;
443
 
                        
 
370
                        gldi_theme_icon_write_container_name_in_conf_file (icon, pReceivingDock->cDockName);
 
371
                        
 
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);
446
376