// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
/*
* Copyright (C) 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: Tim Penhey
* Marco Trevisan (TreviƱo)
*/
#ifndef UNITYSHARED_STANDALONE_WINDOW_MANAGER_H
#define UNITYSHARED_STANDALONE_WINDOW_MANAGER_H
#include "unity-shared/WindowManager.h"
#include
#include
namespace unity
{
struct StandaloneWindow : sigc::trackable
{
typedef std::shared_ptr Ptr;
StandaloneWindow(Window xid);
private:
Window xid;
public:
Window Xid() const { return xid; }
std::string name;
nux::Property geo;
nux::Size deco_sizes[4];
unsigned current_desktop;
unsigned monitor;
uint64_t active_number;
nux::Property active;
nux::Property mapped;
nux::Property visible;
nux::RWProperty maximized;
nux::Property v_maximized;
nux::Property h_maximized;
nux::Property minimized;
nux::Property decorated;
nux::Property has_decorations;
nux::Property on_top;
nux::Property closable;
nux::Property minimizable;
nux::Property maximizable;
sigc::signal resized;
sigc::signal moved;
};
class StandaloneWindowManager : public WindowManager
{
public:
StandaloneWindowManager();
virtual Window GetActiveWindow() const;
std::vector GetWindowsInStackingOrder() const override;
virtual bool IsWindowMaximized(Window window_id) const;
virtual bool IsWindowVerticallyMaximized(Window window_id) const;
virtual bool IsWindowHorizontallyMaximized(Window window_id) const;
virtual bool IsWindowDecorated(Window window_id) const;
virtual bool IsWindowOnCurrentDesktop(Window window_id) const;
virtual bool IsWindowObscured(Window window_id) const;
virtual bool IsWindowMapped(Window window_id) const;
virtual bool IsWindowVisible(Window window_id) const;
virtual bool IsWindowOnTop(Window window_id) const;
virtual bool IsWindowClosable(Window window_id) const;
virtual bool IsWindowMinimized(Window window_id) const;
virtual bool IsWindowMinimizable(Window window_id) const;
virtual bool IsWindowMaximizable(Window window_id) const;
virtual bool HasWindowDecorations(Window) const;
virtual void ShowDesktop();
virtual bool InShowDesktop() const;
virtual void Maximize(Window window_id);
virtual void LeftMaximize(Window window_id);
virtual void RightMaximize(Window window_id);
virtual void Restore(Window window_id);
virtual void RestoreAt(Window window_id, int x, int y);
virtual void Minimize(Window window_id);
virtual void UnMinimize(Window window_id);
virtual void Close(Window window_id);
virtual void Activate(Window window_id);
virtual void Raise(Window window_id);
virtual void Lower(Window window_id);
void RestackBelow(Window window_id, Window sibiling_id) override;
virtual void Decorate(Window window_id) const;
virtual void Undecorate(Window window_id) const;
virtual void TerminateScale();
virtual bool IsScaleActive() const;
virtual bool IsScaleActiveForGroup() const;
virtual void InitiateExpo();
virtual void TerminateExpo();
virtual bool IsExpoActive() const;
virtual bool IsWallActive() const;
void SetIsAnyWindowMoving(bool is_any_window_moving);
virtual bool IsAnyWindowMoving() const override;
virtual void FocusWindowGroup(std::vector const& windows,
FocusVisibility, int monitor = -1, bool only_top_win = true);
virtual bool ScaleWindowGroup(std::vector const& windows,
int state, bool force);
virtual bool IsScreenGrabbed() const;
virtual bool IsViewPortSwitchStarted() const;
virtual void MoveResizeWindow(Window window_id, nux::Geometry geometry);
virtual void StartMove(Window window_id, int x, int y);
virtual int GetWindowMonitor(Window window_id) const;
virtual nux::Geometry GetWindowGeometry(Window window_id) const;
virtual nux::Geometry GetWindowSavedGeometry(Window window_id) const;
virtual nux::Size GetWindowDecorationSize(Window window_id, Edge) const;
virtual nux::Geometry GetScreenGeometry() const;
virtual nux::Geometry GetWorkAreaGeometry(Window window_id) const;
virtual uint64_t GetWindowActiveNumber(Window window_id) const;
virtual void SetWindowIconGeometry(Window window, nux::Geometry const& geo);
virtual void CheckWindowIntersections (nux::Geometry const& region, bool &active, bool &any);
virtual int WorkspaceCount() const;
nux::Point GetCurrentViewport() const override;
void SetViewportSize(int horizontal, int vertical);
int GetViewportHSize() const override;
int GetViewportVSize() const override;
virtual bool SaveInputFocus();
virtual bool RestoreInputFocus();
virtual std::string GetWindowName(Window window_id) const;
// Mock functions
StandaloneWindow::Ptr GetWindowByXid(Window window_id) const;
void AddStandaloneWindow(StandaloneWindow::Ptr const& window);
std::list GetStandaloneWindows() const;
void SetScaleActive(bool scale_active);
void SetScaleActiveForGroup(bool scale_active_for_group);
void SetCurrentDesktop(unsigned desktop_id);
void SetCurrentViewport(nux::Point const& vp);
void SetWorkareaGeometry(nux::Geometry const& geo);
protected:
virtual void AddProperties(GVariantBuilder* builder);
private:
bool expo_state_;
bool in_show_desktop_;
bool scale_active_;
bool scale_active_for_group_;
bool is_any_window_moving_;
unsigned current_desktop_;
nux::Size viewport_size_;
nux::Point current_vp_;
nux::Geometry workarea_geo_;
std::list standalone_windows_;
};
}
#endif // UNITYSHARED_WINDOW_MANAGER_H