This is an automated email from the git hooks/post-receive script. f 2 4 0 4 p u s h e d a c o m m i t t o b r a n c h m a s t e r in repository apps/xfce4-terminal.
commit 9892ee7d05fa2a29a49c9aaccffec5da05dfb785 Author: Igor <f2...@yandex.ru> Date: Fri Apr 13 13:32:14 2018 -0400 Add "Copy Input" action It shows a popover and allows to copy the input to all tabs within the current window. Fixes bug #10047 --- terminal/terminal-screen.c | 10 ++++++ terminal/terminal-screen.h | 3 ++ terminal/terminal-window-ui.xml | 2 ++ terminal/terminal-window.c | 75 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 90 insertions(+) diff --git a/terminal/terminal-screen.c b/terminal/terminal-screen.c index b580b5d..fe03ce3 100644 --- a/terminal/terminal-screen.c +++ b/terminal/terminal-screen.c @@ -2774,3 +2774,13 @@ terminal_screen_has_foreground_process (TerminalScreen *screen) return TRUE; } + + + +void +terminal_screen_feed_text (TerminalScreen *screen, + const char *text) +{ + terminal_return_if_fail (TERMINAL_IS_SCREEN (screen)); + vte_terminal_feed_child (VTE_TERMINAL (screen->terminal), text, strlen (text)); +} diff --git a/terminal/terminal-screen.h b/terminal/terminal-screen.h index 00d3f5c..b70e5ef 100644 --- a/terminal/terminal-screen.h +++ b/terminal/terminal-screen.h @@ -127,6 +127,9 @@ void terminal_screen_save_contents (TerminalScreen *scree gboolean terminal_screen_has_foreground_process (TerminalScreen *screen); +void terminal_screen_feed_text (TerminalScreen *screen, + const char *text); + G_END_DECLS #endif /* !TERMINAL_SCREEN_H */ diff --git a/terminal/terminal-window-ui.xml b/terminal/terminal-window-ui.xml index d47ce4e..824660e 100644 --- a/terminal/terminal-window-ui.xml +++ b/terminal/terminal-window-ui.xml @@ -26,6 +26,8 @@ <separator/> <menuitem action="select-all"/> <separator/> + <menuitem action="copy-input"/> + <separator/> <menuitem action="preferences"/> </menu> <menu action="view-menu"> diff --git a/terminal/terminal-window.c b/terminal/terminal-window.c index f427e35..f556669 100644 --- a/terminal/terminal-window.c +++ b/terminal/terminal-window.c @@ -196,6 +196,8 @@ static void terminal_window_action_paste_selection (GtkAction TerminalWindow *window); static void terminal_window_action_select_all (GtkAction *action, TerminalWindow *window); +static void terminal_window_action_copy_input (GtkAction *action, + TerminalWindow *window); static void terminal_window_action_prefs (GtkAction *action, TerminalWindow *window); static void terminal_window_action_show_toolbar (GtkToggleAction *action, @@ -334,6 +336,7 @@ static const GtkActionEntry action_entries[] = { "paste", "edit-paste", N_ ("_Paste"), "<control><shift>v", N_ ("Paste from clipboard"), G_CALLBACK (terminal_window_action_paste), }, { "paste-selection", NULL, N_ ("Paste _Selection"), NULL, NULL, G_CALLBACK (terminal_window_action_paste_selection), }, { "select-all", "edit-select-all", N_ ("Select _All"), "<control><shift>a", NULL, G_CALLBACK (terminal_window_action_select_all), }, + { "copy-input", NULL, N_ ("Copy _Input To All Tabs..."), NULL, NULL, G_CALLBACK (terminal_window_action_copy_input), }, { "preferences", "preferences-system", N_ ("Pr_eferences..."), NULL, N_ ("Open the preferences dialog"), G_CALLBACK (terminal_window_action_prefs), }, { "view-menu", NULL, N_ ("_View"), NULL, NULL, NULL, }, { "zoom-in", "zoom-in", N_ ("Zoom _In"), "<control>plus", N_ ("Zoom in with larger font"), G_CALLBACK (terminal_window_action_zoom_in), }, @@ -1785,6 +1788,78 @@ terminal_window_action_select_all (GtkAction *action, static void +copy_input_popover_close (GtkWidget *popover, + TerminalWindow *window) +{ + /* need for hiding on focus */ + if (window->drop_down) + terminal_util_activate_window (GTK_WINDOW (window)); + + /* close the dialog */ + gtk_widget_destroy (popover); + + /* focus the terminal */ + if (G_LIKELY (window->priv->active != NULL && TERMINAL_IS_SCREEN (window->priv->active))) + terminal_screen_focus (window->priv->active); +} + + + +static void +copy_input_popover_do_copy (GtkWidget *popover, + GtkWidget *entry) +{ + TerminalWindow *window = TERMINAL_WINDOW (gtk_widget_get_toplevel (popover)); + GtkNotebook *notebook = GTK_NOTEBOOK (window->priv->notebook); + gint n, npages = gtk_notebook_get_n_pages (notebook); + + /* copy the input to all tabs */ + for (n = 0; n < npages; n++) + { + TerminalScreen *screen = TERMINAL_SCREEN (gtk_notebook_get_nth_page (notebook, n)); + terminal_screen_feed_text (screen, gtk_entry_get_text (GTK_ENTRY (entry))); + } +} + + + +static void +terminal_window_action_copy_input (GtkAction *action, + TerminalWindow *window) +{ + GtkWidget *popover, *button, *box, *label, *entry; + + popover = gtk_popover_new (GTK_WIDGET (window->priv->menubar)); + gtk_popover_set_position (GTK_POPOVER (popover), GTK_POS_BOTTOM); + + box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); + gtk_container_set_border_width (GTK_CONTAINER (box), 6); + gtk_container_add (GTK_CONTAINER (popover), box); + + label = gtk_label_new_with_mnemonic (_("Copy _Input:")); + gtk_container_add (GTK_CONTAINER (box), label); + + entry = gtk_entry_new (); + gtk_widget_set_tooltip_text (entry, _("Enter the text to be copied to all tabs")); + gtk_container_add (GTK_CONTAINER (box), entry); + gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE); + gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry); + g_signal_connect (G_OBJECT (entry), "activate", G_CALLBACK (copy_input_popover_do_copy), entry); + + button = gtk_button_new_from_icon_name ("edit-copy-symbolic", GTK_ICON_SIZE_BUTTON); + gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE); + gtk_widget_set_tooltip_text (button, _("Copy input")); + gtk_container_add (GTK_CONTAINER (box), button); + g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (copy_input_popover_do_copy), entry); + + g_signal_connect (G_OBJECT (popover), "closed", G_CALLBACK (copy_input_popover_close), window); + + gtk_widget_show_all (popover); +} + + + +static void terminal_window_action_prefs_died (gpointer user_data, GObject *where_the_object_was) { -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits