[Libreoffice-commits] core.git: 2 commits - include/vcl vcl/source vcl/unx
Caolán McNamara (via logerrit)
logerrit at kemper.freedesktop.org
Sun Jan 19 19:24:41 UTC 2020
include/vcl/weld.hxx | 3 +++
vcl/source/app/salvtables.cxx | 4 ++++
vcl/unx/gtk3/gtk3gtkinst.cxx | 31 ++++++++++++++++++++++++-------
3 files changed, 31 insertions(+), 7 deletions(-)
New commits:
commit 6afb18bc5fbc530d6404eac1c9e7191e58de27fc
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Sun Jan 19 17:06:02 2020 +0000
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Sun Jan 19 20:24:18 2020 +0100
add api to determine number of menu items
Change-Id: I69082c1b564c42be7a14fa36b0ba1dab34a3b5b8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87043
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 9890be5d4bc0..9aa93cbe84ec 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -1949,6 +1949,9 @@ public:
insert(-1, rId, rStr, nullptr, &rImage, false);
}
+ // return the number of toplevel nodes
+ virtual int n_children() const = 0;
+
virtual ~Menu() {}
};
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 248a62090f06..1603033ded71 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -921,6 +921,10 @@ public:
auto nInsertPos = pos == -1 ? MENU_APPEND : pos;
m_xMenu->InsertSeparator(rId.toUtf8(), nInsertPos);
}
+ virtual int n_children() const override
+ {
+ return m_xMenu->GetItemCount();
+ }
PopupMenu* getMenu() const
{
return m_xMenu.get();
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index fdb8d66f68a2..f146049dffd2 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -7056,6 +7056,14 @@ public:
gtk_menu_reorder_child(m_pMenu, pItem, pos);
}
+ virtual int n_children() const override
+ {
+ GList* pChildren = gtk_container_get_children(GTK_CONTAINER(m_pMenu));
+ int nLen = g_list_length(pChildren);
+ g_list_free(pChildren);
+ return nLen;
+ }
+
virtual ~GtkInstanceMenu() override
{
clear_extras();
commit 3ed742a0dbe2566007447f9adb0f54f5424bd05d
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Sun Jan 19 17:02:35 2020 +0000
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Sun Jan 19 20:24:04 2020 +0100
report submenu activatation the same with/without MenuButton
as a toplevel
Change-Id: I0883281291d2084d91c2c4b6f2d2d233c3448fcd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87042
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index fdc09fa45581..fdb8d66f68a2 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -6841,7 +6841,7 @@ class GtkInstanceMenu : public MenuHelper, public virtual weld::Menu
protected:
std::vector<GtkMenuItem*> m_aExtraItems;
OString m_sActivated;
- GtkInstanceMenuButton* m_pTopLevelMenuButton;
+ MenuHelper* m_pTopLevelMenuHelper;
private:
virtual void signal_activate(GtkMenuItem* pItem) override
@@ -6855,10 +6855,10 @@ private:
{
if (m_aExtraItems.empty())
return;
- if (m_pTopLevelMenuButton)
+ if (m_pTopLevelMenuHelper)
{
for (auto a : m_aExtraItems)
- m_pTopLevelMenuButton->remove_from_map(a);
+ m_pTopLevelMenuHelper->remove_from_map(a);
}
m_aExtraItems.clear();
}
@@ -6866,8 +6866,9 @@ private:
public:
GtkInstanceMenu(GtkMenu* pMenu, bool bTakeOwnership)
: MenuHelper(pMenu, bTakeOwnership)
- , m_pTopLevelMenuButton(nullptr)
+ , m_pTopLevelMenuHelper(nullptr)
{
+ g_object_set_data(G_OBJECT(m_pMenu), "g-lo-GtkInstanceMenu", this);
// tdf#122527 if we're welding a submenu of a menu of a MenuButton,
// then find that MenuButton parent so that when adding items to this
// menu we can inform the MenuButton of their addition
@@ -6884,11 +6885,18 @@ public:
}
if (pTopLevelMenu != pMenu)
{
+ // maybe the toplevel is a menubutton
GtkWidget* pAttached = gtk_menu_get_attach_widget(pTopLevelMenu);
if (pAttached && GTK_IS_MENU_BUTTON(pAttached))
{
void* pData = g_object_get_data(G_OBJECT(pAttached), "g-lo-GtkInstanceButton");
- m_pTopLevelMenuButton = dynamic_cast<GtkInstanceMenuButton*>(static_cast<GtkInstanceButton*>(pData));
+ m_pTopLevelMenuHelper = dynamic_cast<GtkInstanceMenuButton*>(static_cast<GtkInstanceButton*>(pData));
+ }
+ // or maybe a menu
+ if (!m_pTopLevelMenuHelper)
+ {
+ void* pData = g_object_get_data(G_OBJECT(pTopLevelMenu), "g-lo-GtkInstanceMenu");
+ m_pTopLevelMenuHelper = static_cast<GtkInstanceMenu*>(pData);
}
}
}
@@ -7042,8 +7050,8 @@ public:
GtkMenuItem* pMenuItem = GTK_MENU_ITEM(pItem);
m_aExtraItems.push_back(pMenuItem);
add_to_map(pMenuItem);
- if (m_pTopLevelMenuButton)
- m_pTopLevelMenuButton->add_to_map(pMenuItem);
+ if (m_pTopLevelMenuHelper)
+ m_pTopLevelMenuHelper->add_to_map(pMenuItem);
if (pos != -1)
gtk_menu_reorder_child(m_pMenu, pItem, pos);
}
@@ -7051,6 +7059,7 @@ public:
virtual ~GtkInstanceMenu() override
{
clear_extras();
+ g_object_steal_data(G_OBJECT(m_pMenu), "g-lo-GtkInstanceMenu");
}
};
More information about the Libreoffice-commits
mailing list