all repos — tint2 @ c3b63e8c45c8f9deac20de5fc8828159e5060784

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

fixed segfault with multi-monitor

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

c3b63e8c45c8f9deac20de5fc8828159e5060784

parent

7f05ebe6acb4b6a1e0696798e7af107d98fefd5b

1 files changed, 19 insertions(+), 11 deletions(-)

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

@@ -74,6 +74,10 @@

cleanup_taskbar(); for (i=0 ; i < nb_panel ; i++) { free_area(&panel1[i].area); + if (panel1[i].temp_pmap) { + XFreePixmap(server.dsp, panel1[i].temp_pmap); + panel1[i].temp_pmap = 0; + } } // alloc panels (one monitor or all monitors)

@@ -82,26 +86,29 @@ if (panel_config.monitor >= 0)

nb_panel = 1; else nb_panel = server.nb_monitor; - fprintf(stderr, "tint2 : nb monitor %d, nb desktop %d\n", nb_panel, server.nb_desktop); -/* if (nb_panel < old_nb_panel) { + if (nb_panel < old_nb_panel) { // freed old panels for (i=nb_panel ; i < old_nb_panel ; i++) { + if (panel1[i].main_win) + XDestroyWindow(server.dsp, panel1[i].main_win); } - }*/ - - if (nb_panel != old_nb_panel) + new_panel = realloc(panel1, nb_panel * sizeof(Panel)); + } + else if (nb_panel > old_nb_panel) { new_panel = realloc(panel1, nb_panel * sizeof(Panel)); + // init new panel + for (i=old_nb_panel ; i < nb_panel ; i++) { + memcpy(&new_panel[i], &panel_config, sizeof(Panel)); + } + } else new_panel = panel1; + fprintf(stderr, "tint2 : nb monitor %d, nb desktop %d\n", nb_panel, server.nb_desktop); for (i=0 ; i < nb_panel ; i++) { p = &new_panel[i]; - if (i >= old_nb_panel) { - // new panel - memcpy(p, &panel_config, sizeof(Panel)); - } p->monitor = i; p->area.parent = p; p->area.panel = p;

@@ -138,7 +145,7 @@ }

if (i >= old_nb_panel) { // new panel - printf("new panel %d, %d, %d, %d\n", p->posx, p->posy, p->area.width, p->area.height); + printf("new panel %d : %d, %d, %d, %d\n", i, p->posx, p->posy, p->area.width, p->area.height); // Catch some events long event_mask = ExposureMask|ButtonPressMask|ButtonReleaseMask;

@@ -154,7 +161,7 @@ XMapWindow (server.dsp, p->main_win);

} else { // old panel - printf("old panel %d, %d, %d, %d\n", p->posx, p->posy, p->area.width, p->area.height); + printf("old panel %d : %d, %d, %d, %d\n", i, p->posx, p->posy, p->area.width, p->area.height); XMoveResizeWindow(server.dsp, p->main_win, p->posx, p->posy, p->area.width, p->area.height); set_panel_background(p); }

@@ -162,6 +169,7 @@ }

panel1 = new_panel; panel_refresh = 1; + refresh_systray = 1; init_taskbar(); visible_object(); task_refresh_tasklist();