--- a/gntmain.c Fri May 10 01:59:17 2019 -0400
+++ b/gntmain.c Fri May 10 02:09:50 2019 -0400
@@ -507,15 +507,15 @@
static GntWidget *win = NULL;
GntWidget *bbox, *button;
- gnt_widget_hide(GNT_WIDGET(wm->menu));
- wm->menu = gnt_menu_get_parent_menu(wm->menu);
+ menu = gnt_wm_get_menu(wm); + gnt_widget_hide(GNT_WIDGET(menu)); + menu = gnt_menu_get_parent_menu(menu); + gnt_wm_set_menu(wm, NULL); @@ -827,23 +827,25 @@
reset_menu(G_GNUC_UNUSED GntWidget *widget, G_GNUC_UNUSED gpointer data)
+ gnt_wm_set_menu(wm, NULL); gboolean gnt_screen_menu_show(gpointer newmenu)
+ if (gnt_wm_get_menu(wm)) { /* For now, if a menu is being displayed, then another menu
- gnt_widget_set_visible(GNT_WIDGET(wm->menu), TRUE);
- gnt_widget_draw(GNT_WIDGET(wm->menu));
+ gnt_wm_set_menu(wm, GNT_MENU(newmenu)); + gnt_widget_set_visible(GNT_WIDGET(newmenu), TRUE); + gnt_widget_draw(GNT_WIDGET(newmenu)); - g_signal_connect(G_OBJECT(wm->menu), "hide", G_CALLBACK(reset_menu), NULL);
- g_signal_connect(G_OBJECT(wm->menu), "destroy", G_CALLBACK(reset_menu), NULL);
+ g_signal_connect(G_OBJECT(newmenu), "hide", G_CALLBACK(reset_menu), + g_signal_connect(G_OBJECT(newmenu), "destroy", G_CALLBACK(reset_menu), --- a/gntwm.c Fri May 10 01:59:17 2019 -0400
+++ b/gntwm.c Fri May 10 02:09:50 2019 -0400
@@ -86,6 +86,13 @@
GList *acts; /* List of actions */
+ /* Currently active menu. There can be at most one menu at a time on + * the screen. If there is a menu being displayed, then all the + * keystrokes will be sent to the menu until it is closed, either when + * the user activates a menuitem, or presses Escape to cancel the menu. /* Will be set to %TRUE when a user-event, ie. a mouse-click or a
* key-press is being processed. This variable will be used to
* determine whether to give focus to a new window.
@@ -271,8 +278,8 @@
- GntMenu *top = wm->menu;
+ GntMenu *top = priv->menu; GntNode *node = g_hash_table_lookup(wm->nodes, top);
@@ -447,7 +454,7 @@
- if (priv->list.window || wm->menu) {
+ if (priv->list.window || priv->menu) { @@ -747,7 +754,7 @@
GntWM *wm = GNT_WM(bindable);
GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
- if (priv->list.window || wm->menu) {
+ if (priv->list.window || priv->menu) { @@ -1024,7 +1031,7 @@
GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
- if (priv->list.window || wm->menu) {
+ if (priv->list.window || priv->menu) { @@ -1147,7 +1154,7 @@
GntWM *wm = GNT_WM(bindable);
GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
- if (priv->list.window || wm->menu) {
+ if (priv->list.window || priv->menu) { if (gnt_ws_is_empty(priv->cws)) {
@@ -1166,7 +1173,7 @@
GntWM *wm = GNT_WM(bindable);
GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
- if (priv->list.window || wm->menu) {
+ if (priv->list.window || priv->menu) { if (gnt_ws_is_empty(priv->cws)) {
@@ -1308,7 +1315,7 @@
GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
- if (priv->list.window || wm->menu) {
+ if (priv->list.window || priv->menu) { @@ -1334,7 +1341,7 @@
GntWM *wm = GNT_WM(bindable);
GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
- if (!wm->menu && !priv->list.window &&
+ if (!priv->menu && !priv->list.window && priv->mode == GNT_KP_MODE_NORMAL) {
@@ -2174,8 +2181,8 @@
- ret = gnt_widget_key_pressed(GNT_WIDGET(wm->menu), keys);
+ ret = gnt_widget_key_pressed(GNT_WIDGET(priv->menu), keys); } else if (priv->list.window) {
ret = gnt_widget_key_pressed(priv->list.window, keys);
} else if (!gnt_ws_is_empty(priv->cws)) {
@@ -2424,6 +2431,30 @@
+gnt_wm_get_menu(GntWM *wm) + GntWMPrivate *priv = NULL; + g_return_val_if_fail(GNT_IS_WM(wm), NULL); + priv = gnt_wm_get_instance_private(wm); +gnt_wm_set_menu(GntWM *wm, GntMenu *menu) + GntWMPrivate *priv = NULL; + g_return_if_fail(GNT_IS_WM(wm)); + priv = gnt_wm_get_instance_private(wm); gnt_wm_get_event_stack(GntWM *wm)
--- a/gntwm.h Fri May 10 01:59:17 2019 -0400
+++ b/gntwm.h Fri May 10 02:09:50 2019 -0400
@@ -77,10 +77,6 @@
- * @menu: Currently active menu. There can be at most one menu at a time on the
- * screen. If there is a menu being displayed, then all the keystrokes
- * will be sent to the menu until it is closed, either when the user
- * activates a menuitem, or presses Escape to cancel the menu.
* Access to any fields is deprecated. See inline comments for replacements.
@@ -96,8 +92,6 @@
GHashTable *GNTSEAL(name_places); /* window name -> ws*/
GHashTable *GNTSEAL(title_places); /* window title -> ws */
- GntMenu *GNTSEAL(menu);
GHashTable *GNTSEAL(positions);
--- a/gntwmprivate.h Fri May 10 01:59:17 2019 -0400
+++ b/gntwmprivate.h Fri May 10 02:09:50 2019 -0400
@@ -52,6 +52,9 @@
void gnt_wm_add_action(GntWM *wm, GntAction *action);
+GntMenu *gnt_wm_get_menu(GntWM *wm); +void gnt_wm_set_menu(GntWM *wm, GntMenu *menu); gboolean gnt_wm_get_event_stack(GntWM *wm);
void gnt_wm_set_event_stack(GntWM *wm, gboolean set);