// -*- 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
*/
#ifndef UNITYSHARED_BAMF_APPLICATION_MANAGER_H
#define UNITYSHARED_BAMF_APPLICATION_MANAGER_H
#include
#include
#include
#include "unity-shared/DesktopApplicationManager.h"
namespace unity
{
namespace bamf
{
class View
{
public:
View(ApplicationManager const& manager,
glib::Object const& view);
std::string GetTitle() const;
std::string GetIcon() const;
std::string type() const;
bool GetVisible() const;
bool GetActive() const;
bool GetRunning() const;
bool GetUrgent() const;
protected:
ApplicationManager const& manager_;
glib::Object bamf_view_;
};
class WindowBase: public ::unity::ApplicationWindow, public View
{
protected:
WindowBase(ApplicationManager const& manager,
glib::Object const& window);
public:
virtual std::string type() const; // 'window' or 'tab'
virtual bool Focus() const;
private:
glib::SignalManager signals_;
};
// NOTE: Can't use Window as a type as there is a #define for Window to some integer value.
class AppWindow: public WindowBase
{
public:
AppWindow(ApplicationManager const& manager,
glib::Object const& window);
AppWindow(ApplicationManager const& manager,
glib::Object const& window);
virtual Window window_id() const;
virtual int monitor() const;
virtual ApplicationPtr application() const;
virtual void Quit() const;
private:
glib::Object bamf_window_;
};
class Tab: public WindowBase
{
public:
Tab(ApplicationManager const& manager,
glib::Object const& tab);
Tab(ApplicationManager const& manager,
glib::Object const& tab);
virtual Window window_id() const;
virtual int monitor() const;
virtual ApplicationPtr application() const;
virtual bool Focus() const;
virtual void Quit() const;
private:
glib::Object bamf_tab_;
};
class Application : public ::unity::desktop::Application, public View
{
public:
Application(ApplicationManager const& manager,
glib::Object const& app);
Application(ApplicationManager const& manager,
glib::Object const& app);
virtual std::string type() const;
virtual WindowList GetWindows() const;
virtual bool OwnsWindow(Window window_id) const;
virtual std::vector GetSupportedMimeTypes() const;
virtual ApplicationWindowPtr GetFocusableWindow() const;
virtual void Focus(bool show_on_visible, int monitor) const;
virtual void Quit() const;
virtual bool CreateLocalDesktopFile() const;
virtual std::string repr() const;
private: // Property getters and setters
void HookUpEvents();
std::string GetDesktopFile() const;
bool GetSeen() const;
bool SetSeen(bool const& param);
bool GetSticky() const;
bool SetSticky(bool const& param);
private:
glib::Object<::BamfApplication> bamf_app_;
glib::SignalManager signals_;
std::string type_;
};
class Manager : public ::unity::ApplicationManager
{
public:
Manager();
~Manager();
ApplicationPtr GetUnityApplication() const override;
ApplicationWindowPtr GetActiveWindow() const override;
ApplicationPtr GetApplicationForDesktopFile(std::string const& desktop_file) const override;
ApplicationList GetRunningApplications() const override;
ApplicationPtr GetApplicationForWindow(Window xid) const override;
private:
void OnViewOpened(BamfMatcher* matcher, BamfView* view);
private:
glib::Object matcher_;
glib::SignalManager signals_;
};
} // namespace bamf
} // namespace unity
#endif // UNITYSHARED_APPLICATION_MANAGER_H