summaryrefslogtreecommitdiff
path: root/window-views-patch.diff
diff options
context:
space:
mode:
Diffstat (limited to 'window-views-patch.diff')
-rw-r--r--window-views-patch.diff2672
1 files changed, 0 insertions, 2672 deletions
diff --git a/window-views-patch.diff b/window-views-patch.diff
deleted file mode 100644
index 192b96b1..00000000
--- a/window-views-patch.diff
+++ /dev/null
@@ -1,2672 +0,0 @@
-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