1
// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
3
* Copyright (C) 2010 Canonical Ltd
5
* This program is free software: you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License version 3 as
7
* published by the Free Software Foundation.
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
14
* You should have received a copy of the GNU General Public License
15
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17
* Authored by: Jason Smith <jason.smith@canonical.com>
20
#include <NuxCore/Logger.h>
22
#include <Nux/BaseWindow.h>
2
#include "Nux/BaseWindow.h"
24
4
#include "SimpleLauncherIcon.h"
25
5
#include "Launcher.h"
26
#include "PluginAdapter.h"
28
#include "ubus-server.h"
29
#include "UBusMessages.h"
33
nux::logging::Logger logger("unity.dash.CategoryViewGrid");
36
SimpleLauncherIcon::SimpleLauncherIcon(Launcher* IconManager)
37
: LauncherIcon(IconManager)
38
, theme_changed_id_(0)
40
LauncherIcon::mouse_down.connect(sigc::mem_fun(this, &SimpleLauncherIcon::OnMouseDown));
41
LauncherIcon::mouse_up.connect(sigc::mem_fun(this, &SimpleLauncherIcon::OnMouseUp));
42
LauncherIcon::mouse_click.connect(sigc::mem_fun(this, &SimpleLauncherIcon::OnMouseClick));
43
LauncherIcon::mouse_enter.connect(sigc::mem_fun(this, &SimpleLauncherIcon::OnMouseEnter));
44
LauncherIcon::mouse_leave.connect(sigc::mem_fun(this, &SimpleLauncherIcon::OnMouseLeave));
46
theme_changed_id_ = g_signal_connect(gtk_icon_theme_get_default(), "changed",
47
G_CALLBACK(SimpleLauncherIcon::OnIconThemeChanged), this);
7
SimpleLauncherIcon::SimpleLauncherIcon (Launcher* IconManager, NUX_FILE_LINE_DECL)
8
: LauncherIcon(IconManager)
13
LauncherIcon::MouseDown.connect (sigc::mem_fun (this, &SimpleLauncherIcon::OnMouseDown));
14
LauncherIcon::MouseUp.connect (sigc::mem_fun (this, &SimpleLauncherIcon::OnMouseUp));
15
LauncherIcon::MouseClick.connect (sigc::mem_fun (this, &SimpleLauncherIcon::OnMouseClick));
16
LauncherIcon::MouseEnter.connect (sigc::mem_fun (this, &SimpleLauncherIcon::OnMouseEnter));
17
LauncherIcon::MouseLeave.connect (sigc::mem_fun (this, &SimpleLauncherIcon::OnMouseLeave));
50
20
SimpleLauncherIcon::~SimpleLauncherIcon()
52
for (auto element : texture_map)
54
element.second->UnReference();
58
if (theme_changed_id_)
59
g_signal_handler_disconnect(gtk_icon_theme_get_default(), theme_changed_id_);
62
void SimpleLauncherIcon::OnMouseDown(int button)
66
void SimpleLauncherIcon::OnMouseUp(int button)
70
void SimpleLauncherIcon::OnMouseClick(int button)
74
void SimpleLauncherIcon::OnMouseEnter()
78
void SimpleLauncherIcon::OnMouseLeave()
82
void SimpleLauncherIcon::ActivateLauncherIcon(ActionArg arg)
85
ubus_server_send_message(ubus_server_get_default(),
86
UBUS_PLACE_VIEW_CLOSE_REQUEST,
87
g_variant_new_boolean(FALSE));
90
nux::BaseTexture* SimpleLauncherIcon::GetTextureForSize(int size)
92
if (texture_map[size] != 0)
93
return texture_map[size];
95
if (icon_name_.empty())
98
if (icon_name_[0] == '/')
99
texture_map[size] = TextureFromPath(icon_name_.c_str(), size);
101
texture_map[size] = TextureFromGtkTheme(icon_name_.c_str(), size);
102
return texture_map[size];
105
void SimpleLauncherIcon::SetIconName(const char* name)
109
LOG_WARNING(logger) << "attempted to set NULL as IconName";
120
void SimpleLauncherIcon::ReloadIcon()
122
for (auto element : texture_map)
124
element.second->UnReference();
126
texture_map.clear ();
127
needs_redraw.emit(this);
130
void SimpleLauncherIcon::OnIconThemeChanged(GtkIconTheme* icon_theme, gpointer data)
132
SimpleLauncherIcon* self = static_cast<SimpleLauncherIcon*>(data);
134
// invalidate the current cache
135
self->_current_theme_is_mono = -1;
27
SimpleLauncherIcon::OnMouseDown ()
32
SimpleLauncherIcon::OnMouseUp ()
37
SimpleLauncherIcon::OnMouseClick ()
42
SimpleLauncherIcon::OnMouseEnter ()
47
SimpleLauncherIcon::OnMouseLeave ()
51
void SimpleLauncherIcon::Remove ()
57
SimpleLauncherIcon::GetTextureForSize (int size)
59
if (m_Icon && size == m_Icon->GetHeight ())
68
m_Icon = TextureFromGtkTheme (m_IconName, size);
73
SimpleLauncherIcon::SetIconName (const char *name)
75
m_IconName = g_strdup (name);