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);