⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 idletracker_x11.cpp

📁 张勇的linQ学习P2P及IM软件的极佳素材代码
💻 CPP
字号:
/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   copyright            : (C) 2003 by Zhang Yong                         *
 *   email                : z-yong163@163.com                              *
 ***************************************************************************/

#include "idletracker.h"
#include <kapplication.h>
#include <X11/Xlib.h>
#include <X11/extensions/scrnsaver.h>


inline Display *getDisplay()
{
#ifdef _KDE
	return kapp->getDisplay();
#else
	return NULL;
#endif
}


class XIdleTracker : public IdleTracker {
public:
	XIdleTracker();
	~XIdleTracker();

	virtual bool install();
	virtual void uninstall();
	virtual int getIdleTime();

private:
	XScreenSaverInfo *mit_info;
};


XIdleTracker::XIdleTracker()
{
	mit_info = NULL;
}

XIdleTracker::~XIdleTracker()
{
	uninstall();
}

bool XIdleTracker::install()
{
	if (mit_info)
		return TRUE;

	Display *display = getDisplay();
	if (!display)
		return FALSE;

	int event_base, error_base;
	if (!XScreenSaverQueryExtension(display, &event_base, &error_base))
		return FALSE;

	mit_info = XScreenSaverAllocInfo();
	return (mit_info != NULL);
}

void XIdleTracker::uninstall()
{
}

int XIdleTracker::getIdleTime()
{
	Display *display = getDisplay();
	if (!display || !mit_info)
		return 0;

	XScreenSaverQueryInfo(getDisplay(), QApplication::desktop()->winId(), mit_info);
	return (mit_info->idle / 1000);
}


IdleTracker *IdleTracker::instance()
{
	static XIdleTracker *tracker;
	if (!tracker)
		tracker = new XIdleTracker();
	return tracker;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -