summaryrefslogtreecommitdiff
path: root/sysutils/xfce4-battery-plugin/patches/patch-aa
blob: 53c3d342ca76776ab483b1c79efe6791996bf1d7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
$NetBSD: patch-aa,v 1.8 2010/03/22 15:46:03 joerg Exp $

--- panel-plugin/battery.c.orig	2008-09-05 05:53:40.000000000 +0900
+++ panel-plugin/battery.c	2008-11-27 22:16:05.000000000 +0900
@@ -25,7 +25,7 @@
 #include <config.h>
 #endif
 
-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
 #include <machine/apm_bios.h>
 #elif __OpenBSD__
 #include <sys/param.h>
@@ -33,8 +33,18 @@
 #elif __NetBSD__
 #include <sys/param.h>
 #include <sys/ioctl.h>
+#if defined(__sparc64__)
+/* On NetBSD/sparc64, apmvar.h is not exist in /usr/include/machine. */
+/* Reported in PR port-sparc64/36735. */
+#include <sparc/apmvar.h>
+#elif defined(__x86_64__)
+#include <dev/apm/apmbios.h>
+#include <dev/apm/apmio.h>
+#else
 #include <machine/apmvar.h>
+#endif
 #define APMDEVICE "/dev/apm"
+#define _ACPI_APM_BATT_UNKNOWN 0xffff /* from sys/dev/acpi/acpi_apm.c */
 #elif __linux__
 #include <libapm.h>
 #endif
@@ -155,7 +165,7 @@
 gboolean
 detect_battery_info(t_battmon *battmon)
 {
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__) || defined(__DragonFly__)
   /* This is how I read the information from the APM subsystem under
      FreeBSD.  Each time this functions is called (once every second)
      the APM device is opened, read from and then closed.
@@ -209,7 +217,7 @@
       battmon->method = BM_BROKEN;
       fd = open(APMDEVICE, O_RDONLY);
       if (fd == -1) return FALSE;
-      +      if (ioctl(fd, APM_IOC_GETPOWER, &apm) == -1) {
+      if (ioctl(fd, APM_IOC_GETPOWER, &apm) == -1) {
         close(fd);
              return FALSE;
     }
@@ -302,13 +312,16 @@
       battmon->method = BM_BROKEN;
       fd = open(APMDEVICE, O_RDONLY);
       if (fd == -1) return TRUE;
-      if (ioctl(fd, APM_IOC_GETPOWER, &apminfo) == -1)
+      if (ioctl(fd, APM_IOC_GETPOWER, &apm) == -1)
             return TRUE;
       close(fd);
       charge = apm.battery_life;
       time_remaining = apm.minutes_left;
       acline = apm.ac_state ? TRUE : FALSE;
 
+      if(battmon->timeoutid != 0) g_source_remove(battmon->timeoutid);
+      battmon->timeoutid = g_timeout_add(2 * 1024,
+              (GSourceFunc) update_apm_status, battmon);
 #else
     struct apm_info apm;
     DBG ("Updating battery status...");
@@ -404,7 +417,7 @@
         acline = apm.ac_line_status ? TRUE : FALSE;
 
     }
-#elif __FreeBSD__
+#elif defined(__FreeBSD__) || defined(__DragonFly__)
     else {
  /* This is how I read the information from the APM subsystem under
      FreeBSD.  Each time this functions is called (once every second)
@@ -464,6 +475,11 @@
 
     if(battmon->options.display_percentage && !(battmon->options.hide_when_full && acline && charge >= 99)){
         gtk_widget_show((GtkWidget *)battmon->charge);
+#if defined(__NetBSD__) || defined(__OpenBSD__)
+	 if (apm.battery_state == APM_BATT_ABSENT)
+            g_snprintf(buffer, sizeof(buffer),"--%% ");
+	 else
+#endif
         g_snprintf(buffer, sizeof(buffer),"%d%% ", charge);
         gtk_label_set_text(battmon->charge,buffer);
     } else {
@@ -481,6 +501,11 @@
         }
 
         gtk_widget_show((GtkWidget *)active_label);
+#if defined(__NetBSD__)
+	 if (acline || time_remaining == _ACPI_APM_BATT_UNKNOWN)
+            g_snprintf(buffer, sizeof(buffer), "--:--");
+	 else
+#endif
         g_snprintf(buffer, sizeof(buffer),"%02d:%02d ",time_remaining/60,time_remaining%60);
         gtk_label_set_text(active_label,buffer);