gnome-mud r838 - in trunk: . po src ui



Author: lharris
Date: Fri Mar 27 19:57:39 2009
New Revision: 838
URL: http://svn.gnome.org/viewvc/gnome-mud?rev=838&view=rev

Log:
Splitview functionality added

Added:
   trunk/src/gnome-mud-builtins.c.template
   trunk/src/gnome-mud-builtins.h.template
Modified:
   trunk/ChangeLog
   trunk/configure.ac
   trunk/gnome-mud.schemas.in
   trunk/po/ChangeLog
   trunk/po/POTFILES.in
   trunk/src/Makefile.am
   trunk/src/gnome-mud-marshallers.list
   trunk/src/gnome-mud.c
   trunk/src/mud-connection-view.c
   trunk/src/mud-line-buffer.c
   trunk/src/mud-line-buffer.h
   trunk/src/mud-log.c
   trunk/src/mud-profile.c
   trunk/src/mud-profile.h
   trunk/src/mud-subwindow.c
   trunk/src/mud-trigger.c
   trunk/src/mud-trigger.h
   trunk/src/mud-window-prefs.c
   trunk/ui/muds.glade
   trunk/ui/prefs.glade

Modified: trunk/configure.ac
==============================================================================
--- trunk/configure.ac	(original)
+++ trunk/configure.ac	Fri Mar 27 19:57:39 2009
@@ -83,6 +83,8 @@
 
 GLIB_GENMARSHAL="$($PKG_CONFIG --variable=glib_genmarshal glib-2.0)"
 AC_SUBST([GLIB_GENMARSHAL])
+GLIB_MKENUMS="$($PKG_CONFIG --variable=glib_mkenums glib-2.0)"
+AC_SUBST([GLIB_MKENUMS])
 
 AC_DEFINE(HAVE_LIBSM, 1, [Define this to have session management.])
 

Modified: trunk/gnome-mud.schemas.in
==============================================================================
--- trunk/gnome-mud.schemas.in	(original)
+++ trunk/gnome-mud.schemas.in	Fri Mar 27 19:57:39 2009
@@ -249,21 +249,6 @@
 		</schema>
 
 		<schema>
-			<key>/schemas/apps/gnome-mud/functionality/scroll_on_output</key>
-			<applyto>/apps/gnome-mud/functionality/scroll_on_output</applyto>
-			<owner>gnome-mud</owner>
-			<type>bool</type>
-			<default>false</default>
-			<locale name="C">
-				<short>Whether to scroll to the bottom when there's new output</short>
-				<long>
-				 If enabled, whenever there's new output the
-				 terminal will be scrolled to the bottom.
-				</long>
-			</locale>
-		</schema>
-
-		<schema>
 			<key>/schemas/apps/gnome-mud/functionality/last_log_dir</key>
 			<applyto>/apps/gnome-mud/functionality/last_log_dir</applyto>
 			<owner>gnome-mud</owner>

Modified: trunk/po/POTFILES.in
==============================================================================
--- trunk/po/POTFILES.in	(original)
+++ trunk/po/POTFILES.in	Fri Mar 27 19:57:39 2009
@@ -3,17 +3,16 @@
 # Please keep this file sorted alphabetically.
 gnome-mud.desktop.in
 gnome-mud.schemas.in
-
+src/debug-logger.c
 src/gnome-mud.c
 src/mud-connections.c
 src/mud-connection-view.c
 src/mud-log.c
 src/mud-tray.c
-src/mud-window-prefs.c
+src/mud-trigger.c
 src/mud-window.c
-src/debug-logger.c
+src/mud-window-prefs.c
 src/handlers/mud-telnet-mccp.c
-
 ui/main.glade
 ui/muds.glade
 ui/prefs.glade

Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am	(original)
+++ trunk/src/Makefile.am	Fri Mar 27 19:57:39 2009
@@ -33,6 +33,8 @@
 	ecma48.h				\
 	gnome-mud.c				\
 	gnome-mud.h				\
+	gnome-mud-builtins.c			\
+	gnome-mud-builtins.h			\
 	gnome-mud-marshallers.c			\
 	gnome-mud-marshallers.h			\
 	gnome-mud-icons.h			\
@@ -75,10 +77,17 @@
 
 BUILT_SOURCES = \
 	gnome-mud-marshallers.c \
-	gnome-mud-marshallers.h
+	gnome-mud-marshallers.h \
+	gnome-mud-builtins.c \
+	gnome-mud-builtins.h
+
+enumheaders = \
+	mud-trigger.h
 
 EXTRA_DIST = \
-	gnome-mud-marshallers.list
+	gnome-mud-marshallers.list \
+	gnome-mud-builtins.h.template \
+	gnome-mud-builtins.c.template
 
 CLEANFILES = \
 	$(BUILT_SOURCES)
@@ -95,3 +104,15 @@
 	    && mv gnome-mud-marshallers.c.tmp gnome-mud-marshallers.c ) \
 	    || ( rm -f gnome-mud-marshallers.c.tmp && exit 1 )
 
+gnome-mud-builtins.h: $(enumheaders) gnome-mud-builtins.h.template
+	( $(GLIB_MKENUMS) --template gnome-mud-builtins.h.template \
+	    $(enumheaders) > gnome-mud-builtins.h.tmp \
+	    && mv gnome-mud-builtins.h.tmp gnome-mud-builtins.h ) \
+	    || ( rm -f gnome-mud-builtins.h.tmp && exit 1 )
+
+gnome-mud-builtins.c: $(enumheaders) gnome-mud-builtins.c.template
+	( $(GLIB_MKENUMS) --template gnome-mud-builtins.c.template \
+	    $(enumheaders) > gnome-mud-builtins.c.tmp \
+	    && mv gnome-mud-builtins.c.tmp gnome-mud-builtins.c ) \
+	    || ( rm -f gnome-mud-builtins.c.tmp && exit 1 )
+

Added: trunk/src/gnome-mud-builtins.c.template
==============================================================================
--- (empty file)
+++ trunk/src/gnome-mud-builtins.c.template	Fri Mar 27 19:57:39 2009
@@ -0,0 +1,36 @@
+/*** BEGIN file-header ***/
+#include <gtk/gtk.h>
+#include "gnome-mud-builtins.h"
+#include "mud-trigger.h"
+
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+/* enumerations from "@filename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+GType
+ enum_name@_get_type (void)
+{
+    static GType etype = 0;
+    if (G_UNLIKELY(etype == 0)) {
+        static const G Type@Value values[] = {
+/*** END value-header ***/
+
+/*** BEGIN value-production ***/
+            { @VALUENAME@, "@VALUENAME@", "@valuenick@" },
+/*** END value-production ***/
+
+/*** BEGIN value-tail ***/
+            { 0, NULL, NULL }
+        };
+        etype = g_ type@_register_static (g_intern_static_string ("@EnumName@"), values);
+    }
+    return etype;
+}
+
+/*** END value-tail ***/
+
+/*** BEGIN file-tail ***/
+/*** END file-tail ***/

