File gnome-power-manager-info.patch of Package gnome-power-manager

--- data/gpm-info.glade
+++ data/gpm-info.glade
@@ -480,327 +480,6 @@
 	      <property name="type">tab</property>
 	    </packing>
 	  </child>
-
-	  <child>
-	    <widget class="GtkVBox" id="vbox2">
-	      <property name="border_width">6</property>
-	      <property name="visible">True</property>
-	      <property name="homogeneous">False</property>
-	      <property name="spacing">0</property>
-
-	      <child>
-		<widget class="Custom" id="graph_percentage">
-		  <property name="visible">True</property>
-		  <property name="creation_function">gpm_simple_graph_new</property>
-		  <property name="int1">0</property>
-		  <property name="int2">0</property>
-		  <property name="last_modification_time">Mon, 06 Mar 2006 23:59:21 GMT</property>
-		</widget>
-		<packing>
-		  <property name="padding">0</property>
-		  <property name="expand">True</property>
-		  <property name="fill">True</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkHBox" id="hbox2">
-		  <property name="visible">True</property>
-		  <property name="homogeneous">False</property>
-		  <property name="spacing">0</property>
-
-		  <child>
-		    <widget class="GtkImage" id="image2">
-		      <property name="visible">True</property>
-		      <property name="stock">gtk-dialog-info</property>
-		      <property name="icon_size">6</property>
-		      <property name="xalign">0.5</property>
-		      <property name="yalign">0.5</property>
-		      <property name="xpad">0</property>
-		      <property name="ypad">0</property>
-		    </widget>
-		    <packing>
-		      <property name="padding">0</property>
-		      <property name="expand">False</property>
-		      <property name="fill">False</property>
-		    </packing>
-		  </child>
-
-		  <child>
-		    <widget class="GtkLabel" id="label21">
-		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">This shows how the battery percentage charge varies over time.</property>
-		      <property name="use_underline">False</property>
-		      <property name="use_markup">False</property>
-		      <property name="justify">GTK_JUSTIFY_LEFT</property>
-		      <property name="wrap">False</property>
-		      <property name="selectable">False</property>
-		      <property name="xalign">0.5</property>
-		      <property name="yalign">0.5</property>
-		      <property name="xpad">0</property>
-		      <property name="ypad">0</property>
-		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		      <property name="width_chars">-1</property>
-		      <property name="single_line_mode">False</property>
-		      <property name="angle">0</property>
-		    </widget>
-		    <packing>
-		      <property name="padding">0</property>
-		      <property name="expand">False</property>
-		      <property name="fill">True</property>
-		    </packing>
-		  </child>
-		</widget>
-		<packing>
-		  <property name="padding">0</property>
-		  <property name="expand">False</property>
-		  <property name="fill">True</property>
-		  <property name="pack_type">GTK_PACK_END</property>
-		</packing>
-	      </child>
-	    </widget>
-	    <packing>
-	      <property name="tab_expand">False</property>
-	      <property name="tab_fill">False</property>
-	    </packing>
-	  </child>
-
-	  <child>
-	    <widget class="GtkLabel" id="label2">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">Charge History</property>
-	      <property name="use_underline">False</property>
-	      <property name="use_markup">False</property>
-	      <property name="justify">GTK_JUSTIFY_LEFT</property>
-	      <property name="wrap">False</property>
-	      <property name="selectable">False</property>
-	      <property name="xalign">0.5</property>
-	      <property name="yalign">0.5</property>
-	      <property name="xpad">0</property>
-	      <property name="ypad">0</property>
-	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-	      <property name="width_chars">-1</property>
-	      <property name="single_line_mode">False</property>
-	      <property name="angle">0</property>
-	    </widget>
-	    <packing>
-	      <property name="type">tab</property>
-	    </packing>
-	  </child>
-
-	  <child>
-	    <widget class="GtkVBox" id="vbox10">
-	      <property name="border_width">6</property>
-	      <property name="visible">True</property>
-	      <property name="homogeneous">False</property>
-	      <property name="spacing">0</property>
-
-	      <child>
-		<widget class="Custom" id="graph_rate">
-		  <property name="visible">True</property>
-		  <property name="creation_function">gpm_simple_graph_new</property>
-		  <property name="int1">0</property>
-		  <property name="int2">0</property>
-		  <property name="last_modification_time">Mon, 06 Mar 2006 23:59:21 GMT</property>
-		</widget>
-		<packing>
-		  <property name="padding">0</property>
-		  <property name="expand">True</property>
-		  <property name="fill">True</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkHBox" id="hbox11">
-		  <property name="visible">True</property>
-		  <property name="homogeneous">False</property>
-		  <property name="spacing">0</property>
-
-		  <child>
-		    <widget class="GtkImage" id="image11">
-		      <property name="visible">True</property>
-		      <property name="stock">gtk-dialog-info</property>
-		      <property name="icon_size">6</property>
-		      <property name="xalign">0.5</property>
-		      <property name="yalign">0.5</property>
-		      <property name="xpad">0</property>
-		      <property name="ypad">0</property>
-		    </widget>
-		    <packing>
-		      <property name="padding">0</property>
-		      <property name="expand">False</property>
-		      <property name="fill">False</property>
-		    </packing>
-		  </child>
-
-		  <child>
-		    <widget class="GtkLabel" id="label24">
-		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">This shows how the battery charge and discharge rate varies over time.</property>
-		      <property name="use_underline">False</property>
-		      <property name="use_markup">False</property>
-		      <property name="justify">GTK_JUSTIFY_LEFT</property>
-		      <property name="wrap">False</property>
-		      <property name="selectable">False</property>
-		      <property name="xalign">0.5</property>
-		      <property name="yalign">0.5</property>
-		      <property name="xpad">0</property>
-		      <property name="ypad">0</property>
-		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		      <property name="width_chars">-1</property>
-		      <property name="single_line_mode">False</property>
-		      <property name="angle">0</property>
-		    </widget>
-		    <packing>
-		      <property name="padding">0</property>
-		      <property name="expand">False</property>
-		      <property name="fill">True</property>
-		    </packing>
-		  </child>
-		</widget>
-		<packing>
-		  <property name="padding">0</property>
-		  <property name="expand">False</property>
-		  <property name="fill">True</property>
-		  <property name="pack_type">GTK_PACK_END</property>
-		</packing>
-	      </child>
-	    </widget>
-	    <packing>
-	      <property name="tab_expand">False</property>
-	      <property name="tab_fill">True</property>
-	    </packing>
-	  </child>
-
-	  <child>
-	    <widget class="GtkLabel" id="label23">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">Rate History</property>
-	      <property name="use_underline">False</property>
-	      <property name="use_markup">False</property>
-	      <property name="justify">GTK_JUSTIFY_LEFT</property>
-	      <property name="wrap">False</property>
-	      <property name="selectable">False</property>
-	      <property name="xalign">0.5</property>
-	      <property name="yalign">0.5</property>
-	      <property name="xpad">0</property>
-	      <property name="ypad">0</property>
-	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-	      <property name="width_chars">-1</property>
-	      <property name="single_line_mode">False</property>
-	      <property name="angle">0</property>
-	    </widget>
-	    <packing>
-	      <property name="type">tab</property>
-	    </packing>
-	  </child>
-
-	  <child>
-	    <widget class="GtkVBox" id="vbox11">
-	      <property name="border_width">6</property>
-	      <property name="visible">True</property>
-	      <property name="homogeneous">False</property>
-	      <property name="spacing">0</property>
-
-	      <child>
-		<widget class="Custom" id="graph_time">
-		  <property name="visible">True</property>
-		  <property name="creation_function">gpm_simple_graph_new</property>
-		  <property name="int1">0</property>
-		  <property name="int2">0</property>
-		  <property name="last_modification_time">Mon, 06 Mar 2006 23:59:21 GMT</property>
-		</widget>
-		<packing>
-		  <property name="padding">0</property>
-		  <property name="expand">True</property>
-		  <property name="fill">True</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkHBox" id="hbox12">
-		  <property name="visible">True</property>
-		  <property name="homogeneous">False</property>
-		  <property name="spacing">0</property>
-
-		  <child>
-		    <widget class="GtkImage" id="image12">
-		      <property name="visible">True</property>
-		      <property name="stock">gtk-dialog-info</property>
-		      <property name="icon_size">6</property>
-		      <property name="xalign">0.5</property>
-		      <property name="yalign">0.5</property>
-		      <property name="xpad">0</property>
-		      <property name="ypad">0</property>
-		    </widget>
-		    <packing>
-		      <property name="padding">0</property>
-		      <property name="expand">False</property>
-		      <property name="fill">False</property>
-		    </packing>
-		  </child>
-
-		  <child>
-		    <widget class="GtkLabel" id="label26">
-		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">This shows how the remaining time until charged or discharged varies over time.</property>
-		      <property name="use_underline">False</property>
-		      <property name="use_markup">False</property>
-		      <property name="justify">GTK_JUSTIFY_LEFT</property>
-		      <property name="wrap">False</property>
-		      <property name="selectable">False</property>
-		      <property name="xalign">0.5</property>
-		      <property name="yalign">0.5</property>
-		      <property name="xpad">0</property>
-		      <property name="ypad">0</property>
-		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		      <property name="width_chars">-1</property>
-		      <property name="single_line_mode">False</property>
-		      <property name="angle">0</property>
-		    </widget>
-		    <packing>
-		      <property name="padding">0</property>
-		      <property name="expand">False</property>
-		      <property name="fill">True</property>
-		    </packing>
-		  </child>
-		</widget>
-		<packing>
-		  <property name="padding">0</property>
-		  <property name="expand">False</property>
-		  <property name="fill">True</property>
-		  <property name="pack_type">GTK_PACK_END</property>
-		</packing>
-	      </child>
-	    </widget>
-	    <packing>
-	      <property name="tab_expand">False</property>
-	      <property name="tab_fill">True</property>
-	    </packing>
-	  </child>
-
-	  <child>
-	    <widget class="GtkLabel" id="label25">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">Estimated Time History</property>
-	      <property name="use_underline">False</property>
-	      <property name="use_markup">False</property>
-	      <property name="justify">GTK_JUSTIFY_LEFT</property>
-	      <property name="wrap">False</property>
-	      <property name="selectable">False</property>
-	      <property name="xalign">0.5</property>
-	      <property name="yalign">0.5</property>
-	      <property name="xpad">0</property>
-	      <property name="ypad">0</property>
-	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-	      <property name="width_chars">-1</property>
-	      <property name="single_line_mode">False</property>
-	      <property name="angle">0</property>
-	    </widget>
-	    <packing>
-	      <property name="type">tab</property>
-	    </packing>
-	  </child>
 	</widget>
 	<packing>
 	  <property name="padding">0</property>
