~ubuntu-branches/ubuntu/oneiric/cairo-dock/oneiric-201110111206

« back to all changes in this revision

Viewing changes to src/cairo-dock-callbacks.c

  • Committer: Bazaar Package Importer
  • Author(s): Julien Lavergne, Matthieu Baerts (matttbe), Julien Lavergne
  • Date: 2009-10-04 16:33:52 UTC
  • mfrom: (1.1.7 upstream)
  • Revision ID: james.westby@ubuntu.com-20091004163352-ttbbjfmpb8uzl8j4
Tags: 2.0.9-0ubuntu1
[ Matthieu Baerts (matttbe) ]
* New Upstream Version. (LP: #435587)
* Added apport hook in debian/apport
 - Add debian/apport
 - debian/cairo-dock-core.install: Added debian/apport/cairo-dock.py
* Use .desktop provided by upstream
 - Removed debian/*.desktop
 - debian/cairo-dock-core.install: install upstream desktop files. 

[ Julien Lavergne ]
* Adjust debian/changelog with Daniel Holbach suggestions.
* debian/patches/01_rename_cairo-dock-package-theme.patch: drop, 
  merged upstream.
* debian/patches/01-desktop-file-category.patch:
 - Remove Encoding field and set category to Utility.
* debian/patches/02-merge-changelog.patch:
 - Merge ChangeLog and ChangeLog-2.0.9.
* debian/apport: Remove commands with grep, python doesn't like it.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/**
2
 
* Callbacks for Cairo-Dock
 
2
* This file is a part of the Cairo-Dock project
3
3
*
4
 
* Copyright : (C) 2009 by Fabrice Rey
5
 
* E-mail    : fabounet@users.berlios.de
 
4
* Copyright : (C) see the 'copyright' file.
 
5
* E-mail    : see the 'copyright' file.
6
6
*
7
7
* This program is free software; you can redistribute it and/or
8
8
* modify it under the terms of the GNU General Public License
13
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
15
* GNU General Public License for more details.
16
 
*   http://www.gnu.org/licenses/licenses.html#GPL
 
16
* You should have received a copy of the GNU General Public License
 
17
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18
*/
18
19
 
19
20
#include <math.h>
63
64
#include "cairo-dock-internal-accessibility.h"
64
65
#include "cairo-dock-internal-system.h"
65
66
#include "cairo-dock-internal-taskbar.h"
66
 
#include "cairo-dock-internal-hidden-dock.h"
67
67
#include "cairo-dock-internal-views.h"
68
68
#include "cairo-dock-internal-labels.h"
69
69
#include "cairo-dock-internal-icons.h"
70
70
#include "cairo-dock-internal-background.h"
71
71
#include "cairo-dock-class-manager.h"
 
72
#include "cairo-dock-X-utilities.h"
72
73
#include "cairo-dock-callbacks.h"
73
74
 
74
75
static Icon *s_pIconClicked = NULL;  // pour savoir quand on deplace une icone a la souris. Dangereux si l'icone se fait effacer en cours ...
 
76
static int s_iClickX, s_iClickY;  // coordonnees du clic dans le dock, pour pouvoir initialiser le deplacement apres un seuil.
75
77
static CairoDock *s_pLastPointedDock = NULL;  // pour savoir quand on passe d'un dock a un autre.
76
78
static int s_iSidShowSubDockDemand = 0;
77
79
static int s_iSidShowAppliForDrop = 0;
85
87
extern gint g_iXScreenHeight[2];
86
88
extern cairo_surface_t *g_pBackgroundSurfaceFull[2];
87
89
 
88
 
extern gboolean g_bEasterEggs;
89
90
extern gboolean g_bUseOpenGL;
90
91
extern gboolean g_bLocked;
91
 
extern CairoDockDesktopEnv g_iDesktopEnv;
 
92
extern gboolean g_bEasterEggs;
92
93
 
93
94
static gboolean s_bHideAfterShortcut = FALSE;
94
95
static gboolean s_bFrozenDock = FALSE;
95
96
 
96
97
 
97
 
#define _mouse_is_really_outside(pDock) (pDock->iMouseX <= 0 || pDock->iMouseX >= pDock->iCurrentWidth || pDock->iMouseY <= 0 || pDock->iMouseY >= pDock->iCurrentHeight)
 
98
#define _mouse_is_really_outside(pDock) (pDock->container.iMouseX <= 0 || pDock->container.iMouseX >= pDock->container.iWidth || pDock->container.iMouseY <= 0 || pDock->container.iMouseY >= pDock->container.iHeight)
98
99
 
99
100
void cairo_dock_freeze_docks (gboolean bFreeze)
100
101
{
106
107
        if (! pCairoContext)  // on n'a pas mis le rendu cairo ici a cause du rendu optimise.
107
108
        {
108
109
                glLoadIdentity ();
109
 
                glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | (pDock->bUseStencil ? GL_STENCIL_BUFFER_BIT : 0));
 
110
                glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | (pDock->pRenderer->bUseStencil ? GL_STENCIL_BUFFER_BIT : 0));
110
111
                cairo_dock_apply_desktop_background (CAIRO_CONTAINER (pDock));
111
112
                
112
 
                pDock->render_opengl (pDock);
 
113
                pDock->pRenderer->render_opengl (pDock);
113
114
        }
114
115
        return CAIRO_DOCK_LET_PASS_NOTIFICATION;
115
116
}
119
120
        CairoDock *pDock)
