SF.net SVN: geany:[5623] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Thu Mar 24 17:33:47 UTC 2011


Revision: 5623
          http://geany.svn.sourceforge.net/geany/?rev=5623&view=rev
Author:   ntrel
Date:     2011-03-24 17:33:47 +0000 (Thu, 24 Mar 2011)

Log Message:
-----------
Add fixed shortcuts for VTE copy (Ctrl-Shift-C) and paste
(Ctrl-Shift-V).

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

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2011-03-24 16:52:34 UTC (rev 5622)
+++ trunk/ChangeLog	2011-03-24 17:33:47 UTC (rev 5623)
@@ -2,6 +2,9 @@
 
  * plugins/filebrowser.c:
    Add history to filter entry.
+ * src/keybindings.c, src/vte.c:
+   Add fixed shortcuts for VTE copy (Ctrl-Shift-C) and paste
+   (Ctrl-Shift-V).
 
 
 2011-03-24  Colomban Wendling  <colomban(at)geany(dot)org>

Modified: trunk/src/keybindings.c
===================================================================
--- trunk/src/keybindings.c	2011-03-24 16:52:34 UTC (rev 5622)
+++ trunk/src/keybindings.c	2011-03-24 17:33:47 UTC (rev 5623)
@@ -1083,6 +1083,9 @@
 		return FALSE;
 	if (state == 0 && (keyval < GDK_F1 || keyval > GDK_F35))	/* e.g. backspace */
 		return FALSE;
+	/* let VTE copy/paste override any user keybinding */
+	if (state == (GDK_CONTROL_MASK | GDK_SHIFT_MASK) && (keyval == GDK_c || keyval == GDK_v))
+		return TRUE;
 
 	/* make focus commands override any bash commands */
 	group = g_ptr_array_index(keybinding_groups, GEANY_KEY_GROUP_FOCUS);

Modified: trunk/src/vte.c
===================================================================
--- trunk/src/vte.c	2011-03-24 16:52:34 UTC (rev 5622)
+++ trunk/src/vte.c	2011-03-24 17:33:47 UTC (rev 5623)
@@ -60,7 +60,6 @@
 static gboolean clean = TRUE;
 static GModule *module = NULL;
 static struct VteFunctions *vf;
-static gboolean popup_menu_created = FALSE;
 static gchar *gtk_menu_key_accel = NULL;
 static gint vte_prefs_tab_num = -1;
 
@@ -232,6 +231,15 @@
 }
 
 
+static void on_vte_realize(void)
+{
+	/* the vte widget has to be realised before color changes take effect */
+	vte_apply_user_settings();
+
+	vf->vte_terminal_im_append_menuitems(VTE_TERMINAL(vc->vte), GTK_MENU_SHELL(vc->im_submenu));
+}
+
+
 static void create_vte(void)
 {
 	GtkWidget *vte, *scrollbar, *hbox, *frame;
@@ -240,6 +248,9 @@
 	scrollbar = gtk_vscrollbar_new(GTK_ADJUSTMENT(VTE_TERMINAL(vte)->adjustment));
 	GTK_WIDGET_UNSET_FLAGS(scrollbar, GTK_CAN_FOCUS);
 
+	/* create menu now so copy/paste shortcuts work */
+	vc->menu = vte_create_popup_menu();
+
 	frame = gtk_frame_new(NULL);
 
 	hbox = gtk_hbox_new(FALSE, 0);
@@ -271,8 +282,7 @@
 	gtk_widget_show_all(frame);
 	gtk_notebook_insert_page(GTK_NOTEBOOK(msgwindow.notebook), frame, gtk_label_new(_("Terminal")), MSG_VTE);
 
-	/* the vte widget has to be realised before color changes take effect */
-	g_signal_connect_after(vte, "realize", G_CALLBACK(vte_apply_user_settings), NULL);
+	g_signal_connect_after(vte, "realize", G_CALLBACK(on_vte_realize), NULL);
 }
 
 
@@ -282,8 +292,7 @@
 	/* free the vte widget before unloading vte module
 	 * this prevents a segfault on X close window if the message window is hidden */
 	gtk_widget_destroy(vc->vte);
-	if (popup_menu_created)
-		gtk_widget_destroy(vc->menu);
+	gtk_widget_destroy(vc->menu);
 	g_free(vc->emulation);
 	g_free(vc->shell);
 	g_free(vc->font);
@@ -378,17 +387,9 @@
 {
 	if (event->button == 3)
 	{
-		if (G_UNLIKELY(! popup_menu_created))
-		{
-			vc->menu = vte_create_popup_menu();
-			vf->vte_terminal_im_append_menuitems(VTE_TERMINAL(vc->vte), GTK_MENU_SHELL(vc->im_submenu));
-			popup_menu_created = TRUE;
-		}
-
 		gtk_widget_grab_focus(vc->vte);
 		gtk_menu_popup(GTK_MENU(vc->menu), NULL, NULL, NULL, NULL, event->button, event->time);
 	}
-
 	return FALSE;
 }
 
@@ -507,15 +508,23 @@
 static GtkWidget *vte_create_popup_menu(void)
 {
 	GtkWidget *menu, *item;
+	GtkAccelGroup *accel_group;
 
 	menu = gtk_menu_new();
 
+	accel_group = gtk_accel_group_new();
+	gtk_window_add_accel_group(GTK_WINDOW(main_widgets.window), accel_group);
+
 	item = gtk_image_menu_item_new_from_stock("gtk-copy", NULL);
+	gtk_widget_add_accelerator(item, "activate", accel_group,
+		GDK_c, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE);
 	gtk_widget_show(item);
 	gtk_container_add(GTK_CONTAINER(menu), item);
 	g_signal_connect(item, "activate", G_CALLBACK(vte_popup_menu_clicked), GINT_TO_POINTER(POPUP_COPY));
 
 	item = gtk_image_menu_item_new_from_stock("gtk-paste", NULL);
+	gtk_widget_add_accelerator(item, "activate", accel_group,
+		GDK_v, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE);
 	gtk_widget_show(item);
 	gtk_container_add(GTK_CONTAINER(menu), item);
 	g_signal_connect(item, "activate", G_CALLBACK(vte_popup_menu_clicked), GINT_TO_POINTER(POPUP_PASTE));
@@ -566,7 +575,7 @@
 	gtk_container_add(GTK_CONTAINER(menu), item);
 
 	gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), vc->im_submenu);
-
+	/* submenu populated after vte realized */
 	return menu;
 }
 


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