--- src/gpm-info.c
+++ src/gpm-info.c
@@ -92,53 +92,6 @@
 	return NULL;
 }
 
-/** add an x-y point to a list */
-static void
-gpm_info_data_point_add (GList **list, int x, int y)
-{
-	g_return_if_fail (list);
-	GpmSimpleDataPoint *data_point;
-	data_point = g_new (GpmSimpleDataPoint, 1);
-	data_point->x = x;
-	data_point->y = y;
-	*list = g_list_append (*list, (gpointer) data_point);
-}
-
-/** normalise both axes to 0..100 */
-static void
-gpm_stat_calculate_percentage (GList *source, GList **destination, int num_points)
-{
-	g_return_if_fail (source);
-	g_return_if_fail (destination);
-	int count = 0;		/* what number of max_count we are at */
-	int max_count;		/* how many data values do we want */
-	int this_count = 0;	/* what data point we are working on */
-	int average_add = 0;
-	int value_y, value_x;
-	int a;
-	int *point;
-	float percentage_step = 100.0f / (float) num_points;
-	max_count = g_list_length (source) / num_points;
-
-	for (a=0; a < g_list_length (source) - 1; a++) {
-		point = (int*) g_list_nth_data (source, a);
-		average_add += *point;
-		if (count == max_count) {
-			value_y = (float) average_add / (float) (max_count + 1);
-			value_x = (int) (percentage_step * (float) this_count);
-//			gpm_debug ("(%i) value = (%i, %i)", this_count, value_x, value_y);
-			gpm_info_data_point_add (destination, value_x, value_y);
-			count = 0;
-			average_add = 0;
-			this_count++;
-		} else {
-			count++;
-		}
-	}
-	/* we do not calculate the average on the remainder as the sample size would
-	   not be equal, and thus not representative of the final value */
-}
-
 /** help callback */
 static void
 gpm_info_help_cb (GtkWidget	*widget,
@@ -154,31 +107,26 @@
 }
 
 /* close callback */