120
121
{
121
122
        //g_print ("%s ((%d;%d) %dx%d) (%d)\n", __func__, pExpose->area.x, pExpose->area.y, pExpose->area.width, pExpose->area.height, pDock->bAtBottom);
122
 
        if (g_bUseOpenGL && pDock->render_opengl != NULL)
 
123
        if (g_bUseOpenGL && pDock->pRenderer->render_opengl != NULL)
123
124
        {
124
 
                GdkGLContext *pGlContext = gtk_widget_get_gl_context (pDock->pWidget);
125
 
                GdkGLDrawable *pGlDrawable = gtk_widget_get_gl_drawable (pDock->pWidget);
 
125
                GdkGLContext *pGlContext = gtk_widget_get_gl_context (pDock->container.pWidget);
 
126
                GdkGLDrawable *pGlDrawable = gtk_widget_get_gl_drawable (pDock->container.pWidget);
126
127
                if (!gdk_gl_drawable_gl_begin (pGlDrawable, pGlContext))
127
128
                        return FALSE;
128
129
                
130
131
                {
131
132
                        glEnable (GL_SCISSOR_TEST);  // ou comment diviser par 4 l'occupation CPU !
132
133
                        glScissor ((int) pExpose->area.x,
133
 
                                (int) (pDock->bHorizontalDock ? pDock->iCurrentHeight : pDock->iCurrentWidth) -
 
134
                                (int) (pDock->container.bIsHorizontal ? pDock->container.iHeight : pDock->container.iWidth) -
134
135
                                        pExpose->area.y - pExpose->area.height,  // lower left corner of the scissor box.
135
136
                                (int) pExpose->area.width,
136
137
                                (int) pExpose->area.height);
140
141
                {
141
142
                        // on laisse transparent
142
143
                }
143
 
                else if (pDock->bAtBottom && pDock->bAutoHide && pDock->iRefCount == 0 && ! pDock->bInside && pDock->iSidMoveDown == 0)
 
144
                else if (pDock->bAtBottom && pDock->bAutoHide && pDock->iRefCount == 0 && ! pDock->container.bInside && pDock->iSidMoveDown == 0)
144
145
                {
145
146
                        cairo_dock_render_hidden_dock_opengl (pDock);
146
147
                }
147
148
                else
148
149
                {
149
 
                        cairo_dock_notify (CAIRO_DOCK_RENDER_DOCK, pDock, NULL);
 
150
                        cairo_dock_notify_on_container (CAIRO_CONTAINER (pDock), CAIRO_DOCK_RENDER_DOCK, pDock, NULL);
150
151
                }
151
152
                glDisable (GL_SCISSOR_TEST);
152
153
                
165
166
                {
166
167
                        cairo_t *pCairoContext = cairo_dock_create_drawing_context_on_area (CAIRO_CONTAINER (pDock), &pExpose->area, NULL);
167
168
                        
168
 
                        if (pDock->render_optimized != NULL)
169
 
                                pDock->render_optimized (pCairoContext, pDock, &pExpose->area);
 
169
                        if (pDock->pRenderer->render_optimized != NULL)
 
170
                                pDock->pRenderer->render_optimized (pCairoContext, pDock, &pExpose->area);
170
171
                        else
171
 
                                pDock->render (pCairoContext, pDock);
172
 
                        cairo_dock_notify (CAIRO_DOCK_RENDER_DOCK, pDock, pCairoContext);
 
172
                                pDock->pRenderer->render (pCairoContext, pDock);
 
173
                        cairo_dock_notify_on_container (CAIRO_CONTAINER (pDock), CAIRO_DOCK_RENDER_DOCK, pDock, pCairoContext);
173
174
                        
174
175
                        cairo_destroy (pCairoContext);
175
176
                }
183
184
        {
184
185
                
185
186
        }
186
 
        else if (pDock->bAtBottom && pDock->bAutoHide && pDock->iRefCount == 0 && ! pDock->bInside && pDock->iSidMoveDown == 0)
 
187
        else if (pDock->bAtBottom && pDock->bAutoHide && pDock->iRefCount == 0 && ! pDock->container.bInside && pDock->iSidMoveDown == 0)
187
188
        {
188
189
                cairo_dock_render_hidden_dock (pCairoContext, pDock);
189
190
        }
190
191
        else
191
192
        {
192
 
                pDock->render (pCairoContext, pDock);
193
 
                cairo_dock_notify (CAIRO_DOCK_RENDER_DOCK, pDock, pCairoContext);
 
193
                pDock->pRenderer->render (pCairoContext, pDock);
 
194
                cairo_dock_notify_on_container (CAIRO_CONTAINER (pDock), CAIRO_DOCK_RENDER_DOCK, pDock, pCairoContext);
194
195
        }
195
196
        
196
197
        cairo_destroy (pCairoContext);
197
198
        
198
199
#ifdef HAVE_GLITZ
199
 
        if (pDock->pDrawFormat && pDock->pDrawFormat->doublebuffer)
200
 
                glitz_drawable_swap_buffers (pDock->pGlitzDrawable);
 
200
        if (pDock->container.pDrawFormat && pDock->container.pDrawFormat->doublebuffer)
 
201
                glitz_drawable_swap_buffers (pDock->container.pGlitzDrawable);
201
202
#endif
202
203
        return FALSE;
203
204
}
204
205
 
205
206
 
206
 
void cairo_dock_show_subdock (Icon *pPointedIcon, gboolean bUpdate, CairoDock *pDock)
207
 
{
208
 
        cd_debug ("on montre le dock fils");
209
 
        CairoDock *pSubDock = pPointedIcon->pSubDock;
210
 
        g_return_if_fail (pSubDock != NULL);
211
 
        
212
 
        if (GTK_WIDGET_VISIBLE (pSubDock->pWidget))  // il est deja visible.
213
 
        {
214
 
                if (pSubDock->bIsShrinkingDown)  // il est en cours de diminution, on renverse le processus.
215
 
                {
216
 
                        cairo_dock_start_growing (pSubDock);
217
 
                }
218
 
                return ;
219
 
        }
220
 
 
221
 
        if (bUpdate)
222
 
        {
223
 
                pDock->calculate_icons (pDock);  // c'est un peu un hack pourri, l'idee c'est de recalculer la position exacte de l'icone pointee pour pouvoir placer le sous-dock precisement, car sa derniere position connue est decalee d'un coup de molette par rapport a la nouvelle, ce qui fait beaucoup. L'ideal etant de le faire que pour l'icone concernee ...
224
 
        }
225
 
 
226
 
        pSubDock->set_subdock_position (pPointedIcon, pDock);
227
 
 
228
 
        pSubDock->fFoldingFactor = (mySystem.bAnimateSubDock ? mySystem.fUnfoldAcceleration : 0);
229
 
        pSubDock->bAtBottom = FALSE;
230
 
        int iNewWidth, iNewHeight;
231
 
        if (pSubDock->fFoldingFactor == 0)
232
 
        {
233
 
                cd_debug ("  on montre le sous-dock sans animation");
234
 
                cairo_dock_get_window_position_and_geometry_at_balance (pSubDock, CAIRO_DOCK_MAX_SIZE, &iNewWidth, &iNewHeight);  // CAIRO_DOCK_NORMAL_SIZE -> CAIRO_DOCK_MAX_SIZE pour la 1.5.4
235
 
                pSubDock->bAtBottom = TRUE;  // bAtBottom ajoute pour la 1.5.4
236
 
 
237
 
                gtk_window_present (GTK_WINDOW (pSubDock->pWidget));
238
 
 
239
 
                if (pSubDock->bHorizontalDock)
240
 
                        gdk_window_move_resize (pSubDock->pWidget->window,
241
 
                                pSubDock->iWindowPositionX,
242
 
                                pSubDock->iWindowPositionY,
243
 
                                iNewWidth,
244
 
                                iNewHeight);
245
 
                else
246
 
                        gdk_window_move_resize (pSubDock->pWidget->window,
247
 
                                pSubDock->iWindowPositionY,
248
 
                                pSubDock->iWindowPositionX,
249
 
                                iNewHeight,
250
 
                                iNewWidth);
251
 
 
252
 
                /*if (pSubDock->bHorizontalDock)
253
 
                        gtk_window_move (GTK_WINDOW (pSubDock->pWidget), pSubDock->iWindowPositionX, pSubDock->iWindowPositionY);
254
 
                else
255
 
                        gtk_window_move (GTK_WINDOW (pSubDock->pWidget), pSubDock->iWindowPositionY, pSubDock->iWindowPositionX);
256
 
 
257
 
                gtk_window_present (GTK_WINDOW (pSubDock->pWidget));*/
258
 
                ///gtk_widget_show (GTK_WIDGET (pSubDock->pWidget));
259
 
        }
260
 
        else
261
 
        {
262
 
                cd_debug ("  on montre le sous-dock avec animation");
263
 
                cairo_dock_get_window_position_and_geometry_at_balance (pSubDock, CAIRO_DOCK_MAX_SIZE, &iNewWidth, &iNewHeight);
264
 
 
265
 
                gtk_window_present (GTK_WINDOW (pSubDock->pWidget));
266
 
                ///gtk_widget_show (GTK_WIDGET (pSubDock->pWidget));
267
 
                if (pSubDock->bHorizontalDock)
268
 
                        gdk_window_move_resize (pSubDock->pWidget->window,
269
 
                                pSubDock->iWindowPositionX,
270
 
                                pSubDock->iWindowPositionY,
271
 
                                iNewWidth,
272
 
                                iNewHeight);
273
 
                else
274
 
                        gdk_window_move_resize (pSubDock->pWidget->window,
275
 
                                pSubDock->iWindowPositionY,
276
 
                                pSubDock->iWindowPositionX,
277
 
                                iNewHeight,
278
 
                                iNewWidth);
279
 
 
280
 
                cairo_dock_start_growing (pSubDock);  // on commence a faire grossir les icones.
281
 
        }
282
 
        //g_print ("  -> Gap %d;%d -> W(%d;%d) (%d)\n", pSubDock->iGapX, pSubDock->iGapY, pSubDock->iWindowPositionX, pSubDock->iWindowPositionY, pSubDock->bHorizontalDock);
283
 
        
284
 
        gtk_window_set_keep_above (GTK_WINDOW (pSubDock->pWidget), myAccessibility.bPopUp);
285
 
        
286
 
        cairo_dock_replace_all_dialogs ();
287
 
}
288
207
static gboolean _cairo_dock_show_sub_dock_delayed (CairoDock *pDock)
289
208
{
290
209
        cd_debug ("");
292
211
        s_pDockShowingSubDock = NULL;
293
212
        Icon *icon = cairo_dock_get_pointed_icon (pDock->icons);
294
213
        if (icon != NULL && icon->pSubDock != NULL)
295
 
                cairo_dock_show_subdock (icon, FALSE, pDock);
 
214
                cairo_dock_show_subdock (icon, pDock, FALSE);
296
215
 
297
216
        return FALSE;
298
217
}
299
 
 
300
 
 
301
218
static gboolean _cairo_dock_show_xwindow_for_drop (gpointer data)
302
219
{
303
220
        Window Xid = GPOINTER_TO_INT (data);
308
225
void cairo_dock_on_change_icon (Icon *pLastPointedIcon, Icon *pPointedIcon, CairoDock *pDock)
309
226
{
310
227
        //g_print ("%s (%x;%x)\n", __func__, pLastPointedIcon, pPointedIcon);
311
 
        //cd_debug ("on change d'icone dans %x (-> %s)", pDock, (pPointedIcon != NULL ? pPointedIcon->acName : "rien"));
 
228
        //cd_debug ("on change d'icone dans %x (-> %s)", pDock, (pPointedIcon != NULL ? pPointedIcon->cName : "rien"));
312
229
        if (s_iSidShowSubDockDemand != 0 && pDock == s_pDockShowingSubDock)
313
230
        {
314
231
                //cd_debug ("on annule la demande de montrage de sous-dock");
333
250
        if ((pDock == s_pLastPointedDock || s_pLastPointedDock == NULL) && pLastPointedIcon != NULL && pLastPointedIcon->pSubDock != NULL)
334
251
        {
335
252
                CairoDock *pSubDock = pLastPointedIcon->pSubDock;
336
 
                if (GTK_WIDGET_VISIBLE (pSubDock->pWidget))
 
253
                if (GTK_WIDGET_VISIBLE (pSubDock->container.pWidget))
337
254
                {
338
 
                        //g_print ("on cache %s en changeant d'icône\n", pLastPointedIcon->acName);
 
255
                        //g_print ("on cache %s en changeant d'icône\n", pLastPointedIcon->cName);
339
256
                        if (pSubDock->iSidLeaveDemand == 0)
340
257
                        {
341
258
                                //g_print ("  on retarde le cachage du dock de %dms\n", MAX (myAccessibility.iLeaveSubDockDelay, 330));
355
272
                }
356
273
                if (myAccessibility.iShowSubDockDelay > 0)
357
274
                {
358
 
                        //pDock->iMouseX = iX;
 
275
                        //pDock->container.iMouseX = iX;
359
276
                        if (s_iSidShowSubDockDemand != 0)
360
277
                                g_source_remove (s_iSidShowSubDockDemand);
361
278
                        s_iSidShowSubDockDemand = g_timeout_add (myAccessibility.iShowSubDockDelay, (GSourceFunc) _cairo_dock_show_sub_dock_delayed, pDock);
363
280
                        //cd_debug ("s_iSidShowSubDockDemand <- %d\n", s_iSidShowSubDockDemand);
364
281
                }
365
282
                else
366
 
                        cairo_dock_show_subdock (pPointedIcon, FALSE, pDock);
 
283
                        cairo_dock_show_subdock (pPointedIcon, pDock, FALSE);
367
284
                s_pLastPointedDock = pDock;
368
285
        }
369
286
 
372
289
                //g_print ("pLastPointedDock n'est plus null\n");
373
290
                s_pLastPointedDock = pDock;
374
291
        }
375
 
        if (pPointedIcon != NULL && pDock->render_opengl != NULL && ! CAIRO_DOCK_IS_SEPARATOR (pPointedIcon) && pPointedIcon->iAnimationState <= CAIRO_DOCK_STATE_MOUSE_HOVERED)
 
292
        if (pPointedIcon != NULL && pDock->pRenderer->render_opengl != NULL && ! CAIRO_DOCK_IS_SEPARATOR (pPointedIcon) && pPointedIcon->iAnimationState <= CAIRO_DOCK_STATE_MOUSE_HOVERED)
376
293
        {
377
294
                gboolean bStartAnimation = FALSE;
378
 
                cairo_dock_notify (CAIRO_DOCK_ENTER_ICON, pPointedIcon, pDock, &bStartAnimation);
 
295
                cairo_dock_notify_on_container (CAIRO_CONTAINER (pDock), CAIRO_DOCK_ENTER_ICON, pPointedIcon, pDock, &bStartAnimation);
379
296
                
380
297
                if (bStartAnimation)
381
298
                {
384
301
                }
385
302
        }
386
303
}
387
 
static gboolean _cairo_dock_make_icon_glide (CairoDock *pDock)
388
 
{
389
 
        //g_print ("%s ()\n", __func__);
390
 
        Icon *icon;
391
 
        GList *ic;
392
 
        gboolean bGliding = FALSE;
393
 
        for (ic = pDock->icons; ic != NULL; ic = ic->next)
394
 
        {
395
 
                icon = ic->data;
396
 
                if (icon->iGlideDirection != 0)
397
 
                {
398
 
                        icon->fGlideOffset += icon->iGlideDirection * .1;
399
 
                        if (fabs (icon->fGlideOffset) > .99)
400
 
                        {
401
 
                                icon->fGlideOffset = icon->iGlideDirection;
402
 
                                icon->iGlideDirection = 0;
403
 
                        }
404
 
                        else if (fabs (icon->fGlideOffset) < .01)
405
 
                        {
406
 
                                icon->fGlideOffset = 0;
407
 
                                icon->iGlideDirection = 0;
408
 
                        }
409
 
                        //g_print ("  %s <- %.2f\n", icon->acName, icon->fGlideOffset);
410
 
                        bGliding = TRUE;
411
 
                }
412
 
        }
413
 
        
414
 
        if (! bGliding)
415
 
        {
416
 
                g_print ("plus de glissement\n");
417
 
                pDock->iSidIconGlide = 0;
418
 
                return FALSE;
419
 
        }
420
 
        
421
 
        gtk_widget_queue_draw (pDock->pWidget);
422
 
        return TRUE;
423
 
}
 
304
 
 
305
 
424
306
void cairo_dock_stop_icon_glide (CairoDock *pDock)
425
307
{
426
 
        cd_message ("");
427
308
        Icon *icon;
428
309
        GList *ic;
429
310
        for (ic = pDock->icons; ic != NULL; ic = ic->next)
432
313
                icon->fGlideOffset = 0;
433
314
                icon->iGlideDirection = 0;
434
315
        }
435
 
        if (pDock->iSidIconGlide != 0)
 
316
}
 
317
static void _cairo_dock_make_icon_glide (Icon *pPointedIcon, Icon *pMovingicon, CairoDock *pDock)
 
318
{
 
319
        Icon *icon;
 
320
        GList *ic;
 
321
        for (ic = pDock->icons; ic != NULL; ic = ic->next)
436
322
        {
437
 
                g_source_remove (pDock->iSidIconGlide);
438
 
                pDock->iSidIconGlide = 0;
 
323
                icon = ic->data;
 
324
                if (icon == pMovingicon)
 
325
                        continue;
 
326
                //if (pDock->container.iMouseX > s_pMovingicon->fDrawXAtRest + s_pMovingicon->fWidth * s_pMovingicon->fScale /2)  // on a deplace l'icone a droite.  // fDrawXAtRest
 
327
                if (pMovingicon->fXAtRest < pPointedIcon->fXAtRest)  // on a deplace l'icone a droite.
 
328
                {
 
329
                        //g_print ("%s : %.2f / %.2f ; %.2f / %d (%.2f)\n", icon->cName, icon->fXAtRest, s_pMovingicon->fXAtRest, icon->fDrawX, pDock->container.iMouseX, icon->fGlideOffset);
 
330
                        if (icon->fXAtRest > pMovingicon->fXAtRest && icon->fDrawX < pDock->container.iMouseX + 5 && icon->fGlideOffset == 0)  // icone entre l'icone deplacee et le curseur.
 
331
                        {
 
332
                                //g_print ("  %s glisse vers la gauche\n", icon->cName);
 
333
                                icon->iGlideDirection = -1;
 
334
                        }
 
335
                        else if (icon->fXAtRest > pMovingicon->fXAtRest && icon->fDrawX > pDock->container.iMouseX && icon->fGlideOffset != 0)
 
336
                        {
 
337
                                //g_print ("  %s glisse vers la droite\n", icon->cName);
 
338
                                icon->iGlideDirection = 1;
 
339
                        }
 
340
                        else if (icon->fXAtRest < pMovingicon->fXAtRest && icon->fGlideOffset > 0)
 
341
                        {
 
342
                                //g_print ("  %s glisse en sens inverse vers la gauche\n", icon->cName);
 
343
                                icon->iGlideDirection = -1;
 
344
                        }
 
345
                }
 
346
                else
 
347
                {
 
348
                        //g_print ("deplacement de %s vers la gauche (%.2f / %d)\n", icon->cName, icon->fDrawX + icon->fWidth * (1+myIcons.fAmplitude) + myIcons.iIconGap, pDock->container.iMouseX);
 
349
                        if (icon->fXAtRest < pMovingicon->fXAtRest && icon->fDrawX + icon->fWidth * (1+myIcons.fAmplitude) + myIcons.iIconGap >= pDock->container.iMouseX && icon->fGlideOffset == 0)  // icone entre l'icone deplacee et le curseur.
 
350
                        {
 
351
                                //g_print ("  %s glisse vers la droite\n", icon->cName);
 
352
                                icon->iGlideDirection = 1;
 
353
                        }
 
354
                        else if (icon->fXAtRest < pMovingicon->fXAtRest && icon->fDrawX + icon->fWidth * (1+myIcons.fAmplitude) + myIcons.iIconGap <= pDock->container.iMouseX && icon->fGlideOffset != 0)
 
355
                        {
 
356
                                //g_print ("  %s glisse vers la gauche\n", icon->cName);
 
357
                                icon->iGlideDirection = -1;
 
358
                        }
 
359
                        else if (icon->fXAtRest > pMovingicon->fXAtRest && icon->fGlideOffset < 0)
 
360
                        {
 
361
                                //g_print ("  %s glisse en sens inverse vers la droite\n", icon->cName);
 
362
                                icon->iGlideDirection = 1;
 
363
                        }
 
364
                }
439
365
        }
440
 
        ///gtk_widget_queue_draw (pDock->pWidget);
441
366
}
442
367
gboolean cairo_dock_on_motion_notify (GtkWidget* pWidget,
443
368
        GdkEventMotion* pMotion,
447
372
        if (s_bFrozenDock && pMotion != NULL && pMotion->time != 0)
448
373
                return FALSE;
449
374
        Icon *pPointedIcon=NULL, *pLastPointedIcon = cairo_dock_get_pointed_icon (pDock->icons);
450
 
        int iLastMouseX = pDock->iMouseX;
 
375
        int iLastMouseX = pDock->container.iMouseX;
451
376
        //g_print ("%s (%.2f;%.2f)\n", __func__, pMotion->x, pMotion->y);
452
377
        
453
 
        //\_______________ On elague le flux des MotionNotify, sinon X en envoie autant que le permet le CPU !
454
378
        if (pMotion != NULL)
455
379
        {
456
380
                //g_print ("%s (%d,%d) (%d, %.2fms, bAtBottom:%d; bIsShrinkingDown:%d)\n", __func__, (int) pMotion->x, (int) pMotion->y, pMotion->is_hint, pMotion->time - fLastTime, pDock->bAtBottom, pDock->bIsShrinkingDown);
 
381
                //\_______________ On deplace le dock si ALT est enfoncee.
457
382
                if ((pMotion->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)) && (pMotion->state & GDK_BUTTON1_MASK))
458
383
                {
459
 
                        //g_print ("mouse : (%d;%d); pointeur : (%d;%d)\n", pDock->iMouseX, pDock->iMouseY, (int) pMotion->x_root, (int) pMotion->y_root);
460
 
                        if (pDock->bHorizontalDock)
 
384
                        if (pDock->container.bIsHorizontal)
461
385
                        {
462
 
                                //gtk_window_get_position (GTK_WINDOW (pDock->pWidget), &pDock->iWindowPositionX, &pDock->iWindowPositionY);
463
 
                                pDock->iWindowPositionX = pMotion->x_root - pDock->iMouseX;
464
 
                                pDock->iWindowPositionY = pMotion->y_root - pDock->iMouseY;
 
386
                                pDock->container.iWindowPositionX = pMotion->x_root - pDock->container.iMouseX;
 
387
                                pDock->container.iWindowPositionY = pMotion->y_root - pDock->container.iMouseY;
465
388
                                gtk_window_move (GTK_WINDOW (pWidget),
466
 
                                        pDock->iWindowPositionX,
467
 
                                        pDock->iWindowPositionY);
 
389
                                        pDock->container.iWindowPositionX,
 
390
                                        pDock->container.iWindowPositionY);
468
391
                        }
469
392
                        else
470
393
                        {
471
 
                                pDock->iWindowPositionX = pMotion->y_root - pDock->iMouseX;
472
 
                                pDock->iWindowPositionY = pMotion->x_root - pDock->iMouseY;
 
394
                                pDock->container.iWindowPositionX = pMotion->y_root - pDock->container.iMouseX;
 
395
                                pDock->container.iWindowPositionY = pMotion->x_root - pDock->container.iMouseY;
473
396
                                gtk_window_move (GTK_WINDOW (pWidget),
474
 
                                        pDock->iWindowPositionY,
475
 
                                        pDock->iWindowPositionX);
 
397
                                        pDock->container.iWindowPositionY,
 
398
                                        pDock->container.iWindowPositionX);
476
399
                        }
477
400
                        gdk_device_get_state (pMotion->device, pMotion->window, NULL, NULL);
478
401
                        return FALSE;
479
402
                }
480
 
 
481
 
                if (pDock->bHorizontalDock)
 
403
                
 
404
                //\_______________ On recupere la position de la souris.
 
405
                if (pDock->container.bIsHorizontal)
482
406
                {
483
 
                        pDock->iMouseX = (int) pMotion->x;
484
 
                        pDock->iMouseY = (int) pMotion->y;
 
407
                        pDock->container.iMouseX = (int) pMotion->x;
 
408
                        pDock->container.iMouseY = (int) pMotion->y;
485
409
                }
486
410
                else
487
411
                {
488
 
                        pDock->iMouseX = (int) pMotion->y;
489
 
                        pDock->iMouseY = (int) pMotion->x;
 
412
                        pDock->container.iMouseX = (int) pMotion->y;
 
413
                        pDock->container.iMouseY = (int) pMotion->x;
490
414
                }
491
415
                
492
 
                if (s_pFlyingContainer != NULL && ! pDock->bInside)
 
416
                //\_______________ On tire l'icone volante.
 
417
                if (s_pFlyingContainer != NULL && ! pDock->container.bInside)
493
418
                {
494
419
                        cairo_dock_drag_flying_container (s_pFlyingContainer, pDock);
495
420
                }
496
421
                
497
 
                if (pMotion->time != 0 && pMotion->time - fLastTime < mySystem.fRefreshInterval && s_pIconClicked == NULL)  // pDock->bIsShrinkingDown ||
 
422
                //\_______________ On elague le flux des MotionNotify, sinon X en envoie autant que le permet le CPU !
 
423
                if (pMotion->time != 0 && pMotion->time - fLastTime < mySystem.fRefreshInterval && s_pIconClicked == NULL)
498
424
                {
499
425
                        gdk_device_get_state (pMotion->device, pMotion->window, NULL, NULL);
500
426
                        return FALSE;
501
427
                }
502
428
                
503
 
                //\_______________ On recalcule toutes les icones.
 
429
                //\_______________ On recalcule toutes les icones et on redessine.
504
430
                pPointedIcon = cairo_dock_calculate_dock_icons (pDock);
505
431
                if (myIcons.fAmplitude != 0)
506
 
                {
507
432
                        gtk_widget_queue_draw (pWidget);
508
 
                }
509
433
                fLastTime = pMotion->time;
510
 
 
511
 
                if (s_pIconClicked != NULL && s_pIconClicked->iAnimationState != CAIRO_DOCK_STATE_REMOVE_INSERT && ! g_bLocked && ! myAccessibility.bLockIcons)
 
434
                
 
435
                //\_______________ On tire l'icone cliquee.
 
436
                if (s_pIconClicked != NULL && s_pIconClicked->iAnimationState != CAIRO_DOCK_STATE_REMOVE_INSERT && ! g_bLocked && ! myAccessibility.bLockIcons && ! myAccessibility.bLockAll && (fabs (pMotion->x - s_iClickX) > 5 || fabs (pMotion->y - s_iClickY) > 5))
512
437
                {
513
438
                        s_pIconClicked->iAnimationState = CAIRO_DOCK_STATE_FOLLOW_MOUSE;
514
439
                        //pDock->fAvoidingMouseMargin = .5;
515
440
                        pDock->iAvoidingMouseIconType = s_pIconClicked->iType;  // on pourrait le faire lors du clic aussi.
516
441
                        s_pIconClicked->fScale = 1 + myIcons.fAmplitude;
517
 
                        s_pIconClicked->fDrawX = pDock->iMouseX  - s_pIconClicked->fWidth * s_pIconClicked->fScale / 2;
518
 
                        s_pIconClicked->fDrawY = pDock->iMouseY - s_pIconClicked->fHeight * s_pIconClicked->fScale / 2 ;
 
442
                        s_pIconClicked->fDrawX = pDock->container.iMouseX  - s_pIconClicked->fWidth * s_pIconClicked->fScale / 2;
 
443
                        s_pIconClicked->fDrawY = pDock->container.iMouseY - s_pIconClicked->fHeight * s_pIconClicked->fScale / 2 ;
519
444
                        s_pIconClicked->fAlpha = 0.75;
520
445
                        if (myIcons.fAmplitude == 0)
521
446
                                gtk_widget_queue_draw (pWidget);
527
452
        else  // cas d'un drag and drop.
528
453
        {
529
454
                //g_print ("motion on drag\n");
530
 
                if (pDock->bHorizontalDock)
531
 
                        gdk_window_get_pointer (pWidget->window, &pDock->iMouseX, &pDock->iMouseY, NULL);
 
455
                //\_______________ On recupere la position de la souris.
 
456
                if (pDock->container.bIsHorizontal)
 
457
                        gdk_window_get_pointer (pWidget->window, &pDock->container.iMouseX, &pDock->container.iMouseY, NULL);
532
458
                else
533
 
                        gdk_window_get_pointer (pWidget->window, &pDock->iMouseY, &pDock->iMouseX, NULL);
534
 
 
 
459
                        gdk_window_get_pointer (pWidget->window, &pDock->container.iMouseY, &pDock->container.iMouseX, NULL);
 
460
                
 
461
                //\_______________ On recalcule toutes les icones et on redessine.
535
462
                pPointedIcon = cairo_dock_calculate_dock_icons (pDock);
536
463
                gtk_widget_queue_draw (pWidget);
537
464
                
538
 
                pDock->iAvoidingMouseIconType = CAIRO_DOCK_LAUNCHER;
539
 
                pDock->fAvoidingMouseMargin = .25;
 
465
                pDock->fAvoidingMouseMargin = .25;  // on peut dropper entre 2 icones ...
 
466
                pDock->iAvoidingMouseIconType = CAIRO_DOCK_LAUNCHER;  // ... seulement entre 2 lanceurs.
540
467
        }
541
 
 
542
 
        if (pDock->bInside)
 
468
        
 
469
        //\_______________ On asservit les decorations au curseur.
 
470
        if (pDock->container.bInside)
543
471
        {
544
 
                if (mySystem.bDecorationsFollowMouse)
 
472
                if (myBackground.bDecorationsFollowMouse)
545
473
                {
546
 
                        pDock->fDecorationsOffsetX = pDock->iMouseX - pDock->iCurrentWidth / 2;
 
474
                        pDock->fDecorationsOffsetX = pDock->container.iMouseX - pDock->container.iWidth / 2;
547
475
                        //g_print ("fDecorationsOffsetX <- %.2f\n", pDock->fDecorationsOffsetX);
548
476
                }
549
477
                else
550
478
                {
551
 
                        if (pDock->iMouseX > iLastMouseX)
 
479
                        if (pDock->container.iMouseX > iLastMouseX)
552
480
                        {
553
481
                                pDock->fDecorationsOffsetX += 10;
554
 
                                if (pDock->fDecorationsOffsetX > pDock->iCurrentWidth / 2)
 
482
                                if (pDock->fDecorationsOffsetX > pDock->container.iWidth / 2)
555
483
                                {
556
484
                                        if (g_pBackgroundSurfaceFull[0] != NULL)
557
 
                                                pDock->fDecorationsOffsetX -= pDock->iCurrentWidth;
 
485
                                                pDock->fDecorationsOffsetX -= pDock->container.iWidth;
558
486
                                        else
559
 
                                                pDock->fDecorationsOffsetX = pDock->iCurrentWidth / 2;
 
487
                                                pDock->fDecorationsOffsetX = pDock->container.iWidth / 2;
560
488
                                }
561
489
                        }
562
490
                        else
563
491
                        {
564
492
                                pDock->fDecorationsOffsetX -= 10;
565
 
                                if (pDock->fDecorationsOffsetX < - pDock->iCurrentWidth / 2)
 
493
                                if (pDock->fDecorationsOffsetX < - pDock->container.iWidth / 2)
566
494
                                {
567
495
                                        if (g_pBackgroundSurfaceFull[0] != NULL)
568
 
                                                pDock->fDecorationsOffsetX += pDock->iCurrentWidth;
 
496
                                                pDock->fDecorationsOffsetX += pDock->container.iWidth;
569
497
                                        else
570
 
                                                pDock->fDecorationsOffsetX = - pDock->iCurrentWidth / 2;
 
498
                                                pDock->fDecorationsOffsetX = - pDock->container.iWidth / 2;
571
499
                                }
572
500
                        }
573
501
                }
574
502
        }
575
503
        
576
504
        //g_print ("%x -> %x\n", pLastPointedIcon, pPointedIcon);
 
505
        gboolean bStartAnimation = FALSE;
577
506
        if (pPointedIcon != pLastPointedIcon || s_pLastPointedDock == NULL)
578
507
        {
579
508
                cairo_dock_on_change_icon (pLastPointedIcon, pPointedIcon, pDock);
580
509
                
581
 
                if (pPointedIcon != NULL && s_pIconClicked != NULL && cairo_dock_get_icon_order (s_pIconClicked) == cairo_dock_get_icon_order (pPointedIcon) && ! g_bLocked && ! myAccessibility.bLockIcons)
 
510
                if (pPointedIcon != NULL && s_pIconClicked != NULL && cairo_dock_get_icon_order (s_pIconClicked) == cairo_dock_get_icon_order (pPointedIcon) && ! g_bLocked && ! myAccessibility.bLockIcons && ! myAccessibility.bLockAll)
582
511
                {
583
 
                        Icon *icon;
584
 
                        GList *ic;
585
 
                        for (ic = pDock->icons; ic != NULL; ic = ic->next)
586
 
                        {
587
 
                                icon = ic->data;
588
 
                                if (icon == s_pIconClicked)
589
 
                                        continue;
590
 
                                //if (pDock->iMouseX > s_pIconClicked->fDrawXAtRest + s_pIconClicked->fWidth * s_pIconClicked->fScale /2)  // on a deplace l'icone a droite.  // fDrawXAtRest
591
 
                                if (s_pIconClicked->fXAtRest < pPointedIcon->fXAtRest)  // on a deplace l'icone a droite.
592
 
                                {
593
 
                                        //g_print ("%s : %.2f / %.2f ; %.2f / %d (%.2f)\n", icon->acName, icon->fXAtRest, s_pIconClicked->fXAtRest, icon->fDrawX, pDock->iMouseX, icon->fGlideOffset);
594
 
                                        if (icon->fXAtRest > s_pIconClicked->fXAtRest && icon->fDrawX < pDock->iMouseX + 1 && icon->fGlideOffset == 0)  // icone entre l'icone deplacee et le curseur.
595
 
                                        {
596
 
                                                //g_print ("  %s glisse vers la gauche\n", icon->acName);
597
 
                                                icon->iGlideDirection = -1;
598
 
                                        }
599
 
                                        else if (icon->fXAtRest > s_pIconClicked->fXAtRest && icon->fDrawX > pDock->iMouseX && icon->fGlideOffset != 0)
600
 
                                        {
601
 
                                                //g_print ("  %s glisse vers la droite\n", icon->acName);
602
 
                                                icon->iGlideDirection = 1;
603
 
                                        }
604
 
                                        else if (icon->fXAtRest < s_pIconClicked->fXAtRest && icon->fGlideOffset > 0)
605
 
                                        {
606
 
                                                //g_print ("  %s glisse en sens inverse vers la gauche\n", icon->acName);
607
 
                                                icon->iGlideDirection = -1;
608
 
                                        }
609
 
                                }
610
 
                                else
611
 
                                {
612
 
                                        //g_print ("deplacement de %s vers la gauche (%.2f / %d)\n", icon->acName, icon->fDrawX + icon->fWidth * (1+myIcons.fAmplitude) + myIcons.iIconGap, pDock->iMouseX);
613
 
                                        if (icon->fXAtRest < s_pIconClicked->fXAtRest && icon->fDrawX + icon->fWidth * (1+myIcons.fAmplitude) + myIcons.iIconGap >= pDock->iMouseX && icon->fGlideOffset == 0)  // icone entre l'icone deplacee et le curseur.
614
 
                                        {
615
 
                                                //g_print ("  %s glisse vers la droite\n", icon->acName);
616
 
                                                icon->iGlideDirection = 1;
617
 
                                        }
618
 
                                        else if (icon->fXAtRest < s_pIconClicked->fXAtRest && icon->fDrawX + icon->fWidth * (1+myIcons.fAmplitude) + myIcons.iIconGap <= pDock->iMouseX && icon->fGlideOffset != 0)
619
 
                                        {
620
 
                                                //g_print ("  %s glisse vers la gauche\n", icon->acName);
621
 
                                                icon->iGlideDirection = -1;
622
 
                                        }
623
 
                                        else if (icon->fXAtRest > s_pIconClicked->fXAtRest && icon->fGlideOffset < 0)
624
 
                                        {
625
 
                                                //g_print ("  %s glisse en sens inverse vers la droite\n", icon->acName);
626
 
                                                icon->iGlideDirection = 1;
627
 
                                        }
628
 
                                }
629
 
                        }
630
 
                        if (pDock->iSidIconGlide == 0)
631
 
                        {
632
 
                                pDock->iSidIconGlide = g_timeout_add (50, (GSourceFunc) _cairo_dock_make_icon_glide, pDock);
633
 
                        }
 
512
                        g_print ("on change d'icone\n");
 
513
                        _cairo_dock_make_icon_glide (pPointedIcon, s_pIconClicked, pDock);
 
514
                        bStartAnimation = TRUE;
634
515
                }
635
516
        }
636
517
        
637
 
        gboolean bStartAnimation = FALSE;
638
518
        cairo_dock_notify (CAIRO_DOCK_MOUSE_MOVED, pDock, &bStartAnimation);
639
519
        if (bStartAnimation)
640
520
                cairo_dock_launch_animation (CAIRO_CONTAINER (pDock));
645
525
gboolean cairo_dock_emit_signal_on_dock (CairoDock *pDock, const gchar *cSignal)
646
526
{
647
527
        static gboolean bReturn;
648
 
        g_signal_emit_by_name (pDock->pWidget, cSignal, NULL, &bReturn);
 
528
        g_signal_emit_by_name (pDock->container.pWidget, cSignal, NULL, &bReturn);
649
529
        return FALSE;
650
530
}
651
531
gboolean cairo_dock_emit_leave_signal (CairoDock *pDock)
663
543
        //g_print ("%s (bMenuVisible:%d)\n", __func__, pDock->bMenuVisible);
664
544
        pDock->iAvoidingMouseIconType = -1;
665
545
        pDock->fAvoidingMouseMargin = 0;
666
 
        pDock->bInside = FALSE;
 
546
        pDock->container.bInside = FALSE;
667
547
        pDock->bAtTop = FALSE;
668
548
        
669
549
        if (pDock->bMenuVisible)
670
 
        {
671
550
                return ;
672
 
        }
673
551
        
674
552
        if (pDock->iSidMoveUp != 0)  // si on est en train de monter, on arrete.
675
553
        {
686
564
        //s_pLastPointedDock = NULL;
687
565
        //g_print ("s_pLastPointedDock <- NULL\n");
688
566
        
689
 
        if (s_pIconClicked != NULL && (CAIRO_DOCK_IS_LAUNCHER (s_pIconClicked) || CAIRO_DOCK_IS_DETACHABLE_APPLET (s_pIconClicked) || CAIRO_DOCK_IS_USER_SEPARATOR(s_pIconClicked)) && s_pFlyingContainer == NULL && ! g_bLocked && ! myAccessibility.bLockIcons)
 
567
        if (s_pIconClicked != NULL && (CAIRO_DOCK_IS_LAUNCHER (s_pIconClicked) || CAIRO_DOCK_IS_DETACHABLE_APPLET (s_pIconClicked) || CAIRO_DOCK_IS_USER_SEPARATOR(s_pIconClicked)) && s_pFlyingContainer == NULL && ! g_bLocked && ! myAccessibility.bLockIcons && ! myAccessibility.bLockAll)
690
568
        {
691
 
                //g_print ("on a sorti %s du dock (%d;%d) / %dx%d\n", s_pIconClicked->acName, pDock->iMouseX, pDock->iMouseY, pDock->iCurrentWidth, pDock->iCurrentHeight);
 
569
                g_print ("on a sorti %s du dock (%d;%d) / %dx%d\n", s_pIconClicked->cName, pDock->container.iMouseX, pDock->container.iMouseY, pDock->container.iWidth, pDock->container.iHeight);
692
570
                
693
571
                //if (! cairo_dock_hide_child_docks (pDock))  // on quitte si on entre dans un sous-dock, pour rester en position "haute".
694
572
                //      return ;
725
603
        {
726
604
                if (pDock->bAutoHide)
727
605
                {
728
 
                        pDock->fFoldingFactor = (mySystem.bAnimateOnAutoHide && mySystem.fUnfoldAcceleration != 0. ? 0.03 : 0.);
 
606
                        pDock->fFoldingFactor = (mySystem.bAnimateOnAutoHide ? 0.001 : 0.);
729
607
                        if (pDock->iSidMoveDown == 0)  // on commence a descendre.
730
608
                                pDock->iSidMoveDown = g_timeout_add (40, (GSourceFunc) cairo_dock_move_down, (gpointer) pDock);
731
609
                }
734
612
        }
735
613
        else
736
614
        {
737
 
                pDock->fFoldingFactor = (mySystem.bAnimateSubDock ? 0.03 : 0.);
 
615
                pDock->fFoldingFactor = (mySystem.bAnimateSubDock ? 0.001 : 0.);
738
616
                pDock->bAtBottom = TRUE;  // mis en commentaire le 12/11/07 pour permettre le quick-hide.
739
617
                //cd_debug ("on force bAtBottom");
740
618
        }
745
623
}
746
624
gboolean cairo_dock_on_leave_notify (GtkWidget* pWidget, GdkEventCrossing* pEvent, CairoDock *pDock)
747
625
{
748
 
        if (g_bEasterEggs && pDock->bAtBottom)
749
 
                return FALSE;
750
 
        //g_print ("%s (bInside:%d; bAtBottom:%d; iRefCount:%d)\n", __func__, pDock->bInside, pDock->bAtBottom, pDock->iRefCount);
751
 
        /**if (pDock->bAtBottom)  // || ! pDock->bInside  // mis en commentaire pour la 1.5.4
 
626
        if (pDock->bAtBottom && pDock->iRefCount == 0)  /// je l'avais mis en commentaire, mais c'est utile maintenant pour le input shape. A valider ...
752
627
        {
753
628
                pDock->iSidLeaveDemand = 0;
754
 
                return FALSE;
755
 
        }*/
 
629
                if (! (pDock->bAutoHide && ! pDock->bAutoHideInitialValue))  // sauf quick hide, car cela pose probleme lors d'un quick-hide avec souris sur icone de sous-dock.
 
630
                        return FALSE;
 
631
        }
 
632
        //g_print ("%s (bInside:%d; bAtBottom:%d; iRefCount:%d)\n", __func__, pDock->container.bInside, pDock->bAtBottom, pDock->iRefCount);
756
633
        if (pEvent != NULL && (pEvent->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)) && (pEvent->state & GDK_BUTTON1_MASK))
757
634
        {
758
635
                return FALSE;
759
636
        }
760
 
        //g_print ("%s (main dock : %d)\n", __func__, pDock->bIsMainDock);
 
637
        //g_print ("%s (main dock : %d, autohide:%d)\n", __func__, pDock->bIsMainDock, pDock->bAutoHide);
761
638
 
762
639
        if (pDock->iRefCount == 0)
763
640
        {
783
660
        }
784
661
        pDock->iSidLeaveDemand = 0;
785
662
        
786
 
        /*if (! pDock->bInside)
 
663
        /*if (! pDock->container.bInside)
787
664
        {
788
665
                g_print ("on n'etait deja pas dedans\n");
789
 
                gtk_widget_hide (pDock->pWidget);
 
666
                gtk_widget_hide (pDock->container.pWidget);
790
667
                return TRUE;
791
668
        }*/
792
 
        pDock->bInside = FALSE;
 
669
        pDock->container.bInside = FALSE;
793
670
        //cd_debug (" on attend...");
794
671
        while (gtk_events_pending ())  // on laisse le temps au signal d'entree dans le sous-dock d'etre traite.
795
672
                gtk_main_iteration ();
796
 
        //cd_debug (" ==> pDock->bInside : %d", pDock->bInside);
 
673
        //cd_debug (" ==> pDock->container.bInside : %d", pDock->container.bInside);
797
674
        
798
 
        if (pDock->bInside)  // on est re-rentre dedans entre-temps.
 
675
        if (pDock->container.bInside)  // on est re-rentre dedans entre-temps.
799
676
                return TRUE;
800
677
 
801
678
        if (! cairo_dock_hide_child_docks (pDock))  // on quitte si on entre dans un sous-dock, pour rester en position "haute".
803
680
        
804
681
        if (pEvent != NULL)
805
682
        {
806
 
                pDock->iMouseX = pEvent->x;
807
 
                pDock->iMouseY = pEvent->y;
 
683
                pDock->container.iMouseX = pEvent->x;
 
684
                pDock->container.iMouseY = pEvent->y;
808
685
        }
809
686
        
810
687
        cairo_dock_leave_from_main_dock (pDock);
863
740
 
864
741
gboolean cairo_dock_on_enter_notify (GtkWidget* pWidget, GdkEventCrossing* pEvent, CairoDock *pDock)
865
742
{
866
 
        if (pEvent && g_bEasterEggs && pDock->pShapeBitmap)
 
743
        if (pEvent && pDock->pShapeBitmap)  // XInputShape is broken. We manage ourself the entry.
867
744
        {
868
 
                int x = (pDock->bHorizontalDock ? pEvent->x : pDock->iCurrentWidth - pEvent->y);
 
745
                int x = (pDock->container.bIsHorizontal ? pEvent->x : pDock->container.iWidth - pEvent->y);
869
746
                if (x < pDock->inputArea.x || x > (pDock->inputArea.x + pDock->inputArea.width))
870
747
                        return FALSE;
871
748
        }
872
 
        //g_print ("%s (bIsMainDock : %d; bAtTop:%d; bInside:%d; iSidMoveDown:%d; iMagnitudeIndex:%d)\n", __func__, pDock->bIsMainDock, pDock->bAtTop, pDock->bInside, pDock->iSidMoveDown, pDock->iMagnitudeIndex);
 
749
        //g_print ("%s (bIsMainDock : %d; bAtTop:%d; bInside:%d; iSidMoveDown:%d; iMagnitudeIndex:%d)\n", __func__, pDock->bIsMainDock, pDock->bAtTop, pDock->container.bInside, pDock->iSidMoveDown, pDock->iMagnitudeIndex);
873
750
        s_pLastPointedDock = NULL;  // ajoute le 04/10/07 pour permettre aux sous-docks d'apparaitre si on entre en pointant tout de suite sur l'icone.
874
751
        if (! cairo_dock_entrance_is_allowed (pDock))
875
752
        {
897
774
                        cairo_dock_launch_animation (CAIRO_CONTAINER (pDock));
898
775
        }
899
776
        
900
 
        if (pDock->bAtTop || pDock->bInside || (pDock->iSidMoveDown != 0))  // le 'iSidMoveDown != 0' est la pour empecher le dock de "vibrer" si l'utilisateur sort par en bas avec l'auto-hide active.
 
777
        if (pDock->bAtTop || pDock->container.bInside || (pDock->iSidMoveDown != 0))  // le 'iSidMoveDown != 0' est la pour empecher le dock de "vibrer" si l'utilisateur sort par en bas avec l'auto-hide active.
901
778
        {
902
 
                //g_print ("  %d;%d;%d\n", pDock->bAtTop,  pDock->bInside, pDock->iSidMoveDown);
903
 
                pDock->bInside = TRUE;  /// ajoute pour les plug-ins opengl.
 
779
                //g_print ("  %d;%d;%d\n", pDock->bAtTop,  pDock->container.bInside, pDock->iSidMoveDown);
 
780
                pDock->container.bInside = TRUE;  /// ajoute pour les plug-ins opengl.
904
781
                cairo_dock_start_growing (pDock);
905
782
                if (pDock->bAutoHide && pDock->iRefCount == 0 && pDock->iSidMoveUp == 0)
906
783
                {
909
786
                }
910
787
                return FALSE;
911
788
        }
912
 
        //g_print ("%s (main dock : %d ; %d)\n", __func__, pDock->bIsMainDock, pDock->bHorizontalDock);
 
789
        //g_print ("%s (main dock : %d ; %d)\n", __func__, pDock->bIsMainDock, pDock->container.bIsHorizontal);
913
790
 
914
 
        /**if (g_bUseOpenGL && pDock->render_opengl != NULL)
915
 
        {
916
 
                gboolean bStartAnimation = FALSE;
917
 
                cairo_dock_notify (CAIRO_DOCK_ENTER_DOCK, pDock, &bStartAnimation);
918
 
                if (bStartAnimation)
919
 
                        cairo_dock_launch_animation (CAIRO_CONTAINER (pDock));
920
 
        }*/
921
 
        
922
791
        pDock->fDecorationsOffsetX = 0;
923
792
        if (pDock->iRefCount != 0)
924
793
        {
925
794
                gtk_window_present (GTK_WINDOW (pWidget));  /// utile ???
926
795
        }
927
 
        pDock->bInside = TRUE;
 
796
        pDock->container.bInside = TRUE;
928
797
        
929
798
        cairo_dock_stop_quick_hide ();
930
799
 
931
800
        if (s_pIconClicked != NULL)  // on pourrait le faire a chaque motion aussi.
932
801
        {
933
802
                pDock->iAvoidingMouseIconType = s_pIconClicked->iType;
934
 
                pDock->fAvoidingMouseMargin = .5;
 
803
                pDock->fAvoidingMouseMargin = .5;  /// inutile il me semble ...
935
804
        }
936
805
        
937
806
        if (s_pFlyingContainer != NULL)
938
807
        {
939
808
                Icon *pFlyingIcon = s_pFlyingContainer->pIcon;
940
 
                g_print ("on remet l'icone volante dans son dock d'origine (%s)\n", pFlyingIcon->cParentDockName);
941
 
                cairo_dock_free_flying_container (s_pFlyingContainer);
942
 
                cairo_dock_insert_icon_in_dock (pFlyingIcon, pDock, CAIRO_DOCK_UPDATE_DOCK_SIZE, CAIRO_DOCK_ANIMATE_ICON);
943
 
                cairo_dock_start_icon_animation (pFlyingIcon, pDock);
944
 
                s_pFlyingContainer = NULL;
 
809
                if (pDock != pFlyingIcon->pSubDock)  // on evite les boucles.
 
810
                {
 
811
                        cd_message ("on remet l'icone volante dans un dock (dock d'origine : %s)", pFlyingIcon->cParentDockName);
 
812
                        cairo_dock_free_flying_container (s_pFlyingContainer);
 
813
                        cairo_dock_stop_icon_animation (pFlyingIcon);
 
814
                        cairo_dock_insert_icon_in_dock (pFlyingIcon, pDock, CAIRO_DOCK_UPDATE_DOCK_SIZE, CAIRO_DOCK_ANIMATE_ICON);
 
815
                        cairo_dock_start_icon_animation (pFlyingIcon, pDock);
 
816
                        s_pFlyingContainer = NULL;
 
817
                }
945
818
        }
946
819
        
947
820
        int iNewWidth, iNewHeight;
948
821
        cairo_dock_get_window_position_and_geometry_at_balance (pDock, CAIRO_DOCK_MAX_SIZE, &iNewWidth, &iNewHeight);
949
822
        if ((pDock->bAutoHide && pDock->iRefCount == 0) && pDock->bAtBottom)
950
 
                pDock->iWindowPositionY = (pDock->bDirectionUp ? g_iXScreenHeight[pDock->bHorizontalDock] - myHiddenDock.iVisibleZoneHeight - pDock->iGapY : myHiddenDock.iVisibleZoneHeight + pDock->iGapY - pDock->iMaxDockHeight);
 
823
                pDock->container.iWindowPositionY = (pDock->container.bDirectionUp ? g_iXScreenHeight[pDock->container.bIsHorizontal] - myAccessibility.iVisibleZoneHeight - pDock->iGapY : myAccessibility.iVisibleZoneHeight + pDock->iGapY - pDock->iMaxDockHeight);
951
824
        
952
 
        if (pDock->iCurrentWidth != iNewWidth || pDock->iCurrentHeight != iNewHeight)
 
825
        if (pDock->container.iWidth != iNewWidth || pDock->container.iHeight != iNewHeight)
953
826
        {
954
 
                if (pDock->bHorizontalDock)
 
827
                g_print ("  resize on enter\n");
 
828
                if (pDock->container.bIsHorizontal)
955
829
                        gdk_window_move_resize (pWidget->window,
956
 
                                pDock->iWindowPositionX,
957
 
                                pDock->iWindowPositionY,
 
830
                                pDock->container.iWindowPositionX,
 
831
                                pDock->container.iWindowPositionY,
958
832
                                iNewWidth,
959
833
                                iNewHeight);
960
834
                else
961
835
                        gdk_window_move_resize (pWidget->window,
962
 
                                pDock->iWindowPositionY,
963
 
                                pDock->iWindowPositionX,
 
836
                                pDock->container.iWindowPositionY,
 
837
                                pDock->container.iWindowPositionX,
964
838
                                iNewHeight,
965
839
                                iNewWidth);
966
840
        }
1010
884
        }
1011
885
        
1012
886
        cairo_dock_start_growing (pDock);
1013
 
 
1014
 
        return FALSE;
 
887
        
 
888
        g_print (" fin du enter\n");
 
889
        return TRUE;
1015
890
}
1016
891
 
1017
892
 
1019
894
        GdkEventKey *pKey,
1020
895
        CairoDock *pDock)
1021
896
{
1022
 
        g_print ("on a appuye sur une touche\n");
 
897
        g_print ("on a appuye sur une touche (%d)\n", pKey->keyval);
1023
898
        if (pKey->type == GDK_KEY_PRESS)
1024
899
        {
1025
900
                cairo_dock_notify (CAIRO_DOCK_KEY_PRESSED, pDock, pKey->keyval, pKey->state, pKey->string);
1026
901
        }
1027
902
        else if (pKey->type == GDK_KEY_RELEASE)
1028
903
        {
1029
 
                g_print ("release : pKey->keyval = %d\n", pKey->keyval);
 
904
                //g_print ("release : pKey->keyval = %d\n", pKey->keyval);
1030
905
                if ((pKey->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)) && pKey->keyval == 0)  // On relache la touche ALT, typiquement apres avoir fait un ALT + clique gauche + deplacement.
1031
906
                {
1032
907
                        if (pDock->iRefCount == 0)
1033
908
                                cairo_dock_write_root_dock_gaps (pDock);
1034
909
                }
1035
910
        }
1036
 
        return FALSE;
 
911
        return TRUE;
1037
912
}
1038
913
 
