struct _SystemLoadPluginClass { XfcePanelIndicatorClass __parent__; }; struct _SystemLoadPlugin { XfcePanelIndicator __parent__; XfcePanelIndicatorItem *cpu_indicator; guint timeout_id; }; /* define the plugin */ XFCE_PANEL_DEFINE_PLUGIN (SystemLoadPlugin, systemload_plugin) static void systemload_plugin_class_init (LauncherPluginClass *klass) { XfcePanelPluginClass *plugin_class; XfcePanelIndicatorClass *indicator_class; plugin_class = XFCE_PANEL_PLUGIN_CLASS (klass); plugin_class->construct = systemload_plugin_construct; plugin_class->free_data = systemload_plugin_free_data plugin_class->about = systemload_plugin_about; indicator_class = XFCE_PANEL_INDICATOR_CLASS (klass); indicator_class->get_properties = systemload_plugin_get_properties; } static void systemload_plugin_init (SystemLoadPlugin *plugin) { GtkWidget *image; plugin->cpu_indicator = xfce_panel_indicator_item_new (XFCE_PANEL_INDICATOR (plugin), "cpu", /* unique id for config */ _("CPU"), /* display name for config */, XFCE_PANEL_INDICATOR_LABEL | XFCE_PANEL_INDICATOR_PROGRESSBAR, XFCE_PANEL_INDICATOR_MASK /* all are supported */); g_signal_connect (G_OBJECT (plugin->cpu_indicator), "get-menu", G_CALLBACK (systemload_plugin_get_cpu_menu), plugin); xfce_panel_indicator_item_set_text (plugin->cpu_indicator, "%d%%", 0); image = xfce_panel_image_new_from_source ("cpu"); xfce_panel_indicator_item_set_image (plugin->cpu_indicator, image); gtk_widget_show (image); /* you can set tooltips on the entire box */ gtk_widget_set_tooltip_text (GTK_WIDGET (plugin->cpu_indicator), _("System Load: 0%")); } /* now completely hooked to the panel */ static void systemload_plugin_construct (XfcePanelPlugin *panel_plugin) { /* hookup the ->about vfunc */ xfce_panel_plugin_menu_show_about (panel_plugin); /* start update timeout */ plugin->timeout_id = gdk_threads_add_timeout (250, systemload_plugin_update, panel_plugin); } static void systemload_plugin_free_data (XfcePanelPlugin *panel_plugin) { SystemLoadPlugin *plugin = XFCE_SYSTEM_LOAD_PLUGIN (panel_plugin); if (plugin->timeout_id != 0) g_source_remove (plugin->timeout_id); } static void systemload_plugin_about (XfcePanelPlugin *panel_plugin) { gtk_show_about_dialog (NULL, "comments", _("System Load plugin"), "copyright", "Copyright \302\251 Someone", "license", XFCE_LICENSE_GPL, "program-name", PACKAGE_NAME, "translator-credits", _("translator-credits"), "version", PACKAGE_VERSION, "website", "http://www.xfce.org/", "logo-icon-name", PACKAGE_NAME, NULL); } static GtkWidget * systemload_plugin_get_properties (XfcePanelIndicator *indicator) { GtkWidget *vbox; GtkWidget *frame; vbox = gtk_vbox_new (FALSE, 6); frame = xfce_gtk_frame_box_new_with_content (_("Properties"), vbox); gtk_widget_show (vbox); /* pack custom stuff in vbox here */ return frame; } static GtkMenu * systemload_plugin_get_cpu_menu (XfcePanelIndicatorItem *cpu_indicator, SystemLoadPlugin *plugin) { GtkWidget *menu, *mi; menu = gtk_menu_new (); /* plugin submenu or appended between sparators, * XfcePanelIndicatorItem can decide on that */ mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_CLEAR, NULL); gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); gtk_widget_show (mi); return GTK_MENU (menu); } static gboolean systemload_plugin_update (gpointer data) { SystemLoadPlugin *plugin = XFCE_SYSTEM_LOAD_PLUGIN (data); GtkWidget *label; gint value; value = g_random_int_range (0, 100); xfce_panel_indicator_item_set_text (plugin->cpu_indicator, "%d%%", value); xfce_panel_indicator_item_set_value (plugin->cpu_indicator, value / 100.0); return TRUE; }