Annotation of /trunk/kdebase-workspace/patches/kdebase-workspace-4.9.4-kdm-plymouth.patch
Parent Directory | Revision Log
Revision 1994 -
(hide annotations)
(download)
Wed Dec 19 09:48:16 2012 UTC (11 years, 9 months ago) by niro
File size: 5610 byte(s)
Wed Dec 19 09:48:16 2012 UTC (11 years, 9 months ago) by niro
File size: 5610 byte(s)
-added serveral patches
1 | niro | 1994 | diff -up kdebase-workspace-4.4.92/kdm/backend/dm.c.kdm_plymouth kdebase-workspace-4.4.92/kdm/backend/dm.c |
2 | --- kdebase-workspace-4.4.92/kdm/backend/dm.c.kdm_plymouth 2010-07-06 01:54:30.000000000 -0500 | ||
3 | +++ kdebase-workspace-4.4.92/kdm/backend/dm.c 2010-07-07 13:55:48.425171749 -0500 | ||
4 | @@ -1329,6 +1329,81 @@ getBusyVTs(void) | ||
5 | return activeVTs; | ||
6 | } | ||
7 | |||
8 | +static int | ||
9 | +get_active_vt (void) | ||
10 | +{ | ||
11 | + int console_fd; | ||
12 | + struct vt_stat console_state = { 0 }; | ||
13 | + console_fd = open ("/dev/tty0", O_RDONLY | O_NOCTTY); | ||
14 | + if (console_fd < 0) { | ||
15 | + goto out; | ||
16 | + } | ||
17 | + if (ioctl (console_fd, VT_GETSTATE, &console_state) < 0) { | ||
18 | + goto out; | ||
19 | + } | ||
20 | +out: | ||
21 | + if (console_fd >= 0) { | ||
22 | + close (console_fd); | ||
23 | + } | ||
24 | + return console_state.v_active; | ||
25 | +} | ||
26 | + | ||
27 | +static int | ||
28 | +plymouth_is_running (void) | ||
29 | +{ | ||
30 | + int status; | ||
31 | + status = system ("/bin/plymouth --ping"); | ||
32 | + | ||
33 | + return WIFEXITED (status) && WEXITSTATUS (status) == 0; | ||
34 | +} | ||
35 | + | ||
36 | +static int | ||
37 | +plymouth_has_active_vt (void) | ||
38 | +{ | ||
39 | + int status; | ||
40 | + status = system ("/bin/plymouth --has-active-vt"); | ||
41 | + | ||
42 | + return WIFEXITED (status) && WEXITSTATUS (status) == 0; | ||
43 | +} | ||
44 | + | ||
45 | +static int | ||
46 | +plymouth_prepare_for_transition (void) | ||
47 | +{ | ||
48 | + int status; | ||
49 | + status = system ("/bin/plymouth deactivate"); | ||
50 | + | ||
51 | + return WIFEXITED (status) && WEXITSTATUS (status) == 0; | ||
52 | +} | ||
53 | + | ||
54 | +int | ||
55 | +plymouth_quit_with_transition (void) | ||
56 | +{ | ||
57 | + int status; | ||
58 | + status = system ("/bin/plymouth quit --retain-splash"); | ||
59 | + | ||
60 | + return WIFEXITED (status) && WEXITSTATUS (status) == 0; | ||
61 | +} | ||
62 | + | ||
63 | +static int | ||
64 | +plymouth_quit_without_transition (void) | ||
65 | +{ | ||
66 | + int status; | ||
67 | + status = system ("/bin/plymouth quit"); | ||
68 | + | ||
69 | + return WIFEXITED (status) && WEXITSTATUS (status) == 0; | ||
70 | +} | ||
71 | + | ||
72 | +static int | ||
73 | +triggered_to_force_display_on_active_vt (void) | ||
74 | +{ | ||
75 | + int should_force_display_on_active_vt; | ||
76 | + should_force_display_on_active_vt=open("/var/spool/gdm/force-display-on-active-vt", O_RDONLY); | ||
77 | + if ( should_force_display_on_active_vt >= 0 ) | ||
78 | + close(should_force_display_on_active_vt); | ||
79 | + unlink("/var/spool/gdm/force-display-on-active-vt"); | ||
80 | + return should_force_display_on_active_vt; | ||
81 | +} | ||
82 | + | ||
83 | static void | ||
84 | allocateVT(struct display *d) | ||
85 | { | ||
86 | @@ -1338,6 +1413,43 @@ allocateVT(struct display *d) | ||
87 | if ((d->displayType & d_location) == dLocal && | ||
88 | d->status == notRunning && !d->serverVT && d->reqSrvVT >= 0) | ||
89 | { | ||
90 | + /* check for plymouth using newer methods */ | ||
91 | + d->plymouth_is_running = plymouth_is_running (); | ||
92 | + if (d->plymouth_is_running) { | ||
93 | + /* call plymouth deactivate */ | ||
94 | + plymouth_prepare_for_transition (); | ||
95 | + if (plymouth_has_active_vt ()) { | ||
96 | + /* plymouth was displaying a splash screen and has | ||
97 | + * terminated leaving it on screen | ||
98 | + */ | ||
99 | + int vt; | ||
100 | + vt = get_active_vt (); | ||
101 | + if (vt > 0) { | ||
102 | + /* start the X server on the active vt */ | ||
103 | + d->serverVT = vt; | ||
104 | + return; | ||
105 | + } | ||
106 | + } | ||
107 | + else { | ||
108 | + /* plymouth might have been running but did not display | ||
109 | + * a splash screen. | ||
110 | + */ | ||
111 | + | ||
112 | + /* call plymouth quit and start the X server as usual */ | ||
113 | + d->plymouth_is_running = !plymouth_quit_without_transition (); | ||
114 | + } | ||
115 | + | ||
116 | + /* fallback to old/deprecated method */ | ||
117 | + } else if ( triggered_to_force_display_on_active_vt() >= 0 ) { | ||
118 | + int vt; | ||
119 | + vt = get_active_vt(); | ||
120 | + if (vt > 0) { | ||
121 | + d->serverVT = vt; | ||
122 | + return; | ||
123 | + } | ||
124 | + } | ||
125 | + | ||
126 | + | ||
127 | if (d->reqSrvVT && d->reqSrvVT < 16) { | ||
128 | d->serverVT = d->reqSrvVT; | ||
129 | } else { | ||
130 | diff -up kdebase-workspace-4.4.92/kdm/backend/dm.h.kdm_plymouth kdebase-workspace-4.4.92/kdm/backend/dm.h | ||
131 | --- kdebase-workspace-4.4.92/kdm/backend/dm.h.kdm_plymouth 2010-07-06 01:54:30.000000000 -0500 | ||
132 | +++ kdebase-workspace-4.4.92/kdm/backend/dm.h 2010-07-07 13:48:11.874921158 -0500 | ||
133 | @@ -292,6 +292,8 @@ struct display { | ||
134 | int authNum; /* number of authorizations */ | ||
135 | char *authFile; /* file to store authorization in */ | ||
136 | char *greeterAuthFile; /* file to store authorization for greeter in */ | ||
137 | + | ||
138 | + int plymouth_is_running; /* Plymouth's status */ | ||
139 | }; | ||
140 | |||
141 | #define d_location 1 | ||
142 | @@ -404,6 +406,8 @@ int anyDisplaysLeft(void); | ||
143 | void forEachDisplay(void (*f)(struct display *)); | ||
144 | #ifdef HAVE_VTS | ||
145 | void forEachDisplayRev(void (*f)(struct display *)); | ||
146 | +/* function for plymouth */ | ||
147 | +int plymouth_quit_with_transition (void); | ||
148 | #endif | ||
149 | void removeDisplay(struct display *old); | ||
150 | struct display | ||
151 | diff -up kdebase-workspace-4.4.92/kdm/backend/server.c.kdm_plymouth kdebase-workspace-4.4.92/kdm/backend/server.c | ||
152 | --- kdebase-workspace-4.4.92/kdm/backend/server.c.kdm_plymouth 2010-07-06 01:54:30.000000000 -0500 | ||
153 | +++ kdebase-workspace-4.4.92/kdm/backend/server.c 2010-07-07 13:56:46.960921366 -0500 | ||
154 | @@ -137,6 +137,11 @@ startServerSuccess() | ||
155 | struct display *d = startingServer; | ||
156 | d->serverStatus = ignore; | ||
157 | serverTimeout = TO_INF; | ||
158 | + if (d->plymouth_is_running) { | ||
159 | + debug( "Quitting Plymouth with transition\n" ); | ||
160 | + d->plymouth_is_running = !plymouth_quit_with_transition (); | ||
161 | + debug ("Is Plymouth still running? %s\n", d->plymouth_is_running ? "yes" : "no"); | ||
162 | + } | ||
163 | debug("X server ready, starting session\n"); | ||
164 | startDisplayP2(d); | ||
165 | } |