-load_config:
- i = 0;
- c = getopt (argc, argv, "c:");
- init_config();
- if (c != -1) {
- i = config_read_file (optarg);
- c = getopt (argc, argv, "j:");
- if (c != -1) {
- // usage: tint2 [-c] <config_file> -j <file> for internal use
- printf("file %s\n", optarg);
- cleanup();
- exit(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);
+ }
+ for (i=0 ; i < nb_panel ; i++) {
+ panel = &panel1[i];
+
+ if (panel->is_hidden) {
+ XCopyArea(server.dsp, panel->hidden_pixmap, panel->main_win, server.gc, 0, 0, panel->hidden_width, panel->hidden_height, 0, 0);
+ XSetWindowBackgroundPixmap(server.dsp, panel->main_win, panel->hidden_pixmap);
+ }
+ else {
+ if (panel->temp_pmap) XFreePixmap(server.dsp, panel->temp_pmap);
+ panel->temp_pmap = XCreatePixmap(server.dsp, server.root_win, panel->area.width, panel->area.height, server.depth);
+ refresh(&panel->area);
+ XCopyArea(server.dsp, panel->temp_pmap, panel->main_win, server.gc, 0, 0, panel->area.width, panel->area.height, 0, 0);
+ }
+ }
+ XFlush (server.dsp);
+
+ panel = (Panel*)systray.area.panel;
+ if (refresh_systray && !panel->is_hidden) {
+ refresh_systray = 0;
+ // tint2 doen't draw systray icons. it just redraw background.
+ XSetWindowBackgroundPixmap (server.dsp, panel->main_win, panel->temp_pmap);
+ // force icon's refresh
+ refresh_systray_icon();
+ }