summaryrefslogtreecommitdiff
path: root/launcher
diff options
Diffstat (limited to 'launcher')
-rw-r--r--launcher/Launcher.cpp2
-rw-r--r--launcher/LauncherIcon.cpp59
-rw-r--r--launcher/LauncherIcon.h12
-rw-r--r--launcher/MockLauncherIcon.h5
-rw-r--r--launcher/SwitcherView.cpp2
5 files changed, 43 insertions, 37 deletions
diff --git a/launcher/Launcher.cpp b/launcher/Launcher.cpp
index 088df4d75..2420f4dc7 100644
--- a/launcher/Launcher.cpp
+++ b/launcher/Launcher.cpp
@@ -1219,6 +1219,7 @@ void Launcher::OnMonitorChanged(int new_monitor)
Resize(nux::Point(monitor_geo.x, monitor_geo.y + panel_height), monitor_geo.height - panel_height);
icon_renderer_->monitor = new_monitor;
+ icon_renderer_->scale = cv_->DPIScale();
SetIconSize(options()->tile_size, options()->icon_size);
}
@@ -1519,7 +1520,6 @@ void Launcher::SetIconSize(int tile_size, int icon_size)
ui::IconRenderer::DestroyShortcutTextures();
icon_size_ = tile_size;
- icon_renderer_->scale = cv_->DPIScale();
icon_renderer_->SetTargetSize(icon_size_.CP(cv_), RawPixel(icon_size).CP(cv_), SPACE_BETWEEN_ICONS.CP(cv_));
AbstractLauncherIcon::icon_size = icon_size_;
diff --git a/launcher/LauncherIcon.cpp b/launcher/LauncherIcon.cpp
index 32b940aab..0562ccd8b 100644
--- a/launcher/LauncherIcon.cpp
+++ b/launcher/LauncherIcon.cpp
@@ -69,7 +69,6 @@ glib::Object<GtkIconTheme> LauncherIcon::_unity_theme;
LauncherIcon::LauncherIcon(IconType type)
: _icon_type(type)
, _sticky(false)
- , _remote_urgent(false)
, _present_urgency(0)
, _progress(0.0f)
, _sort_priority(DefaultPriority(type))
@@ -966,8 +965,7 @@ AbstractLauncherIcon::MenuItemsVector LauncherIcon::GetMenus()
return result;
}
-nux::BaseTexture*
-LauncherIcon::Emblem()
+nux::BaseTexture* LauncherIcon::Emblem() const
{
return _emblem.GetPointer();
}
@@ -1007,6 +1005,7 @@ LauncherIcon::SetEmblemText(std::string const& text)
int width = 32;
int height = 8 * 2;
+ int font_width = width - 4;
int font_height = height - 5;
@@ -1028,7 +1027,7 @@ LauncherIcon::SetEmblemText(std::string const& text)
pango_layout_set_font_description(layout, desc);
pango_font_description_free(desc);
- pango_layout_set_width(layout, pango_units_from_double(width - 4.0f));
+ pango_layout_set_width(layout, pango_units_from_double(font_width));
pango_layout_set_wrap(layout, PANGO_WRAP_WORD_CHAR);
pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_NONE);
pango_layout_set_markup_with_accel(layout, text.c_str(), -1, '_', NULL);
@@ -1077,26 +1076,34 @@ LauncherIcon::DeleteEmblem()
SetEmblem(BaseTexturePtr());
}
-void
-LauncherIcon::InsertEntryRemote(LauncherEntryRemote::Ptr const& remote)
+void LauncherIcon::InsertEntryRemote(LauncherEntryRemote::Ptr const& remote)
{
- if (std::find(_entry_list.begin(), _entry_list.end(), remote) != _entry_list.end())
+ if (!remote || std::find(_remote_entries.begin(), _remote_entries.end(), remote) != _remote_entries.end())
return;
- _entry_list.push_front(remote);
+ _remote_entries.push_back(remote);
AddChild(remote.get());
+ SelectEntryRemote(remote);
+}
- remote->emblem_changed.connect(sigc::mem_fun(this, &LauncherIcon::OnRemoteEmblemChanged));
- remote->count_changed.connect(sigc::mem_fun(this, &LauncherIcon::OnRemoteCountChanged));
- remote->progress_changed.connect(sigc::mem_fun(this, &LauncherIcon::OnRemoteProgressChanged));
- remote->quicklist_changed.connect(sigc::mem_fun(this, &LauncherIcon::OnRemoteQuicklistChanged));
+void LauncherIcon::SelectEntryRemote(LauncherEntryRemote::Ptr const& remote)
+{
+ if (!remote)
+ return;
- remote->emblem_visible_changed.connect(sigc::mem_fun(this, &LauncherIcon::OnRemoteEmblemVisibleChanged));
- remote->count_visible_changed.connect(sigc::mem_fun(this, &LauncherIcon::OnRemoteCountVisibleChanged));
- remote->progress_visible_changed.connect(sigc::mem_fun(this, &LauncherIcon::OnRemoteProgressVisibleChanged));
+ auto& cm = _remote_connections;
+ cm.Clear();
- remote->urgent_changed.connect(sigc::mem_fun(this, &LauncherIcon::OnRemoteUrgentChanged));
+ cm.Add(remote->emblem_changed.connect(sigc::mem_fun(this, &LauncherIcon::OnRemoteEmblemChanged)));
+ cm.Add(remote->count_changed.connect(sigc::mem_fun(this, &LauncherIcon::OnRemoteCountChanged)));
+ cm.Add(remote->progress_changed.connect(sigc::mem_fun(this, &LauncherIcon::OnRemoteProgressChanged)));
+ cm.Add(remote->quicklist_changed.connect(sigc::mem_fun(this, &LauncherIcon::OnRemoteQuicklistChanged)));
+ cm.Add(remote->emblem_visible_changed.connect(sigc::mem_fun(this, &LauncherIcon::OnRemoteEmblemVisibleChanged)));
+ cm.Add(remote->count_visible_changed.connect(sigc::mem_fun(this, &LauncherIcon::OnRemoteCountVisibleChanged)));
+ cm.Add(remote->progress_visible_changed.connect(sigc::mem_fun(this, &LauncherIcon::OnRemoteProgressVisibleChanged)));
+
+ cm.Add(remote->urgent_changed.connect(sigc::mem_fun(this, &LauncherIcon::OnRemoteUrgentChanged)));
if (remote->EmblemVisible())
OnRemoteEmblemVisibleChanged(remote.get());
@@ -1113,28 +1120,30 @@ LauncherIcon::InsertEntryRemote(LauncherEntryRemote::Ptr const& remote)
OnRemoteQuicklistChanged(remote.get());
}
-void
-LauncherIcon::RemoveEntryRemote(LauncherEntryRemote::Ptr const& remote)
+void LauncherIcon::RemoveEntryRemote(LauncherEntryRemote::Ptr const& remote)
{
- if (std::find(_entry_list.begin(), _entry_list.end(), remote) == _entry_list.end())
- return;
+ auto remote_it = std::find(_remote_entries.begin(), _remote_entries.end(), remote);
- _entry_list.remove(remote);
- RemoveChild(remote.get());
+ if (remote_it == _remote_entries.end())
+ return;
- DeleteEmblem();
SetQuirk(Quirk::PROGRESS, false);
- if (_remote_urgent)
+ if (remote->Urgent())
SetQuirk(Quirk::URGENT, false);
+ _remote_entries.erase(remote_it);
+ RemoveChild(remote.get());
+ DeleteEmblem();
_remote_menus = nullptr;
+
+ if (!_remote_entries.empty())
+ SelectEntryRemote(_remote_entries.back());
}
void
LauncherIcon::OnRemoteUrgentChanged(LauncherEntryRemote* remote)
{
- _remote_urgent = remote->Urgent();
SetQuirk(Quirk::URGENT, remote->Urgent());
}
diff --git a/launcher/LauncherIcon.h b/launcher/LauncherIcon.h
index 42253e6dd..37e04abc2 100644
--- a/launcher/LauncherIcon.h
+++ b/launcher/LauncherIcon.h
@@ -155,13 +155,13 @@ public:
nux::BaseTexture* TextureForSize(int size);
- nux::BaseTexture* Emblem();
+ nux::BaseTexture* Emblem() const override;
MenuItemsVector Menus();
- void InsertEntryRemote(LauncherEntryRemote::Ptr const& remote);
-
- void RemoveEntryRemote(LauncherEntryRemote::Ptr const& remote);
+ void InsertEntryRemote(LauncherEntryRemote::Ptr const&);
+ void SelectEntryRemote(LauncherEntryRemote::Ptr const&);
+ void RemoveEntryRemote(LauncherEntryRemote::Ptr const&);
nux::DndAction QueryAcceptDrop(DndData const& dnd_data)
{
@@ -325,7 +325,6 @@ private:
void OnTooltipEnabledChanged(bool value);
bool _sticky;
- bool _remote_urgent;
float _present_urgency;
float _progress;
int _sort_priority;
@@ -347,7 +346,8 @@ private:
BaseTexturePtr _emblem;
- std::list<LauncherEntryRemote::Ptr> _entry_list;
+ std::vector<LauncherEntryRemote::Ptr> _remote_entries;
+ connection::Manager _remote_connections;
glib::Object<DbusmenuClient> _remote_menus;
static glib::Object<GtkIconTheme> _unity_theme;
diff --git a/launcher/MockLauncherIcon.h b/launcher/MockLauncherIcon.h
index 7e62282bb..fa9124de9 100644
--- a/launcher/MockLauncherIcon.h
+++ b/launcher/MockLauncherIcon.h
@@ -329,11 +329,6 @@ public:
return icon_;
}
- nux::BaseTexture* Emblem()
- {
- return 0;
- }
-
MenuItemsVector Menus()
{
return MenuItemsVector ();
diff --git a/launcher/SwitcherView.cpp b/launcher/SwitcherView.cpp
index 321396ef7..48a660238 100644
--- a/launcher/SwitcherView.cpp
+++ b/launcher/SwitcherView.cpp
@@ -76,6 +76,7 @@ SwitcherView::SwitcherView(ui::AbstractIconRenderer::Ptr const& renderer)
icon_renderer_->pip_style = OVER_TILE;
icon_renderer_->monitor = monitors::MAX;
icon_renderer_->SetTargetSize(tile_size, icon_size, minimum_spacing);
+ icon_renderer_->scale = scale();
text_view_->SetMaximumWidth(tile_size * TEXT_TILE_MULTIPLIER);
text_view_->SetLines(1);
@@ -196,6 +197,7 @@ void SwitcherView::OnScaleChanged(double scale)
tile_size = TILE_SIZE.CP(scale);
text_size = TEXT_SIZE.CP(scale);
vertical_size = tile_size + VERTICAL_PADDING.CP(scale) * 2;
+ icon_renderer_->scale = scale;
}
void SwitcherView::StartAnimation()