Mercurial > grim > libgnt
changeset 1277:f520becefaca
Hide GntWM->menu.
author | Elliott Sales de Andrade <quantum.analyst@gmail.com> |
---|---|
date | Fri, 10 May 2019 02:09:50 -0400 |
parents | ef91bf9353e2 |
children | df3ccd076dbe |
files | gntmain.c gntwm.c gntwm.h gntwmprivate.h |
diffstat | 4 files changed, 60 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- 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 @@ ask_before_exit(void) { static GntWidget *win = NULL; + GntMenu *menu; GntWidget *bbox, *button; - if (wm->menu) { - do { - gnt_widget_hide(GNT_WIDGET(wm->menu)); - if (wm->menu) - wm->menu = gnt_menu_get_parent_menu(wm->menu); - } while (wm->menu); + menu = gnt_wm_get_menu(wm); + while (menu) { + gnt_widget_hide(GNT_WIDGET(menu)); + menu = gnt_menu_get_parent_menu(menu); } + gnt_wm_set_menu(wm, NULL); if (win) goto raise; @@ -827,23 +827,25 @@ static void reset_menu(G_GNUC_UNUSED GntWidget *widget, G_GNUC_UNUSED gpointer data) { - wm->menu = NULL; + gnt_wm_set_menu(wm, NULL); } gboolean gnt_screen_menu_show(gpointer newmenu) { - if (wm->menu) { + if (gnt_wm_get_menu(wm)) { /* For now, if a menu is being displayed, then another menu * can NOT take over. */ return FALSE; } - wm->menu = newmenu; - 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), + NULL); + g_signal_connect(G_OBJECT(newmenu), "destroy", G_CALLBACK(reset_menu), + NULL); return TRUE; }
--- 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. + */ + GntMenu *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 @@ return TRUE; } - if (wm->menu) { - GntMenu *top = wm->menu; + if (priv->menu) { + GntMenu *top = priv->menu; while (top) { GntNode *node = g_hash_table_lookup(wm->nodes, top); if (node) @@ -447,7 +454,7 @@ GList *list; int pos, orgpos; - if (priv->list.window || wm->menu) { + if (priv->list.window || priv->menu) { return; } @@ -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) { return TRUE; } @@ -1024,7 +1031,7 @@ GntWMPrivate *priv = gnt_wm_get_instance_private(wm); int n; - if (priv->list.window || wm->menu) { + if (priv->list.window || priv->menu) { return TRUE; } @@ -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) { return TRUE; } 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) { return TRUE; } if (gnt_ws_is_empty(priv->cws)) { @@ -1308,7 +1315,7 @@ GntWM *wm = GNT_WM(b); GntWMPrivate *priv = gnt_wm_get_instance_private(wm); - if (priv->list.window || wm->menu) { + if (priv->list.window || priv->menu) { return TRUE; } @@ -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) { ignore_keys = TRUE; return TRUE; @@ -2174,8 +2181,8 @@ return TRUE; } - if (wm->menu) { - ret = gnt_widget_key_pressed(GNT_WIDGET(wm->menu), keys); + if (priv->menu) { + 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 @@ } /* Private. */ +GntMenu * +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); + + return priv->menu; +} + +/* Private. */ +void +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); + + priv->menu = menu; +} + +/* Private. */ gboolean 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 @@ /** * GntWM: - * @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); /*< private >*/
--- 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);