all repos — tint2 @ 9feef39d6f4029666f6fb02ae5bfdef278b666a4

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

fixed Issue 282 : second try

git-svn-id: http://tint2.googlecode.com/svn/trunk@527 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
thilor77 thilor77@121b4492-b84c-0410-8b4c-0d4edfb3f3cc
commit

9feef39d6f4029666f6fb02ae5bfdef278b666a4

parent

3eb1b736e321c7293cb5e0d907c1fa9e3dc08e9c

4 files changed, 45 insertions(+), 26 deletions(-)

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

@@ -163,7 +163,7 @@ p->area.parent = p;

p->area.panel = p; p->area.on_screen = 1; p->area.resize = 1; - p->area.size_mode = SIZE_BY_CONTENT; + p->area.size_mode = SIZE_BY_LAYOUT; p->area._resize = resize_panel; p->g_taskbar.area.parent = p; p->g_taskbar.area.panel = p;
M src/server.csrc/server.c

@@ -170,8 +170,9 @@ if (!win) return 0;

result = XGetWindowProperty(server.dsp, win, at, 0, 0x7fffffff, False, type, &type_ret, &format_ret, &nitems_ret, &bafter_ret, &prop_value); - /* Send back resultcount */ - if (num_results) *num_results = nitems_ret; + // Send back resultcount + // it look some version of gcc doesn't do the cast. so we force it. + if (num_results) *num_results = (int)nitems_ret; if (result == Success && prop_value) return prop_value; else return 0;
M src/taskbar/task.csrc/taskbar/task.c

@@ -221,7 +221,7 @@ }

} data = server_get_property (tsk->win, server.atom._NET_WM_ICON, XA_CARDINAL, &i); - if (data && i) { + if (data) { // get ARGB icon int w, h; long *tmp_data;
M src/util/area.csrc/util/area.c

@@ -31,25 +31,38 @@ #include "server.h"

#include "panel.h" -/* -// TODO : layering & drawing loop -1) browse tree and resize SIZE_BY_CONTENT node - - children node are resized before its parent - - if 'size' changed then 'resize = 1' on the parent -2) browse tree and resize SIZE_BY_LAYOUT node - - parent node is resized before its children - - if 'size' changed then 'resize = 1' on childs with SIZE_BY_LAYOUT -3) calculate posx of all objects -4) redraw needed objects -*/ +/************************************************************ + * Layering & drawing loop of tint2 + * + * Areas in tint2 are similar to widgets in a GUI. + * Areas (task, clock, systray, taskbar,...) are nodes in a tree. + * The position of each Area is defined by parent's position and brothers on the left. + * + * !!! This design is experimental and not yet complete !!!!!!!!!!!!! + * + * 1) browse tree and resize SIZE_BY_CONTENT node + * - children node are resized before its parent + * - if 'size' changed then 'resize = 1' on the parent + * 2) browse tree and resize SIZE_BY_LAYOUT node + * - parent node is resized before its children + * - if 'size' changed then 'resize = 1' on childs with SIZE_BY_LAYOUT + * 3) calculate posx of all objects + * - parent's position is calculated before children's position + * 4) redraw needed objects + ************************************************************/ + +void size_by_content (Area *a); +void size_by_layout (Area *a); + void refresh (Area *a) { // don't draw and resize hide objects if (!a->on_screen) return; - size(a); - //size_by_content(a); + //size(a); + size_by_content(a); + size_by_layout(a); // don't draw transparent objects (without foreground and without background) if (a->redraw) {

@@ -93,7 +106,7 @@ a->_resize(a);

} } -// browse tree and resize SIZE_BY_CONTENT node + void size_by_content (Area *a) { // children node are resized before its parent

@@ -106,27 +119,32 @@ if (a->resize && a->size_mode == SIZE_BY_CONTENT) {

a->resize = 0; // if 'size' changed then 'resize = 1' on the parent - a->_resize(a); - ((Area*)a->parent)->resize = 1; + if (a->_resize) { + a->_resize(a); + ((Area*)a->parent)->resize = 1; + } } } -// browse tree and resize SIZE_BY_LAYOUT node void size_by_layout (Area *a) { // parent node is resized before its children - // calculate current area's size + GSList *l; if (a->resize && a->size_mode == SIZE_BY_LAYOUT) { a->resize = 0; - // if 'size' changed then 'resize = 1' on the parent - //if (a->_resize(a)) - //a->parent->resize = 1; + // if 'size' changed then 'resize = 1' on childs with SIZE_BY_LAYOUT + if (a->_resize) { + a->_resize(a); + for (l = a->list; l ; l = l->next) { + if (((Area*)l->data)->size_mode == SIZE_BY_LAYOUT) + ((Area*)l->data)->resize = 1; + } + } } - GSList *l; for (l = a->list; l ; l = l->next) size_by_layout(l->data); }