From 14bb7c359cd5d07fb27cd36f6dae19991bb6836f Mon Sep 17 00:00:00 2001 From: Andreas Fink Date: Mon, 18 Jan 2010 21:11:05 +0000 Subject: [PATCH] *fix* removed warnings *fix* removed unneeded code (backwards compatibility to tint2-0.6 and unneccesary XSetWindowsBackground) *fix* better heuristicMask algorithm --- src/config.c | 82 ---------------------------------------- src/systray/systraybar.c | 2 +- src/tint.c | 9 +---- src/util/common.c | 24 +++++++++--- 4 files changed, 20 insertions(+), 97 deletions(-) diff --git a/src/config.c b/src/config.c index db0f1f8..9977574 100644 --- a/src/config.c +++ b/src/config.c @@ -58,8 +58,6 @@ char *snapshot_path = 0; // -------------------------------------------------- // backward compatibility static int old_task_icon_size; -static int bg_task; -static int bg_task_active; // detect if it's an old config file // ==1 static int old_config_file; @@ -600,86 +598,6 @@ void add_entry (char *key, char *value) else if (strcmp(key, "autohide_height") == 0) panel_autohide_height = atoi(value); - - // QUESTION: Do we still need backwards compatibility??? - /* Read tint-0.6 config for backward compatibility */ - else if (strcmp (key, "panel_mode") == 0) { - if (strcmp (value, "single_desktop") == 0) panel_mode = SINGLE_DESKTOP; - else panel_mode = MULTI_DESKTOP; - } - else if (strcmp (key, "panel_rounded") == 0) { - Background bg; - bg.border.rounded = atoi(value); - g_array_append_val(backgrounds, bg); - } - else if (strcmp (key, "panel_border_width") == 0) { - g_array_index(backgrounds, Background, backgrounds->len-1).border.width = atoi(value); - } - else if (strcmp (key, "panel_background_color") == 0) { - Background* bg = &g_array_index(backgrounds, Background, backgrounds->len-1); - extract_values(value, &value1, &value2, &value3); - get_color (value1, bg->back.color); - if (value2) bg->back.alpha = (atoi (value2) / 100.0); - else bg->back.alpha = 0.5; - } - else if (strcmp (key, "panel_border_color") == 0) { - Background* bg = &g_array_index(backgrounds, Background, backgrounds->len-1); - extract_values(value, &value1, &value2, &value3); - get_color (value1, bg->border.color); - if (value2) bg->border.alpha = (atoi (value2) / 100.0); - else bg->border.alpha = 0.5; - } - else if (strcmp (key, "task_text_centered") == 0) - panel_config.g_task.centered = atoi (value); - else if (strcmp (key, "task_margin") == 0) { - panel_config.g_taskbar.area.paddingxlr = 0; - panel_config.g_taskbar.area.paddingx = atoi (value); - } - else if (strcmp (key, "task_icon_size") == 0) - old_task_icon_size = atoi (value); - else if (strcmp (key, "task_rounded") == 0) { - Background bg; - bg.border.rounded = atoi(value); - g_array_append_val(backgrounds, bg); - g_array_append_val(backgrounds, bg); - bg_task = backgrounds->len-2; - bg_task_active = backgrounds->len-1; - } - else if (strcmp (key, "task_background_color") == 0) { - Background* bg = &g_array_index(backgrounds, Background, bg_task); - extract_values(value, &value1, &value2, &value3); - get_color (value1, bg->back.color); - if (value2) bg->back.alpha = (atoi (value2) / 100.0); - else bg->back.alpha = 0.5; - } - else if (strcmp (key, "task_active_background_color") == 0) { - Background* bg = &g_array_index(backgrounds, Background, bg_task_active); - extract_values(value, &value1, &value2, &value3); - get_color (value1, bg->back.color); - if (value2) bg->back.alpha = (atoi (value2) / 100.0); - else bg->back.alpha = 0.5; - } - else if (strcmp (key, "task_border_width") == 0) { - Background* bg = &g_array_index(backgrounds, Background, bg_task); - bg->border.width = atoi (value); - bg = &g_array_index(backgrounds, Background, bg_task_active); - bg->border.width = atoi (value); - } - else if (strcmp (key, "task_border_color") == 0) { - Background* bg = &g_array_index(backgrounds, Background, bg_task); - extract_values(value, &value1, &value2, &value3); - get_color (value1, bg->border.color); - if (value2) bg->border.alpha = (atoi (value2) / 100.0); - else bg->border.alpha = 0.5; - } - else if (strcmp (key, "task_active_border_color") == 0) { - Background* bg = &g_array_index(backgrounds, Background, bg_task_active); - extract_values(value, &value1, &value2, &value3); - get_color (value1, bg->border.color); - if (value2) bg->border.alpha = (atoi (value2) / 100.0); - else bg->border.alpha = 0.5; - } - else fprintf(stderr, "tint2 : invalid option \"%s\", correct your config file\n", key); diff --git a/src/systray/systraybar.c b/src/systray/systraybar.c index 41f93a4..a0c1f3c 100644 --- a/src/systray/systraybar.c +++ b/src/systray/systraybar.c @@ -113,7 +113,7 @@ void resize_systray(void *obj) TrayWindow *traywin; GSList *l; int count, icon_size; - int icons_per_column, icons_per_row, marging; + int icons_per_column=1, icons_per_row=1, marging=0; if (panel_horizontal) icon_size = sysbar->area.height; diff --git a/src/tint.c b/src/tint.c index 0b9a719..502c7b1 100644 --- a/src/tint.c +++ b/src/tint.c @@ -677,13 +677,6 @@ int main (int argc, char *argv[]) if (panel_refresh) { panel_refresh = 0; - // QUESTION: do we need this first refresh_systray, because we check refresh_systray once again later... - // ANSWER: yes, panel->temp_pmap is freeded in the loop. - // we change background to None to avoid tray icon using freeded pixmap. - if (refresh_systray) { - panel = (Panel*)systray.area.panel; - XSetWindowBackgroundPixmap (server.dsp, panel->main_win, None); - } for (i=0 ; i < nb_panel ; i++) { panel = &panel1[i]; @@ -799,7 +792,7 @@ int main (int argc, char *argv[]) break; case ClientMessage: - ev = &e; + ev = &e.xclient; if (ev->data.l[1] == server.atom._NET_WM_CM_S0) { if (ev->data.l[2] == None) // TODO: Stop real_transparency diff --git a/src/util/common.c b/src/util/common.c index 8e213fc..67ddc5d 100644 --- a/src/util/common.c +++ b/src/util/common.c @@ -241,15 +241,27 @@ void adjust_asb(DATA32 *data, int w, int h, int alpha, float satur, float bright void createHeuristicMask(DATA32* data, int w, int h) { + // first we need to find the mask color, therefore we check all 4 edge pixel and take the color which + // appears most often (we only need to check three edges, the 4th is implicitly clear) + unsigned int topLeft = data[0], topRight = data[w-1], bottomLeft = data[w*h-w], bottomRight = data[w*h-1]; + int max = (topLeft == topRight) + (topLeft == bottomLeft) + (topLeft == bottomRight); + int maskPos = 0; + if ( max < (topRight == topLeft) + (topRight == bottomLeft) + (topRight == bottomRight) ) { + max = (topRight == topLeft) + (topRight == bottomLeft) + (topRight == bottomRight); + maskPos = w-1; + } + if ( max < (bottomLeft == topRight) + (bottomLeft == topLeft) + (bottomLeft == bottomRight) ) + maskPos = w*h-w; + + // now mask out every pixel which has the same color as the edge pixels unsigned char* udata = (unsigned char*)data; - int b = udata[0]; - int g = udata[1]; - int r = udata[2]; + unsigned char b = udata[4*maskPos]; + unsigned char g = udata[4*maskPos+1]; + unsigned char r = udata[4*maskPos+1]; int i; for (i=0; i