From 28d726626d5db9178b7deaa13bfcfa9c3e796895 Mon Sep 17 00:00:00 2001 From: o9000 Date: Fri, 30 Jan 2015 10:01:39 +0000 Subject: [PATCH] Xorg: Add option to disable transparency (workaround for broken graphics stacks; issues 432, 435, 439) git-svn-id: http://tint2.googlecode.com/svn/trunk@675 121b4492-b84c-0410-8b4c-0d4edfb3f3cc --- src/config.c | 3 +++ src/server.c | 3 ++- src/server.h | 1 + src/tint.c | 29 +++++++++++++++++++---------- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/config.c b/src/config.c index 1434273..975287e 100644 --- a/src/config.c +++ b/src/config.c @@ -283,6 +283,9 @@ void add_entry (char *key, char *value) else panel_layer = NORMAL_LAYER; } + else if (strcmp (key, "disable_transparency") == 0) { + server.disable_transparency = atoi (value); + } /* Battery */ else if (strcmp (key, "battery_low_status") == 0) { diff --git a/src/server.c b/src/server.c index f3e284d..ccfef85 100644 --- a/src/server.c +++ b/src/server.c @@ -125,6 +125,7 @@ void cleanup_server() free(server.monitor); } if (server.gc) XFreeGC(server.dsp, server.gc); + server.disable_transparency = 0; } @@ -408,7 +409,7 @@ void server_init_visual() server.colormap32 = XCreateColormap(server.dsp, server.root_win, visual, AllocNone); } - if (visual && server.composite_manager != None && snapshot_path == 0) { + if (!server.disable_transparency && visual && server.composite_manager != None && snapshot_path == 0) { XSetWindowAttributes attrs; attrs.event_mask = StructureNotifyMask; XChangeWindowAttributes (server.dsp, server.composite_manager, CWEventMask, &attrs); diff --git a/src/server.h b/src/server.h index b2102e4..df210ad 100644 --- a/src/server.h +++ b/src/server.h @@ -106,6 +106,7 @@ typedef struct Window root_win; Window composite_manager; int real_transparency; + int disable_transparency; // current desktop int desktop; int screen; diff --git a/src/tint.c b/src/tint.c index 69c14c2..943df56 100644 --- a/src/tint.c +++ b/src/tint.c @@ -171,7 +171,7 @@ static gint cmp_ptr(gconstpointer a, gconstpointer b) { #endif // HAVE_SN -void init_X11() +void init_X11_pre_config() { server.dsp = XOpenDisplay (NULL); if (!server.dsp) { @@ -182,6 +182,20 @@ void init_X11() server.screen = DefaultScreen (server.dsp); server.root_win = RootWindow(server.dsp, server.screen); server.desktop = server_get_current_desktop (); + + setlocale (LC_ALL, ""); + // config file use '.' as decimal separator + setlocale(LC_NUMERIC, "POSIX"); + + // get monitor and desktop config + get_monitors(); + get_desktops(); + + server.disable_transparency = 0; +} + +void init_X11_post_config() +{ server_init_visual(); XSetErrorHandler ((XErrorHandler) server_catch_error); @@ -204,10 +218,6 @@ void init_X11() /* Catch events */ XSelectInput (server.dsp, server.root_win, PropertyChangeMask|StructureNotifyMask); - - setlocale (LC_ALL, ""); - // config file use '.' as decimal separator - setlocale(LC_NUMERIC, "POSIX"); // load default icon gchar *path; @@ -220,10 +230,6 @@ void init_X11() default_icon = imlib_load_image(path); g_free(path); } - - // get monitor and desktop config - get_monitors(); - get_desktops(); } @@ -1023,7 +1029,8 @@ int main (int argc, char *argv[]) start: init (argc, argv); - init_X11(); + + init_X11_pre_config(); i = 0; if (config_path) @@ -1036,6 +1043,8 @@ start: exit(1); } + init_X11_post_config(); + init_panel(); if (snapshot_path) { get_snapshot(snapshot_path);