]> Dogcows Code - chaz/tint2/blobdiff - src/tint.c
*fix* more systray modifications for nice looking icons in real transparency mode
[chaz/tint2] / src / tint.c
index 987003cacd9a75ee0ae430dca78a9769d625dcbf..8f17653145ac46989eee7373675a6f54dbcb441b 100644 (file)
@@ -27,6 +27,7 @@
 #include <X11/Xutil.h>
 #include <X11/Xatom.h>
 #include <X11/Xlocale.h>
+#include <X11/extensions/Xdamage.h>
 #include <Imlib2.h>
 #include <signal.h>
 
@@ -61,7 +62,7 @@ void init (int argc, char *argv[])
                        printf("tint2 version 0.8\n");
                        exit(0);
                }
-               if (!strcmp(argv[i], "-c"))     {
+               if (!strcmp(argv[i], "-c")) {
                        i++;
                        if (i < argc)
                                config_path = strdup(argv[i]);
@@ -91,7 +92,7 @@ void init (int argc, char *argv[])
 
        // set global data
        memset(&server, 0, sizeof(Server_global));
-       memset(&systray, 0, sizeof(Systraybar));
+//     memset(&systray, 0, sizeof(Systraybar));
 
        server.dsp = XOpenDisplay (NULL);
        if (!server.dsp) {
@@ -609,9 +610,10 @@ void event_configure_notify (Window win)
        GSList *l;
        for (l = systray.list_icons; l ; l = l->next) {
                traywin = (TrayWindow*)l->data;
-               if (traywin->id == win) {
+               if (traywin->tray_id == win) {
                        //printf("move tray %d\n", traywin->x);
                        XMoveResizeWindow(server.dsp, traywin->id, traywin->x, traywin->y, traywin->width, traywin->height);
+                       XResizeWindow(server.dsp, traywin->tray_id, traywin->width, traywin->height);
                        panel_refresh = 1;
                        return;
                }
@@ -679,10 +681,8 @@ int main (int argc, char *argv[])
        GSList *it;
        const struct timespec* timeout;
 
-       init (argc, argv);
-
-       i = 0;
        init_config();
+       i = 0;
        if (config_path)
                i = config_read_file (config_path);
        else
@@ -692,6 +692,9 @@ int main (int argc, char *argv[])
                cleanup();
                exit(1);
        }
+
+       init (argc, argv);
+
        init_panel();
        cleanup_config();
        if (snapshot_path) {
@@ -700,6 +703,8 @@ int main (int argc, char *argv[])
                exit(0);
        }
 
+       int damage_event, damage_error;
+       XDamageQueryExtension(server.dsp, &damage_event, &damage_error);
        x11_fd = ConnectionNumber(server.dsp);
        XSync(server.dsp, False);
 
@@ -806,7 +811,7 @@ int main (int argc, char *argv[])
                                                if (e.xany.window == g_tooltip.window || !systray.area.on_screen)
                                                        break;
                                                for (it = systray.list_icons; it; it = g_slist_next(it)) {
-                                                       if (((TrayWindow*)it->data)->id == e.xany.window) {
+                                                       if (((TrayWindow*)it->data)->tray_id == e.xany.window) {
                                                                remove_icon((TrayWindow*)it->data);
                                                                break;
                                                        }
@@ -822,6 +827,10 @@ int main (int argc, char *argv[])
                                                        dnd_message(&e.xclient);
                                                }
                                                break;
+
+                                       default:
+                                               if (e.type == XDamageNotify+damage_event)
+                                                       systray.area.redraw = 1;
                                }
                        }
                }
This page took 0.025003 seconds and 4 git commands to generate.