// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
/*
* Copyright (C) 2013 Canonical Ltd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as
* published by the Free Software Foundation.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
* Authored by: Marco Trevisan
*/
#ifndef UNITY_DECORATION_INPUT_MIXER
#define UNITY_DECORATION_INPUT_MIXER
#include "DecorationsWidgets.h"
namespace unity
{
namespace decoration
{
class InputMixer
{
public:
typedef std::shared_ptr Ptr;
InputMixer();
void PushToFront(Item::Ptr const&);
void PushToBack(Item::Ptr const&);
void Remove(Item::Ptr const&);
Item::List const& Items() const;
Item::Ptr const& GetMouseOwner() const;
void EnterEvent(CompPoint const&);
void MotionEvent(CompPoint const&, Time);
void LeaveEvent(CompPoint const&);
void ButtonDownEvent(CompPoint const&, unsigned button, Time);
void ButtonUpEvent(CompPoint const&, unsigned button, Time);
void UngrabPointer();
void ForceMouseOwnerCheck();
private:
InputMixer(InputMixer const&) = delete;
InputMixer& operator=(InputMixer const&) = delete;
void UpdateMouseOwner(CompPoint const&);
void UnsetMouseOwner();
Item::Ptr GetMatchingItem(CompPoint const&);
Item::Ptr GetMatchingItemRecursive(Item::List const&, CompPoint const&);
Item::List items_;
Item::Ptr last_mouse_owner_;
bool mouse_down_;
bool recheck_owner_;
};
} // decoration namespace
} // unity namespace
#endif