Add copy and paste functionality

This commit is contained in:
Pierre Pronchery 2018-10-07 17:08:41 +02:00
parent fd59fd9733
commit 0f282167e1
3 changed files with 88 additions and 0 deletions

View File

@ -165,6 +165,27 @@ GtkWidget * terminaltab_get_widget(TerminalTab * tab)
}
/* useful */
/* terminaltab_clipboard_copy */
void terminaltab_clipboard_copy(TerminalTab * tab)
{
#ifdef WITH_XTERM
#else
vte_terminal_copy_clipboard(VTE_TERMINAL(tab->socket));
#endif
}
/* terminaltab_clipboard_paste */
void terminaltab_clipboard_paste(TerminalTab * tab)
{
#ifdef WITH_XTERM
#else
vte_terminal_paste_clipboard(VTE_TERMINAL(tab->socket));
#endif
}
/* private */
/* functions */
/* callbacks */

View File

@ -46,4 +46,8 @@ void terminaltab_delete(TerminalTab * tab);
GtkWidget * terminaltab_get_label(TerminalTab * tab);
GtkWidget * terminaltab_get_widget(TerminalTab * tab);
/* useful */
void terminaltab_clipboard_copy(TerminalTab * tab);
void terminaltab_clipboard_paste(TerminalTab * tab);
#endif /* !TERMINAL_TAB_H */

View File

@ -77,15 +77,19 @@ static void _terminalwidget_tab_close(TerminalWidget * widget, unsigned int i);
/* callbacks */
static void _terminalwidget_on_close(gpointer data);
static void _terminalwidget_on_copy(gpointer data);
static void _terminalwidget_on_fullscreen(gpointer data);
static void _terminalwidget_on_new_tab(gpointer data);
static void _terminalwidget_on_new_window(gpointer data);
static void _terminalwidget_on_paste(gpointer data);
#ifndef EMBEDDED
static void _terminalwidget_on_file_close(gpointer data);
static void _terminalwidget_on_file_close_all(gpointer data);
static void _terminalwidget_on_file_new_tab(gpointer data);
static void _terminalwidget_on_file_new_window(gpointer data);
static void _terminalwidget_on_edit_copy(gpointer data);
static void _terminalwidget_on_edit_paste(gpointer data);
static void _terminalwidget_on_view_fullscreen(gpointer data);
static void _terminalwidget_on_help_about(gpointer data);
static void _terminalwidget_on_help_contents(gpointer data);
@ -115,6 +119,15 @@ static const DesktopMenu _terminalwidget_file_menu[] =
{ NULL, NULL, NULL, 0, 0 }
};
static const DesktopMenu _terminalwidget_edit_menu[] =
{
{ N_("_Copy"), G_CALLBACK(_terminalwidget_on_edit_copy),
GTK_STOCK_COPY, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_KEY_C },
{ N_("_Paste"), G_CALLBACK(_terminalwidget_on_edit_paste),
GTK_STOCK_PASTE, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_KEY_V },
{ NULL, NULL, NULL, 0, 0 }
};
static const DesktopMenu _terminalwidget_view_menu[] =
{
{ N_("_Fullscreen"), G_CALLBACK(_terminalwidget_on_view_fullscreen),
@ -143,6 +156,7 @@ static const DesktopMenu _terminalwidget_help_menu[] =
static const DesktopMenubar _terminalwidget_menubar[] =
{
{ N_("_File"), _terminalwidget_file_menu },
{ N_("_Edit"), _terminalwidget_edit_menu },
{ N_("_View"), _terminalwidget_view_menu },
{ N_("_Help"), _terminalwidget_help_menu },
{ NULL, NULL }
@ -156,6 +170,11 @@ static DesktopToolbar _terminalwidget_toolbar[] =
{ N_("New window"), G_CALLBACK(_terminalwidget_on_new_window),
"window-new", 0, 0, NULL },
{ "", NULL, NULL, 0, 0, NULL },
{ N_("Copy"), G_CALLBACK(_terminalwidget_on_copy), GTK_STOCK_COPY, 0,
0, NULL },
{ N_("Paste"), G_CALLBACK(_terminalwidget_on_paste), GTK_STOCK_PASTE, 0,
0, NULL },
{ "", NULL, NULL, 0, 0, NULL },
{ NULL, NULL, NULL, 0, 0, NULL }
};
@ -426,6 +445,19 @@ static void _terminalwidget_on_close(gpointer data)
}
/* terminalwidget_on_copy */
static void _terminalwidget_on_copy(gpointer data)
{
TerminalWidget * widget = data;
int i;
i = gtk_notebook_get_current_page(GTK_NOTEBOOK(widget->notebook));
if(i < 0)
return;
terminaltab_clipboard_copy(widget->tabs[i]);
}
/* terminalwidget_on_fullscreen */
static void _terminalwidget_on_fullscreen(gpointer data)
{
@ -457,7 +489,38 @@ static void _terminalwidget_on_new_window(gpointer data)
}
/* terminalwidget_on_paste */
static void _terminalwidget_on_paste(gpointer data)
{
TerminalWidget * widget = data;
int i;
i = gtk_notebook_get_current_page(GTK_NOTEBOOK(widget->notebook));
if(i < 0)
return;
terminaltab_clipboard_paste(widget->tabs[i]);
}
#ifndef EMBEDDED
/* terminalwidget_on_edit_copy */
static void _terminalwidget_on_edit_copy(gpointer data)
{
TerminalWidget * widget = data;
_terminalwidget_on_copy(widget);
}
/* terminalwidget_on_edit_paste */
static void _terminalwidget_on_edit_paste(gpointer data)
{
TerminalWidget * widget = data;
_terminalwidget_on_paste(widget);
}
/* terminalwidget_on_file_close */
static void _terminalwidget_on_file_close(gpointer data)
{