~ubuntu-branches/ubuntu/precise/cairo-dock-plug-ins/precise

« back to all changes in this revision

Viewing changes to Scooby-Do/src/applet-session.c

  • Committer: Bazaar Package Importer
  • Author(s): Matthieu Baerts (matttbe), Matthieu Baerts (matttbe), Didier Roche
  • Date: 2010-09-18 14:20:27 UTC
  • mfrom: (1.1.7 upstream)
  • Revision ID: james.westby@ubuntu.com-20100918142027-b0zsay70mqxv63l0
Tags: 2.2.0~2-0ubuntu1
[ Matthieu Baerts (matttbe) ]
* New Upstream Version (LP: #638529)
* Fixed a few bugs on LP:
 - Fixed a crash in rainbow view when the cone is completely opened
 - Fixed a crash in rainbow view if the subdock is empty
 - Installed in lib directory by default even in 64bits arch
 - Status-Notifier: fixed few bugs
 - Clock applet:
   - Notify of missed tasks (moved some functions to a new file)
   - Fixed a little memory leak
 - Removed some 'g_print' (LP: #500677: xsession-errors log)
* Updated translations
* debian/control
 - Updated the version of cairo-dock-dev and cairo-dock-core

[ Didier Roche ]
* debian/control: depends on latest libindicator-dev (LP: #637692)

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
 
30
30
void cd_do_open_session (void)
31
31
{
32
 
        // on termine l'animation de fin de la precedente session.
 
32
        if (cd_do_session_is_running ())  // session already running
 
33
                return;
 
34
        
 
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.
35
38
        
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 ())
 
41
        {
 
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);
 
50
        }
 
51
        
 
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);
42
55
        
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)
48
60
        {
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);
55
67
                }
56
68
        }
57
 
        else if (myData.bNavigationMode && myData.pArrowSurface == NULL)
58
 
        {
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);
64
 
                if (g_bUseOpenGL)
65
 
                {
66
 
                        myData.iArrowTexture = cairo_dock_create_texture_from_surface (myData.pArrowSurface);
67
 
                }
68
 
        }
 
69
        
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));
73
72
        
74
73
        // le main dock prend le focus.
75
74
        myData.iPreviouslyActiveWindow = cairo_dock_get_active_xwindow ();
81
80
        
82
81
        // On lance l'animation d'attente.
83
82
        cairo_dock_launch_animation (CAIRO_CONTAINER (g_pMainDock));
 
83
        
 
84
        myData.iSessionState = 2;
84
85
}
85
86
 
86
87
void cd_do_close_session (void)
87
88
{
88
 
        // on ne veut plus de texte.
 
89
        if (! cd_do_session_is_running ())  // session not running
 
90
                return;
 
91
        
 
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);
 
95
        
89
96
        g_string_free (myData.sCurrentText, TRUE);
90
97
        myData.sCurrentText = NULL;
91
98
        myData.iNbValidCaracters = 0;
92
99
        
93
 
        // on remet a zero la session.
94
 
        if (myData.pCurrentIcon != NULL)
95
 
        {
96
 
                myData.bIgnoreIconState = TRUE;
97
 
                cairo_dock_stop_icon_animation (myData.pCurrentIcon);
98
 
                myData.bIgnoreIconState = FALSE;
99
 
                myData.pCurrentIcon = NULL;
100
 
        }
101
 
        
102
100
        // on cache les resultats
103
101
        cd_do_hide_listing ();
104
102
        
106
104
        myData.cSearchText = NULL;
107
105
        myData.iCurrentFilter = 0;
108
106
        
109
 
        if (myData.pCurrentDock != NULL)
110
 
        {
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;
114
 
        }
115
 
        if (myData.pCurrentDock != g_pMainDock)
116
 
        {
117
 
                cairo_dock_emit_leave_signal (g_pMainDock);
118
 
        }
 
107
        cairo_dock_emit_leave_signal (CAIRO_CONTAINER (g_pMainDock));
119
108
        
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);
 
123
        
 
124
        myData.iSessionState = 1;
134
125
}
135
126
 
136
127
void cd_do_exit_session (void)
137
128
{
 
129
        if (cd_do_session_is_off ())  // session already off
 
130
                return;
 
131
        
 
132
        
 
133
        cd_do_close_session ();
 
134
        
 
135
        myData.iCloseTime = 0;
 
136
        
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);
143
 
        
144
 
        // arreter les backends...
145
 
        
146
 
        
147
 
        myData.iCloseTime = 0;
 
139
        
 
140
        /// arreter les backends...
 
141
        
 
142
        
148
143
        if (myData.pCharList != NULL)
149
144
        {
150
145
                cd_do_free_char_list (myData.pCharList);
179
174
                myData.iPreviousMatchingOffset = 0;
180
175
                myData.iCurrentMatchingOffset = 0;
181
176
        }
 
177
        
 
178
        myData.iSessionState = 0;
182
179
}
183
180
 
184
181
 
214
211
        CDChar *pChar;
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);
217
 
        int i, iOffsetX=0;
 
214
        guint i;
 
215
        int iOffsetX=0;
218
216
        for (i = myData.iNbValidCaracters-0; i < myData.sCurrentText->len; i++)
219
217
        {
220
218
                //g_print (" on charge la lettre '%c' (%d) tex:%d\n", myData.sCurrentText->str[i], i, bLoadTexture);
297
295
        // on efface les lettres precedentes jusqu'a la derniere position validee.
298
296
        CDChar *pChar;
299
297
        GList *c = g_list_last (myData.pCharList), *c_prev;
300
 
        int i;
 
298
        guint i;
301
299
        for (i = myData.iNbValidCaracters; i < myData.sCurrentText->len && c != NULL; i ++)
302
300
        {
303
301
                //g_print ("on efface '%c'\n", myData.sCurrentText->str[i]);