summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
Diffstat (limited to 'openbox')
-rw-r--r--openbox/debug.c19
-rw-r--r--openbox/debug.h2
-rw-r--r--openbox/event.c3
3 files changed, 22 insertions, 2 deletions
diff --git a/openbox/debug.c b/openbox/debug.c
index 358b090b..ad083b17 100644
--- a/openbox/debug.c
+++ b/openbox/debug.c
@@ -38,6 +38,8 @@ static guint rr_handler_id = 0;
static guint obt_handler_id = 0;
static guint ob_handler_id = 0;
static guint ob_handler_prompt_id = 0;
+static GList *prompt_queue = NULL;
+static gboolean allow_prompts = TRUE;
static void log_handler(const gchar *log_domain, GLogLevelFlags log_level,
const gchar *message, gpointer user_data);
@@ -134,8 +136,8 @@ static void log_handler(const gchar *log_domain, GLogLevelFlags log_level,
static void prompt_handler(const gchar *log_domain, GLogLevelFlags log_level,
const gchar *message, gpointer data)
{
- if (ob_state() == OB_STATE_RUNNING)
- prompt_show_message(message, "Openbox", _("Close"));
+ if (ob_state() == OB_STATE_RUNNING && allow_prompts)
+ prompt_queue = g_list_prepend(prompt_queue, g_strdup(message));
else
log_handler(log_domain, log_level, message, data);
}
@@ -184,3 +186,16 @@ void ob_debug_type(ObDebugType type, const gchar *a, ...)
log_argv(type, a, vl);
va_end(vl);
}
+
+void ob_debug_show_prompts(void)
+{
+ if (prompt_queue) {
+ allow_prompts = FALSE; /* avoid recursive prompts */
+ while (prompt_queue) {
+ prompt_show_message(prompt_queue->data, "Openbox", _("Close"));
+ g_free(prompt_queue->data);
+ prompt_queue = g_list_delete_link(prompt_queue, prompt_queue);
+ }
+ allow_prompts = TRUE;
+ }
+}
diff --git a/openbox/debug.h b/openbox/debug.h
index a24e66ea..13c55988 100644
--- a/openbox/debug.h
+++ b/openbox/debug.h
@@ -38,4 +38,6 @@ void ob_debug_type(ObDebugType type, const gchar *a, ...);
void ob_debug_enable(ObDebugType type, gboolean enable);
+void ob_debug_show_prompts(void);
+
#endif
diff --git a/openbox/event.c b/openbox/event.c
index ba156da6..b9ec1c51 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -736,6 +736,9 @@ static void event_process(const XEvent *ec, gpointer data)
used = event_handle_prompt(prompt, e);
}
+ /* show any debug prompts that are queued */
+ ob_debug_show_prompts();
+
/* if something happens and it's not from an XEvent, then we don't know
the time, so clear it here until the next event is handled */
event_curtime = event_sourcetime = CurrentTime;