all repos — openbox @ 972e1fc5a32e7d798fb3023012e73af20b5b03c7

openbox fork - make it a bit more like ryudo

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
Dana Jansens danakj@orodu.net
commit

972e1fc5a32e7d798fb3023012e73af20b5b03c7

parent

d714bb5708bb8b99d71803404af7af01029c5553

3 files changed, 32 insertions(+), 18 deletions(-)

jump to
M openbox/client.copenbox/client.c

@@ -820,6 +820,7 @@ g_free(self->startup_id);

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

@@ -1974,6 +1975,7 @@ gchar *data = NULL;

gchar *visible = NULL; g_free(self->title); + g_free(self->original_title); /* try netwm */ if (!PROP_GETS(self->window, net_wm_name, utf8, &data)) {

@@ -1990,6 +1992,7 @@ } else

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

@@ -3398,26 +3401,26 @@ }

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; + 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->title); + 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); - prompt_show(self->kill_prompt, self); + 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); + } - g_free(m); + prompt_show(self->kill_prompt, self); } void client_kill(ObClient *self)
M openbox/client.hopenbox/client.h

@@ -120,6 +120,8 @@ /*! Normal window title */

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. */
M openbox/prompt.copenbox/prompt.c

@@ -23,6 +23,7 @@ #include "openbox.h"

#include "client.h" #include "prop.h" #include "modkeys.h" +#include "event.h" #include "gettext.h" static GList *prompt_list = NULL;

@@ -332,7 +333,15 @@ {

XSizeHints hints; gint i; - if (self->mapped) return; + if (self->mapped) { + /* activate the prompt */ + PROP_MSG(self->super.window, net_active_window, + 1, /* from an application.. */ + event_curtime, + 0, + 0); + return; + } /* set the focused button (if not found then the first button is used) */ self->focus = &self->button[0];

@@ -421,7 +430,7 @@ gint i;

ObPromptElement *but; if (e->type != ButtonPress && e->type != ButtonRelease && - e->type != MotionNotify) return; + e->type != MotionNotify) return FALSE; /* find the button */ but = NULL;