/* * Copyright (c) 2003 Riccardo Persichetti * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include "cpu.h" #include "memswap.h" #include "uptime.h" /* for xml: */ static gchar *MONITOR_ROOT[] = { "SL_Cpu", "SL_Mem", "SL_Swap", "SL_Uptime" }; static GtkTooltips *tooltips = NULL; static gchar *DEFAULT_TEXT[] = { "cpu", "mem", "swap" }; static gchar *DEFAULT_COLOR[] = { "#0000c0", "#00c000", "#f0f000" }; #define UPDATE_TIMEOUT 250 #define MAX_LENGTH 10 #define BORDER 8 enum { CPU_MONITOR, MEM_MONITOR, SWAP_MONITOR }; typedef struct { gboolean enabled; gboolean use_label; GdkColor color; gchar *label_text; } t_monitor_options; typedef struct { GtkWidget *box; GtkWidget *label; GtkWidget *status; GtkWidget *ebox; gulong history[4]; gulong value_read; t_monitor_options options; /*options*/ GtkWidget *opt_enabled; GtkBox *opt_vbox; GtkWidget *opt_entry; GtkBox *opt_hbox; GtkWidget *opt_use_label; GtkWidget *opt_button; GtkWidget *opt_da; } t_monitor; typedef struct { GtkWidget *box; GtkWidget *label_up; GtkWidget *label_down; GtkWidget *ebox; gulong value_read; gboolean enabled; /*options*/ GtkWidget *opt_enabled; } t_uptime_monitor; typedef struct { XfcePanelPlugin *plugin; GtkWidget *ebox; GtkWidget *box; guint timeout_id; t_monitor *monitor[3]; t_uptime_monitor *uptime; /* options dialog */ GtkWidget *opt_dialog; } t_global_monitor; static gint update_monitors(t_global_monitor *global) { gchar caption[128]; gulong mem, swap, MTotal, MUsed, STotal, SUsed; gint count, days, hours, mins; global->monitor[0]->history[0] = read_cpuload(); read_memswap(&mem, &swap, &MTotal, &MUsed, &STotal, &SUsed); global->monitor[1]->history[0] = mem; global->monitor[2]->history[0] = swap; global->uptime->value_read = read_uptime(); for(count = 0; count < 3; count++) { if (global->monitor[count]->options.enabled) { if (global->monitor[count]->history[0] > 100) global->monitor[count]->history[0] = 100; else if (global->monitor[count]->history[0] < 0) global->monitor[count]->history[0] = 0; global->monitor[count]->value_read = (global->monitor[count]->history[0] + global->monitor[count]->history[1] + global->monitor[count]->history[2] + global->monitor[count]->history[3]) / 4; global->monitor[count]->history[3] = global->monitor[count]->history[2]; global->monitor[count]->history[2] = global->monitor[count]->history[1]; global->monitor[count]->history[1] = global->monitor[count]->history[0]; gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(global->monitor[count]->status), global->monitor[count]->value_read / 100.0); } } if (global->monitor[0]->options.enabled) { g_snprintf(caption, sizeof(caption), _("System Load: %ld%%"), global->monitor[0]->value_read); gtk_tooltips_set_tip(tooltips, GTK_WIDGET(global->monitor[0]->ebox), caption, NULL); } if (global->monitor[1]->options.enabled) { g_snprintf(caption, sizeof(caption), _("Memory: %ldMB of %ldMB used"), MUsed >> 10 , MTotal >> 10); gtk_tooltips_set_tip(tooltips, GTK_WIDGET(global->monitor[1]->ebox), caption, NULL); } if (global->monitor[2]->options.enabled) { if (STotal) g_snprintf(caption, sizeof(caption), _("Swap: %ldMB of %ldMB used"), SUsed >> 10, STotal >> 10); else g_snprintf(caption, sizeof(caption), _("No swap")); gtk_tooltips_set_tip(tooltips, GTK_WIDGET(global->monitor[2]->ebox), caption, NULL); } if (global->uptime->enabled) { days = global->uptime->value_read / 86400; hours = (global->uptime->value_read / 3600) % 24; mins = (global->uptime->value_read / 60) % 60; g_snprintf(caption, sizeof(caption), _("%d days"), days); gtk_label_set_text(GTK_LABEL(global->uptime->label_up), caption); g_snprintf(caption, sizeof(caption), "%d:%02d", hours, mins); gtk_label_set_text(GTK_LABEL(global->uptime->label_down), caption); g_snprintf(caption, sizeof(caption), _("Uptime:")); gtk_tooltips_set_tip(tooltips, GTK_WIDGET(global->uptime->ebox), caption, NULL); } return TRUE; } static void monitor_set_orientation (XfcePanelPlugin *plugin, GtkOrientation orientation, t_global_monitor *global) { GtkRcStyle *rc; gint count; gtk_widget_hide(GTK_WIDGET(global->ebox)); if (global->box) gtk_container_remove(GTK_CONTAINER(global->ebox), GTK_WIDGET(global->box)); if (orientation == GTK_ORIENTATION_HORIZONTAL) { global->box = gtk_hbox_new(FALSE, 0); } else { global->box = gtk_vbox_new(FALSE, 0); } gtk_widget_show(global->box); for(count = 0; count < 3; count++) { global->monitor[count]->label = gtk_label_new(global->monitor[count]->options.label_text); gtk_widget_show(global->monitor[count]->label); global->monitor[count]->status = GTK_WIDGET(gtk_progress_bar_new()); if (orientation == GTK_ORIENTATION_HORIZONTAL) { global->monitor[count]->box = GTK_WIDGET(gtk_hbox_new(FALSE, 0)); gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(global->monitor[count]->status), GTK_PROGRESS_BOTTOM_TO_TOP); } else { global->monitor[count]->box = GTK_WIDGET(gtk_vbox_new(FALSE, 0)); gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(global->monitor[count]->status), GTK_PROGRESS_LEFT_TO_RIGHT); } gtk_box_pack_start(GTK_BOX(global->monitor[count]->box), GTK_WIDGET(global->monitor[count]->label), FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(global->monitor[count]->box), BORDER / 2); gtk_widget_show(GTK_WIDGET(global->monitor[count]->box)); global->monitor[count]->ebox = gtk_event_box_new(); gtk_widget_show(global->monitor[count]->ebox); gtk_container_add(GTK_CONTAINER(global->monitor[count]->ebox), GTK_WIDGET(global->monitor[count]->box)); rc = gtk_widget_get_modifier_style(GTK_WIDGET(global->monitor[count]->status)); if (!rc) { rc = gtk_rc_style_new(); } if (rc) { rc->color_flags[GTK_STATE_PRELIGHT] |= GTK_RC_BG; rc->bg[GTK_STATE_PRELIGHT] = global->monitor[count]->options.color; } gtk_widget_modify_style(GTK_WIDGET(global->monitor[count]->status), rc); gtk_widget_show(GTK_WIDGET(global->monitor[count]->status)); gtk_box_pack_start(GTK_BOX(global->monitor[count]->box), GTK_WIDGET(global->monitor[count]->status), FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(global->box), GTK_WIDGET(global->monitor[count]->ebox), FALSE, FALSE, 0); } global->uptime->ebox = gtk_event_box_new(); gtk_widget_show(global->uptime->ebox); global->uptime->box = GTK_WIDGET(gtk_vbox_new(FALSE, 0)); gtk_container_set_border_width(GTK_CONTAINER(global->uptime->box), BORDER / 2); gtk_widget_show(GTK_WIDGET(global->uptime->box)); gtk_container_add(GTK_CONTAINER(global->uptime->ebox), GTK_WIDGET(global->uptime->box)); global->uptime->label_up = gtk_label_new(""); gtk_widget_show(global->uptime->label_up); gtk_box_pack_start(GTK_BOX(global->uptime->box), GTK_WIDGET(global->uptime->label_up), FALSE, FALSE, 0); global->uptime->label_down = gtk_label_new(""); gtk_widget_show(global->uptime->label_down); gtk_box_pack_start(GTK_BOX(global->uptime->box), GTK_WIDGET(global->uptime->label_down), FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(global->box), GTK_WIDGET(global->uptime->ebox), FALSE, FALSE, 0); gtk_container_add(GTK_CONTAINER(global->ebox), GTK_WIDGET(global->box)); gtk_widget_show(GTK_WIDGET(global->ebox)); update_monitors (global); } static t_global_monitor * monitor_control_new(XfcePanelPlugin *plugin) { int count; t_global_monitor *global; tooltips = gtk_tooltips_new (); g_object_ref (tooltips); gtk_object_sink (GTK_OBJECT (tooltips)); global = g_new(t_global_monitor, 1); global->plugin = plugin; global->timeout_id = 0; global->ebox = gtk_event_box_new(); gtk_widget_show(global->ebox); global->box = NULL; xfce_panel_plugin_add_action_widget (plugin, global->ebox); for(count = 0; count < 3; count++) { global->monitor[count] = g_new(t_monitor, 1); global->monitor[count]->options.label_text = g_strdup(DEFAULT_TEXT[count]); gdk_color_parse(DEFAULT_COLOR[count], &global->monitor[count]->options.color); global->monitor[count]->options.use_label = TRUE; global->monitor[count]->options.enabled = TRUE; global->monitor[count]->history[0] = 0; global->monitor[count]->history[1] = 0; global->monitor[count]->history[2] = 0; global->monitor[count]->history[3] = 0; } global->uptime = g_new(t_uptime_monitor, 1); global->uptime->enabled = TRUE; return global; } static void monitor_free(XfcePanelPlugin *plugin, t_global_monitor *global) { gint count; if (global->timeout_id) g_source_remove(global->timeout_id); for(count = 0; count < 3; count++) { if (global->monitor[count]->options.label_text) g_free(global->monitor[count]->options.label_text); } g_free(global); } void setup_monitor(t_global_monitor *global) { GtkRcStyle *rc; gint count; gtk_widget_hide(GTK_WIDGET(global->uptime->ebox)); for(count = 0; count < 3; count++) { gtk_widget_hide(GTK_WIDGET(global->monitor[count]->ebox)); gtk_widget_hide(global->monitor[count]->label); gtk_label_set_text(GTK_LABEL(global->monitor[count]->label), global->monitor[count]->options.label_text); gtk_widget_hide(GTK_WIDGET(global->monitor[count]->status)); rc = gtk_widget_get_modifier_style(GTK_WIDGET(global->monitor[count]->status)); if (!rc) { rc = gtk_rc_style_new(); } if (rc) { rc->color_flags[GTK_STATE_PRELIGHT] |= GTK_RC_BG; rc->bg[GTK_STATE_PRELIGHT] = global->monitor[count]->options.color; } gtk_widget_modify_style(GTK_WIDGET(global->monitor[count]->status), rc); if(global->monitor[count]->options.enabled) { gtk_widget_show(GTK_WIDGET(global->monitor[count]->ebox)); if (global->monitor[count]->options.use_label) gtk_widget_show(global->monitor[count]->label); gtk_widget_show(GTK_WIDGET(global->monitor[count]->status)); } } if(global->uptime->enabled) { gtk_widget_show(GTK_WIDGET(global->uptime->ebox)); } } static void monitor_read_config(XfcePanelPlugin *plugin, t_global_monitor *global) { gint count; const char *value; char *file; XfceRc *rc; if (!(file = xfce_panel_plugin_lookup_rc_file (plugin))) return; rc = xfce_rc_simple_open (file, TRUE); g_free (file); if (!rc) return; for(count = 0; count < 3; count++) { if (xfce_rc_has_group (rc, MONITOR_ROOT[count])) { xfce_rc_set_group (rc, MONITOR_ROOT[count]); global->monitor[count]->options.enabled = xfce_rc_read_bool_entry (rc, "Enabled", TRUE); global->monitor[count]->options.use_label = xfce_rc_read_bool_entry (rc, "Use_Label", TRUE); if ((value = xfce_rc_read_entry (rc, "Color", NULL))) { gdk_color_parse(value, &global->monitor[count]->options.color); } if ((value = xfce_rc_read_entry (rc, "Text", NULL)) && *value) { if (global->monitor[count]->options.label_text) g_free(global->monitor[count]->options.label_text); global->monitor[count]->options.label_text = g_strdup(value); } } if (xfce_rc_has_group (rc, MONITOR_ROOT[3])) { xfce_rc_set_group (rc, MONITOR_ROOT[3]); global->uptime->enabled = xfce_rc_read_bool_entry (rc, "Enabled", TRUE); } } xfce_rc_close (rc); } static void monitor_write_config(XfcePanelPlugin *plugin, t_global_monitor *global) { char value[10]; gint count; XfceRc *rc; char *file; if (!(file = xfce_panel_plugin_save_location (plugin, TRUE))) return; rc = xfce_rc_simple_open (file, FALSE); g_free (file); if (!rc) return; for(count = 0; count < 3; count++) { xfce_rc_set_group (rc, MONITOR_ROOT[count]); xfce_rc_write_bool_entry (rc, "Enabled", global->monitor[count]->options.enabled); xfce_rc_write_bool_entry (rc, "Use_Label", global->monitor[count]->options.use_label); g_snprintf(value, 8, "#%02X%02X%02X", (guint)global->monitor[count]->options.color.red >> 8, (guint)global->monitor[count]->options.color.green >> 8, (guint)global->monitor[count]->options.color.blue >> 8); xfce_rc_write_entry (rc, "Color", value); xfce_rc_write_entry (rc, "Text", global->monitor[count]->options.label_text ? global->monitor[count]->options.label_text : ""); } xfce_rc_set_group (rc, MONITOR_ROOT[3]); xfce_rc_write_bool_entry (rc, "Enabled", global->uptime->enabled); xfce_rc_close (rc); } static gboolean monitor_set_size(XfcePanelPlugin *plugin, int size, t_global_monitor *global) { gint count; for(count = 0; count < 3; count++) { if (xfce_panel_plugin_get_orientation (plugin) == GTK_ORIENTATION_HORIZONTAL) { gtk_widget_set_size_request(GTK_WIDGET(global->monitor[count]->status), BORDER, size - BORDER); } else { gtk_widget_set_size_request(GTK_WIDGET(global->monitor[count]->status), size - BORDER, BORDER); } } setup_monitor(global); return TRUE; } static void monitor_apply_options(t_global_monitor *global) { gint count; for(count = 0; count < 3; count++) { if (global->monitor[count]->options.label_text) g_free(global->monitor[count]->options.label_text); global->monitor[count]->options.label_text = g_strdup(gtk_entry_get_text(GTK_ENTRY(global->monitor[count]->opt_entry))); } setup_monitor(global); } static void label_changed(t_global_monitor *global, gint count) { if (global->monitor[count]->options.label_text) g_free(global->monitor[count]->options.label_text); global->monitor[count]->options.label_text = g_strdup(gtk_entry_get_text(GTK_ENTRY(global->monitor[count]->opt_entry))); setup_monitor(global); } static void label_changed_cb0(GtkWidget *button, t_global_monitor *global) { label_changed(global, 0); } static void label_changed_cb1(GtkWidget *button, t_global_monitor *global) { label_changed(global, 1); } static void label_changed_cb2(GtkWidget *entry, t_global_monitor *global) { label_changed(global, 2); } static void monitor_toggled(t_global_monitor *global, gint count) { global->monitor[count]->options.enabled = !global->monitor[count]->options.enabled; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(global->monitor[count]->opt_enabled), global->monitor[count]->options.enabled); gtk_widget_set_sensitive(GTK_WIDGET(global->monitor[count]->opt_vbox), global->monitor[count]->options.enabled); setup_monitor(global); } static void monitor_toggled_cb0(GtkWidget *check_button, t_global_monitor *global) { monitor_toggled(global, 0); } static void monitor_toggled_cb1(GtkWidget *check_button, t_global_monitor *global) { monitor_toggled(global, 1); } static void monitor_toggled_cb2(GtkWidget *check_button, t_global_monitor *global) { monitor_toggled(global, 2); } static void uptime_toggled_cb(GtkWidget *check_button, t_global_monitor *global) { global->uptime->enabled = !global->uptime->enabled; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(global->uptime->opt_enabled), global->uptime->enabled); setup_monitor(global); } static void label_toggled(t_global_monitor *global, gint count) { global->monitor[count]->options.use_label = !global->monitor[count]->options.use_label; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(global->monitor[count]->opt_use_label), global->monitor[count]->options.use_label); gtk_widget_set_sensitive(GTK_WIDGET(global->monitor[count]->opt_entry), global->monitor[count]->options.use_label); setup_monitor(global); } static void label_toggled_cb0(GtkWidget *check_button, t_global_monitor *global) { label_toggled(global, 0); } static void label_toggled_cb1(GtkWidget *check_button, t_global_monitor *global) { label_toggled(global, 1); } static void label_toggled_cb2(GtkWidget *check_button, t_global_monitor *global) { label_toggled(global, 2); } static gboolean expose_event_cb(GtkWidget *widget, GdkEventExpose *event) { if (widget->window) { GtkStyle *style; style = gtk_widget_get_style(widget); gdk_draw_rectangle(widget->window, style->bg_gc[GTK_STATE_NORMAL], TRUE, event->area.x, event->area.y, event->area.width, event->area.height); } return TRUE; } static void change_color(t_global_monitor *global, gint count) { GtkWidget *dialog; GtkColorSelection *colorsel; gint response; dialog = gtk_color_selection_dialog_new(_("Select color")); gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(global->opt_dialog)); colorsel = GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(dialog)->colorsel); gtk_color_selection_set_previous_color(colorsel, &global->monitor[count]->options.color); gtk_color_selection_set_current_color(colorsel, &global->monitor[count]->options.color); gtk_color_selection_set_has_palette(colorsel, TRUE); response = gtk_dialog_run(GTK_DIALOG(dialog)); if (response == GTK_RESPONSE_OK) { gtk_color_selection_get_current_color(colorsel, &global->monitor[count]->options.color); gtk_widget_modify_bg(global->monitor[count]->opt_da, GTK_STATE_NORMAL, &global->monitor[count]->options.color); setup_monitor(global); } gtk_widget_destroy(dialog); } static void change_color_cb0(GtkWidget *button, t_global_monitor *global) { change_color(global, 0); } static void change_color_cb1(GtkWidget *button, t_global_monitor *global) { change_color(global, 1); } static void change_color_cb2(GtkWidget *button, t_global_monitor *global) { change_color(global, 2); } static void monitor_dialog_response (GtkWidget *dlg, int response, t_global_monitor *global) { monitor_apply_options (global); gtk_widget_destroy (dlg); xfce_panel_plugin_unblock_menu (global->plugin); monitor_write_config (global->plugin, global); } static void monitor_create_options(XfcePanelPlugin *plugin, t_global_monitor *global) { GtkWidget *dlg, *notebook; GtkWidget *vbox, *dialog_vbox; GtkWidget *hbox; GtkWidget *color_label; GtkWidget *align, *label; GtkSizeGroup *sg; guint count; static const gchar *FRAME_TEXT[] = { N_ ("CPU monitor"), N_ ("Memory monitor"), N_ ("Swap monitor"), N_ ("Uptime monitor") }; xfce_panel_plugin_block_menu (plugin); dlg = xfce_titled_dialog_new_with_buttons (_("System Load Monitor"), NULL, GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, GTK_STOCK_CLOSE, GTK_RESPONSE_OK, NULL); global->opt_dialog = dlg; gtk_window_set_icon_name (GTK_WINDOW (dlg), "xfce4-settings"); g_signal_connect (G_OBJECT (dlg), "response", G_CALLBACK (monitor_dialog_response), global); gtk_container_set_border_width (GTK_CONTAINER (dlg), 2); dialog_vbox = GTK_DIALOG (dlg)->vbox; notebook = gtk_notebook_new (); gtk_box_pack_start (GTK_BOX (dialog_vbox), notebook, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (notebook), BORDER-3); for(count = 0; count < 3; count++) { vbox = gtk_vbox_new(FALSE, BORDER); gtk_container_add (GTK_CONTAINER (notebook), vbox); gtk_container_set_border_width (GTK_CONTAINER (vbox), BORDER); global->monitor[count]->opt_enabled = gtk_check_button_new_with_mnemonic(_("Show monitor")); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(global->monitor[count]->opt_enabled), FALSE, FALSE, 0); global->monitor[count]->opt_vbox = GTK_BOX(gtk_vbox_new(FALSE, 5)); global->monitor[count]->opt_hbox = GTK_BOX(gtk_hbox_new(FALSE, 5)); global->monitor[count]->opt_use_label = gtk_check_button_new_with_mnemonic(_("Text to display:")); gtk_box_pack_start(GTK_BOX(global->monitor[count]->opt_hbox), GTK_WIDGET(global->monitor[count]->opt_use_label), FALSE, FALSE, 0); global->monitor[count]->opt_entry = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(global->monitor[count]->opt_entry), MAX_LENGTH); gtk_entry_set_text(GTK_ENTRY(global->monitor[count]->opt_entry), global->monitor[count]->options.label_text); gtk_box_pack_start(GTK_BOX(global->monitor[count]->opt_hbox), GTK_WIDGET(global->monitor[count]->opt_entry), FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(global->monitor[count]->opt_vbox), GTK_WIDGET(global->monitor[count]->opt_hbox), FALSE, FALSE, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(global->monitor[count]->opt_enabled), global->monitor[count]->options.enabled); gtk_widget_set_sensitive(GTK_WIDGET(global->monitor[count]->opt_vbox), global->monitor[count]->options.enabled); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(global->monitor[count]->opt_use_label), global->monitor[count]->options.use_label); gtk_widget_set_sensitive(GTK_WIDGET(global->monitor[count]->opt_entry), global->monitor[count]->options.use_label); hbox = gtk_hbox_new(FALSE, BORDER); gtk_box_pack_start(GTK_BOX(global->monitor[count]->opt_vbox), hbox, FALSE, FALSE, 0); color_label = gtk_label_new(_("Bar color:")); gtk_misc_set_alignment(GTK_MISC(color_label), 0, 0.5); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(color_label), FALSE, FALSE, 0); global->monitor[count]->opt_button = gtk_button_new(); global->monitor[count]->opt_da = gtk_drawing_area_new(); gtk_widget_modify_bg(global->monitor[count]->opt_da, GTK_STATE_NORMAL, &global->monitor[count]->options.color); gtk_widget_set_size_request(global->monitor[count]->opt_da, 64, 12); gtk_container_add(GTK_CONTAINER(global->monitor[count]->opt_button), global->monitor[count]->opt_da); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(global->monitor[count]->opt_button), FALSE, FALSE, 0); sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); gtk_size_group_add_widget(sg, global->monitor[count]->opt_enabled); gtk_size_group_add_widget(sg, global->monitor[count]->opt_use_label); gtk_size_group_add_widget(sg, color_label); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(global->monitor[count]->opt_vbox), FALSE, FALSE, 0); align = gtk_alignment_new(0, 0, 0, 0); gtk_widget_set_size_request(align, BORDER, BORDER); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(align), FALSE, FALSE, 0); label = gtk_label_new (_(FRAME_TEXT[count])); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), count), label); } /*uptime monitor options - start*/ vbox = gtk_vbox_new(FALSE, BORDER); gtk_container_add (GTK_CONTAINER (notebook), vbox); gtk_container_set_border_width (GTK_CONTAINER (vbox), BORDER); global->uptime->opt_enabled = gtk_check_button_new_with_mnemonic(_("Show monitor")); gtk_widget_show(global->uptime->opt_enabled); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(global->uptime->opt_enabled), FALSE, FALSE, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(global->uptime->opt_enabled), global->uptime->enabled); label = gtk_label_new (_(FRAME_TEXT[3])); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 3), label); g_signal_connect(GTK_WIDGET(global->uptime->opt_enabled), "toggled", G_CALLBACK(uptime_toggled_cb), global); /*uptime monitor options - end*/ g_signal_connect(GTK_WIDGET(global->monitor[0]->opt_da), "expose_event", G_CALLBACK(expose_event_cb), NULL); g_signal_connect(GTK_WIDGET(global->monitor[0]->opt_button), "clicked", G_CALLBACK(change_color_cb0), global); g_signal_connect(GTK_WIDGET(global->monitor[0]->opt_use_label), "toggled", G_CALLBACK(label_toggled_cb0), global); g_signal_connect(GTK_WIDGET(global->monitor[0]->opt_entry), "activate", G_CALLBACK(label_changed_cb0), global); g_signal_connect(GTK_WIDGET(global->monitor[0]->opt_enabled), "toggled", G_CALLBACK(monitor_toggled_cb0), global); g_signal_connect(GTK_WIDGET(global->monitor[1]->opt_da), "expose_event", G_CALLBACK(expose_event_cb), NULL); g_signal_connect(GTK_WIDGET(global->monitor[1]->opt_button), "clicked", G_CALLBACK(change_color_cb1), global); g_signal_connect(GTK_WIDGET(global->monitor[1]->opt_use_label), "toggled", G_CALLBACK(label_toggled_cb1), global); g_signal_connect(GTK_WIDGET(global->monitor[1]->opt_entry), "activate", G_CALLBACK(label_changed_cb1), global); g_signal_connect(GTK_WIDGET(global->monitor[1]->opt_enabled), "toggled", G_CALLBACK(monitor_toggled_cb1), global); g_signal_connect(GTK_WIDGET(global->monitor[2]->opt_da), "expose_event", G_CALLBACK(expose_event_cb), NULL); g_signal_connect(GTK_WIDGET(global->monitor[2]->opt_button), "clicked", G_CALLBACK(change_color_cb2), global); g_signal_connect(GTK_WIDGET(global->monitor[2]->opt_use_label), "toggled", G_CALLBACK(label_toggled_cb2), global); g_signal_connect(GTK_WIDGET(global->monitor[2]->opt_entry), "activate", G_CALLBACK(label_changed_cb2), global); g_signal_connect(GTK_WIDGET(global->monitor[2]->opt_enabled), "toggled", G_CALLBACK(monitor_toggled_cb2), global); gtk_widget_show_all (dlg); } static void systemload_construct (XfcePanelPlugin *plugin) { t_global_monitor *global; xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8"); global = monitor_control_new (plugin); monitor_read_config (plugin, global); monitor_set_orientation (plugin, xfce_panel_plugin_get_orientation (plugin), global); setup_monitor (global); gtk_container_add (GTK_CONTAINER (plugin), global->ebox); update_monitors (global); global->timeout_id = g_timeout_add(UPDATE_TIMEOUT, (GSourceFunc)update_monitors, global); g_signal_connect (plugin, "free-data", G_CALLBACK (monitor_free), global); g_signal_connect (plugin, "save", G_CALLBACK (monitor_write_config), global); g_signal_connect (plugin, "size-changed", G_CALLBACK (monitor_set_size), global); g_signal_connect (plugin, "orientation-changed", G_CALLBACK (monitor_set_orientation), global); xfce_panel_plugin_menu_show_configure (plugin); g_signal_connect (plugin, "configure-plugin", G_CALLBACK (monitor_create_options), global); } XFCE_PANEL_PLUGIN_REGISTER_EXTERNAL (systemload_construct);