Added: trunk/src/gnome-mud-builtins.h.template
==============================================================================
--- (empty file)
+++ trunk/src/gnome-mud-builtins.h.template	Fri Mar 27 19:57:39 2009
@@ -0,0 +1,25 @@
+/*** BEGIN file-header ***/
+
+#ifndef __GNOME_MUD_TYPE_BUILTINS_H__
+#define __GNOME_MUD_TYPE_BUILTINS_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+
+/* enumerations from "@filename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+GType @enum_name _get_type (void) G_GNUC_CONST;
+#define @ENUMPREFIX _TYPE_@ENUMSHORT@ (@enum_name _get_type ())
+/*** END value-header ***/
+
+/*** BEGIN file-tail ***/
+G_END_DECLS
+
+#endif /* __GNOME_MUD_TYPE_BUILTINS_H__ */
+/*** END file-tail ***/

Modified: trunk/src/gnome-mud-marshallers.list
==============================================================================
--- trunk/src/gnome-mud-marshallers.list	(original)
+++ trunk/src/gnome-mud-marshallers.list	Fri Mar 27 19:57:39 2009
@@ -1,2 +1,3 @@
 VOID:INT,INT
 VOID:UINT,UINT
+VOID:STRING,UINT

Modified: trunk/src/gnome-mud.c
==============================================================================
--- trunk/src/gnome-mud.c	(original)
+++ trunk/src/gnome-mud.c	Fri Mar 27 19:57:39 2009
@@ -39,6 +39,7 @@
 #include "mud-window.h"
 #include "utils.h"
 #include "debug-logger.h"
+#include "mud-trigger.h"
 
 gint
 main (gint argc, char *argv[])
@@ -119,6 +120,23 @@
     /* Let 'er rip */
     window = g_object_new(MUD_TYPE_WINDOW, NULL);
 
+    {
+        MudTrigger *trigger = g_object_new(MUD_TYPE_TRIGGER,
+                                           "trigger-key", "test",
+                                           "profile-key", "test",
+                                           "lines", 3,
+                                           "action-type", MUD_TRIGGER_ACTION_TEXT,
+                                           "action", "\n=== %0 ===\n=== %1 ===\n",
+                                           NULL);
+
+        gchar *test_line = g_strdup("Foo says, \"Bar\"\n");
+
+        mud_trigger_add_data(trigger, test_line, strlen(test_line));
+
+        g_free(test_line);
+        g_object_unref(trigger);
+    }
+
     gtk_main();
 
     gconf_client_suggest_sync(client, &err);

Modified: trunk/src/mud-connection-view.c
==============================================================================
--- trunk/src/mud-connection-view.c	(original)
+++ trunk/src/mud-connection-view.c	Fri Mar 27 19:57:39 2009
@@ -52,7 +52,12 @@
     GtkWidget *dl_label;
     GtkWidget *dl_button;
 
+    GtkWidget *pane;
+    GtkWidget *terminal2;
+
     GString *processed;
+    gboolean hiding;
+    gdouble old_adjustment;
     
     gulong signal;
     gulong signal_profile_changed;
@@ -134,12 +139,17 @@
 static void mud_connection_view_profile_changed_cb(MudProfile *profile,
                                                    MudProfileMask *mask,
                                                    MudConnectionView *view);
+static void mud_connection_view_value_changed_cb(GtkAdjustment *adjustment,
+                                                 MudConnectionView *view);
+static void mud_connection_view_value_changed_term2_cb(GtkAdjustment *adjustment,
+                                                 MudConnectionView *view);
+static void mud_connection_view_changed_cb(GtkAdjustment *adjustment,
+                                                 MudConnectionView *view);
 
 
 /* Private Methods */
 static void mud_connection_view_set_terminal_colors(MudConnectionView *view);
 static void mud_connection_view_set_terminal_scrollback(MudConnectionView *view);
-static void mud_connection_view_set_terminal_scrolloutput(MudConnectionView *view);
 static void mud_connection_view_set_terminal_font(MudConnectionView *view);
 static GtkWidget* append_stock_menuitem(GtkWidget *menu, 
                                         const gchar *text,
@@ -367,7 +377,10 @@
     self->local_echo = TRUE;
     self->remote_encode = FALSE;   
     self->connect_hook = FALSE;
-    self->connected = FALSE;;
+    self->connected = FALSE;
+
+    self->priv->hiding = FALSE;
+    self->priv->old_adjustment = 0.0;
 
     self->connect_string = NULL;
     self->remote_encoding = NULL;
@@ -450,7 +463,9 @@
     box = gtk_vbox_new(FALSE, 0);
     self->ui_vbox = GTK_VBOX(box);
     self->terminal = VTE_TERMINAL(vte_terminal_new());
+    self->priv->terminal2 = vte_terminal_new();
     self->priv->scrollbar = gtk_vscrollbar_new(NULL);
+    self->priv->pane = gtk_vpaned_new();
     term_box = gtk_hbox_new(FALSE, 0);
 
 #ifdef ENABLE_GST
@@ -485,8 +500,15 @@
 #endif
 
     /* Pack the Terminal UI */
+    
+    gtk_paned_add1(GTK_PANED(self->priv->pane),
+                   self->priv->terminal2);
+
+    gtk_paned_add2(GTK_PANED(self->priv->pane),
+                   GTK_WIDGET(self->terminal));
+
     gtk_box_pack_start(GTK_BOX(term_box),
-                       GTK_WIDGET(self->terminal),
+                       self->priv->pane,
                        TRUE,
                        TRUE,
                        0);
@@ -497,6 +519,11 @@
                      FALSE,
                      0);
 
+    g_object_set(self->priv->pane,
+                 "position", 300,
+                 NULL);
+
+
     /* Pack into Main UI */
     gtk_box_pack_end(GTK_BOX(box), term_box, TRUE, TRUE, 0);
 
@@ -506,6 +533,21 @@
                      G_CALLBACK(mud_connection_view_button_press_event),
                      self);
 
+    g_signal_connect(self->terminal->adjustment,
+                     "value-changed",
+                     G_CALLBACK(mud_connection_view_value_changed_cb),
+                     self);
+
+    g_signal_connect(VTE_TERMINAL(self->priv->terminal2)->adjustment,
+                     "value-changed",
+                     G_CALLBACK(mud_connection_view_value_changed_term2_cb),
+                     self);
+
+    g_signal_connect(self->terminal->adjustment,
+                     "changed",
+                     G_CALLBACK(mud_connection_view_changed_cb),
+                     self);
+
     g_object_set_data(G_OBJECT(self->terminal),
                       "connection-view",
                       self);
