NeoMutt  2023-03-22-27-g3cb248
Teaching an old dog new tricks
DOXYGEN
dialog.c File Reference

Dialog Windows. More...

#include "config.h"
#include <stddef.h>
#include <stdbool.h>
#include "mutt/lib.h"
#include "lib.h"
+ Include dependency graph for dialog.c:

Go to the source code of this file.

Functions

struct MuttWindowdialog_find (struct MuttWindow *win)
 Find the parent Dialog of a Window. More...
 
void dialog_push (struct MuttWindow *dlg)
 Display a Window to the user. More...
 
void dialog_pop (void)
 Hide a Window from the user. More...
 
static int alldialogs_window_observer (struct NotifyCallback *nc)
 Notification that a Window has changed - Implements observer_t -. More...
 
struct MuttWindowalldialogs_new (void)
 Create the AllDialogs Window. More...
 
struct MuttWindowalldialogs_get_current (void)
 Get the currently active Dialog. More...
 

Variables

struct MuttWindowAllDialogsWindow = NULL
 Parent of all Dialogs. More...
 

Detailed Description

Dialog Windows.

Authors
  • Richard Russon

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Definition in file dialog.c.

Function Documentation

◆ dialog_find()

struct MuttWindow * dialog_find ( struct MuttWindow win)

Find the parent Dialog of a Window.

Parameters
winWindow
Return values
ptrDialog

Dialog Windows will be owned by a MuttWindow of type WT_ALL_DIALOGS.

Definition at line 83 of file dialog.c.

84{
85 for (; win && win->parent; win = win->parent)
86 {
87 if (win->parent->type == WT_ALL_DIALOGS)
88 return win;
89 }
90
91 return NULL;
92}
@ WT_ALL_DIALOGS
Container for All Dialogs (nested Windows)
Definition: mutt_window.h:74
struct MuttWindow * parent
Parent Window.
Definition: mutt_window.h:135
enum WindowType type
Window type, e.g. WT_SIDEBAR.
Definition: mutt_window.h:144
+ Here is the caller graph for this function:

◆ dialog_push()

void dialog_push ( struct MuttWindow dlg)

Display a Window to the user.

Parameters
dlgWindow to display

The Dialog Windows are kept in a stack. The topmost is visible to the user, whilst the others are hidden.

When a Window is pushed, the old Window is marked as not visible.

Definition at line 103 of file dialog.c.

104{
105 if (!dlg || !AllDialogsWindow)
106 return;
107
108 struct MuttWindow *last = TAILQ_LAST(&AllDialogsWindow->children, MuttWindowList);
109 if (last)
110 last->state.visible = false;
111
114
115 // Notify the world, allowing plugins to integrate
116 mutt_debug(LL_NOTIFY, "NT_WINDOW_DIALOG visible: %s, %p\n",
117 mutt_window_win_name(dlg), dlg);
118 struct EventWindow ev_w = { dlg, WN_VISIBLE };
120
121 dlg->state.visible = true;
124 window_set_focus(dlg);
125
126#ifdef USE_DEBUG_WINDOW
128#endif
129}
void debug_win_dump(void)
Definition: window.c:95
struct MuttWindow * AllDialogsWindow
Parent of all Dialogs.
Definition: dialog.c:74
#define mutt_debug(LEVEL,...)
Definition: logging.h:84
@ LL_NOTIFY
Log of notifications.
Definition: logging.h:45
bool notify_send(struct Notify *notify, enum NotifyType event_type, int event_subtype, void *event_data)
Send out a notification message.
Definition: notify.c:171
void notify_set_parent(struct Notify *notify, struct Notify *parent)
Set the parent notification handler.
Definition: notify.c:93
void mutt_window_reflow(struct MuttWindow *win)
Resize a Window and its children.
Definition: mutt_window.c:341
const char * mutt_window_win_name(const struct MuttWindow *win)
Get the name of a Window.
Definition: mutt_window.c:711
struct MuttWindow * window_set_focus(struct MuttWindow *win)
Set the Window focus.
Definition: mutt_window.c:660
@ NT_WINDOW_DIALOG
A new Dialog Window has been created, e.g. WT_DLG_INDEX.
Definition: mutt_window.h:207
#define WN_VISIBLE
Window became visible.
Definition: mutt_window.h:191
@ NT_WINDOW
MuttWindow has changed, NotifyWindow, EventWindow.
Definition: notify_type.h:55
#define TAILQ_INSERT_TAIL(head, elm, field)
Definition: queue.h:809
#define TAILQ_LAST(head, headname)
Definition: queue.h:819
An Event that happened to a Window.
Definition: mutt_window.h:215
struct WindowState state
Current state of the Window.
Definition: mutt_window.h:127
struct Notify * notify
Notifications: NotifyWindow, EventWindow.
Definition: mutt_window.h:138
struct MuttWindowList children
Children Windows.
Definition: mutt_window.h:136
bool visible
Window is visible.
Definition: mutt_window.h:59
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dialog_pop()

