diff options
Diffstat (limited to 'openbox')
| -rw-r--r-- | openbox/debug.c | 19 | ||||
| -rw-r--r-- | openbox/debug.h | 2 | ||||
| -rw-r--r-- | openbox/event.c | 3 |
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; |