1039
914
gchar *cairo_dock_launch_command_sync (const gchar *cCommand)
1063
938
                g_free (standard_output);
1064
939
                return NULL;
1065
940
        }
 
941
        if (standard_output[strlen (standard_output) - 1] == '\n')
 
942
                standard_output[strlen (standard_output) - 1] ='\0';
1066
943
        return standard_output;
1067
944
}
1068
945
 
1204
1081
 
1205
1082
gboolean cairo_dock_notification_click_icon (gpointer pUserData, Icon *icon, CairoDock *pDock, guint iButtonState)
1206
1083
{
1207
 
        g_print ("+ %s (%s)\n", __func__, icon ? icon->acName : "no icon");
 
1084
        //g_print ("+ %s (%s)\n", __func__, icon ? icon->cName : "no icon");
1208
1085
        if (icon == NULL)
1209
1086
                return CAIRO_DOCK_LET_PASS_NOTIFICATION;
1210
 
        if (icon->pSubDock != NULL && myAccessibility.bShowSubDockOnClick)  // icone de sous-dock a montrer au clic.
 
1087
        if (icon->pSubDock != NULL && myAccessibility.bShowSubDockOnClick && ! (iButtonState & GDK_SHIFT_MASK))  // icone de sous-dock a montrer au clic.
1211
1088
        {
1212
 
                cairo_dock_show_subdock (icon, FALSE, pDock);
 
1089
                cairo_dock_show_subdock (icon, pDock, FALSE);
1213
1090
                return CAIRO_DOCK_INTERCEPT_NOTIFICATION;
1214
1091
        }
1215
1092
        else if (CAIRO_DOCK_IS_URI_LAUNCHER (icon))  // URI : on lance ou on monte.
1231
1108
                        cairo_dock_fm_mount (icon, CAIRO_CONTAINER (pDock));
1232
1109
                }
