]> Dogcows Code - chaz/tint2/blobdiff - src/tint.c
cleanup
[chaz/tint2] / src / tint.c
index c95c3171a2e823063a2db8c674029dc7aa722283..0b9a7197a0e19239a3fc2cd599293ad33d5227a0 100644 (file)
@@ -636,6 +636,7 @@ void dnd_message(XClientMessageEvent *e)
 int main (int argc, char *argv[])
 {
        XEvent e;
+       XClientMessageEvent *ev;
        fd_set fdset;
        int x11_fd, i;
        Panel *panel;
@@ -677,6 +678,8 @@ int main (int argc, char *argv[])
                        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);
@@ -700,7 +703,6 @@ int main (int argc, char *argv[])
                        panel = (Panel*)systray.area.panel;
                        if (refresh_systray && !panel->is_hidden) {
                                refresh_systray = 0;
-                               panel = (Panel*)systray.area.panel;
                                // tint2 doen't draw systray icons. it just redraw background.
                                XSetWindowBackgroundPixmap (server.dsp, panel->main_win, panel->temp_pmap);
                                // force icon's refresh
@@ -781,6 +783,11 @@ int main (int argc, char *argv[])
                                                break;
                                        case UnmapNotify:
                                        case DestroyNotify:
+                                               if (e.xany.window == server.composite_manager) {
+                                                       // TODO: Stop real_transparency
+                                                       //signal_pending = SIGUSR2;
+                                                       break;
+                                               }
                                                if (e.xany.window == g_tooltip.window || !systray.area.on_screen)
                                                        break;
                                                for (it = systray.list_icons; it; it = g_slist_next(it)) {
@@ -792,6 +799,17 @@ int main (int argc, char *argv[])
                                        break;
 
                                        case ClientMessage:
+                                               ev = &e;
+                                               if (ev->data.l[1] == server.atom._NET_WM_CM_S0) {
+                                                       if (ev->data.l[2] == None)
+                                                               // TODO: Stop real_transparency
+                                                               //signal_pending = SIGUSR2;
+                                                               ;
+                                                       else
+                                                               // TODO: Start real_transparency
+                                                               //signal_pending = SIGUSR2;
+                                                               ;
+                                               }
                                                if (!systray.area.on_screen) break;
                                                if (e.xclient.message_type == server.atom._NET_SYSTEM_TRAY_OPCODE && e.xclient.format == 32 && e.xclient.window == net_sel_win) {
                                                        net_message(&e.xclient);
This page took 0.022066 seconds and 4 git commands to generate.