Commit 35b14de2fe09a4f7eeb2361558c4523f260b8e42

Authored by Perry Werneck
1 parent e48617d5
Exists in master and in 1 other branch develop

Fixing screen resize problem.

src/terminal/callbacks.c
... ... @@ -72,6 +72,8 @@ static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value
72 72 {
73 73 GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session));
74 74  
  75 + trace("%s(%s,%d)",__FUNCTION__,name,(int) value);
  76 +
75 77 switch(ix)
76 78 {
77 79 case LIB3270_TOGGLE_CURSOR_POS:
... ... @@ -138,7 +140,7 @@ static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value
138 140 static gboolean bg_update_message(H3270 *session)
139 141 {
140 142 void *widget = lib3270_get_user_data(session);
141   - trace("-----A %s %p",__FUNCTION__, lib3270_get_user_data(session));
  143 + // trace("-----A %s %p",__FUNCTION__, lib3270_get_user_data(session));
142 144  
143 145 g_signal_emit(
144 146 GTK_WIDGET(widget),
... ... @@ -147,7 +149,7 @@ static gboolean bg_update_message(H3270 *session)
147 149 (gint) lib3270_get_program_message(session)
148 150 );
149 151  
150   - trace("-----B %s %p",__FUNCTION__, lib3270_get_user_data(session));
  152 + //trace("-----B %s %p",__FUNCTION__, lib3270_get_user_data(session));
151 153  
152 154 return FALSE;
153 155 }
... ... @@ -378,7 +380,7 @@ static void popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title
378 380  
379 381 static gboolean bg_update_ssl(H3270 *session)
380 382 {
381   - trace("%s(%p,%p)",__FUNCTION__,session,lib3270_get_user_data(session));
  383 +// trace("%s(%p,%p)",__FUNCTION__,session,lib3270_get_user_data(session));
382 384  
383 385 v3270_blink_ssl(GTK_V3270(lib3270_get_user_data(session)));
384 386  
... ...
src/terminal/draw.c
... ... @@ -371,13 +371,8 @@ LIB3270_EXPORT void v3270_reload(GtkWidget *widget)
371 371 {
372 372 v3270 * terminal = GTK_V3270(widget);
373 373  
374   -#if GTK_CHECK_VERSION(3,0,0)
375 374 gint width = gtk_widget_get_allocated_width(widget);
376 375 gint height = gtk_widget_get_allocated_height(widget);
377   -#else
378   - gint width = terminal->width;
379   - gint height = terminal->height;
380   -#endif
381 376  
382 377 GdkRectangle rect;
383 378 int addr, cursor, r, rows, cols;
... ... @@ -385,7 +380,9 @@ LIB3270_EXPORT void v3270_reload(GtkWidget *widget)
385 380 cairo_t * cr;
386 381  
387 382 if(!(gtk_widget_get_realized(widget) && terminal->drawing))
  383 + {
388 384 return;
  385 + }
389 386  
390 387 // Create new terminal image
391 388 if(terminal->surface)
... ...
src/terminal/font.c
... ... @@ -36,7 +36,7 @@
36 36 #define HEIGHT_IN_PIXELS(terminal,x) (x * (rows+1))
37 37  
38 38 #define CONTENTS_WIDTH(terminal) (cols * terminal->font.width)
39   - #define CONTENTS_HEIGHT(terminal) (((rows+1) * terminal->font.spacing)+OIA_TOP_MARGIN+2)
  39 + #define CONTENTS_HEIGHT(terminal) (((rows+2) * terminal->font.spacing)+OIA_TOP_MARGIN+2)
40 40  
41 41 /*--[ Globals ]--------------------------------------------------------------------------------------*/
42 42  
... ... @@ -56,11 +56,12 @@ const gchar * v3270_get_default_font_name()
56 56 void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int height)
57 57 {
58 58 // update font metrics
59   - int rows, cols, hFont, size;
  59 + unsigned int rows, cols, hFont, size;
60 60  
61 61 cairo_font_extents_t extents;
62 62  
63 63 lib3270_get_screen_size(terminal->host,&rows,&cols);
  64 + debug("Screen_size: %ux%u Scalled=%s",rows,cols,terminal->font.scaled ? "Yes" : "No");
64 65  
65 66 terminal->font.weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL;
66 67  
... ... @@ -143,7 +144,19 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int heig
143 144  
144 145 // Center image
145 146 size = CONTENTS_WIDTH(terminal);
146   - terminal->font.left = (width >> 1) - ((size) >> 1);
  147 +
  148 + if(width >= size) {
  149 +
  150 + terminal->font.left = ((width - size) / 2);
  151 +
  152 + } else {
  153 +
  154 + terminal->font.left = 0;
  155 + }
  156 +
  157 + // terminal->font.left = (width >> 1) - ((size) >> 1);
  158 +
  159 + debug("Width=%u size=%u left=%d",height, size, terminal->font.left);
147 160  
148 161 terminal->font.spacing = height / (rows+2);
149 162 if((int) terminal->font.spacing < hFont)
... ... @@ -151,7 +164,19 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int heig
151 164  
152 165 size = CONTENTS_HEIGHT(terminal);
153 166  
154   - terminal->font.top = (height >> 1) - (size >> 1);
  167 + if(height >= size) {
  168 +
  169 + terminal->font.top = ((height - size) /2);
  170 +
  171 + } else {
  172 +
  173 + terminal->font.top = 0;
  174 +
  175 + }
  176 +
  177 + //terminal->font.top = (height >> 1) - (size >> 1);
  178 +
  179 + debug("screen_height=%u content_height=%u top=%d",height, size, terminal->font.top);
155 180  
156 181 }
157 182  
... ...
src/terminal/iocallback.c
... ... @@ -148,7 +148,7 @@ static int static_RunTask(H3270 *hSession, int(*callback)(H3270 *, void *), void
148 148  
149 149 struct bgParameter p = { TRUE, hSession, -1, callback, parm };
150 150  
151   - trace("%s starts -------------------------------------", __FUNCTION__);
  151 +// trace("%s starts -------------------------------------", __FUNCTION__);
152 152  
153 153 p.running = TRUE;
154 154  
... ... @@ -167,7 +167,7 @@ static int static_RunTask(H3270 *hSession, int(*callback)(H3270 *, void *), void
167 167  
168 168 g_thread_join(thread);
169 169  
170   - trace("%s ends ---------------------------------------", __FUNCTION__);
  170 +// trace("%s ends ---------------------------------------", __FUNCTION__);
171 171  
172 172 return p.rc;
173 173  
... ...
src/terminal/oia.c
... ... @@ -104,7 +104,7 @@ static gint draw_spinner(cairo_t *cr, GdkRectangle *r, GdkRGBA *color, gint step
104 104 step++;
105 105 step %= num_steps;
106 106  
107   - debug("%s step=%d",__FUNCTION__,step);
  107 +// debug("%s step=%d",__FUNCTION__,step);
108 108  
109 109 for (i = 0; i < ((gint) num_steps); i++)
110 110 {
... ... @@ -1108,7 +1108,7 @@ void v3270_update_oia(v3270 *terminal, LIB3270_FLAG id, unsigned char on)
1108 1108 switch(id)
1109 1109 {
1110 1110 case LIB3270_FLAG_BOXSOLID:
1111   - debug("%s LIB3270_FLAG_BOXSOLID",__FUNCTION__);
  1111 +// debug("%s LIB3270_FLAG_BOXSOLID",__FUNCTION__);
1112 1112 cr = v3270_oia_set_update_region(terminal,&r,V3270_OIA_CONNECTION);
1113 1113 v3270_draw_connection(cr,terminal->host,&terminal->font,terminal->color,r);
1114 1114 cairo_destroy(cr);
... ... @@ -1116,25 +1116,25 @@ void v3270_update_oia(v3270 *terminal, LIB3270_FLAG id, unsigned char on)
1116 1116 break;
1117 1117  
1118 1118 case LIB3270_FLAG_UNDERA:
1119   - debug("%s LIB3270_FLAG_UNDERA",__FUNCTION__);
  1119 +// debug("%s LIB3270_FLAG_UNDERA",__FUNCTION__);
1120 1120 cr = v3270_oia_set_update_region(terminal,&r,V3270_OIA_UNDERA);
1121   - debug("%s LIB3270_FLAG_UNDERA",__FUNCTION__);
  1121 +// debug("%s LIB3270_FLAG_UNDERA",__FUNCTION__);
1122 1122 draw_undera(cr,terminal->host,&terminal->font,terminal->color,r);
1123   - debug("%s LIB3270_FLAG_UNDERA",__FUNCTION__);
  1123 +// debug("%s LIB3270_FLAG_UNDERA",__FUNCTION__);
1124 1124 cairo_destroy(cr);
1125   - debug("%s LIB3270_FLAG_UNDERA",__FUNCTION__);
  1125 +// debug("%s LIB3270_FLAG_UNDERA",__FUNCTION__);
1126 1126 v3270_queue_draw_area(GTK_WIDGET(terminal),r->x,r->y,r->width,r->height);
1127   - debug("%s LIB3270_FLAG_UNDERA",__FUNCTION__);
  1127 +// debug("%s LIB3270_FLAG_UNDERA",__FUNCTION__);
1128 1128 break;
1129 1129  
1130 1130 case LIB3270_FLAG_TYPEAHEAD:
1131   - debug("%s LIB3270_FLAG_TYPEAHEAD",__FUNCTION__);
  1131 +// debug("%s LIB3270_FLAG_TYPEAHEAD",__FUNCTION__);
1132 1132 v3270_oia_update_text_field(terminal,on,V3270_OIA_TYPEAHEAD,'T');
1133 1133 break;
1134 1134  
1135 1135 #ifdef HAVE_PRINTER
1136 1136 case LIB3270_FLAG_PRINTER:
1137   - debug("%s LIB3270_FLAG_PRINTER",__FUNCTION__);
  1137 +// debug("%s LIB3270_FLAG_PRINTER",__FUNCTION__);
1138 1138 v3270_oia_update_text_field(terminal,on,V3270_OIA_PRINTER,'P');
1139 1139 break;
1140 1140 #endif // HAVE_PRINTER
... ...
src/terminal/properties.c
... ... @@ -156,14 +156,14 @@
156 156  
157 157 size_t ix;
158 158  
159   - debug("Property %s=%u",g_param_spec_get_name(pspec),(unsigned int) property_id);
  159 +// debug("Property %s=%u",g_param_spec_get_name(pspec),(unsigned int) property_id);
160 160 g_object_class_install_property(oclass, property_id, pspec);
161 161  
162 162 for(ix = 0; ix < G_N_ELEMENTS(properties); ix++)
163 163 {
164 164 if(!g_ascii_strcasecmp(properties[ix].name,g_param_spec_get_name(pspec)))
165 165 {
166   - debug("Property \"%s\" is special",g_param_spec_get_name(pspec));
  166 +// debug("Property \"%s\" is special",g_param_spec_get_name(pspec));
167 167 *properties[ix].prop = pspec;
168 168 break;
169 169 }
... ... @@ -250,7 +250,7 @@
250 250 // Creating string properties.
251 251 for(ix = 0; str_props[ix].name; ix++)
252 252 {
253   - debug("Property %u=%s (String)",(unsigned int) v3270_properties.type.str + ix, str_props[ix].name);
  253 +// debug("Property %u=%s (String)",(unsigned int) v3270_properties.type.str + ix, str_props[ix].name);
254 254 spec = g_param_spec_string(str_props[ix].name, str_props[ix].name, str_props[ix].description, FALSE,(str_props[ix].set == NULL ? G_PARAM_READABLE : (G_PARAM_READABLE|G_PARAM_WRITABLE)));
255 255 v3270_install_property(gobject_class, v3270_properties.type.str + ix, spec);
256 256  
... ...
src/terminal/widget.c
... ... @@ -794,30 +794,12 @@ static void v3270_size_allocate(GtkWidget * widget, GtkAllocation * allocation)
794 794 g_return_if_fail(GTK_IS_V3270(widget));
795 795 g_return_if_fail(allocation != NULL);
796 796  
797   -#if GTK_CHECK_VERSION(2,18,0)
798 797 gtk_widget_set_allocation(widget, allocation);
799   -#else
800   - widget->allocation = *allocation;
801   -#endif // GTK(2,18)
802   -
803   -#if !GTK_CHECK_VERSION(3,0,0)
804   - {
805   - v3270 *terminal = GTK_V3270(widget);
806   -
807   - terminal->width = allocation->width;
808   - terminal->height = allocation->height;
809   - }
810   -#endif
811 798  
812 799 if(gtk_widget_get_realized(widget))
813 800 {
814   -#if GTK_CHECK_VERSION(2,18,0)
815 801 if(gtk_widget_get_has_window(widget))
816 802 gdk_window_move_resize(gtk_widget_get_window (widget),allocation->x, allocation->y,allocation->width, allocation->height);
817   -#else
818   - if(widget->window)
819   - gdk_window_move_resize(widget->window,allocation->x, allocation->y,allocation->width, allocation->height);
820   -#endif // GTK(2,18,0)
821 803  
822 804 v3270_reload(widget);
823 805 v3270_send_configure(GTK_V3270(widget));
... ...
src/trace/exec.c
... ... @@ -62,8 +62,51 @@
62 62 return rc;
63 63 }
64 64  
65   - static int set_property(H3270 *hSession, const gchar *name, const gchar * value)
  65 + static int set_property(GtkWidget *widget, const gchar *name, const gchar * value)
66 66 {
  67 +
  68 + GParamSpec * spec = g_object_class_find_property(G_OBJECT_GET_CLASS(widget),name);
  69 +
  70 + if(!spec) {
  71 + return errno = ENOENT;
  72 + }
  73 +
  74 + GValue val = G_VALUE_INIT;
  75 +
  76 + g_value_init(&val, spec->value_type);
  77 +
  78 + switch(spec->value_type)
  79 + {
  80 + case G_TYPE_STRING:
  81 + {
  82 + g_value_set_string(&val,value);
  83 + g_object_set_property(G_OBJECT(widget),name,&val);
  84 + }
  85 + break;
  86 +
  87 + case G_TYPE_BOOLEAN:
  88 + {
  89 + g_value_set_boolean(&val,(atoi(value) == 0 ? FALSE : TRUE));
  90 + g_object_set_property(G_OBJECT(widget),name,&val);
  91 + }
  92 + break;
  93 +
  94 + case G_TYPE_INT:
  95 + {
  96 + g_value_set_int(&val,atoi(value));
  97 + g_object_set_property(G_OBJECT(widget),name,&val);
  98 + }
  99 + break;
  100 +
  101 + default:
  102 + lib3270_write_trace(v3270_get_session(widget),"%s has an unexpected value type\n",spec->name);
  103 +
  104 + }
  105 +
  106 + g_value_unset(&val);
  107 + return 0;
  108 +
  109 + /*
67 110 size_t ix;
68 111  
69 112 debug("%s=%s",name,value);
... ... @@ -102,6 +145,7 @@
102 145 return sProp[ix].set(hSession,value);
103 146  
104 147 }
  148 + */
105 149  
106 150 return errno = ENOENT;
107 151  
... ... @@ -123,19 +167,19 @@
123 167 switch(spec->value_type)
124 168 {
125 169 case G_TYPE_STRING:
126   - lib3270_write_trace(v3270_get_session(widget),"%s=%s",spec->name,g_value_get_string(&val));
  170 + lib3270_write_trace(v3270_get_session(widget),"%s=%s\n",spec->name,g_value_get_string(&val));
127 171 break;
128 172  
129 173 case G_TYPE_BOOLEAN:
130   - lib3270_write_trace(v3270_get_session(widget),"%s=%s",spec->name,(g_value_get_boolean(&val) ? "true" : "false"));
  174 + lib3270_write_trace(v3270_get_session(widget),"%s=%s\n",spec->name,(g_value_get_boolean(&val) ? "true" : "false"));
131 175 break;
132 176  
133 177 case G_TYPE_INT:
134   - lib3270_write_trace(v3270_get_session(widget),"%s=%d",spec->name,g_value_get_int(&val));
  178 + lib3270_write_trace(v3270_get_session(widget),"%s=%d\n",spec->name,g_value_get_int(&val));
135 179 break;
136 180  
137 181 default:
138   - lib3270_write_trace(v3270_get_session(widget),"%s has an unexpected value type",spec->name);
  182 + lib3270_write_trace(v3270_get_session(widget),"%s has an unexpected value type\n",spec->name);
139 183  
140 184 }
141 185  
... ... @@ -161,6 +205,29 @@
161 205 return lib3270_reconnect(hSession,0);
162 206 }
163 207  
  208 + if(g_str_has_prefix(cmdline,"reload"))
  209 + {
  210 + v3270_reload(widget);
  211 + return 0;
  212 + }
  213 +
  214 + if(g_str_has_suffix(cmdline,"?"))
  215 + {
  216 + gchar * str = strchr(cmdline,'?');
  217 + *str = 0;
  218 + g_strstrip(cmdline);
  219 + return get_property(widget,cmdline);
  220 + }
  221 +
  222 + if(strchr(cmdline,'='))
  223 + {
  224 + gchar * value = strchr(cmdline,'=');
  225 + *(value++) = 0;
  226 + g_strstrip(cmdline);
  227 + g_strstrip(value);
  228 + return set_property(widget,cmdline,value);
  229 + }
  230 +
164 231 if(g_str_has_prefix(cmdline,"disconnect"))
165 232 {
166 233 return lib3270_disconnect(hSession);
... ... @@ -171,7 +238,7 @@
171 238 gchar *txtptr = cmdline+3;
172 239 const gchar * name = get_word(&txtptr);
173 240 g_strstrip(txtptr);
174   - return set_property(hSession,name,(*txtptr ? txtptr : "1"));
  241 + return set_property(widget,name,(*txtptr ? txtptr : "1"));
175 242 }
176 243  
177 244 if(g_str_has_prefix(cmdline,"get"))
... ... @@ -187,14 +254,14 @@
187 254 gchar *txtptr = cmdline+3;
188 255 const gchar * name = get_word(&txtptr);
189 256 g_strstrip(txtptr);
190   - return set_property(hSession,name,(*txtptr ? txtptr : "0"));
  257 + return set_property(widget,name,(*txtptr ? txtptr : "0"));
191 258 }
192 259  
193 260 gchar * sep = strchr(cmdline,'=');
194 261 if(sep)
195 262 {
196 263 *(sep++) = 0;
197   - return set_property(hSession,g_strstrip(cmdline),g_strstrip(sep));
  264 + return set_property(widget,g_strstrip(cmdline),g_strstrip(sep));
198 265 }
199 266 else
200 267 {
... ...