mirror of
https://gitdl.cn/https://github.com/chakralinux/desktop.git
synced 2025-02-04 06:37:16 +08:00
306 lines
10 KiB
Diff
306 lines
10 KiB
Diff
diff -Npur kde-workspace-4.6.90/kdm/backend/CMakeLists.txt kde-workspace-4.6.80/kdm/backend/CMakeLists.txt
|
|
--- kde-workspace-4.6.90/kdm/backend/CMakeLists.txt 2011-06-22 16:29:18.000000000 +0200
|
|
+++ kde-workspace-4.6.80/kdm/backend/CMakeLists.txt 2011-05-20 22:32:06.000000000 +0200
|
|
@@ -68,9 +68,6 @@ if(UTIL_LIBRARIES)
|
|
target_link_libraries( kdm ${UTIL_LIBRARIES} )
|
|
endif(UTIL_LIBRARIES)
|
|
target_link_libraries( kdm ${POSIX4_LIBRARIES} )
|
|
-if(QT_RT_LIBRARY)
|
|
- target_link_libraries( kdm ${QT_RT_LIBRARY} )
|
|
-endif(QT_RT_LIBRARY)
|
|
|
|
if(KDE4_ENABLE_FINAL)
|
|
macro_add_file_dependencies(${CMAKE_CURRENT_BINARY_DIR}/kdm_final_cpp.cpp ${confci})
|
|
diff -Npur kde-workspace-4.6.90/kdm/backend/ctrl.c kde-workspace-4.6.80/kdm/backend/ctrl.c
|
|
--- kde-workspace-4.6.90/kdm/backend/ctrl.c 2011-06-22 16:29:18.000000000 +0200
|
|
+++ kde-workspace-4.6.80/kdm/backend/ctrl.c 2011-05-20 22:32:06.000000000 +0200
|
|
@@ -334,7 +334,6 @@ strCat(char **bp, const char *str)
|
|
static void
|
|
sdCat(char **bp, SdRec *sdr)
|
|
{
|
|
- int delta = nowMonotonic ? time(0) - now : 0;
|
|
if (sdr->how == SHUT_HALT)
|
|
strCat(bp, "halt,");
|
|
else
|
|
@@ -342,11 +341,11 @@ sdCat(char **bp, SdRec *sdr)
|
|
if (sdr->start == TO_INF)
|
|
strCat(bp, "0,");
|
|
else
|
|
- *bp += sprintf(*bp, "%d,", sdr->start ? sdr->start + delta : 0);
|
|
+ *bp += sprintf(*bp, "%d,", sdr->start);
|
|
if (sdr->timeout == TO_INF)
|
|
strCat(bp, "-1,");
|
|
else
|
|
- *bp += sprintf(*bp, "%d,", sdr->timeout ? sdr->timeout + delta : 0);
|
|
+ *bp += sprintf(*bp, "%d,", sdr->timeout);
|
|
if (sdr->force == SHUT_ASK)
|
|
strCat(bp, "ask");
|
|
else if (sdr->force == SHUT_FORCE)
|
|
@@ -648,12 +647,8 @@ processCtrl(const char *string, int len,
|
|
}
|
|
sdr.start = strtol(*ap, &bp, 10);
|
|
if (bp != *ap && !*bp) {
|
|
- if (**ap == '+') {
|
|
+ if (**ap == '+')
|
|
sdr.start += now;
|
|
- } else if (nowMonotonic && sdr.start) {
|
|
- sdr.start -= time(0);
|
|
- sdr.start += now;
|
|
- }
|
|
if (!*++ap)
|
|
goto miss;
|
|
sdr.timeout = strtol(*ap, &bp, 10);
|
|
@@ -661,15 +656,11 @@ processCtrl(const char *string, int len,
|
|
fLog(d, fd, "bad", "invalid timeout %\"s", ar[3]);
|
|
goto bust;
|
|
}
|
|
+ if (**ap == '+')
|
|
+ sdr.timeout += sdr.start ? sdr.start : now;
|
|
if (sdr.timeout < 0) {
|
|
sdr.timeout = TO_INF;
|
|
} else {
|
|
- if (**ap == '+') {
|
|
- sdr.timeout += sdr.start ? sdr.start : now;
|
|
- } else if (nowMonotonic && sdr.timeout) {
|
|
- sdr.timeout -= time(0);
|
|
- sdr.timeout += now;
|
|
- }
|
|
if (!*++ap)
|
|
goto miss;
|
|
if (!strcmp(*ap, "force")) {
|
|
diff -Npur kde-workspace-4.6.90/kdm/backend/dm.c kde-workspace-4.6.80/kdm/backend/dm.c
|
|
--- kde-workspace-4.6.90/kdm/backend/dm.c 2011-06-22 16:29:18.000000000 +0200
|
|
+++ kde-workspace-4.6.80/kdm/backend/dm.c 2011-05-20 22:32:06.000000000 +0200
|
|
@@ -74,9 +74,6 @@ static int stopping;
|
|
SdRec sdRec = { 0, 0, 0, TO_INF, TO_INF, 0, 0, 0 };
|
|
|
|
time_t now;
|
|
-#ifndef nowMonotonic
|
|
-int nowMonotonic;
|
|
-#endif
|
|
|
|
#if KDM_LIBEXEC_STRIP != -1
|
|
char *progpath;
|
|
@@ -106,10 +103,6 @@ main(int argc, char **argv)
|
|
if (fcntl(2, F_GETFD) < 0)
|
|
dup2(0, 2);
|
|
|
|
-#ifndef nowMonotonic
|
|
- nowMonotonic = sysconf(_SC_MONOTONIC_CLOCK) >= 200112L;
|
|
-#endif
|
|
-
|
|
#if KDM_LIBEXEC_STRIP == -1
|
|
prog = strrchr(argv[0], '/');
|
|
progname = prog = prog ? prog + 1 : argv[0];
|
|
@@ -330,20 +323,6 @@ main(int argc, char **argv)
|
|
return 0;
|
|
}
|
|
|
|
-void
|
|
-updateNow(void)
|
|
-{
|
|
-#if (_POSIX_MONOTONIC_CLOCK >= 0)
|
|
- if (nowMonotonic) {
|
|
- struct timespec ts;
|
|
- clock_gettime(CLOCK_MONOTONIC, &ts);
|
|
- /* Linux' monotonic clock starts at zero, but this is assumed to mean "long ago". */
|
|
- now = ts.tv_sec + 10000;
|
|
- } else
|
|
-#endif
|
|
- time(&now);
|
|
-}
|
|
-
|
|
|
|
#ifdef HAVE_VTS
|
|
int
|
|
@@ -1184,7 +1163,7 @@ mainLoop(void)
|
|
fd_set reads;
|
|
|
|
debug("mainLoop\n");
|
|
- updateNow();
|
|
+ time(&now);
|
|
while (
|
|
#ifdef XDMCP
|
|
anyListenSockets() ||
|
|
@@ -1234,7 +1213,7 @@ mainLoop(void)
|
|
reads = wellKnownSocketsMask;
|
|
nready = select(wellKnownSocketsMax + 1, &reads, 0, 0, tvp);
|
|
debug("select returns %d\n", nready);
|
|
- updateNow();
|
|
+ time(&now);
|
|
#ifdef NEED_ENTROPY
|
|
addTimerEntropy();
|
|
#endif
|
|
diff -Npur kde-workspace-4.6.90/kdm/backend/dm.h kde-workspace-4.6.80/kdm/backend/dm.h
|
|
--- kde-workspace-4.6.90/kdm/backend/dm.h 2011-06-22 16:29:18.000000000 +0200
|
|
+++ kde-workspace-4.6.80/kdm/backend/dm.h 2011-05-20 22:32:06.000000000 +0200
|
|
@@ -403,18 +403,6 @@ void cancelShutdown(void);
|
|
int TTYtoVT(const char *tty);
|
|
int activateVT(int vt);
|
|
|
|
-#ifndef _POSIX_MONOTONIC_CLOCK
|
|
-# define _POSIX_MONOTONIC_CLOCK -1
|
|
-#endif
|
|
-#if (_POSIX_MONOTONIC_CLOCK > 0)
|
|
-# define nowMonotonic 1
|
|
-#elif (_POSIX_MONOTONIC_CLOCK < 0)
|
|
-# define nowMonotonic 0
|
|
-#else
|
|
-extern int nowMonotonic;
|
|
-#endif
|
|
-void updateNow(void);
|
|
-
|
|
/* in ctrl.c */
|
|
void openCtrl(struct display *d);
|
|
void closeCtrl(struct display *d);
|
|
diff -Npur kde-workspace-4.6.90/kdm/backend/greet.h kde-workspace-4.6.80/kdm/backend/greet.h
|
|
--- kde-workspace-4.6.90/kdm/backend/greet.h 2011-06-22 16:29:18.000000000 +0200
|
|
+++ kde-workspace-4.6.80/kdm/backend/greet.h 2011-05-20 22:32:06.000000000 +0200
|
|
@@ -146,8 +146,6 @@ from the copyright holder.
|
|
#define G_DChoose 3 /* run chooser */
|
|
#endif
|
|
|
|
-#define G_Interact 4 /* greeter got user input. possible crash is probably not spontaneous. */
|
|
-
|
|
#define G_Shutdown 101 /* 5*int, string; async */
|
|
# define SHUT_REBOOT 1 /* how */
|
|
# define SHUT_HALT 2
|
|
diff -Npur kde-workspace-4.6.90/kdm/backend/session.c kde-workspace-4.6.80/kdm/backend/session.c
|
|
--- kde-workspace-4.6.90/kdm/backend/session.c 2011-06-22 16:29:18.000000000 +0200
|
|
+++ kde-workspace-4.6.80/kdm/backend/session.c 2011-05-20 22:32:06.000000000 +0200
|
|
@@ -409,12 +409,15 @@ void
|
|
openGreeter()
|
|
{
|
|
char *name, **env;
|
|
+ static time_t lastStart;
|
|
int cmd;
|
|
Cursor xcursor;
|
|
|
|
gSet(&grttalk);
|
|
if (grtproc.pid > 0)
|
|
return;
|
|
+ if (time(0) < lastStart + 10) /* XXX should use some readiness indicator instead */
|
|
+ sessionExit(EX_UNMANAGE_DPY);
|
|
ASPrintf(&name, "greeter for display %s", td->name);
|
|
debug("starting %s\n", name);
|
|
|
|
@@ -443,6 +446,7 @@ openGreeter()
|
|
sessionExit(EX_UNMANAGE_DPY);
|
|
}
|
|
debug("%s ready\n", name);
|
|
+ time(&lastStart);
|
|
}
|
|
|
|
int
|
|
@@ -544,7 +548,7 @@ manageSession(void)
|
|
{
|
|
int ex, cmd;
|
|
volatile int clientPid = -1;
|
|
- time_t tdiff, startt;
|
|
+ volatile time_t tdiff = 0;
|
|
|
|
debug("manageSession %s\n", td->name);
|
|
if ((ex = Setjmp(abortSession))) {
|
|
@@ -573,16 +577,12 @@ manageSession(void)
|
|
/* NOTREACHED */
|
|
#endif
|
|
|
|
- updateNow();
|
|
- tdiff = now - td->hstent->lastExit - td->openDelay;
|
|
+ tdiff = time(0) - td->hstent->lastExit - td->openDelay;
|
|
if (autoLogon(tdiff)) {
|
|
- if (!verify(conv_auto, False)) {
|
|
- startt = now;
|
|
+ if (!verify(conv_auto, False))
|
|
goto gcont;
|
|
- }
|
|
} else {
|
|
regreet:
|
|
- startt = now;
|
|
openGreeter();
|
|
#ifdef XDMCP
|
|
if (((td->displayType & d_location) == dLocal) &&
|
|
@@ -596,14 +596,12 @@ manageSession(void)
|
|
G_GreetTimed : G_Greet);
|
|
gcont:
|
|
cmd = ctrlGreeterWait(True);
|
|
- if (cmd == G_Interact) {
|
|
- startt = 0;
|
|
- goto gcont;
|
|
- }
|
|
#ifdef XDMCP
|
|
- while (cmd == G_DChoose) {
|
|
+ recmd:
|
|
+ if (cmd == G_DChoose) {
|
|
choose:
|
|
cmd = doChoose();
|
|
+ goto recmd;
|
|
}
|
|
if (cmd == G_DGreet)
|
|
continue;
|
|
@@ -616,9 +614,6 @@ manageSession(void)
|
|
logError("Received unknown command %d from greeter\n", cmd);
|
|
closeGreeter(True);
|
|
}
|
|
- updateNow();
|
|
- if (now < startt + 120) /* Greeter crashed spontaneously. Avoid endless loop. */
|
|
- sessionExit(EX_UNMANAGE_DPY);
|
|
goto regreet;
|
|
}
|
|
}
|
|
diff -Npur kde-workspace-4.6.90/kdm/kfrontend/kgapp.cpp kde-workspace-4.6.80/kdm/kfrontend/kgapp.cpp
|
|
--- kde-workspace-4.6.90/kdm/kfrontend/kgapp.cpp 2011-06-22 16:29:18.000000000 +0200
|
|
+++ kde-workspace-4.6.80/kdm/kfrontend/kgapp.cpp 2011-05-20 22:32:07.000000000 +0200
|
|
@@ -74,7 +74,7 @@ sigAlarm(int)
|
|
|
|
GreeterApp::GreeterApp(int &argc, char **argv) :
|
|
inherited(argc, argv),
|
|
- regrabPtr(false), regrabKbd(false), initalBusy(true), sendInteract(false),
|
|
+ regrabPtr(false), regrabKbd(false), initalBusy(true),
|
|
dragWidget(0)
|
|
{
|
|
pingInterval = _isLocal ? 0 : _pingInterval;
|
|
@@ -203,14 +203,6 @@ GreeterApp::x11EventFilter(XEvent * ev)
|
|
break;
|
|
}
|
|
break;
|
|
- default:
|
|
- return false;
|
|
- }
|
|
- if (sendInteract) {
|
|
- sendInteract = false;
|
|
- // We assume that no asynchronous communication is going on
|
|
- // before the first user interaction.
|
|
- gSendInt(G_Interact);
|
|
}
|
|
return false;
|
|
}
|
|
@@ -487,7 +479,6 @@ main(int argc ATTR_UNUSED, char **argv)
|
|
}
|
|
}
|
|
QObject::connect(dialog, SIGNAL(ready()), &app, SLOT(markReady()));
|
|
- app.enableSendInteract();
|
|
debug("entering event loop\n");
|
|
rslt = dialog->exec();
|
|
debug("left event loop\n");
|
|
diff -Npur kde-workspace-4.6.90/kdm/kfrontend/kgapp.h kde-workspace-4.6.80/kdm/kfrontend/kgapp.h
|
|
--- kde-workspace-4.6.90/kdm/kfrontend/kgapp.h 2011-06-22 16:29:18.000000000 +0200
|
|
+++ kde-workspace-4.6.80/kdm/kfrontend/kgapp.h 2011-05-20 22:32:07.000000000 +0200
|
|
@@ -37,7 +37,6 @@ class GreeterApp : public QApplication {
|
|
public:
|
|
GreeterApp(int &argc, char **argv);
|
|
void markBusy();
|
|
- void enableSendInteract() { sendInteract = true; }
|
|
virtual bool x11EventFilter(XEvent *);
|
|
|
|
public Q_SLOTS:
|
|
@@ -51,7 +50,7 @@ class GreeterApp : public QApplication {
|
|
|
|
private:
|
|
int pingInterval, pingTimerId;
|
|
- bool regrabPtr, regrabKbd, initalBusy, sendInteract;
|
|
+ bool regrabPtr, regrabKbd, initalBusy;
|
|
QPoint mouseStartPos, dialogStartPos;
|
|
QWidget *dragWidget;
|
|
};
|