summaryrefslogtreecommitdiff
path: root/x11/gnomeapplets2/files/patch-battstat_power-management.c
diff options
context:
space:
mode:
authorJoe Marcus Clarke <marcus@FreeBSD.org>2005-11-05 04:53:48 +0000
committerJoe Marcus Clarke <marcus@FreeBSD.org>2005-11-05 04:53:48 +0000
commite18151212d3326dbf04797c6d5300fb1211ee875 (patch)
tree1ca56d6a4227efdb653cc8e2b2cbedbbc8de3d88 /x11/gnomeapplets2/files/patch-battstat_power-management.c
parentAdd bsdav 1.3, BSD native set of programs for audio and video reading (diff)
Presenting GNOME 2.12 for FreeBSD. The release is chock full of bug fixes
and new features. Don't believe me? Then see for yourself at http://www.gnome.org/start/2.12/notes/en/. DO NOT USE portupgrade by itself to upgrade to GNOME 2.12. Instead, use the gnome_upgrade.sh script from http://www.marcuscom.com/downloads/gnome_upgrade212.sh. This script will circumvent some potential pitfalls users can see if they use portupgrade by itself. In keeping with tradition, GNOME 2.12 for FreeBSD comes with a special splash screen. The winner of this release's contest is Dominique Goncalves <dominique.goncalves@gmail.com>. His splash screen was inspired by http://art.gnome.org/contests/2.12-splash/83. The FreeBSD GNOME Team would lank to thank the following users for their contributions to this release: Matthew Luckie <mjl@luckie.org.nz> ade sajd on #freebsd-gnome Caelian on #freebsd-gnome mnag Yasuda Keisuke <kysd@po.harenet.ne.jp> Mark Hobden <markhobden@gmail.com> Sergey Akifyev <asa@agava.com> Andreas Kohn For more information on GNOME on FreeBSD, checkout http://www.FreeBSD.org/gnome/. The 2.12 documentation will be posted shortly.
Diffstat (limited to 'x11/gnomeapplets2/files/patch-battstat_power-management.c')
-rw-r--r--x11/gnomeapplets2/files/patch-battstat_power-management.c123
1 files changed, 123 insertions, 0 deletions
diff --git a/x11/gnomeapplets2/files/patch-battstat_power-management.c b/x11/gnomeapplets2/files/patch-battstat_power-management.c
new file mode 100644
index 000000000000..9cea2d65b8fb
--- /dev/null
+++ b/x11/gnomeapplets2/files/patch-battstat_power-management.c
@@ -0,0 +1,123 @@
+--- battstat/power-management.c.orig Thu Aug 25 23:45:47 2005
++++ battstat/power-management.c Tue Aug 30 01:28:40 2005
+@@ -61,9 +61,7 @@
+
+ static const char *apm_readinfo (BatteryStatus *status);
+ static int pm_initialised;
+-#ifdef HAVE_HAL
+-static int using_hal;
+-#endif
++static int using_hal = FALSE;
+
+ /*
+ * What follows is a series of platform-specific apm_readinfo functions
+@@ -173,16 +171,40 @@ apm_readinfo (BatteryStatus *status)
+
+ #elif __FreeBSD__
+
++#if defined(__i386__)
+ #include <machine/apm_bios.h>
++#endif
+ #include "acpi-freebsd.h"
+
+ static struct acpi_info acpiinfo;
+ static gboolean using_acpi;
+ static int acpi_count;
++static int acpiwatch;
+ static struct apm_info apminfo;
+
++gboolean acpi_freebsd_read(struct apm_info *apminfo, struct acpi_info *acpiinfo);
++
+ #define APMDEVICE "/dev/apm"
+
++static gboolean acpi_callback (GIOChannel * chan, GIOCondition cond, gpointer data)
++{
++ gboolean read_error;
++ if (cond & (G_IO_ERR | G_IO_HUP)) {
++ acpi_freebsd_cleanup(&acpiinfo);
++ return FALSE;
++ }
++
++ if (acpi_process_event(&acpiinfo, &read_error)) {
++ acpi_freebsd_read(&apminfo, &acpiinfo);
++ }
++ else if (read_error) {
++ acpi_freebsd_cleanup(&acpiinfo);
++ return FALSE;
++ }
++
++ return TRUE;
++}
++
+ static const char *
+ apm_readinfo (BatteryStatus *status)
+ {
+@@ -190,21 +212,27 @@ apm_readinfo (BatteryStatus *status)
+
+ if (DEBUG) g_print("apm_readinfo() (FreeBSD)\n");
+
+- if (using_acpi) {
++ if (using_acpi && (!acpiinfo.event_inited || acpiinfo.event_fd >= 0)) {
+ if (acpi_count <= 0) {
+ acpi_count = 30;
+- acpi_process_event(&acpiinfo);
++ if (!acpiinfo.event_inited) {
++ acpi_freebsd_update(&acpiinfo);
++ }
+ if (acpi_freebsd_read(&apminfo, &acpiinfo) == FALSE)
+ return ERR_FREEBSD_ACPI;
+ }
+ acpi_count--;
+ }
+- else
+- {
+- /* 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.
+- */
++ else if (using_acpi && acpiinfo.event_inited) {
++ if (acpi_freebsd_init(&acpiinfo)) {
++ acpiwatch = g_io_add_watch (acpiinfo.channel,
++ G_IO_IN | G_IO_ERR | G_IO_HUP,
++ acpi_callback, NULL);
++ acpi_freebsd_read(&apminfo, &acpiinfo);
++ }
++ }
++ else {
++#if defined(__i386__)
+ fd = open(APMDEVICE, O_RDONLY);
+ if (fd == -1) {
+ return ERR_OPEN_APMDEV;
+@@ -217,6 +245,9 @@ apm_readinfo (BatteryStatus *status)
+
+ if(apminfo.ai_status == 0)
+ return ERR_APM_E;
++#else
++ return ERR_OPEN_APMDEV;
++#endif
+ }
+
+ status->present = TRUE;
+@@ -480,6 +511,12 @@ power_management_initialise( int no_hal
+ }
+ else
+ using_acpi = FALSE;
++
++ if (using_acpi && acpiinfo.event_fd >= 0) {
++ acpiwatch = g_io_add_watch (acpiinfo.channel,
++ G_IO_IN | G_IO_ERR | G_IO_HUP,
++ acpi_callback, NULL);
++ }
+ #endif
+ pm_initialised = 1;
+
+@@ -513,6 +550,9 @@ power_management_cleanup( void )
+ }
+ #elif defined(__FreeBSD__)
+ if (using_acpi) {
++ if (acpiwatch != 0)
++ g_source_remove(acpiwatch);
++ acpiwatch = 0;
+ acpi_freebsd_cleanup(&acpiinfo);
+ }
+ #endif