[vte/vte-next: 149/223] Move eof signal to VteBuffer



commit 1b12314b2f4182b1aa3b85cfb7941da282c62130
Author: Christian Persch <chpe gnome org>
Date:   Sat Jun 11 16:37:26 2011 +0200

    Move eof signal to VteBuffer

 src/reflect.c   |    5 ++++-
 src/vte.c       |   51 +++++++++++++++++++++++++++------------------------
 src/vte.h       |    2 --
 src/vteapp.c    |    2 +-
 src/vtebuffer.h |    1 +
 5 files changed, 33 insertions(+), 28 deletions(-)
---
diff --git a/src/reflect.c b/src/reflect.c
index 33cf53a..a593642 100644
--- a/src/reflect.c
+++ b/src/reflect.c
@@ -58,8 +58,11 @@ terminal_adjustment_text_view(GtkWidget *terminal)
 static void
 terminal_init_vte(GtkWidget **terminal)
 {
+        VteBuffer *buffer;
+
 	*terminal = vte_terminal_new();
-	g_signal_connect(G_OBJECT(*terminal), "eof",
+        buffer = vte_terminal_get_buffer(VTE_TERMINAL(*terminal));
+	g_signal_connect(buffer, "eof",
 			 G_CALLBACK(gtk_main_quit), NULL);
 	g_signal_connect(G_OBJECT(*terminal), "child-exited",
 			 G_CALLBACK(gtk_main_quit), NULL);
diff --git a/src/vte.c b/src/vte.c
index 72004d3..e8427ef 100644
--- a/src/vte.c
+++ b/src/vte.c
@@ -169,6 +169,7 @@ enum {
         BUFFER_WINDOW_TITLE_CHANGED,
         BUFFER_ICON_TITLE_CHANGED,
         BUFFER_STATUS_LINE_CHANGED,
+        BUFFER_EOF,
         LAST_BUFFER_SIGNAL,
 };
 
@@ -915,26 +916,27 @@ vte_terminal_queue_cursor_moved(VteTerminal *terminal)
 	terminal->pvt->cursor_moved_pending = TRUE;
 }
 
+/* FIXMEchpe: why is this doing GDK threads? */
 static gboolean
-vte_terminal_emit_eof(VteTerminal *terminal)
+vte_buffer_emit_eof(VteBuffer *buffer)
 {
 	_vte_debug_print(VTE_DEBUG_SIGNALS,
 			"Emitting `eof'.\n");
 	GDK_THREADS_ENTER ();
-	g_signal_emit_by_name(terminal, "eof");
+	g_signal_emit(buffer, buffer_signals[BUFFER_EOF], 0);
 	GDK_THREADS_LEAVE ();
 
 	return FALSE;
 }
 /* Emit a "eof" signal. */
 static void
-vte_terminal_queue_eof(VteTerminal *terminal)
+vte_buffer_queue_eof(VteBuffer *buffer)
 {
 	_vte_debug_print(VTE_DEBUG_SIGNALS,
 			"Queueing `eof'.\n");
 	g_idle_add_full (G_PRIORITY_HIGH,
-		(GSourceFunc) vte_terminal_emit_eof,
-		g_object_ref (terminal),
+		(GSourceFunc) vte_buffer_emit_eof,
+		g_object_ref (buffer),
 		g_object_unref);
 }
 
@@ -2999,7 +3001,7 @@ vte_terminal_eof(GIOChannel *channel, VteTerminal *terminal)
         vte_terminal_set_pty(terminal, NULL);
 
 	/* Emit a signal that we read an EOF. */
-	vte_terminal_queue_eof(terminal);
+	vte_buffer_queue_eof(terminal->term_pvt->buffer);
 
         g_object_thaw_notify(object);
 }
@@ -10835,7 +10837,6 @@ vte_terminal_class_init(VteTerminalClass *klass)
         widget_class->screen_changed = vte_terminal_screen_changed;
 
 	/* Initialize default handlers. */
-	klass->eof = NULL;
 	klass->child_exited = NULL;
 	klass->char_size_changed = NULL;
 	klass->selection_changed = NULL;
