libgnt/libgnt

Hide GntWM->menu.

2019-05-10, Elliott Sales de Andrade
f520becefaca
Parents ef91bf9353e2
Children df3ccd076dbe
Hide GntWM->menu.
  • +15 -13
    gntmain.c
  • +42 -11
    gntwm.c
  • +0 -6
    gntwm.h
  • +3 -0
    gntwmprivate.h
  • --- 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);