~cairo-dock-team/ubuntu/precise/cairo-dock/3.0.0.0beta1

« back to all changes in this revision

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

  • Committer: Bazaar Package Importer
  • Author(s): Julien Lavergne
  • Date: 2008-09-14 16:26:12 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20080914162612-t6aa8pr2o0qry48o
Tags: 1.6.2.3-0ubuntu1
* New upstream release.
* debian/control
 - Update to 3.8.0 (no change needed).
 - Add libxtst-dev as Build-Depends.
* debian/cairo-dock-data.install
 - Add usr/share/cairo-dock/emblems directory.
* debian/watch
 - Update location.
* debian/rules
 - Add a get-orig-source rule.

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
 
34
34
extern int g_iScreenHeight[2];
35
35
 
36
 
extern gboolean g_bAutoHide;
37
 
 
38
36
extern int g_iVisibleZoneHeight;
39
37
 
40
38
extern gboolean g_bAnimateOnAutoHide;
48
46
extern int g_tNbAnimationRounds[CAIRO_DOCK_NB_TYPES];
49
47
extern int g_tNbIterInOneRound[CAIRO_DOCK_NB_ANIMATIONS];
50
48
 
 
49
extern gboolean g_bPopUp;
 
50
extern gboolean g_bTesting;
 
51
 
51
52
extern CairoDock *g_pMainDock;
52
53
 
53
54
gboolean cairo_dock_move_up (CairoDock *pDock)
74
75
        }
75
76
}
76
77
 
 
78
gboolean cairo_dock_pop_up (CairoDock *pDock)
 
79
{
 
80
        if (! pDock->bPopped && g_bPopUp)
 
81
                gtk_window_set_keep_above (GTK_WINDOW (pDock->pWidget), TRUE);
 
82
        
 
83
        pDock->iSidPopUp = 0;
 
84
        pDock->bPopped = TRUE;
 
85
        return FALSE;
 
86
}
 
87
 
 
88
 
 
89
gboolean cairo_dock_pop_down (CairoDock *pDock)
 
90
{
 
91
        g_print ("%s (%d)\n", __func__, pDock->bPopped);
 
92
        if (pDock->bPopped && g_bPopUp)
 
93
                gtk_window_set_keep_below (GTK_WINDOW (pDock->pWidget), TRUE);
 
94
        
 
95
        pDock->iSidPopDown = 0;
 
96
        pDock->bPopped = FALSE;
 
97
        return FALSE;
 
98
}
 
99
 
77
100
gboolean cairo_dock_move_down (CairoDock *pDock)
78
101
{
79
102
        //g_print ("%s ()\n", __func__);
90
113
                else
91
114
                        gtk_window_move (GTK_WINDOW (pDock->pWidget), pDock->iWindowPositionY, pDock->iWindowPositionX);
92
115
                pDock->bAtTop = FALSE;
 
116
                gtk_widget_queue_draw (pDock->pWidget);
93
117
                return TRUE;
94
118
        }
95
119
        else  // on se fixe en bas, et on montre la zone visible.
112
136
                                iNewHeight,
113
137
                                iNewWidth);
114
138
 
115
 
                if (g_bAutoHide && pDock->iRefCount == 0)
 
139
                if (pDock->bAutoHide && pDock->iRefCount == 0)
116
140
                {
117
141
                        //g_print ("on arrete les animations\n");
118
142
                        Icon *pBouncingIcon = cairo_dock_get_bouncing_icon (pDock->icons);
123
147
                        Icon *pRemovingIcon = cairo_dock_get_removing_or_inserting_icon (pDock->icons);
124
148
                        if (pRemovingIcon != NULL)  // idem.
125
149
                        {
126
 
                                pRemovingIcon->fPersonnalScale = -0.05;
 
150
                                if (pRemovingIcon->fPersonnalScale > 0)
 
151
                                        pRemovingIcon->fPersonnalScale = 0.05;
 
152
                                else
 
153
                                        pRemovingIcon->fPersonnalScale = - 0.05;
127
154
                                //g_print ("fPersonnalScale <- %f\n", pRemovingIcon->fPersonnalScale);
128
155
                        }
129
156
                        pDock->iScrollOffset = 0;
131
158
                        pDock->calculate_max_dock_size (pDock);
132
159
                        pDock->fFoldingFactor = (g_bAnimateOnAutoHide ? g_fUnfoldAcceleration : 0);
133
160
 
134
 
                        cairo_dock_allow_entrance ();
 
161
                        cairo_dock_allow_entrance (pDock);
135
162
                }
