aboutsummaryrefslogtreecommitdiff
path: root/src/prefswindow.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/prefswindow.c')
-rw-r--r--src/prefswindow.c921
1 files changed, 921 insertions, 0 deletions
diff --git a/src/prefswindow.c b/src/prefswindow.c
new file mode 100644
index 0000000..d056646
--- /dev/null
+++ b/src/prefswindow.c
@@ -0,0 +1,921 @@
+/*
+ * prefswindow.c
+ *
+ * The preferences window
+ *
+ * (c) 2002-2005 Thomas White <taw27@srcf.ucam.org>
+ * Part of TuxMessenger - GTK+-based MSN Messenger client
+ *
+ * This package 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; version 2 dated June, 1991.
+ *
+ * This package 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 package; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "options.h"
+#include "msnprotocol.h"
+#include "debug.h"
+#include "contactlist.h"
+#include "routines.h"
+#include "twnauth.h"
+#include "error.h"
+
+/* This is where I go slightly mad. Solid UI code... */
+
+/* Linked list item definition for storing changes to be made to the block/allow lists */
+typedef struct allowblockchange_t {
+ struct allowblockchange *next;
+ char *string;
+} AllowBlockChange;
+
+static struct {
+
+ unsigned int open; /* Non-zero means the prefs window is open. */
+ GtkWidget *window; /* The prefs window itself */
+
+ GtkWidget *blocklist; /* vbox in the "Allow/Block lists" tab */
+ GtkWidget *reverselist; /* vbox in the "Reverse list" tab */
+ GtkWidget *blocklist_sub; /* vbox in the "Allow/Block lists" tab */
+ GtkWidget *reverselist_sub; /* vbox in the "Reverse list" tab */
+
+ GtkWidget *blocklist_allowbutton; /* "<- Allow" button */
+ GtkWidget *blocklist_blockbutton; /* "Block ->" button */
+ GtkWidget *blocklist_allowclist; /* CList for AL */
+ GtkWidget *blocklist_blockclist; /* CList for BL */
+ GtkWidget *reverselist_clist; /* CList for RL */
+ GtkWidget *reverselist_gtc; /* Tick box */
+ GtkWidget *blocklist_blp; /* Tick box */
+ GtkWidget *ofontbutton; /* Font button for other contacts */
+ GtkWidget *ocolourbutton; /* Colour button for other contacts */
+
+ int block_selected;
+ int allow_selected;
+
+ GtkWidget *wget; /* "Wget" box */
+
+} prefswindow = {
+
+ 0,
+ NULL,
+
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+
+ -1,
+ -1,
+
+ NULL
+
+};
+
+static void prefswindow_allowselect(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) {
+
+ prefswindow.allow_selected = row;
+ gtk_widget_set_sensitive(prefswindow.blocklist_blockbutton, 1);
+ if ( prefswindow.block_selected != -1 ) {
+ gtk_clist_unselect_row(GTK_CLIST(prefswindow.blocklist_blockclist), prefswindow.block_selected, 0);
+ }
+
+}
+
+static void prefswindow_allowunselect(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) {
+
+ prefswindow.allow_selected = -1;
+ gtk_widget_set_sensitive(prefswindow.blocklist_blockbutton, 0);
+
+}
+
+static void prefswindow_blockselect(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) {
+
+ prefswindow.block_selected = row;
+ gtk_widget_set_sensitive(prefswindow.blocklist_allowbutton, 1);
+ if ( prefswindow.allow_selected != -1 ) {
+ gtk_clist_unselect_row(GTK_CLIST(prefswindow.blocklist_allowclist), prefswindow.allow_selected, 0);
+ }
+
+}
+
+static void prefswindow_blockunselect(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) {
+
+ prefswindow.block_selected = -1;
+ gtk_widget_set_sensitive(prefswindow.blocklist_allowbutton, 0);
+
+}
+
+static void prefswindow_allowclick() {
+}
+
+static void prefswindow_blockclick() {
+}
+
+static void prefswindow_filllist(char *list, GtkWidget *clist) {
+
+/* ContactItem *token;
+ char *contact;
+
+ token = NULL;
+ contact = contactlist_getcontact(list, &token);
+ while ( token ) {
+
+ char *friendlyname;
+ char *friendlyname_decoded;
+ char *username;
+ char *full_string;
+ char *clist_add[1];
+
+ username = routines_lindex(contact, 0);
+ friendlyname = routines_lindex(contact, 1);
+
+ if ( strlen(friendlyname) == 0 ) {
+
+ clist_add[0] = username;
+
+ } else {
+
+ friendlyname_decoded = routines_urldecode(friendlyname);
+ free(friendlyname);
+ full_string = malloc(strlen(username) + strlen(friendlyname_decoded) + 3 + 1);
+ strcpy(full_string, username);
+ strcat(full_string, " - ");
+ strcat(full_string, friendlyname_decoded);
+
+ clist_add[0] = full_string;
+
+ free(friendlyname_decoded);
+ free(username);
+
+ }
+
+ gtk_clist_append(GTK_CLIST(clist), clist_add);
+ free(clist_add[0]);
+
+ contact = contactlist_getcontact(list, &token);
+
+ }*/
+
+}
+
+static void prefswindow_fillreverselist() {
+
+/* ContactItem *token;
+ char *contact;
+
+ token = NULL;
+ contact = contactlist_getcontact("RL", &token);
+ while ( token ) {
+
+ char *friendlyname;
+ char *friendlyname_decoded;
+ char *username;
+ char *clist_add[3];
+
+ username = routines_lindex(contact, 0);
+ friendlyname = routines_lindex(contact, 1);
+
+ clist_add[0] = username;
+ friendlyname_decoded = routines_urldecode(friendlyname);
+ free(friendlyname);
+ clist_add[1] = friendlyname_decoded;
+
+ if ( contactlist_isonlist("AL", username) ) {
+ clist_add[2] = "Allow";
+ } else if ( contactlist_isonlist("BL", username) ) {
+ clist_add[2] = "Block";
+ } else {
+ clist_add[2] = "Neither";
+ }
+
+ gtk_clist_append(GTK_CLIST(prefswindow.reverselist_clist), clist_add);
+
+ free(friendlyname_decoded);
+ free(username);
+
+ contact = contactlist_getcontact("RL", &token);
+
+ }*/
+
+}
+
+/* Parallel of mainwindow_setonline. */
+void prefswindow_setonline() {
+
+ GtkWidget *prefs_blocklist_vbox;
+ GtkWidget *prefs_blocklist_buttonbox;
+ GtkWidget *prefs_blocklist_scroll;
+ GtkWidget *prefs_blocklist_viewport;
+ GtkWidget *prefs_blocklist_hbox;
+ GtkWidget *prefs_blocklist_allow_clist_label;
+ GtkWidget *prefs_blocklist_block_clist_label;
+
+ GtkWidget *prefs_reverselist_vbox;
+ GtkWidget *prefs_reverselist_scroll;
+ GtkWidget *prefs_reverselist_clist_username;
+ GtkWidget *prefs_reverselist_clist_displayname;
+ GtkWidget *prefs_reverselist_clist_status;
+
+ if ( !prefswindow.open ) {
+ return;
+ }
+
+ if ( prefswindow.blocklist_sub != NULL ) {
+ gtk_widget_destroy(prefswindow.blocklist_sub);
+ }
+
+ if ( prefswindow.reverselist_sub != NULL ) {
+ gtk_widget_destroy(prefswindow.reverselist_sub);
+ }
+
+ prefswindow.blocklist_sub = gtk_vbox_new(TRUE, 0);
+ prefswindow.reverselist_sub = gtk_vbox_new(TRUE, 0);
+ gtk_widget_show(prefswindow.reverselist_sub);
+
+ prefs_blocklist_vbox = gtk_vbox_new (FALSE, 0);
+ gtk_widget_ref (prefs_blocklist_vbox);
+ gtk_object_set_data_full (GTK_OBJECT (prefswindow.blocklist), "prefs_blocklist_vbox", prefs_blocklist_vbox,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (prefs_blocklist_vbox);
+ gtk_container_add (GTK_CONTAINER (prefswindow.blocklist_sub), prefs_blocklist_vbox);
+ gtk_container_add (GTK_CONTAINER (prefswindow.blocklist), prefswindow.blocklist_sub);
+ gtk_widget_show(prefswindow.blocklist_sub);
+
+ prefs_blocklist_scroll = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_ref (prefs_blocklist_scroll);
+ gtk_object_set_data_full (GTK_OBJECT (prefswindow.blocklist), "prefs_blocklist_scroll", prefs_blocklist_scroll,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (prefs_blocklist_scroll);
+ gtk_box_pack_start (GTK_BOX (prefs_blocklist_vbox), prefs_blocklist_scroll, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (prefs_blocklist_scroll), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+
+ prefs_blocklist_viewport = gtk_viewport_new (NULL, NULL);
+ gtk_widget_ref (prefs_blocklist_viewport);
+ gtk_object_set_data_full (GTK_OBJECT (prefswindow.blocklist), "prefs_blocklist_viewport", prefs_blocklist_viewport,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (prefs_blocklist_viewport);
+ gtk_container_add (GTK_CONTAINER (prefs_blocklist_scroll), prefs_blocklist_viewport);
+
+ prefs_blocklist_hbox = gtk_hbox_new (FALSE, 0);
+ gtk_widget_ref (prefs_blocklist_hbox);
+ gtk_object_set_data_full (GTK_OBJECT (prefswindow.blocklist), "prefs_blocklist_hbox", prefs_blocklist_hbox,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (prefs_blocklist_hbox);
+ gtk_container_add (GTK_CONTAINER (prefs_blocklist_viewport), prefs_blocklist_hbox);
+
+ prefswindow.blocklist_allowclist = gtk_clist_new (1);
+ gtk_widget_ref (prefswindow.blocklist_allowclist);
+ gtk_object_set_data_full (GTK_OBJECT (prefswindow.blocklist), "prefs_blocklist_allow_clist", prefswindow.blocklist_allowclist,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (prefswindow.blocklist_allowclist);
+ gtk_box_pack_start (GTK_BOX (prefs_blocklist_hbox), prefswindow.blocklist_allowclist, TRUE, TRUE, 0);
+ gtk_clist_set_column_width (GTK_CLIST (prefswindow.blocklist_allowclist), 0, 80);
+ gtk_clist_column_titles_show (GTK_CLIST (prefswindow.blocklist_allowclist));
+
+ prefs_blocklist_allow_clist_label = gtk_label_new ("Allow");
+ gtk_widget_ref (prefs_blocklist_allow_clist_label);
+ gtk_object_set_data_full (GTK_OBJECT (prefswindow.blocklist), "prefs_blocklist_allow_clist_label", prefs_blocklist_allow_clist_label,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (prefs_blocklist_allow_clist_label);
+ gtk_clist_set_column_widget (GTK_CLIST (prefswindow.blocklist_allowclist), 0, prefs_blocklist_allow_clist_label);
+
+ prefswindow.blocklist_blockclist = gtk_clist_new (1);
+ gtk_widget_ref (prefswindow.blocklist_blockclist);
+ gtk_object_set_data_full (GTK_OBJECT (prefswindow.blocklist), "prefs_blocklist_block_clist", prefswindow.blocklist_blockclist,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (prefswindow.blocklist_blockclist);
+ gtk_box_pack_start (GTK_BOX (prefs_blocklist_hbox), prefswindow.blocklist_blockclist, TRUE, TRUE, 0);
+ gtk_clist_set_column_width (GTK_CLIST (prefswindow.blocklist_blockclist), 0, 80);
+ gtk_clist_column_titles_show (GTK_CLIST (prefswindow.blocklist_blockclist));
+
+ prefs_blocklist_block_clist_label = gtk_label_new ("Block");
+ gtk_widget_ref (prefs_blocklist_block_clist_label);
+ gtk_object_set_data_full (GTK_OBJECT (prefswindow.blocklist), "prefs_blocklist_block_clist_label", prefs_blocklist_block_clist_label,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (prefs_blocklist_block_clist_label);
+ gtk_clist_set_column_widget (GTK_CLIST (prefswindow.blocklist_blockclist), 0, prefs_blocklist_block_clist_label);
+
+ prefs_blocklist_buttonbox = gtk_hbutton_box_new ();
+ gtk_widget_ref (prefs_blocklist_buttonbox);
+ gtk_object_set_data_full (GTK_OBJECT (prefswindow.blocklist), "prefs_blocklist_buttonbox", prefs_blocklist_buttonbox,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (prefs_blocklist_buttonbox);
+ gtk_box_pack_start (GTK_BOX (prefs_blocklist_vbox), prefs_blocklist_buttonbox, FALSE, FALSE, 0);
+ gtk_button_box_set_layout (GTK_BUTTON_BOX (prefs_blocklist_buttonbox), GTK_BUTTONBOX_SPREAD);
+
+ prefswindow.blocklist_allowbutton = gtk_button_new_with_label ("<- Allow");
+ gtk_widget_ref (prefswindow.blocklist_allowbutton);
+ gtk_object_set_data_full (GTK_OBJECT (prefswindow.blocklist), "prefs_blocklist_allow_button", prefswindow.blocklist_allowbutton,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (prefswindow.blocklist_allowbutton);
+ gtk_container_add (GTK_CONTAINER (prefs_blocklist_buttonbox), prefswindow.blocklist_allowbutton);
+ GTK_WIDGET_SET_FLAGS (prefswindow.blocklist_allowbutton, GTK_CAN_DEFAULT);
+
+ prefswindow.blocklist_blockbutton = gtk_button_new_with_label ("Block ->");
+ gtk_widget_ref (prefswindow.blocklist_blockbutton);
+ gtk_object_set_data_full (GTK_OBJECT (prefswindow.blocklist), "prefs_blocklist_block_button", prefswindow.blocklist_blockbutton,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (prefswindow.blocklist_blockbutton);
+ gtk_container_add (GTK_CONTAINER (prefs_blocklist_buttonbox), prefswindow.blocklist_blockbutton);
+ GTK_WIDGET_SET_FLAGS (prefswindow.blocklist_blockbutton, GTK_CAN_DEFAULT);
+
+ gtk_container_set_border_width(GTK_CONTAINER(prefswindow.blocklist), 10);
+ gtk_clist_column_titles_passive(GTK_CLIST(prefswindow.blocklist_allowclist));
+ gtk_clist_column_titles_passive(GTK_CLIST(prefswindow.blocklist_blockclist));
+
+ prefswindow.blocklist_blp = gtk_check_button_new_with_label ("Block all other users");
+ gtk_widget_ref (prefswindow.blocklist_blp);
+ gtk_widget_show (prefswindow.blocklist_blp);
+ gtk_box_pack_start (GTK_BOX (prefs_blocklist_vbox), prefswindow.blocklist_blp, FALSE, FALSE, 0);
+
+ if ( strcmp(options_blp(), "BL") == 0) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefswindow.blocklist_blp), TRUE);
+ } else {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefswindow.blocklist_blp), FALSE);
+ }
+
+ gtk_signal_connect(GTK_OBJECT(prefswindow.blocklist_allowclist), "select_row", GTK_SIGNAL_FUNC(prefswindow_allowselect), NULL);
+ gtk_signal_connect(GTK_OBJECT(prefswindow.blocklist_allowclist), "unselect_row", GTK_SIGNAL_FUNC(prefswindow_allowunselect), NULL);
+ gtk_signal_connect(GTK_OBJECT(prefswindow.blocklist_blockbutton), "clicked", GTK_SIGNAL_FUNC(prefswindow_allowclick), NULL);
+
+ gtk_signal_connect(GTK_OBJECT(prefswindow.blocklist_blockclist), "select_row", GTK_SIGNAL_FUNC(prefswindow_blockselect), NULL);
+ gtk_signal_connect(GTK_OBJECT(prefswindow.blocklist_blockclist), "unselect_row", GTK_SIGNAL_FUNC(prefswindow_blockunselect), NULL);
+ gtk_signal_connect(GTK_OBJECT(prefswindow.blocklist_allowbutton), "clicked", GTK_SIGNAL_FUNC(prefswindow_blockclick), NULL);
+
+ prefswindow_filllist("BL", prefswindow.blocklist_blockclist);
+ prefswindow_filllist("AL", prefswindow.blocklist_allowclist);
+
+ gtk_widget_set_sensitive(prefswindow.blocklist_allowbutton , 0);
+ gtk_widget_set_sensitive(prefswindow.blocklist_blockbutton, 0);
+
+ /* ************* now the Reverse List section ************** */
+
+ prefs_reverselist_vbox = gtk_vbox_new (FALSE, 3);
+ gtk_widget_ref (prefs_reverselist_vbox);
+ gtk_object_set_data_full (GTK_OBJECT (prefswindow.reverselist), "prefs_reverselist_vbox", prefs_reverselist_vbox,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (prefs_reverselist_vbox);
+ gtk_container_add (GTK_CONTAINER (prefswindow.reverselist_sub), prefs_reverselist_vbox);
+ gtk_container_add(GTK_CONTAINER(prefswindow.reverselist), prefswindow.reverselist_sub);
+
+ prefs_reverselist_scroll = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_ref (prefs_reverselist_scroll);
+ gtk_object_set_data_full (GTK_OBJECT (prefswindow.reverselist), "prefs_reverselist_scroll", prefs_reverselist_scroll,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (prefs_reverselist_scroll);
+ gtk_box_pack_start (GTK_BOX (prefs_reverselist_vbox), prefs_reverselist_scroll, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (prefs_reverselist_scroll), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+
+ prefswindow.reverselist_clist = gtk_clist_new (3);
+ gtk_widget_ref (prefswindow.reverselist_clist);
+ gtk_object_set_data_full (GTK_OBJECT (prefswindow.reverselist), "prefs_reverselist_clist", prefswindow.reverselist_clist,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (prefswindow.reverselist_clist);
+ gtk_container_add (GTK_CONTAINER (prefs_reverselist_scroll), prefswindow.reverselist_clist);
+ gtk_clist_set_column_width (GTK_CLIST (prefswindow.reverselist_clist), 0, 80);
+ gtk_clist_set_column_width (GTK_CLIST (prefswindow.reverselist_clist), 1, 80);
+ gtk_clist_set_column_width (GTK_CLIST (prefswindow.reverselist_clist), 2, 80);
+ gtk_clist_column_titles_show (GTK_CLIST (prefswindow.reverselist_clist));
+
+ prefs_reverselist_clist_username = gtk_label_new ("Username");
+ gtk_widget_ref (prefs_reverselist_clist_username);
+ gtk_object_set_data_full (GTK_OBJECT (prefswindow.reverselist), "prefs_reverselist_clist_username", prefs_reverselist_clist_username,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (prefs_reverselist_clist_username);
+ gtk_clist_set_column_widget (GTK_CLIST (prefswindow.reverselist_clist), 0, prefs_reverselist_clist_username);
+
+ prefs_reverselist_clist_displayname = gtk_label_new ("Display Name");
+ gtk_widget_ref (prefs_reverselist_clist_displayname);
+ gtk_object_set_data_full (GTK_OBJECT (prefswindow.reverselist), "prefs_reverselist_clist_displayname", prefs_reverselist_clist_displayname,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (prefs_reverselist_clist_displayname);
+ gtk_clist_set_column_widget (GTK_CLIST (prefswindow.reverselist_clist), 1, prefs_reverselist_clist_displayname);
+ gtk_widget_set_usize (prefs_reverselist_clist_displayname, 128, -2);
+
+ prefs_reverselist_clist_status = gtk_label_new ("Status");
+ gtk_widget_ref (prefs_reverselist_clist_status);
+ gtk_object_set_data_full (GTK_OBJECT (prefswindow.reverselist), "prefs_reverselist_clist_status", prefs_reverselist_clist_status,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (prefs_reverselist_clist_status);
+ gtk_clist_set_column_widget (GTK_CLIST (prefswindow.reverselist_clist), 2, prefs_reverselist_clist_status);
+ gtk_widget_set_usize (prefs_reverselist_clist_status, 31, -2);
+
+ prefswindow.reverselist_gtc = gtk_check_button_new_with_label ("Add new users to the Allow List automatically");
+ gtk_widget_ref (prefswindow.reverselist_gtc);
+ gtk_object_set_data_full (GTK_OBJECT (prefswindow.reverselist), "prefs_reverselist_gtc", prefswindow.reverselist_gtc,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (prefswindow.reverselist_gtc);
+ gtk_box_pack_start (GTK_BOX (prefs_reverselist_vbox), prefswindow.reverselist_gtc, FALSE, FALSE, 0);
+
+ if ( strcmp(options_gtc(), "N") == 0) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefswindow.reverselist_gtc), TRUE);
+ } else {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefswindow.reverselist_gtc), FALSE);
+ }
+
+ gtk_container_set_border_width(GTK_CONTAINER(prefswindow.reverselist), 10);
+ gtk_clist_column_titles_passive(GTK_CLIST(prefswindow.reverselist_clist));
+
+ gtk_clist_set_column_width (GTK_CLIST (prefswindow.reverselist_clist), 0, 149);
+ gtk_clist_set_column_width (GTK_CLIST (prefswindow.reverselist_clist), 1, 210);
+ gtk_clist_set_column_width (GTK_CLIST (prefswindow.reverselist_clist), 2, 69);
+
+ prefswindow_fillreverselist();
+
+}
+
+/* Parallel of mainwindow_setdispatch. Tell the user they can't modify lists while disconnected. */
+void prefswindow_setdispatch() {
+
+ GtkWidget *message_label;
+
+ if ( !prefswindow.open ) {
+ return;
+ }
+
+ if ( prefswindow.blocklist_sub != NULL ) {
+ gtk_widget_destroy(prefswindow.blocklist_sub);
+ }
+
+ if ( prefswindow.reverselist_sub != NULL ) {
+ gtk_widget_destroy(prefswindow.reverselist_sub);
+ }
+
+ prefswindow.blocklist_sub = gtk_vbox_new(TRUE, 0);
+ assert(prefswindow.blocklist_sub != NULL);
+ gtk_container_add(GTK_CONTAINER(prefswindow.blocklist), prefswindow.blocklist_sub);
+ message_label = gtk_label_new("You must be signed in to view or modify your block list");
+ assert(message_label != NULL);
+ gtk_box_pack_start(GTK_BOX(prefswindow.blocklist_sub), message_label, TRUE, TRUE, 0);
+ gtk_label_set_line_wrap(GTK_LABEL(message_label), TRUE);
+ gtk_label_set_justify(GTK_LABEL(message_label), GTK_JUSTIFY_CENTER);
+ gtk_widget_show_all(prefswindow.blocklist_sub);
+
+ prefswindow.reverselist_sub = gtk_vbox_new(TRUE, 0);
+ assert(prefswindow.reverselist_sub != NULL);
+ gtk_container_add(GTK_CONTAINER(prefswindow.reverselist), prefswindow.reverselist_sub);
+ message_label = gtk_label_new("You must be signed in to view your reverse list");
+ assert(message_label != NULL);
+ gtk_box_pack_start(GTK_BOX(prefswindow.reverselist_sub), message_label, TRUE, TRUE, 0);
+ gtk_label_set_line_wrap(GTK_LABEL(message_label), TRUE);
+ gtk_label_set_justify(GTK_LABEL(message_label), GTK_JUSTIFY_CENTER);
+ gtk_widget_show_all(prefswindow.reverselist_sub);
+
+}
+
+static void prefswindow_closed() {
+ prefswindow.open = 0;
+}
+
+static void prefswindow_lcolsel(GtkWidget *widget, gpointer data) {
+
+ GdkColor colour;
+
+ gtk_color_button_get_color(GTK_COLOR_BUTTON(widget), &colour);
+ options_setlocalcolour_gdk(&colour);
+ options_save();
+
+}
+
+static void prefswindow_lfontsel(GtkWidget *widget, gpointer data) {
+
+ const char *font;
+
+ font = gtk_font_button_get_font_name(GTK_FONT_BUTTON(widget));
+ debug_print("PW: Font name '%s'\n", font);
+ options_setlocalfont(font);
+ options_save();
+
+}
+
+static void prefswindow_ofontsel(GtkWidget *widget, gpointer data) {
+
+ const char *font;
+
+ font = gtk_font_button_get_font_name(GTK_FONT_BUTTON(widget));
+ debug_print("PW: Font name '%s'\n", font);
+ options_setofont(font);
+ options_save();
+
+}
+
+static void prefswindow_ocolsel(GtkWidget *widget, gpointer data) {
+
+ GdkColor colour;
+
+ gtk_color_button_get_color(GTK_COLOR_BUTTON(widget), &colour);
+ options_setocolour_gdk(&colour);
+ options_save();
+
+}
+
+static void prefswindow_ofontoverride_toggle(GtkWidget *widget, gpointer data) {
+
+ if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ) {
+ options_setofontoverride(TRUE);
+ gtk_widget_set_sensitive(prefswindow.ofontbutton, TRUE);
+ gtk_widget_set_sensitive(prefswindow.ocolourbutton, TRUE);
+ } else {
+ options_setofontoverride(FALSE);
+ gtk_widget_set_sensitive(prefswindow.ofontbutton, FALSE);
+ gtk_widget_set_sensitive(prefswindow.ocolourbutton, FALSE);
+ }
+ options_save();
+
+}
+
+static void prefswindow_ircstyle_toggle(GtkWidget *widget, gpointer data) {
+
+ if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ) {
+ options_setircstyle(TRUE);
+ } else {
+ options_setircstyle(FALSE);
+ }
+ options_save();
+
+}
+
+static void prefswindow_timestamps_toggle(GtkWidget *widget, gpointer data) {
+
+ if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ) {
+ options_settimestamps(TRUE);
+ } else {
+ options_settimestamps(FALSE);
+ }
+ options_save();
+
+}
+
+static void prefswindow_showavatars_toggle(GtkWidget *widget, gpointer data) {
+
+ if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ) {
+ options_setshowavatars(TRUE);
+ } else {
+ options_setshowavatars(FALSE);
+ }
+ options_save();
+
+}
+
+static gint prefswindow_validate_wget(GtkWidget *widget, gpointer data) {
+
+ const char *text = gtk_entry_get_text(GTK_ENTRY(widget));
+ options_setwget(text);
+ options_save();
+
+ return FALSE;
+
+}
+
+static void prefswindow_do_wget() {
+ gtk_entry_set_text(GTK_ENTRY(prefswindow.wget), options_wget());
+}
+
+static gint prefswindow_guess_wget(GtkWidget *widget, gpointer data) {
+
+ char *nexus;
+
+ options_setwget("/usr/bin/wget");
+ nexus = twnauth_loginurl();
+ if ( strlen(nexus) == 0 ) {
+ free(nexus);
+ options_setwget("/usr/bin/wget --no-check-certificate");
+ nexus = twnauth_loginurl();
+ if ( strlen(nexus) == 0 ) {
+ free(nexus);
+ options_setwget("/usr/local/bin/wget");
+ nexus = twnauth_loginurl();
+ if ( strlen(nexus) == 0 ) {
+ free(nexus);
+ options_setwget("/usr/local/bin/wget --no-check-certificate");
+ nexus = twnauth_loginurl();
+ if ( strlen(nexus) == 0 ) {
+ free(nexus);
+ options_setwget("~/bin/wget");
+ nexus = twnauth_loginurl();
+ if ( strlen(nexus) == 0 ) {
+ free(nexus);
+ options_setwget("~/bin/wget --no-check-certificate");
+ nexus = twnauth_loginurl();
+ if ( strlen(nexus) == 0 ) {
+ free(nexus);
+ options_setwget("wget");
+ nexus = twnauth_loginurl();
+ if ( strlen(nexus) == 0 ) {
+ free(nexus);
+ options_setwget("wget --no-check-certificate");
+ nexus = twnauth_loginurl();
+ if ( strlen(nexus) == 0 ) {
+ error_report("Couldn't determine correct wget configuration - is wget installed on your system?");
+ free(nexus);
+ return FALSE;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ free(nexus);
+ prefswindow_do_wget();
+ error_message("Successfully determined wget configuration.");
+
+ return FALSE;
+
+}
+
+static gint prefswindow_check_wget(GtkWidget *widget, gpointer data) {
+
+ char *nexus;
+
+ nexus = twnauth_loginurl();
+
+ if ( strlen(nexus) != 0 ) {
+ GtkWidget *window;
+ window = gtk_message_dialog_new(GTK_WINDOW(prefswindow.window), GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, "'wget' configuration appears to be correct.");
+ g_signal_connect_swapped(window, "response", G_CALLBACK(gtk_widget_destroy), window);
+ gtk_widget_show(window);
+ } else {
+ GtkWidget *window;
+ window = gtk_message_dialog_new(GTK_WINDOW(prefswindow.window), GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, "'wget' appears not to work...");
+ g_signal_connect_swapped(window, "response", G_CALLBACK(gtk_widget_destroy), window);
+ gtk_widget_show(window);
+ }
+
+ free(nexus);
+
+ return FALSE;
+
+}
+
+static gint prefswindow_showemoticons_toggle(GtkWidget *widget, gpointer data) {
+
+ if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ) {
+ options_setshowemoticons(TRUE);
+ } else {
+ options_setshowemoticons(FALSE);
+ }
+ options_save();
+
+ return FALSE;
+
+}
+
+/* Open the preferences window */
+void prefswindow_open(int page) {
+
+ GtkWidget *prefs_notebook;
+
+ GtkWidget *prefs_auth_label;
+ GtkWidget *prefs_auth_box;
+ GtkWidget *prefs_auth_wget_label;
+ GtkWidget *prefs_auth_wget_guess;
+ GtkWidget *prefs_auth_wget_check;
+ GtkWidget *prefs_auth_wget_hbox;
+ GtkWidget *prefs_auth_wget_vbox;
+ GtkWidget *prefs_auth_wget_nbox;
+ GtkWidget *prefs_auth_wget_heading;
+ GtkWidget *prefs_auth_wget_heading_justify;
+
+ /* Arrrggghhhhh */
+ GtkWidget *prefs_messagewindows_label;
+ GtkWidget *prefs_messagewindows_box;
+ GtkWidget *prefs_messagewindows_text;
+ GtkWidget *prefs_messagewindows_font_box;
+ GtkWidget *prefs_messagewindows_font_button;
+ GtkWidget *prefs_messagewindows_font_label;
+ GtkWidget *prefs_messagewindows_font_label_justify;
+ GtkWidget *prefs_messagewindows_colour_button;
+ GtkWidget *prefs_messagewindows_ofont_box;
+ GtkWidget *prefs_messagewindows_ofont_label;
+ GtkWidget *prefs_messagewindows_ofont_label_justify;
+ GtkWidget *prefs_messagewindows_ofont_override;
+ GtkWidget *prefs_messagewindows_font_hbox;
+ GtkWidget *prefs_messagewindows_font_vbox;
+ GtkWidget *prefs_messagewindows_ofont_hbox;
+ GtkWidget *prefs_messagewindows_ofont_vbox;
+ GtkWidget *prefs_messagewindows_fbox;
+ GtkWidget *prefs_messagewindows_nbox;
+ GtkWidget *prefs_messagewindows_qbox;
+ GtkWidget *prefs_messagewindows_toggles_vbox;
+ GtkWidget *prefs_messagewindows_toggles_hbox;
+ GtkWidget *prefs_messagewindows_toggles_label;
+ GtkWidget *prefs_messagewindows_toggles_label_justify;
+ GtkWidget *prefs_messagewindows_toggles_irc;
+ GtkWidget *prefs_messagewindows_toggles_timestamp;
+ GtkWidget *prefs_messagewindows_toggles_avatars;
+ GtkWidget *prefs_messagewindows_toggles_emoticons;
+
+ /* Prevent opening of the preferences window more than once */
+ if ( prefswindow.open == 1 ) {
+ return;
+ }
+
+ prefswindow.window = gtk_dialog_new_with_buttons("TuxMessenger Preferences", mainwindow_gtkwindow(), 0, GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT, NULL);
+ gtk_dialog_set_has_separator(GTK_DIALOG(prefswindow.window), FALSE);
+
+ prefs_notebook = gtk_notebook_new();
+ gtk_notebook_set_tab_pos(GTK_NOTEBOOK(prefs_notebook), GTK_POS_TOP);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(prefswindow.window)->vbox), prefs_notebook, TRUE, TRUE, 0);
+
+ /* ****************** Message Windows *************************************************************/
+
+ prefs_messagewindows_label = gtk_label_new("Message Windows");
+ prefs_messagewindows_box = gtk_vbox_new(FALSE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(prefs_messagewindows_box), 12);
+ gtk_notebook_append_page(GTK_NOTEBOOK(prefs_notebook), prefs_messagewindows_box, prefs_messagewindows_label);
+
+ prefs_messagewindows_text = gtk_label_new("");
+ gtk_label_set_markup(GTK_LABEL(prefs_messagewindows_text), "<span style=\"italic\" weight=\"light\">These settings define the behaviour of newly-created instant message windows. You can also set all of these options individually using the menus for each window.</span>");
+ gtk_widget_set_size_request(GTK_WIDGET(prefs_messagewindows_text), 500, -1);
+ gtk_label_set_line_wrap(GTK_LABEL(prefs_messagewindows_text), TRUE);
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_box), prefs_messagewindows_text, FALSE, FALSE, 0);
+
+ prefs_messagewindows_fbox = gtk_vbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_box), prefs_messagewindows_fbox, FALSE, FALSE, 12);
+ prefs_messagewindows_font_label = gtk_label_new("");
+ prefs_messagewindows_font_label_justify = gtk_hbox_new(FALSE, 0);
+ gtk_label_set_markup(GTK_LABEL(prefs_messagewindows_font_label), "<span weight=\"bold\">Font and Colour for Your Messages</span>");
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_font_label_justify), prefs_messagewindows_font_label, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_fbox), prefs_messagewindows_font_label_justify, FALSE, FALSE, 6);
+
+ prefs_messagewindows_font_vbox = gtk_vbox_new(FALSE, 0);
+ prefs_messagewindows_font_hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_fbox), prefs_messagewindows_font_hbox, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_font_hbox), prefs_messagewindows_font_vbox, FALSE, FALSE, 12);
+
+ prefs_messagewindows_font_box = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_font_vbox), prefs_messagewindows_font_box, FALSE, FALSE, 0);
+ if ( options_localfont() ) {
+ prefs_messagewindows_font_button = gtk_font_button_new_with_font(options_localfont());
+ } else {
+ prefs_messagewindows_font_button = gtk_font_button_new();
+ }
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_font_box), prefs_messagewindows_font_button, FALSE, FALSE, 6);
+ g_signal_connect(G_OBJECT(prefs_messagewindows_font_button), "font-set", GTK_SIGNAL_FUNC(prefswindow_lfontsel), NULL);
+
+ if ( options_localcolour_gdk() == NULL ) {
+ prefs_messagewindows_colour_button = gtk_color_button_new();
+ } else {
+ prefs_messagewindows_colour_button = gtk_color_button_new_with_color(options_localcolour_gdk());
+ }
+ g_signal_connect(G_OBJECT(prefs_messagewindows_colour_button), "color-set", GTK_SIGNAL_FUNC(prefswindow_lcolsel), NULL);
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_font_box), prefs_messagewindows_colour_button, FALSE, FALSE, 6);
+
+ prefs_messagewindows_nbox = gtk_vbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_box), prefs_messagewindows_nbox, FALSE, FALSE, 12);
+ prefs_messagewindows_ofont_label = gtk_label_new("");
+ prefs_messagewindows_ofont_label_justify = gtk_hbox_new(FALSE, 0);
+ gtk_label_set_markup(GTK_LABEL(prefs_messagewindows_ofont_label), "<span weight=\"bold\">Fonts and Colours for Contacts' Messages</span>");
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_ofont_label_justify), prefs_messagewindows_ofont_label, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_nbox), prefs_messagewindows_ofont_label_justify, FALSE, FALSE, 0);
+
+ prefs_messagewindows_ofont_vbox = gtk_vbox_new(FALSE, 0);
+ prefs_messagewindows_ofont_hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_nbox), prefs_messagewindows_ofont_hbox, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_ofont_hbox), prefs_messagewindows_ofont_vbox, FALSE, FALSE, 12);
+
+ prefs_messagewindows_ofont_override = gtk_check_button_new_with_label("Override contacts' chosen fonts");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_messagewindows_ofont_override), options_ofontoverride());
+
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_ofont_vbox), prefs_messagewindows_ofont_override, FALSE, FALSE, 5);
+ prefs_messagewindows_ofont_box = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_ofont_vbox), prefs_messagewindows_ofont_box, FALSE, FALSE, 0);
+ if ( options_ofont() ) {
+ prefswindow.ofontbutton = gtk_font_button_new_with_font(options_ofont());
+ } else {
+ prefswindow.ofontbutton = gtk_font_button_new();
+ }
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_ofont_box), prefswindow.ofontbutton, FALSE, FALSE, 6);
+ g_signal_connect(G_OBJECT(prefswindow.ofontbutton), "font-set", GTK_SIGNAL_FUNC(prefswindow_ofontsel), NULL);
+ if ( options_ocolour_gdk() == NULL ) {
+ prefswindow.ocolourbutton = gtk_color_button_new();
+ } else {
+ prefswindow.ocolourbutton = gtk_color_button_new_with_color(options_ocolour_gdk());
+ }
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_ofont_box), prefswindow.ocolourbutton, FALSE, FALSE, 6);
+ g_signal_connect(G_OBJECT(prefswindow.ocolourbutton), "color-set", GTK_SIGNAL_FUNC(prefswindow_ocolsel), NULL);
+
+ /* Call the check button's callback to sort out greying-out of stuff as appropriate.
+ Results in a spurious option setting, but saves code duplication. */
+ prefswindow_ofontoverride_toggle(prefs_messagewindows_ofont_override, NULL);
+ /* NOW connect the signal handler. Doing it any earlier makes Bad Stuff happen. */
+ g_signal_connect(G_OBJECT(prefs_messagewindows_ofont_override), "toggled", GTK_SIGNAL_FUNC(prefswindow_ofontoverride_toggle), prefs_messagewindows_ofont_box);
+
+ prefs_messagewindows_qbox = gtk_vbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_box), prefs_messagewindows_qbox, FALSE, FALSE, 12);
+ prefs_messagewindows_toggles_label = gtk_label_new("");
+ prefs_messagewindows_toggles_label_justify = gtk_hbox_new(FALSE, 0);
+ gtk_label_set_markup(GTK_LABEL(prefs_messagewindows_toggles_label), "<span weight=\"bold\">Text and Window Layout</span>");
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_toggles_label_justify), prefs_messagewindows_toggles_label, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_qbox), prefs_messagewindows_toggles_label_justify, FALSE, FALSE, 0);
+
+ prefs_messagewindows_toggles_vbox = gtk_vbox_new(FALSE, 0);
+ prefs_messagewindows_toggles_hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_qbox), prefs_messagewindows_toggles_hbox, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_toggles_hbox), prefs_messagewindows_toggles_vbox, FALSE, FALSE, 12);
+
+ prefs_messagewindows_toggles_irc = gtk_check_button_new_with_label("Use IRC style for messages");
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_toggles_vbox), prefs_messagewindows_toggles_irc, FALSE, FALSE, 3);
+ prefs_messagewindows_toggles_timestamp = gtk_check_button_new_with_label("Timestamp messages");
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_toggles_vbox), prefs_messagewindows_toggles_timestamp, FALSE, FALSE, 3);
+ prefs_messagewindows_toggles_avatars = gtk_check_button_new_with_label("Display avatars");
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_toggles_vbox), prefs_messagewindows_toggles_avatars, FALSE, FALSE, 3);
+ prefs_messagewindows_toggles_emoticons = gtk_check_button_new_with_label("Display emoticons");
+ gtk_box_pack_start(GTK_BOX(prefs_messagewindows_toggles_vbox), prefs_messagewindows_toggles_emoticons, FALSE, FALSE, 3);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_messagewindows_toggles_irc), options_ircstyle());
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_messagewindows_toggles_timestamp), options_timestamps());
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_messagewindows_toggles_avatars), options_showavatars());
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_messagewindows_toggles_emoticons), options_showemoticons());
+ g_signal_connect(G_OBJECT(prefs_messagewindows_toggles_irc), "toggled", GTK_SIGNAL_FUNC(prefswindow_ircstyle_toggle), NULL);
+ g_signal_connect(G_OBJECT(prefs_messagewindows_toggles_timestamp), "toggled", GTK_SIGNAL_FUNC(prefswindow_timestamps_toggle), NULL);
+ g_signal_connect(G_OBJECT(prefs_messagewindows_toggles_avatars), "toggled", GTK_SIGNAL_FUNC(prefswindow_showavatars_toggle), NULL);
+ g_signal_connect(G_OBJECT(prefs_messagewindows_toggles_emoticons), "toggled", GTK_SIGNAL_FUNC(prefswindow_showemoticons_toggle), NULL);
+
+ /* ****************** Authentication *************************************************************/
+
+ prefs_auth_label = gtk_label_new("Authentication");
+ prefs_auth_box = gtk_vbox_new(FALSE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(prefs_auth_box), 12);
+ gtk_notebook_append_page(GTK_NOTEBOOK(prefs_notebook), prefs_auth_box, prefs_auth_label);
+
+ prefs_auth_wget_heading = gtk_label_new("");
+ gtk_label_set_markup(GTK_LABEL(prefs_auth_wget_heading), "<span weight=\"bold\">Command for 'wget'</span>");
+ prefs_auth_wget_heading_justify = gtk_hbox_new(FALSE, 0);
+ prefs_auth_wget_nbox = gtk_vbox_new(FALSE, 2);
+ gtk_box_pack_start(GTK_BOX(prefs_auth_wget_nbox), prefs_auth_wget_heading_justify, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(prefs_auth_wget_heading_justify), prefs_auth_wget_heading, FALSE, FALSE, 0);
+
+ gtk_box_pack_start(GTK_BOX(prefs_auth_box), prefs_auth_wget_nbox, FALSE, FALSE, 12);
+ prefs_auth_wget_hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(prefs_auth_wget_nbox), prefs_auth_wget_hbox, FALSE, FALSE, 0);
+ prefs_auth_wget_vbox = gtk_vbox_new(FALSE, 6);
+ gtk_box_pack_start(GTK_BOX(prefs_auth_wget_hbox), prefs_auth_wget_vbox, FALSE, FALSE, 12);
+
+ prefs_auth_wget_label = gtk_label_new("");
+ gtk_label_set_markup(GTK_LABEL(prefs_auth_wget_label), "<span style=\"italic\" weight=\"light\">TuxMessenger calls the 'wget' program to help log in to the server. You need to specify the command to run to invoke a copy of 'wget' which is capable of using HTTPS. In most cases you can simply enter 'wget' here.</span>");
+ gtk_widget_set_size_request(GTK_WIDGET(prefs_auth_wget_label), 500, -1);
+ gtk_label_set_line_wrap(GTK_LABEL(prefs_auth_wget_label), TRUE);
+ gtk_box_pack_start(GTK_BOX(prefs_auth_wget_vbox), prefs_auth_wget_label, FALSE, FALSE, 0);
+
+ prefswindow.wget = gtk_entry_new_with_max_length(128);
+ prefswindow_do_wget();
+ gtk_box_pack_start(GTK_BOX(prefs_auth_wget_vbox), prefswindow.wget, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(prefswindow.wget), "focus-out-event", GTK_SIGNAL_FUNC(prefswindow_validate_wget), NULL);
+ g_signal_connect(G_OBJECT(prefswindow.wget), "activate", GTK_SIGNAL_FUNC(prefswindow_validate_wget), NULL);
+
+ prefs_auth_wget_guess = gtk_button_new_with_label("Attempt to automatically determine correct wget configuration");
+ gtk_box_pack_start(GTK_BOX(prefs_auth_wget_vbox), prefs_auth_wget_guess, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(prefs_auth_wget_guess), "clicked", GTK_SIGNAL_FUNC(prefswindow_guess_wget), NULL);
+
+ prefs_auth_wget_check = gtk_button_new_with_label("Check wget configuration");
+ gtk_box_pack_start(GTK_BOX(prefs_auth_wget_vbox), prefs_auth_wget_check, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(prefs_auth_wget_check), "clicked", GTK_SIGNAL_FUNC(prefswindow_check_wget), NULL);
+
+ /* ************************************************************************************************/
+
+ gtk_window_set_title(GTK_WINDOW(prefswindow.window), "TuxMessenger Preferences");
+ gtk_window_position(GTK_WINDOW(prefswindow.window), GTK_WIN_POS_MOUSE);
+ gtk_window_set_policy(GTK_WINDOW(prefswindow.window), FALSE, TRUE, FALSE);
+
+ gtk_widget_show_all(prefswindow.window);
+ gtk_notebook_set_page(GTK_NOTEBOOK(prefs_notebook), page);
+
+ g_signal_connect(G_OBJECT(prefswindow.window), "destroy", GTK_SIGNAL_FUNC(prefswindow_closed), NULL);
+ g_signal_connect(G_OBJECT(prefswindow.window), "response", GTK_SIGNAL_FUNC(gtk_widget_destroy), NULL);
+
+ prefswindow.open = 1;
+
+}