diff options
Diffstat (limited to 'redhat/tdebase/kdebase-3.5.13-engage_lock_in_near_real_time_continued.patch')
-rw-r--r-- | redhat/tdebase/kdebase-3.5.13-engage_lock_in_near_real_time_continued.patch | 356 |
1 files changed, 0 insertions, 356 deletions
diff --git a/redhat/tdebase/kdebase-3.5.13-engage_lock_in_near_real_time_continued.patch b/redhat/tdebase/kdebase-3.5.13-engage_lock_in_near_real_time_continued.patch deleted file mode 100644 index fd39f061d..000000000 --- a/redhat/tdebase/kdebase-3.5.13-engage_lock_in_near_real_time_continued.patch +++ /dev/null @@ -1,356 +0,0 @@ -commit 4952641328f28a541e3fdf2200df4e1e4b11d5dd -Author: Timothy Pearson <[email protected]> -Date: 1328994151 -0600 - - Commit the rest of 8d521d0b, not merged due to GIT glitch - -diff --git a/kdesktop/lock/main.cc b/kdesktop/lock/main.cc -index 132ff30..4edd1b3 100644 ---- a/kdesktop/lock/main.cc -+++ b/kdesktop/lock/main.cc -@@ -73,140 +73,241 @@ static KCmdLineOptions options[] = - { "dontlock", I18N_NOOP("Only start screensaver"), 0 }, - { "securedialog", I18N_NOOP("Launch the secure dialog"), 0 }, - { "blank", I18N_NOOP("Only use the blank screensaver"), 0 }, -+ { "internal <pid>", I18N_NOOP("TDE internal command for background process loading"), 0 }, - KCmdLineLastOption - }; - -+static void sigusr1_handler(int) -+{ -+ signalled_forcelock = TRUE; -+} -+ -+static void sigusr2_handler(int) -+{ -+ signalled_dontlock = TRUE; -+} -+ -+static void sigusr3_handler(int) -+{ -+ signalled_securedialog = TRUE; -+} -+ -+static void sigusr4_handler(int) -+{ -+ signalled_blank = TRUE; -+} -+ -+static void sigusr5_handler(int) -+{ -+ signalled_run = TRUE; -+} -+ - // ----------------------------------------------------------------------------- - - int main( int argc, char **argv ) - { - KLocale::setMainCatalogue("kdesktop"); - -- KCmdLineArgs::init( argc, argv, "kdesktop_lock", I18N_NOOP("KDesktop Locker"), I18N_NOOP("Session Locker for KDesktop"), "2.0" ); -+ KCmdLineArgs::init( argc, argv, "kdesktop_lock", I18N_NOOP("KDesktop Locker"), I18N_NOOP("Session Locker for KDesktop"), "2.1" ); - KCmdLineArgs::addCmdLineOptions( options ); - KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); - -- if (args->isSet( "forcelock" )) -- trinity_desktop_lock_forced = TRUE; -- - putenv(strdup("SESSION_MANAGER=")); - - KApplication::disableAutoDcopRegistration(); // not needed - -- int kdesktop_screen_number = 0; -- int starting_screen = 0; -- -- bool child = false; -- int parent_connection = 0; // socket to the parent saver -- TQValueList<int> child_sockets; -- -- if (KGlobalSettings::isMultiHead()) -- { -- Display *dpy = XOpenDisplay(NULL); -- if (! dpy) { -- fprintf(stderr, -- "%s: FATAL ERROR: couldn't open display '%s'\n", -- argv[0], XDisplayName(NULL)); -- exit(1); -- } -+ while (1 == 1) { -+ signalled_forcelock = FALSE; -+ signalled_dontlock = FALSE; -+ signalled_securedialog = FALSE; -+ signalled_blank = FALSE; -+ signalled_run = FALSE; - -- int number_of_screens = ScreenCount(dpy); -- starting_screen = kdesktop_screen_number = DefaultScreen(dpy); -- int pos; -- TQCString display_name = XDisplayString(dpy); -- XCloseDisplay(dpy); -- kdDebug() << "screen " << number_of_screens << " " << kdesktop_screen_number << " " << display_name << " " << starting_screen << endl; -- dpy = 0; -- -- if ((pos = display_name.findRev('.')) != -1) -- display_name.remove(pos, 10); -- -- TQCString env; -- if (number_of_screens != 1) { -- for (int i = 0; i < number_of_screens; i++) { -- if (i != starting_screen) { -- int fd[2]; -- if (pipe(fd)) { -- perror("pipe"); -- break; -- } -- if (fork() == 0) { -- child = true; -- kdesktop_screen_number = i; -- parent_connection = fd[0]; -- // break here because we are the child process, we don't -- // want to fork() anymore -- break; -- } else { -- child_sockets.append(fd[1]); -+ int kdesktop_screen_number = 0; -+ int starting_screen = 0; -+ -+ bool child = false; -+ int parent_connection = 0; // socket to the parent saver -+ TQValueList<int> child_sockets; -+ -+ if (KGlobalSettings::isMultiHead()) -+ { -+ Display *dpy = XOpenDisplay(NULL); -+ if (! dpy) { -+ fprintf(stderr, -+ "%s: FATAL ERROR: couldn't open display '%s'\n", -+ argv[0], XDisplayName(NULL)); -+ exit(1); -+ } -+ -+ int number_of_screens = ScreenCount(dpy); -+ starting_screen = kdesktop_screen_number = DefaultScreen(dpy); -+ int pos; -+ TQCString display_name = XDisplayString(dpy); -+ XCloseDisplay(dpy); -+ kdDebug() << "screen " << number_of_screens << " " << kdesktop_screen_number << " " << display_name << " " << starting_screen << endl; -+ dpy = 0; -+ -+ if ((pos = display_name.findRev('.')) != -1) -+ display_name.remove(pos, 10); -+ -+ TQCString env; -+ if (number_of_screens != 1) { -+ for (int i = 0; i < number_of_screens; i++) { -+ if (i != starting_screen) { -+ int fd[2]; -+ if (pipe(fd)) { -+ perror("pipe"); -+ break; -+ } -+ if (fork() == 0) { -+ child = true; -+ kdesktop_screen_number = i; -+ parent_connection = fd[0]; -+ // break here because we are the child process, we don't -+ // want to fork() anymore -+ break; -+ } else { -+ child_sockets.append(fd[1]); -+ } - } - } -- } - -- env.sprintf("DISPLAY=%s.%d", display_name.data(), -- kdesktop_screen_number); -- kdDebug() << "env " << env << endl; -+ env.sprintf("DISPLAY=%s.%d", display_name.data(), -+ kdesktop_screen_number); -+ kdDebug() << "env " << env << endl; - -- if (putenv(strdup(env.data()))) { -- fprintf(stderr, -- "%s: WARNING: unable to set DISPLAY environment variable\n", -- argv[0]); -- perror("putenv()"); -+ if (putenv(strdup(env.data()))) { -+ fprintf(stderr, -+ "%s: WARNING: unable to set DISPLAY environment variable\n", -+ argv[0]); -+ perror("putenv()"); -+ } - } - } -- } - -- MyApp app; -- kdDebug() << "app " << kdesktop_screen_number << " " << starting_screen << " " << child << " " << child_sockets.count() << " " << parent_connection << endl; -- app.disableSessionManagement(); -- KGlobal::locale()->insertCatalogue("libdmctl"); -- -- // we need to read from the right rc file - possibly taking screen number in account -- KDesktopSettings::instance("kdesktoprc"); -- -- trinity_desktop_lock_use_system_modal_dialogs = !KDesktopSettings::useUnmanagedLockWindows(); -- trinity_desktop_lock_delay_screensaver_start = KDesktopSettings::delaySaverStart(); -- trinity_desktop_lock_use_sak = KDesktopSettings::useTDESAK(); -- -- LockProcess process(child, args->isSet( "blank" )); -- if (!child) -- process.setChildren(child_sockets); -- else -- process.setParent(parent_connection); -- -- bool rt; -- bool sig = false; -- if( !child && args->isSet( "forcelock" )) -- { -- rt = process.lock(); -- sig = true; -- } -- else if( child || args->isSet( "dontlock" )) { -- rt = process.dontLock(); -- } -- else if( child || args->isSet( "securedialog" )) { -- int retcode = tde_sak_verify_calling_process(); -- if (retcode == 0) { -- rt = process.runSecureDialog(); -+ MyApp app; -+ kdDebug() << "app " << kdesktop_screen_number << " " << starting_screen << " " << child << " " << child_sockets.count() << " " << parent_connection << endl; -+ app.disableSessionManagement(); -+ KGlobal::locale()->insertCatalogue("libdmctl"); -+ -+ // we need to read from the right rc file - possibly taking screen number in account -+ KDesktopSettings::instance("kdesktoprc"); -+ -+ trinity_desktop_lock_use_system_modal_dialogs = !KDesktopSettings::useUnmanagedLockWindows(); -+ trinity_desktop_lock_delay_screensaver_start = KDesktopSettings::delaySaverStart(); -+ trinity_desktop_lock_use_sak = KDesktopSettings::useTDESAK(); -+ -+ if (args->isSet( "internal" )) { -+ while (signalled_run == FALSE) { -+ sigset_t new_mask; -+ struct sigaction act; -+ -+ in_internal_mode = TRUE; -+ -+ // handle SIGUSR1 -+ act.sa_handler= sigusr1_handler; -+ sigemptyset(&(act.sa_mask)); -+ sigaddset(&(act.sa_mask), SIGUSR1); -+ act.sa_flags = 0; -+ sigaction(SIGUSR1, &act, 0L); -+ // handle SIGUSR2 -+ act.sa_handler= sigusr2_handler; -+ sigemptyset(&(act.sa_mask)); -+ sigaddset(&(act.sa_mask), SIGUSR2); -+ act.sa_flags = 0; -+ sigaction(SIGUSR2, &act, 0L); -+ // handle SIGWINCH (an ersatz SIGUSR3) -+ act.sa_handler= sigusr3_handler; -+ sigemptyset(&(act.sa_mask)); -+ sigaddset(&(act.sa_mask), SIGWINCH); -+ act.sa_flags = 0; -+ sigaction(SIGWINCH, &act, 0L); -+ // handle SIGTTIN (an ersatz SIGUSR4) -+ act.sa_handler= sigusr4_handler; -+ sigemptyset(&(act.sa_mask)); -+ sigaddset(&(act.sa_mask), SIGTTIN); -+ act.sa_flags = 0; -+ sigaction(SIGTTIN, &act, 0L); -+ // handle SIGTTOU (an ersatz SIGUSR5) -+ act.sa_handler= sigusr5_handler; -+ sigemptyset(&(act.sa_mask)); -+ sigaddset(&(act.sa_mask), SIGTTOU); -+ act.sa_flags = 0; -+ sigaction(SIGTTOU, &act, 0L); -+ -+ // initialize the signal masks -+ sigfillset(&new_mask); -+ sigdelset(&new_mask,SIGUSR1); -+ sigdelset(&new_mask,SIGUSR2); -+ sigdelset(&new_mask,SIGWINCH); -+ sigdelset(&new_mask,SIGTTIN); -+ sigdelset(&new_mask,SIGTTOU); -+ -+ // wait for SIGUSR1, SIGUSR2, SIGWINCH, SIGTTIN, or SIGTTOU -+ sigsuspend(&new_mask); -+ } -+ } -+ -+ if (args->isSet( "forcelock" ) || (signalled_forcelock == TRUE)) -+ trinity_desktop_lock_forced = TRUE; -+ -+ LockProcess process(child, (args->isSet( "blank" ) || (signalled_blank == TRUE))); -+ if (!child) -+ process.setChildren(child_sockets); -+ else -+ process.setParent(parent_connection); -+ -+ bool rt; -+ bool sig = false; -+ if( !child && (args->isSet( "forcelock" ) || (signalled_forcelock == TRUE))) -+ { -+ rt = process.lock(); -+ sig = true; -+ } -+ else if( child || (args->isSet( "dontlock" ) || (signalled_dontlock == TRUE))) { -+ rt = process.dontLock(); -+ } -+ else if( child || (args->isSet( "securedialog" ) || (signalled_securedialog == TRUE))) { -+ int retcode = tde_sak_verify_calling_process(); -+ if (retcode == 0) { -+ rt = process.runSecureDialog(); -+ } -+ else { -+ return 1; -+ } - } - else { -+ rt = process.defaultSave(); -+ } -+ if (!rt) { - return 0; - } -- } -- else { -- rt = process.defaultSave(); -- } -- if (!rt) { -- return 0; -- } - -- if( sig ) -- { -- DCOPRef ref( "kdesktop", "KScreensaverIface"); -- ref.send( "saverLockReady" ); -- } -+ if( sig ) -+ { -+ DCOPRef ref( "kdesktop", "KScreensaverIface"); -+ ref.send( "saverLockReady" ); -+ } -+ -+ if (in_internal_mode == FALSE) { -+ return app.exec(); -+ } -+ else { -+ pid_t kdesktop_pid = atoi(args->getOption( "internal" )); -+ app.exec(); -+ if (kill(kdesktop_pid, SIGUSR1) < 0) { -+ // The controlling kdesktop process probably died. Commit suicide... -+ return 12; -+ } - -- return app.exec(); -+ // FIXME -+ // We should not have to return (restart) at all, -+ // but it seems that some X11 connections are left active, -+ // preventing the lock process from restarting properly in the while() loop above. -+ return 0; -+ } -+ } - } - - #include "main.moc" |