~ubuntu-branches/ubuntu/precise/cairo-dock/precise-updates

« back to all changes in this revision

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

  • Committer: Bazaar Package Importer
  • Author(s): Matthieu Baerts (matttbe)
  • Date: 2011-03-17 14:08:48 UTC
  • mfrom: (1.1.14 upstream)
  • Revision ID: james.westby@ubuntu.com-20110317140848-b8efysl4ynhjm87k
Tags: 2.3.0~1-0ubuntu1
* New Upstream Version (LP: #723994)
* Upstream short ChangeLog:
 - Updated translations
 - Updated the integration of the new versions of kwin and compiz
 - Updated default theme
 - Fixed a few bugs
 - Updated the man
* debian/control:
 - Added suggests apps for cairo-dock-core (needed by the default theme)
 - Updated the description (from launchpad.net/cairo-dock)
 - Added cairo-dock-plug-ins as a new suggestion for cairo-dock-core
* debian/patches:
 - Updated the default theme to use default apps of Ubuntu Natty 
* Switch to dpkg-source 3.0 (quilt) format
* Removed the desktop-file-category patch (sync with debian packages)
* debian/rules:
 - Added a CMake flag to disable the gtk grip
 - No longer used simple-patchsys
* Updated the debian/watch

Show diffs side-by-side

added added

removed removed

Lines of Context:
46
46
 
47
47
#include "cairo-dock-draw.h"
48
48
#include "cairo-dock-applications-manager.h"
49
 
#include "cairo-dock-load.h"
 
49
#include "cairo-dock-image-buffer.h"
50
50
#include "cairo-dock-config.h"
51
 
#include "cairo-dock-modules.h"
 
51
#include "cairo-dock-module-factory.h"
52
52
#include "cairo-dock-callbacks.h"
53
 
#include "cairo-dock-icons.h"
 
53
#include "cairo-dock-icon-factory.h"
 
54
#include "cairo-dock-icon-facility.h"
54
55
#include "cairo-dock-separator-manager.h"
55
56
#include "cairo-dock-launcher-manager.h"
56
 
#include "cairo-dock-backends-manager.h"
 
57
#include "cairo-dock-backends-manager.h"  // myBackendsParam.fSubDockSizeRatio
57
58
#include "cairo-dock-X-utilities.h"
58
59
#include "cairo-dock-log.h"
59
60
#include "cairo-dock-keyfile-utilities.h"
60
61
#include "cairo-dock-dock-manager.h"
61
62
#include "cairo-dock-notifications.h"
62
63
#include "cairo-dock-class-manager.h"
63
 
#include "cairo-dock-internal-accessibility.h"
64
 
#include "cairo-dock-internal-system.h"
65
 
#include "cairo-dock-internal-views.h"
66
 
#include "cairo-dock-internal-icons.h"
67
64
#include "cairo-dock-animations.h"
68
65
#include "cairo-dock-container.h"
69
66
#include "cairo-dock-desktop-file-factory.h"
78
75
 
79
76
extern gchar *g_cCurrentLaunchersPath;
80
77
 
81
 
extern gboolean g_bKeepAbove;
82
 
 
83
78
extern CairoDockGLConfig g_openglConfig;
84
79
extern gboolean g_bUseOpenGL;
85
80
#ifdef HAVE_GLITZ
89
84
 
90
85
static void _cairo_dock_set_icon_size (CairoDock *pDock, Icon *icon)
91
86
{
92
 
        CairoDockIconType iType = cairo_dock_get_icon_type (icon);
 
87
        CairoDockIconGroup iType = cairo_dock_get_icon_type (icon);
93
88
        if (CAIRO_DOCK_ICON_TYPE_IS_APPLET (icon))  // une applet peut definir la taille de son icone elle-meme.
94
89
        {
95
90
                if (icon->fWidth == 0)
96
 
                        icon->fWidth = myIcons.tIconAuthorizedWidth[iType];
 
91
                        icon->fWidth = myIconsParam.tIconAuthorizedWidth[iType];
97
92
                if (icon->fHeight == 0)
98
 
                        icon->fHeight = myIcons.tIconAuthorizedHeight[iType];
 
93
                        icon->fHeight = myIconsParam.tIconAuthorizedHeight[iType];
99
94
        }
100
95
        else
101
96
        {
102
 
                icon->fWidth = myIcons.tIconAuthorizedWidth[iType];
103
 
                icon->fHeight = myIcons.tIconAuthorizedHeight[iType];
 
97
                icon->fWidth = myIconsParam.tIconAuthorizedWidth[iType];
 
98
                icon->fHeight = myIconsParam.tIconAuthorizedHeight[iType];
104
99
        }
105
100
}
106
101
 
113
108
        pDock->iRefCount = 0;  // c'est un dock racine par defaut.
114
109
        pDock->container.fRatio = 1.;
115
110
        pDock->iAvoidingMouseIconType = -1;
116
 
        pDock->fFlatDockWidth = - myIcons.iIconGap;
 
111
        pDock->fFlatDockWidth = - myIconsParam.iIconGap;
117
112
        pDock->container.iMouseX = -1; // utile ?
118
113
        pDock->container.iMouseY = -1;
119
114
        pDock->fMagnitudeMax = 1.;
124
119
        
125
120
        //\__________________ On cree la fenetre GTK.
126
121
        GtkWidget *pWindow = cairo_dock_init_container (CAIRO_CONTAINER (pDock));
127
 
        gtk_container_set_border_width (GTK_CONTAINER(pWindow), 0);
 
122
        cairo_dock_install_notifications_on_object (pDock, NB_NOTIFICATIONS_DOCKS);
 
123
        gtk_container_set_border_width (GTK_CONTAINER (pWindow), 0);
128
124
        gtk_window_set_gravity (GTK_WINDOW (pWindow), GDK_GRAVITY_STATIC);
129
125
        gtk_window_set_type_hint (GTK_WINDOW (pWindow), GDK_WINDOW_TYPE_HINT_DOCK);
130
126
        gtk_window_set_title (GTK_WINDOW (pWindow), "cairo-dock");
259
255
                g_source_remove (pDock->iSidDestroyEmptyDock);
260
256
        if (pDock->iSidTestMouseOutside != 0)
261
257
                g_source_remove (pDock->iSidTestMouseOutside);
262
 
        cairo_dock_notify (CAIRO_DOCK_STOP_DOCK, pDock);
 
258
        cairo_dock_notify_on_object (&myDocksMgr, NOTIFICATION_STOP_DOCK, pDock);
 
259
        cairo_dock_notify_on_object (pDock, NOTIFICATION_STOP_DOCK, pDock);
263
260
        
264
261
        g_list_foreach (pDock->icons, (GFunc) cairo_dock_free_icon, NULL);
265
262
        g_list_free (pDock->icons);
305
302
        
306
303
        pDock->bAutoHide = FALSE;
307
304
        double fPrevRatio = pDock->container.fRatio;
308
 
        pDock->container.fRatio = MIN (pDock->container.fRatio, myViews.fSubDockSizeRatio);
 
305
        pDock->container.fRatio = MIN (pDock->container.fRatio, myBackendsParam.fSubDockSizeRatio);
309
306
        
310
307
        Icon *icon;
311
308
        GList *ic;
312
 
        pDock->fFlatDockWidth = - myIcons.iIconGap;
 
309
        pDock->fFlatDockWidth = - myIconsParam.iIconGap;
313
310
        for (ic = pDock->icons; ic != NULL; ic = ic->next)
314
311
        {
315
312
                icon = ic->data;
316
313
                icon->fWidth *= pDock->container.fRatio / fPrevRatio;
317
314
                icon->fHeight *= pDock->container.fRatio / fPrevRatio;
318
 
                pDock->fFlatDockWidth += icon->fWidth + myIcons.iIconGap;
 
315
                pDock->fFlatDockWidth += icon->fWidth + myIconsParam.iIconGap;
319
316
        }
320
317
        pDock->iMaxIconHeight *= pDock->container.fRatio / fPrevRatio;
321
318
 
349
346
        gboolean bSeparatorNeeded = FALSE;
350
347
        if (bInsertSeparator && ! CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (icon))
351
348
        {
352
 
                Icon *pSameTypeIcon = cairo_dock_get_first_icon_of_order (pDock->icons, icon->iType);
 
349
                Icon *pSameTypeIcon = cairo_dock_get_first_icon_of_order (pDock->icons, icon->iGroup);
353
350
                if (pSameTypeIcon == NULL && pDock->icons != NULL)
354
351
                {
355
352
                        bSeparatorNeeded = TRUE;
360
357
        //\______________ On insere l'icone a sa place dans la liste.
361
358
        if (icon->fOrder == CAIRO_DOCK_LAST_ORDER)
362
359
        {
363
 
                Icon *pLastIcon = cairo_dock_get_last_icon_of_order (pDock->icons, icon->iType);
 
360
                Icon *pLastIcon = cairo_dock_get_last_icon_of_order (pDock->icons, icon->iGroup);
364
361
                if (pLastIcon != NULL)
365
362
                        icon->fOrder = pLastIcon->fOrder + 1;
366
363
                else
382
379
        icon->fWidth *= pDock->container.fRatio;
383
380
        icon->fHeight *= pDock->container.fRatio;
384
381
 
385
 
        pDock->fFlatDockWidth += myIcons.iIconGap + icon->fWidth;
 
382
        pDock->fFlatDockWidth += myIconsParam.iIconGap + icon->fWidth;
386
383
        if (! CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (icon))
387
384
                pDock->iMaxIconHeight = MAX (pDock->iMaxIconHeight, icon->fHeight);
388
385
 
390
387
        if (bSeparatorNeeded)
391
388
        {
392
389
                int iOrder = cairo_dock_get_icon_order (icon);
393
 
                if (iOrder + 1 < CAIRO_DOCK_NB_TYPES)
 
390
                if (iOrder + 1 < CAIRO_DOCK_NB_GROUPS)
394
391
                {
395
392
                        Icon *pNextIcon = cairo_dock_get_next_icon (pDock->icons, icon);
396
393
                        if (pNextIcon != NULL && ((cairo_dock_get_icon_order (pNextIcon) - cairo_dock_get_icon_order (icon)) % 2 == 0) && (cairo_dock_get_icon_order (pNextIcon) != cairo_dock_get_icon_order (icon)))
419
416
                        icon->fInsertRemoveFactor = - 0.95;
420
417
                else
421
418
                        icon->fInsertRemoveFactor = - 0.05;
422
 
                cairo_dock_notify (CAIRO_DOCK_INSERT_ICON, icon, pDock);
423
419
        }
 
420
        else
 
421
                icon->fInsertRemoveFactor = 0.;
424
422
        if (bUpdateSize)
425
423
                cairo_dock_update_dock_size (pDock);
426
424
        
432
430
                cairo_dock_trigger_redraw_subdock_content (pDock);
433
431
        }
434
432
        
435
 
        if (CAIRO_DOCK_IS_STORED_LAUNCHER (icon) || CAIRO_DOCK_IS_USER_SEPARATOR (icon) || CAIRO_DOCK_ICON_TYPE_IS_APPLET (icon))
436
 
                cairo_dock_trigger_refresh_launcher_gui ();
 
433
        //\______________ Notify everybody.
 
434
        cairo_dock_notify_on_object (&myDocksMgr, NOTIFICATION_INSERT_ICON, icon, pDock);
 
435
        cairo_dock_notify_on_object (pDock, NOTIFICATION_INSERT_ICON, icon, pDock);
437
436
}
438
437
 
439
438
 
447
446
        pDock->iSidDestroyEmptyDock = 0;
448
447
        if (pDock->icons == NULL && pDock->iRefCount == 0 && ! pDock->bIsMainDock)  // le dock est toujours a detruire.
449
448
        {
450
 
                g_print ("The dock '%s' is empty. No icon, no dock.\n", cDockName);
 
449
                cd_debug ("The dock '%s' is empty. No icon, no dock.", cDockName);
451
450
                cairo_dock_destroy_dock (pDock, cDockName);
452
451
        }
453
452
        return FALSE;
506
505
        }
507
506
        pDock->icons = g_list_delete_link (pDock->icons, ic);
508
507
        ic = NULL;
509
 
        pDock->fFlatDockWidth -= icon->fWidth + myIcons.iIconGap;
 
508
        pDock->fFlatDockWidth -= icon->fWidth + myIconsParam.iIconGap;
510
509
        
511
510
        //\___________________ On enleve le separateur si c'est la derniere icone de son type.
512
511
        if (bCheckUnusedSeparator && ! CAIRO_DOCK_IS_AUTOMATIC_SEPARATOR (icon))
515
514
                {
516
515
                        pDock->icons = g_list_delete_link (pDock->icons, next_ic);
517
516
                        next_ic = NULL;
518
 
                        pDock->fFlatDockWidth -= pNextIcon->fWidth + myIcons.iIconGap;
 
517
                        pDock->fFlatDockWidth -= pNextIcon->fWidth + myIconsParam.iIconGap;
519
518
                        cairo_dock_free_icon (pNextIcon);
520
519
                        pNextIcon = NULL;
521
520
                }
523
522
                {
524
523
                        pDock->icons = g_list_delete_link (pDock->icons, prev_ic);
525
524
                        prev_ic = NULL;
526
 
                        pDock->fFlatDockWidth -= pPrevIcon->fWidth + myIcons.iIconGap;
 
525
                        pDock->fFlatDockWidth -= pPrevIcon->fWidth + myIconsParam.iIconGap;
527
526
                        cairo_dock_free_icon (pPrevIcon);
528
527
                        pPrevIcon = NULL;
529
528
                }
563
562
                        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).
564
563
        }