1233
1110
                else
1234
 
                        cairo_dock_fm_launch_uri (icon->acCommand);
 
1111
                        cairo_dock_fm_launch_uri (icon->cCommand);
1235
1112
                return CAIRO_DOCK_INTERCEPT_NOTIFICATION;
1236
1113
        }
1237
1114
        else if (CAIRO_DOCK_IS_APPLI (icon) && ! ((iButtonState & GDK_SHIFT_MASK) && CAIRO_DOCK_IS_LAUNCHER (icon)) && ! CAIRO_DOCK_IS_APPLET (icon))  // une icone d'appli ou d'inhibiteur (hors applet) mais sans le shift+clic : on cache ou on montre.
1245
1122
        }
1246
1123
        else if (CAIRO_DOCK_IS_LAUNCHER (icon))
1247
1124
        {
1248
 
                g_print ("+ launcher\n");
 
1125
                //g_print ("+ launcher\n");
1249
1126
                if (CAIRO_DOCK_IS_MULTI_APPLI (icon) && ! (iButtonState & GDK_SHIFT_MASK))  // un lanceur ayant un sous-dock de classe ou une icone de paille : on cache ou on montre.
1250
1127
                {
1251
1128
                        if (! myAccessibility.bShowSubDockOnClick)
1254
1131
                        }
1255
1132
                        return CAIRO_DOCK_INTERCEPT_NOTIFICATION;
1256
1133
                }