-static void
-gpm_info_close_cb (GtkWidget	*widget,
-		   GpmInfo	*info)
+static gboolean
+gpm_info_delete_event_cb (GtkWidget	*widget,
+		   				GdkEvent *event,
+						GpmInfo	*info)
 {
 	gtk_widget_destroy (info->priv->main_window);
 	info->priv->main_window = NULL;
+	return TRUE; // don't signal a destroy
 }
 
-/** free a list of x-y points */
+/* close callback */
 static void
-gpm_info_data_point_free (GList *list)
+gpm_info_close_cb (GtkWidget	*widget,
+		   GpmInfo	*info)
 {
-	g_return_if_fail (list);
-
-	int a;
-	GpmSimpleDataPoint *d_point;
-
-	/* free elements */
-	for (a=0; a<g_list_length (list); a++) {
-		d_point = (GpmSimpleDataPoint*) g_list_nth_data (list, a);
-		g_free (d_point);
-	}
-	g_list_free (list);
+	gtk_widget_destroy (info->priv->main_window);
+	info->priv->main_window = NULL;
 }
 
+
 #if 0
 /** print a list of x-y points */
 static void
@@ -196,81 +144,6 @@
 }
 #endif
 
-/** find the largest and smallest integer values in a list */
-static void
-gpm_info_log_find_range (GList *list, int *smallest, int *biggest)
-{
-	g_return_if_fail (list);
-	int *data;
-	int a;
-	*smallest = 100000;
-	*biggest = 0;
-	for (a=0; a < g_list_length (list) - 1; a++) {
-		data = (int*) g_list_nth_data (list, a);
-		if (*data > *biggest) {
-			*biggest = *data;
-		}
-		if (*data < *smallest) {
-			*smallest = *data;
-		}
-	}
-}
-
-/** free a scalar log */
-static void
-gpm_info_log_free (GList *list)
-{
-	g_return_if_fail (list);
-	int *data;
-	int a;
-	for (a=0; a<g_list_length (list); a++) {
-		data = (int*) g_list_nth_data (list, a);
-		g_free (data);
-	}
-	g_list_free (list);
-}
-
-/** update this graph */
-static void
-gpm_info_graph_update (GpmInfoGraphData *graph_data)
-{
-	int max_time;
-	int smallest = 0;
-	int biggest = 0;
-
-	/* free existing data if exists */
-	if (graph_data->graph_data) {
-		gpm_info_data_point_free (graph_data->graph_data);
-		graph_data->graph_data = NULL;
-	}
-
-	if (graph_data->log_data) {
-		gpm_stat_calculate_percentage (graph_data->log_data,
-					       &(graph_data->graph_data),
-					       GPM_INFO_DATA_RES_X + 1);
-		gpm_simple_graph_set_data (GPM_SIMPLE_GRAPH (graph_data->widget), graph_data->graph_data);
-
-		/* set the x-axis to the time that we have been sampling for */
-		max_time = (GPM_INFO_HARDWARE_POLL * g_list_length (graph_data->log_data)) / 60;
-		if (max_time < 10) {
-			max_time = 10;
-		}
-		gpm_simple_graph_set_stop_x (GPM_SIMPLE_GRAPH (graph_data->widget), max_time);
-
-		/* get the biggest and smallest value of the data */
-		gpm_info_log_find_range (graph_data->log_data, &smallest, &biggest);
-		if (biggest < 10) {
-			biggest = 10;
-		}
-		gpm_simple_graph_set_stop_y (GPM_SIMPLE_GRAPH (graph_data->widget), biggest);
-	} else {
-		gpm_debug ("no log data");
-	}
-
-	/* FIXME: There's got to be a better way than this */
-	gtk_widget_hide (graph_data->widget);
-	gtk_widget_show (graph_data->widget);
-}
 
 /** update the tree widget with new data */
 static void