565
564
        
566
 
        //\___________________ On prevoit le rafraichissement de la fenetre de config des lanceurs.
567
 
        if (CAIRO_DOCK_IS_STORED_LAUNCHER (icon) || CAIRO_DOCK_IS_USER_SEPARATOR (icon) || CAIRO_DOCK_ICON_TYPE_IS_APPLET (icon))
568
 
                cairo_dock_trigger_refresh_launcher_gui ();
 
565
        //\___________________ Notify everybody.
 
566
        icon->fInsertRemoveFactor = 0.;
 
567
        cairo_dock_notify_on_object (&myDocksMgr, NOTIFICATION_REMOVE_ICON, icon, pDock);
 
568
        cairo_dock_notify_on_object (pDock, NOTIFICATION_REMOVE_ICON, icon, pDock);
 
569
        
569
570
        return TRUE;
570
571
}
571
572
void cairo_dock_remove_icon_from_dock_full (CairoDock *pDock, Icon *icon, gboolean bCheckUnusedSeparator)
620
621
                                next_icon = ic->next->data;
621
622
                                if (! CAIRO_DOCK_IS_AUTOMATIC_SEPARATOR (next_icon) && abs (cairo_dock_get_icon_order (icon) - cairo_dock_get_icon_order (next_icon)) > 1)  // icon->iType != next_icon->iType