1257
 
                else if (icon->acCommand != NULL && strcmp (icon->acCommand, "none") != 0)  // finalement, on lance la commande.
 
1134
                else if (icon->cCommand != NULL && strcmp (icon->cCommand, "none") != 0)  // finalement, on lance la commande.
1258
1135
                {
 
1136
                        if (pDock->iRefCount != 0)
 
1137
                        {
 
1138
                                Icon *pMainIcon = cairo_dock_search_icon_pointing_on_dock (pDock, NULL);
 
1139
                                if (CAIRO_DOCK_IS_APPLET (pMainIcon))
 
1140
                                        return CAIRO_DOCK_LET_PASS_NOTIFICATION;
 
1141
                        }
 
1142
                        
1259
1143
                        gboolean bSuccess = FALSE;
1260
 
                        if (*icon->acCommand == '<')
 
1144
                        if (*icon->cCommand == '<')
1261
1145
                        {
1262
 
                                bSuccess = cairo_dock_simulate_key_sequence (icon->acCommand);
 
1146
                                bSuccess = cairo_dock_simulate_key_sequence (icon->cCommand);
1263
1147
                                if (!bSuccess)
1264
 
                                        bSuccess = cairo_dock_launch_command_full (icon->acCommand, icon->cWorkingDirectory);
 
1148
                                        bSuccess = cairo_dock_launch_command_full (icon->cCommand, icon->cWorkingDirectory);
1265
1149
                        }
1266
1150
                        else
1267
1151
                        {
1268
 
                                bSuccess = cairo_dock_launch_command_full (icon->acCommand, icon->cWorkingDirectory);
 
1152
                                bSuccess = cairo_dock_launch_command_full (icon->cCommand, icon->cWorkingDirectory);
1269
1153
                                if (! bSuccess)
1270
 
                                        bSuccess = cairo_dock_simulate_key_sequence (icon->acCommand);
 
1154
                                        bSuccess = cairo_dock_simulate_key_sequence (icon->cCommand);
1271
1155
                        }
1272
1156
                        if (! bSuccess)
1273
1157
                        {
1277
1161
                }
1278
1162
        }
