diff --git a/pw3270.cbp b/pw3270.cbp
index a18dd85..6c88c8c 100644
--- a/pw3270.cbp
+++ b/pw3270.cbp
@@ -435,6 +435,9 @@
+
+
+
diff --git a/src/lib3270/ctlr.c b/src/lib3270/ctlr.c
index e5b9a74..7a8bb07 100644
--- a/src/lib3270/ctlr.c
+++ b/src/lib3270/ctlr.c
@@ -39,6 +39,7 @@
#include "globals.h"
#include
+#include
#include "3270ds.h"
//#include "appres.h"
// #include "ctlr.h"
diff --git a/src/pw3270/v3270/oia.c b/src/pw3270/v3270/oia.c
index fc2c7e1..2326738 100644
--- a/src/pw3270/v3270/oia.c
+++ b/src/pw3270/v3270/oia.c
@@ -647,22 +647,29 @@ void v3270_update_luname(GtkWidget *widget,const gchar *name)
GdkRectangle * rect;
v3270 * terminal = GTK_V3270(widget);
- if(!terminal->surface)
- return;
+ if(terminal->surface)
+ {
+ cr = set_update_region(terminal,&rect,V3270_OIA_LUNAME);
- cr = set_update_region(terminal,&rect,V3270_OIA_LUNAME);
+ if(name)
+ {
+ cairo_move_to(cr,rect->x,rect->y+terminal->metrics.height);
+ gdk_cairo_set_source_rgba(cr,terminal->color+V3270_COLOR_OIA_LUNAME);
+ cairo_show_text(cr,name);
+ cairo_stroke(cr);
+ }
- if(name)
- {
- cairo_move_to(cr,rect->x,rect->y+terminal->metrics.height);
- gdk_cairo_set_source_rgba(cr,terminal->color+V3270_COLOR_OIA_LUNAME);
- cairo_show_text(cr,name);
- cairo_stroke(cr);
+ cairo_destroy(cr);
+
+ gtk_widget_queue_draw_area(GTK_WIDGET(terminal),rect->x,rect->y,rect->width,rect->height);
}
- cairo_destroy(cr);
+#if GTK_CHECK_VERSION(2,26,0)
+ g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties[PROP_LUNAME]);
+#else
+ g_object_notify(G_OBJECT(widget),"luname");
+#endif // GTK_CHECK_VERSION
- gtk_widget_queue_draw_area(GTK_WIDGET(terminal),rect->x,rect->y,rect->width,rect->height);
}
void v3270_update_message(v3270 *widget, LIB3270_MESSAGE id)
diff --git a/src/pw3270/v3270/private.h b/src/pw3270/v3270/private.h
index 966d13f..51549b7 100644
--- a/src/pw3270/v3270/private.h
+++ b/src/pw3270/v3270/private.h
@@ -51,7 +51,6 @@ G_BEGIN_DECLS
void (*activate)(GtkWidget *widget);
void (*toggle_changed)(v3270 *widget,LIB3270_TOGGLE toggle_id,gboolean toggle_state,const gchar *toggle_name);
void (*message_changed)(v3270 *widget, LIB3270_MESSAGE id);
- void (*luname_changed)(GtkWidget *widget,const gchar *luname);
void (*popup_message)(GtkWidget *widget, LIB3270_NOTIFY id , const gchar *title, const gchar *message, const gchar *text);
gboolean (*keypress)(GtkWidget *widget,guint keyval,GdkModifierType state);
@@ -71,7 +70,6 @@ G_BEGIN_DECLS
{
SIGNAL_TOGGLE_CHANGED,
SIGNAL_MESSAGE_CHANGED,
- SIGNAL_LUNAME_CHANGED,
SIGNAL_KEYPRESS,
SIGNAL_CONNECTED,
SIGNAL_DISCONNECTED,
@@ -211,11 +209,34 @@ G_BEGIN_DECLS
};
+/*--[ Properties ]-----------------------------------------------------------------------------------*/
+
+ enum
+ {
+ PROP_0,
+
+ /* Construct */
+ PROP_TYPE,
+
+
+ /* Widget properties */
+ PROP_ONLINE,
+ PROP_SELECTION,
+ PROP_MODEL,
+ PROP_LUNAME,
+
+ /* Toggles - always the last one, the real values are PROP_TOGGLE+LIB3270_TOGGLE */
+ PROP_TOGGLE
+ };
+
+ #define PROP_LAST (PROP_TOGGLE+LIB3270_TOGGLE_COUNT)
+
+
/*--[ Globals ]--------------------------------------------------------------------------------------*/
G_GNUC_INTERNAL guint v3270_widget_signal[LAST_SIGNAL];
G_GNUC_INTERNAL GdkCursor * v3270_cursor[V3270_CURSOR_COUNT];
-
+ G_GNUC_INTERNAL GParamSpec * v3270_properties[PROP_LAST];
/*--[ Prototipes ]-----------------------------------------------------------------------------------*/
@@ -271,12 +292,13 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int h
void v3270_update_cursor_rect(v3270 *widget, GdkRectangle *rect, unsigned char chr, unsigned short attr);
-void v3270_update_luname(GtkWidget *widget,const gchar *name);
void v3270_update_message(v3270 *widget, LIB3270_MESSAGE id);
void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, unsigned char c, unsigned short attr);
void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on);
void v3270_update_ssl(H3270 *session, LIB3270_SSL_STATE state);
+G_GNUC_INTERNAL void v3270_update_luname(GtkWidget *widget,const gchar *name);
+
// Keyboard & Mouse
gboolean v3270_key_press_event(GtkWidget *widget, GdkEventKey *event);
gboolean v3270_key_release_event(GtkWidget *widget, GdkEventKey *event);
diff --git a/src/pw3270/v3270/properties.c b/src/pw3270/v3270/properties.c
new file mode 100644
index 0000000..d1ca3d7
--- /dev/null
+++ b/src/pw3270/v3270/properties.c
@@ -0,0 +1,133 @@
+/*
+ * "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 properties.c e possui - linhas de código.
+ *
+ * Contatos:
+ *
+ * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
+ * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
+ *
+ */
+
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include "private.h"
+
+/*--[ Globals ]--------------------------------------------------------------------------------------*/
+
+ GParamSpec * v3270_properties[PROP_LAST] = { 0 };
+
+/*--[ Implement ]------------------------------------------------------------------------------------*/
+
+ static void v3270_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+ {
+ v3270 *window = GTK_V3270(object);
+
+ switch (prop_id)
+ {
+ case PROP_MODEL:
+ lib3270_set_model(window->host,g_value_get_string(value));
+ break;
+
+ default:
+ if(prop_id < (PROP_TOGGLE + LIB3270_TOGGLE_COUNT))
+ {
+ lib3270_set_toggle(window->host,prop_id - PROP_TOGGLE, (int) g_value_get_boolean (value));
+ return;
+ }
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+
+ }
+
+ static void v3270_get_property(GObject *object,guint prop_id, GValue *value, GParamSpec *pspec)
+ {
+ v3270 *window = GTK_V3270(object);
+
+ switch (prop_id)
+ {
+ case PROP_MODEL:
+ g_value_set_string(value,lib3270_get_model(window->host));
+ break;
+
+ case PROP_LUNAME:
+ g_value_set_string(value,lib3270_get_luname(window->host));
+ break;
+
+ case PROP_ONLINE:
+ g_value_set_boolean(value,lib3270_is_connected(window->host) ? TRUE : FALSE );
+ break;
+
+ case PROP_SELECTION:
+ g_value_set_boolean(value,lib3270_has_selection(window->host) ? TRUE : FALSE );
+ break;
+
+ default:
+ if(prop_id < (PROP_TOGGLE + LIB3270_TOGGLE_COUNT))
+ {
+ g_value_set_boolean(value,lib3270_get_toggle(window->host,prop_id - PROP_TOGGLE) ? TRUE : FALSE );
+ return;
+ }
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+ }
+
+ void v3270_init_properties(GObjectClass * gobject_class)
+ {
+ gobject_class->set_property = v3270_set_property;
+ gobject_class->get_property = v3270_get_property;
+
+ v3270_properties[PROP_ONLINE] = g_param_spec_boolean(
+ "online",
+ "online",
+ "True if is online",
+ FALSE,G_PARAM_READABLE);
+ g_object_class_install_property(gobject_class,PROP_ONLINE,v3270_properties[PROP_ONLINE]);
+
+ v3270_properties[PROP_SELECTION] = g_param_spec_boolean(
+ "selection",
+ "selection",
+ "True on selected area",
+ FALSE,G_PARAM_READABLE);
+ g_object_class_install_property(gobject_class,PROP_SELECTION,v3270_properties[PROP_SELECTION]);
+
+ v3270_properties[PROP_MODEL] = g_param_spec_string(
+ "model",
+ "model",
+ "The model of 3270 display to be emulated",
+ FALSE,G_PARAM_READABLE|G_PARAM_WRITABLE);
+ g_object_class_install_property(gobject_class,PROP_MODEL,v3270_properties[PROP_MODEL]);
+
+ // Toggle properties
+ int f;
+
+ for(f=0;fhost,g_value_get_string(value));
- break;
-
- default:
- if(prop_id < (PROP_TOGGLE + LIB3270_TOGGLE_COUNT))
- {
- lib3270_set_toggle(window->host,prop_id - PROP_TOGGLE, (int) g_value_get_boolean (value));
- return;
- }
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- }
-
-}
-
-static void v3270_get_property(GObject *object,guint prop_id, GValue *value, GParamSpec *pspec)
-{
- v3270 *window = GTK_V3270(object);
-
- switch (prop_id)
- {
- case PROP_MODEL:
- g_value_set_string(value,lib3270_get_model(window->host));
- break;
-
- case PROP_ONLINE:
- g_value_set_boolean(value,lib3270_is_connected(window->host) ? TRUE : FALSE );
- break;
-
- case PROP_SELECTION:
- g_value_set_boolean(value,lib3270_has_selection(window->host) ? TRUE : FALSE );
- break;
-
- default:
- if(prop_id < (PROP_TOGGLE + LIB3270_TOGGLE_COUNT))
- {
- g_value_set_boolean(value,lib3270_get_toggle(window->host,prop_id - PROP_TOGGLE) ? TRUE : FALSE );
- return;
- }
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- }
-}
-
static void v3270_class_init(v3270Class *klass)
{
GObjectClass * gobject_class = G_OBJECT_CLASS(klass);
@@ -416,7 +344,6 @@ static void v3270_class_init(v3270Class *klass)
klass->activate = v3270_activate;
klass->toggle_changed = v3270_toggle_changed;
klass->message_changed = v3270_update_message;
- klass->luname_changed = v3270_update_luname;
klass->popup_message = v3270_popup_message;
#if GTK_CHECK_VERSION(3,0,0)
@@ -524,15 +451,6 @@ static void v3270_class_init(v3270Class *klass)
v3270_VOID__VOID_ENUM,
G_TYPE_NONE, 1, G_TYPE_UINT);
- v3270_widget_signal[SIGNAL_LUNAME_CHANGED] =
- g_signal_new( "luname_changed",
- G_OBJECT_CLASS_TYPE (gobject_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (v3270Class, luname_changed),
- NULL, NULL,
- v3270_VOID__VOID_POINTER,
- G_TYPE_NONE, 1, G_TYPE_STRING);
-
v3270_widget_signal[SIGNAL_KEYPRESS] =
g_signal_new( "keypress",
G_OBJECT_CLASS_TYPE (gobject_class),
@@ -651,40 +569,7 @@ static void v3270_class_init(v3270Class *klass)
v3270_VOID__VOID,
G_TYPE_NONE, 0);
-
- // Properties
- gobject_class->set_property = v3270_set_property;
- gobject_class->get_property = v3270_get_property;
-
- v3270_properties[PROP_ONLINE] = g_param_spec_boolean(
- "online",
- "online",
- "True if is online",
- FALSE,G_PARAM_READABLE);
- g_object_class_install_property(gobject_class,PROP_ONLINE,v3270_properties[PROP_ONLINE]);
-
- v3270_properties[PROP_SELECTION] = g_param_spec_boolean(
- "selection",
- "selection",
- "True on selected area",
- FALSE,G_PARAM_READABLE);
- g_object_class_install_property(gobject_class,PROP_SELECTION,v3270_properties[PROP_SELECTION]);
-
- v3270_properties[PROP_MODEL] = g_param_spec_string(
- "model",
- "model",
- "The model of 3270 display to be emulated",
- FALSE,G_PARAM_READABLE|G_PARAM_WRITABLE);
- g_object_class_install_property(gobject_class,PROP_MODEL,v3270_properties[PROP_MODEL]);
-
- // Toggle properties
- int f;
-
- for(f=0;fwidget), v3270_widget_signal[SIGNAL_LUNAME_CHANGED], 0, (gchar *) name);
+ v3270_update_luname(GTK_WIDGET(session->widget),name);
}
static void select_cursor(H3270 *session, LIB3270_CURSOR id)
--
libgit2 0.21.2