X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Ftint.c;h=01db88cc73ce580f179c522151e7a6ccff0ef741;hb=2e63fd9929fd2c261ad47f4d995dc99722177954;hp=cd0b2b87df8e2c3183fd262955f704d3654c5041;hpb=9becd8bd3b513a0bbfe778b2ef88f6d598fdf03a;p=chaz%2Ftint2 diff --git a/src/tint.c b/src/tint.c index cd0b2b8..01db88c 100644 --- a/src/tint.c +++ b/src/tint.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include @@ -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]); @@ -72,7 +73,6 @@ void init (int argc, char *argv[]) snapshot_path = strdup(argv[i]); } } - // Set signal handler struct sigaction sa = { .sa_handler = signal_handler }; sigaction(SIGUSR1, &sa, 0); @@ -88,11 +88,13 @@ void init (int argc, char *argv[]) sigaddset(&block_mask, SIGUSR1); sigprocmask(SIG_BLOCK, &block_mask, 0); - // set global data memset(&server, 0, sizeof(Server_global)); memset(&systray, 0, sizeof(Systraybar)); +} +void init_X11() +{ server.dsp = XOpenDisplay (NULL); if (!server.dsp) { fprintf(stderr, "tint2 exit : could not open display.\n"); @@ -102,8 +104,6 @@ void init (int argc, char *argv[]) server.screen = DefaultScreen (server.dsp); server.root_win = RootWindow(server.dsp, server.screen); server.desktop = server_get_current_desktop (); - XGCValues gcv; - server.gc = XCreateGC (server.dsp, server.root_win, (unsigned long)0, &gcv); server_init_visual(); XSetErrorHandler ((XErrorHandler) server_catch_error); @@ -120,6 +120,7 @@ void init (int argc, char *argv[]) gchar *path; const gchar * const *data_dirs; data_dirs = g_get_system_data_dirs (); + int i; for (i = 0; data_dirs[i] != NULL; i++) { path = g_build_filename(data_dirs[i], "tint2", "default_icon.png", NULL); if (g_file_test (path, G_FILE_TEST_EXISTS)) @@ -151,8 +152,7 @@ void cleanup() if (config_path) g_free(config_path); if (snapshot_path) g_free(snapshot_path); - if (server.monitor) free(server.monitor); - XFreeGC(server.dsp, server.gc); + cleanup_server(); XCloseDisplay(server.dsp); } @@ -612,9 +612,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; } @@ -683,9 +684,8 @@ int main (int argc, char *argv[]) const struct timespec* timeout; init (argc, argv); - - i = 0; init_config(); + i = 0; if (config_path) i = config_read_file (config_path); else @@ -695,6 +695,8 @@ int main (int argc, char *argv[]) cleanup(); exit(1); } + + init_X11(); init_panel(); cleanup_config(); if (snapshot_path) { @@ -703,6 +705,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); @@ -809,7 +813,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; } @@ -825,6 +829,11 @@ int main (int argc, char *argv[]) dnd_message(&e.xclient); } break; + + default: + if (e.type == XDamageNotify+damage_event) + // TODO: update only the damaged icon, not all of them + systray.area.redraw = 1; } } }