// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- /* * Copyright (C) 2010-2012 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: Neil Jagdish Patel * Sam Spilsbury * Didier Roche * Marco Trevisan (TreviƱo) */ #ifndef PANEL_TITLEBAR_GRAB_AREA_H #define PANEL_TITLEBAR_GRAB_AREA_H_H #include #include #include "unity-shared/Introspectable.h" namespace unity { class PanelTitlebarGrabArea : public nux::InputArea, public unity::debug::Introspectable { /* This acts a bit like a decorator, it can be clicked or grabbed (such that * we can pull the window down) */ public: PanelTitlebarGrabArea(); ~PanelTitlebarGrabArea(); void SetGrabbed(bool enabled); bool IsGrabbed(); sigc::signal clicked; sigc::signal middle_clicked; sigc::signal double_clicked; sigc::signal right_clicked; sigc::signal grab_started; sigc::signal grab_move; sigc::signal grab_end; protected: std::string GetName() const; void AddProperties(debug::IntrospectionData&); private: void OnMouseDown(int x, int y, unsigned long button_flags, unsigned long); void OnMouseUp(int x, int y, unsigned long button_flags, unsigned long); void OnGrabMove(int x, int y, int, int, unsigned long button_flags, unsigned long); Cursor grab_cursor_; bool grab_started_; nux::Point mouse_down_point_; unsigned int mouse_down_button_; glib::Source::UniquePtr mouse_down_timer_; }; } // NAMESPACE #endif