@@ -10874,23 +10875,6 @@ vte_terminal_class_init(VteTerminalClass *klass)
 	/* Register some signals of our own. */
 
         /**
-         * VteTerminal::eof:
-         * @vteterminal: the object which received the signal
-         *
-         * Emitted when the terminal receives an end-of-file from a child which
-         * is running in the terminal.  This signal is frequently (but not
-         * always) emitted with a #VteTerminal::child-exited signal.
-         */
-                g_signal_new(I_("eof"),
-			     G_OBJECT_CLASS_TYPE(klass),
-			     G_SIGNAL_RUN_LAST,
-			     G_STRUCT_OFFSET(VteTerminalClass, eof),
-			     NULL,
-			     NULL,
-                             g_cclosure_marshal_VOID__VOID,
-			     G_TYPE_NONE, 0);
-
-        /**
          * VteTerminal::child-exited:
          * @vteterminal: the object which received the signal
          * @status: the child's exit status
@@ -13630,6 +13614,7 @@ vte_buffer_class_init(VteBufferClass *klass)
         klass->commit = NULL;
         klass->emulation_changed = NULL;
         klass->encoding_changed = NULL;
+        klass->eof = NULL;
         klass->window_title_changed = NULL;
         klass->icon_title_changed = NULL;
         klass->status_line_changed = NULL;
@@ -13691,6 +13676,24 @@ vte_buffer_class_init(VteBufferClass *klass)
                              G_TYPE_NONE, 0);
 
         /**
+         * VteBuffer::eof:
+         * @vtebuffer: the object which received the signal
+         *
+         * Emitted when the buffer receives an end-of-file from a child which
+         * is running in the buffer.  This signal is frequently (but not
+         * always) emitted with a #VteBuffer::child-exited signal.
+         */
+        buffer_signals[BUFFER_EOF] =
+                g_signal_new(I_("eof"),
+                             G_OBJECT_CLASS_TYPE(klass),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET(VteBufferClass, eof),
+                             NULL,
+                             NULL,
+                             g_cclosure_marshal_VOID__VOID,
+                             G_TYPE_NONE, 0);
+
+        /**
          * VteBuffer::window-title-changed:
          * @vtebuffer: the object which received the signal
          *
diff --git a/src/vte.h b/src/vte.h
index be9bde1..db1d95f 100644
--- a/src/vte.h
+++ b/src/vte.h
@@ -74,8 +74,6 @@ struct _VteTerminalClass {
 	GtkWidgetClass parent_class;
 
 	/*< protected > */
-	/* Default signal handlers. */
-	void (*eof)(VteTerminal* terminal);
 	void (*child_exited)(VteTerminal* terminal, int status);
 	void (*char_size_changed)(VteTerminal* terminal, guint char_width, guint char_height);
 	void (*selection_changed)(VteTerminal* terminal);
diff --git a/src/vteapp.c b/src/vteapp.c
index fdc74df..68bdaf4 100644
--- a/src/vteapp.c
+++ b/src/vteapp.c
@@ -1048,7 +1048,7 @@ main(int argc, char **argv)
 						       G_IO_IN,
 						       read_and_feed,
 						       widget);
-				g_signal_connect_swapped(widget,
+				g_signal_connect_swapped(buffer,
                                                          "eof",
                                                          G_CALLBACK(disconnect_watch),
                                                          GINT_TO_POINTER(watch));
diff --git a/src/vtebuffer.h b/src/vtebuffer.h
index c28e464..a496374 100644
--- a/src/vtebuffer.h
+++ b/src/vtebuffer.h
@@ -52,6 +52,7 @@ struct _VteBufferClass {
   void (*icon_title_changed)   (VteBuffer* buffer);
   void (*window_title_changed) (VteBuffer* buffer);
   void (*status_line_changed)  (VteBuffer* buffer);
+  void (*eof)                  (VteBuffer* buffer);
 
   /*< private >*/
   VteBufferClassPrivate *priv;



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