Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.2:Test
gnome-system-monitor
gnome-system-monitor-fate304741.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File gnome-system-monitor-fate304741.diff of Package gnome-system-monitor
Index: gnome-system-monitor-2.26.0.1/src/Makefile.am =================================================================== --- gnome-system-monitor-2.26.0.1.orig/src/Makefile.am +++ gnome-system-monitor-2.26.0.1/src/Makefile.am @@ -25,6 +25,7 @@ gnome_system_monitor_SOURCES = \ defaulttable.h \ disks.cpp disks.h \ hardware.cpp hardware.h \ + acpiview.cpp acpiview.h \ selinux.h selinux.cpp \ procman_gnomesu.h procman_gnomesu.cpp \ procman_gksu.h procman_gksu.cpp \ Index: gnome-system-monitor-2.26.0.1/src/acpiview.cpp =================================================================== --- /dev/null +++ gnome-system-monitor-2.26.0.1/src/acpiview.cpp @@ -0,0 +1,310 @@ +/* Gnome System Monitor - acpiview.cpp + * Copyright (C) 2008 Novell, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + * + */ + +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +#include <glib/gi18n.h> + +#include <gtk/gtkvbox.h> +#include <gtk/gtktable.h> +#include <gtk/gtkmisc.h> +#include <gtk/gtklabel.h> + +#include "interface.h" +#include "acpiview.h" + +#define PROC_ACPI_IBM_DIR "/proc/acpi/ibm/" + +#define UNSUPPORTED -1 +#define DISABLED 0 +#define ENABLED 1 +#define OFF 0 +#define ON 1 + +AcpiData *acpi_data_new () +{ + AcpiData * d = (AcpiData *)calloc(sizeof(AcpiData), 1); + d->bluetooth = -1; + d->fan = -1; + d->brightness = -1; + d->in_dock = -1; + d->thinklight = -1; + d->cpu_temp = -1; + d->gpu_temp = -1; + d->battery_temp = -1; + return d; +} + +static +const char * enabled_value_to_string(int v) +{ + if (v == DISABLED) + { + return _("disabled"); + } + else if (v == ENABLED) + { + return _("enabled"); + } + return _("unsupported"); +} + +static +const char * onoff_value_to_string(int v) +{ + if (v == ON) + { + return _("on"); + } + else if (v == OFF) + { + return _("off"); + } + return _("unsupported"); +} + + +static +char * read_value(const char *value, const char * format, + char * buffer) +{ + int ret; + char * rvalue = NULL; + FILE *file = fopen(value, "r"); + if (file) + { + ret = fscanf (file, format, buffer); + if(ret == 1) + { + rvalue = buffer; + } + ret = fclose(file); + } + return rvalue; +} + +/* MUST free() the return value */ +static +char * read_value_line(const char *value) +{ + int ret; + char * rvalue = NULL; + size_t len = 0; + FILE *file = fopen(value, "r"); + if (file) + { + ret = getline (&rvalue, &len, file); + ret = fclose(file); + } + return rvalue; +} + +static int get_bluetooth () +{ + int value = -1; + char s[10] = ""; + char * svalue = read_value(PROC_ACPI_IBM_DIR "bluetooth", "status: %9s", s); + if(svalue) + { + if(strcmp(s,"enabled") == 0) + { + value = ENABLED; + } + else + { + value = DISABLED; + } + } + return value; +} + + +static int get_fan () +{ + int value = -1; + char s[10] = ""; + char * svalue = read_value(PROC_ACPI_IBM_DIR "fan", "status: %9s", s); + if(svalue) + { + if(strcmp(s,"enabled") == 0) + { + value = ENABLED; + } + else + { + value = DISABLED; + } + } + return value; +} + + +static int get_brightness () +{ + int value = -1; + int ret; + char rvalue[512]; + char *prvalue = rvalue; + size_t len = 512; + FILE *file = fopen("/proc/acpi/video/VID1/LCD0/brightness", "r"); + if (file) + { + ret = getline (&prvalue, &len, file); + ret = fscanf (file, "current: %d", &value); + ret = fclose(file); + } + + return value; +} + +static int get_in_dock () +{ + return -1; +} + +static int get_thinklight () +{ + int value = -1; + char s[10] = ""; + char * svalue = read_value(PROC_ACPI_IBM_DIR "light", "status: %9s", s); + if(svalue) + { + if(strcmp(s,"on") == 0) + { + value = ON; + } + else + { + value = OFF; + } + } + return value; +} + +static void get_temps (int & cpu, int & gpu, int & batt) +{ + cpu = gpu = batt = -1; + char * svalue = read_value_line(PROC_ACPI_IBM_DIR "thermal"); + if(svalue) + { + int t1, t2, t3, t4, t5, t6, t7, t8, + t9, t10, t11, t12, t13, t14, t15, t16; + +// printf("svalue -> %s\n", svalue); + sscanf(svalue, "temperatures: %d %d %d %d %d %d %d %d %d " + "%d %d %d %d %d %d %d", &t1, &t2, &t3, &t4, &t5, + &t6, &t7, &t8, &t9, &t10, &t11, &t12, &t13, &t14, + &t15, &t16); + // I'm not sure which one is what. + cpu = t1; + gpu = t2; + batt = t4; + free (svalue); + } +} + + +void acpi_data_init (AcpiData * d) +{ + d->bluetooth = get_bluetooth (); + d->fan = get_fan (); + d->brightness = get_brightness (); + d->in_dock = get_in_dock(); + d->thinklight = get_thinklight (); + get_temps (d->cpu_temp, d->gpu_temp, d->battery_temp); +} + +void acpi_data_free (AcpiData * d) +{ + free(d); +} + + +bool is_thinkpad () +{ + struct stat s; + int r = stat(PROC_ACPI_IBM_DIR, &s); + return ((r == 0) && S_ISDIR(s.st_mode)); +} + +static +void add_row (GtkTable *table, int row, + const gchar * label, const gchar * value) +{ + GtkWidget *header = gtk_label_new(label); + gtk_misc_set_alignment(GTK_MISC(header), 0.0, 0.5); + gtk_table_attach( + table, header, + 0, 1, row, row + 1, + GTK_FILL, GTK_FILL, 6, 6 + ); + + GtkWidget *label_widget = gtk_label_new(value); + gtk_misc_set_alignment(GTK_MISC(label_widget), 0.0, 0.5); + gtk_table_attach( + table, label_widget, + 1, 2, row, row + 1, + GTK_FILL, GTK_FILL, 6, 6 + ); +} + +GtkWidget* create_acpi_view (AcpiData * d) +{ + GtkWidget *table; + GtkWidget *vbox; + GtkWidget *label; + + vbox = gtk_vbox_new(FALSE, 6); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 12); + + label = make_title_label(_("ThinkPad")); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + + table = gtk_table_new(5, 2, FALSE); + + gtk_table_set_row_spacings(GTK_TABLE(table), 6); + gtk_table_set_col_spacings(GTK_TABLE(table), 6); + gtk_container_set_border_width(GTK_CONTAINER(table), 6); + gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, TRUE, 0); + + int row = 0; + char buf[32]; + add_row(GTK_TABLE(table), row++, _("Bluetooth"), + enabled_value_to_string (d->bluetooth)); + add_row(GTK_TABLE(table), row++, _("Fan"), + enabled_value_to_string (d->fan)); + snprintf(buf, 32, "%d", d->brightness); + add_row(GTK_TABLE(table), row++, _("Screen brightness"), buf); + add_row(GTK_TABLE(table), row++, _("In Docking station"), _("no")); + add_row(GTK_TABLE(table), row++, _("Lenovo ThinkLight"), + onoff_value_to_string (d->thinklight)); + + snprintf(buf, 32, "%d C", d->cpu_temp); + add_row(GTK_TABLE(table), row++, _("CPU Temp"), buf); + snprintf(buf, 32, "%d C", d->gpu_temp); + add_row(GTK_TABLE(table), row++, _("GPU Temp"), buf); + snprintf(buf, 32, "%d C", d->battery_temp); + add_row(GTK_TABLE(table), row++, _("Battery Temp"), buf); + + return vbox; +} Index: gnome-system-monitor-2.26.0.1/src/acpiview.h =================================================================== --- /dev/null +++ gnome-system-monitor-2.26.0.1/src/acpiview.h @@ -0,0 +1,45 @@ +/* Gnome System Monitor - acpiview.h + * Copyright (C) 2008 Novell, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + * + */ + +#ifndef _GSM_ACPIVIEW_H_ +#define _GSM_ACPIVIEW_H_ + +#include <gtk/gtkwidget.h> + + +struct AcpiData +{ + int bluetooth; + int fan; + int brightness; + int in_dock; + int thinklight; + int cpu_temp; + int gpu_temp; + int battery_temp; +}; + +AcpiData *acpi_data_new (); +void acpi_data_init (AcpiData *); +void acpi_data_free (AcpiData *); + +bool is_thinkpad (); +GtkWidget* create_acpi_view (AcpiData *); + +#endif Index: gnome-system-monitor-2.26.0.1/src/interface.cpp =================================================================== --- gnome-system-monitor-2.26.0.1.orig/src/interface.cpp +++ gnome-system-monitor-2.26.0.1/src/interface.cpp @@ -42,6 +42,7 @@ #include "sysinfo.h" #include "gsm_color_button.h" #include "hardware.h" +#include "acpiview.h" static void cb_toggle_tree (GtkAction *action, gpointer data); @@ -612,9 +613,9 @@ create_main_window (ProcData *procdata) GtkWidget *menubar; GtkWidget *main_box; GtkWidget *notebook; - GtkWidget *tab_label1, *tab_label2, *tab_label3 , *tab_label4; + GtkWidget *tab_label1, *tab_label2, *tab_label3, *tab_label4, *tab_label5; GtkWidget *vbox1; - GtkWidget *sys_box, *devices_box, *hardware_box; + GtkWidget *sys_box, *devices_box, *hardware_box, *acpi_box; GtkWidget *sysinfo_box, *sysinfo_label; app = gtk_window_new(GTK_WINDOW_TOPLEVEL); @@ -708,6 +709,15 @@ create_main_window (ProcData *procdata) tab_label4 = gtk_label_new (_("Hardware")); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), hardware_box, tab_label4); + if (is_thinkpad ()) + { + procdata->acpi = acpi_data_new (); + acpi_data_init (procdata->acpi); + acpi_box = create_acpi_view (procdata->acpi); + tab_label5 = gtk_label_new (_("ThinkPad")); + gtk_notebook_append_page (GTK_NOTEBOOK (notebook), acpi_box, tab_label5); + } + g_signal_connect (G_OBJECT (notebook), "switch-page", G_CALLBACK (cb_switch_page), procdata); g_signal_connect (G_OBJECT (notebook), "change-current-page", Index: gnome-system-monitor-2.26.0.1/src/procman.h =================================================================== --- gnome-system-monitor-2.26.0.1.orig/src/procman.h +++ gnome-system-monitor-2.26.0.1/src/procman.h @@ -36,6 +36,7 @@ struct ProcInfo; struct ProcData; struct LoadGraph; +struct AcpiData; #include "smooth_refresh.h" #include "prettytable.h" @@ -216,6 +217,7 @@ struct ProcData guint64 cpu_total_time; guint64 cpu_total_time_last; + AcpiData* acpi; private: ProcData(); /* undefined */ ProcData(const ProcData &);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor