void cd_do_close_session (void) { if (! cd_do_session_is_running ()) // session not running return; // no more keyboard input. gldi_object_remove_notification (&myContainerObjectMgr, NOTIFICATION_KEY_PRESSED, (GldiNotificationFunc) cd_do_key_pressed, NULL); gldi_object_remove_notification (&myIconObjectMgr, NOTIFICATION_DESTROY, (GldiNotificationFunc) cd_do_check_icon_destroyed, NULL); gldi_object_remove_notification (&myWindowObjectMgr, NOTIFICATION_WINDOW_ACTIVATED, (GldiNotificationFunc) cd_do_check_active_dock, NULL); g_string_free (myData.sCurrentText, TRUE); myData.sCurrentText = NULL; // reset session state. if (myData.pCurrentIcon != NULL) { myData.bIgnoreIconState = TRUE; gldi_icon_stop_animation (myData.pCurrentIcon); myData.bIgnoreIconState = FALSE; myData.pCurrentIcon = NULL; } myData.pPreviouslyActiveWindow = NULL; if (myData.pCurrentDock != NULL) { cairo_dock_emit_leave_signal (CAIRO_CONTAINER (myData.pCurrentDock)); cd_do_remove_icons_number (myData.pCurrentDock); // launch closing animation. myData.iCloseTime = myConfig.iCloseDuration; cairo_dock_launch_animation (CAIRO_CONTAINER (myData.pCurrentDock)); } cairo_dock_freeze_docks (FALSE); myData.iSessionState = CD_SESSION_CLOSING; }
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); }