a100f5d455
Closes pkg/14728 from Mark Davies <mark@mcs.vuw.ac.nz>. Changes from him with updates from myself. From www.kde.org... The principal improvements over KDE 2.2.1, release two months ago, include: o security-related - SSL certificate loading - symlink vulnerability in .wmrc access by KDM introduced in 2.2 - security problem with eFax (used by klprfax) - potential problem in PAM invocation by KDM - potential harmful side-effect of failed KDM session starts o new features - added support for CodeWeavers' CrossOver plug-in (provides support for QuickTime, etc.) - added support for the wheelmouse for scrolling through the KGhostview PS/PDF viewer component - ability to search for multiple patterns at a time in the file search dialog - debugging multi-threaded applications with KDevelop o improvements/fixes - handling of HTTP links that redirect to FTP - POST using SSL through a proxy and sending headers through proxies - saving of recently-selected files in the file dialog - handling of non-ASCII characters over SMB - toolbar button captions with certain styles - selecting items with the mouse in Konqueror - sorting in Konqueror's textview - saving current settings as a theme in the theme manager - crashes in KMail with certain mails - crash on invoking the KDM chooser - non-Latin languages with KDevelop performance - icon loading optimized - file dialog speedups - stop spinning SMB client processes - handling of large files in Kate
243 lines
5.5 KiB
Text
243 lines
5.5 KiB
Text
$NetBSD: patch-ai,v 1.3 2001/12/03 15:37:15 skrll Exp $
|
|
|
|
--- klaptopdaemon/portable.cpp.orig Sun Feb 18 15:31:14 2001
|
|
+++ klaptopdaemon/portable.cpp
|
|
@@ -658,6 +658,238 @@
|
|
{
|
|
return(1);
|
|
}
|
|
+
|
|
+#elif __NetBSD_APM__
|
|
+
|
|
+#include <errno.h>
|
|
+#include <fcntl.h>
|
|
+#include <unistd.h>
|
|
+#include <stdlib.h>
|
|
+#include <sys/ioctl.h>
|
|
+#include <sys/stat.h>
|
|
+#include <machine/apmvar.h>
|
|
+#include <iostream.h>
|
|
+
|
|
+//
|
|
+// klaptopdeamon interface to NetBSD 1.5 apm.
|
|
+// Scott Presnell, srp@zgi.com, srp@tworoads.net
|
|
+// Fri Jun 29 17:21:25 PDT 2001
|
|
+// Tested on Dell I4K running NetBSD 1.5R
|
|
+//
|
|
+#define APMDEV "/dev/apm"
|
|
+
|
|
+//
|
|
+// Check for apm in kernel by talking to /dev/apm
|
|
+// (opening read only is allowed by any process).
|
|
+// returns 1 if we support power management
|
|
+//
|
|
+int
|
|
+laptop_portable::has_power_management()
|
|
+{
|
|
+ int ret, fd = ::open(APMDEV, O_RDONLY);
|
|
+
|
|
+ if (fd == -1) {
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
+ struct apm_power_info info;
|
|
+ ret=ioctl(fd, APM_IOC_GETPOWER, &info);
|
|
+ ::close(fd);
|
|
+
|
|
+ if (ret == -1) {
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
+ return 1;
|
|
+}
|
|
+
|
|
+//
|
|
+// returns 1 if the BIOS returns the time left in the battery rather than a % of full
|
|
+//
|
|
+int laptop_portable::has_battery_time()
|
|
+{
|
|
+ int ret, fd = ::open(APMDEV, O_RDONLY);
|
|
+
|
|
+ if (fd == -1)
|
|
+ return 0;
|
|
+
|
|
+ struct apm_power_info info;
|
|
+ ret=ioctl(fd, APM_IOC_GETPOWER, &info);
|
|
+ ::close(fd);
|
|
+
|
|
+ if (ret == -1)
|
|
+ return 0;
|
|
+
|
|
+ return (info.minutes_left != 0xffff);
|
|
+}
|
|
+
|
|
+//
|
|
+// returns 1 if we can perform a change-to-suspend-mode operation for the user
|
|
+// (ust check to see if we have the binary)
|
|
+// (has_power_management() has already returned 1)
|
|
+//
|
|
+int laptop_portable::has_suspend()
|
|
+{
|
|
+
|
|
+ struct stat s;
|
|
+ if (stat("/usr/sbin/apm", &s))
|
|
+ return(0);
|
|
+ return(1);
|
|
+}
|
|
+
|
|
+//
|
|
+// returns 1 if we can perform a change-to-standby-mode operation for the user
|
|
+// (just check to see if we have the binary)
|
|
+// (has_power_management() has already returned 1)
|
|
+//
|
|
+int laptop_portable::has_standby()
|
|
+{
|
|
+
|
|
+ struct stat s;
|
|
+ if (stat("/usr/sbin/apm", &s))
|
|
+ return(0);
|
|
+ return(1);
|
|
+}
|
|
+
|
|
+//
|
|
+// returns 1 if we can perform a change-to-hibernate-mode for a user
|
|
+// (has_power_management() has already returned 1) [hibernate is the save-to-disk mode
|
|
+// not supported by linux - different laptops have their own - the first here is for
|
|
+// a ThinkPad]
|
|
+// No support in NetBSD at this time.
|
|
+//
|
|
+int laptop_portable::has_hibernation()
|
|
+{
|
|
+ return(0);
|
|
+}
|
|
+
|
|
+//
|
|
+// explain to the user what they need to do if has_power_management() returned 0
|
|
+// to get any software they lack
|
|
+//
|
|
+QLabel *laptop_portable::no_power_management_explanation(QWidget *parent)
|
|
+{
|
|
+ int fd;
|
|
+ QLabel *explain;
|
|
+
|
|
+ fd = ::open(APMDEV, O_RDONLY);
|
|
+ if (fd == -1) {
|
|
+ switch (errno) {
|
|
+ case ENOENT:
|
|
+ explain = new QLabel("There is no /dev/apm file on this system. Pleae review the NetBSD documentation on how to create a device node for the apm device driver (man 4 apm)", parent);
|
|
+ break;
|
|
+ case EACCES:
|
|
+ explain = new QLabel("Your system has the proper device node for apm support, however you can't access it. If you have apm in the kernel this should not happen", parent);
|
|
+ break;
|
|
+ case ENXIO:
|
|
+ explain = new QLabel("Your kernel lacks support for Advanced Power Managment.", parent);
|
|
+ break;
|
|
+ break;
|
|
+ default:
|
|
+ explain = new QLabel("There was some generic error while opening /dev/apm.", parent);
|
|
+ break;
|
|
+ }
|
|
+ } else {
|
|
+ close(fd);
|
|
+ explain = new QLabel("APM has most likely been disabled. Oops", parent);
|
|
+ }
|
|
+
|
|
+ explain->setMinimumSize(explain->sizeHint());
|
|
+ return(explain);
|
|
+}
|
|
+
|
|
+//
|
|
+// explain to the user what they need to do to get suspend/resume to work from user mode
|
|
+//
|
|
+QLabel *laptop_portable::how_to_do_suspend_resume(QWidget *parent)
|
|
+{
|
|
+ QLabel* note = new QLabel(i18n(" "), parent);
|
|
+ note->setMinimumSize(note->sizeHint());
|
|
+ return(note);
|
|
+}
|
|
+
|
|
+//
|
|
+// pcmcia support - this will be replaced by better - pcmcia support being worked on by
|
|
+// others
|
|
+//
|
|
+QLabel *laptop_portable::pcmcia_info(int x, QWidget *parent)
|
|
+{
|
|
+ if (x == 0)
|
|
+ return(new QLabel(i18n("No PCMCIA controller detected"), parent));
|
|
+ return(new QLabel(i18n(""), parent));
|
|
+}
|
|
+
|
|
+//
|
|
+// puts us into standby mode
|
|
+// Use apm rather than ioctls in case they are running apmd
|
|
+// (as they should be).
|
|
+//
|
|
+void laptop_portable::invoke_standby()
|
|
+{
|
|
+ ::system("/usr/sbin/apm -S");
|
|
+}
|
|
+
|
|
+//
|
|
+// puts us into suspend mode
|
|
+// Use apm rather than ioctls in case they are running apmd
|
|
+// (as they should be).
|
|
+//
|
|
+void laptop_portable::invoke_suspend()
|
|
+{
|
|
+
|
|
+ ::system("/usr/sbin/apm -z");
|
|
+}
|
|
+
|
|
+//
|
|
+// puts us into hibernate mode
|
|
+// No hibernate mode for NetBSD.
|
|
+//
|
|
+void laptop_portable::invoke_hibernation()
|
|
+{
|
|
+ return;
|
|
+}
|
|
+
|
|
+
|
|
+//
|
|
+// return current battery state
|
|
+//
|
|
+struct power_result laptop_portable::poll_battery_state()
|
|
+{
|
|
+ struct power_result p;
|
|
+ int ret;
|
|
+
|
|
+ int fd = ::open(APMDEV, O_RDONLY);
|
|
+
|
|
+ if (fd == -1)
|
|
+ goto bad;
|
|
+
|
|
+ struct apm_power_info info;
|
|
+ ret=ioctl(fd, APM_IOC_GETPOWER, &info);
|
|
+ ::close(fd);
|
|
+
|
|
+ if (ret == -1)
|
|
+ goto bad;
|
|
+
|
|
+ p.powered = (info.ac_state == APM_AC_ON);
|
|
+ p.percentage = (info.battery_life==255 ? 100 : info.battery_life);
|
|
+ p.time = (info.minutes_left != 0xffff ? info.minutes_left : -1);
|
|
+ return(p);
|
|
+
|
|
+bad:
|
|
+ p.powered = 1;
|
|
+ p.percentage = 100;
|
|
+ p.time = 0;
|
|
+ return(p);
|
|
+}
|
|
+
|
|
+//
|
|
+//
|
|
+// returns true if any mouse or kdb activity has been detected
|
|
+//
|
|
+int laptop_portable::poll_activity()
|
|
+{
|
|
+ return(1);
|
|
+}
|
|
#else
|
|
|
|
// INSERT HERE
|