From b30fb2d34a84cc8a44a4d3ac4862b42fb378129f Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Wed, 22 Mar 2023 10:35:11 +0000 Subject: [PATCH] Add ability to main window to specify a popup window qualifier This will allow different popup context window menus for a plugin page to be popped when required. --- gnucash/gnome-utils/gnc-main-window.cpp | 7 +++++-- gnucash/gnome-utils/gnc-plugin-page.c | 27 ++++++++++++++++++++++++- gnucash/gnome-utils/gnc-plugin-page.h | 18 +++++++++++++++++ 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/gnucash/gnome-utils/gnc-main-window.cpp b/gnucash/gnome-utils/gnc-main-window.cpp index 18c18d9edf..d0a905fbef 100644 --- a/gnucash/gnome-utils/gnc-main-window.cpp +++ b/gnucash/gnome-utils/gnc-main-window.cpp @@ -5510,7 +5510,10 @@ do_popup_menu (GncPluginPage *page, GdkEventButton *event) builder = gnc_plugin_page_get_builder (page); - menu_qualifier = gnc_plugin_page_get_menu_qualifier (page); + menu_qualifier = gnc_plugin_page_get_menu_popup_qualifier (page); + + if (!menu_qualifier) + menu_qualifier = gnc_plugin_page_get_menu_qualifier (page); if (builder == nullptr) { @@ -5519,7 +5522,7 @@ do_popup_menu (GncPluginPage *page, GdkEventButton *event) } if (menu_qualifier) - popup_menu_name = g_strconcat ("mainwin-popup-", menu_qualifier, NULL); + popup_menu_name = g_strconcat ("mainwin-popup-", menu_qualifier, nullptr); else popup_menu_name = g_strdup ("mainwin-popup"); diff --git a/gnucash/gnome-utils/gnc-plugin-page.c b/gnucash/gnome-utils/gnc-plugin-page.c index 54348e6c79..58074303ee 100644 --- a/gnucash/gnome-utils/gnc-plugin-page.c +++ b/gnucash/gnome-utils/gnc-plugin-page.c @@ -94,6 +94,7 @@ typedef struct _GncPluginPagePrivate GSimpleActionGroup *simple_action_group; const gchar *simple_action_group_name; const gchar *menu_qualifier; + const gchar *menu_popup_qualifier; GList *books; @@ -1024,7 +1025,6 @@ gnc_plugin_page_get_menu_qualifier (GncPluginPage *page) return priv->menu_qualifier; } - void gnc_plugin_page_set_menu_qualifier (GncPluginPage *page, const char *menu_qualifier) @@ -1038,6 +1038,31 @@ gnc_plugin_page_set_menu_qualifier (GncPluginPage *page, priv->menu_qualifier = menu_qualifier; } +const gchar * +gnc_plugin_page_get_menu_popup_qualifier (GncPluginPage *page) +{ + GncPluginPagePrivate *priv; + + g_return_val_if_fail (GNC_IS_PLUGIN_PAGE(page), NULL); + + priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page); + return priv->menu_popup_qualifier; +} + +void +gnc_plugin_page_set_menu_popup_qualifier (GncPluginPage *page, + const char *menu_qualifier) +{ + GncPluginPagePrivate *priv; + + g_return_if_fail (GNC_IS_PLUGIN_PAGE(page)); + + priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page); + + priv->menu_popup_qualifier = menu_qualifier; +} + + GSimpleActionGroup * gnc_plugin_page_get_action_group (GncPluginPage *page) { diff --git a/gnucash/gnome-utils/gnc-plugin-page.h b/gnucash/gnome-utils/gnc-plugin-page.h index 5ccec3b083..647706dc34 100644 --- a/gnucash/gnome-utils/gnc-plugin-page.h +++ b/gnucash/gnome-utils/gnc-plugin-page.h @@ -516,6 +516,24 @@ const gchar * gnc_plugin_page_get_menu_qualifier (GncPluginPage *page); void gnc_plugin_page_set_menu_qualifier (GncPluginPage *page, const char *menu_qualifier); +/** Retrieve the menu popup qualifier for this page. + * + * @param page The page whose quailifier string should be retrieved. + * + * @return A qualifier string for this page. + */ +const gchar * gnc_plugin_page_get_menu_popup_qualifier (GncPluginPage *page); + +/** Set a qualifier string for this page. This string is used when there + * is more than one popup menu associated with the page. + * + * @param page The page whose qualifier string should be updated. + * + * @param menu_qualifier A string to be used as for the qualifier. + */ +void gnc_plugin_page_set_menu_popup_qualifier (GncPluginPage *page, + const char *menu_qualifier); + /** Retrieve the GSimpleActionGroup object associated with this page. * * @param page The page whose menu/toolbar action group should be