static void monitors_apply_config (Plugin *p) { ENTER; MonitorsPlugin *mp; mp = (MonitorsPlugin *) p->priv; int i; int current_n_monitors = 0; start: for (i = 0; i < N_MONITORS; i++) { if (mp->displayed_monitors[i]) current_n_monitors++; if (mp->displayed_monitors[i] && !mp->monitors[i]) { /* We've just activated monitor<i> */ mp->monitors[i] = monitors_add_monitor(p, mp, update_functions[i], tooltip_update[i], colors[i]); /* * It is probably best for users if their monitors are always * displayed in the same order : the CPU monitor always on the left, * the RAM monitor always on the right of the CPU monitor (if the * CPU monitor is displayed), etc. That's why we do not just use * gtk_box_pack_start/gtk_box_pack_end, and use * gtk_box_reorder_child. */ gtk_box_reorder_child(GTK_BOX(p->pwid), mp->monitors[i]->da,current_n_monitors-1); } else if (!mp->displayed_monitors[i] && mp->monitors[i]) { /* We've just removed monitor<i> */ gtk_container_remove(GTK_CONTAINER(p->pwid), mp->monitors[i]->da); monitor_free(mp->monitors[i]); mp->monitors[i] = NULL; } if (mp->monitors[i] && strncmp(mp->monitors[i]->color, colors[i], COLOR_SIZE) != 0) { /* We've changed the color */ monitor_set_foreground_color(p, mp->monitors[i], colors[i]); } } /* Workaround meant to prevent users to display no monitor at all. * FIXME : write something clean. When there is only one monitor displayed, * its toggle button should not be clickable in the prefs. */ if (current_n_monitors == 0) { mp->displayed_monitors[0] = 1; goto start; } RET(); }
/****************************************************************************** * Monitor functions * ******************************************************************************/ static Monitor* monitor_init(Plugin *p, Monitor *m, gchar *color) { ENTER; m->da = gtk_drawing_area_new(); gtk_widget_set_size_request(m->da, DEFAULT_WIDTH, PANEL_HEIGHT_DEFAULT); gtk_widget_add_events(m->da, GDK_BUTTON_PRESS_MASK); monitor_set_foreground_color(p, m, color); /* Signals */ g_signal_connect(G_OBJECT(m->da), "configure-event", G_CALLBACK(configure_event), (gpointer) m); g_signal_connect (G_OBJECT(m->da), "expose-event", G_CALLBACK(expose_event), (gpointer) m); g_signal_connect(G_OBJECT(m->da), "button-press-event", G_CALLBACK(plugin_button_press_event), p); return m; }
static gboolean monitors_apply_config (gpointer user_data) { ENTER; GtkWidget *p = user_data; MonitorsPlugin *mp; mp = lxpanel_plugin_get_data(p); int i; int current_n_monitors = 0; start: for (i = 0; i < N_MONITORS; i++) { if (mp->displayed_monitors[i]) current_n_monitors++; if (mp->displayed_monitors[i] && !mp->monitors[i]) { /* We've just activated monitor<i> */ mp->monitors[i] = monitors_add_monitor(p, mp, update_functions[i], tooltip_update[i], colors[i]); /* * It is probably best for users if their monitors are always * displayed in the same order : the CPU monitor always on the left, * the RAM monitor always on the right of the CPU monitor (if the * CPU monitor is displayed), etc. That's why we do not just use * gtk_box_pack_start/gtk_box_pack_end, and use * gtk_box_reorder_child. */ gtk_box_reorder_child(GTK_BOX(p), mp->monitors[i]->da,current_n_monitors-1); } else if (!mp->displayed_monitors[i] && mp->monitors[i]) { /* We've just removed monitor<i> */ gtk_widget_destroy(mp->monitors[i]->da); monitor_free(mp->monitors[i]); mp->monitors[i] = NULL; } if (mp->monitors[i] && strncmp(mp->monitors[i]->color, colors[i], COLOR_SIZE) != 0) { /* We've changed the color */ monitor_set_foreground_color(mp, mp->monitors[i], colors[i]); } } /* Workaround meant to prevent users to display no monitor at all. * FIXME : write something clean. When there is only one monitor displayed, * its toggle button should not be clickable in the prefs. */ if (current_n_monitors == 0) { mp->displayed_monitors[0] = 1; goto start; } config_group_set_int(mp->settings, "DisplayCPU", mp->displayed_monitors[CPU_POSITION]); config_group_set_int(mp->settings, "DisplayRAM", mp->displayed_monitors[MEM_POSITION]); config_group_set_string(mp->settings, "Action", mp->action); config_group_set_string(mp->settings, "CPUColor", mp->monitors[CPU_POSITION] ? colors[CPU_POSITION] : NULL); config_group_set_string(mp->settings, "RAMColor", mp->monitors[MEM_POSITION] ? colors[MEM_POSITION] : NULL); RET(FALSE); }