Norman Feske 1460105f71 nitpicker: provide user activity in focus reports
This patch supplements the existing focus reports with the new attribute
'active', which indicates recent user activity when set to "yes". This
information is consumed by the clipboard to dynamically adjust its
information-flow policy depending on the user activity.

Issue #1712
2015-10-06 12:18:54 +02:00

75 lines
1.6 KiB
C++

/*
* \brief Nitpicker mode
* \author Norman Feske
* \date 2006-08-22
*/
/*
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
#ifndef _MODE_H_
#define _MODE_H_
class Session;
class Mode
{
private:
bool _xray = false;
bool _kill = false;
/*
* Number of currently pressed keys.
* This counter is used to determine if the user
* is dragging an item.
*/
unsigned _key_cnt = 0;
Session *_focused_session = nullptr;
public:
virtual ~Mode() { }
/**
* Accessors
*/
bool xray() const { return _xray; }
bool kill() const { return _kill; }
bool flat() const { return !_xray && !_kill; }
bool drag() const { return _key_cnt > 0; }
void leave_kill() { _kill = false; }
void toggle_kill() { _kill = !_kill; }
void toggle_xray() { _xray = !_xray; }
void inc_key_cnt() { _key_cnt++; }
void dec_key_cnt() { _key_cnt--; }
bool has_key_cnt(unsigned cnt) const { return cnt == _key_cnt; }
bool key_is_pressed() const { return _key_cnt > 0; }
Session *focused_session() { return _focused_session; }
Session const *focused_session() const { return _focused_session; }
virtual void focused_session(Session *session) { _focused_session = session; }
bool is_focused(Session const &session) const { return &session == _focused_session; }
/**
* Discard all references to specified view
*/
virtual void forget(Session const &session)
{
if (is_focused(session)) _focused_session = nullptr;
}
};
#endif