source: titan/titan/spinner.h @ 31136

Last change on this file since 31136 was 24495, checked in by nit, 10 years ago

[titan] fix hanging text

File size: 1.8 KB
Line 
1#ifndef SPINNER_H
2#define SPINNER_H
3
4void checkspinner()
5{
6        time_t sec = time(NULL);
7        int rcret = 0;
8
9        while(status.sec != 0 && sec - status.sec > status.spinnertime && sec - status.sec < 86400)
10        {
11                screenspinner();
12                sec = time(NULL);
13
14                if(status.sec != 0 && status.hangtime > 0 && sec - status.sec > status.spinnertime + status.hangtime && sec - status.sec < 86400)
15                {
16                        status.sec = sec - status.spinnertime - 1;
17                        pthread_kill(status.mainthread, SIGUSR2);
18                        rcret = textbox(_("Message"), _("Detect hanging System !!!\n\nKILL = Red\nBOOT = Green"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), _("KILL"), getrcconfigint("rcred", NULL), _("BOOT"), getrcconfigint("rcgreen", NULL), 600, 400, 0, 0);
19                        if(rcret == 3)
20                                system(KILLPROG);
21                        if(rcret == 4)
22                                system(REBOOT);
23                }
24        }
25}
26
27void screenspinner()
28{
29        struct skin* framebuffer = getscreen("framebuffer");
30        struct skin* spinner = getscreen("spinner");
31        struct skin* node = NULL;
32        int count = 0, treffer = 0;
33        char* bg = NULL;
34
35        if(spinner == NULL)
36        {
37                usleep(status.spinnerspeed * 10000);
38                return;
39        }
40
41        node = spinner->child;
42        status.spinner++;
43
44findspinner:
45        while(node != NULL)
46        {
47                if(ostrncmp("spinner", node->name, 7) == 0)
48                        count++;
49                if(count == status.spinner)
50                {
51                        node->hidden = NO;
52                        treffer = 1;
53                }
54                else
55                        node->hidden = YES;
56
57                node = node->next;
58        }
59        if(treffer == 0 && status.spinner != 1)
60        {
61                count = 0;
62                status.spinner = 1;
63                node = spinner->child;
64                goto findspinner;
65        }
66
67        //save bg
68        m_lock(&status.drawingmutex, 0);
69        setnodeattr(spinner, framebuffer, 0);
70        bg = savescreen(spinner);
71
72        drawscreen(spinner, 0, 2);
73        usleep(status.spinnerspeed * 10000);
74        clearscreennolock(spinner);
75
76        //restore bg
77        restorescreen(bg, spinner);
78        blitfb(0);
79        m_unlock(&status.drawingmutex, 0);
80        usleep(1000);
81}
82
83#endif
Note: See TracBrowser for help on using the repository browser.