From d4f9d28b34c20afd44f91bd14c964ffa9d00813a Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Mon, 28 Oct 2019 13:59:19 -0300 Subject: [PATCH] Implementing clipboard actions. --- pw3270.cbp | 3 +++ src/objects/actions/clipboard.c | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/actions/private.h | 2 ++ src/objects/actions/window.c | 5 ++++- src/objects/window/tools.c | 1 + src/objects/window/window.c | 5 ++--- 6 files changed, 144 insertions(+), 4 deletions(-) create mode 100644 src/objects/actions/clipboard.c diff --git a/pw3270.cbp b/pw3270.cbp index 55de2c4..5ff299f 100644 --- a/pw3270.cbp +++ b/pw3270.cbp @@ -57,6 +57,9 @@ + + diff --git a/src/objects/actions/clipboard.c b/src/objects/actions/clipboard.c new file mode 100644 index 0000000..de67b7d --- /dev/null +++ b/src/objects/actions/clipboard.c @@ -0,0 +1,132 @@ +/* + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + * St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Este programa está nomeado como - e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + */ + + /** + * @brief Implement PW3270 clipboard actions. + * + */ + + #include "private.h" + #include + + static void activate_copy(GAction G_GNUC_UNUSED(*action), GVariant G_GNUC_UNUSED(*parameter), GtkWidget *terminal) { + + debug("%s",__FUNCTION__); + v3270_copy_selection(terminal,V3270_SELECT_TEXT,FALSE); + + } + + static void activate_cut(GAction G_GNUC_UNUSED(*action), GVariant G_GNUC_UNUSED(*parameter), GtkWidget *terminal) { + + debug("%s",__FUNCTION__); + v3270_copy_selection(terminal,V3270_SELECT_TEXT,TRUE); + + } + + static void activate_paste(GAction G_GNUC_UNUSED(*action), GVariant G_GNUC_UNUSED(*parameter), GtkWidget *terminal) { + + debug("%s",__FUNCTION__); + v3270_paste(terminal); + + } + + GAction * pw3270_copy_action_new(void) { + + static const LIB3270_ACTION action_descriptor = { + .name = "copy", + .type = LIB3270_ACTION_TYPE_SELECTION, + + .key = "c", + .icon = "edit-copy", + .label = N_( "_Copy" ), + .summary = N_( "Copy selected area to clipboard." ), + .activate = NULL, + + .group = LIB3270_ACTION_GROUP_SELECTED, + .activatable = lib3270_has_selection + + }; + + GAction * action = pw3270_action_new_from_lib3270(&action_descriptor); + + PW3270_ACTION(action)->activate = activate_copy; + + return action; + + } + + GAction * pw3270_cut_action_new(void) { + + static const LIB3270_ACTION action_descriptor = { + .name = "cut", + .type = LIB3270_ACTION_TYPE_SELECTION, + + .key = "x", + .icon = "edit-cut", + .label = N_( "_Cut" ), + .summary = N_( "Cut selected area." ), + .activate = NULL, + + .group = LIB3270_ACTION_GROUP_SELECTED, + .activatable = lib3270_has_selection + + }; + + GAction * action = pw3270_action_new_from_lib3270(&action_descriptor); + + PW3270_ACTION(action)->activate = activate_cut; + + return action; + + } + + GAction * pw3270_paste_action_new(void) { + + static const LIB3270_ACTION action_descriptor = { + .name = "paste", + .type = LIB3270_ACTION_TYPE_SELECTION, + + .key = "v", + .icon = "edit-paste", + .label = N_( "_Paste" ), + .summary = N_( "Paste data from clipboard." ), + .activate = NULL, + + .group = LIB3270_ACTION_GROUP_ONLINE, + .activatable = lib3270_is_connected + + }; + + GAction * action = pw3270_action_new_from_lib3270(&action_descriptor); + + PW3270_ACTION(action)->activate = activate_paste; + + return action; + + } diff --git a/src/objects/actions/private.h b/src/objects/actions/private.h index 810b838..6fffb48 100644 --- a/src/objects/actions/private.h +++ b/src/objects/actions/private.h @@ -90,5 +90,7 @@ // Internal actions G_GNUC_INTERNAL GAction * pw3270_connect_action_new(void); + G_GNUC_INTERNAL GAction * pw3270_copy_action_new(void); + G_GNUC_INTERNAL GAction * pw3270_paste_action_new(void); #endif // PRIVATE_H_INCLUDED diff --git a/src/objects/actions/window.c b/src/objects/actions/window.c index bbdb235..c280b62 100644 --- a/src/objects/actions/window.c +++ b/src/objects/actions/window.c @@ -68,7 +68,10 @@ GAction * actions[] = { pw3270_action_new_pfkey(), pw3270_action_new_pakey(), - pw3270_connect_action_new() + pw3270_connect_action_new(), + pw3270_copy_action_new(), + pw3270_cut_action_new(), + pw3270_paste_action_new() }; for(ix = 0; ix < G_N_ELEMENTS(actions); ix++) { diff --git a/src/objects/window/tools.c b/src/objects/window/tools.c index fb5d45a..b695724 100644 --- a/src/objects/window/tools.c +++ b/src/objects/window/tools.c @@ -28,6 +28,7 @@ */ #include "private.h" + #include GtkWidget * pw3270_setup_image_button(GtkWidget *button, const gchar *image_name) { diff --git a/src/objects/window/window.c b/src/objects/window/window.c index 88d634f..9b3143f 100644 --- a/src/objects/window/window.c +++ b/src/objects/window/window.c @@ -102,15 +102,14 @@ // { static const gchar *actions[] = { - "win.select_all", "win.copy", "win.paste", + "win.select_all", "separator", "win.connect", "win.disconnect", "separator", - "win.print", - "win.close" + "win.print" }; size_t ix; -- libgit2 0.21.2