622
623
                                {
623
 
                                        int iSeparatorType = myIcons.tIconTypeOrder[next_icon->iType] - 1;
624
 
                                        cd_debug ("+ un separateur entre %s et %s, dans le groupe %d (=%d)\n", icon->cName, next_icon->cName, iSeparatorType, myIcons.tIconTypeOrder[iSeparatorType]);
 
624
                                        ///int iSeparatorType = myIconsParam.tIconTypeOrder[next_icon->iGroup] - 1;
 
625
                                        int iSeparatorType = cairo_dock_get_icon_order (next_icon) - 1;
 
626
                                        cd_debug ("+ un separateur entre %s et %s, dans le groupe %d\n", icon->cName, next_icon->cName, iSeparatorType);
625
627
                                        cairo_dock_insert_automatic_separator_in_dock (iSeparatorType, next_icon->cParentDockName, pDock);
626
628
                                }
627
629
                        }
630
632
}
631
633
 
632
634
 
633
 
Icon *cairo_dock_add_new_launcher_by_uri_or_type (const gchar *cExternDesktopFileURI, CairoDockDesktopFileType iType, CairoDock *pReceivingDock, double fOrder, CairoDockIconType iGroup)
 
635
Icon *cairo_dock_add_new_launcher_by_uri_or_type (const gchar *cExternDesktopFileURI, CairoDockDesktopFileType iType, CairoDock *pReceivingDock, double fOrder, CairoDockIconGroup iGroup)
634
636
{
635
637
        //\_________________ On ajoute un fichier desktop dans le repertoire des lanceurs du theme courant.
636
638
        gchar *cPath = NULL;
679
681
                if (pNewIcon != NULL)
680
682
                {
681
683
                        cairo_dock_insert_icon_in_dock (pNewIcon, pReceivingDock, CAIRO_DOCK_UPDATE_DOCK_SIZE, CAIRO_DOCK_ANIMATE_ICON);
682
 
 
683
 
                        /**if (CAIRO_DOCK_IS_URI_LAUNCHER (pNewIcon))
684
 
                        {
685
 
                                cairo_dock_fm_add_monitor (pNewIcon);
686
 
                        }*/
687
684
                        
688
685
                        if (pNewIcon->pSubDock != NULL)
689
686
                                cairo_dock_trigger_redraw_subdock_content (pNewIcon->pSubDock);