SF.net SVN: geany: [2098] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Wed Dec 12 16:55:00 UTC 2007


Revision: 2098
          http://geany.svn.sourceforge.net/geany/?rev=2098&view=rev
Author:   eht16
Date:     2007-12-12 08:55:00 -0800 (Wed, 12 Dec 2007)

Log Message:
-----------
Enable dragging of text into the VTE.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/vte.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2007-12-12 16:34:02 UTC (rev 2097)
+++ trunk/ChangeLog	2007-12-12 16:55:00 UTC (rev 2098)
@@ -1,3 +1,12 @@
+2007-12-12  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
+
+ * geany.glade, src/interface.c, src/msgwindow.c, src/plugins.c:
+   Set treeview rules hint for several treeviews and remove manual
+   setting the background colour of odd rows of the status and message
+   treeviews (closes #1848901).
+ * src/vte.c: Enable dragging of text into the VTE.
+
+
 2007-12-09  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
 
  * geany.spec.in: Apply patch from Yura Siamashka and Dominic Hopf

Modified: trunk/src/vte.c
===================================================================
--- trunk/src/vte.c	2007-12-12 16:34:02 UTC (rev 2097)
+++ trunk/src/vte.c	2007-12-12 16:55:00 UTC (rev 2098)
@@ -70,6 +70,8 @@
 static void vte_popup_menu_clicked(GtkMenuItem *menuitem, gpointer user_data);
 static GtkWidget *vte_create_popup_menu(void);
 void vte_commit(VteTerminal *vte, gchar *arg1, guint arg2, gpointer user_data);
+void vte_drag_data_received(GtkWidget *widget, GdkDragContext *drag_context, gint x, gint y,
+							GtkSelectionData *data, guint info, guint ltime);
 
 
 enum
@@ -78,10 +80,24 @@
 	POPUP_PASTE,
 	POPUP_CHANGEPATH,
 	POPUP_RESTARTTERMINAL,
-	POPUP_PREFERENCES
+	POPUP_PREFERENCES,
+	TARGET_UTF8_STRING = 0,
+	TARGET_TEXT,
+	TARGET_COMPOUND_TEXT,
+	TARGET_STRING,
+	TARGET_TEXT_PLAIN,
 };
 
+static const GtkTargetEntry dnd_targets[] =
+{
+  { "UTF8_STRING", 0, TARGET_UTF8_STRING },
+  { "TEXT", 0, TARGET_TEXT },
+  { "COMPOUND_TEXT", 0, TARGET_COMPOUND_TEXT },
+  { "STRING", 0, TARGET_STRING },
+  { "text/plain", 0, TARGET_TEXT_PLAIN },
+};
 
+
 /* taken from anjuta, thanks */
 static gchar **vte_get_child_environment(void)
 {
@@ -212,6 +228,9 @@
 	vf->vte_terminal_set_mouse_autohide(VTE_TERMINAL(vte), TRUE);
 	vf->vte_terminal_set_word_chars(VTE_TERMINAL(vte), VTE_WORDCHARS);
 
+    gtk_drag_dest_set(vte, GTK_DEST_DEFAULT_ALL,
+		dnd_targets, G_N_ELEMENTS(dnd_targets), GDK_ACTION_COPY);
+
 	g_signal_connect(G_OBJECT(vte), "child-exited", G_CALLBACK(vte_start), NULL);
 	g_signal_connect(G_OBJECT(vte), "button-press-event", G_CALLBACK(vte_button_pressed), NULL);
 	if (! vc->enable_bash_keys)
@@ -219,8 +238,7 @@
 	g_signal_connect(G_OBJECT(vte), "key-release-event", G_CALLBACK(vte_keyrelease), NULL);
 	g_signal_connect(G_OBJECT(vte), "commit", G_CALLBACK(vte_commit), NULL);
 	g_signal_connect(G_OBJECT(vte), "motion-notify-event", G_CALLBACK(on_motion_event), NULL);
-	//g_signal_connect(G_OBJECT(vte), "drag-data-received", G_CALLBACK(vte_drag_data_received), NULL);
-	//g_signal_connect(G_OBJECT(vte), "drag-drop", G_CALLBACK(vte_drag_drop), NULL);
+	g_signal_connect(G_OBJECT(vte), "drag-data-received", G_CALLBACK(vte_drag_data_received), NULL);
 
 	vte_start(vte);
 
@@ -574,39 +592,27 @@
 	}
 }
 
-/*
-void vte_drag_data_received(GtkWidget *widget, GdkDragContext  *drag_context, gint x, gint y,
-							GtkSelectionData *data, guint info, guint time)
+
+void vte_drag_data_received(GtkWidget *widget, GdkDragContext *drag_context, gint x, gint y,
+							GtkSelectionData *data, guint info, guint ltime)
 {
-	geany_debug("length: %d, format: %d, action: %d", data->length, data->format, drag_context->action);
-	if ((data->length >= 0) && (data->format == 8))
+	if (info == TARGET_TEXT_PLAIN)
 	{
-		if (drag_context->action == GDK_ACTION_ASK)
-		{
-			gint accept = TRUE;
-			// should I check the incoming data?
-			if (accept)
-				drag_context->action = GDK_ACTION_COPY;
-		}
-		gtk_drag_finish(drag_context, TRUE, FALSE, time);
-		return;
+		if (data->format == 8 && data->length > 0)
+			vf->vte_terminal_feed_child(VTE_TERMINAL(widget),
+				(const gchar*) data->data, data->length);
 	}
-	gtk_drag_finish(drag_context, FALSE, FALSE, time);
+	else
+	{
+		gchar *text = (gchar*) gtk_selection_data_get_text(data);
+		if (NZV(text))
+			vf->vte_terminal_feed_child(VTE_TERMINAL(widget), text, strlen(text));
+		g_free (text);
+	}
+	gtk_drag_finish(drag_context, TRUE, FALSE, ltime);
 }
 
 
-gboolean vte_drag_drop(GtkWidget *widget, GdkDragContext *drag_context, gint x, gint y, guint time,
-					   gpointer user_data)
-{
-
-	GdkAtom *atom;
-	gtk_drag_get_data(widget, drag_context, atom, time);
-	geany_debug("%s", GDK_ATOM_TO_POINTER(atom));
-	return TRUE;
-}
-*/
-
-
 void vte_append_preferences_tab()
 {
 	if (vte_info.have_vte)


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list