+int signal_pending;
+// --------------------------------------------------
+// mouse events
+int mouse_middle;
+int mouse_right;
+int mouse_scroll_up;
+int mouse_scroll_down;
+int mouse_tilt_left;
+int mouse_tilt_right;
+
+int panel_mode;
+int wm_menu;
+int panel_dock=0; // default not in the dock
+int panel_position;
+int panel_horizontal;
+int panel_refresh;
+
+Task *task_active;
+Task *task_drag;
+GSList *urgent_list;
+int max_tick_urgent;
+
+// panel's initial config
+Panel panel_config;
+// panels (one panel per monitor)
+Panel *panel1 = 0;
+int nb_panel = 0;
+
+Imlib_Image default_icon = NULL;
+
+
+
+void init_panel()
+{
+ int i, old_nb_panel;
+ Panel *new_panel, *p;
+
+ init_tooltip();
+ init_systray();
+ init_clock();
+#ifdef ENABLE_BATTERY
+ init_battery();
+#endif
+
+ cleanup_taskbar();
+ for (i=0 ; i < nb_panel ; i++) {
+ free_area(&panel1[i].area);
+ if (panel1[i].temp_pmap) {
+ XFreePixmap(server.dsp, panel1[i].temp_pmap);
+ panel1[i].temp_pmap = 0;
+ }
+ }
+
+ // number of panels
+ old_nb_panel = nb_panel;
+ if (panel_config.monitor >= 0)
+ nb_panel = 1;
+ else
+ nb_panel = server.nb_monitor;
+
+ // freed old panels
+ for (i=nb_panel ; i < old_nb_panel ; i++) {
+ if (panel1[i].main_win) {
+ XDestroyWindow(server.dsp, panel1[i].main_win);
+ panel1[i].main_win = 0;
+ }
+ }
+
+ // alloc & init new panel
+ Window old_win;
+ if (nb_panel != old_nb_panel)
+ new_panel = realloc(panel1, nb_panel * sizeof(Panel));
+ else
+ new_panel = panel1;
+ for (i=0 ; i < nb_panel ; i++) {
+ old_win = new_panel[i].main_win;
+ memcpy(&new_panel[i], &panel_config, sizeof(Panel));
+ new_panel[i].main_win = old_win;
+ }
+
+ fprintf(stderr, "tint2 : nb monitor %d, nb monitor used %d, nb desktop %d\n", server.nb_monitor, nb_panel, server.nb_desktop);
+ for (i=0 ; i < nb_panel ; i++) {
+ p = &new_panel[i];
+
+ if (panel_config.monitor < 0)
+ p->monitor = i;
+ p->area.parent = p;
+ p->area.panel = p;
+ p->area.on_screen = 1;
+ p->area.resize = 1;
+ p->area._resize = resize_panel;
+ p->g_taskbar.parent = p;
+ p->g_taskbar.panel = p;
+ p->g_task.area.panel = p;
+ init_panel_size_and_position(p);
+
+ // add childs
+ if (clock_enabled) {
+ init_clock_panel(p);
+ p->area.list = g_slist_append(p->area.list, &p->clock);
+ }
+#ifdef ENABLE_BATTERY
+ if (battery_enabled) {
+ init_battery_panel(p);
+ p->area.list = g_slist_append(p->area.list, &p->battery);
+ }
+#endif
+ // systray only on first panel
+ if (systray.area.on_screen && i == 0) {
+ init_systray_panel(p);
+ p->area.list = g_slist_append(p->area.list, &systray);
+ refresh_systray = 1;
+ }
+
+ if (i >= old_nb_panel) {
+ // new panel : catch some events
+ long event_mask = ExposureMask|ButtonPressMask|ButtonReleaseMask;
+ if (g_tooltip.enabled)
+ event_mask |= PointerMotionMask|LeaveWindowMask;
+ XSetWindowAttributes att = { ParentRelative, 0L, 0, 0L, 0, 0, Always, 0L, 0L, False, event_mask, NoEventMask, False, 0, 0 };
+ p->main_win = XCreateWindow(server.dsp, server.root_win, p->posx, p->posy, p->area.width, p->area.height, 0, server.depth, InputOutput, CopyFromParent, CWEventMask, &att);
+ }
+ else {
+ // old panel
+ XMoveResizeWindow(server.dsp, p->main_win, p->posx, p->posy, p->area.width, p->area.height);
+ }
+
+ //printf("panel %d : %d, %d, %d, %d\n", i, p->posx, p->posy, p->area.width, p->area.height);
+ set_panel_properties(p);
+ set_panel_background(p);
+ if (i >= old_nb_panel) {
+ // map new panel
+ XMapWindow (server.dsp, p->main_win);
+ }
+ }
+
+ panel1 = new_panel;
+ panel_refresh = 1;
+ init_taskbar();
+ visible_object();
+ task_refresh_tasklist();
+ active_task();
+}
+
+
+void init_panel_size_and_position(Panel *panel)