diff options
Diffstat (limited to 'launcher')
| -rw-r--r-- | launcher/Launcher.cpp | 2 | ||||
| -rw-r--r-- | launcher/LauncherIcon.cpp | 59 | ||||
| -rw-r--r-- | launcher/LauncherIcon.h | 12 | ||||
| -rw-r--r-- | launcher/MockLauncherIcon.h | 5 | ||||
| -rw-r--r-- | launcher/SwitcherView.cpp | 2 |
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() |
