all repos — tint2 @ 5528aa49e9ebdb32af8ebf16af90ef8718a8700a

fork of the tint2 desktop panel for my custom setup - only minimized windows across all desktops for the taskbar

add default icon on task (/usr/share/tint2/default_icon.png needed)

git-svn-id: http://tint2.googlecode.com/svn/trunk@184 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
lorthiois@bbsoft.fr lorthiois@bbsoft.fr@121b4492-b84c-0410-8b4c-0d4edfb3f3cc
commit

5528aa49e9ebdb32af8ebf16af90ef8718a8700a

parent

1bb885f840db73f43c766f1d84f2cea8aaf2f97b

4 files changed, 46 insertions(+), 28 deletions(-)

jump to
M src/panel.csrc/panel.c

@@ -58,12 +58,24 @@

Panel *panel1 = 0; int nb_panel; +Imlib_Image default_icon; void init_panel() { int i; Panel *p; + + // load default icon + char *path; + const gchar * const *data_dirs; + data_dirs = g_get_system_data_dirs (); + for (i = 0; data_dirs[i] != NULL; i++) { + path = g_build_filename(data_dirs[i], "tint2", "default_icon.png", NULL); + if (g_file_test (path, G_FILE_TEST_EXISTS)) + default_icon = imlib_load_image(path); + g_free(path); + } for (i=0 ; i < nb_panel ; i++) { p = &panel1[i];

@@ -174,6 +186,11 @@ task_drag = 0;

task_urgent = 0; cleanup_systray(); cleanup_taskbar(); + + if (default_icon) { + imlib_context_set_image(default_icon); + imlib_free_image(); + } // font allocated once if (panel1[0].g_task.font_desc) {
M src/panel.hsrc/panel.h

@@ -54,6 +54,8 @@ extern Task *task_urgent;

extern int tick_urgent; extern int max_tick_urgent; +extern Imlib_Image default_icon; + typedef struct { // always start with area
M src/taskbar/task.csrc/taskbar/task.c

@@ -172,6 +172,8 @@ void get_icon (Task *tsk)

{ Panel *panel = tsk->area.panel; if (!panel->g_task.icon) return; + unsigned int w, h, num; + long *data; if (tsk->icon_data) { free (tsk->icon_data);

@@ -180,12 +182,9 @@ tsk->icon_data = tsk->icon_data_active = 0;

} tsk->area.redraw = 1; - long *data; - int num; data = server_get_property (tsk->win, server.atom._NET_WM_ICON, XA_CARDINAL, &num); if (data) { // get ARGB icon - int w, h; long *tmp_data; tmp_data = get_best_icon (data, get_icon_count (data, num), num, &w, &h, panel->g_task.icon_size1);

@@ -196,8 +195,7 @@ tsk->icon_data = malloc (w * h * sizeof (DATA32));

if (tsk->icon_data) { #ifdef __x86_64__ - int length = tsk->icon_width * tsk->icon_height; - int i; + int i, length = w * h; for (i = 0; i < length; ++i) tsk->icon_data[i] = tmp_data[i]; #else

@@ -209,32 +207,33 @@ }

else { // get Pixmap icon XWMHints *hints = XGetWMHints(server.dsp, tsk->win); - if (!hints) return; - if (hints->flags & IconPixmapHint && hints->icon_pixmap != 0) { - // get width, height and depth for the pixmap - Window root; - int icon_x, icon_y; - uint border_width, bpp; - uint icon_width, icon_height; + Imlib_Image img; + if (hints) { + if (hints->flags & IconPixmapHint && hints->icon_pixmap != 0) { + // get width, height and depth for the pixmap + Window root; + int icon_x, icon_y; + uint border_width, bpp; - XGetGeometry(server.dsp, hints->icon_pixmap, &root, &icon_x, &icon_y, &icon_width, &icon_height, &border_width, &bpp); - - //printf(" get_pixmap\n"); - Imlib_Image img; - imlib_context_set_drawable(hints->icon_pixmap); - img = imlib_create_image_from_drawable(hints->icon_mask, 0, 0, icon_width, icon_height, 0); - imlib_context_set_image(img); - unsigned int *data = imlib_image_get_data(); - if (!data) { - return; + // printf(" get pixmap\n"); + XGetGeometry(server.dsp, hints->icon_pixmap, &root, &icon_x, &icon_y, &w, &h, &border_width, &bpp); + imlib_context_set_drawable(hints->icon_pixmap); + img = imlib_create_image_from_drawable(hints->icon_mask, 0, 0, w, h, 0); + imlib_context_set_image(img); } - tsk->icon_width = imlib_image_get_width(); - tsk->icon_height = imlib_image_get_height(); - tsk->icon_data = malloc (tsk->icon_width * tsk->icon_height * sizeof (DATA32)); - if (tsk->icon_data) - memcpy (tsk->icon_data, data, tsk->icon_width * tsk->icon_height * sizeof (DATA32)); + else + imlib_context_set_image(default_icon); + } + else + imlib_context_set_image(default_icon); + data = imlib_image_get_data(); + tsk->icon_width = imlib_image_get_width(); + tsk->icon_height = imlib_image_get_height(); + tsk->icon_data = malloc (tsk->icon_width * tsk->icon_height * sizeof (DATA32)); + if (tsk->icon_data) + memcpy (tsk->icon_data, data, tsk->icon_width * tsk->icon_height * sizeof (DATA32)); + if (imlib_context_get_image() == img) imlib_free_image(); - } XFree(hints); }