diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-08-13 02:31:25 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-08-13 02:31:25 +0000 |
commit | f50ce50331053efe6b06b3917bf07a5a64398736 (patch) | |
tree | 3b6de07bf3f62b177816725b61650cf4589a9db0 /kwin/kompmgr/kompmgr.c | |
parent | ecb591aa8446dd7b133e1674287924a5e2c0ac14 (diff) | |
download | tdebase-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/kompmgr.c')
-rw-r--r-- | kwin/kompmgr/kompmgr.c | 39 |
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; |