Merge branch 'master' of http://scm.trinitydesktop.org/scm/git/tdelibs
commit
70341737e1
@ -0,0 +1,17 @@
|
|||||||
|
#################################################
|
||||||
|
#
|
||||||
|
# (C) 2012 Timothy Pearson
|
||||||
|
# kb9vqf (AT) pearsoncomputing.net
|
||||||
|
#
|
||||||
|
# Improvements and feedback are welcome
|
||||||
|
#
|
||||||
|
# This file is released under GPL >= 2
|
||||||
|
#
|
||||||
|
#################################################
|
||||||
|
|
||||||
|
|
||||||
|
##### other data ################################
|
||||||
|
|
||||||
|
install( FILES
|
||||||
|
pnp.ids
|
||||||
|
DESTINATION ${DATA_INSTALL_DIR}/tdehwlib/pnpdev )
|
@ -0,0 +1,156 @@
|
|||||||
|
# The information provided in this PNP ID to friendly name mapping table was obtained from
|
||||||
|
# multiple public sources, as well as this authoritative publicly accessible file:
|
||||||
|
# ftp://ftpmicrosoftcom/developr/drg/plug-and-play/devidstxt
|
||||||
|
#
|
||||||
|
# This file is provided soley in the interest of cross platform compatibility
|
||||||
|
# It only contains information on certain generic core system devices that cannot be looked up via another method
|
||||||
|
# All marks are the property of their owners
|
||||||
|
#
|
||||||
|
# A typical PNP ID takes the form of PNPxxxx:yy
|
||||||
|
#
|
||||||
|
# Some additional information that may be useful for applications parsing PNP device ID strings:
|
||||||
|
# PNP0xxx System devices
|
||||||
|
# PNP8xxx Network adapters
|
||||||
|
# PNPAxxx SCSI, proprietary CD adapters
|
||||||
|
# PNPBxxx Sound, video capture, multimedia
|
||||||
|
# PNPCxxx - PNPDxxx Modems
|
||||||
|
#
|
||||||
|
# The two digit code yy appears to be a PCI device type code followed by a subtype code and should be parsed as such
|
||||||
|
|
||||||
|
PNP0802 Microsoft® Sound System-compatible device
|
||||||
|
|
||||||
|
PNP0000 AT Interrupt Controller
|
||||||
|
PNP0001 EISA Interrupt Controller
|
||||||
|
PNP0002 MCA Interrupt Controller
|
||||||
|
PNP0003 APIC
|
||||||
|
PNP0004 Cyrix SLiC MP Interrupt Controller
|
||||||
|
|
||||||
|
PNP0100 AT Timer
|
||||||
|
PNP0101 EISA Timer
|
||||||
|
PNP0102 MCA Timer
|
||||||
|
PNP0103 High Precision Event Timer
|
||||||
|
|
||||||
|
PNP0200 AT DMA Controller
|
||||||
|
PNP0201 EISA DMA Controller
|
||||||
|
PNP0202 MCA DMA Controller
|
||||||
|
|
||||||
|
PNP0300 IBM PC/XT keyboard controller (83-key)
|
||||||
|
PNP0301 IBM PC/AT keyboard controller (86-key)
|
||||||
|
PNP0302 IBM PC/XT keyboard controller (84-key)
|
||||||
|
PNP0303 IBM Enhanced (101/102-key, PS/2 mouse support)
|
||||||
|
PNP0304 Olivetti Keyboard (83-key)
|
||||||
|
PNP0305 Olivetti Keyboard (102-key)
|
||||||
|
PNP0306 Olivetti Keyboard (86-key)
|
||||||
|
PNP0307 Microsoft® Windows(R) Keyboard
|
||||||
|
PNP0308 General Input Device Emulation Interface (GIDEI) legacy
|
||||||
|
PNP0309 Olivetti Keyboard (A101/102 key)
|
||||||
|
PNP030A AT&T 302 keyboard
|
||||||
|
PNP030B Reserved by Microsoft®
|
||||||
|
PNP0320 Japanese 106-key keyboard A01
|
||||||
|
PNP0321 Japanese 101-key keyboard
|
||||||
|
PNP0322 Japanese AX keyboard
|
||||||
|
PNP0323 Japanese 106-key keyboard 002/003
|
||||||
|
PNP0324 Japanese 106-key keyboard 001
|
||||||
|
PNP0325 Japanese Toshiba Desktop keyboard
|
||||||
|
PNP0326 Japanese Toshiba Laptop keyboard
|
||||||
|
PNP0327 Japanese Toshiba Notebook keyboard
|
||||||
|
PNP0340 Korean 84-key keyboard
|
||||||
|
PNP0341 Korean 86-key keyboard
|
||||||
|
PNP0342 Korean Enhanced keyboard
|
||||||
|
PNP0343 Korean Enhanced keyboard 101b
|
||||||
|
PNP0343 Korean Enhanced keyboard 101c
|
||||||
|
PNP0344 Korean Enhanced keyboard 103
|
||||||
|
|
||||||
|
PNP0400 Standard LPT Printer Port
|
||||||
|
PNP0401 ECP Printer Port
|
||||||
|
|
||||||
|
PNP0500 Standard PC Serial Port
|
||||||
|
PNP0501 16550A-compatible Serial Port
|
||||||
|
PNP0502 Multiport Serial Device (non-intelligent 16550)
|
||||||
|
PNP0510 Generic IRDA-compatible Device
|
||||||
|
PNP0511 Generic IRDA-compatible Device
|
||||||
|
|
||||||
|
PNP0600 Generic ESDI/IDE/ATA Compatible Hard Disk Controller
|
||||||
|
PNP0603 Generic IDE supporting Microsoft® Device Bay Specification
|
||||||
|
PNP0700 PC Standard Floppy Disk Controller
|
||||||
|
PNP0701 Microsoft® Device Bay Compatible Floppy Controller
|
||||||
|
|
||||||
|
PNP0802 Microsoft® Sound System compatible device
|
||||||
|
|
||||||
|
PNP0900 VGA Compatible Display Controller
|
||||||
|
PNP09FF Plug and Play Monitor (VESA DDC)
|
||||||
|
|
||||||
|
PNP0A00 ISA Root Bus
|
||||||
|
PNP0A01 EISA Root Bus
|
||||||
|
PNP0A02 MCA Root Bus
|
||||||
|
PNP0A03 PCI Root Bus
|
||||||
|
PNP0A04 VESA/VL Bus
|
||||||
|
PNP0A05 Generic ACPI Root Bus
|
||||||
|
PNP0A06 Generic ACPI Extended-IO Root Bus (EIO Root Bus)
|
||||||
|
PNP0A08 PCI Express Root Bus
|
||||||
|
|
||||||
|
PNP0800 AT-style Speaker
|
||||||
|
PNP0B00 AT Real-Time Clock
|
||||||
|
PNP0C00 Plug and Play BIOS
|
||||||
|
PNP0C01 System Board
|
||||||
|
PNP0C02 Plug and Play Motherboard Register Resource
|
||||||
|
PNP0C03 Plug and Play BIOS Event Notification Interrupt
|
||||||
|
PNP0C04 Math Coprocessor
|
||||||
|
PNP0C05 APM BIOS
|
||||||
|
PNP0C06 Early Plug and Play BIOS
|
||||||
|
PNP0C07 Early Plug and Play BIOS
|
||||||
|
PNP0C08 ACPI System Board
|
||||||
|
PNP0C09 ACPI Embedded Controller
|
||||||
|
PNP0C0A ACPI Control Method Battery
|
||||||
|
PNP0C0B ACPI Fan
|
||||||
|
PNP0C0C ACPI Power Button
|
||||||
|
PNP0C0D ACPI Lid Switch
|
||||||
|
PNP0C0E ACPI Sleep Button
|
||||||
|
PNP0C0F PCI Interrupt Link
|
||||||
|
PNP0C10 ACPI System Indicator
|
||||||
|
PNP0C11 ACPI Thermal Zone
|
||||||
|
PNP0C12 Device Bay Controller
|
||||||
|
PNP0C13 Plug and Play BIOS
|
||||||
|
|
||||||
|
PNP0E00 Intel 82365-Compatible PCMCIA Controller
|
||||||
|
PNP0E01 Cirrus Logic CL-PD6720 PCMCIA Controller
|
||||||
|
PNP0E02 VLSI VL82C146 PCMCIA Controller
|
||||||
|
PNP0E03 Intel 82365-compatible CardBus controller
|
||||||
|
|
||||||
|
PNP0F00 Microsoft® Bus Mouse
|
||||||
|
PNP0F01 Microsoft® Serial Mouse
|
||||||
|
PNP0F02 Microsoft® InPort Mouse
|
||||||
|
PNP0F03 Microsoft® PS/2-style Mouse
|
||||||
|
PNP0F04 Mouse Systems Mouse
|
||||||
|
PNP0F05 Mouse Systems 3-Button Mouse
|
||||||
|
PNP0F06 Genius Mouse
|
||||||
|
PNP0F07 Genius Mouse
|
||||||
|
PNP0F08 Logitech Serial Mouse
|
||||||
|
PNP0F09 Microsoft® BallPoint Serial Mouse
|
||||||
|
PNP0F0A Microsoft® Plug and Play Mouse
|
||||||
|
PNP0F0B Microsoft® Plug and Play BallPoint Mouse
|
||||||
|
PNP0F0C Microsoft®-compatible Serial Mouse
|
||||||
|
PNP0F0D Microsoft®-compatible InPort-compatible Mouse
|
||||||
|
PNP0F0E Microsoft®-compatible PS/2-style Mouse
|
||||||
|
PNP0F0F Microsoft®-compatible Serial BallPoint-compatible Mouse
|
||||||
|
PNP0F10 Texas Instruments QuickPort Mouse
|
||||||
|
PNP0F11 Microsoft®-compatible Bus Mouse
|
||||||
|
PNP0F12 Logitech PS/2-style Mouse
|
||||||
|
PNP0F13 PS/2 Port for PS/2-style Mice
|
||||||
|
PNP0F14 Microsoft® Kids Mouse
|
||||||
|
PNP0F15 Logitech bus mouse
|
||||||
|
PNP0F16 Logitech SWIFT device
|
||||||
|
PNP0F17 Logitech-compatible serial mouse
|
||||||
|
PNP0F18 Logitech-compatible bus mouse
|
||||||
|
PNP0F19 Logitech-compatible PS/2-style Mouse
|
||||||
|
PNP0F1A Logitech-compatible SWIFT Device
|
||||||
|
PNP0F1B HP Omnibook Mouse
|
||||||
|
PNP0F1C Compaq LTE Trackball PS/2-style Mouse
|
||||||
|
PNP0F1D Compaq LTE Trackball Serial Mouse
|
||||||
|
PNP0F1E Microsoft® Kids Trackball Mouse
|
||||||
|
PNP0F1F Reserved by Microsoft® Input Device Group
|
||||||
|
PNP0F20 Reserved by Microsoft® Input Device Group
|
||||||
|
PNP0F21 Reserved by Microsoft® Input Device Group
|
||||||
|
PNP0F22 Reserved by Microsoft® Input Device Group
|
||||||
|
PNP0F23 Reserved by Microsoft® Input Device Group
|
||||||
|
PNP0FFF Reserved by Microsoft® Systems
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,293 @@
|
|||||||
|
/* This file is part of the KDE libraries
|
||||||
|
Copyright (C) 1998 Sven Radej <sven@lisa.exp.univie.ac.at>
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License version 2 as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This library 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public License
|
||||||
|
along with this library; see the file COPYING.LIB. If not, write to
|
||||||
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||||
|
Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
#ifndef _KSIMPLEDIRWATCH_H
|
||||||
|
#define _KSIMPLEDIRWATCH_H
|
||||||
|
|
||||||
|
#include <tqtimer.h>
|
||||||
|
#include <tqdatetime.h>
|
||||||
|
#include <tqmap.h>
|
||||||
|
|
||||||
|
#include <tdelibs_export.h>
|
||||||
|
|
||||||
|
#define kdirwatch KSimpleDirWatch::self()
|
||||||
|
|
||||||
|
class KSimpleDirWatchPrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* KSimpleDirWatch is a basic copy of KDirWatch
|
||||||
|
* but with the KIO linking requirement removed
|
||||||
|
*
|
||||||
|
* Watch directories and files for changes.
|
||||||
|
* The watched directories or files don't have to exist yet.
|
||||||
|
*
|
||||||
|
* When a watched directory is changed, i.e. when files therein are
|
||||||
|
* created or deleted, KSimpleDirWatch will emit the signal dirty().
|
||||||
|
*
|
||||||
|
* When a watched, but previously not existing directory gets created,
|
||||||
|
* KSimpleDirWatch will emit the signal created().
|
||||||
|
*
|
||||||
|
* When a watched directory gets deleted, KSimpleDirWatch will emit the
|
||||||
|
* signal deleted(). The directory is still watched for new
|
||||||
|
* creation.
|
||||||
|
*
|
||||||
|
* When a watched file is changed, i.e. attributes changed or written
|
||||||
|
* to, KSimpleDirWatch will emit the signal dirty().
|
||||||
|
*
|
||||||
|
* Scanning of particular directories or files can be stopped temporarily
|
||||||
|
* and restarted. The whole class can be stopped and restarted.
|
||||||
|
* Directories and files can be added/removed from the list in any state.
|
||||||
|
*
|
||||||
|
* The implementation uses the FAM service when available;
|
||||||
|
* if FAM is not available, the DNOTIFY functionality is used on LINUX.
|
||||||
|
* As a last resort, a regular polling for change of modification times
|
||||||
|
* is done; the polling interval is a global config option:
|
||||||
|
* DirWatch/PollInterval and DirWatch/NFSPollInterval for NFS mounted
|
||||||
|
* directories.
|
||||||
|
*
|
||||||
|
* @see self()
|
||||||
|
* @short Class for watching directory and file changes.
|
||||||
|
* @author Sven Radej <sven@lisa.exp.univie.ac.at>
|
||||||
|
*/
|
||||||
|
class KIO_EXPORT KSimpleDirWatch : public TQObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*
|
||||||
|
* Scanning begins immediately when a dir/file watch
|
||||||
|
* is added.
|
||||||
|
* @param parent the parent of the TQObject (or 0 for parent-less KDataTools)
|
||||||
|
* @param name the name of the TQObject, can be 0
|
||||||
|
*/
|
||||||
|
KSimpleDirWatch (TQObject* parent = 0, const char* name = 0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destructor.
|
||||||
|
*
|
||||||
|
* Stops scanning and cleans up.
|
||||||
|
*/
|
||||||
|
~KSimpleDirWatch();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a directory to be watched.
|
||||||
|
*
|
||||||
|
* The directory does not have to exist. When @p watchFiles is
|
||||||
|
* false (the default), the signals dirty(), created(), deleted()
|
||||||
|
* can be emitted, all for the watched directory.
|
||||||
|
* When @p watchFiles is true, all files in the watched directory
|
||||||
|
* are watched for changes, too. Thus, the signals dirty(),
|
||||||
|
* created(), deleted() can be emitted.
|
||||||
|
*
|
||||||
|
* @param path the path to watch
|
||||||
|
* @param watchFiles if true, the KSimpleDirWatch will also watch files - NOT IMPLEMENTED YET
|
||||||
|
* @param recursive if true, all sub directories are also watched - NOT IMPLEMENTED YET
|
||||||
|
*/
|
||||||
|
void addDir(const TQString& path,
|
||||||
|
bool watchFiles = false, bool recursive = false);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a file to be watched.
|
||||||
|
* @param file the file to watch
|
||||||
|
*/
|
||||||
|
void addFile(const TQString& file);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the time the directory/file was last changed.
|
||||||
|
* @param path the file to check
|
||||||
|
* @return the date of the last modification
|
||||||
|
*/
|
||||||
|
TQDateTime ctime(const TQString& path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a directory from the list of scanned directories.
|
||||||
|
*
|
||||||
|
* If specified path is not in the list this does nothing.
|
||||||
|
* @param path the path of the dir to be removed from the list
|
||||||
|
*/
|
||||||
|
void removeDir(const TQString& path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a file from the list of watched files.
|
||||||
|
*
|
||||||
|
* If specified path is not in the list this does nothing.
|
||||||
|
* @param file the file to be removed from the list
|
||||||
|
*/
|
||||||
|
void removeFile(const TQString& file);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stops scanning the specified path.
|
||||||
|
*
|
||||||
|
* The @p path is not deleted from the interal just, it is just skipped.
|
||||||
|
* Call this function when you perform an huge operation
|
||||||
|
* on this directory (copy/move big files or many files). When finished,
|
||||||
|
* call restartDirScan(path).
|
||||||
|
*
|
||||||
|
* @param path the path to skip
|
||||||
|
* @return true if the @p path is being watched, otherwise false
|
||||||
|
* @see restartDirScanning()
|
||||||
|
*/
|
||||||
|
bool stopDirScan(const TQString& path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restarts scanning for specified path.
|
||||||
|
*
|
||||||
|
* Resets ctime. It doesn't notify
|
||||||
|
* the change (by emitted a signal), since the ctime value is reset.
|
||||||
|
*
|
||||||
|
* Call it when you are finished with big operations on that path,
|
||||||
|
* @em and when @em you have refreshed that path.
|
||||||
|
*
|
||||||
|
* @param path the path to restart scanning
|
||||||
|
* @return true if the @p path is being watched, otherwise false
|
||||||
|
* @see stopDirScanning()
|
||||||
|
*/
|
||||||
|
bool restartDirScan(const TQString& path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts scanning of all dirs in list.
|
||||||
|
*
|
||||||
|
* @param notify If true, all changed directories (since
|
||||||
|
* stopScan() call) will be notified for refresh. If notify is
|
||||||
|
* false, all ctimes will be reset (except those who are stopped,
|
||||||
|
* but only if @p skippedToo is false) and changed dirs won't be
|
||||||
|
* notified. You can start scanning even if the list is
|
||||||
|
* empty. First call should be called with @p false or else all
|
||||||
|
* directories
|
||||||
|
* in list will be notified.
|
||||||
|
* @param skippedToo if true, the skipped directoris (scanning of which was
|
||||||
|
* stopped with stopDirScan() ) will be reset and notified
|
||||||
|
* for change. Otherwise, stopped directories will continue to be
|
||||||
|
* unnotified.
|
||||||
|
*/
|
||||||
|
void startScan( bool notify=false, bool skippedToo=false );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stops scanning of all directories in internal list.
|
||||||
|
*
|
||||||
|
* The timer is stopped, but the list is not cleared.
|
||||||
|
*/
|
||||||
|
void stopScan();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is scanning stopped?
|
||||||
|
* After creation of a KSimpleDirWatch instance, this is false.
|
||||||
|
* @return true when scanning stopped
|
||||||
|
*/
|
||||||
|
bool isStopped() { return _isStopped; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a directory is being watched by this KSimpleDirWatch instance
|
||||||
|
* @param path the directory to check
|
||||||
|
* @return true if the directory is being watched
|
||||||
|
*/
|
||||||
|
bool contains( const TQString& path ) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dump statistic information about all KSimpleDirWatch instances.
|
||||||
|
* This checks for consistency, too.
|
||||||
|
*/
|
||||||
|
static void statistics();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Emits created().
|
||||||
|
* @param path the path of the file or directory
|
||||||
|
*/
|
||||||
|
void setCreated( const TQString &path );
|
||||||
|
/**
|
||||||
|
* Emits dirty().
|
||||||
|
* @param path the path of the file or directory
|
||||||
|
*/
|
||||||
|
void setDirty( const TQString &path );
|
||||||
|
/**
|
||||||
|
* Emits deleted().
|
||||||
|
* @param path the path of the file or directory
|
||||||
|
*/
|
||||||
|
void setDeleted( const TQString &path );
|
||||||
|
|
||||||
|
enum Method { FAM, DNotify, Stat, INotify };
|
||||||
|
/**
|
||||||
|
* Returns the preferred internal method to
|
||||||
|
* watch for changes.
|
||||||
|
* @since 3.2
|
||||||
|
*/
|
||||||
|
Method internalMethod();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The KSimpleDirWatch instance usually globally used in an application.
|
||||||
|
* It is automatically deleted when the application exits.
|
||||||
|
*
|
||||||
|
* However, you can create an arbitrary number of KSimpleDirWatch instances
|
||||||
|
* aside from this one - for those you have to take care of memory management.
|
||||||
|
*
|
||||||
|
* This function returns an instance of KSimpleDirWatch. If there is none, it
|
||||||
|
* will be created.
|
||||||
|
*
|
||||||
|
* @return a KSimpleDirWatch instance
|
||||||
|
*/
|
||||||
|
static KSimpleDirWatch* self();
|
||||||
|
/**
|
||||||
|
* Returns true if there is an instance of KSimpleDirWatch.
|
||||||
|
* @return true if there is an instance of KSimpleDirWatch.
|
||||||
|
* @see KSimpleDirWatch::self()
|
||||||
|
* @since 3.1
|
||||||
|
*/
|
||||||
|
static bool exists();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Emitted when a watched object is changed.
|
||||||
|
* For a directory this signal is emitted when files
|
||||||
|
* therein are created or deleted.
|
||||||
|
* For a file this signal is emitted when its size or attributes change.
|
||||||
|
*
|
||||||
|
* When you watch a directory, changes in the size or attributes of
|
||||||
|
* contained files may or may not trigger this signal to be emitted
|
||||||
|
* depending on which backend is used by KSimpleDirWatch.
|
||||||
|
*
|
||||||
|
* The new ctime is set before the signal is emitted.
|
||||||
|
* @param path the path of the file or directory
|
||||||
|
*/
|
||||||
|
void dirty (const TQString &path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Emitted when a file or directory is created.
|
||||||
|
* @param path the path of the file or directory
|
||||||
|
*/
|
||||||
|
void created (const TQString &path );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Emitted when a file or directory is deleted.
|
||||||
|
*
|
||||||
|
* The object is still watched for new creation.
|
||||||
|
* @param path the path of the file or directory
|
||||||
|
*/
|
||||||
|
void deleted (const TQString &path );
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool _isStopped;
|
||||||
|
|
||||||
|
KSimpleDirWatchPrivate *d;
|
||||||
|
static KSimpleDirWatch* s_pSelf;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// vim: sw=3 et
|
@ -0,0 +1,161 @@
|
|||||||
|
/* Private Header for class of KSimpleDirWatchPrivate
|
||||||
|
*
|
||||||
|
* this separate header file is needed for TQMOC processing
|
||||||
|
* because KSimpleDirWatchPrivate has signals and slots
|
||||||
|
*
|
||||||
|
* KSimpleDirWatch is a basic copy of KDirWatch
|
||||||
|
* but with the KIO linking requirement removed
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _KSIMPLEDIRWATCH_P_H
|
||||||
|
#define _KSIMPLEDIRWATCH_P_H
|
||||||
|
|
||||||
|
#ifdef HAVE_FAM
|
||||||
|
#include <fam.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <ctime>
|
||||||
|
|
||||||
|
#define invalid_ctime ((time_t)-1)
|
||||||
|
|
||||||
|
/* KSimpleDirWatchPrivate is a singleton and does the watching
|
||||||
|
* for every KSimpleDirWatch instance in the application.
|
||||||
|
*/
|
||||||
|
class KSimpleDirWatchPrivate : public TQObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
|
||||||
|
enum entryStatus { Normal = 0, NonExistent };
|
||||||
|
enum entryMode { UnknownMode = 0, StatMode, DNotifyMode, INotifyMode, FAMMode };
|
||||||
|
enum { NoChange=0, Changed=1, Created=2, Deleted=4 };
|
||||||
|
|
||||||
|
struct Client {
|
||||||
|
KSimpleDirWatch* instance;
|
||||||
|
int count;
|
||||||
|
// did the instance stop watching
|
||||||
|
bool watchingStopped;
|
||||||
|
// events blocked when stopped
|
||||||
|
int pending;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Entry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// the last observed modification time
|
||||||
|
time_t m_ctime;
|
||||||
|
// the last observed link count
|
||||||
|
int m_nlink;
|
||||||
|
entryStatus m_status;
|
||||||
|
entryMode m_mode;
|
||||||
|
bool isDir;
|
||||||
|
// instances interested in events
|
||||||
|
TQPtrList<Client> m_clients;
|
||||||
|
// nonexistent entries of this directory
|
||||||
|
TQPtrList<Entry> m_entries;
|
||||||
|
TQString path;
|
||||||
|
|
||||||
|
int msecLeft, freq;
|
||||||
|
|
||||||
|
void addClient(KSimpleDirWatch*);
|
||||||
|
void removeClient(KSimpleDirWatch*);
|
||||||
|
int clients();
|
||||||
|
bool isValid() { return m_clients.count() || m_entries.count(); }
|
||||||
|
|
||||||
|
bool dirty;
|
||||||
|
void propagate_dirty();
|
||||||
|
|
||||||
|
#ifdef HAVE_FAM
|
||||||
|
FAMRequest fr;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_DNOTIFY
|
||||||
|
int dn_fd;
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_INOTIFY
|
||||||
|
int wd;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef TQMap<TQString,Entry> EntryMap;
|
||||||
|
|
||||||
|
KSimpleDirWatchPrivate();
|
||||||
|
~KSimpleDirWatchPrivate();
|
||||||
|
|
||||||
|
void resetList (KSimpleDirWatch*,bool);
|
||||||
|
void useFreq(Entry* e, int newFreq);
|
||||||
|
void addEntry(KSimpleDirWatch*,const TQString&, Entry*, bool);
|
||||||
|
void removeEntry(KSimpleDirWatch*,const TQString&, Entry*);
|
||||||
|
bool stopEntryScan(KSimpleDirWatch*, Entry*);
|
||||||
|
bool restartEntryScan(KSimpleDirWatch*, Entry*, bool );
|
||||||
|
void stopScan(KSimpleDirWatch*);
|
||||||
|
void startScan(KSimpleDirWatch*, bool, bool);
|
||||||
|
|
||||||
|
void removeEntries(KSimpleDirWatch*);
|
||||||
|
void statistics();
|
||||||
|
|
||||||
|
Entry* entry(const TQString&);
|
||||||
|
int scanEntry(Entry* e);
|
||||||
|
void emitEvent(Entry* e, int event, const TQString &fileName = TQString::null);
|
||||||
|
|
||||||
|
// Memory management - delete when last KSimpleDirWatch gets deleted
|
||||||
|
void ref() { m_ref++; }
|
||||||
|
bool deref() { return ( --m_ref == 0 ); }
|
||||||
|
|
||||||
|
static bool isNoisyFile( const char *filename );
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void slotRescan();
|
||||||
|
void famEventReceived(); // for FAM
|
||||||
|
void slotActivated(); // for DNOTIFY
|
||||||
|
void slotRemoveDelayed();
|
||||||
|
|
||||||
|
public:
|
||||||
|
TQTimer *timer;
|
||||||
|
EntryMap m_mapEntries;
|
||||||
|
|
||||||
|
int freq;
|
||||||
|
int statEntries;
|
||||||
|
int m_nfsPollInterval, m_PollInterval;
|
||||||
|
int m_ref;
|
||||||
|
bool useStat(Entry*);
|
||||||
|
|
||||||
|
bool delayRemove;
|
||||||
|
TQPtrList<Entry> removeList;
|
||||||
|
|
||||||
|
bool rescan_all;
|
||||||
|
TQTimer rescan_timer;
|
||||||
|
|
||||||
|
#ifdef HAVE_FAM
|
||||||
|
TQSocketNotifier *sn;
|
||||||
|
FAMConnection fc;
|
||||||
|
bool use_fam;
|
||||||
|
|
||||||
|
void checkFAMEvent(FAMEvent*);
|
||||||
|
bool useFAM(Entry*);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_DNOTIFY) || defined(HAVE_INOTIFY)
|
||||||
|
TQSocketNotifier *mSn;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_DNOTIFY
|
||||||
|
bool supports_dnotify;
|
||||||
|
int mPipe[2];
|
||||||
|
TQIntDict<Entry> fd_Entry;
|
||||||
|
|
||||||
|
static void dnotify_handler(int, siginfo_t *si, void *);
|
||||||
|
static void dnotify_sigio_handler(int, siginfo_t *si, void *);
|
||||||
|
bool useDNotify(Entry*);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_INOTIFY
|
||||||
|
bool supports_inotify;
|
||||||
|
int m_inotify_fd;
|
||||||
|
|
||||||
|
bool useINotify(Entry*);
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // KSIMPLEDIRWATCH_P_H
|
||||||
|
|
Loading…
Reference in new issue