void dialog_pop ( void  )

Hide a Window from the user.

The topmost (visible) Window is removed from the stack and the next Window is marked as visible.

Definition at line 137 of file dialog.c.

138{
139 if (!AllDialogsWindow)
140 return;
141
142 struct MuttWindow *last = TAILQ_LAST(&AllDialogsWindow->children, MuttWindowList);
143 if (!last)
144 return;
145
146 // Notify the world, allowing plugins to clean up
147 mutt_debug(LL_NOTIFY, "NT_WINDOW_DIALOG hidden: %s, %p\n",
148 mutt_window_win_name(last), last);
149 struct EventWindow ev_w = { last, WN_HIDDEN };
151
152 last->state.visible = false;
153 last->parent = NULL;
154 TAILQ_REMOVE(&AllDialogsWindow->children, last, entries);
155
156 last = TAILQ_LAST(&AllDialogsWindow->children, MuttWindowList);
157 if (last)
158 {
159 last->state.visible = true;
161 window_set_focus(last);
162 }
163 else
164 {
165 AllDialogsWindow->focus = NULL;
166 }
167#ifdef USE_DEBUG_WINDOW
169#endif
170}
#define WN_HIDDEN
Window became hidden.
Definition: mutt_window.h:192
#define TAILQ_REMOVE(head, elm, field)
Definition: queue.h:841
struct MuttWindow * focus
Focused Window.
Definition: mutt_window.h:140
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ alldialogs_new()

struct MuttWindow * alldialogs_new ( void  )

Create the AllDialogs Window.

Return values
ptrNew AllDialogs Window

Create the container for all the Dialogs.

Definition at line 206 of file dialog.c.

207{
211
213
214 AllDialogsWindow = win_alldlgs;
215
216 return win_alldlgs;
217}
static int alldialogs_window_observer(struct NotifyCallback *nc)
Notification that a Window has changed - Implements observer_t -.
Definition: dialog.c:179
bool notify_observer_add(struct Notify *notify, enum NotifyType type, observer_t callback, void *global_data)
Add an observer to an object.
Definition: notify.c:189
struct MuttWindow * mutt_window_new(enum WindowType type, enum MuttWindowOrientation orient, enum MuttWindowSize size, int cols, int rows)
Create a new Window.
Definition: mutt_window.c:180
@ MUTT_WIN_ORIENT_VERTICAL
Window uses all available vertical space.
Definition: mutt_window.h:38
#define MUTT_WIN_SIZE_UNLIMITED
Use as much space as possible.
Definition: mutt_window.h:52
@ MUTT_WIN_SIZE_MAXIMISE
Window wants as much space as possible.
Definition: mutt_window.h:48
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ alldialogs_get_current()

struct MuttWindow * alldialogs_get_current ( void  )

Get the currently active Dialog.

Return values
ptrActive Dialog

Definition at line 223 of file dialog.c.

224{
225 if (!AllDialogsWindow)
226 return NULL;
227
228 struct MuttWindow *np = NULL;
230 {
232 return np;
233 }
234
235 return NULL;
236}
bool mutt_window_is_visible(struct MuttWindow *win)
Is the Window visible?
Definition: mutt_window.c:502
#define TAILQ_FOREACH(var, head, field)
Definition: queue.h:725
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ AllDialogsWindow

struct MuttWindow* AllDialogsWindow = NULL

Parent of all Dialogs.

Definition at line 74 of file dialog.c.