@@ -516,11 +558,15 @@
     /* Setup scrollbar */
     gtk_range_set_adjustment(
             GTK_RANGE(self->priv->scrollbar),
-            self->terminal->adjustment);
+            VTE_TERMINAL(self->priv->terminal2)->adjustment);
 
     /* Setup VTE */
     vte_terminal_set_encoding(self->terminal, "ISO-8859-1");
     vte_terminal_set_emulation(self->terminal, "xterm");
+    vte_terminal_set_encoding(VTE_TERMINAL(self->priv->terminal2), "ISO-8859-1");
+    vte_terminal_set_emulation(VTE_TERMINAL(self->priv->terminal2), "xterm");
+    vte_terminal_set_scroll_on_output(self->terminal, TRUE);
+    vte_terminal_set_scroll_on_output(VTE_TERMINAL(self->priv->terminal2), FALSE);
 
     g_object_get(self->window,
                  "window", &main_window,
@@ -935,6 +981,60 @@
 
 /* Callbacks */
 static void
+mud_connection_view_changed_cb(GtkAdjustment *adjustment,
+                                     MudConnectionView *view)
+{
+    if(view->priv->hiding)
+    {
+        view->priv->hiding = FALSE;
+        gtk_adjustment_set_value(adjustment,
+                                 adjustment->upper - adjustment->page_size);
+    }
+}
+
+
+static void
+mud_connection_view_value_changed_cb(GtkAdjustment *adjustment,
+                                     MudConnectionView *view)
+{
+    if(GTK_WIDGET_MAPPED(view->priv->terminal2))
+        gtk_adjustment_set_value(adjustment,
+                                 adjustment->upper - adjustment->page_size);
+
+    if(!GTK_WIDGET_MAPPED(view->priv->terminal2))
+    {
+        if(adjustment->value < view->priv->old_adjustment)
+            gtk_adjustment_set_value(VTE_TERMINAL(view->priv->terminal2)->adjustment,
+                    VTE_TERMINAL(view->priv->terminal2)->adjustment->value - 1);
+        else
+            gtk_adjustment_set_value(VTE_TERMINAL(view->priv->terminal2)->adjustment,
+                    VTE_TERMINAL(view->priv->terminal2)->adjustment->upper);
+
+        view->priv->old_adjustment = adjustment->value;
+    }
+}
+
+static void
+mud_connection_view_value_changed_term2_cb(GtkAdjustment *adjustment,
+                                     MudConnectionView *view)
+{
+    gtk_adjustment_set_value(view->terminal->adjustment,
+                             view->terminal->adjustment->upper);
+
+    if(adjustment->value + adjustment->page_size != adjustment->upper)
+        gtk_widget_show(view->priv->terminal2);
+    else
+    {
+        if(GTK_WIDGET_MAPPED(view->priv->terminal2))
+        {
+            view->priv->hiding = TRUE;
+            gtk_widget_hide(view->priv->terminal2);
+            gtk_adjustment_set_value(adjustment, adjustment->upper);
+        }
+    }
+}
+
+static void
 choose_profile_callback(GtkWidget *menu_item, MudConnectionView *view)
 {
     MudProfile *profile;
@@ -962,8 +1062,6 @@
 {
     GList *entry;
 
-    if (mask->ScrollOnOutput)
-        mud_connection_view_set_terminal_scrolloutput(view);
     if (mask->Scrollback)
         mud_connection_view_set_terminal_scrollback(view);
     if (mask->FontName)
@@ -1203,6 +1301,10 @@
                                               buf,
                                               length);
 
+                            vte_terminal_feed(VTE_TERMINAL(view->priv->terminal2),
+                                              buf,
+                                              length);
+
                             mud_window_toggle_tab_icon(view->window, view);
                         }
                         else
@@ -1219,6 +1321,10 @@
                                         buf,
                                         length);
 
+                                vte_terminal_feed(VTE_TERMINAL(view->priv->terminal2),
+                                        buf,
+                                        length);
+
                                 mud_window_toggle_tab_icon(view->window, view);
                             }
 
@@ -1377,6 +1483,7 @@
     utils_str_replace(buf, "\n", "\n\r");
 
     vte_terminal_feed(view->terminal, buf, strlen(buf));
+    vte_terminal_feed(VTE_TERMINAL(view->priv->terminal2), buf, strlen(buf));
 }
 
 static void
@@ -1386,7 +1493,6 @@
 
     mud_connection_view_set_terminal_colors(view);
     mud_connection_view_set_terminal_scrollback(view);
-    mud_connection_view_set_terminal_scrolloutput(view);
     mud_connection_view_set_terminal_font(view);
 }
 
@@ -1399,6 +1505,11 @@
             &view->profile->preferences->Foreground,
             &view->profile->preferences->Background,
             view->profile->preferences->Colors, C_MAX);
+
+    vte_terminal_set_colors(VTE_TERMINAL(view->priv->terminal2),
+            &view->profile->preferences->Foreground,
+            &view->profile->preferences->Background,
+            view->profile->preferences->Colors, C_MAX);
 }
 
 static void
@@ -1408,16 +1519,9 @@
 
     vte_terminal_set_scrollback_lines(view->terminal,
             view->profile->preferences->Scrollback);
-}
 
-static void
-mud_connection_view_set_terminal_scrolloutput(MudConnectionView *view)
-{
-    g_return_if_fail(IS_MUD_CONNECTION_VIEW(view));
-
-    if(view->terminal)
-        vte_terminal_set_scroll_on_output(view->terminal,
-                view->profile->preferences->ScrollOnOutput);
+    vte_terminal_set_scrollback_lines(VTE_TERMINAL(view->priv->terminal2),
+            view->profile->preferences->Scrollback);
 }
 
 static void
@@ -1437,6 +1541,7 @@
         desc = pango_font_description_from_string("Monospace 10");
 
     vte_terminal_set_font(view->terminal, desc);
+    vte_terminal_set_font(VTE_TERMINAL(view->priv->terminal2), desc);
 }
 
 /* Public Methods */
@@ -1711,6 +1816,7 @@
         text = NULL;
     }
 
+    vte_terminal_set_encoding(VTE_TERMINAL(view->priv->terminal2), encoding);
     vte_terminal_set_encoding(view->terminal, encoding);
 
     g_free(encoding);

Modified: trunk/src/mud-line-buffer.c
==============================================================================
--- trunk/src/mud-line-buffer.c	(original)
+++ trunk/src/mud-line-buffer.c	Fri Mar 27 19:57:39 2009
@@ -26,6 +26,7 @@
 #include <glib-object.h>
 
 #include "mud-line-buffer.h"