@@ -396,7 +269,7 @@
 				       GPM_DATA "gnome-power-manager.png", NULL);
 
 	g_signal_connect (info->priv->main_window, "delete_event",
-			  G_CALLBACK (gpm_info_close_cb), info);
+			  G_CALLBACK (gpm_info_delete_event_cb), info);
 
 	widget = glade_xml_get_widget (glade_xml, "button_close");
 	g_signal_connect (widget, "clicked",
@@ -406,7 +279,7 @@
 	g_signal_connect (widget, "clicked",
 			  G_CALLBACK (gpm_info_help_cb), info);
 
-	widget = glade_xml_get_widget (glade_xml, "graph_percentage");
+/*	widget = glade_xml_get_widget (glade_xml, "graph_percentage");
 	gtk_widget_set_size_request (widget, 600, 300);
 	info->priv->percentage->widget = widget;
 	gpm_simple_graph_set_axis_y (GPM_SIMPLE_GRAPH (widget), GPM_GRAPH_TYPE_PERCENTAGE);
@@ -420,7 +293,7 @@
 	gtk_widget_set_size_request (widget, 600, 300);
 	info->priv->time->widget = widget;
 	gpm_simple_graph_set_axis_y (GPM_SIMPLE_GRAPH (widget), GPM_GRAPH_TYPE_TIME);
-
+*/
 	widget = glade_xml_get_widget (info->priv->glade_xml, "treeview_primary0");
 	create_tree_widget (widget);
 	widget = glade_xml_get_widget (info->priv->glade_xml, "treeview_primary1");
@@ -432,41 +305,9 @@
 
 	populate_device_information (info);
 
-	gpm_info_graph_update (info->priv->rate);
-	gpm_info_graph_update (info->priv->percentage);
-	gpm_info_graph_update (info->priv->time);
-
 	gtk_widget_show (info->priv->main_window);
 }
 
