30
30
void cd_do_open_session (void)
32
// on termine l'animation de fin de la precedente session.
32
if (cd_do_session_is_running ()) // session already running
35
// on termine la precedente session.
33
36
cd_do_exit_session ();
34
37
cd_do_stop_all_backends (); // on le fait maintenant pour ne pas bloquer au exit.
36
// on s'abonne aux notifications dont on aura besoin pour la session.
37
cairo_dock_register_notification_on_container (CAIRO_CONTAINER (g_pMainDock), CAIRO_DOCK_UPDATE_DOCK, (CairoDockNotificationFunc) cd_do_update_container, CAIRO_DOCK_RUN_AFTER, NULL);
38
cairo_dock_register_notification_on_container (CAIRO_CONTAINER (g_pMainDock), CAIRO_DOCK_RENDER_DOCK, (CairoDockNotificationFunc) cd_do_render, CAIRO_DOCK_RUN_AFTER, NULL);
39
cairo_dock_register_notification (CAIRO_DOCK_STOP_ICON, (CairoDockNotificationFunc) cd_do_check_icon_stopped, CAIRO_DOCK_RUN_AFTER, NULL);
39
// register to draw on dock.
40
if (cd_do_session_is_off ())
42
cairo_dock_register_notification_on_container (CAIRO_CONTAINER (g_pMainDock),
43
CAIRO_DOCK_UPDATE_DOCK,
44
(CairoDockNotificationFunc) cd_do_update_container,
45
CAIRO_DOCK_RUN_AFTER, NULL);
46
cairo_dock_register_notification_on_container (CAIRO_CONTAINER (g_pMainDock),
47
CAIRO_DOCK_RENDER_DOCK,
48
(CairoDockNotificationFunc) cd_do_render,
49
CAIRO_DOCK_RUN_AFTER, NULL);
52
// wait for keyboard input.
53
cairo_dock_register_notification (CAIRO_DOCK_KEY_PRESSED, (CairoDockNotificationFunc) cd_do_key_pressed, CAIRO_DOCK_RUN_AFTER, NULL);
40
54
cairo_dock_register_notification (CAIRO_DOCK_WINDOW_ACTIVATED, (CairoDockNotificationFunc) cd_do_check_active_dock, CAIRO_DOCK_RUN_AFTER, NULL);
41
//cairo_dock_register_notification (CAIRO_DOCK_ENTER_DOCK, (CairoDockNotificationFunc) cd_do_enter_container, CAIRO_DOCK_RUN_FIRST, NULL);
43
// on se met en attente de texte.
44
56
myData.sCurrentText = g_string_sized_new (20);
45
57
myConfig.labelDescription.iSize = myConfig.fFontSizeRatio * g_pMainDock->iMaxDockHeight;
46
58
myData.iPromptAnimationCount = 0;
47
if (! myData.bNavigationMode && myData.pPromptSurface == NULL)
59
if (myData.pPromptSurface == NULL)
49
61
cairo_t *pCairoContext = cairo_dock_create_context_from_window (CAIRO_CONTAINER (g_pMainDock));
50
62
myData.pPromptSurface = cairo_dock_create_surface_from_text (D_("Enter your search"), &myConfig.labelDescription, &myData.iPromptWidth, &myData.iPromptHeight);
54
66
myData.iPromptTexture = cairo_dock_create_texture_from_surface (myData.pPromptSurface);
57
else if (myData.bNavigationMode && myData.pArrowSurface == NULL)
59
cairo_t *pCairoContext = cairo_dock_create_context_from_window (CAIRO_CONTAINER (g_pMainDock));
60
myData.pArrowSurface = cairo_dock_create_surface_for_icon (MY_APPLET_SHARE_DATA_DIR"/arrows.svg", g_pMainDock->iMaxDockHeight, g_pMainDock->iMaxDockHeight);
61
myData.iArrowWidth = g_pMainDock->iMaxDockHeight;
62
myData.iArrowHeight = g_pMainDock->iMaxDockHeight;
63
cairo_destroy (pCairoContext);
66
myData.iArrowTexture = cairo_dock_create_texture_from_surface (myData.pArrowSurface);
69
70
// on montre le main dock.
70
myData.bIgnoreIconState = TRUE;
71
cairo_dock_emit_enter_signal (g_pMainDock);
72
myData.bIgnoreIconState = FALSE;
71
cairo_dock_emit_enter_signal (CAIRO_CONTAINER (g_pMainDock));
74
73
// le main dock prend le focus.
75
74
myData.iPreviouslyActiveWindow = cairo_dock_get_active_xwindow ();
82
81
// On lance l'animation d'attente.
83
82
cairo_dock_launch_animation (CAIRO_CONTAINER (g_pMainDock));
84
myData.iSessionState = 2;
86
87
void cd_do_close_session (void)
88
// on ne veut plus de texte.
89
if (! cd_do_session_is_running ()) // session not running
92
// no more keyboard input.
93
cairo_dock_remove_notification_func (CAIRO_DOCK_KEY_PRESSED, (CairoDockNotificationFunc) cd_do_key_pressed, NULL);
94
cairo_dock_remove_notification_func (CAIRO_DOCK_WINDOW_ACTIVATED, (CairoDockNotificationFunc) cd_do_check_active_dock, NULL);
89
96
g_string_free (myData.sCurrentText, TRUE);
90
97
myData.sCurrentText = NULL;
91
98
myData.iNbValidCaracters = 0;
93
// on remet a zero la session.
94
if (myData.pCurrentIcon != NULL)
96
myData.bIgnoreIconState = TRUE;
97
cairo_dock_stop_icon_animation (myData.pCurrentIcon);
98
myData.bIgnoreIconState = FALSE;
99
myData.pCurrentIcon = NULL;
102
100
// on cache les resultats
103
101
cd_do_hide_listing ();
106
104
myData.cSearchText = NULL;
107
105
myData.iCurrentFilter = 0;
109
if (myData.pCurrentDock != NULL)
111
//cairo_dock_leave_from_main_dock (myData.pCurrentDock); /// voir avec un emit_leave_signal ...
112
cairo_dock_emit_leave_signal (myData.pCurrentDock);
113
myData.pCurrentDock = NULL;
115
if (myData.pCurrentDock != g_pMainDock)
117
cairo_dock_emit_leave_signal (g_pMainDock);
107
cairo_dock_emit_leave_signal (CAIRO_CONTAINER (g_pMainDock));
120
109
// on redonne le focus a l'ancienne fenetre.
121
110
if (myData.iPreviouslyActiveWindow != 0)
131
120
myData.iCloseTime = myConfig.iCloseDuration;
132
121
cairo_dock_launch_animation (CAIRO_CONTAINER (g_pMainDock));
133
122
cairo_dock_freeze_docks (FALSE);
124
myData.iSessionState = 1;
136
127
void cd_do_exit_session (void)
129
if (cd_do_session_is_off ()) // session already off
133
cd_do_close_session ();
135
myData.iCloseTime = 0;
138
137
cairo_dock_remove_notification_func_on_container (CAIRO_CONTAINER (g_pMainDock), CAIRO_DOCK_RENDER_DOCK, (CairoDockNotificationFunc) cd_do_render, NULL);
139
138
cairo_dock_remove_notification_func_on_container (CAIRO_CONTAINER (g_pMainDock), CAIRO_DOCK_UPDATE_DOCK, (CairoDockNotificationFunc) cd_do_update_container, NULL);
140
cairo_dock_remove_notification_func (CAIRO_DOCK_STOP_ICON, (CairoDockNotificationFunc) cd_do_check_icon_stopped, NULL);
141
cairo_dock_remove_notification_func (CAIRO_DOCK_WINDOW_ACTIVATED, (CairoDockNotificationFunc) cd_do_check_active_dock, NULL);
142
//cairo_dock_remove_notification_func (CAIRO_DOCK_ENTER_DOCK, (CairoDockNotificationFunc) cd_do_enter_container, NULL);
144
// arreter les backends...
147
myData.iCloseTime = 0;
140
/// arreter les backends...
148
143
if (myData.pCharList != NULL)
150
145
cd_do_free_char_list (myData.pCharList);
215
212
cairo_t *pCairoContext = cairo_dock_create_context_from_window (CAIRO_CONTAINER (g_pMainDock));
216
213
int iDeltaT = cairo_dock_get_animation_delta_t (g_pMainDock);
218
216
for (i = myData.iNbValidCaracters-0; i < myData.sCurrentText->len; i++)
220
218
//g_print (" on charge la lettre '%c' (%d) tex:%d\n", myData.sCurrentText->str[i], i, bLoadTexture);