+#include "gnome-mud-marshallers.h"
 
 struct _MudLineBufferPrivate
 {
@@ -120,16 +121,17 @@
 
     /* Register Signals */
     mud_line_buffer_signal[LINE_ADDED] =
-        g_signal_newv("line-added",
-                      G_TYPE_FROM_CLASS(object_class),
-                      G_SIGNAL_RUN_LAST | G_SIGNAL_NO_HOOKS,
-                      NULL,
-                      NULL,
-                      NULL,
-                      g_cclosure_marshal_VOID__VOID,
-                      G_TYPE_NONE,
-                      0,
-                      NULL);
+        g_signal_new("line-added",
+                     G_TYPE_FROM_CLASS(object_class),
+                     G_SIGNAL_RUN_LAST | G_SIGNAL_NO_HOOKS,
+                     0,
+                     NULL,
+                     NULL,
+                     gnome_mud_cclosure_VOID__STRING_UINT,
+                     G_TYPE_NONE,
+                     2,
+                     G_TYPE_STRING,
+                     G_TYPE_UINT);
 
     mud_line_buffer_signal[LINE_REMOVED] =
         g_signal_newv("line-removed",
@@ -150,10 +152,11 @@
                       0,
                       NULL,
                       NULL,
-                      g_cclosure_marshal_VOID__STRING,
+                      gnome_mud_cclosure_VOID__STRING_UINT,
                       G_TYPE_NONE,
-                      1,
-                      G_TYPE_STRING);
+                      2,
+                      G_TYPE_STRING,
+                      G_TYPE_UINT);
 }
 
 static void
@@ -288,7 +291,7 @@
 
             self->priv->line_buffer =
                 g_list_append(self->priv->line_buffer,
-                              g_string_free(line, FALSE));
+                              g_strdup(line->str));
 
             if(self->priv->length == self->priv->maximum_line_count + 1)
             {
@@ -309,7 +312,11 @@
 
             g_signal_emit(self,
                           mud_line_buffer_signal[LINE_ADDED],
-                          0);
+                          0,
+                          line->str,
+                          line->len);
+
+            g_string_free(line, TRUE);
 
             line = g_string_new(NULL);
         }
@@ -324,7 +331,8 @@
         g_signal_emit(self,
                       mud_line_buffer_signal[PARTIAL_LINE_RECEIVED],
                       0,
-                      line->str);
+                      line->str,
+                      line->len);
     }
 
     g_string_free(line, TRUE);
@@ -426,6 +434,25 @@
     return g_string_free(range, (range->len == 0) );
 }
 
+void
+mud_line_buffer_remove_line(MudLineBuffer *self,
+                            guint line)
+{
+    const gchar *remove_data;
+
+    g_return_if_fail(MUD_IS_LINE_BUFFER(self));
+
+    remove_data = mud_line_buffer_get_line(self, line);
+
+    if(!remove_data)
+        return;
+
+    self->priv->line_buffer = g_list_remove(self->priv->line_buffer,
+                                            remove_data);
+
+    g_free((gchar *)remove_data); // Somewhat naughty. But the line is removed.
+}
+
 /* Private Methods */
 static void
 mud_line_buffer_free_line(gpointer value,

Modified: trunk/src/mud-line-buffer.h
==============================================================================
--- trunk/src/mud-line-buffer.h	(original)
+++ trunk/src/mud-line-buffer.h	Fri Mar 27 19:57:39 2009
@@ -66,6 +66,9 @@
                                         guint start,
                                         guint end);
 
+void          mud_line_buffer_remove_line(MudLineBuffer *self,
+                                          guint line);
+
 G_END_DECLS
 
 #endif // MUD_LINE_BUFFER_H

Modified: trunk/src/mud-log.c
==============================================================================
--- trunk/src/mud-log.c	(original)
+++ trunk/src/mud-log.c	Fri Mar 27 19:57:39 2009
@@ -127,7 +127,10 @@
 static gboolean mud_log_keypress_cb(GtkWidget *widget,
                                     GdkEventKey *event,
                                     MudLog *self);
-static void mud_log_line_added_cb(MudLineBuffer *buffer, MudLog *self);
+static void mud_log_line_added_cb(MudLineBuffer *buffer,
+                                  const gchar *line,
+                                  guint length,
+                                  MudLog *self);
 
 /* Private Methods */
 static void mud_log_write(MudLog *log, const gchar *data, gsize size);