1279
1163
        else
1280
 
                g_print ("no action here\n");
 
1164
                cd_debug ("no action here");
1281
1165
        return CAIRO_DOCK_LET_PASS_NOTIFICATION;
1282
1166
}
1283
1167
 
1291
1175
        }
1292
1176
        if (CAIRO_DOCK_IS_URI_LAUNCHER (icon) && icon->pSubDock != NULL)  // icone de repertoire.
1293
1177
        {
1294
 
                cairo_dock_fm_launch_uri (icon->acCommand);
 
1178
                cairo_dock_fm_launch_uri (icon->cCommand);
1295
1179
                return CAIRO_DOCK_INTERCEPT_NOTIFICATION;
1296
1180
        }
1297
1181
        if (CAIRO_DOCK_IS_MULTI_APPLI (icon))
1306
1190
 
1307
1191
gboolean cairo_dock_on_button_press (GtkWidget* pWidget, GdkEventButton* pButton, CairoDock *pDock)
1308
1192
{
1309
 
        g_print ("+ %s (%d/%d)\n", __func__, pButton->type, pButton->button);
1310
 
        if (pDock->bHorizontalDock)  // utile ?
 
1193
        //g_print ("+ %s (%d/%d)\n", __func__, pButton->type, pButton->button);
 
1194
        if (pDock->container.bIsHorizontal)  // utile ?
1311
1195
        {
1312
 
                pDock->iMouseX = (int) pButton->x;
1313
 
                pDock->iMouseY = (int) pButton->y;
 
1196
                pDock->container.iMouseX = (int) pButton->x;
 
1197
                pDock->container.iMouseY = (int) pButton->y;
1314
1198
        }
1315
1199
        else
1316
1200
        {
1317
 
                pDock->iMouseX = (int) pButton->y;
1318
 
                pDock->iMouseY = (int) pButton->x;
 
1201
                pDock->container.iMouseX = (int) pButton->y;
 
1202
                pDock->container.iMouseY = (int) pButton->x;
1319
1203
        }
1320
1204
 
1321
1205
        Icon *icon = cairo_dock_get_pointed_icon (pDock->icons);
1325
1209
                switch (pButton->type)
1326
1210
                {
1327
1211
                        case GDK_BUTTON_RELEASE :
1328
 
                                //g_print ("+ GDK_BUTTON_RELEASE (%d/%d sur %s/%s)\n", pButton->state, GDK_CONTROL_MASK | GDK_MOD1_MASK, icon ? icon->acName : "personne", icon ? icon->acCommand : "");  // 272 = 100010000
 
1212
                                //g_print ("+ GDK_BUTTON_RELEASE (%d/%d sur %s/%s)\n", pButton->state, GDK_CONTROL_MASK | GDK_MOD1_MASK, icon ? icon->cName : "personne", icon ? icon->cCommand : "");  // 272 = 100010000
1329
1213
                                if ( ! (pButton->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)))
1330
1214
                                {
1331
1215
                                        if (s_pIconClicked != NULL)
1332
1216
                                        {
1333
 
                                                //g_print ("release de %s (inside:%d)\n", s_pIconClicked->acName, pDock->bInside);
 
1217
                                                //g_print ("release de %s (inside:%d)\n", s_pIconClicked->cName, pDock->container.bInside);
1334
1218
                                                s_pIconClicked->iAnimationState = CAIRO_DOCK_STATE_REST;  // stoppe les animations de suivi du curseur.
1335
 
                                                //cairo_dock_stop_marking_icons (pDock);
1336
1219
                                                pDock->iAvoidingMouseIconType = -1;
1337
1220
                                                cairo_dock_stop_icon_glide (pDock);
1338
1221
                                        }
1339
1222
                                        if (icon != NULL && ! CAIRO_DOCK_IS_SEPARATOR (icon) && icon == s_pIconClicked)
1340
1223
                                        {
1341
1224
                                                s_pIconClicked = NULL;  // il faut le faire ici au cas ou le clic induirait un dialogue bloquant qui nous ferait sortir du dock par exemple.
1342
 
                                                //g_print ("+ click on '%s' (%s)\n", icon->acName, icon->acCommand);
 
1225
                                                //g_print ("+ click on '%s' (%s)\n", icon->cName, icon->cCommand);
1343
1226
                                                cairo_dock_notify (CAIRO_DOCK_CLICK_ICON, icon, pDock, pButton->state);
1344
1227
                                                if (myAccessibility.cRaiseDockShortcut != NULL)
1345
1228
                                                        s_bHideAfterShortcut = TRUE;
1346
1229
                                                
1347
1230
                                                cairo_dock_start_icon_animation (icon, pDock);
1348
1231
                                        }
1349
 
                                        else if (s_pIconClicked != NULL && icon != NULL && icon != s_pIconClicked && ! g_bLocked && ! myAccessibility.bLockIcons)  //  && icon->iType == s_pIconClicked->iType
 
1232
                                        else if (s_pIconClicked != NULL && icon != NULL && icon != s_pIconClicked && ! g_bLocked && ! myAccessibility.bLockIcons && ! myAccessibility.bLockAll)  //  && icon->iType == s_pIconClicked->iType
1350
1233
                                        {
1351
 
                                                //g_print ("deplacement de %s\n", s_pIconClicked->acName);
 
1234
                                                //g_print ("deplacement de %s\n", s_pIconClicked->cName);
1352
1235
                                                CairoDock *pOriginDock = CAIRO_DOCK (cairo_dock_search_container_from_icon (s_pIconClicked));
1353
1236
                                                if (pOriginDock != NULL && pDock != pOriginDock)
1354
1237
                                                {
1355
 
                                                        cairo_dock_detach_icon_from_dock (s_pIconClicked, pOriginDock, TRUE);  // plutot que 'cairo_dock_remove_icon_from_dock', afin de ne pas la fermer.
1356
 
                                                        ///cairo_dock_remove_icon_from_dock (pOriginDock, s_pIconClicked);
 
1238
                                                        cairo_dock_detach_icon_from_dock (s_pIconClicked, pOriginDock, TRUE);
1357
1239
                                                        cairo_dock_update_dock_size (pOriginDock);
1358
 
 
 
1240
                                                        
1359
1241
                                                        cairo_dock_update_icon_s_container_name (s_pIconClicked, icon->cParentDockName);
1360
1242
                                                        if (pOriginDock->iRefCount > 0 && ! myViews.bSameHorizontality)
1361
1243
                                                        {
1384
1266
                                                        s_pIconClicked = NULL;
1385
1267
                                                        return FALSE;
1386
1268
                                                }
1387
 
                                                //g_print ("deplacement de %s\n", s_pIconClicked->acName);
 
1269
                                                //g_print ("deplacement de %s\n", s_pIconClicked->cName);
1388
1270
                                                if (prev_icon != NULL && cairo_dock_get_icon_order (prev_icon) != cairo_dock_get_icon_order (s_pIconClicked))
1389
1271
                                                        prev_icon = NULL;
1390
1272
                                                cairo_dock_move_icon_after_icon (pDock, s_pIconClicked, prev_icon);
1391
1273
 
1392
 
                                                pDock->calculate_icons (pDock);
 
1274
                                                pDock->pRenderer->calculate_icons (pDock);
1393
1275
 
1394
1276
                                                if (! CAIRO_DOCK_IS_SEPARATOR (s_pIconClicked))
1395
1277
                                                {
1396
1278
                                                        cairo_dock_request_icon_animation (s_pIconClicked, pDock, "bounce", 2);
1397
1279
                                                }
1398
 
                                                if (pDock->iSidGLAnimation == 0 || ! CAIRO_DOCK_CONTAINER_IS_OPENGL (CAIRO_CONTAINER (pDock)))
1399
 
                                                        gtk_widget_queue_draw (pDock->pWidget);
 
1280
                                                if (pDock->container.iSidGLAnimation == 0 || ! CAIRO_CONTAINER_IS_OPENGL (CAIRO_CONTAINER (pDock)))
 
1281
                                                        gtk_widget_queue_draw (pDock->container.pWidget);
1400
1282
                                        }
1401
1283
                                        
1402
1284
                                        if (s_pFlyingContainer != NULL)
1403
1285
                                        {
1404
1286
                                                //g_print ("on relache l'icone volante\n");
1405
 
                                                if (pDock->bInside)
 
1287
                                                if (pDock->container.bInside)
1406
1288
                                                {
1407
1289
                                                        //g_print ("  on la remet dans son dock d'origine\n");
1408
1290
                                                        Icon *pFlyingIcon = s_pFlyingContainer->pIcon;
1417
1299
                                                        cairo_dock_terminate_flying_container (s_pFlyingContainer);  // supprime ou detache l'icone, l'animation se terminera toute seule.
1418
1300
                                                }
1419
1301
                                                s_pFlyingContainer = NULL;
1420
 
                                                //cairo_dock_stop_marking_icons (pDock);
1421
1302
                                                cairo_dock_stop_icon_glide (pDock);
1422
1303
                                        }
1423
1304
                                }
1429
1310
                                //g_print ("- apres clic : s_pIconClicked <- NULL\n");
1430
1311
                                s_pIconClicked = NULL;
1431
1312
                        break ;
1432
 
 
 
1313
                        
1433
1314
                        case GDK_BUTTON_PRESS :
1434
1315
                                if ( ! (pButton->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)))
1435
1316
                                {
1436
 
                                        //g_print ("+ clic sur %s (%.2f)!\n", icon ? icon->acName : "rien", icon ? icon->fPersonnalScale : 0.);
 
1317
                                        //g_print ("+ clic sur %s (%.2f)!\n", icon ? icon->cName : "rien", icon ? icon->fPersonnalScale : 0.);
 
1318
                                        s_iClickX = pButton->x;
 
1319
                                        s_iClickY = pButton->y;
1437
1320
                                        if (icon && icon->fPersonnalScale <= 0)
1438
1321
                                                s_pIconClicked = icon;  // on ne definit pas l'animation FOLLOW_MOUSE ici , on le fera apres le 1er mouvement, pour eviter que l'icone soit dessinee comme tel quand on clique dessus alors que le dock est en train de jouer une animation (ca provoque un flash desagreable).
1439
1322
                                        else
1443
1326
 
1444
1327
                        case GDK_2BUTTON_PRESS :
1445
1328
                                {
1446
 
                                        cairo_dock_notify (CAIRO_DOCK_DOUBLE_CLICK_ICON, icon, pDock);
 
1329
                                        if (icon && icon->fPersonnalScale <= 0)
 
1330
                                                cairo_dock_notify (CAIRO_DOCK_DOUBLE_CLICK_ICON, icon, pDock);
1447
1331
                                }
1448
1332
                        break ;
1449
1333
 
1455
1339
        {
1456
1340
                GtkWidget *menu = cairo_dock_build_menu (icon, CAIRO_CONTAINER (pDock));  // genere un CAIRO_DOCK_BUILD_MENU.
1457
1341
                
1458
 
                cairo_dock_popup_menu_on_container (menu, pDock);
 
1342
                cairo_dock_popup_menu_on_container (menu, CAIRO_CONTAINER (pDock));
1459
1343
        }
1460
1344
        else if (pButton->button == 2 && pButton->type == GDK_BUTTON_PRESS)  // clique milieu.
1461
1345
        {
1462
 
                cairo_dock_notify (CAIRO_DOCK_MIDDLE_CLICK_ICON, icon, pDock);
 
1346
                if (icon && icon->fPersonnalScale <= 0)
 
1347
                        cairo_dock_notify (CAIRO_DOCK_MIDDLE_CLICK_ICON, icon, pDock);
1463
1348
        }
1464
1349
 
1465
1350
        return FALSE;
1484
1369
{
1485
1370
        if (pScroll->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK))
1486
1371
        {
1487
 
                if (myAccessibility.bLockIcons)
 
1372
                if (myAccessibility.bLockIcons || myAccessibility.bLockAll)
1488
1373
                        return FALSE;
1489
1374
                
1490
1375
                int iScrollAmount = 0;
1523
1408
{
1524
1409
        //g_print ("%s (main dock : %d) : (%d;%d) (%dx%d)\n", __func__, pDock->bIsMainDock, pEvent->x, pEvent->y, pEvent->width, pEvent->height);
1525
1410
        gint iNewWidth, iNewHeight;
1526
 
        if (pDock->bHorizontalDock)
 
1411
        if (pDock->container.bIsHorizontal)
1527
1412
        {
1528
1413
                iNewWidth = pEvent->width;
1529
1414
                iNewHeight = pEvent->height;
1534
1419
                iNewHeight = pEvent->width;
1535
1420
        }
1536
1421
 
1537
 
        if ((iNewWidth != pDock->iCurrentWidth || iNewHeight != pDock->iCurrentHeight) && iNewWidth > 1)
 
1422
        if ((iNewWidth != pDock->container.iWidth || iNewHeight != pDock->container.iHeight) && iNewWidth > 1)
1538
1423
        {
1539
1424
                //g_print ("-> %dx%d\n", iNewWidth, iNewHeight);
1540
 
                pDock->iCurrentWidth = iNewWidth;
1541
 
                pDock->iCurrentHeight = iNewHeight;
 
1425
                pDock->container.iWidth = iNewWidth;
 
1426
                pDock->container.iHeight = iNewHeight;
1542
1427
 
1543
 
                if (pDock->bHorizontalDock)
1544
 
                        gdk_window_get_pointer (pWidget->window, &pDock->iMouseX, &pDock->iMouseY, NULL);
 
1428
                if (pDock->container.bIsHorizontal)
 
1429
                        gdk_window_get_pointer (pWidget->window, &pDock->container.iMouseX, &pDock->container.iMouseY, NULL);
1545
1430
                else
1546
 
                        gdk_window_get_pointer (pWidget->window, &pDock->iMouseY, &pDock->iMouseX, NULL);
1547
 
                if (pDock->iMouseX < 0 || pDock->iMouseX > pDock->iCurrentWidth)  // utile ?
1548
 
                        pDock->iMouseX = 0;
 
1431
                        gdk_window_get_pointer (pWidget->window, &pDock->container.iMouseY, &pDock->container.iMouseX, NULL);
 
1432
                if (pDock->container.iMouseX < 0 || pDock->container.iMouseX > pDock->container.iWidth)  // utile ?
 
1433
                        pDock->container.iMouseX = 0;
1549
1434
                
1550
1435
                if (pDock->pShapeBitmap != NULL)
1551
1436
                {
1552
 
                        gtk_widget_input_shape_combine_mask (pDock->pWidget,
1553
 
                                (pDock->bAtBottom && pDock->iRefCount == 0 ? pDock->pShapeBitmap : NULL),
 
1437
                        gtk_widget_input_shape_combine_mask (pDock->container.pWidget,
 
1438
                                (pDock->bAtBottom && pDock->iRefCount == 0 && ! pDock->bAutoHide ? pDock->pShapeBitmap : NULL),
1554
1439
                                0,
1555
1440
                                0);
1556
1441
                }
1566
1451
                        
1567
1452
                        glViewport(0, 0, w, h);
1568
1453
                        
1569
 
                        glMatrixMode(GL_PROJECTION);
 
1454
                        /*glMatrixMode(GL_PROJECTION);
1570
1455
                        glLoadIdentity();
1571
1456
                        glOrtho(0, w, 0, h, 0.0, 500.0);
1572
 
                        //gluPerspective(30.0, 1.0*(GLfloat)w/(GLfloat)h, 1.0, 500.0);
1573
1457
                        
1574
1458
                        glMatrixMode (GL_MODELVIEW);
1575
1459
                        glLoadIdentity ();
1576
1460
                        gluLookAt (w/2, h/2, 3.,
1577
1461
                                w/2, h/2, 0.,
1578
1462
                                0.0f, 1.0f, 0.0f);
1579
 
                        glTranslatef (0.0f, 0.0f, -3.);
 
1463
                        glTranslatef (0.0f, 0.0f, -3.);*/
 
1464
                        cairo_dock_set_ortho_view (w, h);
1580
1465
                        
1581
1466
                        glClearAccum (0., 0., 0., 0.);
1582
1467
                        glClear (GL_ACCUM_BUFFER_BIT);
1585
1470
                }
1586
1471
                
1587
1472
                #ifdef HAVE_GLITZ
1588
 
                if (pDock->pGlitzDrawable)
 
1473
                if (pDock->container.pGlitzDrawable)
1589
1474
                {
1590
 
                        glitz_drawable_update_size (pDock->pGlitzDrawable,
 
1475
                        glitz_drawable_update_size (pDock->container.pGlitzDrawable,
1591
1476
                                pEvent->width,
1592
1477
                                pEvent->height);
1593
1478
                }
1594
1479
                #endif
1595
1480
                
1596
1481
                cairo_dock_calculate_dock_icons (pDock);
1597
 
                gtk_widget_queue_draw (pWidget);  // il semble qu'il soit necessaire d'en rajouter un la pour eviter un "clignotement" a l'entree dans le dock.
1598
1482
                
1599
 
                //g_print ("debut du redessin\n");
1600
 
                //if (pDock->iRefCount > 0 || pDock->bAutoHide)
 
1483
                // only Compiz seems to respect the _NET_WM_SYNC_REQUEST window manager protocol. :-(
 
1484
                if (g_bEasterEggs)
 
1485
                {
 
1486
                        //g_print ("debut du redessin2\n");
 
1487
                        gtk_widget_queue_draw (pWidget);
 
1488
                        gdk_window_process_updates (pWidget->window, FALSE);
 
1489
                        //g_print ("fin du redessin2\n");
 
1490
                }
 
1491
                else
 
1492
                {
 
1493
                        //g_print ("debut du redessin\n");
 
1494
                        gtk_widget_queue_draw (pWidget);
1601
1495
                        while (gtk_events_pending ())  // on force un redessin immediat sinon on a quand meme un "flash".
1602
1496
                                gtk_main_iteration ();
1603
 
                //g_print ("fin du redessin\n");
 
1497
                        //g_print ("fin du redessin\n");
 
1498
                }
1604
1499
        }
 
1500
        else
 
1501
                gtk_widget_queue_draw (pWidget);
1605
1502
        
1606
 
        if (pDock->iSidMoveDown == 0 && pDock->iSidMoveUp == 0)  // ce n'est pas du a une animation. Donc en cas d'apparition due a l'auto-hide, ceci ne sera pas fait ici, mais a la fin de l'animation.
 
1503
        if (pDock->iSidMoveDown == 0 && pDock->iSidMoveUp == 0)  // ce n'est pas du a une animation d'auto-hide. Donc en cas d'apparition due a l'auto-hide, ceci ne sera pas fait ici, mais a la fin de l'animation de grossissement/depliage.
1607
1504
        {
1608
 
                cairo_dock_set_icons_geometry_for_window_manager (pDock);
1609
 
 
 
1505
                //g_print ("configure\n");
 
1506
                cairo_dock_set_icons_geometry_for_window_manager (pDock);  // changement de position ou de taille du dock => on replace les icones.
 
1507
                
1610
1508
                cairo_dock_replace_all_dialogs ();
1611
1509
        }
1612
1510
        
1614
1512
}
1615
1513
 
1616
1514
 
1617
 
void cairo_dock_on_drag_data_received (GtkWidget *pWidget, GdkDragContext *dc, gint x, gint y, GtkSelectionData *selection_data, guint info, guint t, CairoDock *pDock)
 
1515
 
 
1516
static gboolean s_bWaitForData = FALSE;
 
1517
 
 
1518
void cairo_dock_on_drag_data_received (GtkWidget *pWidget, GdkDragContext *dc, gint x, gint y, GtkSelectionData *selection_data, guint info, guint time, CairoDock *pDock)
1618
1519
{
1619
 
        //g_print ("%s (%dx%d)\n", __func__, x, y);
 
1520
        g_print ("%s (%dx%d, %d)\n", __func__, x, y, time);
1620
1521
        //\_________________ On recupere l'URI.
1621
 
        gchar *cReceivedData = (gchar *) selection_data->data;
 
1522
        gchar *cReceivedData = (gchar *) selection_data->data;  // gtk_selection_data_get_text
1622
1523
        g_return_if_fail (cReceivedData != NULL);
1623
1524
        int length = strlen (cReceivedData);
1624
1525
        if (cReceivedData[length-1] == '\n')
1626
1527
        if (cReceivedData[length-1] == '\r')
1627
1528
                cReceivedData[--length] = '\0';
1628
1529
        
1629
 
        /*if (pDock->iAvoidingMouseIconType == -1)
 
1530
        if (s_bWaitForData)
1630
1531
        {
 
1532
                s_bWaitForData = FALSE;
 
1533
                gdk_drag_status (dc, GDK_ACTION_COPY, time);
1631
1534
                g_print ("drag info : <%s>\n", cReceivedData);
1632
1535
                pDock->iAvoidingMouseIconType = CAIRO_DOCK_LAUNCHER;
1633
 
                pDock->fAvoidingMouseMargin = .25;
 
1536
                if (g_str_has_suffix (cReceivedData, ".desktop") || g_str_has_suffix (cReceivedData, ".sh"))
 
1537
                        pDock->fAvoidingMouseMargin = .5;  // on ne sera jamais dessus.
 
1538
                else
 
1539
                        pDock->fAvoidingMouseMargin = .25;
1634
1540
                return ;
1635
 
        }*/
 
1541
        }
1636
1542
        
1637
1543
        //\_________________ On arrete l'animation.
1638
1544
        //cairo_dock_stop_marking_icons (pDock);
1640
1546
        pDock->fAvoidingMouseMargin = 0;
1641
1547
        
1642
1548
        //\_________________ On calcule la position a laquelle on l'a lache.
1643
 
        cd_message (">>> cReceivedData : %s", cReceivedData);
 
1549
        cd_message (">>> cReceivedData : '%s'", cReceivedData);
 
1550
        int iDropX = (pDock->container.bIsHorizontal ? x : y);
1644
1551
        double fOrder = CAIRO_DOCK_LAST_ORDER;
1645
1552
        Icon *pPointedIcon = NULL, *pNeighboorIcon = NULL;
 
1553
        Icon *icon;
1646
1554
        GList *ic;
1647
 
        Icon *icon;
1648
 
        int iDropX = (pDock->bHorizontalDock ? x : y);
1649
1555
        for (ic = pDock->icons; ic != NULL; ic = ic->next)
1650
1556
        {
1651
1557
                icon = ic->data;
1652
1558
                if (icon->bPointed)
1653
1559
                {
1654
 
                        //g_print ("On pointe sur %s\n", icon->acName);
 
1560
                        //g_print ("On pointe sur %s\n", icon->cName);
1655
1561
                        pPointedIcon = icon;
1656
 
                        double fMargin;
1657
 
                        if (g_str_has_suffix (cReceivedData, ".desktop"))  // si c'est un .desktop, on l'ajoute.
 
1562
                        double fMargin;  /// deviendra obsolete si le drag-received fonctionne.
 
1563
                        if (g_str_has_suffix (cReceivedData, ".desktop") || g_str_has_suffix (cReceivedData, ".sh"))  // si c'est un .desktop, on l'ajoute.
1658
1564
                                fMargin = 0.5;  // on ne sera jamais dessus.
1659
1565
                        else  // sinon on le lance si on est sur l'icone, et on l'ajoute autrement.
1660
1566
                                fMargin = 0.25;
1677
1583
        }
1678
1584
        
1679
1585
        cairo_dock_notify_drop_data (cReceivedData, pPointedIcon, fOrder, CAIRO_CONTAINER (pDock));
 
1586
        
 
1587
        gtk_drag_finish (dc, TRUE, FALSE, time);
1680
1588
}
1681
1589
 
 
1590
gboolean cairo_dock_on_drag_drop (GtkWidget *pWidget, GdkDragContext *dc, gint x, gint y, guint time, CairoDock *pDock)
 
1591
{
 
1592
        cd_message ("%s (%dx%d, %d)", __func__, x, y, time);
 
1593
        GdkAtom target = gtk_drag_dest_find_target (pWidget, dc, NULL);
 
1594
        gtk_drag_get_data (pWidget, dc, target, time);
 
1595
        return TRUE;  // in a drop zone.
 
1596
}
1682
1597
 
1683
1598
gboolean cairo_dock_notification_drop_data (gpointer pUserData, const gchar *cReceivedData, Icon *icon, double fOrder, CairoContainer *pContainer)
1684
1599
{
1689
1604
        if (icon == NULL || CAIRO_DOCK_IS_LAUNCHER (icon) || CAIRO_DOCK_IS_SEPARATOR (icon))
1690
1605
        {
1691
1606
                CairoDock *pReceivingDock = pDock;
1692
 
                if (g_str_has_suffix (cReceivedData, ".desktop"))  // c'est un fichier .desktop, on choisit de l'ajouter quoiqu'il arrive.
 
1607
                if (g_str_has_suffix (cReceivedData, ".desktop") || g_str_has_suffix (cReceivedData, ".sh"))  // c'est un fichier .desktop ou un script, on choisit de l'ajouter quoiqu'il arrive.
1693
1608
                {
1694
 
                        if (fOrder == CAIRO_DOCK_LAST_ORDER)  // on a lache dessus.
 
1609
                        //if (fOrder == CAIRO_DOCK_LAST_ORDER)  // on a lache dessus.
1695
1610
                        {
1696
1611
                                if (icon && icon->pSubDock != NULL)  // on l'ajoutera au sous-dock.
1697
1612
                                {
1723
1638
                                        }
1724
1639
                                        else  // on le lache sur un lanceur.
1725
1640
                                        {
1726
 
                                                gchar *cCommand = g_strdup_printf ("%s '%s'", icon->acCommand, cReceivedData);
 
1641
                                                gchar *cCommand = g_strdup_printf ("%s '%s'", icon->cCommand, cReceivedData);
1727
1642
                                                g_spawn_command_line_async (cCommand, NULL);
1728
1643
                                                g_free (cCommand);
1729
1644
                                                cairo_dock_request_icon_animation (icon, pDock, "blink", 2);
1754
1669
        return CAIRO_DOCK_LET_PASS_NOTIFICATION;
1755
1670
}
1756
1671
 
1757
 
 
1758
 
void cairo_dock_on_drag_motion (GtkWidget *pWidget, GdkDragContext *dc, gint x, gint y, guint time, CairoDock *pDock)
 
1672
gboolean cairo_dock_on_drag_motion (GtkWidget *pWidget, GdkDragContext *dc, gint x, gint y, guint time, CairoDock *pDock)
1759
1673
{
1760
1674
        //g_print ("%s (%dx%d, %d)\n", __func__, x, y, time);
1761
1675
        //\_________________ On simule les evenements souris habituels.
1762
1676
        if (! pDock->bIsDragging)
1763
1677
        {
1764
1678
                cd_message ("start dragging");
 
1679
                pDock->bIsDragging = TRUE;
1765
1680
                
1766
1681
                /*GdkAtom gdkAtom = gdk_drag_get_selection (dc);
1767
1682
                Atom xAtom = gdk_x11_atom_to_xatom (gdkAtom);
1768
 
                
1769
1683
                Window Xid = GDK_WINDOW_XID (dc->source_window);
1770
1684
                g_print (" <%s>\n", cairo_dock_get_property_name_on_xwindow (Xid, xAtom));*/
1771
1685
                
1772
 
                pDock->bIsDragging = TRUE;
1773
 
                
1774
1686
                gboolean bStartAnimation = FALSE;
1775
1687
                cairo_dock_notify (CAIRO_DOCK_START_DRAG_DATA, pDock, &bStartAnimation);
1776
1688
                if (bStartAnimation)
1782
1694
                if (target == GDK_NONE)
1783
1695
                        gdk_drag_status (dc, 0, time);
1784
1696
                else
 
1697
                {
1785
1698
                        gtk_drag_get_data (pWidget, dc, target, time);
1786
 
                gtk_drag_get_data (pWidget, dc, target, time);
1787
 
                g_print ("get-data envoye\n");*/
 
1699
                        s_bWaitForData = TRUE;
 
1700
                        g_print ("get-data envoye\n");
 
1701
                }*/
 
1702
                
1788
1703
                cairo_dock_on_enter_notify (pWidget, NULL, pDock);  // ne sera effectif que la 1ere fois a chaque entree dans un dock.
1789
1704
        }
1790
1705
        else
1791
1706
                cairo_dock_on_motion_notify (pWidget, NULL, pDock);
 
1707
        
 
1708
        gdk_drag_status (dc, GDK_ACTION_COPY, time);
 
1709
        return TRUE;  // on accepte le drop.
1792
1710
}
1793
1711
 
1794
1712
void cairo_dock_on_drag_leave (GtkWidget *pWidget, GdkDragContext *dc, guint time, CairoDock *pDock)
1795
1713
{
1796
1714
        cd_message ("stop dragging");
 
1715
        s_bWaitForData = FALSE;
1797
1716
        pDock->bIsDragging = FALSE;
1798
1717
        pDock->bCanDrop = FALSE;
1799
1718
        //cairo_dock_stop_marking_icons (pDock);
1802
1721
}
1803
1722
 
1804
1723
 
 
1724
 
1805
1725
void cairo_dock_show_dock_at_mouse (CairoDock *pDock)
1806
1726
{
1807
1727
        g_return_if_fail (pDock != NULL);
1808
1728
        int iMouseX, iMouseY;
1809
 
        if (pDock->bHorizontalDock)
1810
 
                gdk_window_get_pointer (pDock->pWidget->window, &iMouseX, &iMouseY, NULL);
 
1729
        if (pDock->container.bIsHorizontal)
 
1730
                gdk_window_get_pointer (pDock->container.pWidget->window, &iMouseX, &iMouseY, NULL);
1811
1731
        else
1812
 
                gdk_window_get_pointer (pDock->pWidget->window, &iMouseY, &iMouseX, NULL);
 
1732
                gdk_window_get_pointer (pDock->container.pWidget->window, &iMouseY, &iMouseX, NULL);
1813
1733
        //g_print (" %d;%d\n", iMouseX, iMouseY);
1814
1734
        
1815
 
        pDock->iGapX = pDock->iWindowPositionX + iMouseX - g_iXScreenWidth[pDock->bHorizontalDock] * pDock->fAlign;
1816
 
        pDock->iGapY = (pDock->bDirectionUp ? g_iXScreenHeight[pDock->bHorizontalDock] - (pDock->iWindowPositionY + iMouseY) : pDock->iWindowPositionY + iMouseY);
 
1735
        pDock->iGapX = pDock->container.iWindowPositionX + iMouseX - g_iXScreenWidth[pDock->container.bIsHorizontal] * pDock->fAlign;
 
1736
        pDock->iGapY = (pDock->container.bDirectionUp ? g_iXScreenHeight[pDock->container.bIsHorizontal] - (pDock->container.iWindowPositionY + iMouseY) : pDock->container.iWindowPositionY + iMouseY);
1817
1737
        //g_print (" => %d;%d\n", g_pMainDock->iGapX, g_pMainDock->iGapY);
1818
1738
        
1819
 
        cairo_dock_set_window_position_at_balance (pDock, pDock->iCurrentWidth, pDock->iCurrentHeight);
1820
 
        //g_print ("   => (%d;%d)\n", g_pMainDock->iWindowPositionX, g_pMainDock->iWindowPositionY);
 
1739
        cairo_dock_set_window_position_at_balance (pDock, pDock->container.iWidth, pDock->container.iHeight);
 
1740
        //g_print ("   => (%d;%d)\n", g_pMainDock->container.iWindowPositionX, g_pMainDock->container.iWindowPositionY);
1821
1741
        
1822
 
        gtk_window_move (GTK_WINDOW (pDock->pWidget),
1823
 
                (pDock->bHorizontalDock ? pDock->iWindowPositionX : pDock->iWindowPositionY),
1824
 
                (pDock->bHorizontalDock ? pDock->iWindowPositionY : pDock->iWindowPositionX));
1825
 
        gtk_widget_show (pDock->pWidget);
 
1742
        gtk_window_move (GTK_WINDOW (pDock->container.pWidget),
 
1743
                (pDock->container.bIsHorizontal ? pDock->container.iWindowPositionX : pDock->container.iWindowPositionY),
 
1744
                (pDock->container.bIsHorizontal ? pDock->container.iWindowPositionY : pDock->container.iWindowPositionX));
 
1745
        gtk_widget_show (pDock->container.pWidget);
1826
1746
}
1827
1747
 
1828
1748
void cairo_dock_raise_from_keyboard (const char *cKeyShortcut, gpointer data)
1829
1749
{
1830
 
        if (GTK_WIDGET_VISIBLE (g_pMainDock->pWidget))
 
1750
        if (GTK_WIDGET_VISIBLE (g_pMainDock->container.pWidget))
1831
1751
        {
1832
 
                gtk_widget_hide (g_pMainDock->pWidget);
 
1752
                gtk_widget_hide (g_pMainDock->container.pWidget);
1833
1753
        }
1834
1754
        else
1835
1755
        {
1840
1760
 
1841
1761
void cairo_dock_hide_dock_like_a_menu (void)
1842
1762
{
1843
 
        if (s_bHideAfterShortcut && GTK_WIDGET_VISIBLE (g_pMainDock->pWidget))
 
1763
        if (s_bHideAfterShortcut && GTK_WIDGET_VISIBLE (g_pMainDock->container.pWidget))
1844
1764
        {
1845
 
                gtk_widget_hide (g_pMainDock->pWidget);
 
1765
                gtk_widget_hide (g_pMainDock->container.pWidget);
1846
1766
                s_bHideAfterShortcut = FALSE;
1847
1767
        }
1848
1768
}
1849
 
 
1850
 
void cairo_dock_unregister_current_flying_container (void)
1851
 
{
1852
 
        s_pFlyingContainer = NULL;
1853
 
}