all repos — tint2 @ 5f82ef4d3b2d24968b7aecfb010bacb508d76003

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

Refresh sticky panel status on desktop change (workaround for issue #555)
o9000 mrovi9000@gmail.com
commit

5f82ef4d3b2d24968b7aecfb010bacb508d76003

parent

d1b959818e95591d7884a5cdbfe65491ccedf5d5

3 files changed, 32 insertions(+), 24 deletions(-)

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

@@ -570,6 +570,34 @@ }

initialize_positions(&p->area, 0); } +void place_panel_all_desktops(Panel *p) +{ + long val = ALL_DESKTOPS; + XChangeProperty(server.display, + p->main_win, + server.atom._NET_WM_DESKTOP, + XA_CARDINAL, + 32, + PropModeReplace, + (unsigned char *)&val, + 1); + + Atom state[4]; + state[0] = server.atom._NET_WM_STATE_SKIP_PAGER; + state[1] = server.atom._NET_WM_STATE_SKIP_TASKBAR; + state[2] = server.atom._NET_WM_STATE_STICKY; + state[3] = panel_layer == BOTTOM_LAYER ? server.atom._NET_WM_STATE_BELOW : server.atom._NET_WM_STATE_ABOVE; + int num_atoms = panel_layer == NORMAL_LAYER ? 3 : 4; + XChangeProperty(server.display, + p->main_win, + server.atom._NET_WM_STATE, + XA_ATOM, + 32, + PropModeReplace, + (unsigned char *)state, + num_atoms); +} + void set_panel_properties(Panel *p) { XStoreName(server.display, p->main_win, panel_window_name);

@@ -608,30 +636,7 @@ PropModeReplace,

(unsigned char *)&val, 1); - val = ALL_DESKTOPS; - XChangeProperty(server.display, - p->main_win, - server.atom._NET_WM_DESKTOP, - XA_CARDINAL, - 32, - PropModeReplace, - (unsigned char *)&val, - 1); - - Atom state[4]; - state[0] = server.atom._NET_WM_STATE_SKIP_PAGER; - state[1] = server.atom._NET_WM_STATE_SKIP_TASKBAR; - state[2] = server.atom._NET_WM_STATE_STICKY; - state[3] = panel_layer == BOTTOM_LAYER ? server.atom._NET_WM_STATE_BELOW : server.atom._NET_WM_STATE_ABOVE; - int num_atoms = panel_layer == NORMAL_LAYER ? 3 : 4; - XChangeProperty(server.display, - p->main_win, - server.atom._NET_WM_STATE, - XA_ATOM, - 32, - PropModeReplace, - (unsigned char *)state, - num_atoms); + place_panel_all_desktops(p); XWMHints wmhints; memset(&wmhints, 0, sizeof(wmhints));
M src/panel.hsrc/panel.h

@@ -154,6 +154,7 @@ gboolean resize_panel(void *obj);

void render_panel(Panel *panel); void set_panel_items_order(Panel *p); +void place_panel_all_desktops(Panel *p); void set_panel_properties(Panel *p); // draw background panel
M src/tint.csrc/tint.c

@@ -953,6 +953,7 @@ cleanup_taskbar();

init_taskbar(); for (int i = 0; i < num_panels; i++) { init_taskbar_panel(&panels[i]); + place_panel_all_desktops(&panels[i]); set_panel_items_order(&panels[i]); update_taskbar_visibility(&panels[i]); panels[i].area.resize_needed = 1;

@@ -963,6 +964,7 @@ panel_refresh = TRUE;

} else if (old_desktop != server.desktop) { for (int i = 0; i < num_panels; i++) { Panel *panel = &panels[i]; + place_panel_all_desktops(panel); set_taskbar_state(&panel->taskbar[old_desktop], TASKBAR_NORMAL); set_taskbar_state(&panel->taskbar[server.desktop], TASKBAR_ACTIVE); // check ALL_DESKTOPS task => resize taskbar