Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2
python-kdebase4
kdm_plymouth.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File kdm_plymouth.patch of Package python-kdebase4
--- kdm/backend/dm.c 2011-09-06 16:09:17.000000000 +0200 +++ kdm/backend/dm.c 2011-09-07 16:23:59.017135854 +0200 @@ -1347,6 +1347,81 @@ return activeVTs; } +static int +get_active_vt (void) +{ + int console_fd; + struct vt_stat console_state = { 0 }; + console_fd = open ("/dev/tty0", O_RDONLY | O_NOCTTY); + if (console_fd < 0) { + goto out; + } + if (ioctl (console_fd, VT_GETSTATE, &console_state) < 0) { + goto out; + } +out: + if (console_fd >= 0) { + close (console_fd); + } + return console_state.v_active; +} + +static int +plymouth_is_running (void) +{ + int status; + status = system ("/bin/plymouth --ping"); + + return WIFEXITED (status) && WEXITSTATUS (status) == 0; +} + +static int +plymouth_has_active_vt (void) +{ + int status; + status = system ("/bin/plymouth --has-active-vt"); + + return WIFEXITED (status) && WEXITSTATUS (status) == 0; +} + +static int +plymouth_prepare_for_transition (void) +{ + int status; + status = system ("/bin/plymouth deactivate"); + + return WIFEXITED (status) && WEXITSTATUS (status) == 0; +} + +int +plymouth_quit_with_transition (void) +{ + int status; + status = system ("/bin/plymouth quit --retain-splash"); + + return WIFEXITED (status) && WEXITSTATUS (status) == 0; +} + +static int +plymouth_quit_without_transition (void) +{ + int status; + status = system ("/bin/plymouth quit"); + + return WIFEXITED (status) && WEXITSTATUS (status) == 0; +} + +static int +triggered_to_force_display_on_active_vt (void) +{ + int should_force_display_on_active_vt; + should_force_display_on_active_vt=open("/var/spool/gdm/force-display-on-active-vt", O_RDONLY); + if ( should_force_display_on_active_vt >= 0 ) + close(should_force_display_on_active_vt); + unlink("/var/spool/gdm/force-display-on-active-vt"); + return should_force_display_on_active_vt; +} + static void allocateVT(struct display *d) { @@ -1356,6 +1431,43 @@ if ((d->displayType & d_location) == dLocal && d->status == notRunning && !d->serverVT && d->reqSrvVT >= 0) { + /* check for plymouth using newer methods */ + d->plymouth_is_running = plymouth_is_running (); + if (d->plymouth_is_running) { + /* call plymouth deactivate */ + plymouth_prepare_for_transition (); + if (plymouth_has_active_vt ()) { + /* plymouth was displaying a splash screen and has + * terminated leaving it on screen + */ + int vt; + vt = get_active_vt (); + if (vt > 0) { + /* start the X server on the active vt */ + d->serverVT = vt; + return; + } + } + else { + /* plymouth might have been running but did not display + * a splash screen. + */ + + /* call plymouth quit and start the X server as usual */ + d->plymouth_is_running = !plymouth_quit_without_transition (); + } + + /* fallback to old/deprecated method */ + } else if ( triggered_to_force_display_on_active_vt() >= 0 ) { + int vt; + vt = get_active_vt(); + if (vt > 0) { + d->serverVT = vt; + return; + } + } + + if (d->reqSrvVT && d->reqSrvVT < 16) { d->serverVT = d->reqSrvVT; } else { --- kdm/backend/dm.h 2011-09-06 16:09:17.000000000 +0200 +++ kdm/backend/dm.h 2011-09-07 16:23:59.018135847 +0200 @@ -304,6 +304,8 @@ int authNum; /* number of authorizations */ char *authFile; /* file to store authorization in */ char *greeterAuthFile; /* file to store authorization for greeter in */ + + int plymouth_is_running; /* Plymouth's status */ }; #define d_location 1 @@ -428,6 +430,8 @@ void forEachDisplay(void (*f)(struct display *)); #ifdef HAVE_VTS void forEachDisplayRev(void (*f)(struct display *)); +/* function for plymouth */ +int plymouth_quit_with_transition (void); #endif void removeDisplay(struct display *old); struct display --- kdm/backend/server.c 2011-09-06 16:09:17.000000000 +0200 +++ kdm/backend/server.c 2011-09-07 16:23:59.018135847 +0200 @@ -137,6 +137,11 @@ struct display *d = startingServer; d->serverStatus = ignore; serverTimeout = TO_INF; + if (d->plymouth_is_running) { + debug( "Quitting Plymouth with transition\n" ); + d->plymouth_is_running = !plymouth_quit_with_transition (); + debug ("Is Plymouth still running? %s\n", d->plymouth_is_running ? "yes" : "no"); + } debug("X server ready, starting session\n"); startDisplayP2(d); }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor