summaryrefslogtreecommitdiffstats
path: root/kwin/kompmgr
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2011-08-13 02:31:25 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2011-08-13 02:31:25 +0000
commitf50ce50331053efe6b06b3917bf07a5a64398736 (patch)
tree3b6de07bf3f62b177816725b61650cf4589a9db0 /kwin/kompmgr
parentecb591aa8446dd7b133e1674287924a5e2c0ac14 (diff)
downloadtdebase-f50ce50331053efe6b06b3917bf07a5a64398736.tar.gz
tdebase-f50ce50331053efe6b06b3917bf07a5a64398736.zip
Add Xorg composition support to kdm
KDM composition can be enabled in the control center When enabled, it provides seamless composited logins to Trinity sessions It also gets rid of the remaining artifacts in the themed kdm login screen git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1246834 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kwin/kompmgr')
-rw-r--r--kwin/kompmgr/kompmgr.c39
1 files changed, 35 insertions, 4 deletions
diff --git a/kwin/kompmgr/kompmgr.c b/kwin/kompmgr/kompmgr.c
index 8a7abb94e..2aef59772 100644
--- a/kwin/kompmgr/kompmgr.c
+++ b/kwin/kompmgr/kompmgr.c
@@ -34,6 +34,7 @@
* CHANGELOG:
* http://patchwork.freedesktop.org/patch/1049/ [Add default background color option] 08/11/2011
* http://patchwork.freedesktop.org/patch/1052/ [Prevent flicker on root pixmap change] 08/11/2011
+ * Added SIGUSER1 handler to change process UID [Prevent flicker on login] 08/12/2011
*
* TODO:
* http://patchwork.freedesktop.org/patch/1053/ [Fix window mapping with re-used window ids]
@@ -50,6 +51,8 @@ check baghira.sf.net for more infos
#include <math.h>
#include <sys/poll.h>
#include <sys/time.h>
+#include <sys/types.h>
+#include <signal.h>
#include <time.h>
#include <unistd.h>
#include <X11/Xlib.h>
@@ -135,6 +138,9 @@ typedef struct _fade {
Bool gone;
} fade;
+struct sigaction usr_action;
+sigset_t block_mask;
+
win *list;
fade *fades;
Display *dpy;
@@ -203,6 +209,7 @@ conv *gaussianMap;
#define TRANS_OPACITY 0.75
+#define NDEBUG 1
#define DEBUG_REPAINT 0
#define DEBUG_EVENTS 0
#define MONITOR_REPAINT 0
@@ -218,7 +225,7 @@ typedef enum _compMode {
static void
determine_mode(Display *dpy, win *w);
-
+
static double
get_opacity_percent(Display *dpy, win *w, double def);
@@ -267,11 +274,28 @@ get_time_in_milliseconds ()
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
+void handle_siguser (int sig)
+{
+ char newuid[1024];
+#ifndef NDEBUG
+ printf("Enter the new user ID:\n\r"); fflush(stdout);
+#endif
+ char *eof;
+ newuid[0] = '\0';
+ newuid[sizeof(newuid)-1] = '\0';
+ eof = fgets(newuid, sizeof(newuid), stdin);
+ int uidnum = atoi(newuid);
+#ifndef NDEBUG
+ printf("Setting kompmgr process uid to %d...\n\r", uidnum); fflush(stdout);
+#endif
+ setuid(uidnum);
+}
+
fade *
find_fade (win *w)
{
fade *f;
-
+
for (f = fades; f; f = f->next)
{
if (f->w == w)
@@ -2509,7 +2533,7 @@ usage (char *program)
fprintf (stderr, " -o opacity\n Specifies the translucency for client-side shadows. (default .75)\n");
fprintf (stderr, " -l left-offset\n Specifies the left offset for client-side shadows. (default -15)\n");
fprintf (stderr, " -t top-offset\n Specifies the top offset for clinet-side shadows. (default -15)\n");
- fprintf (stderr, " -b color\n Specifies the background color to use if no root pixmap is set. (default is a gray)\n");
+ fprintf (stderr, " -b color\n Specifies the background color to use if no root pixmap is set. (default is black)\n");
fprintf (stderr, " -I fade-in-step\n Specifies the opacity change between steps while fading in. (default 0.028)\n");
fprintf (stderr, " -O fade-out-step\n Specifies the opacity change between steps while fading out. (default 0.03)\n");
fprintf (stderr, " -D fade-delta-time\n Specifies the time between steps in a fade in milliseconds. (default 10)\n");
@@ -2568,6 +2592,13 @@ main (int argc, char **argv)
shadowColor.green = 0;
shadowColor.blue = 0;
+ // Initialize signal handlers
+ sigfillset(&block_mask);
+ usr_action.sa_handler = handle_siguser;
+ usr_action.sa_mask = block_mask;
+ usr_action.sa_flags = 0;
+ sigaction(SIGUSR1, &usr_action, NULL);
+
loadConfig(NULL); /*we do that before cmdline-parsing, so config-values can be overridden*/
/*used for shadow colors*/
while ((o = getopt (argc, argv, "D:I:O:d:r:o:l:t:b:scnfFmCaSx:vh")) != -1)
@@ -2739,7 +2770,7 @@ main (int argc, char **argv)
}
else
{
- fill_color.red = fill_color.green = fill_color.blue = 0x8080;
+ fill_color.red = fill_color.green = fill_color.blue = 0x0;
}
fill_color.alpha = 0xffff;