diff options
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/app/salvtables.cxx | 37 | ||||
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkinst.cxx | 96 |
2 files changed, 88 insertions, 45 deletions
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 76650b141e0a..d865351bec06 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -639,6 +639,8 @@ namespace { Image createImage(const OUString& rImage) { + if (rImage.isEmpty()) + return Image(); if (rImage.lastIndexOf('.') != rImage.getLength() - 4) { assert((rImage == "dialog-warning" || rImage == "dialog-error" || rImage == "dialog-information") && "unknown stock image"); @@ -898,6 +900,11 @@ public: return m_xWindow->HasChildPathFocus(); } + virtual void present() override + { + m_xWindow->ToTop(ToTopFlags::RestoreWhenMin | ToTopFlags::ForegroundTask); + } + virtual void set_window_state(const OString& rStr) override { SystemWindow* pSysWin = dynamic_cast<SystemWindow*>(m_xWindow.get()); @@ -2484,6 +2491,36 @@ public: m_xTreeView->ModelHasEntryInvalidated(pEntry); } + virtual void set_image(int pos, const OUString& rImage, int col) override + { + SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, pos); + + ++col; //skip dummy/expander column + + // blank out missing entries + for (int i = pEntry->ItemCount(); i < col ; ++i) + pEntry->AddItem(std::make_unique<SvLBoxString>("")); + + Image aImage(createImage(rImage)); + if (static_cast<size_t>(col) == pEntry->ItemCount()) + { + pEntry->AddItem(std::make_unique<SvLBoxContextBmp>(aImage, aImage, false)); + SvViewDataEntry* pViewData = m_xTreeView->GetViewDataEntry(pEntry); + m_xTreeView->InitViewData(pViewData, pEntry); + } + else + { + assert(col >= 0 && static_cast<size_t>(col) < pEntry->ItemCount()); + SvLBoxItem& rItem = pEntry->GetItem(col); + assert(dynamic_cast<SvLBoxContextBmp*>(&rItem)); + static_cast<SvLBoxContextBmp&>(rItem).SetBitmap1(aImage); + static_cast<SvLBoxContextBmp&>(rItem).SetBitmap2(aImage); + } + + m_xTreeView->ModelHasEntryInvalidated(pEntry); + + } + const OUString* getEntryData(int index) const { SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, index); diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index e6ab4936dcfa..cd00ff5a9e8c 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -2152,6 +2152,11 @@ public: return gtk_window_has_toplevel_focus(m_pWindow); } + virtual void present() override + { + gtk_window_present(m_pWindow); + } + virtual void set_window_state(const OString& rStr) override { WindowStateData aData; @@ -5016,6 +5021,34 @@ namespace return found; } + GdkPixbuf* getPixbuf(const OUString& rIconName) + { + if (rIconName.isEmpty()) + return nullptr; + + GdkPixbuf* pixbuf = nullptr; + + if (rIconName.lastIndexOf('.') != rIconName.getLength() - 4) + { + assert((rIconName== "dialog-warning" || rIconName== "dialog-error" || rIconName== "dialog-information") && + "unknown stock image"); + + GError *error = nullptr; + GtkIconTheme *icon_theme = gtk_icon_theme_get_default(); + pixbuf = gtk_icon_theme_load_icon(icon_theme, OUStringToOString(rIconName, RTL_TEXTENCODING_UTF8).getStr(), + 16, GTK_ICON_LOOKUP_USE_BUILTIN, &error); + } + else + { + const AllSettings& rSettings = Application::GetSettings(); + pixbuf = load_icon_by_name(rIconName, + rSettings.GetStyleSettings().DetermineIconTheme(), + rSettings.GetUILanguageTag().getBcp47()); + } + + return pixbuf; + } + void insert_row(GtkListStore* pListStore, GtkTreeIter& iter, int pos, const OUString* pId, const OUString& rText, const OUString* pIconName, const VirtualDevice* pDevice) { if (!pIconName && !pDevice) @@ -5029,25 +5062,7 @@ namespace { if (pIconName) { - GdkPixbuf* pixbuf = nullptr; - - if (pIconName->lastIndexOf('.') != pIconName->getLength() - 4) - { - assert((*pIconName== "dialog-warning" || *pIconName== "dialog-error" ||*pIconName== "dialog-information") && - "unknown stock image"); - - GError *error = nullptr; - GtkIconTheme *icon_theme = gtk_icon_theme_get_default(); - pixbuf = gtk_icon_theme_load_icon(icon_theme, OUStringToOString(*pIconName, RTL_TEXTENCODING_UTF8).getStr(), - 16, GTK_ICON_LOOKUP_USE_BUILTIN, &error); - } - else - { - const AllSettings& rSettings = Application::GetSettings(); - pixbuf = load_icon_by_name(*pIconName, - rSettings.GetStyleSettings().DetermineIconTheme(), - rSettings.GetUILanguageTag().getBcp47()); - } + GdkPixbuf* pixbuf = getPixbuf(*pIconName); gtk_list_store_insert_with_values(pListStore, &iter, pos, 0, OUStringToOString(rText, RTL_TEXTENCODING_UTF8).getStr(), @@ -5082,32 +5097,6 @@ namespace } } } - - GdkPixbuf* getPixbuf(const OUString& rIconName) - { - GdkPixbuf* pixbuf = nullptr; - - if (rIconName.lastIndexOf('.') != rIconName.getLength() - 4) - { - assert((rIconName== "dialog-warning" || rIconName== "dialog-error" || rIconName== "dialog-information") && - "unknown stock image"); - - GError *error = nullptr; - GtkIconTheme *icon_theme = gtk_icon_theme_get_default(); - pixbuf = gtk_icon_theme_load_icon(icon_theme, OUStringToOString(rIconName, RTL_TEXTENCODING_UTF8).getStr(), - 16, GTK_ICON_LOOKUP_USE_BUILTIN, &error); - } - else - { - const AllSettings& rSettings = Application::GetSettings(); - pixbuf = load_icon_by_name(rIconName, - rSettings.GetStyleSettings().DetermineIconTheme(), - rSettings.GetUILanguageTag().getBcp47()); - } - - return pixbuf; - } - } namespace @@ -5816,6 +5805,23 @@ public: return set(pos, col, bOn); } + virtual void set_image(int pos, const OUString& rImage, int col) override + { + col = get_model_col(col); + + GdkPixbuf* pixbuf = getPixbuf(rImage); + + GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore); + GtkTreeIter iter; + if (gtk_tree_model_iter_nth_child(pModel, &iter, nullptr, pos)) + { + gtk_tree_store_set(m_pTreeStore, &iter, col, pixbuf, -1); + } + + if (pixbuf) + g_object_unref(pixbuf); + } + virtual OUString get_id(int pos) const override { return get(pos, m_nIdCol); |