-/** add a scalar point to the graph log */
-static void
-gpm_info_graph_add (GpmInfoGraphData *graph_data, int value)
-{
-	int *point;
-	point = g_new (int, 1);
-	*point = value;
-#ifdef DO_TESTING
-	static int auto_inc_val = 0;
-	auto_inc_val++;
-	if (auto_inc_val == 100) {
-		auto_inc_val = 0;
-	}
-	*point += auto_inc_val;
-#endif
-	graph_data->log_data = g_list_append (graph_data->log_data,
-					      (gpointer) point);
-}
-
-/** init log and graph data elements */
-static void
-gpm_info_graph_init (GpmInfoGraphData *graph_data)
-{
-	graph_data->log_data = NULL;
-	graph_data->graph_data = NULL;
-	graph_data->widget = NULL;
-}
-
 /** callback to get the log data every minute */
 static gboolean
 log_do_poll (gpointer data)
@@ -477,16 +318,7 @@
 	gpm_power_get_battery_status (info->priv->power,
 				      GPM_POWER_BATTERY_KIND_PRIMARY,
 				      &battery_status);
-
-	gpm_info_graph_add (info->priv->rate, battery_status.percentage_charge);
-	gpm_info_graph_add (info->priv->percentage, battery_status.charge_rate / 1000);
-	gpm_info_graph_add (info->priv->time, battery_status.remaining_time);
-
 	if (info->priv->main_window) {
-		gpm_info_graph_update (info->priv->rate);
-		gpm_info_graph_update (info->priv->percentage);
-		gpm_info_graph_update (info->priv->time);
-		//gpm_info_data_point_print (info->priv->rate.graph_data);
 		/* also update the first tab */
 		populate_device_information (info);
 	}
