RHEL/Fedora: updates kdebase 3.5.13

pull/3/head
Francois Andriot 13 years ago
parent 9016533d37
commit 197b5a23ee

@ -0,0 +1,356 @@
commit 4952641328f28a541e3fdf2200df4e1e4b11d5dd
Author: Timothy Pearson <kb9vqf@pearsoncomputing.net>
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"

@ -28,12 +28,12 @@ diff --git a/kdesktop/lock/main.cc b/kdesktop/lock/main.cc
index 5853da1..225d9c5 100644
--- a/kdesktop/lock/main.cc
+++ b/kdesktop/lock/main.cc
@@ -168,7 +168,7 @@ int main( int argc, char **argv )
@@ -260,7 +260,7 @@ int main( int argc, char **argv )
bool rt;
bool sig = false;
- if( !child && args->isSet( "forcelock" ))
+ if( (!child) && (args->isSet( "forcelock" )))
- if( !child && (args->isSet( "forcelock" ) || (signalled_forcelock == TRUE)))
+ if( (((!child) && (args->isSet( "forcelock" ))) || (signalled_forcelock == TRUE)))
{
rt = process.lock();
sig = true;

@ -2,7 +2,7 @@
%if "%{?version}" == ""
%define version 3.5.13
%endif
%define release 20
%define release 21
# If TDE is built in a specific prefix (e.g. /opt/trinity), the release will be suffixed with ".opt".
%if "%{?_prefix}" != "/usr"
@ -26,7 +26,7 @@ Name: trinity-kdebase
Version: %{?version}
Release: %{?release}%{?dist}%{?_variant}
License: GPL
Summary: Trinity KDE Base Programs
Summary: Trinity Base Programs
Group: User Interface/Desktops
Vendor: Trinity Project
@ -133,10 +133,15 @@ Patch48: kdebase-3.5.13-fix_kio_sftp_nonstandard_ports.patch
Patch49: kdebase-3.5.13-start_dcop_in_tdm.patch
## [kdebase/kdesktop/lock] Update lock process to engage the lock in near real time [Commit #8d521d0b]
Patch50: kdebase-3.5.13-engage_lock_in_near_real_time.patch
## [kdebase/kdesktop/lock] Commit the rest of 8d521d0b, not merged due to GIT glitch [Commit #49526413]
Patch51: kdebase-3.5.13-engage_lock_in_near_real_time_continued.patch
## [kdebase/kdesktop/lock] Fix desktop lock failure due to race condition within signal handler between qt and xcb [Commit #67a3a8f3]
Patch51: kdebase-3.5.13-fix_lock_failure.patch
Patch52: kdebase-3.5.13-fix_lock_failure.patch
## [kdebase/kioslave] Temporary fix for a probable race condition on some systems. [Bug #760]
Patch52: kdebase-3.5.13-fix_race_condition.patch
Patch53: kdebase-3.5.13-fix_race_condition.patch
### FEDORA / RHEL distribution-specific settings ###
# Fedora 15 Theme: "Lovelock"
%if 0%{?fedora} == 15
@ -188,6 +193,7 @@ Requires: redhat-indexhtml
%define tde_aboutpage /usr/share/doc/HTML/index.html
%endif
BuildRequires: tqtinterface-devel
BuildRequires: trinity-arts-devel
BuildRequires: trinity-kdelibs-devel
@ -253,7 +259,7 @@ Provides: service(graphical-login)
%description
Core applications for the Trinity K Desktop Environment. Included are: kdm
Core applications for the Trinity Desktop Environment. Included are: kdm
(replacement for xdm), kwin (window manager), konqueror (filemanager,
web browser, ftp client, ...), konsole (xterm replacement), kpanel
(application starter and desktop pager), kaudio (audio server),
@ -377,6 +383,7 @@ Protocol handlers (KIOslaves) for personal information management, including:
%patch50 -p1
%patch51 -p1
%patch52 -p1
%patch53 -p1
# Applies an optional distro-specific graphical theme
%if "%{?tde_bg}" != ""
@ -763,6 +770,9 @@ update-desktop-database %{_datadir}/applications > /dev/null 2>&1 || :
%{_datadir}/cmake/*.cmake
%changelog
* Mon Apr 30 2012 Francois Andriot <francois.andriot@free.fr> - 3.5.13-21
- Commit the rest of 8d521d0b, not merged due to GIT glitch [Commit #49526413]
* Fri Apr 27 2012 Francois Andriot <francois.andriot@free.fr> - 3.5.13-20
- Fix sftp when nonstandard port is specified in ssh config [Bug #897]
- Start minimal dcop system to support twin in tdm [Commit #66a19439]

Loading…
Cancel
Save