void gldi_icon_request_attention (Icon *pIcon, const gchar *cAnimation, int iNbRounds) { CairoDock *pDock = CAIRO_DOCK (cairo_dock_get_icon_container(pIcon)); g_return_if_fail (CAIRO_DOCK_IS_DOCK (pDock)); // currently only animate icons that are inside a dock // stop any current animation gldi_icon_stop_animation (pIcon); if (pIcon->iAnimationState != CAIRO_DOCK_STATE_REST) return ; // set the 'attention animation' flag pIcon->bIsDemandingAttention = TRUE; // start the animation if (iNbRounds <= 0) // <= 0 means infinite iNbRounds = 1e6; if (cAnimation == NULL || *cAnimation == '\0' || strcmp (cAnimation, "default") == 0) { if (myTaskbarParam.cAnimationOnDemandsAttention != NULL) cAnimation = myTaskbarParam.cAnimationOnDemandsAttention; else cAnimation = "rotate"; } gldi_icon_request_animation (pIcon, cAnimation, iNbRounds); cairo_dock_mark_icon_as_clicked (pIcon); // pour eviter qu'un simple survol ne stoppe l'animation. // if the icon is in a sub-dock, also animate the main icon. if (pDock->iRefCount > 0) { CairoDock *pParentDock = NULL; Icon *pPointingIcon = cairo_dock_search_icon_pointing_on_dock (pDock, &pParentDock); if (pPointingIcon != NULL) { gldi_icon_request_attention (pPointingIcon, cAnimation, iNbRounds); } } else if (pDock->iVisibility == CAIRO_DOCK_VISI_KEEP_BELOW && pDock->bIsBelow) cairo_dock_pop_up (pDock); }
void cd_do_change_current_icon (Icon *pIcon, CairoDock *pDock) { //\_________________ on gere le cachage et le montrage du dock precedent et actuel. if (myData.pCurrentDock != NULL && pDock != myData.pCurrentDock && myData.pCurrentDock != g_pMainDock) // on remet au repos dock precedemment anime. { cairo_dock_emit_leave_signal (myData.pCurrentDock); } if (pDock != NULL && pDock != g_pMainDock && pDock != myData.pCurrentDock) // on montre le nouveau dock { if (pDock != NULL) { if (pDock->iRefCount > 0) { CairoDock *pParentDock = NULL; Icon *pPointingIcon = cairo_dock_search_icon_pointing_on_dock (pDock, &pParentDock); if (pPointingIcon != NULL) { cairo_dock_show_subdock (pPointingIcon, pParentDock, FALSE); // utile pour le montrage des sous-docks au clic. } } else { cairo_dock_pop_up (pDock); } cairo_dock_emit_enter_signal (pDock); } } if (pDock != NULL) { gtk_window_present (GTK_WINDOW (pDock->pWidget)); } //\_________________ on gere l'allumage et l'eteignage de l'icone precedente et actuelle. if (myData.pCurrentIcon != NULL && pIcon != myData.pCurrentIcon) // on remet au repos l'icone precedemment anime. { myData.bIgnoreIconState = TRUE; cairo_dock_stop_icon_animation (myData.pCurrentIcon); myData.bIgnoreIconState = FALSE; cairo_dock_redraw_icon (myData.pCurrentIcon, CAIRO_CONTAINER (myData.pCurrentDock)); /// utile ?... } if (pIcon != NULL && myData.pCurrentIcon != pIcon) // on anime la nouvelle icone. { int x = pIcon->fXAtRest + pIcon->fWidth/2 + (- pDock->fFlatDockWidth + pDock->iMaxDockWidth)/2; int y = pIcon->fDrawY + pIcon->fHeight/2 * pIcon->fScale; if (1||myData.pCurrentDock != pDock) { cairo_dock_emit_motion_signal (pDock, x, y); } else { myData.iPrevMouseX = myData.iMouseX; myData.iPrevMouseY = myData.iMouseY; myData.iMotionCount = 10; } myData.iMouseX = x; myData.iMouseY = y; cairo_dock_request_icon_animation (pIcon, pDock, myConfig.cIconAnimation, 1e6); // interrompt l'animation de "mouse over". cairo_dock_launch_animation (CAIRO_CONTAINER (pDock)); //if (myAccessibility.bShowSubDockOnClick) // cairo_dock_show_subdock (pIcon, pDock, FALSE); } myData.pCurrentDock = pDock; myData.pCurrentIcon = pIcon; if (myData.pCurrentDock == NULL) gtk_window_present (GTK_WINDOW (g_pMainDock->pWidget)); }
void cd_do_change_current_icon (Icon *pIcon, CairoDock *pDock) { //\_________________ on gere le cachage et le montrage du dock precedent et actuel. if (myData.pCurrentDock != NULL && pDock != myData.pCurrentDock) // on remet au repos le dock precedemment anime. { cd_debug ("leave this dock"); cairo_dock_emit_leave_signal (CAIRO_CONTAINER (myData.pCurrentDock)); cd_do_remove_icons_number (myData.pCurrentDock); gldi_object_remove_notification (myData.pCurrentDock, NOTIFICATION_RENDER, (GldiNotificationFunc) cd_do_render, NULL); gldi_object_remove_notification (myData.pCurrentDock, NOTIFICATION_UPDATE, (GldiNotificationFunc) cd_do_update_container, NULL); gldi_object_remove_notification (myData.pCurrentDock, NOTIFICATION_CLICK_ICON, (GldiNotificationFunc) cd_do_on_click, NULL); gldi_object_remove_notification (myData.pCurrentDock, NOTIFICATION_MIDDLE_CLICK_ICON, (GldiNotificationFunc) cd_do_on_click, NULL); } if (pDock != NULL && pDock != myData.pCurrentDock) // on montre le nouveau dock { cd_debug (" dock %p <- %p", myData.pCurrentDock, pDock); if (pDock->iRefCount > 0) { CairoDock *pParentDock = NULL; Icon *pPointingIcon = cairo_dock_search_icon_pointing_on_dock (pDock, &pParentDock); if (pPointingIcon != NULL) { cairo_dock_show_subdock (pPointingIcon, pParentDock); // utile pour le montrage des sous-docks au clic. } } else { /// utile de faire ca si on entre dedans ?... cd_debug ("enter this dock"); if (pDock->bAutoHide) cairo_dock_start_showing (pDock); if (pDock->iVisibility == CAIRO_DOCK_VISI_KEEP_BELOW) cairo_dock_pop_up (pDock); } cairo_dock_emit_enter_signal (CAIRO_CONTAINER (pDock)); cd_do_numberize_icons (pDock); gldi_object_register_notification (pDock, NOTIFICATION_UPDATE, (GldiNotificationFunc) cd_do_update_container, GLDI_RUN_AFTER, NULL); gldi_object_register_notification (pDock, NOTIFICATION_RENDER, (GldiNotificationFunc) cd_do_render, GLDI_RUN_AFTER, NULL); gldi_object_register_notification (pDock, NOTIFICATION_CLICK_ICON, (GldiNotificationFunc) cd_do_on_click, GLDI_RUN_AFTER, NULL); // we don't disable the clicks, rather we will close the session. gldi_object_register_notification (pDock, NOTIFICATION_MIDDLE_CLICK_ICON, (GldiNotificationFunc) cd_do_on_click, GLDI_RUN_AFTER, NULL); } if (pDock != NULL) { gtk_window_present (GTK_WINDOW (pDock->container.pWidget)); } //\_________________ on gere l'allumage et l'eteignage de l'icone precedente et actuelle. if (myData.pCurrentIcon != NULL && pIcon != myData.pCurrentIcon) // on remet au repos l'icone precedemment anime. { myData.bIgnoreIconState = TRUE; gldi_icon_stop_animation (myData.pCurrentIcon); myData.bIgnoreIconState = FALSE; cairo_dock_redraw_icon (myData.pCurrentIcon); /// utile ?... } if (pIcon != NULL && myData.pCurrentIcon != pIcon) // on anime la nouvelle icone. { int x = pIcon->fXAtRest + pIcon->fWidth/2 + (- pDock->fFlatDockWidth + pDock->iMaxDockWidth)/2; int y = pIcon->fDrawY + pIcon->fHeight/2 * pIcon->fScale; if (1||myData.pCurrentDock != pDock) { cairo_dock_emit_motion_signal (pDock, pDock->container.bIsHorizontal ? x : y, pDock->container.bIsHorizontal ? y : x); } else { myData.iPrevMouseX = myData.iMouseX; myData.iPrevMouseY = myData.iMouseY; myData.iMotionCount = 10; } myData.iMouseX = x; myData.iMouseY = y; gldi_icon_request_animation (pIcon, myConfig.cIconAnimation, 1e6); // interrompt l'animation de "mouse over". cairo_dock_launch_animation (CAIRO_CONTAINER (pDock)); } myData.pCurrentDock = pDock; myData.pCurrentIcon = pIcon; cd_debug ("myData.pCurrentDock <- %p", myData.pCurrentDock); }