@@ -523,22 +355,10 @@
 	info->priv->percentage = g_new (GpmInfoGraphData, 1);
 	info->priv->time = g_new (GpmInfoGraphData, 1);
 
-	gpm_info_graph_init (info->priv->rate);
-	gpm_info_graph_init (info->priv->percentage);
-	gpm_info_graph_init (info->priv->time);
-
 	/* set up the timer callback so we can log data every minute */
 	g_timeout_add (GPM_INFO_HARDWARE_POLL * 1000, log_do_poll, info);
 }
 
-/* free the scalar and x-y elements of a graph */
-static void
-gpm_info_graph_free (GpmInfoGraphData *graph_data)
-{
-	gpm_info_log_free (graph_data->log_data);
-	gpm_info_data_point_free (graph_data->graph_data);
-	g_free (graph_data);
-}
 
 /** finalise the object */
 static void
@@ -551,9 +371,6 @@
 	info = GPM_INFO (object);
 	info->priv = GPM_INFO_GET_PRIVATE (info);
 
-	gpm_info_graph_free (info->priv->rate);
-	gpm_info_graph_free (info->priv->percentage);
-	gpm_info_graph_free (info->priv->time);
 
 	G_OBJECT_CLASS (parent_class)->finalize (object);
 }
--- src/gpm-power.c
+++ src/gpm-power.c
@@ -645,23 +645,23 @@
 		suffix = get_power_unit_suffix (device->unit);
 		if (status->current_charge > 0) {
 			di.title = g_strdup (_("Current charge:"));
-			di.value = g_strdup_printf ("%i%s", status->current_charge, suffix);
+			di.value = g_strdup_printf ("%i %s", status->current_charge, suffix);
 			g_array_append_vals (array, &di, 1);
 		}
 		if (status->last_full_charge > 0 &&
 		    status->design_charge != status->last_full_charge) {
 			di.title = g_strdup (_("Last full charge:"));
-			di.value = g_strdup_printf ("%i%s", status->last_full_charge, suffix);
+			di.value = g_strdup_printf ("%i %s", status->last_full_charge, suffix);
 			g_array_append_vals (array, &di, 1);
 		}
 		if (status->design_charge > 0) {
 			di.title = g_strdup (_("Design charge:"));
-			di.value = g_strdup_printf ("%i%s", status->design_charge, suffix);
+			di.value = g_strdup_printf ("%i %s", status->design_charge, suffix);
 			g_array_append_vals (array, &di, 1);
 		}
 		if (status->charge_rate > 0) {
 			di.title = g_strdup (_("Charge rate:"));
-			di.value = g_strdup_printf ("%imWh", status->charge_rate);
+			di.value = g_strdup_printf ("%i mW", status->charge_rate);
 			g_array_append_vals (array, &di, 1);
 		}
 	}
openSUSE Build Service is sponsored by