1
0
mirror of https://github.com/irssi/irssi.git synced 2024-12-04 14:46:39 -05:00
irssi/window-views-patch.diff
Timo Sirainen 770ae4596d Initial revision
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@3 dbcabf3a-b0e7-0310-adc4-f8d773084564
1999-09-03 14:27:29 +00:00

2673 lines
92 KiB
Diff
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

diff -ru irssi-0.7.11/src/gui-gnome/Makefile.am irssi-0.7.11-new/src/gui-gnome/Makefile.am
--- irssi-0.7.11/src/gui-gnome/Makefile.am Sun Jun 6 18:48:07 1999
+++ irssi-0.7.11-new/src/gui-gnome/Makefile.am Mon Jun 7 18:33:41 1999
@@ -53,7 +52,8 @@
gui-mainwindows.c \
gui-printtext.c \
gui-server.c \
- gui-windows.c \
+ gui-windowset.c \
+ gui-windows-view.c \
irssi.c \
setup-appearance.c \
setup-ircproxy.c \
@@ -98,7 +98,8 @@
gui-mainwindows.h \
gui-printtext.h \
gui-server.h \
- gui-windows.h \
+ gui-windowset.h \
+ gui-windows-view.h \
gtk-specific.h \
gnome-specific.h \
irssi.h \
diff -ru irssi-0.7.11/src/gui-gnome/channels-newdata.c irssi-0.7.11-new/src/gui-gnome/channels-newdata.c
--- irssi-0.7.11/src/gui-gnome/channels-newdata.c Sat May 15 20:23:24 1999
+++ irssi-0.7.11-new/src/gui-gnome/channels-newdata.c Sat Jun 12 17:55:06 1999
@@ -57,7 +57,7 @@
g_return_val_if_fail(channel != NULL, FALSE);
label = gtk_notebook_get_tab_label(GTK_NOTEBOOK(WINDOW_GUI(CHANNEL_PARENT(channel))->parent->notebook),
- WINDOW_GUI(CHANNEL_PARENT(channel))->window);
+ WINDOW_GUI(CHANNEL_PARENT(channel))->windowset->window);
newdata_label_colorify(channel, label);
return TRUE;
diff -ru irssi-0.7.11/src/gui-gnome/dialog-channels.c irssi-0.7.11-new/src/gui-gnome/dialog-channels.c
--- irssi-0.7.11/src/gui-gnome/dialog-channels.c Wed May 12 17:54:45 1999
+++ irssi-0.7.11-new/src/gui-gnome/dialog-channels.c Mon Jun 7 18:57:46 1999
@@ -617,7 +617,7 @@
{
/* channel specific background pixmap */
path = convert_home(rec->background);
- gui_window_set_background_pixmap(CHANNEL_PARENT(channel), path);
+ gui_window_view_set_background_pixmap(WINDOW_GUI(CHANNEL_PARENT(channel)), path);
g_free(path);
}
diff -ru irssi-0.7.11/src/gui-gnome/dialog-textwidget.c irssi-0.7.11-new/src/gui-gnome/dialog-textwidget.c
--- irssi-0.7.11/src/gui-gnome/dialog-textwidget.c Thu May 13 14:46:51 1999
+++ irssi-0.7.11-new/src/gui-gnome/dialog-textwidget.c Sat Jun 12 17:26:21 1999
@@ -134,7 +134,7 @@
return;
}
- if (WINDOW_GUI(window->active)->zvt)
+ if (window->active->active->zvt)
{
gui_dialog(DIALOG_ERROR, "Find doesn't work with ZVT windows yet");
return;
@@ -145,7 +145,7 @@
GNOME_STOCK_BUTTON_CLOSE, NULL);
gtk_signal_connect(GTK_OBJECT(dialog), "delete_event",
GTK_SIGNAL_FUNC(gtk_widget_destroy), NULL);
- gui_widget_depends_data(dialog, "window destroyed", window->active);
+ gui_widget_depends_data(dialog, "window destroyed", window->active->active->window);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(dialog)->vbox), hbox, TRUE, TRUE, 0);
@@ -160,8 +160,8 @@
gnome_dialog_button_connect_object(GNOME_DIALOG(dialog), 1, sig_find_next, GTK_OBJECT(dialog));
gnome_dialog_button_connect_object(GNOME_DIALOG(dialog), 2, GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(dialog));
- gtk_object_set_data(GTK_OBJECT(dialog), "text", WINDOW_GUI(window->active)->text);
- gtk_object_set_data(GTK_OBJECT(dialog), "window", window->active);
+ gtk_object_set_data(GTK_OBJECT(dialog), "text", window->active->active->text);
+ gtk_object_set_data(GTK_OBJECT(dialog), "window", window->active->active->window);
gtk_object_set_data(GTK_OBJECT(dialog), "entry", entry);
gtk_widget_show_all(dialog);
@@ -220,13 +220,13 @@
return;
}
- if (WINDOW_GUI(window->active)->zvt)
+ if (window->active->active->zvt)
{
gui_dialog(DIALOG_ERROR, "Save doesn't work with ZVT windows yet");
return;
}
- if (gtk_text_get_length(GTK_TEXT(WINDOW_GUI(window->active)->text)) == 0)
+ if (gtk_text_get_length(GTK_TEXT(window->active->active->text)) == 0)
{
gui_dialog(DIALOG_OK, _("Window doesn't have any text"));
return;
@@ -236,12 +236,12 @@
GNOME_STOCK_BUTTON_CANCEL, NULL);
gtk_signal_connect(GTK_OBJECT(dialog), "delete_event",
GTK_SIGNAL_FUNC(gtk_widget_destroy), NULL);
- gui_widget_depends_data(dialog, "window destroyed", window->active);
+ gui_widget_depends_data(dialog, "window destroyed", window->active->active->window);
button = gtk_check_button_new_with_label(_("Save only selected text"));
gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(dialog)->vbox), button, FALSE, FALSE, 0);
- if (GTK_EDITABLE(WINDOW_GUI(window->active)->text)->has_selection)
+ if (GTK_EDITABLE(window->active->active->text)->has_selection)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
else
gtk_widget_set_sensitive(button, FALSE);
@@ -258,7 +258,7 @@
gnome_dialog_button_connect_object(GNOME_DIALOG(dialog), 0, sig_save_ok, GTK_OBJECT(dialog));
gnome_dialog_button_connect_object(GNOME_DIALOG(dialog), 1, GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(dialog));
- gtk_object_set_data(GTK_OBJECT(dialog), "text", WINDOW_GUI(window->active)->text);
+ gtk_object_set_data(GTK_OBJECT(dialog), "text", window->active->active->text);
gtk_object_set_data(GTK_OBJECT(dialog), "selbut", button);
gtk_object_set_data(GTK_OBJECT(dialog), "entry", gnome_file_entry_gtk_entry(GNOME_FILE_ENTRY(entry)));
diff -ru irssi-0.7.11/src/gui-gnome/dialog-window.c irssi-0.7.11-new/src/gui-gnome/dialog-window.c
--- irssi-0.7.11/src/gui-gnome/dialog-window.c Sun Jun 6 18:34:26 1999
+++ irssi-0.7.11-new/src/gui-gnome/dialog-window.c Sat Jun 12 17:28:12 1999
@@ -108,13 +108,13 @@
hbox2 = gtk_hbox_new(FALSE, 5);
gtk_box_pack_start(GTK_BOX(hbox), hbox2, TRUE, TRUE, 0);
- str = g_strdup_printf("%d", WINDOW_GUI(window->active)->text->allocation.width);
+ str = g_strdup_printf("%d", window->active->active->text->allocation.width);
entry = gui_create_labelentry(hbox2, _("Width"), str, TRUE);
gtk_object_set_data(GTK_OBJECT(dialog), "sizexentry", entry);
gtk_widget_set_usize(entry, 50, -1);
g_free(str);
- str = g_strdup_printf("%d", WINDOW_GUI(window->active)->text->allocation.height);
+ str = g_strdup_printf("%d", window->active->active->text->allocation.height);
entry = gui_create_labelentry(hbox2, _("Height"), str, TRUE);
gtk_object_set_data(GTK_OBJECT(dialog), "sizeyentry", entry);
gtk_widget_set_usize(entry, 50, -1);
@@ -154,7 +154,7 @@
gtk_widget_set_sensitive(hbox2, FALSE);
/* window name */
- channel = window->active->active;
+ channel = window->active->active->window->active;
name = gui_channel_get_name(channel);
if (name == NULL) name = "default";
diff -ru irssi-0.7.11/src/gui-gnome/gui-channels.c irssi-0.7.11-new/src/gui-gnome/gui-channels.c
--- irssi-0.7.11/src/gui-gnome/gui-channels.c Sat May 15 15:47:08 1999
+++ irssi-0.7.11-new/src/gui-gnome/gui-channels.c Sat Jun 12 17:51:30 1999
@@ -41,7 +41,7 @@
GList *tmp;
label = gtk_notebook_get_tab_label(GTK_NOTEBOOK(WINDOW_GUI(window)->parent->notebook),
- WINDOW_GUI(window)->window);
+ WINDOW_GUI(window)->windowset->window);
g_return_if_fail(label != NULL);
str = g_string_new(NULL);
@@ -75,7 +75,7 @@
if (channel->type == CHANNEL_TYPE_EMPTY)
rec->servermenu = TRUE;
if (channel->type == CHANNEL_TYPE_CHANNEL && toggle_show_nicklist)
- gtk_widget_show(WINDOW_GUI(window)->nickscrollbox);
+ gtk_widget_show(WINDOW_GUI(window)->windowset->nickscrollbox);
name = gui_channel_get_name(channel);
@@ -182,7 +182,7 @@
/* create new window to use */
window = !toggle_use_tabbed_windows ? NULL :
cur_channel != NULL ? CHANNEL_PARENT(cur_channel) : NULL;
- window = gui_window_create(window == NULL ? NULL : WINDOW_GUI(window)->parent);
+ window = gui_windowset_create(window == NULL ? NULL : WINDOW_GUI(window)->parent)->active->window;
}
gui_channel_init(window, channel);
@@ -230,7 +230,7 @@
else
{
/* window is useless, destroy it. */
- gui_window_destroy(window);
+ gui_window_view_destroy(WINDOW_GUI(window));
}
}
return TRUE;
@@ -253,16 +253,16 @@
if (channel->topic == NULL || *channel->topic == '\0')
{
/* No topic in channel */
- gtk_entry_set_text(GTK_ENTRY(WINDOW_GUI(window)->topicentry), "");
+ gtk_entry_set_text(GTK_ENTRY(WINDOW_GUI(window)->windowset->topicentry), "");
}
else
{
- gtk_entry_set_text(GTK_ENTRY(WINDOW_GUI(window)->topicentry), channel->topic);
+ gtk_entry_set_text(GTK_ENTRY(WINDOW_GUI(window)->windowset->topicentry), channel->topic);
g_string_sprintfa(tmp, " - %s", channel->topic);
}
}
- if (window == WINDOW_GUI(window)->parent->active)
+ if (window == WINDOW_GUI(window)->parent->active->active->window)
gtk_window_set_title(GTK_WINDOW(WINDOW_GUI(window)->parent->window), tmp->str);
g_string_free(tmp, TRUE);
return TRUE;
@@ -276,7 +276,7 @@
g_return_if_fail(channel->server != NULL);
str = g_strconcat(channel->server->nick, " / ", channel->server->tag, NULL);
- gtk_label_set(GTK_LABEL(WINDOW_GUI(CHANNEL_PARENT(channel))->serverlabel), str);
+ gtk_label_set(GTK_LABEL(WINDOW_GUI(CHANNEL_PARENT(channel))->windowset->serverlabel), str);
g_free(str);
}
@@ -322,7 +322,7 @@
window = CHANNEL_PARENT(channel);
if (channel->type != CHANNEL_TYPE_CHANNEL || channel != window->active)
return TRUE;
- gui = WINDOW_GUI(window);
+ gui = WINDOW_GUI(window)->windowset;
for (num = 0; num < 6; num++)
gtk_object_set_data(GTK_OBJECT(gui->modebuttons[num]), "toggling", GINT_TO_POINTER(TRUE));
@@ -351,20 +351,21 @@
static gboolean signal_channel_open(CHANNEL_REC *channel)
{
- WINDOW_REC *window;
+ GUI_WINDOW_REC *gui;
g_return_val_if_fail(channel != NULL, FALSE);
- window = CHANNEL_PARENT(channel);
- if (WINDOW_GUI(window)->parent->active != window)
+ gui = WINDOW_GUI(CHANNEL_PARENT(channel))->windowset;
+
+ if (gui->parent->active->active->window != CHANNEL_PARENT(channel))
{
/* change to right window tab */
gint page;
- page = gtk_notebook_page_num(GTK_NOTEBOOK(WINDOW_GUI(window)->parent->notebook), WINDOW_GUI(window)->window);
- gtk_notebook_set_page(GTK_NOTEBOOK(WINDOW_GUI(window)->parent->notebook), page);
+ page = gtk_notebook_page_num(GTK_NOTEBOOK(gui->parent->notebook), gui->window);
+ gtk_notebook_set_page(GTK_NOTEBOOK(gui->parent->notebook), page);
}
- gdk_window_show(WINDOW_GUI(window)->parent->window->window);
+ gdk_window_show(gui->parent->window->window);
if (CHANNEL_PARENT(channel)->active != channel)
{
diff -ru irssi-0.7.11/src/gui-gnome/gui-mainwindows.c irssi-0.7.11-new/src/gui-gnome/gui-mainwindows.c
--- irssi-0.7.11/src/gui-gnome/gui-mainwindows.c Thu May 13 15:17:33 1999
+++ irssi-0.7.11-new/src/gui-gnome/gui-mainwindows.c Sat Jun 12 17:31:42 1999
@@ -23,7 +23,7 @@
GList *mainwindows;
-static WINDOW_REC *window_find_notebook_child(MAIN_WINDOW_REC *window, GtkWidget *child)
+static GUI_WINDOW_VIEW_REC *window_find_notebook_child(MAIN_WINDOW_REC *window, GtkWidget *child)
{
GList *tmp;
@@ -32,9 +32,9 @@
for (tmp = g_list_first(window->children); tmp != NULL; tmp = tmp->next)
{
- WINDOW_REC *rec = tmp->data;
+ GUI_WINDOW_VIEW_REC *rec = tmp->data;
- if (WINDOW_GUI(rec)->window == child) return rec;
+ if (rec->windowset->window == child) return rec;
}
return NULL;
@@ -57,9 +57,9 @@
{
g_return_val_if_fail(window != NULL, 0);
- if (cur_channel != window->active->active)
+ if (cur_channel != window->active->active->window->active)
{
- cur_channel = window->active->active;
+ cur_channel = window->active->active->window->active;
signal_emit("channel changed", 1, cur_channel);
signal_emit("window focused", 1, window->active);
}
@@ -70,7 +70,7 @@
/* notebook signal: switch_page */
static void sig_switch_page(GtkWidget *notebook, GtkNotebookPage *child, guint pagenum, MAIN_WINDOW_REC *window)
{
- WINDOW_REC *subwin;
+ GUI_WINDOW_VIEW_REC *subwin;
g_return_if_fail(child != NULL);
g_return_if_fail(window != NULL);
@@ -84,10 +84,10 @@
return;
}
- window->active = subwin;
- cur_channel = subwin->active;
+ window->active->active = subwin;
+ cur_channel = subwin->window->active;
signal_emit("channel changed", 1, cur_channel);
- signal_emit("window focused", 1, subwin);
+ signal_emit("window focused", 1, subwin->window);
}
static void window_change_page(WINDOW_REC *window)
@@ -96,7 +96,7 @@
g_return_if_fail(window != NULL);
- page = gtk_notebook_page_num(GTK_NOTEBOOK(WINDOW_GUI(window)->parent->notebook), WINDOW_GUI(window)->window);
+ page = gtk_notebook_page_num(GTK_NOTEBOOK(WINDOW_GUI(window)->parent->notebook), WINDOW_GUI(window)->windowset->window);
gtk_notebook_set_page(GTK_NOTEBOOK(WINDOW_GUI(window)->parent->notebook), page);
}
@@ -105,15 +105,15 @@
/* signal: key pressed (in entry field) */
static gint sig_keypress(GtkWidget *widget, GdkEventKey *event, MAIN_WINDOW_REC *window)
{
- GUI_WINDOW_REC *guiwin;
+ GUI_WINDOW_VIEW_REC *view;
gchar *text;
g_return_val_if_fail(event != NULL, 0);
g_return_val_if_fail(window != NULL, 0);
- guiwin = window->active == NULL ? NULL : WINDOW_GUI(window->active);
- if (guiwin != NULL && guiwin->topicentry != NULL && GTK_WIDGET_HAS_FOCUS(guiwin->topicentry) &&
- gtk_object_get_data(GTK_OBJECT(guiwin->topicentry), "editable"))
+ view = window->active == NULL ? NULL : window->active->active ;
+ if (view != NULL && view->windowset->topicentry != NULL && GTK_WIDGET_HAS_FOCUS(view->windowset->topicentry) &&
+ gtk_object_get_data(GTK_OBJECT(view->windowset->topicentry), "editable"))
{
/* trying to write topic, don't disturb it.. */
return 0;
@@ -143,11 +143,11 @@
gint val;
#ifdef HAVE_GNOME
- if (guiwin->zvt)
- adj = ZVT_TERM(guiwin->text)->adjustment;
+ if (view->zvt)
+ adj = ZVT_TERM(view->text)->adjustment;
else
#endif
- adj = GTK_TEXT(guiwin->text)->vadj;
+ adj = GTK_TEXT(view->text)->vadj;
val = adj->value - (adj->page_size/2);
gtk_adjustment_set_value(adj, val > 0 ? val : 0);
}
@@ -161,11 +161,11 @@
gint val, max;
#ifdef HAVE_GNOME
- if (guiwin->zvt)
- adj = ZVT_TERM(guiwin->text)->adjustment;
+ if (view->zvt)
+ adj = ZVT_TERM(view->text)->adjustment;
else
#endif
- adj = GTK_TEXT(guiwin->text)->vadj;
+ adj = GTK_TEXT(view->text)->vadj;
val = adj->value + (adj->page_size/2);
max = adj->upper - adj->lower - adj->page_size;
gtk_adjustment_set_value(adj, val <= max ? val : max);
@@ -179,7 +179,7 @@
gint pos;
pos = gtk_editable_get_position(GTK_EDITABLE(window->entry));
- line = completion_line(window->active->active, gtk_entry_get_text(GTK_ENTRY(window->entry)), &pos);
+ line = completion_line(window->active->active->window->active, gtk_entry_get_text(GTK_ENTRY(window->entry)), &pos);
if (line != NULL)
{
gtk_entry_set_text(GTK_ENTRY(window->entry), line);
@@ -271,14 +271,14 @@
ui_history_add(str, FALSE);
- if (cur_channel != window->active->active)
+ if (cur_channel != window->active->active->window->active)
{
/* we get here at least when using click-to-focus and keyboard
focus being in different window than mouse. Is there some
event we could use instead of enter_notify_event to find out
what window really has the focus? .. probably is, I'm too lazy
to find out what it is .. */
- cur_channel = window->active->active;
+ cur_channel = window->active->active->window->active;
signal_emit("channel changed", 1, cur_channel);
}
signal_emit("send command", 3, str, cur_channel->server, cur_channel);
@@ -386,7 +403,7 @@
window->destroying = TRUE;
while (window->children != NULL)
- gui_window_destroy(window->children->data);
+ gui_windowset_destroy(window->children->data);
window->destroying = FALSE;
gtk_widget_destroy(window->window);
diff -ru irssi-0.7.11/src/gui-gnome/gui-mainwindows.h irssi-0.7.11-new/src/gui-gnome/gui-mainwindows.h
--- irssi-0.7.11/src/gui-gnome/gui-mainwindows.h Sun Apr 11 23:40:07 1999
+++ irssi-0.7.11-new/src/gui-gnome/gui-mainwindows.h Sat Jun 12 17:23:49 1999
@@ -1,6 +1,9 @@
#ifndef __GUI_MAINWINDOWS_H
#define __GUI_MAINWINDOWS_H
+typedef struct _GUI_WINDOW_REC GUI_WINDOW_REC;
+typedef struct _GUI_WINDOW_VIEW_REC GUI_WINDOW_VIEW_REC;
+
typedef struct
{
GtkWidget *window;
@@ -17,7 +20,7 @@
guint destroying:1;
GList *children;
- WINDOW_REC *active;
+ GUI_WINDOW_REC *active;
}
MAIN_WINDOW_REC;
diff -ru irssi-0.7.11/src/gui-gnome/gui-printtext.c irssi-0.7.11-new/src/gui-gnome/gui-printtext.c
--- irssi-0.7.11/src/gui-gnome/gui-printtext.c Sun Jun 6 12:28:08 1999
+++ irssi-0.7.11-new/src/gui-gnome/gui-printtext.c Mon Jun 7 18:44:44 1999
@@ -51,7 +51,7 @@
/* Write text to ZVT window */
static gboolean gui_printtext_zvt(CHANNEL_REC *channel, gint fgcolor, gint bgcolor, gint flags, gchar *str)
{
- GUI_WINDOW_REC *gui;
+ GUI_WINDOW_VIEW_REC *view;
WINDOW_REC *window;
gint fg, bg;
GString *out;
@@ -59,7 +59,7 @@
g_return_val_if_fail(str != NULL, FALSE);
window = CHANNEL_PARENT(channel);
- gui = WINDOW_GUI(window);
+ view = WINDOW_GUI(window);
if (flags & PRINTFLAG_BEEP)
gdk_beep();
@@ -75,7 +75,7 @@
}
if (*str == '\n')
- zvt_term_feed(ZVT_TERM(gui->text), "\r", 1);
+ zvt_term_feed(ZVT_TERM(view->text), "\r", 1);
out = g_string_new("\033[0;");
@@ -87,8 +87,8 @@
g_string_sprintfa(out, "3%dm", ansitab[fg & 7]);
g_string_append(out, str);
- zvt_term_feed(ZVT_TERM(gui->text), out->str, out->len);
- vt_cursor_state(gui->text, 0); /* hide the ugly cursor */
+ zvt_term_feed(ZVT_TERM(view->text), out->str, out->len);
+ vt_cursor_state(view->text, 0); /* hide the ugly cursor */
g_string_free(out, TRUE);
@@ -99,7 +99,7 @@
/* Write text to window */
static gboolean gui_printtext(CHANNEL_REC *channel, gpointer fgcolor, gpointer bgcolor, gpointer flags, gchar *str)
{
- GUI_WINDOW_REC *gui;
+ GUI_WINDOW_VIEW_REC *view;
WINDOW_REC *window;
GdkColor *fg, *bg;
GdkFont *font;
@@ -109,10 +109,10 @@
g_return_val_if_fail(str != NULL, FALSE);
window = CHANNEL_PARENT(channel);
- gui = WINDOW_GUI(window);
+ view = WINDOW_GUI(window);
#ifdef HAVE_GNOME
- if (gui->zvt)
+ if (view->zvt)
{
/* Use ZVT widget */
return gui_printtext_zvt(channel, GPOINTER_TO_INT(fgcolor),
@@ -126,13 +126,13 @@
will happen.. (and this code even looks awful ...) */
if (*str == '\n')
{
- gui->linepos = g_list_append(gui->linepos, GINT_TO_POINTER(gui->lastlinelen)+1);
- gui->lastlinelen = 0;
+ view->linepos = g_list_append(view->linepos, GINT_TO_POINTER(view->lastlinelen)+1);
+ view->lastlinelen = 0;
}
else
- gui->lastlinelen += strlen(str);
+ view->lastlinelen += strlen(str);
- gtk_text_freeze(GTK_TEXT(gui->text));
+ gtk_text_freeze(GTK_TEXT(view->text));
if (*str == '\n' && max_textwidget_lines > 0 &&
max_textwidget_lines+block_remove_lines <= window->lines &&
channel->type != CHANNEL_TYPE_SETUP)
@@ -143,15 +143,15 @@
{
GList *link;
- link = g_list_first(gui->linepos);
+ link = g_list_first(view->linepos);
len += GPOINTER_TO_INT(link->data);
- gui->linepos = g_list_remove_link(gui->linepos, link);
+ view->linepos = g_list_remove_link(view->linepos, link);
g_list_free_1(link);
window->lines--;
}
- gtk_text_set_point(GTK_TEXT(gui->text), 0);
- gtk_text_forward_delete(GTK_TEXT(gui->text), len);
- gtk_text_set_point(GTK_TEXT(gui->text), gtk_text_get_length(GTK_TEXT(gui->text)));
+ gtk_text_set_point(GTK_TEXT(view->text), 0);
+ gtk_text_forward_delete(GTK_TEXT(view->text), len);
+ gtk_text_set_point(GTK_TEXT(view->text), gtk_text_get_length(GTK_TEXT(view->text)));
}
if (GPOINTER_TO_INT(flags) & PRINTFLAG_BOLD)
@@ -178,8 +178,8 @@
fg = bg != NULL ? bg : &bg_color;
bg = tmp;
}
- gtk_text_insert(GTK_TEXT(gui->text), font, fg, bg, str, -1);
- gtk_text_thaw(GTK_TEXT(gui->text));
+ gtk_text_insert(GTK_TEXT(view->text), font, fg, bg, str, -1);
+ gtk_text_thaw(GTK_TEXT(view->text));
if (sb_down) set_sb_down(window);
diff -ru irssi-0.7.11/src/gui-gnome/irssi.c irssi-0.7.11-new/src/gui-gnome/irssi.c
--- irssi-0.7.11/src/gui-gnome/irssi.c Mon May 10 20:32:28 1999
+++ irssi-0.7.11-new/src/gui-gnome/irssi.c Mon Jun 7 19:06:20 1999
@@ -38,7 +38,8 @@
gui_printtext_init();
mainwindows_init();
- gui_windows_init();
+ gui_windowset_init();
+ gui_windows_view_init();
gui_channels_init();
gui_dcc_init();
gui_events_init();
@@ -86,7 +87,8 @@
gui_events_deinit();
gui_server_deinit();
mainwindows_deinit();
- gui_windows_deinit();
+ gui_windows_view_deinit();
+ gui_windowset_deinit();
gui_channels_deinit(); /* channels after mainwindows_deinit()! */
gui_printtext_deinit();
setup_deinit();
diff -ru irssi-0.7.11/src/gui-gnome/irssi.h irssi-0.7.11-new/src/gui-gnome/irssi.h
--- irssi-0.7.11/src/gui-gnome/irssi.h Mon May 10 20:24:46 1999
+++ irssi-0.7.11-new/src/gui-gnome/irssi.h Mon Jun 7 18:34:03 1999
@@ -35,7 +35,8 @@
#include "setup.h"
#include "gui-mainwindows.h"
#include "gui-channels.h"
-#include "gui-windows.h"
+#include "gui-windowset.h"
+#include "gui-windows-view.h"
#include "channels-newdata.h"
#include "dialogs.h"
diff -ru irssi-0.7.11/src/gui-gnome/setup-appearance.c irssi-0.7.11-new/src/gui-gnome/setup-appearance.c
--- irssi-0.7.11/src/gui-gnome/setup-appearance.c Sun Jun 6 20:10:05 1999
+++ irssi-0.7.11-new/src/gui-gnome/setup-appearance.c Mon Jun 7 19:07:22 1999
@@ -49,16 +49,16 @@
static gchar *temp_font_name;
-static void set_window_bg(GUI_WINDOW_REC *window)
+static void set_window_bg(GUI_WINDOW_VIEW_REC *view)
{
GtkStyle *style;
- g_return_if_fail(window != NULL);
+ g_return_if_fail(view != NULL);
- style = gtk_style_copy(window->text->style);
+ style = gtk_style_copy(view->text->style);
gtk_style_ref(style);
style->base[0] = temp_bg_color;
- gtk_widget_set_style(window->text, style);
+ gtk_widget_set_style(view->text, style);
gtk_style_unref(style);
}
@@ -71,14 +71,14 @@
static gboolean old_timestamps;
static gint oldlines, len;
- GUI_WINDOW_REC *guiwin;
+ GUI_WINDOW_VIEW_REC *view;
WINDOW_REC *window;
gint n;
g_return_if_fail(channel != NULL);
window = CHANNEL_PARENT(channel);
- guiwin = WINDOW_GUI(window);
+ view = WINDOW_GUI(window);
if (init)
{
@@ -90,16 +90,16 @@
old_timestamps = toggle_show_timestamps;
toggle_show_timestamps = FALSE;
- set_window_bg(guiwin);
+ set_window_bg(view);
gui_printtext_configure();
- oldval = GTK_TEXT(guiwin->text)->vadj->value;
+ oldval = GTK_TEXT(view->text)->vadj->value;
oldlines = window->lines;
- len = gtk_text_get_length(GTK_TEXT(guiwin->text));
+ len = gtk_text_get_length(GTK_TEXT(view->text));
- gtk_text_freeze(GTK_TEXT(guiwin->text));
- gtk_text_set_point(GTK_TEXT(guiwin->text), len);
+ gtk_text_freeze(GTK_TEXT(view->text));
+ gtk_text_set_point(GTK_TEXT(view->text), len);
}
else
{
@@ -108,10 +108,10 @@
window->lines = oldlines;
/*FIXME: this doesn't remove the lines from linelen list*/
- gtk_text_set_point(GTK_TEXT(guiwin->text), 0);
- gtk_text_forward_delete(GTK_TEXT(guiwin->text), len);
- gtk_text_thaw(GTK_TEXT(guiwin->text));
- gtk_adjustment_set_value(GTK_TEXT(guiwin->text)->vadj, oldval);
+ gtk_text_set_point(GTK_TEXT(view->text), 0);
+ gtk_text_forward_delete(GTK_TEXT(view->text), len);
+ gtk_text_thaw(GTK_TEXT(view->text));
+ gtk_adjustment_set_value(GTK_TEXT(view->text)->vadj, oldval);
bg_color = old_bg_color;
memcpy(setup_colors, old_colors, sizeof(setup_colors));
diff -ru irssi-0.7.11/src/gui-gnome/snapshot.c irssi-0.7.11-new/src/gui-gnome/snapshot.c
--- irssi-0.7.11/src/gui-gnome/snapshot.c Thu May 13 16:03:54 1999
+++ irssi-0.7.11-new/src/gui-gnome/snapshot.c Mon Jun 7 19:08:17 1999
@@ -24,25 +24,25 @@
static void snapshot_show(WINDOW_REC *window)
{
- GUI_WINDOW_REC *gui;
+ GUI_WINDOW_VIEW_REC *view;
GtkWidget *scrollbox;
GtkAdjustment *adj;
gint x, y, xsize, ysize;
g_return_if_fail(window != NULL);
- gui = WINDOW_GUI(window);
+ view = WINDOW_GUI(window);
gdk_window_get_pointer (NULL, &x, &y, NULL);
- gui->snapshot = gtk_window_new(GTK_WINDOW_POPUP);
+ view->snapshot = gtk_window_new(GTK_WINDOW_POPUP);
scrollbox = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollbox),
GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
- gtk_container_add(GTK_CONTAINER(gui->snapshot), scrollbox);
+ gtk_container_add(GTK_CONTAINER(view->snapshot), scrollbox);
- xsize = gui->text->allocation.width;
- ysize = gui->text->allocation.height;
+ xsize = view->text->allocation.width;
+ ysize = view->text->allocation.height;
if (xsize <= 1) xsize = gdk_screen_width()/2;
if (ysize <= 1) ysize = gdk_screen_height()*2/5;
@@ -58,18 +58,18 @@
else
y += 5;
- gtk_widget_set_uposition(gui->snapshot, x, y);
+ gtk_widget_set_uposition(view->snapshot, x, y);
- gtk_object_set_data(GTK_OBJECT(gui->text), "parent", gui->text->parent);
- gtk_widget_reparent(gui->text, scrollbox);
- gtk_widget_show_all(gui->snapshot);
+ gtk_object_set_data(GTK_OBJECT(view->text), "parent", view->text->parent);
+ gtk_widget_reparent(view->text, scrollbox);
+ gtk_widget_show_all(view->snapshot);
#ifdef HAVE_GNOME
- if (gui->zvt)
- adj = ZVT_TERM(gui->text)->adjustment;
+ if (view->zvt)
+ adj = ZVT_TERM(view->text)->adjustment;
else
#endif
- adj = GTK_TEXT(gui->text)->vadj;
+ adj = GTK_TEXT(view->text)->vadj;
gtk_adjustment_set_value(adj, adj->upper - adj->lower - adj->page_size);
signal_emit("window focused", 1, window);
@@ -77,18 +77,18 @@
static void snapshot_hide(WINDOW_REC *window)
{
- GUI_WINDOW_REC *gui;
+ GUI_WINDOW_VIEW_REC *view;
GtkWidget *parent;
g_return_if_fail(window != NULL);
- gui = WINDOW_GUI(window);
- parent = gtk_object_get_data(GTK_OBJECT(gui->text), "parent");
+ view = WINDOW_GUI(window);
+ parent = gtk_object_get_data(GTK_OBJECT(view->text), "parent");
g_return_if_fail(parent != NULL);
- gtk_widget_reparent(gui->text, parent);
- gtk_widget_destroy(gui->snapshot);
- gui->snapshot = NULL;
+ gtk_widget_reparent(view->text, parent);
+ gtk_widget_destroy(view->snapshot);
+ view->snapshot = NULL;
signal_emit("window focused", 1, ((MAIN_WINDOW_REC *) mainwindows->data)->active);
}
diff -ru irssi-0.7.11/src/gui-gnome/window-menus.c irssi-0.7.11-new/src/gui-gnome/window-menus.c
--- irssi-0.7.11/src/gui-gnome/window-menus.c Sat May 15 22:08:20 1999
+++ irssi-0.7.11-new/src/gui-gnome/window-menus.c Sat Jun 12 17:34:53 1999
@@ -280,7 +280,7 @@
window = gtk_object_get_data(GTK_OBJECT(menuitem->parent), "window");
g_return_if_fail(window != NULL);
- window->active->active->server = server;
+ window->active->active->window->active->server = server;
signal_emit("window server changed", 1, window->active);
}
@@ -330,7 +330,7 @@
gtk_menu_append(GTK_MENU(menu), menuitem);
if (window->active != NULL)
- gtk_option_menu_set_history(GTK_OPTION_MENU(window->servermenu), g_list_index(servers, window->active->active->server));
+ gtk_option_menu_set_history(GTK_OPTION_MENU(window->servermenu), g_list_index(servers, window->active->active->window->active->server));
}
return TRUE;
@@ -381,19 +381,19 @@
static void menu_chan_toggle_nicklist(GtkWidget *menuitem, CHANNEL_REC *channel)
{
- GUI_WINDOW_REC *window;
+ GtkWidget *nickscrollbox;
g_return_if_fail(menuitem != NULL);
if (channel == NULL) return;
- window = WINDOW_GUI(CHANNEL_PARENT(channel));
- if (window->nickscrollbox == NULL)
+ nickscrollbox = WINDOW_GUI(CHANNEL_PARENT(channel))->windowset->nickscrollbox;
+ if (nickscrollbox == NULL)
return; /* this function was called from window_create().. */
if (GTK_CHECK_MENU_ITEM(menuitem)->active)
- gtk_widget_show(window->nickscrollbox);
+ gtk_widget_show(nickscrollbox);
else
- gtk_widget_hide(window->nickscrollbox);
+ gtk_widget_hide(nickscrollbox);
}
static void menu_query_close(GtkWidget *menuitem, CHANNEL_REC *channel)
@@ -433,7 +433,7 @@
toggling = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(menuitem), "toggling"));
if (toggling) return;
- server = window->active->active->server;
+ server = window->active->active->window->active->server;
gtk_object_set_data(GTK_OBJECT(menuitem), "toggling", GINT_TO_POINTER(TRUE));
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem),
server == NULL ? FALSE : server->usermode_away);
@@ -478,9 +478,9 @@
g_return_if_fail(menuitem != NULL);
if (window == NULL) return;
- server = window->active->active->server;
+ server = window->active->active->window->active->server;
usermode_set(menuitem, 'i', server == NULL ? FALSE :
- server->usermode_invisible, window->active->active);
+ server->usermode_invisible, window->active->active->window->active);
}
static void menu_usermode_wallops(GtkWidget *menuitem, MAIN_WINDOW_REC *window)
@@ -490,9 +490,9 @@
g_return_if_fail(menuitem != NULL);
if (window == NULL) return;
- server = window->active->active->server;
+ server = window->active->active->window->active->server;
usermode_set(menuitem, 'w', server == NULL ? FALSE :
- server->usermode_wallops, window->active->active);
+ server->usermode_wallops, window->active->active->window->active);
}
static void menu_usermode_snotes(GtkWidget *menuitem, MAIN_WINDOW_REC *window)
@@ -502,19 +502,19 @@
g_return_if_fail(menuitem != NULL);
if (window == NULL) return;
- server = window->active->active->server;
+ server = window->active->active->window->active->server;
usermode_set(menuitem, 's', server == NULL ? FALSE :
- server->usermode_servernotes, window->active->active);
+ server->usermode_servernotes, window->active->active->window->active);
}
static void menu_dcc_chat(GtkWidget *menuitem, MAIN_WINDOW_REC *window)
{
- gui_dcc_chat(window->active->active != NULL ? window->active->active->server : window->active->active->server);
+ gui_dcc_chat(window->active->active != NULL ? window->active->active->window->active->server : window->active->active->window->active->server);
}
static void menu_dcc_send(GtkWidget *menuitem, MAIN_WINDOW_REC *window)
{
- gui_dcc_send(window->active->active != NULL ? window->active->active->server : window->active->active->server, NULL, NULL);
+ gui_dcc_send(window->active->active != NULL ? window->active->active->window->active->server : window->active->active->window->active->server, NULL, NULL);
}
static void menu_window_new(GtkWidget *menuitem, MAIN_WINDOW_REC *window)
@@ -526,7 +526,7 @@
old = toggle_use_tabbed_windows;
toggle_use_tabbed_windows = FALSE;
- channel_create(window->active->active->server, _("(empty)"), CHANNEL_TYPE_EMPTY);
+ channel_create(window->active->active->window->active->server, _("(empty)"), CHANNEL_TYPE_EMPTY);
toggle_use_tabbed_windows = old;
}
@@ -539,7 +539,7 @@
old = toggle_use_tabbed_windows;
toggle_use_tabbed_windows = TRUE;
- channel_create(window->active->active->server, _("(empty)"), CHANNEL_TYPE_EMPTY);
+ channel_create(window->active->active->window->active->server, _("(empty)"), CHANNEL_TYPE_EMPTY);
toggle_use_tabbed_windows = old;
}
@@ -554,7 +554,7 @@
toggling = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(menuitem), "toggling"));
if (toggling) return;
- gui = CHANNEL_GUI(window->active->active);
+ gui = CHANNEL_GUI(window->active->active->window->active);
gui->autoraise = GTK_CHECK_MENU_ITEM(menuitem)->active; /* FIXME: better way for this? gtk needs a function for this.. */
gtk_object_set_data(GTK_OBJECT(menuitem), "toggling", GINT_TO_POINTER(TRUE));
@@ -567,7 +567,7 @@
g_return_if_fail(menuitem != NULL);
if (window == NULL) return;
- gui_window_destroy(window->active);
+ gui_windowset_destroy(window->active);
}
static void menu_settings_preferences(void)
@@ -657,7 +657,7 @@
switch (channel->type)
{
case CHANNEL_TYPE_CHANNEL:
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(channel_submenu[2].widget), GTK_WIDGET_VISIBLE(WINDOW_GUI(CHANNEL_PARENT(channel))->nickscrollbox));
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(channel_submenu[2].widget), GTK_WIDGET_VISIBLE(WINDOW_GUI(CHANNEL_PARENT(channel))->windowset->nickscrollbox));
break;
case CHANNEL_TYPE_QUERY:
Only in irssi-0.7.11-new/src/gui-gnome: window-menus.o
diff -ru irssi-0.7.11/src/gui-gnome/window-nicklist.c irssi-0.7.11-new/src/gui-gnome/window-nicklist.c
--- irssi-0.7.11/src/gui-gnome/window-nicklist.c Thu May 13 15:15:09 1999
+++ irssi-0.7.11-new/src/gui-gnome/window-nicklist.c Mon Jun 7 19:11:02 1999
@@ -93,7 +93,7 @@
g_return_if_fail(nick != NULL);
if (CHANNEL_PARENT(channel)->active != channel) return;
- gui = WINDOW_GUI(CHANNEL_PARENT(channel));
+ gui = WINDOW_GUI(CHANNEL_PARENT(channel))->windowset;
list = GTK_CLIST(gui->nicklist)->row_list;
for (row = 0; list != NULL; row++, list = list->next)
@@ -130,9 +130,9 @@
window = CHANNEL_PARENT(channel);
if (window->active != channel) return;
- row = gtk_clist_find_row_from_data(GTK_CLIST(WINDOW_GUI(window)->nicklist), nick);
+ row = gtk_clist_find_row_from_data(GTK_CLIST(WINDOW_GUI(window)->windowset->nicklist), nick);
if (row != -1)
- gtk_clist_remove(GTK_CLIST(WINDOW_GUI(window)->nicklist), row);
+ gtk_clist_remove(GTK_CLIST(WINDOW_GUI(window)->windowset->nicklist), row);
}
void window_nicklist_redraw(CHANNEL_REC *channel)
@@ -141,7 +141,7 @@
GList *tmp;
if (CHANNEL_PARENT(channel)->active != channel) return;
- gui = WINDOW_GUI(CHANNEL_PARENT(channel));
+ gui = WINDOW_GUI(CHANNEL_PARENT(channel))->windowset;
gtk_clist_freeze(GTK_CLIST(gui->nicklist));
gtk_clist_clear(GTK_CLIST(gui->nicklist));
@@ -443,7 +443,7 @@
g_return_val_if_fail(window != NULL, FALSE);
/* create op and voice pixmaps */
- gui = WINDOW_GUI(window);
+ gui = WINDOW_GUI(window)->windowset;
gtk_widget_realize(gui->window);
gui->op_pixmap = gdk_pixmap_create_from_xpm_d(gui->window->window, &gui->op_mask, NULL, op_xpm);
gui->voice_pixmap = gdk_pixmap_create_from_xpm_d(gui->window->window, &gui->voice_mask, NULL, voice_xpm);
@@ -477,7 +477,7 @@
chanrec = channel_find(server, channel);
if (chanrec != NULL && !server->names_coming)
- gtk_clist_freeze(GTK_CLIST(WINDOW_GUI(CHANNEL_PARENT(chanrec))->nicklist));
+ gtk_clist_freeze(GTK_CLIST(WINDOW_GUI(CHANNEL_PARENT(chanrec))->windowset->nicklist));
g_free(params);
return TRUE;
@@ -494,7 +494,7 @@
chanrec = channel_find(server, channel);
if (chanrec != NULL)
- gtk_clist_thaw(GTK_CLIST(WINDOW_GUI(CHANNEL_PARENT(chanrec))->nicklist));
+ gtk_clist_thaw(GTK_CLIST(WINDOW_GUI(CHANNEL_PARENT(chanrec))->windowset->nicklist));
g_free(params);
return TRUE;
diff -Nru irssi-0.7.11/src/gui-gnome/gui-windowset.c irssi-0.7.11-new/src/gui-gnome/gui-windowset.c
--- irssi-0.7.11/src/gui-gnome/gui-windowset.c Thu Jan 1 02:00:00 1970
+++ irssi-0.7.11-new/src/gui-gnome/gui-windowset.c Sat Jun 12 17:39:10 1999
@@ -0,0 +1,385 @@
+/*
+ gui-windowset.c : irssi
+
+ Copyright (C) 1999 Timo Sirainen
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include "irssi.h"
+
+static gchar mode_flags[] = "spmint";
+static gchar *mode_tooltips[] =
+{
+ N_("Secret"),
+ N_("Private"),
+ N_("Moderated"),
+ N_("Joining needs an invitation"),
+ N_("No external messages"),
+ N_("Only operators can change the topic")
+};
+
+static gint sig_topicentry_press(GtkWidget *entry, GdkEventButton *event)
+{
+ gboolean editable;
+
+ g_return_val_if_fail(entry != NULL, 0);
+ g_return_val_if_fail(event != NULL, 0);
+
+ if (event->type == GDK_2BUTTON_PRESS)
+ {
+ editable = !(gboolean) GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(entry), "editable"));
+ gtk_object_set_data(GTK_OBJECT(entry), "editable", GINT_TO_POINTER((gint) editable));
+ gtk_entry_set_editable(GTK_ENTRY(entry), editable);
+ }
+
+ return 0;
+}
+
+static void sig_topicentry_activated(GtkWidget *entry, WINDOW_REC *window)
+{
+ CHANNEL_REC *channel;
+
+ g_return_if_fail(entry != NULL);
+ g_return_if_fail(window != NULL);
+
+ channel = window->active;
+ if (channel == NULL || (!channel->chanop && channel->mode_optopic))
+ {
+ /* can't change topic. */
+ gtk_entry_set_text(GTK_ENTRY(entry),
+ (channel == NULL || channel->topic == NULL) ?
+ "" : channel->topic);
+ return;
+ }
+
+ signal_emit("command topic", 3, gtk_entry_get_text(GTK_ENTRY(entry)),
+ window->active->server, window->active);
+}
+
+static void sig_modebutton_toggled(GtkToggleButton *button, gint mode)
+{
+ WINDOW_REC *window;
+ NICK_REC *nick;
+ GString *str;
+
+ g_return_if_fail(button != NULL);
+ if (gtk_object_get_data(GTK_OBJECT(button), "toggling")) return;
+
+ window = gtk_object_get_data(GTK_OBJECT(button), "window");
+ g_return_if_fail(window->active != NULL);
+
+ nick = nicklist_find(window->active, window->active->server->nick);
+ if (!window->active->chanop)
+ {
+ /* can't change mode */
+ gtk_object_set_data(GTK_OBJECT(button), "toggling", GINT_TO_POINTER(TRUE));
+ gtk_toggle_button_set_active(button, !button->active);
+ gtk_object_set_data(GTK_OBJECT(button), "toggling", GINT_TO_POINTER(FALSE));
+ return;
+ }
+
+ str = g_string_new(NULL);
+ g_string_sprintf(str, "* %c%c", button->active ? '+' : '-', mode_flags[mode]);
+
+ gtk_object_set_data(GTK_OBJECT(button), "toggling", GINT_TO_POINTER(TRUE));
+ signal_emit("command mode", 3, str->str, window->active->server, window->active);
+ g_string_free(str, TRUE);
+ gtk_object_set_data(GTK_OBJECT(button), "toggling", GINT_TO_POINTER(FALSE));
+}
+
+GUI_WINDOW_REC *gui_windowset_create(MAIN_WINDOW_REC *parent)
+{
+ WINDOW_REC *rec;
+ GUI_WINDOW_REC *gui;
+ GUI_WINDOW_VIEW_REC *view;
+ GtkWidget *hbox, *label;
+ GtkTooltips *tooltips;
+ gint num;
+
+ if (parent == NULL) parent = mainwindow_create();
+
+ rec = ui_window_create();
+ g_return_val_if_fail(rec != NULL, NULL);
+
+ gui = g_new0(GUI_WINDOW_REC, 1);
+ gui->parent = parent;
+
+ if (parent->children == NULL) parent->active = gui;
+ parent->children = g_list_append(parent->children, gui);
+
+ gui->window = gtk_vbox_new(FALSE, 2);
+ gtk_container_border_width(GTK_CONTAINER(gui->window), 2);
+
+ /* Add channel topic and modes */
+ gui->channelwidget = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(gui->window), gui->channelwidget, FALSE, FALSE, 0);
+
+ gui->serverlabel = gtk_label_new("");
+ gtk_box_pack_start(GTK_BOX(gui->channelwidget), gui->serverlabel, FALSE, FALSE, 0);
+
+ gui->topicentry = gtk_entry_new();
+ gtk_entry_set_editable(GTK_ENTRY(gui->topicentry), FALSE);
+ gtk_signal_connect(GTK_OBJECT(gui->topicentry), "button_press_event",
+ GTK_SIGNAL_FUNC(sig_topicentry_press), rec);
+ gtk_signal_connect(GTK_OBJECT(gui->topicentry), "activate",
+ GTK_SIGNAL_FUNC(sig_topicentry_activated), rec);
+ gtk_box_pack_start(GTK_BOX(gui->channelwidget), gui->topicentry, TRUE, TRUE, 3);
+
+ tooltips = gtk_tooltips_new();
+
+ for (num = 0; num < 6; num++)
+ {
+ gchar str[2];
+
+ str[0] = toupper(mode_flags[num]); str[1] = '\0';
+ gui->modebuttons[num] = gtk_toggle_button_new_with_label(str);
+ gtk_tooltips_set_tip(tooltips, gui->modebuttons[num], mode_tooltips[num], NULL);
+ gtk_widget_set_usize(gui->modebuttons[num], 20, -1);
+ gtk_object_set_data(GTK_OBJECT(gui->modebuttons[num]), "window", rec);
+ gtk_signal_connect(GTK_OBJECT(gui->modebuttons[num]), "toggled",
+ GTK_SIGNAL_FUNC(sig_modebutton_toggled), GINT_TO_POINTER(num));
+ gtk_box_pack_start(GTK_BOX(gui->channelwidget), gui->modebuttons[num], FALSE, FALSE, 0);
+ }
+
+ /* create view for window */
+ hbox = gtk_hbox_new(FALSE, 3);
+ gtk_box_pack_start(GTK_BOX(gui->window), hbox, TRUE, TRUE, 0);
+
+ view = gui_window_view_create(rec, gui, hbox);
+ gui->active = view;
+
+ gtk_widget_show_all(gui->window);
+
+ /* Add nick list */
+ gui->nickscrollbox = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(gui->nickscrollbox),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start(GTK_BOX(hbox), gui->nickscrollbox, FALSE, FALSE, 0);
+
+ gui->nicklist = gtk_clist_new(1);
+ gtk_container_add(GTK_CONTAINER(gui->nickscrollbox), gui->nicklist);
+ gtk_widget_show(gui->nicklist);
+
+ gtk_widget_set_usize(gui->nickscrollbox, 120, -1);
+
+ label = gtk_label_new(_("(none)"));
+ gtk_widget_show(label);
+
+ if (g_list_first(parent->children)->next == NULL)
+ {
+ /* only one child, don't show the notebook tabs.. */
+ gtk_notebook_set_show_tabs(GTK_NOTEBOOK(parent->notebook), FALSE);
+ gtk_notebook_set_show_border(GTK_NOTEBOOK(parent->notebook), FALSE);
+ }
+ else if (g_list_first(parent->children)->next->next == NULL)
+ {
+ /* two children, show the notebook tabs.. */
+ gtk_notebook_set_show_tabs(GTK_NOTEBOOK(parent->notebook), TRUE);
+ gtk_notebook_set_show_border(GTK_NOTEBOOK(parent->notebook), TRUE);
+ }
+
+ gtk_notebook_append_page(GTK_NOTEBOOK(parent->notebook), gui->window, label);
+
+ gtk_widget_hide(gui->channelwidget);
+
+ signal_emit("gui window created", 1, rec);
+ return gui;
+}
+
+void gui_windowset_destroy(GUI_WINDOW_REC *window)
+{
+ MAIN_WINDOW_REC *parent;
+ gint page;
+
+ g_return_if_fail(window != NULL);
+
+ if (window->destroying) return;
+
+ parent = window->parent;
+ parent->children = g_list_remove(parent->children, window);
+
+ signal_emit("gui window destroyed", 1, window);
+
+ window->destroying = TRUE;
+
+ page = gtk_notebook_page_num(GTK_NOTEBOOK(parent->notebook), window->window);
+ gtk_notebook_remove_page(GTK_NOTEBOOK(parent->notebook), page);
+
+ while (window->views != NULL)
+ gui_window_view_destroy(window->views->data);
+
+ g_free(window);
+
+ if (parent->children == NULL)
+ mainwindow_destroy(parent);
+ else if (g_list_length(parent->children) == 1)
+ {
+ /* only one child left, hide the notebook tabs.. */
+ gtk_notebook_set_show_tabs(GTK_NOTEBOOK(parent->notebook), FALSE);
+ gtk_notebook_set_show_border(GTK_NOTEBOOK(parent->notebook), FALSE);
+ }
+}
+
+static gboolean gui_window_server_changed(WINDOW_REC *window)
+{
+ MAIN_WINDOW_REC *parent;
+ SERVER_REC *server;
+ gint num;
+
+ g_return_val_if_fail(window != NULL, FALSE);
+
+ parent = WINDOW_GUI(window)->parent;
+ server = window->active->server;
+
+ if (parent->usermodes[0] == NULL) return TRUE;
+
+ for (num = 0; num < 4; num++)
+ gtk_object_set_data(GTK_OBJECT(parent->usermodes[num]), "toggling", GINT_TO_POINTER(TRUE));
+
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(parent->usermodes[0]),
+ server == NULL ? FALSE : server->usermode_away);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(parent->usermodes[1]),
+ server == NULL ? FALSE : server->usermode_invisible);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(parent->usermodes[2]),
+ server == NULL ? FALSE : server->usermode_wallops);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(parent->usermodes[3]),
+ server == NULL ? FALSE : server->usermode_servernotes);
+
+ for (num = 0; num < 4; num++)
+ gtk_object_set_data(GTK_OBJECT(parent->usermodes[num]), "toggling", GINT_TO_POINTER(FALSE));
+
+ return TRUE;
+}
+
+static gboolean gui_windows_usermode_changed(SERVER_REC *server)
+{
+ GList *winlist;
+
+ for (winlist = g_list_first(mainwindows); winlist != NULL; winlist = winlist->next)
+ {
+ MAIN_WINDOW_REC *rec = winlist->data;
+
+ if (server == rec->active->active->window->active->server)
+ signal_emit("window server changed", 1, rec->active);
+ }
+
+ return TRUE;
+}
+
+static gboolean signal_window_focused(WINDOW_REC *window)
+{
+ MAIN_WINDOW_REC *mainwindow;
+ GUI_WINDOW_REC *gui;
+ CHANNEL_REC *channel;
+
+ g_return_val_if_fail(window != NULL, FALSE);
+
+ mainwindow = WINDOW_GUI(window)->parent;
+ channel = window->active;
+
+ gui = mainwindow->active;
+
+ /* remove old extra menus */
+ if (mainwindow->extramenu != NULL)
+ {
+ window_menus_remove(mainwindow, mainwindow->extramenu);
+ g_free(mainwindow->extramenu);
+ mainwindow->extramenu = NULL;
+ }
+ if (channel == NULL) return TRUE;
+
+ if (channel->type == CHANNEL_TYPE_CHANNEL)
+ {
+ /* Add channel menu */
+ mainwindow->extramenu = g_strdup(channel_menu[0].label);
+ window_menus_insert(mainwindow, NULL, channel_menu, channel);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(channel_submenu[2].widget),
+ GTK_WIDGET_VISIBLE(gui->nickscrollbox));
+ gtk_widget_show(gui->channelwidget);
+ }
+ else
+ {
+ gtk_widget_hide(gui->nickscrollbox);
+ gtk_widget_hide(gui->channelwidget);
+ if (channel->type == CHANNEL_TYPE_QUERY)
+ {
+ /* Add query menu */
+ mainwindow->extramenu = g_strdup(query_menu[0].label);
+ window_menus_insert(mainwindow, NULL, query_menu, channel);
+ }
+ }
+
+ if (CHANNEL_GUI(channel)->servermenu)
+ {
+ /* change server selection */
+ gtk_option_menu_set_history(GTK_OPTION_MENU(mainwindow->servermenu),
+ g_list_index(servers, channel->server));
+ gtk_widget_show(mainwindow->servermenu);
+ }
+ else
+ gtk_widget_hide(mainwindow->servermenu);
+
+ /* draw title bar */
+ signal_emit("channel topic changed", 1, window->active);
+
+ return TRUE;
+}
+
+static gboolean gui_server_looking(SERVER_REC *server)
+{
+ GList *tmp, *sub;
+
+ g_return_val_if_fail(server != NULL, FALSE);
+
+ /* try to keep some server assigned to server menus.. */
+ for (tmp = g_list_first(windows); tmp != NULL; tmp = tmp->next)
+ {
+ WINDOW_REC *win = tmp->data;
+ gboolean changed;
+
+ changed = FALSE;
+ for (sub = g_list_first(win->channels); sub != NULL; sub = sub->next)
+ {
+ CHANNEL_REC *chan = sub->data;
+
+ if (chan->server == NULL)
+ {
+ chan->server = server;
+ if (!changed)
+ signal_emit("window server changed", 1, win);
+ changed = TRUE;
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+void gui_windowset_init(void)
+{
+ signal_add("user mode changed", (SIGNAL_FUNC) gui_windows_usermode_changed);
+ signal_add("window server changed", (SIGNAL_FUNC) gui_window_server_changed);
+ signal_add("window focused", (SIGNAL_FUNC) signal_window_focused);
+ signal_add("server looking", (SIGNAL_FUNC) gui_server_looking);
+}
+
+void gui_windowset_deinit(void)
+{
+ signal_remove("user mode changed", (SIGNAL_FUNC) gui_windows_usermode_changed);
+ signal_remove("window server changed", (SIGNAL_FUNC) gui_window_server_changed);
+ signal_remove("window focused", (SIGNAL_FUNC) signal_window_focused);
+ signal_remove("server looking", (SIGNAL_FUNC) gui_server_looking);
+}
diff -Nru irssi-0.7.11/src/gui-gnome/gui-windowset.h irssi-0.7.11-new/src/gui-gnome/gui-windowset.h
--- irssi-0.7.11/src/gui-gnome/gui-windowset.h Thu Jan 1 02:00:00 1970
+++ irssi-0.7.11-new/src/gui-gnome/gui-windowset.h Sat Jun 12 17:22:55 1999
@@ -0,0 +1,32 @@
+#ifndef __GUI_WINDOWSET_H
+#define __GUI_WINDOWSET_H
+
+struct _GUI_WINDOW_REC
+{
+ MAIN_WINDOW_REC *parent;
+
+ GtkWidget *window;
+ GList *views;
+ GUI_WINDOW_VIEW_REC *active;
+
+ GtkWidget *channelwidget;
+ GtkWidget *serverlabel;
+ GtkWidget *topicentry;
+ GtkWidget *modebuttons[6];
+
+ /* nicklist */
+ GtkWidget *nickscrollbox;
+ GtkWidget *nicklist;
+ GdkPixmap *op_pixmap, *voice_pixmap;
+ GdkBitmap *op_mask, *voice_mask;
+
+ gboolean destroying;
+};
+
+void gui_windowset_init(void);
+void gui_windowset_deinit(void);
+
+GUI_WINDOW_REC *gui_windowset_create(MAIN_WINDOW_REC *parent);
+void gui_windowset_destroy(GUI_WINDOW_REC *window);
+
+#endif
diff -Nru irssi-0.7.11/src/gui-gnome/gui-windows-view.c irssi-0.7.11-new/src/gui-gnome/gui-windows-view.c
--- irssi-0.7.11/src/gui-gnome/gui-windows-view.c Thu Jan 1 02:00:00 1970
+++ irssi-0.7.11-new/src/gui-gnome/gui-windows-view.c Sat Jun 12 17:16:29 1999
@@ -0,0 +1,454 @@
+/*
+ gui-windows-view.c : irssi
+
+ Copyright (C) 1999 Timo Sirainen
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include "irssi.h"
+
+#define iswordcut(a) (isspace((gint) a) || \
+ (a) == '\n' || (a) == '\0' || (a) == '"' || \
+ (a) == '(' || (a) == ')' || (a) == '[' || (a) == ']' || \
+ (a) == '<' || (a) == '>')
+
+#define URL_MAX_LENGTH 200 /*FIXME: no max. limits*/
+
+GList *window_views;
+
+void gui_window_view_set_background_pixmap(GUI_WINDOW_VIEW_REC *view, gchar *path)
+{
+ GtkStyle *style;
+ GdkPixmap *pixmap;
+ GdkBitmap *mask;
+#if defined (HAVE_IMLIB) || defined (HAVE_GNOME)
+ GdkImlibImage *img;
+#endif
+
+ g_return_if_fail(view != NULL);
+ g_return_if_fail(path != NULL);
+
+ if (view->pixmap != NULL && strcmp(view->pixmap, path) == 0)
+ {
+ /* same pixmap already set for this view.. */
+ return;
+ }
+ if (view->pixmap != NULL)
+ g_free(view->pixmap);
+ view->pixmap = g_strdup(path);
+
+#ifdef HAVE_GNOME
+ if (view->zvt)
+ {
+ zvt_term_set_background(ZVT_TERM(view->text), path, FALSE, FALSE);
+ return;
+ }
+#endif
+
+ if (*path == '\0')
+ pixmap = NULL;
+ else
+ {
+#if defined (HAVE_IMLIB) || defined (HAVE_GNOME)
+ mask = NULL;
+ img = gdk_imlib_load_image(path);
+ if (img == NULL)
+ pixmap = NULL;
+ else
+ {
+ gdk_imlib_render(img, img->rgb_width, img->rgb_height);
+ pixmap = gdk_imlib_move_image(img);
+ gdk_imlib_destroy_image(img);
+ }
+#else
+ pixmap = gdk_pixmap_create_from_xpm(view->text->window, &mask, NULL, path);
+#endif
+ }
+
+ style = gtk_style_copy(view->text->style);
+ gtk_style_ref(style);
+ style->bg_pixmap[GTK_STATE_NORMAL] = pixmap;
+ gtk_widget_set_style(view->text, style);
+ gtk_style_unref(style);
+}
+
+static void gui_window_view_set_background(GUI_WINDOW_VIEW_REC *view)
+{
+ GtkStyle *style;
+ gchar *path;
+
+ g_return_if_fail(view != NULL);
+
+#ifdef HAVE_GNOME
+ if (view->zvt)
+ {
+ if (toggle_use_transparency)
+ {
+ zvt_term_set_background(ZVT_TERM(view->text), 0, TRUE, toggle_shaded_transparency);
+ if (view->pixmap != NULL)
+ {
+ g_free(view->pixmap);
+ view->pixmap = NULL;
+ }
+ return;
+ }
+ }
+ else
+#endif
+ {
+ style = gtk_style_copy(view->text->style);
+ gtk_style_ref(style);
+ style->base[GTK_STATE_NORMAL] = bg_color;;
+ gtk_widget_set_style(view->text, style);
+ gtk_style_unref(style);
+ }
+
+ path = convert_home(background_pixmap);
+ gui_window_view_set_background_pixmap(view, path);
+ g_free(path);
+}
+
+static void init_colors(GtkWidget *window)
+{
+ gint n;
+
+ g_return_if_fail(window != NULL);
+
+ for (n = 0; n < sizeof(setup_colors)/sizeof(setup_colors[0]); n++)
+ {
+ setup_colors[n].pixel =
+ (gulong)((setup_colors[n].red & 0xff00)*256 +
+ (setup_colors[n].green & 0xff00) +
+ (setup_colors[n].blue & 0xff00)/256);
+ gdk_color_alloc(gtk_widget_get_colormap(window), &setup_colors[n]);
+ }
+
+ bg_color.pixel =
+ (gulong)((bg_color.red & 0xff00)*256 +
+ (bg_color.green & 0xff00) +
+ (bg_color.blue & 0xff00)/256);
+ gdk_color_alloc(gtk_widget_get_colormap(window), &bg_color);
+}
+
+#ifdef HAVE_GNOME
+static void init_zvt_colors(ZvtTerm *zvt)
+{
+ static gchar ansitab[16] = { 0, 4, 2, 6, 1, 5, 3, 7, 8, 12, 10, 14, 9, 13, 11, 15 };
+ gushort zvt_red[18], zvt_green[18], zvt_blue[18];
+ gint num;
+
+ for (num = 0; num < 16; num++)
+ {
+ zvt_red[num] = (gushort) setup_colors[(gint) ansitab[num]].red;
+ zvt_green[num] = (gushort) setup_colors[(gint) ansitab[num]].green;
+ zvt_blue[num] = (gushort) setup_colors[(gint) ansitab[num]].blue;
+ }
+
+ zvt_red[16] = zvt_green[16] = zvt_blue[16] = 0xffff;
+ zvt_red[17] = zvt_green[17] = zvt_blue[17] = 0;
+
+ zvt_term_set_color_scheme(zvt, zvt_red, zvt_green, zvt_blue);
+}
+
+/* signal: button pressed in text window */
+static gint sig_text_butpress_zvt(GtkWidget *widget, GdkEventButton *event, WINDOW_REC *window)
+{
+ gint x, y, len;
+ gchar *text, *word;
+
+ g_return_val_if_fail(widget != NULL, 0);
+ g_return_val_if_fail(event != NULL, 0);
+ g_return_val_if_fail(window != NULL, 0);
+
+ x = event->x / ZVT_TERM(widget)->charwidth;
+ y = event->y / ZVT_TERM(widget)->charheight;
+
+ word = NULL;
+
+ text = zvt_term_get_buffer(ZVT_TERM(widget), &len, VT_SELTYPE_CHAR,
+ 0, y, ZVT_TERM(widget)->grid_width-1, y);
+ if (text != NULL && len > 0)
+ {
+ len = x;
+ if (!iswordcut(text[x]))
+ while (x > 0 && !iswordcut(text[x-1])) x--;
+ while (!iswordcut(text[len])) len++; len -= x;
+
+ word = g_new(gchar, len+1);
+ memcpy(word, text+x, len); word[len] = '\0';
+ }
+
+ if (event->button == 3 && toggle_show_menubar)
+ {
+ /* create popup menu */
+ window_popupmenu_create(window->active, word, event);
+ gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "button_press_event");
+ }
+ else if (word != NULL)
+ {
+ /* left mouse button clicked */
+ word_clicked(window, word, event->type == GDK_2BUTTON_PRESS, event->button, NULL);
+ }
+
+ if (word != NULL) g_free(word);
+ return 0;
+}
+#endif
+
+/* signal: button pressed in text window */
+static gint sig_text_butpress(GtkWidget *widget, GdkEventButton *event, GUI_WINDOW_VIEW_REC *view)
+{
+ static gboolean cludging = FALSE;
+ GdkEventButton kludge_event;
+
+ guint pos, spos, len;
+ gchar *text, *word;
+
+ g_return_val_if_fail(widget != NULL, 0);
+ g_return_val_if_fail(event != NULL, 0);
+ g_return_val_if_fail(view != NULL, 0);
+
+ /* so, here's the problem: we need know what word was just clicked, but
+ text widget haven't get button_press_event yet so cursor position is
+ still in the last clicked position.. We could use
+ gtk_signal_connect_after(), but if we create a popup menu with it,
+ text widget's selection gets broken, it never receives the
+ button_release_event .. We could also create the popup menu in
+ button_release_event but it seems to work in some weird way too ..
+ So this kludge seems to work best. */
+ if (cludging) return 0;
+
+ /* send faked left button click to text widget */
+ cludging = TRUE;
+ memcpy(&kludge_event, event, sizeof(kludge_event));
+ kludge_event.button = 1;
+ kludge_event.type = GDK_BUTTON_PRESS;
+ gtk_widget_event(widget, (GdkEvent *) &kludge_event);
+ kludge_event.type = GDK_BUTTON_RELEASE;
+ gtk_widget_event(widget, (GdkEvent *) &kludge_event);
+ cludging = FALSE;
+
+ /* finished, cursor is now in right position! */
+
+ len = gtk_text_get_length(GTK_TEXT(view->text));
+ pos = gtk_editable_get_position(GTK_EDITABLE(view->text));
+
+ word = NULL;
+ if (pos < len)
+ {
+ text = gtk_editable_get_chars(GTK_EDITABLE(view->text), pos < URL_MAX_LENGTH ? 0 : pos-URL_MAX_LENGTH,
+ pos+URL_MAX_LENGTH > len ? len : pos+URL_MAX_LENGTH);
+ len = spos = pos < URL_MAX_LENGTH ? pos : URL_MAX_LENGTH;
+ if (!iswordcut(text[spos]))
+ while (spos > 0 && !iswordcut(text[spos-1])) spos--;
+ while (!iswordcut(text[len])) len++; len -= spos;
+
+ word = g_new(gchar, len+1);
+ memcpy(word, text+spos, len); word[len] = '\0';
+ g_free(text);
+ }
+
+ if (event->button == 3 && toggle_show_menubar)
+ {
+ /* create popup menu */
+ window_popupmenu_create(view->window->active, word, event);
+ gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "button_press_event");
+ }
+ else if (word != NULL)
+ {
+ /* left mouse button clicked */
+ word_clicked(view->window, word, event->type == GDK_2BUTTON_PRESS, event->button, NULL);
+ }
+
+ if (word != NULL) g_free(word);
+ return 0;
+}
+
+GUI_WINDOW_VIEW_REC *gui_window_view_create(WINDOW_REC *window, GUI_WINDOW_REC *parent, GtkWidget *box)
+{
+ GUI_WINDOW_VIEW_REC *rec;
+ GtkWidget *scrollwin;
+
+ g_return_val_if_fail(parent != NULL, NULL);
+
+ rec = g_new0(GUI_WINDOW_VIEW_REC, 1);
+ parent->views = g_list_append(parent->views, rec);
+ window_views = g_list_append(window_views, rec);
+ window->gui_data = rec;
+
+ rec->window = window;
+ rec->windowset = parent;
+ rec->parent = parent->parent;;
+
+ /* Text window */
+ rec->zvt = toggle_use_zvt;
+#ifdef HAVE_GNOME
+ if (toggle_use_zvt)
+ {
+ GtkWidget *scrollbar;
+
+ rec->text = zvt_term_new();
+ gtk_signal_connect(GTK_OBJECT(rec->text), "button_press_event",
+ GTK_SIGNAL_FUNC(sig_text_butpress_zvt), window);
+ zvt_term_set_scrollback(ZVT_TERM(rec->text), max_textwidget_lines);
+ zvt_term_set_fonts(ZVT_TERM(rec->text), font_normal, font_bold);
+ zvt_term_set_blink(ZVT_TERM(rec->text), FALSE);
+ gtk_box_pack_start(GTK_BOX(box), rec->text, TRUE, TRUE, 0);
+
+ scrollbar = gtk_vscrollbar_new(ZVT_TERM(rec->text)->adjustment);
+ gtk_box_pack_start(GTK_BOX(box), scrollbar, FALSE, FALSE, 0);
+ }
+ else
+#endif
+ {
+ rec->text = gtk_text_new(NULL, NULL);
+ gtk_signal_connect(GTK_OBJECT(rec->text), "button_press_event",
+ GTK_SIGNAL_FUNC(sig_text_butpress), rec);
+ gtk_text_set_word_wrap(GTK_TEXT(rec->text), TRUE);
+
+ scrollwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+ gtk_box_pack_start(GTK_BOX(box), scrollwin, TRUE, TRUE, 0);
+ gtk_container_add(GTK_CONTAINER(scrollwin), rec->text);
+
+ init_colors(rec->text);
+ }
+
+ gui_window_view_set_background(rec);
+ return rec;
+}
+
+static gboolean gui_window_created(WINDOW_REC *window)
+{
+ GUI_WINDOW_VIEW_REC *view;
+ GtkWidget *popup;
+
+ g_return_val_if_fail(window != NULL, TRUE);
+
+ /* there's only one view after window is created.. */
+ view = WINDOW_GUI(window);
+
+#ifdef HAVE_GNOME
+ if (view->zvt)
+ {
+ gtk_widget_realize(view->text);
+ init_zvt_colors(ZVT_TERM(view->text));
+ vt_cursor_state(view->text, 0);
+ }
+#endif
+
+ if (!toggle_show_menubar)
+ {
+ /* add popup menu created by mainwindow */
+ popup = gtk_object_get_data(GTK_OBJECT(WINDOW_GUI(window)->parent->window), "popup");
+ if (popup != NULL) gnome_popup_menu_attach(popup, view->text, view->parent);
+ }
+
+ return TRUE;
+}
+
+void gui_window_view_destroy(GUI_WINDOW_VIEW_REC *view)
+{
+ WINDOW_REC *window;
+ GUI_WINDOW_REC *gui;
+
+ if (view->destroying) return;
+
+ window = view->window;
+ gui = view->windowset;
+ signal_emit("gui window view destroyed", 1, view);
+
+ view->destroying = TRUE;
+ ui_window_destroy(window);
+
+ gui->views = g_list_remove(gui->views, view);
+ window_views = g_list_remove(window_views, view);
+
+ if (view->pixmap != NULL) g_free(view->pixmap);
+ g_list_free(view->linepos);
+ g_free(view);
+
+ window->gui_data = NULL;
+
+ if (gui->views == NULL)
+ gui_windowset_destroy(gui);
+}
+
+static gboolean cmd_clear(gchar *data, SERVER_REC *server, CHANNEL_REC *channel)
+{
+ WINDOW_REC *window;
+ GUI_WINDOW_VIEW_REC *view;
+
+ g_return_val_if_fail(channel != NULL, FALSE);
+
+ window = CHANNEL_PARENT(channel);
+ view = WINDOW_GUI(window);
+
+#ifdef HAVE_GNOME
+ if (view->zvt)
+ {
+ zvt_term_set_scrollback(ZVT_TERM(view->text), 0);
+ zvt_term_feed(ZVT_TERM(view->text), "\033[H\033[2J", 7);
+ zvt_term_set_scrollback(ZVT_TERM(view->text), max_textwidget_lines);
+ }
+ else
+#endif
+ {
+ g_list_free(view->linepos);
+ view->linepos = NULL;
+ gtk_text_set_point(GTK_TEXT(view->text), 0);
+ gtk_text_forward_delete(GTK_TEXT(view->text), gtk_text_get_length(GTK_TEXT(view->text)));
+ }
+ window->lines = 0;
+
+ return TRUE;
+}
+
+static gboolean setup_changed(void)
+{
+ GList *tmp;
+
+ for (tmp = g_list_first(window_views); tmp != NULL; tmp = tmp->next)
+ {
+ GUI_WINDOW_VIEW_REC *view = tmp->data;
+
+ gui_window_view_set_background(view);
+#ifdef HAVE_GNOME
+ if (view->zvt)
+ {
+ zvt_term_set_fonts(ZVT_TERM(view->text), font_normal, font_bold);
+ init_zvt_colors(ZVT_TERM(view->text));
+ }
+#endif
+ }
+
+ return TRUE;
+}
+
+void gui_windows_view_init(void)
+{
+ signal_add("gui window created", (SIGNAL_FUNC) gui_window_created);
+ signal_add("setup changed", (SIGNAL_FUNC) setup_changed);
+ signal_add("command clear", (SIGNAL_FUNC) cmd_clear);
+}
+
+void gui_windows_view_deinit(void)
+{
+ signal_remove("gui window created", (SIGNAL_FUNC) gui_window_created);
+ signal_remove("setup changed", (SIGNAL_FUNC) setup_changed);
+ signal_remove("command clear", (SIGNAL_FUNC) cmd_clear);
+}
diff -Nru irssi-0.7.11/src/gui-gnome/gui-windows-view.h irssi-0.7.11-new/src/gui-gnome/gui-windows-view.h
--- irssi-0.7.11/src/gui-gnome/gui-windows-view.h Thu Jan 1 02:00:00 1970
+++ irssi-0.7.11-new/src/gui-gnome/gui-windows-view.h Sat Jun 12 17:23:39 1999
@@ -0,0 +1,34 @@
+#ifndef __GUI_WINDOWS_VIEW_H
+#define __GUI_WINDOWS_VIEW_H
+
+#define WINDOW_GUI(a) ((GUI_WINDOW_VIEW_REC *) ((a)->gui_data))
+
+struct _GUI_WINDOW_VIEW_REC
+{
+ WINDOW_REC *window;
+ GUI_WINDOW_REC *windowset;
+ MAIN_WINDOW_REC *parent;
+
+ GtkWidget *text;
+
+ gboolean zvt; /* text is a zvt widget */
+ gchar *pixmap; /* current background pixmap */
+
+ GList *linepos;
+ gint lastlinelen;
+
+ GtkWidget *snapshot;
+ gboolean destroying;
+};
+
+extern GList *window_views;
+
+void gui_windows_view_init(void);
+void gui_windows_view_deinit(void);
+
+GUI_WINDOW_VIEW_REC *gui_window_view_create(WINDOW_REC *window, GUI_WINDOW_REC *parent, GtkWidget *box);
+void gui_window_view_destroy(GUI_WINDOW_VIEW_REC *view);
+
+void gui_window_view_set_background_pixmap(GUI_WINDOW_VIEW_REC *view, gchar *path);
+
+#endif
diff -Nru irssi-0.7.11/src/gui-gnome/gui-windows.c irssi-0.7.11-new/src/gui-gnome/gui-windows.c
--- irssi-0.7.11/src/gui-gnome/gui-windows.c Sat May 15 21:38:30 1999
+++ irssi-0.7.11-new/src/gui-gnome/gui-windows.c Thu Jan 1 02:00:00 1970
@@ -1,750 +0,0 @@
- /*
- gui-windows.c : irssi
-
- Copyright (C) 1999 Timo Sirainen
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#include "irssi.h"
-
-#define iswordcut(a) (isspace((gint) a) || \
- (a) == '\n' || (a) == '\0' || (a) == '"' || \
- (a) == '(' || (a) == ')' || (a) == '[' || (a) == ']' || \
- (a) == '<' || (a) == '>')
-
-#define URL_MAX_LENGTH 200 /*FIXME: no max. limits*/
-
-static gchar mode_flags[] = "spmint";
-static gchar *mode_tooltips[] =
-{
- N_("Secret"),
- N_("Private"),
- N_("Moderated"),
- N_("Joining needs an invitation"),
- N_("No external messages"),
- N_("Only operators can change the topic")
-};
-
-static void init_colors(GtkWidget *window)
-{
- gint n;
-
- g_return_if_fail(window != NULL);
-
- for (n = 0; n < sizeof(setup_colors)/sizeof(setup_colors[0]); n++)
- {
- setup_colors[n].pixel =
- (gulong)((setup_colors[n].red & 0xff00)*256 +
- (setup_colors[n].green & 0xff00) +
- (setup_colors[n].blue & 0xff00)/256);
- gdk_color_alloc(gtk_widget_get_colormap(window), &setup_colors[n]);
- }
-
- bg_color.pixel =
- (gulong)((bg_color.red & 0xff00)*256 +
- (bg_color.green & 0xff00) +
- (bg_color.blue & 0xff00)/256);
- gdk_color_alloc(gtk_widget_get_colormap(window), &bg_color);
-}
-
-void gui_window_set_background_pixmap(WINDOW_REC *window, gchar *path)
-{
- GUI_WINDOW_REC *gui;
- GtkStyle *style;
- GdkPixmap *pixmap;
- GdkBitmap *mask;
-#if defined (HAVE_IMLIB) || defined (HAVE_GNOME)
- GdkImlibImage *img;
-#endif
-
- g_return_if_fail(window != NULL);
- g_return_if_fail(path != NULL);
-
- gui = WINDOW_GUI(window);
- if (gui->pixmap != NULL && strcmp(gui->pixmap, path) == 0)
- {
- /* same pixmap already set for this window.. */
- return;
- }
- if (gui->pixmap != NULL)
- g_free(gui->pixmap);
- gui->pixmap = g_strdup(path);
-
-#ifdef HAVE_GNOME
- if (gui->zvt)
- {
- zvt_term_set_background(ZVT_TERM(gui->text), path, FALSE, FALSE);
- return;
- }
-#endif
-
- if (*path == '\0')
- pixmap = NULL;
- else
- {
-#if defined (HAVE_IMLIB) || defined (HAVE_GNOME)
- mask = NULL;
- img = gdk_imlib_load_image(path);
- if (img == NULL)
- pixmap = NULL;
- else
- {
- gdk_imlib_render(img, img->rgb_width, img->rgb_height);
- pixmap = gdk_imlib_move_image(img);
- gdk_imlib_destroy_image(img);
- }
-#else
- pixmap = gdk_pixmap_create_from_xpm(gui->text->window, &mask, NULL, path);
-#endif
- }
-
- style = gtk_style_copy(gui->text->style);
- gtk_style_ref(style);
- style->bg_pixmap[GTK_STATE_NORMAL] = pixmap;
- gtk_widget_set_style(gui->text, style);
- gtk_style_unref(style);
-}
-
-static void gui_window_set_background(WINDOW_REC *window)
-{
- GUI_WINDOW_REC *gui;
- GtkStyle *style;
- gchar *path;
-
- g_return_if_fail(window != NULL);
-
- gui = WINDOW_GUI(window);
-#ifdef HAVE_GNOME
- if (gui->zvt)
- {
- if (toggle_use_transparency)
- {
- zvt_term_set_background(ZVT_TERM(gui->text), 0, TRUE, toggle_shaded_transparency);
- if (gui->pixmap != NULL)
- {
- g_free(gui->pixmap);
- gui->pixmap = NULL;
- }
- return;
- }
- }
- else
-#endif
- {
- style = gtk_style_copy(gui->text->style);
- gtk_style_ref(style);
- style->base[GTK_STATE_NORMAL] = bg_color;;
- gtk_widget_set_style(gui->text, style);
- gtk_style_unref(style);
- }
-
- path = convert_home(background_pixmap);
- gui_window_set_background_pixmap(window, path);
- g_free(path);
-}
-
-#ifdef HAVE_GNOME
-static void init_zvt_colors(ZvtTerm *zvt)
-{
- static gchar ansitab[16] = { 0, 4, 2, 6, 1, 5, 3, 7, 8, 12, 10, 14, 9, 13, 11, 15 };
- gushort zvt_red[18], zvt_green[18], zvt_blue[18];
- gint num;
-
- for (num = 0; num < 16; num++)
- {
- zvt_red[num] = (gushort) setup_colors[(gint) ansitab[num]].red;
- zvt_green[num] = (gushort) setup_colors[(gint) ansitab[num]].green;
- zvt_blue[num] = (gushort) setup_colors[(gint) ansitab[num]].blue;
- }
-
- zvt_red[16] = zvt_green[16] = zvt_blue[16] = 0xffff;
- zvt_red[17] = zvt_green[17] = zvt_blue[17] = 0;
-
- zvt_term_set_color_scheme(zvt, zvt_red, zvt_green, zvt_blue);
-}
-
-/* signal: button pressed in text window */
-static gint sig_text_butpress_zvt(GtkWidget *widget, GdkEventButton *event, WINDOW_REC *window)
-{
- gint x, y, len;
- gchar *text, *word;
-
- g_return_val_if_fail(widget != NULL, 0);
- g_return_val_if_fail(event != NULL, 0);
- g_return_val_if_fail(window != NULL, 0);
-
- x = event->x / ZVT_TERM(widget)->charwidth;
- y = event->y / ZVT_TERM(widget)->charheight;
-
- word = NULL;
-
- text = zvt_term_get_buffer(ZVT_TERM(widget), &len, VT_SELTYPE_CHAR,
- 0, y, ZVT_TERM(widget)->grid_width-1, y);
- if (text != NULL && len > 0)
- {
- len = x;
- if (!iswordcut(text[x]))
- while (x > 0 && !iswordcut(text[x-1])) x--;
- while (!iswordcut(text[len])) len++; len -= x;
-
- word = g_new(gchar, len+1);
- memcpy(word, text+x, len); word[len] = '\0';
- }
-
- if (event->button == 3 && toggle_show_menubar)
- {
- /* create popup menu */
- window_popupmenu_create(window->active, word, event);
- gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "button_press_event");
- }
- else if (word != NULL)
- {
- /* left mouse button clicked */
- word_clicked(window, word, event->type == GDK_2BUTTON_PRESS, event->button, NULL);
- }
-
- if (word != NULL) g_free(word);
- return 0;
-}
-#endif
-
-/* signal: button pressed in text window */
-static gint sig_text_butpress(GtkWidget *widget, GdkEventButton *event, WINDOW_REC *window)
-{
- static gboolean cludging = FALSE;
- GdkEventButton kludge_event;
-
- guint pos, spos, len;
- gchar *text, *word;
-
- g_return_val_if_fail(widget != NULL, 0);
- g_return_val_if_fail(event != NULL, 0);
- g_return_val_if_fail(window != NULL, 0);
-
- /* so, here's the problem: we need know what word was just clicked, but
- text widget haven't get button_press_event yet so cursor position is
- still in the last clicked position.. We could use
- gtk_signal_connect_after(), but if we create a popup menu with it,
- text widget's selection gets broken, it never receives the
- button_release_event .. We could also create the popup menu in
- button_release_event but it seems to work in some weird way too ..
- So this kludge seems to work best. */
- if (cludging) return 0;
-
- /* send faked left button click to text widget */
- cludging = TRUE;
- memcpy(&kludge_event, event, sizeof(kludge_event));
- kludge_event.button = 1;
- kludge_event.type = GDK_BUTTON_PRESS;
- gtk_widget_event(widget, (GdkEvent *) &kludge_event);
- kludge_event.type = GDK_BUTTON_RELEASE;
- gtk_widget_event(widget, (GdkEvent *) &kludge_event);
- cludging = FALSE;
-
- /* finished, cursor is now in right position! */
-
- len = gtk_text_get_length(GTK_TEXT(WINDOW_GUI(window)->text));
- pos = gtk_editable_get_position(GTK_EDITABLE(WINDOW_GUI(window)->text));
-
- word = NULL;
- if (pos < len)
- {
- text = gtk_editable_get_chars(GTK_EDITABLE(WINDOW_GUI(window)->text), pos < URL_MAX_LENGTH ? 0 : pos-URL_MAX_LENGTH,
- pos+URL_MAX_LENGTH > len ? len : pos+URL_MAX_LENGTH);
- len = spos = pos < URL_MAX_LENGTH ? pos : URL_MAX_LENGTH;
- if (!iswordcut(text[spos]))
- while (spos > 0 && !iswordcut(text[spos-1])) spos--;
- while (!iswordcut(text[len])) len++; len -= spos;
-
- word = g_new(gchar, len+1);
- memcpy(word, text+spos, len); word[len] = '\0';
- g_free(text);
- }
-
- if (event->button == 3 && toggle_show_menubar)
- {
- /* create popup menu */
- window_popupmenu_create(window->active, word, event);
- gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "button_press_event");
- }
- else if (word != NULL)
- {
- /* left mouse button clicked */
- word_clicked(window, word, event->type == GDK_2BUTTON_PRESS, event->button, NULL);
- }
-
- if (word != NULL) g_free(word);
- return 0;
-}
-
-static gint sig_topicentry_press(GtkWidget *entry, GdkEventButton *event)
-{
- gboolean editable;
-
- g_return_val_if_fail(entry != NULL, 0);
- g_return_val_if_fail(event != NULL, 0);
-
- if (event->type == GDK_2BUTTON_PRESS)
- {
- editable = !(gboolean) GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(entry), "editable"));
- gtk_object_set_data(GTK_OBJECT(entry), "editable", GINT_TO_POINTER((gint) editable));
- gtk_entry_set_editable(GTK_ENTRY(entry), editable);
- }
-
- return 0;
-}
-
-static void sig_topicentry_activated(GtkWidget *entry, WINDOW_REC *window)
-{
- CHANNEL_REC *channel;
-
- g_return_if_fail(entry != NULL);
- g_return_if_fail(window != NULL);
-
- channel = window->active;
- if (channel == NULL || (!channel->chanop && channel->mode_optopic))
- {
- /* can't change topic. */
- gtk_entry_set_text(GTK_ENTRY(entry),
- (channel == NULL || channel->topic == NULL) ?
- "" : channel->topic);
- return;
- }
-
- signal_emit("command topic", 3, gtk_entry_get_text(GTK_ENTRY(entry)),
- window->active->server, window->active);
-}
-
-static void sig_modebutton_toggled(GtkToggleButton *button, gint mode)
-{
- WINDOW_REC *window;
- NICK_REC *nick;
- GString *str;
-
- g_return_if_fail(button != NULL);
- if (gtk_object_get_data(GTK_OBJECT(button), "toggling")) return;
-
- window = gtk_object_get_data(GTK_OBJECT(button), "window");
- g_return_if_fail(window->active != NULL);
-
- nick = nicklist_find(window->active, window->active->server->nick);
- if (!window->active->chanop)
- {
- /* can't change mode */
- gtk_object_set_data(GTK_OBJECT(button), "toggling", GINT_TO_POINTER(TRUE));
- gtk_toggle_button_set_active(button, !button->active);
- gtk_object_set_data(GTK_OBJECT(button), "toggling", GINT_TO_POINTER(FALSE));
- return;
- }
-
- str = g_string_new(NULL);
- g_string_sprintf(str, "* %c%c", button->active ? '+' : '-', mode_flags[mode]);
-
- gtk_object_set_data(GTK_OBJECT(button), "toggling", GINT_TO_POINTER(TRUE));
- signal_emit("command mode", 3, str->str, window->active->server, window->active);
- g_string_free(str, TRUE);
- gtk_object_set_data(GTK_OBJECT(button), "toggling", GINT_TO_POINTER(FALSE));
-}
-
-WINDOW_REC *gui_window_create(MAIN_WINDOW_REC *parent)
-{
- WINDOW_REC *rec;
- GUI_WINDOW_REC *gui;
- GtkWidget *hbox, *scrollwin, *label;
- GtkTooltips *tooltips;
- gint num;
-
- if (parent == NULL) parent = mainwindow_create();
-
- rec = ui_window_create();
- g_return_val_if_fail(rec != NULL, NULL);
-
- gui = g_new0(GUI_WINDOW_REC, 1);
- rec->gui_data = gui;
- gui->parent = parent;
-
- if (parent->children == NULL) parent->active = rec;
- parent->children = g_list_append(parent->children, rec);
-
- gui->window = gtk_vbox_new(FALSE, 2);
- gtk_container_border_width(GTK_CONTAINER(gui->window), 2);
-
- /* Add channel topic and modes */
- gui->channelwidget = gtk_hbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(gui->window), gui->channelwidget, FALSE, FALSE, 0);
-
- gui->serverlabel = gtk_label_new("");
- gtk_box_pack_start(GTK_BOX(gui->channelwidget), gui->serverlabel, FALSE, FALSE, 0);
-
- gui->topicentry = gtk_entry_new();
- gtk_entry_set_editable(GTK_ENTRY(gui->topicentry), FALSE);
- gtk_signal_connect(GTK_OBJECT(gui->topicentry), "button_press_event",
- GTK_SIGNAL_FUNC(sig_topicentry_press), rec);
- gtk_signal_connect(GTK_OBJECT(gui->topicentry), "activate",
- GTK_SIGNAL_FUNC(sig_topicentry_activated), rec);
- gtk_box_pack_start(GTK_BOX(gui->channelwidget), gui->topicentry, TRUE, TRUE, 3);
-
- tooltips = gtk_tooltips_new();
-
- for (num = 0; num < 6; num++)
- {
- gchar str[2];
-
- str[0] = toupper(mode_flags[num]); str[1] = '\0';
- gui->modebuttons[num] = gtk_toggle_button_new_with_label(str);
- gtk_tooltips_set_tip(tooltips, gui->modebuttons[num], mode_tooltips[num], NULL);
- gtk_widget_set_usize(gui->modebuttons[num], 20, -1);
- gtk_object_set_data(GTK_OBJECT(gui->modebuttons[num]), "window", rec);
- gtk_signal_connect(GTK_OBJECT(gui->modebuttons[num]), "toggled",
- GTK_SIGNAL_FUNC(sig_modebutton_toggled), GINT_TO_POINTER(num));
- gtk_box_pack_start(GTK_BOX(gui->channelwidget), gui->modebuttons[num], FALSE, FALSE, 0);
- }
-
- /* Text window */
- hbox = gtk_hbox_new(FALSE, 3);
- gtk_box_pack_start(GTK_BOX(gui->window), hbox, TRUE, TRUE, 0);
-
- gui->zvt = toggle_use_zvt;
-#ifdef HAVE_GNOME
- if (toggle_use_zvt)
- {
- GtkWidget *scrollbar;
-
- gui->text = zvt_term_new();
- gtk_signal_connect(GTK_OBJECT(gui->text), "button_press_event",
- GTK_SIGNAL_FUNC(sig_text_butpress_zvt), rec);
- zvt_term_set_scrollback(ZVT_TERM(gui->text), max_textwidget_lines);
- zvt_term_set_fonts(ZVT_TERM(gui->text), font_normal, font_bold);
- zvt_term_set_blink(ZVT_TERM(gui->text), FALSE);
- gtk_box_pack_start(GTK_BOX(hbox), gui->text, TRUE, TRUE, 0);
-
- scrollbar = gtk_vscrollbar_new(ZVT_TERM(gui->text)->adjustment);
- gtk_box_pack_start(GTK_BOX(hbox), scrollbar, FALSE, FALSE, 0);
- }
- else
-#endif
- {
- gui->text = gtk_text_new(NULL, NULL);
- gtk_signal_connect(GTK_OBJECT(gui->text), "button_press_event",
- GTK_SIGNAL_FUNC(sig_text_butpress), rec);
- gtk_text_set_word_wrap(GTK_TEXT(gui->text), TRUE);
-
- scrollwin = gtk_scrolled_window_new(NULL, NULL);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
- gtk_box_pack_start(GTK_BOX(hbox), scrollwin, TRUE, TRUE, 0);
- gtk_container_add(GTK_CONTAINER(scrollwin), gui->text);
-
- init_colors(gui->text);
- }
- gui_window_set_background(rec);
-
- gtk_widget_show_all(gui->window);
-
- /* Add nick list */
- gui->nickscrollbox = gtk_scrolled_window_new(NULL, NULL);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(gui->nickscrollbox),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_box_pack_start(GTK_BOX(hbox), gui->nickscrollbox, FALSE, FALSE, 0);
-
- gui->nicklist = gtk_clist_new(1);
- gtk_container_add(GTK_CONTAINER(gui->nickscrollbox), gui->nicklist);
- gtk_widget_show(gui->nicklist);
-
- gtk_widget_set_usize(gui->nickscrollbox, 120, -1);
-
- label = gtk_label_new(_("(none)"));
- gtk_widget_show(label);
-
- if (g_list_first(parent->children)->next == NULL)
- {
- /* only one child, don't show the notebook tabs.. */
- gtk_notebook_set_show_tabs(GTK_NOTEBOOK(parent->notebook), FALSE);
- gtk_notebook_set_show_border(GTK_NOTEBOOK(parent->notebook), FALSE);
- }
- else if (g_list_first(parent->children)->next->next == NULL)
- {
- /* two children, show the notebook tabs.. */
- gtk_notebook_set_show_tabs(GTK_NOTEBOOK(parent->notebook), TRUE);
- gtk_notebook_set_show_border(GTK_NOTEBOOK(parent->notebook), TRUE);
- }
-
- gtk_notebook_append_page(GTK_NOTEBOOK(parent->notebook), gui->window, label);
-
-#ifdef HAVE_GNOME
- if (gui->zvt)
- {
- gtk_widget_realize(gui->text);
- init_zvt_colors(ZVT_TERM(gui->text));
- vt_cursor_state(gui->text, 0);
- }
-#endif
-
- if (!toggle_show_menubar)
- {
- GtkWidget *popup;
-
- /* add popup menu created by mainwindow */
- popup = gtk_object_get_data(GTK_OBJECT(parent->window), "popup");
- if (popup != NULL) gnome_popup_menu_attach(popup, gui->text, parent);
- }
-
- gtk_widget_hide(gui->channelwidget);
-
- signal_emit("gui window created", 1, rec);
- return rec;
-}
-
-void gui_window_destroy(WINDOW_REC *window)
-{
- MAIN_WINDOW_REC *parent;
- GUI_WINDOW_REC *gui;
- gint page;
-
- g_return_if_fail(window != NULL);
- if (WINDOW_GUI(window)->destroying) return;
-
- gui = WINDOW_GUI(window);
- parent = gui->parent;
- parent->children = g_list_remove(parent->children, window);
-
- signal_emit("gui window destroyed", 1, window);
-
- gui->destroying = TRUE;
- ui_window_destroy(window);
-
- page = gtk_notebook_page_num(GTK_NOTEBOOK(parent->notebook), gui->window);
- gtk_notebook_remove_page(GTK_NOTEBOOK(parent->notebook), page);
-
- if (gui->pixmap != NULL) g_free(gui->pixmap);
- g_free(gui);
- window->gui_data = NULL;
-
- if (parent->children == NULL)
- mainwindow_destroy(parent);
- else if (g_list_length(parent->children) == 1)
- {
- /* only one child left, hide the notebook tabs.. */
- gtk_notebook_set_show_tabs(GTK_NOTEBOOK(parent->notebook), FALSE);
- gtk_notebook_set_show_border(GTK_NOTEBOOK(parent->notebook), FALSE);
- }
-}
-
-static gboolean gui_window_server_changed(WINDOW_REC *window)
-{
- MAIN_WINDOW_REC *parent;
- SERVER_REC *server;
- gint num;
-
- g_return_val_if_fail(window != NULL, FALSE);
-
- parent = WINDOW_GUI(window)->parent;
- server = window->active->server;
-
- if (parent->usermodes[0] == NULL) return TRUE;
-
- for (num = 0; num < 4; num++)
- gtk_object_set_data(GTK_OBJECT(parent->usermodes[num]), "toggling", GINT_TO_POINTER(TRUE));
-
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(parent->usermodes[0]),
- server == NULL ? FALSE : server->usermode_away);
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(parent->usermodes[1]),
- server == NULL ? FALSE : server->usermode_invisible);
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(parent->usermodes[2]),
- server == NULL ? FALSE : server->usermode_wallops);
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(parent->usermodes[3]),
- server == NULL ? FALSE : server->usermode_servernotes);
-
- for (num = 0; num < 4; num++)
- gtk_object_set_data(GTK_OBJECT(parent->usermodes[num]), "toggling", GINT_TO_POINTER(FALSE));
-
- return TRUE;
-}
-
-static gboolean gui_windows_usermode_changed(SERVER_REC *server)
-{
- GList *winlist;
-
- for (winlist = g_list_first(mainwindows); winlist != NULL; winlist = winlist->next)
- {
- MAIN_WINDOW_REC *rec = winlist->data;
-
- if (server == rec->active->active->server)
- signal_emit("window server changed", 1, rec->active);
- }
-
- return TRUE;
-}
-
-static gboolean cmd_clear(gchar *data, SERVER_REC *server, CHANNEL_REC *channel)
-{
- WINDOW_REC *window;
- GUI_WINDOW_REC *gui;
-
- g_return_val_if_fail(channel != NULL, FALSE);
-
- window = CHANNEL_PARENT(channel);
- gui = WINDOW_GUI(window);
-
-#ifdef HAVE_GNOME
- if (gui->zvt)
- {
- zvt_term_set_scrollback(ZVT_TERM(gui->text), 0);
- zvt_term_feed(ZVT_TERM(gui->text), "\033[H\033[2J", 7);
- zvt_term_set_scrollback(ZVT_TERM(gui->text), max_textwidget_lines);
- }
- else
-#endif
- {
- g_list_free(gui->linepos);
- gui->linepos = NULL;
- gtk_text_set_point(GTK_TEXT(gui->text), 0);
- gtk_text_forward_delete(GTK_TEXT(gui->text), gtk_text_get_length(GTK_TEXT(gui->text)));
- }
- window->lines = 0;
-
- return TRUE;
-}
-
-static gboolean signal_window_focused(WINDOW_REC *window)
-{
- MAIN_WINDOW_REC *mainwindow;
- GUI_WINDOW_REC *gui;
- CHANNEL_REC *channel;
-
- g_return_val_if_fail(window != NULL, FALSE);
-
- mainwindow = WINDOW_GUI(window)->parent;
- channel = window->active;
-
- gui = WINDOW_GUI(mainwindow->active);
-
- /* remove old extra menus */
- if (mainwindow->extramenu != NULL)
- {
- window_menus_remove(mainwindow, mainwindow->extramenu);
- g_free(mainwindow->extramenu);
- mainwindow->extramenu = NULL;
- }
- if (channel == NULL) return TRUE;
-
- if (channel->type == CHANNEL_TYPE_CHANNEL)
- {
- /* Add channel menu */
- mainwindow->extramenu = g_strdup(channel_menu[0].label);
- window_menus_insert(mainwindow, NULL, channel_menu, channel);
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(channel_submenu[2].widget),
- GTK_WIDGET_VISIBLE(gui->nickscrollbox));
- gtk_widget_show(gui->channelwidget);
- }
- else
- {
- gtk_widget_hide(gui->nickscrollbox);
- gtk_widget_hide(gui->channelwidget);
- if (channel->type == CHANNEL_TYPE_QUERY)
- {
- /* Add query menu */
- mainwindow->extramenu = g_strdup(query_menu[0].label);
- window_menus_insert(mainwindow, NULL, query_menu, channel);
- }
- }
-
- if (CHANNEL_GUI(channel)->servermenu)
- {
- /* change server selection */
- gtk_option_menu_set_history(GTK_OPTION_MENU(mainwindow->servermenu),
- g_list_index(servers, channel->server));
- gtk_widget_show(mainwindow->servermenu);
- }
- else
- gtk_widget_hide(mainwindow->servermenu);
-
- /* draw title bar */
- signal_emit("channel topic changed", 1, window->active);
-
- return TRUE;
-}
-
-static gboolean gui_windows_setup_changed(void)
-{
- GList *tmp;
-
- for (tmp = g_list_first(windows); tmp != NULL; tmp = tmp->next)
- {
- WINDOW_REC *rec = tmp->data;
-
- gui_window_set_background(rec);
-#ifdef HAVE_GNOME
- if (WINDOW_GUI(rec)->zvt)
- {
- zvt_term_set_fonts(ZVT_TERM(WINDOW_GUI(rec)->text), font_normal, font_bold);
- init_zvt_colors(ZVT_TERM(WINDOW_GUI(rec)->text));
- }
-#endif
- }
-
- return TRUE;
-}
-
-static gboolean gui_server_looking(SERVER_REC *server)
-{
- GList *tmp, *sub;
-
- g_return_val_if_fail(server != NULL, FALSE);
-
- /* try to keep some server assigned to server menus.. */
- for (tmp = g_list_first(windows); tmp != NULL; tmp = tmp->next)
- {
- WINDOW_REC *win = tmp->data;
- gboolean changed;
-
- changed = FALSE;
- for (sub = g_list_first(win->channels); sub != NULL; sub = sub->next)
- {
- CHANNEL_REC *chan = sub->data;
-
- if (chan->server == NULL)
- {
- chan->server = server;
- if (!changed)
- signal_emit("window server changed", 1, win);
- changed = TRUE;
- }
- }
- }
-
- return TRUE;
-}
-
-void gui_windows_init(void)
-{
- signal_add("setup changed", (SIGNAL_FUNC) gui_windows_setup_changed);
- signal_add("user mode changed", (SIGNAL_FUNC) gui_windows_usermode_changed);
- signal_add("window server changed", (SIGNAL_FUNC) gui_window_server_changed);
- signal_add("window focused", (SIGNAL_FUNC) signal_window_focused);
- signal_add("command clear", (SIGNAL_FUNC) cmd_clear);
- signal_add("server looking", (SIGNAL_FUNC) gui_server_looking);
-}
-
-void gui_windows_deinit(void)
-{
- signal_remove("setup changed", (SIGNAL_FUNC) gui_windows_setup_changed);
- signal_remove("user mode changed", (SIGNAL_FUNC) gui_windows_usermode_changed);
- signal_remove("window server changed", (SIGNAL_FUNC) gui_window_server_changed);
- signal_remove("window focused", (SIGNAL_FUNC) signal_window_focused);
- signal_remove("command clear", (SIGNAL_FUNC) cmd_clear);
- signal_remove("server looking", (SIGNAL_FUNC) gui_server_looking);
-}
diff -Nru irssi-0.7.11/src/gui-gnome/gui-windows.h irssi-0.7.11-new/src/gui-gnome/gui-windows.h
--- irssi-0.7.11/src/gui-gnome/gui-windows.h Thu May 13 13:24:58 1999
+++ irssi-0.7.11-new/src/gui-gnome/gui-windows.h Thu Jan 1 02:00:00 1970
@@ -1,44 +0,0 @@
-#ifndef __GUI_WINDOWS_H
-#define __GUI_WINDOWS_H
-
-#define WINDOW_GUI(a) ((GUI_WINDOW_REC *) ((a)->gui_data))
-
-typedef struct
-{
- MAIN_WINDOW_REC *parent;
-
- GtkWidget *window;
- GtkWidget *text;
-
- gboolean zvt; /* text is a zvt widget */
- gchar *pixmap; /* current background pixmap */
-
- GtkWidget *channelwidget;
- GtkWidget *serverlabel;
- GtkWidget *topicentry;
- GtkWidget *modebuttons[6];
-
- /* nicklist */
- GtkWidget *nickscrollbox;
- GtkWidget *nicklist;
- GdkPixmap *op_pixmap, *voice_pixmap;
- GdkBitmap *op_mask, *voice_mask;
-
- GList *linepos;
- gint lastlinelen;
-
- GtkWidget *snapshot;
- gboolean destroying;
- gfloat sb_value; /* to fix those scrollbar problems... */
-}
-GUI_WINDOW_REC;
-
-void gui_windows_init(void);
-void gui_windows_deinit(void);
-
-WINDOW_REC *gui_window_create(MAIN_WINDOW_REC *parent);
-void gui_window_destroy(WINDOW_REC *window);
-
-void gui_window_set_background_pixmap(WINDOW_REC *window, gchar *path);
-
-#endif