136
163
 
137
164
                gtk_widget_queue_draw (pDock->pWidget);
177
204
                gdk_window_get_pointer (pDock->pWidget->window, &pDock->iMouseX, &pDock->iMouseY, NULL);
178
205
        else
179
206
                gdk_window_get_pointer (pDock->pWidget->window, &pDock->iMouseY, &pDock->iMouseX, NULL);
180
 
 
181
 
        pDock->calculate_icons (pDock);
 
207
        
 
208
        Icon *pLastPointedIcon = cairo_dock_get_pointed_icon (pDock->icons);
 
209
        Icon *pPointedIcon = pDock->calculate_icons (pDock);
182
210
        gtk_widget_queue_draw (pDock->pWidget);
 
211
        if (pLastPointedIcon != pPointedIcon)
 
212
                cairo_dock_on_change_icon (pLastPointedIcon, pPointedIcon, pDock);
183
213
 
184
214
        if (pDock->iMagnitudeIndex == CAIRO_DOCK_NB_MAX_ITERATIONS && pDock->fFoldingFactor == 0)
185
215
        {
186
216
                pDock->iMagnitudeIndex = CAIRO_DOCK_NB_MAX_ITERATIONS;
187
217
                pDock->iSidGrowUp = 0;
188
 
                if (pDock->iRefCount == 0 && g_bAutoHide)  // on arrive en fin de l'animation qui montre le dock, les icones sont bien placees a partir de maintenant.
 
218
                if (pDock->iRefCount == 0 && pDock->bAutoHide)  // on arrive en fin de l'animation qui montre le dock, les icones sont bien placees a partir de maintenant.
189
219
                {
190
220
                        cairo_dock_set_icons_geometry_for_window_manager (pDock);
191
221
                        cairo_dock_replace_all_dialogs ();
244
274
 
245
275
        if (pDock->iMagnitudeIndex == 0)
246
276
        {
 
277
                if (pDock->bPopped && ! pDock->bInside)
 
278
                        cairo_dock_pop_down (pDock);
 
279
                
247
280
                Icon *pBouncingIcon = cairo_dock_get_bouncing_icon (pDock->icons);
248
281
                Icon *pRemovingIcon = cairo_dock_get_removing_or_inserting_icon (pDock->icons);
249
282
 
250
283
                if (pBouncingIcon == NULL && pRemovingIcon == NULL && (! g_bResetScrollOnLeave || pDock->iScrollOffset == 0))  // plus aucune animation en cours.
251
284
                {
252
 
                        if (! (g_bAutoHide && pDock->iRefCount == 0) && ! pDock->bInside)
 
285
                        if (! (pDock->bAutoHide && pDock->iRefCount == 0) && ! pDock->bInside)
253
286
                        {
254
287
                                int iNewWidth, iNewHeight;
255
288
                                cairo_dock_get_window_position_and_geometry_at_balance (pDock, CAIRO_DOCK_NORMAL_SIZE, &iNewWidth, &iNewHeight);
276
309
                        }
277
310
 
278
311
                        pDock->iSidShrinkDown = 0;
279
 
                        if (cairo_dock_hide_dock_like_a_menu () && GTK_WIDGET_VISIBLE (g_pMainDock->pWidget))
 
312
                        /**if (cairo_dock_hide_dock_like_a_menu () && GTK_WIDGET_VISIBLE (g_pMainDock->pWidget))
280
313
                        {
281
314
                                gtk_widget_hide (g_pMainDock->pWidget);
282
315
                                cairo_dock_has_been_hidden_like_a_menu ();
283
 
                        }
 
316
                        }*/
 
317
                        cairo_dock_hide_dock_like_a_menu ();
284
318
                        return FALSE;
285
319
                }
286
320
 
294
328
                                gboolean bIsAppli = CAIRO_DOCK_IS_NORMAL_APPLI (pRemovingIcon);  // car apres avoir ete enleve du dock elle n'est plus rien.
295
329
                                cairo_dock_remove_icon_from_dock (pDock, pRemovingIcon);
296
330
                                
297
 
                                if (bIsAppli && pRemovingIcon->cClass != NULL && pDock == cairo_dock_search_dock_from_name (pRemovingIcon->cClass) && pDock->icons == NULL)  // il n'y a plus aucune icone de cette classe.
 
331
                                if (! g_bTesting)
298
332
                                {
299
 
                                        cd_message ("le sous-dock de la classe %s n'a plus d'element et va etre detruit", pRemovingIcon->cClass);
300
 
                                        cairo_dock_destroy_dock (pDock, pRemovingIcon->cClass, NULL, NULL);
 
333
                                        if (bIsAppli && pRemovingIcon->cClass != NULL && pDock == cairo_dock_search_dock_from_name (pRemovingIcon->cClass) && pDock->icons == NULL)  // il n'y a plus aucune icone de cette classe.
 
334
                                        {
 
335
                                                cd_message ("le sous-dock de la classe %s n'a plus d'element et va etre detruit", pRemovingIcon->cClass);
 
336
                                                cairo_dock_destroy_dock (pDock, pRemovingIcon->cClass, NULL, NULL);
 
337
                                        }
 
338
                                        else
 
339
                                        {
 
340
                                                cairo_dock_update_dock_size (pDock);
 
341
                                        }
301
342
                                }
302
343
                                else
303
344
                                {
304
 
                                        cairo_dock_update_dock_size (pDock);
 
345
                                        if (bIsAppli && pRemovingIcon->cClass != NULL && pDock == cairo_dock_search_dock_from_name (pRemovingIcon->cClass))
 
346
                                        {
 
347
                                                if (pDock->icons == NULL)  // ne devrait plus arriver.
 
348
                                                {
 
349
                                                        cd_message ("le sous-dock de la classe %s n'a plus d'element et va etre detruit", pRemovingIcon->cClass);
 
350
                                                        
 
351
                                                        CairoDock *pFakeParentDock = NULL;
 
352
                                                        Icon *pFakeClassIcon = cairo_dock_search_icon_pointing_on_dock (pDock, &pFakeParentDock);
 
353
                                                        
 
354
                                                        cairo_dock_destroy_dock (pDock, pRemovingIcon->cClass, NULL, NULL);
 
355
                                                        pFakeClassIcon->pSubDock = NULL;
 
356
                                                        
 
357
                                                        cairo_dock_remove_icon_from_dock (pFakeParentDock, pFakeClassIcon);
 
358
                                                        cairo_dock_free_icon (pFakeClassIcon);
 
359
                                                        cairo_dock_update_dock_size (pFakeParentDock);
 
360
                                                }
 
361
                                                else if (pDock->icons->next == NULL)
 
362
                                                {
 
363
                                                        cd_message ("le sous-dock de la classe %s n'a plus que 1 element et va etre vide puis detruit", pRemovingIcon->cClass);
 
364
                                                        
 
365
                                                        CairoDock *pFakeParentDock = NULL;
 
366
                                                        Icon *pFakeClassIcon = cairo_dock_search_icon_pointing_on_dock (pDock, &pFakeParentDock);
 
367
                                                        
 
368
                                                        Icon *pLastClassIcon = pDock->icons->data;
 
369
                                                        pLastClassIcon->fOrder = pFakeClassIcon->fOrder;
 
370
                                                        
 
371
                                                        cairo_dock_destroy_dock (pDock, pRemovingIcon->cClass, pFakeParentDock, pFakeClassIcon->cParentDockName);
 
372
                                                        pFakeClassIcon->pSubDock = NULL;
 
373
                                                        
 
374
                                                        cairo_dock_remove_icon_from_dock (pFakeParentDock, pFakeClassIcon);
 
375
                                                        cairo_dock_free_icon (pFakeClassIcon);
 
376
                                                        
 
377
                                                        cairo_dock_redraw_my_icon (pLastClassIcon, CAIRO_CONTAINER (pFakeParentDock));  // on suppose que les tailles des 2 icones sont identiques.
 
378
                                                }
 
379
                                                else
 
380
                                                {
 
381
                                                        cairo_dock_update_dock_size (pDock);
 
382
                                                }
 
383
                                        }
 
384
                                        else
 
385
                                        {
 
386
                                                cairo_dock_update_dock_size (pDock);
 
387
                                        }
305
388
                                }
306
389
                                cairo_dock_free_icon (pRemovingIcon);
307
390
                        }
357
440
                        pDock->iSidGrowUp = 0;
358
441
                }
359
442
                if (pDock->iSidShrinkDown == 0)
360
 
                        pDock->iSidShrinkDown = g_timeout_add (50, (GSourceFunc) cairo_dock_shrink_down, (gpointer) pDock);  // fera diminuer de taille les icones, et rebondir/tourner/clignoter celle sui est animee.
 
443
                        pDock->iSidShrinkDown = g_timeout_add (50, (GSourceFunc) cairo_dock_shrink_down, (gpointer) pDock);  // fera diminuer de taille les icones, et rebondir/tourner/clignoter celle qui est animee.
361
444
        }
362
445
}