From 7ecfa01df81fcce628fbb354cc0c4faaddfb5c84 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Thu, 7 Feb 2008 01:03:05 -0500 Subject: [PATCH] if a prompt is already showing and you try show it again, then make it active. in the "kill this?" prompt use the window's original title without any of the openbox-appended-ness --- openbox/client.c | 37 ++++++++++++++++++++----------------- openbox/client.h | 2 ++ openbox/prompt.c | 13 +++++++++++-- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/openbox/client.c b/openbox/client.c index d088fca..c9da5e6 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -737,6 +737,7 @@ void client_unmanage(ObClient *self) g_free(self->wm_command); g_free(self->title); g_free(self->icon_title); + g_free(self->original_title); g_free(self->name); g_free(self->class); g_free(self->role); @@ -1892,6 +1893,7 @@ void client_update_title(ObClient *self) gchar *visible = NULL; g_free(self->title); + g_free(self->original_title); /* try netwm */ if (!OBT_PROP_GETS(self->window, NET_WM_NAME, utf8, &data)) { @@ -1908,6 +1910,7 @@ void client_update_title(ObClient *self) data = g_strdup("Unnamed Window"); } } + self->original_title = g_strdup(data); if (self->client_machine) { visible = g_strdup_printf("%s (%s)", data, self->client_machine); @@ -3306,26 +3309,26 @@ static void client_kill_requested(ObPrompt *p, gint result, gpointer data) static void client_prompt_kill(ObClient *self) { - ObPromptAnswer answers[] = { - { _("No"), OB_KILL_RESULT_NO }, - { _("Yes"), OB_KILL_RESULT_YES } - }; - gchar *m; - /* check if we're already prompting */ - if (self->kill_prompt) return; - - m = g_strdup_printf - (_("The window \"%s\" does not seem to be responding. Do you want to force it to exit?"), self->title); + if (!self->kill_prompt) { + ObPromptAnswer answers[] = { + { _("No"), OB_KILL_RESULT_NO }, + { _("Yes"), OB_KILL_RESULT_YES } + }; + gchar *m; + + m = g_strdup_printf + (_("The window \"%s\" does not seem to be responding. Do you want to force it to exit?"), self->original_title); + + self->kill_prompt = prompt_new(m, answers, + sizeof(answers)/sizeof(answers[0]), + OB_KILL_RESULT_NO, /* default = no */ + OB_KILL_RESULT_NO, /* cancel = no */ + client_kill_requested, self); + g_free(m); + } - self->kill_prompt = prompt_new(m, answers, - sizeof(answers)/sizeof(answers[0]), - OB_KILL_RESULT_NO, /* default = no */ - OB_KILL_RESULT_NO, /* cancel = no */ - client_kill_requested, self); prompt_show(self->kill_prompt, self); - - g_free(m); } void client_kill(ObClient *self) diff --git a/openbox/client.h b/openbox/client.h index 2f1840c..dbe93d2 100644 --- a/openbox/client.h +++ b/openbox/client.h @@ -120,6 +120,8 @@ struct _ObClient gchar *title; /*! Window title when iconified */ gchar *icon_title; + /*! The title as requested by the client, without any of our own changes */ + gchar *original_title; /*! Hostname of machine running the client */ gchar *client_machine; /*! The command used to run the program. Pre-XSMP window identification. */ diff --git a/openbox/prompt.c b/openbox/prompt.c index b1969e0..ad930e3 100644 --- a/openbox/prompt.c +++ b/openbox/prompt.c @@ -20,6 +20,7 @@ #include "openbox.h" #include "screen.h" #include "client.h" +#include "event.h" #include "obt/display.h" #include "obt/keyboard.h" #include "obt/prop.h" @@ -330,7 +331,15 @@ void prompt_show(ObPrompt *self, ObClient *parent) XSizeHints hints; gint i; - if (self->mapped) return; + if (self->mapped) { + /* activate the prompt */ + OBT_PROP_MSG(ob_screen, self->super.window, NET_ACTIVE_WINDOW, + 1, /* from an application.. */ + event_curtime, + 0, + 0, 0); + return; + } /* set the focused button (if not found then the first button is used) */ self->focus = &self->button[0]; @@ -417,7 +426,7 @@ gboolean prompt_mouse_event(ObPrompt *self, XEvent *e) ObPromptElement *but; if (e->type != ButtonPress && e->type != ButtonRelease && - e->type != MotionNotify) return; + e->type != MotionNotify) return FALSE; /* find the button */ but = NULL; -- 1.9.1