summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAilin Nemui <ailin@esf51.localdomain>2014-08-22 13:48:17 +0200
committerailin-nemui <ailin-nemui@users.noreply.github.com>2015-12-09 12:05:48 +0100
commit3532fc46719ebbcfe83b5814f93ac9cb58eea220 (patch)
tree076b6b6d446479e406a12e5977e8c786814e2cdf /src
parent229c600e9963452689669a8466b1c7f49912125e (diff)
downloadirssi-3532fc46719ebbcfe83b5814f93ac9cb58eea220.zip
Add bindings for exec-type window items to Perl
These bindings were missing and resulted in non-hash non-undef active entries when an interactive process is executing.
Diffstat (limited to 'src')
-rw-r--r--src/perl/perl-common.c6
-rw-r--r--src/perl/ui/UI.xs17
2 files changed, 21 insertions, 2 deletions
diff --git a/src/perl/perl-common.c b/src/perl/perl-common.c
index dcda3bb5..d7a428e5 100644
--- a/src/perl/perl-common.c
+++ b/src/perl/perl-common.c
@@ -351,10 +351,12 @@ void perl_window_item_fill_hash(HV *hv, WI_ITEM_REC *item)
g_return_if_fail(item != NULL);
type = (char *) module_find_id_str("WINDOW ITEM TYPE", item->type);
- chat_type = (char *) chat_protocol_find_id(item->chat_type)->name;
(void) hv_store(hv, "type", 4, new_pv(type), 0);
- (void) hv_store(hv, "chat_type", 9, new_pv(chat_type), 0);
+ if (item->chat_type) {
+ chat_type = (char *) chat_protocol_find_id(item->chat_type)->name;
+ (void) hv_store(hv, "chat_type", 9, new_pv(chat_type), 0);
+ }
if (item->server != NULL) {
(void) hv_store(hv, "server", 6, iobject_bless(item->server), 0);
diff --git a/src/perl/ui/UI.xs b/src/perl/ui/UI.xs
index 9db57e98..5ac3da4e 100644
--- a/src/perl/ui/UI.xs
+++ b/src/perl/ui/UI.xs
@@ -64,6 +64,19 @@ static void perl_text_dest_fill_hash(HV *hv, TEXT_DEST_REC *dest)
(void) hv_store(hv, "hilight_color", 13, new_pv(dest->hilight_color), 0);
}
+static void perl_exec_fill_hash(HV *hv, EXEC_WI_REC *item)
+{
+ g_return_if_fail(hv != NULL);
+ g_return_if_fail(item != NULL);
+
+ perl_window_item_fill_hash(hv, (WI_ITEM_REC *) item);
+ /* we don't bless to Process here to avoid infinite recursion
+ in the simplistic script binding */
+ if (item->process != NULL) {
+ (void) hv_store(hv, "process_id", 10, newSViv(item->process->id), 0);
+ }
+}
+
static PLAIN_OBJECT_INIT_REC fe_plains[] = {
{ "Irssi::UI::Process", (PERL_OBJECT_FUNC) perl_process_fill_hash },
{ "Irssi::UI::Window", (PERL_OBJECT_FUNC) perl_window_fill_hash },
@@ -94,6 +107,10 @@ CODE:
initialized = TRUE;
irssi_add_plains(fe_plains);
+ /* window items: fe-exec */
+ irssi_add_object(module_get_uniq_id_str("WINDOW ITEM TYPE", "EXEC"),
+ 0, "Irssi::UI::Exec",
+ (PERL_OBJECT_FUNC) perl_exec_fill_hash);
perl_themes_init();
void