@@ -580,19 +583,14 @@
 
 static void
 mud_log_line_added_cb(MudLineBuffer *buffer,
+                      const gchar *line,
+                      guint length,
                       MudLog *self)
 {
-    gulong length;
-    const gchar *line;
-
     if(!self->priv->done)
     {
-        g_object_get(buffer, "length", &length, NULL);
-
-        line = mud_line_buffer_get_line(buffer, length - 1);
-
-        if(line && strlen(line) != 0) 
-            mud_log_write(self, line, strlen(line));
+        if(line && length != 0) 
+            mud_log_write(self, line, length);
 
         if(self->priv->include_next)
         {
@@ -827,6 +825,15 @@
 
     g_return_if_fail(MUD_IS_LOG(log));
 
+    if(log->priv->color)
+    {
+        while(!g_queue_is_empty(log->priv->span_queue))
+        {
+            mud_log_write(log, "</span>", strlen("</span>"));
+            g_queue_pop_head(log->priv->span_queue);
+        }
+    }
+
     time(&t);
     strftime(buf, 255,
             _("\n *** Log stops *** %d/%m/%Y %H:%M:%S\n"),

Modified: trunk/src/mud-profile.c
==============================================================================
--- trunk/src/mud-profile.c	(original)
+++ trunk/src/mud-profile.c	Fri Mar 27 19:57:39 2009
@@ -329,7 +329,6 @@
     mud_profile_set_echotext(to, from->preferences->EchoText);
     mud_profile_set_keeptext(to, from->preferences->KeepText);
     mud_profile_set_disablekeys(to, from->preferences->DisableKeys);
-    mud_profile_set_scrolloutput(to, from->preferences->ScrollOnOutput);
     mud_profile_set_commdev(to, from->preferences->CommDev);
     mud_profile_set_scrollback(to, from->preferences->Scrollback);
     mud_profile_set_font(to, from->preferences->FontName);
@@ -430,7 +429,6 @@
     GCONF_GET_BOOLEAN(echo,     		functionality,	EchoText);
     GCONF_GET_BOOLEAN(keeptext,			functionality,	KeepText);
     GCONF_GET_BOOLEAN(system_keys,		functionality,	DisableKeys);
-    GCONF_GET_BOOLEAN(scroll_on_output,	functionality,	ScrollOnOutput);
     GCONF_GET_INT(flush_interval,		functionality,	FlushInterval);
     GCONF_GET_STRING(encoding,          functionality,  Encoding);
     GCONF_GET_STRING(proxy_version,     functionality,  ProxyVersion);
@@ -572,19 +570,6 @@
             profile->priv->preferences.DisableKeys = bool_setting;
         }
     }
-    else if(strcmp(key, "scroll_on_output") == 0)
-    {
-        bool_setting = FALSE;
-
-        if(val && val->type == GCONF_VALUE_BOOL)
-            bool_setting = gconf_value_get_bool(val);
-
-        if(bool_setting != profile->priv->preferences.ScrollOnOutput)
-        {
-            mask.ScrollOnOutput = TRUE;
-            profile->priv->preferences.ScrollOnOutput = bool_setting;
-        }
-    }
     else if(strcmp(key, "use_proxy") == 0)
     {
         bool_setting = FALSE;
@@ -810,15 +795,6 @@
 }
 
 void
-mud_profile_set_scrolloutput (MudProfile *profile, gboolean value)
-{
-    const gchar *key = mud_profile_gconf_get_key(profile, "functionality/scroll_on_output");
-    RETURN_IF_NOTIFYING(profile);
-
-    gconf_client_set_bool(profile->priv->gconf_client, key, value, NULL);
-}
-
-void
 mud_profile_set_disablekeys (MudProfile *profile, gboolean value)
 {
     const gchar *key = mud_profile_gconf_get_key(profile, "functionality/system_keys");

Modified: trunk/src/mud-profile.h
==============================================================================
--- trunk/src/mud-profile.h	(original)
+++ trunk/src/mud-profile.h	Fri Mar 27 19:57:39 2009
@@ -47,7 +47,6 @@
     gboolean   KeepText;
     gboolean   AutoSave;
     gboolean   DisableKeys;
-    gboolean   ScrollOnOutput;
 
     gchar     *FontName;
     gchar     *CommDev;
@@ -88,9 +87,7 @@
     unsigned int EchoText : 1;
     unsigned int KeepText : 1;
     unsigned int DisableKeys : 1;
-    unsigned int ScrollOnOutput : 1;
     unsigned int CommDev : 1;
-    unsigned int TerminalType : 1;
     unsigned int History : 1;
     unsigned int Scrollback : 1;
     unsigned int FontName : 1;

Modified: trunk/src/mud-subwindow.c
==============================================================================
--- trunk/src/mud-subwindow.c	(original)
+++ trunk/src/mud-subwindow.c	Fri Mar 27 19:57:39 2009
@@ -155,7 +155,6 @@
 static void mud_subwindow_update_geometry (MudSubwindow *window);
 static void mud_subwindow_set_terminal_colors(MudSubwindow *self);
 static void mud_subwindow_set_terminal_scrollback(MudSubwindow *self);
-static void mud_subwindow_set_terminal_scrolloutput(MudSubwindow *self);
 static void mud_subwindow_set_terminal_font(MudSubwindow *self);
 
 /* MudSubwindow class functions */
@@ -418,6 +417,8 @@
     vte_terminal_set_cursor_blink_mode(VTE_TERMINAL(self->priv->terminal),
                                        VTE_CURSOR_BLINK_OFF);
 
+    vte_terminal_set_scroll_on_output(VTE_TERMINAL(self->priv->terminal), TRUE);
+
     vte_terminal_set_size(VTE_TERMINAL(self->priv->terminal),
                                        self->priv->initial_width,
                                        self->priv->initial_height);
@@ -731,16 +732,6 @@
 }
 
 static void
-mud_subwindow_set_terminal_scrolloutput(MudSubwindow *self)
-{
-    g_return_if_fail(MUD_IS_SUBWINDOW(self));
-
-    if(self->priv->terminal)
-        vte_terminal_set_scroll_on_output(VTE_TERMINAL(self->priv->terminal),
-                self->priv->parent_view->profile->preferences->ScrollOnOutput);
-}
-
-static void
 mud_subwindow_set_terminal_font(MudSubwindow *self)
 {
     PangoFontDescription *desc = NULL;
@@ -1078,7 +1069,6 @@
 
     mud_subwindow_set_terminal_colors(self);
     mud_subwindow_set_terminal_scrollback(self);
-    mud_subwindow_set_terminal_scrolloutput(self);
     mud_subwindow_set_terminal_font(self);
 }
 

Modified: trunk/src/mud-trigger.c
==============================================================================
--- trunk/src/mud-trigger.c	(original)
+++ trunk/src/mud-trigger.c	Fri Mar 27 19:57:39 2009
@@ -22,9 +22,15 @@
 #endif
 
 #include <glib.h>
+#include <glib/gi18n.h>
+#include <glib/gprintf.h>
+#include <string.h>
+#include <stdlib.h>
 
 #include "mud-line-buffer.h"
 #include "mud-trigger.h"
+#include "gnome-mud-builtins.h"
+#include "utils.h"
 
 struct _MudTriggerPrivate
 {
@@ -34,11 +40,9 @@
     gulong lines;
 
     gboolean enabled;
-
     gboolean gag_output;
     
     gboolean multiline;
-    gboolean filter;
 
     /* Glob Triggers */
     GPatternSpec *glob;
@@ -46,16 +50,42 @@
 
     /* Regex Triggers */
     GRegex *regex;
+    GMatchInfo *info;
     gchar *regex_string;
 
     /* Condition Triggers */
     GList *condition_items;
+
+    /* Filter Child */
+    MudTrigger *child;
+
+    /* Key names */
+    gchar *profile_key;
+    gchar *trigger_key;
+
+    /* Action */
+    gchar *action;
+    MudTriggerAction action_type;
+
+    /* Variables */
+    GList *variables;
+};
+
+enum
+{
+    PARSE_STATE_TEXT,
+    PARSE_STATE_REGISTER
 };
 
 /* Property Identifiers */
 enum
 {
     PROP_MUD_TRIGGER_0,
+    PROP_TRIGGER_KEY,
+    PROP_PROFILE_KEY,
+    PROP_LINES,
+    PROP_ACTION,
+    PROP_ACTION_TYPE
 };
 
 /* Create the Type */
@@ -77,6 +107,16 @@
                                      GValue *value,
                                      GParamSpec *pspec);
 
+// Callbacks
+static void mud_trigger_line_added_cb(MudLineBuffer *buffer,
+                                      const gchar *line,
+                                      guint length,
+                                      MudTrigger *self);
+
+// Private Methods
+static void   mud_trigger_do_action(MudTrigger *self);
+static gchar *mud_trigger_parse(MudTrigger *self, const gchar *data);
+
 /* MudTrigger class functions */
 static void
 mud_trigger_class_init (MudTriggerClass *klass)
@@ -97,7 +137,48 @@
     g_type_class_add_private(klass, sizeof(MudTriggerPrivate));
 
     /* Install Properties */
-
+    g_object_class_install_property(object_class,
+            PROP_TRIGGER_KEY,
+            g_param_spec_string("trigger-key",
+                                "Trigger Key",
+                                "The Trigger's GConf Key",
+                                NULL,
+                                G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+
+    g_object_class_install_property(object_class,
+            PROP_PROFILE_KEY,
+            g_param_spec_string("profile-key",
+                                "Profile Key",
+                                "The Profile's GConf Key",
+                                NULL,
+                                G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+
+    g_object_class_install_property(object_class,
+            PROP_LINES,
+            g_param_spec_ulong("lines",
+                               "Lines",
+                               "The number of lines the trigger should check.",
+                               0,
+                               G_MAXULONG,
+                               1,
+                               G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+
+    g_object_class_install_property(object_class,
+            PROP_ACTION,
+            g_param_spec_string("action",
+                                "Action",
+                                "The Trigger's action",
+                                NULL,
+                                G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+
+    g_object_class_install_property(object_class,
+            PROP_ACTION_TYPE,
+            g_param_spec_enum("action-type",
+                              "Action Type",
+                              "The Trigger's action type",
+                              MUD_TYPE_TRIGGER_ACTION,
+                              MUD_TRIGGER_ACTION_TEXT,
+                              G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
 }
 
 static void
@@ -109,6 +190,23 @@
     /* Set Defaults */
     self->priv->type = MUD_TRIGGER_TYPE_SINGLE;
 
+    self->priv->line_buffer = NULL;
+
+    self->priv->gag_output = FALSE;
+    self->priv->multiline = FALSE;
+
+    self->priv->glob = NULL;
+    self->priv->glob_string = NULL;
+
+    self->priv->regex = NULL;
+    self->priv->regex_string = NULL;
+
+    self->priv->condition_items = NULL;
+
+    self->priv->child = NULL;
+
+    self->priv->trigger_key = NULL;
+    self->priv->profile_key = NULL;
 }
 
 static GObject *
@@ -128,6 +226,30 @@
 
     self = MUD_TRIGGER(obj);
 
+    if(!self->priv->trigger_key)
+        g_error("MudTrigger instatiated without trigger's key name.");
+
+    if(!self->priv->profile_key)
+        g_error("MudTrigger instantiated without profile's key name.");
+
+    self->priv->line_buffer = g_object_new(MUD_TYPE_LINE_BUFFER,
+                                           "maximum-line-count", self->priv->lines,
+                                           NULL);
+
+    g_signal_connect(self->priv->line_buffer,
+                     "line-added",
+                     G_CALLBACK(mud_trigger_line_added_cb),
+                     self);
+
+    g_printf("Action: %s\n", self->priv->action);
+    g_printf("Action Type: %d\n", self->priv->action_type);
+
+    self->priv->regex = g_regex_new("^(.*) says, \"(.*)\"",
+                                    G_REGEX_OPTIMIZE,
+                                    G_REGEX_MATCH_NOTEMPTY,
+                                    NULL);
+                                     
+
     return obj;
 }
 
@@ -139,6 +261,14 @@
 
     self = MUD_TRIGGER(object);
 
+    g_object_unref(self->priv->line_buffer);
+
+    if(self->priv->regex)
+        g_regex_unref(self->priv->regex);
+
+    g_free(self->priv->trigger_key);
+    g_free(self->priv->profile_key);
+
     parent_class = g_type_class_peek_parent(G_OBJECT_GET_CLASS(object));
     parent_class->finalize(object);
 }
@@ -150,11 +280,70 @@
                          GParamSpec *pspec)
 {
     MudTrigger *self;
+    gchar *new_string;
+    gulong new_ulong;
+    MudTriggerAction new_action;
 
     self = MUD_TRIGGER(object);
 
     switch(prop_id)
     {
+        case PROP_TRIGGER_KEY:
+            new_string = g_value_dup_string(value);
+
+            if(!self->priv->trigger_key)
+                self->priv->trigger_key = g_strdup(new_string);
+            else if( !g_str_equal(self->priv->trigger_key, new_string) )
+            {
+                g_free(self->priv->trigger_key);
+                self->priv->trigger_key = g_strdup(new_string);
+            }
+
+            g_free(new_string);
+            break;
+
+        case PROP_PROFILE_KEY:
+            new_string = g_value_dup_string(value);
+
+            if(!self->priv->profile_key)
+                self->priv->profile_key = g_strdup(new_string);
+            else if( !g_str_equal(self->priv->profile_key, new_string) )
+            {
+                g_free(self->priv->profile_key);
+                self->priv->profile_key = g_strdup(new_string);
+            }
+
+            g_free(new_string);
+            break;
+
+        case PROP_ACTION:
+            new_string = g_value_dup_string(value);
+
+            if(!self->priv->action)
+                self->priv->action = g_strdup(new_string);
+            else if( !g_str_equal(self->priv->action, new_string) )
+            {
+                g_free(self->priv->action);
+                self->priv->action = g_strdup(new_string);
+            }
+
+            g_free(new_string);
+            break;
+
+        case PROP_ACTION_TYPE:
+            new_action = g_value_get_enum(value);
+
+            if(new_action != self->priv->action_type)
+                self->priv->action_type = new_action;
+            break;
+
+        case PROP_LINES:
+            new_ulong = g_value_get_ulong(value);
+
+            if(new_ulong != self->priv->lines)
+                self->priv->lines = new_ulong;
+            break;
+
         default:
             G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
             break;
@@ -173,9 +362,236 @@
 
     switch(prop_id)
     {
+        case PROP_TRIGGER_KEY:
+            g_value_set_string(value, self->priv->trigger_key);
+            break;
+
+        case PROP_PROFILE_KEY:
+            g_value_set_string(value, self->priv->profile_key);
+            break;
+
+        case PROP_LINES:
+            g_value_set_ulong(value, self->priv->lines);
+            break;
+
+        case PROP_ACTION:
+            g_value_set_string(value, self->priv->action);
+            break;
+
+        case PROP_ACTION_TYPE:
+            g_value_set_enum(value, self->priv->action_type);
+            break;
+
         default:
             G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
             break;
     }
 }
 
+// Public Methods
+void
+mud_trigger_add_data(MudTrigger *self,
+                     const gchar *data,
+                     guint length)
+{
+    gchar *stripped;
+
+    g_return_if_fail(MUD_IS_TRIGGER(self));
+
+    stripped = utils_strip_ansi(data);
+
+    mud_line_buffer_add_data(self->priv->line_buffer,
+                             stripped,
+                             strlen(stripped));
+
+    g_free(stripped);
+}
+
+// Callbacks
+static void
+mud_trigger_line_added_cb(MudLineBuffer *buffer,
+                          const gchar *line,
+                          guint length,
+                          MudTrigger *self)
+{
+    switch(self->priv->type)
+    {
+        case MUD_TRIGGER_TYPE_SINGLE:
+            if(self->priv->regex)
+            {
+                if(g_regex_match_full(self->priv->regex,
+                                      line,
+                                      length,
+                                      0,
+                                      0,
+                                      &self->priv->info,
+                                      NULL))
+                {
+                    mud_trigger_do_action(self);
+
+                    g_match_info_free(self->priv->info);
+                }
+
+            }
+            break;
+
+        case MUD_TRIGGER_TYPE_MULTI:
+            break;
+
+        case MUD_TRIGGER_TYPE_FILTER:
+            break;
+
+        case MUD_TRIGGER_TYPE_CONDITION:
+            break;
+    }
+}
+
+// Private Methods
+static void
+mud_trigger_do_action(MudTrigger *self)
+{
+    switch(self->priv->action_type)
+    {
+        case MUD_TRIGGER_ACTION_TEXT:
+            if(self->priv->action)
+            {
+               if(self->priv->regex)
+               {
+                   gchar *data;
+
+                   data = mud_trigger_parse(self,
+                                            self->priv->action);
+
+                   g_printf("Parsed: %s\n", data);
+
+                   g_free(data);
+               } 
+            }
+            break;
+
+        case MUD_TRIGGER_ACTION_VAR:
+            break;
+
+        case MUD_TRIGGER_ACTION_LUA:
+            break;
+    }
+}
+
+static gchar * 
+mud_trigger_parse(MudTrigger *self, const gchar *data)
+{
+    guint length, matches_length, i;
+    gint state;
+    GString *ret, *reg_num;
+    gchar **matches;
+
+    length = strlen(data);
+
+    if(length == 0)
+        return NULL;
+
+    ret = g_string_new(NULL);
+    reg_num = NULL;
+
+    matches = g_match_info_fetch_all(self->priv->info);
+    matches_length = g_strv_length(matches);
+
+    state = PARSE_STATE_TEXT;
+
+    for(i = 0; i < length; i++)
+    {
+        switch(state)
+        {
+            case PARSE_STATE_TEXT:
+                if(data[i] == '%')
+                {
+                    reg_num = g_string_new(NULL);
+                    state = PARSE_STATE_REGISTER;
+                }
+                else
+                    ret = g_string_append_c(ret, data[i]);
+                break;
+
+            case PARSE_STATE_REGISTER:
+                if(!g_ascii_isdigit(data[i]) &&
+                   i + 1 < length &&
+                   !g_ascii_isdigit(data[i + 1]))
+                {
+                    if(reg_num->len == 0)
+                    {
+                        ret = g_string_append_c(ret, data[i]);
+
+                        if(i != 0 && data[ i - 1 ] == '%')
+                            ret = g_string_append_c(ret, data[ i - 1 ]);
+
+                        g_string_free(reg_num, TRUE);
+                        reg_num = NULL;
+
+                        state = PARSE_STATE_TEXT;
+                    }
+                    else
+                    {
+                        guint num = atol(reg_num->str);
+                        gint check = i - reg_num->len - 2;
+
+                        if(num >= matches_length - 1)
+                        {
+                            if(i != 0 && check > -1 && data[check] == '%')
+                                ret = g_string_append_c(ret, '%');
+
+                            ret = g_string_append(ret, _("#Submatch Out of Range#"));
+                            ret = g_string_append_c(ret, data[i]);
+
+                            state = PARSE_STATE_TEXT; 
+                        }
+                        else
+                        {
+                            if(i != 0 && check > -1 && data[check] == '%')
+                                ret = g_string_append_c(ret, '%');
+                            ret = g_string_append(ret, matches[num + 1]);
+                            ret = g_string_append_c(ret, data[i]);
+
+                            state = PARSE_STATE_TEXT;
+                        }
+
+                        g_string_free(reg_num, TRUE);
+                        reg_num = NULL;
+                    }
+                }
+                else
+                {
+                    if(g_ascii_isdigit(data[i]))
+                        reg_num = g_string_append_c(reg_num, data[i]);
+
+                    if(i + 1 == length)
+                    {
+                        if(reg_num->len != 0)
+                        {
+                            guint num  = atol(reg_num->str);
+
+                            if(num >= matches_length - 1)
+                            {
+                                ret = g_string_append(ret, _("#Submatch Out of Range#"));
+                                state = PARSE_STATE_TEXT; 
+                            }
+                            else
+                                ret = g_string_append(ret, matches[num + 1]);
+                        }
+
+                        if(!g_ascii_isdigit(data[i]))
+                            ret = g_string_append_c(ret, data[i]);
+
+                        g_string_free(reg_num, TRUE);
+                        reg_num = NULL;
+                    }
+                }
+                break;
+        }
+    }
+
+    if(matches_length != 0)
+        g_strfreev(matches);
+
+    return g_string_free(ret, (ret->len == 0) );
+}
+

Modified: trunk/src/mud-trigger.h
==============================================================================
--- trunk/src/mud-trigger.h	(original)
+++ trunk/src/mud-trigger.h	Fri Mar 27 19:57:39 2009
@@ -57,8 +57,38 @@
     MUD_TRIGGER_TYPE_CONDITION
 } MudTriggerType;
 
+typedef enum
+{
+    MUD_TRIGGER_ACTION_TEXT,
+    MUD_TRIGGER_ACTION_VAR,
+    MUD_TRIGGER_ACTION_LUA
+} MudTriggerAction;
+
+typedef enum
+{
+    MUD_TRIGGER_CONDITION_TEXT,
+    MUD_TRIGGER_CONDITION_VAR,
+    MUD_TRIGGER_CONDITION_LUA
+} MudTriggerConditionType;
+
+typedef struct MudTriggerCondition
+{
+    MudTriggerConditionType type;
+
+    union
+    {
+        //MudVariable *var;
+        gchar *data;
+    };
+
+} MudTriggerCondition;
+
 GType         mud_trigger_get_type (void);
 
+void mud_trigger_add_data(MudTrigger *self,
+                          const gchar *data,
+                          guint length);
+
 G_END_DECLS
 
 #endif // MUD_TRIGGER_H

Modified: trunk/src/mud-window-prefs.c
==============================================================================
--- trunk/src/mud-window-prefs.c	(original)
+++ trunk/src/mud-window-prefs.c	Fri Mar 27 19:57:39 2009
@@ -52,7 +52,6 @@
     GtkWidget *keep_check;
     GtkWidget *div_entry;
     GtkWidget *encoding_combo;
-    GtkWidget *scroll_check;
     GtkWidget *lines_spin;
     GtkWidget *font_button;
     GtkWidget *fore_button;
@@ -129,8 +128,6 @@
 // Update Functions
 static void mud_window_prefs_update_commdev(MudWindowPrefs *self,
                                             MudPrefs *preferences);
-static void mud_window_prefs_update_scrolloutput(MudWindowPrefs *self,
-                                                 MudPrefs *preferences);
 static void mud_window_prefs_update_encoding_combo(MudWindowPrefs *self,
                                                    MudPrefs *preferences);
 static void mud_window_prefs_update_keeptext(MudWindowPrefs *self,
@@ -156,8 +153,6 @@
                                      MudWindowPrefs *window);
 static void mud_window_prefs_keeptext_cb(GtkWidget *widget,
                                          MudWindowPrefs *window);
-static void mud_window_prefs_scrolloutput_cb(GtkWidget *widget,
-                                             MudWindowPrefs *window);
 static void mud_window_prefs_commdev_cb(GtkWidget *widget,
                                         MudWindowPrefs *window);
 static void mud_window_prefs_scrollback_cb(GtkWidget *widget,
@@ -425,7 +420,6 @@
     self->priv->keep_check     = glade_xml_get_widget(glade, "cb_keep");
     self->priv->div_entry      = glade_xml_get_widget(glade, "entry_commdev");
     self->priv->encoding_combo = glade_xml_get_widget(glade, "encoding_combo");
-    self->priv->scroll_check   = glade_xml_get_widget(glade, "cb_scrollback");
     self->priv->lines_spin     = glade_xml_get_widget(glade, "sb_lines");
     self->priv->font_button    = glade_xml_get_widget(glade, "fp_font");
     self->priv->fore_button    = glade_xml_get_widget(glade, "cb_foreground");
@@ -483,8 +477,6 @@
         mud_window_prefs_update_echotext(window, profile->preferences);
     if (mask->KeepText)
         mud_window_prefs_update_keeptext(window, profile->preferences);
-    if (mask->ScrollOnOutput)
-        mud_window_prefs_update_scrolloutput(window, profile->preferences);
     if (mask->CommDev)
         mud_window_prefs_update_commdev(window, profile->preferences);
     if (mask->Scrollback)
@@ -518,7 +510,6 @@
     // Terminal
     mud_window_prefs_update_echotext(self, self->priv->profile->preferences);
     mud_window_prefs_update_keeptext(self, self->priv->profile->preferences);
-    mud_window_prefs_update_scrolloutput(self, self->priv->profile->preferences);
     mud_window_prefs_update_commdev(self, self->priv->profile->preferences);
     mud_window_prefs_update_scrollback(self, self->priv->profile->preferences);
     mud_window_prefs_update_font(self, self->priv->profile->preferences);
@@ -551,11 +542,6 @@
                      G_CALLBACK(mud_window_prefs_keeptext_cb),
                      self);
 
-    g_signal_connect(self->priv->scroll_check,
-                     "toggled",
-                     G_CALLBACK(mud_window_prefs_scrolloutput_cb),
-                     self);
-    
     g_signal_connect(self->priv->div_entry,
                      "changed",
                      G_CALLBACK(mud_window_prefs_commdev_cb),
@@ -603,14 +589,6 @@
 }
 
 static void
-mud_window_prefs_update_scrolloutput(MudWindowPrefs *self,
-                                     MudPrefs *preferences)
-{
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self->priv->scroll_check),
-                                 preferences->ScrollOnOutput);
-}
-
-static void
 mud_window_prefs_update_encoding_combo(MudWindowPrefs *self,
                                        MudPrefs *preferences)
 {
@@ -726,16 +704,6 @@
 
 // Callbacks
 static void
-mud_window_prefs_scrolloutput_cb(GtkWidget *widget,
-                                 MudWindowPrefs *self)
-{
-    gboolean value = GTK_TOGGLE_BUTTON(widget)->active ? TRUE : FALSE;
-    RETURN_IF_CHANGING_PROFILES(self);
-
-    mud_profile_set_scrolloutput(self->priv->profile, value);
-}
-
-static void
 mud_window_prefs_keeptext_cb(GtkWidget *widget,
                              MudWindowPrefs *self)
 {

Modified: trunk/ui/muds.glade
==============================================================================
--- trunk/ui/muds.glade	(original)
+++ trunk/ui/muds.glade	Fri Mar 27 19:57:39 2009
@@ -1,11 +1,11 @@
 <?xml version="1.0"?>
 <glade-interface>
-  <!-- interface-requires gtk+ 2.10 -->
+  <!-- interface-requires gtk+ 2.14 -->
   <!-- interface-naming-policy toplevel-contextual -->
   <widget class="GtkWindow" id="mudviewwindow">
     <property name="visible">True</property>
     <property name="title" translatable="yes">Connections</property>
-    <property name="window_position">center-on-parent</property>
+    <property name="window_position">center-always</property>
     <property name="default_width">600</property>
     <property name="default_height">400</property>
     <property name="skip_taskbar_hint">True</property>

Modified: trunk/ui/prefs.glade
==============================================================================
--- trunk/ui/prefs.glade	(original)
+++ trunk/ui/prefs.glade	Fri Mar 27 19:57:39 2009
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <glade-interface>
-  <!-- interface-requires gtk+ 2.10 -->
+  <!-- interface-requires gtk+ 2.14 -->
   <!-- interface-naming-policy toplevel-contextual -->
   <widget class="GtkDialog" id="newprofile_dialog">
     <property name="visible">True</property>
@@ -594,20 +594,6 @@
                             <property name="visible">True</property>
                             <property name="orientation">vertical</property>
                             <child>
-                              <widget class="GtkCheckButton" id="cb_scrollback">
-                                <property name="label" translatable="yes">Scroll on _Output</property>
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">False</property>
-                                <property name="use_underline">True</property>
-                                <property name="draw_indicator">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
                               <widget class="GtkHBox" id="hbox5">
                                 <property name="visible">True</property>
                                 <child>
@@ -646,7 +632,7 @@
                               </widget>
                               <packing>
                                 <property name="expand">False</property>
-                                <property name="position">1</property>
+                                <property name="position">0</property>
                               </packing>
                             </child>
                             <child>
@@ -656,7 +642,7 @@
                               <packing>
                                 <property name="expand">False</property>
                                 <property name="padding">5</property>
-                                <property name="position">2</property>
+                                <property name="position">1</property>
                               </packing>
                             </child>
                             <child>
@@ -1014,7 +1000,7 @@
                               </widget>
                               <packing>
                                 <property name="expand">False</property>
-                                <property name="position">3</property>
+                                <property name="position">2</property>
                               </packing>
                             </child>
                             <child>
@@ -1023,7 +1009,7 @@
                                 <property name="xalign">1</property>
                               </widget>
                               <packing>
-                                <property name="position">4</property>
+                                <property name="position">3</property>
                               </packing>
                             </child>
                           </widget>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]