Commit 8e8ac837b2cb861c77c2b549b5e7b37663c4db12

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

Isolando estrutura de sessão para evitar que alterações na biblioteca causem que…

…bra de compatibilidade binária com o aplicativo principal ou plugins.
Showing 3 changed files with 43 additions and 39 deletions   Show diff stats
@@ -400,7 +400,7 @@ void v3270_reload(GtkWidget *widget) @@ -400,7 +400,7 @@ void v3270_reload(GtkWidget *widget)
400 400
401 void v3270_update_char(H3270 *session, int addr, unsigned char chr, unsigned short attr, unsigned char cursor) 401 void v3270_update_char(H3270 *session, int addr, unsigned char chr, unsigned short attr, unsigned char cursor)
402 { 402 {
403 - v3270 * terminal = GTK_V3270(session->user_data); 403 + v3270 * terminal = GTK_V3270(lib3270_get_user_data(session));
404 cairo_t * cr; 404 cairo_t * cr;
405 GdkRectangle rect; 405 GdkRectangle rect;
406 int rows,cols; 406 int rows,cols;
@@ -765,7 +765,7 @@ static void draw_cursor_position(cairo_t *cr, GdkRectangle *rect, v3270FontInfo @@ -765,7 +765,7 @@ static void draw_cursor_position(cairo_t *cr, GdkRectangle *rect, v3270FontInfo
765 765
766 void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, unsigned char c, unsigned short attr) 766 void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, unsigned char c, unsigned short attr)
767 { 767 {
768 - v3270 * terminal = GTK_V3270(session->user_data); 768 + v3270 * terminal = GTK_V3270(lib3270_get_user_data(session));
769 GdkRectangle saved; 769 GdkRectangle saved;
770 770
771 if(!terminal->surface) 771 if(!terminal->surface)
@@ -1081,9 +1081,7 @@ void v3270_stop_timer(GtkWidget *widget) @@ -1081,9 +1081,7 @@ void v3270_stop_timer(GtkWidget *widget)
1081 1081
1082 void v3270_update_ssl(H3270 *session, LIB3270_SSL_STATE state) 1082 void v3270_update_ssl(H3270 *session, LIB3270_SSL_STATE state)
1083 { 1083 {
1084 - debug("%s **************************************** %d",__FUNCTION__,(int) state);  
1085 -  
1086 - v3270 * terminal = GTK_V3270(session->user_data); 1084 + v3270 * terminal = GTK_V3270(lib3270_get_user_data(session));
1087 cairo_t * cr; 1085 cairo_t * cr;
1088 GdkRectangle * r; 1086 GdkRectangle * r;
1089 1087
@@ -1102,7 +1100,7 @@ void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on) @@ -1102,7 +1100,7 @@ void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on)
1102 cairo_t *cr; 1100 cairo_t *cr;
1103 GdkRectangle *r; 1101 GdkRectangle *r;
1104 1102
1105 - v3270 *terminal = GTK_V3270(session->user_data); 1103 + v3270 *terminal = GTK_V3270(lib3270_get_user_data(session));
1106 1104
1107 if(!(terminal->surface && terminal->drawing)) 1105 if(!(terminal->surface && terminal->drawing))
1108 return; 1106 return;
@@ -639,7 +639,7 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int heig @@ -639,7 +639,7 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int heig
639 639
640 static void set_timer(H3270 *session, unsigned char on) 640 static void set_timer(H3270 *session, unsigned char on)
641 { 641 {
642 - GtkWidget *widget = GTK_WIDGET(session->user_data); 642 + GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session));
643 643
644 if(on) 644 if(on)
645 v3270_start_timer(widget); 645 v3270_start_timer(widget);
@@ -650,6 +650,8 @@ static void set_timer(H3270 *session, unsigned char on) @@ -650,6 +650,8 @@ static void set_timer(H3270 *session, unsigned char on)
650 650
651 static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, LIB3270_TOGGLE_TYPE reason, const char *name) 651 static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, LIB3270_TOGGLE_TYPE reason, const char *name)
652 { 652 {
  653 + GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session));
  654 +
653 trace("Toggle %s is %s",name,value ? "ON" : "OFF"); 655 trace("Toggle %s is %s",name,value ? "ON" : "OFF");
654 656
655 switch(ix) 657 switch(ix)
@@ -665,29 +667,29 @@ static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value @@ -665,29 +667,29 @@ static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value
665 case LIB3270_TOGGLE_UNDERLINE: 667 case LIB3270_TOGGLE_UNDERLINE:
666 case LIB3270_TOGGLE_VIEW_FIELD: 668 case LIB3270_TOGGLE_VIEW_FIELD:
667 case LIB3270_TOGGLE_ALTSCREEN: 669 case LIB3270_TOGGLE_ALTSCREEN:
668 - v3270_reload(GTK_WIDGET(session->user_data));  
669 - gtk_widget_queue_draw(GTK_WIDGET(session->user_data)); 670 + v3270_reload(widget);
  671 + gtk_widget_queue_draw(widget);
670 break; 672 break;
671 673
672 case LIB3270_TOGGLE_CURSOR_BLINK: 674 case LIB3270_TOGGLE_CURSOR_BLINK:
673 - GTK_V3270(session->user_data)->cursor.show |= 1; 675 + GTK_V3270(widget)->cursor.show |= 1;
674 break; 676 break;
675 677
676 case LIB3270_TOGGLE_INSERT: 678 case LIB3270_TOGGLE_INSERT:
677 - v3270_draw_ins_status(GTK_V3270(session->user_data));  
678 - v3270_cursor_draw(GTK_V3270(session->user_data)); 679 + v3270_draw_ins_status(GTK_V3270(widget));
  680 + v3270_cursor_draw(GTK_V3270(widget));
679 break; 681 break;
680 682
681 case LIB3270_TOGGLE_BOLD: 683 case LIB3270_TOGGLE_BOLD:
682 - v3270_reload(GTK_WIDGET(session->user_data));  
683 - gtk_widget_queue_draw(GTK_WIDGET(session->user_data)); 684 + v3270_reload(widget);
  685 + gtk_widget_queue_draw(widget);
684 break; 686 break;
685 687
686 case LIB3270_TOGGLE_FULL_SCREEN: 688 case LIB3270_TOGGLE_FULL_SCREEN:
687 if(value) 689 if(value)
688 - gtk_window_fullscreen(GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(session->user_data)))); 690 + gtk_window_fullscreen(GTK_WINDOW(gtk_widget_get_toplevel(widget)));
689 else 691 else
690 - gtk_window_unfullscreen(GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(session->user_data)))); 692 + gtk_window_unfullscreen(GTK_WINDOW(gtk_widget_get_toplevel(widget)));
691 693
692 break; 694 break;
693 695
@@ -709,27 +711,27 @@ static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value @@ -709,27 +711,27 @@ static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value
709 711
710 } 712 }
711 #if GTK_CHECK_VERSION(2,26,0) 713 #if GTK_CHECK_VERSION(2,26,0)
712 - g_object_notify_by_pspec(G_OBJECT(session->user_data), v3270_properties[PROP_TOGGLE+ix]); 714 + g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties[PROP_TOGGLE+ix]);
713 #else 715 #else
714 - g_object_notify(G_OBJECT(session->user_data),name); 716 + g_object_notify(G_OBJECT(widget),name);
715 #endif // GTK_CHECK_VERSION 717 #endif // GTK_CHECK_VERSION
716 718
717 - g_signal_emit(GTK_WIDGET(session->user_data), v3270_widget_signal[SIGNAL_TOGGLE_CHANGED], 0, (guint) ix, (gboolean) (value != 0), (gchar *) name); 719 + g_signal_emit(widget, v3270_widget_signal[SIGNAL_TOGGLE_CHANGED], 0, (guint) ix, (gboolean) (value != 0), (gchar *) name);
718 } 720 }
719 721
720 static void update_message(H3270 *session, LIB3270_MESSAGE id) 722 static void update_message(H3270 *session, LIB3270_MESSAGE id)
721 { 723 {
722 - g_signal_emit(GTK_WIDGET(session->user_data), v3270_widget_signal[SIGNAL_MESSAGE_CHANGED], 0, (gint) id); 724 + g_signal_emit(GTK_WIDGET(lib3270_get_user_data(session)), v3270_widget_signal[SIGNAL_MESSAGE_CHANGED], 0, (gint) id);
723 } 725 }
724 726
725 static void update_luname(H3270 *session, const char *name) 727 static void update_luname(H3270 *session, const char *name)
726 { 728 {
727 - v3270_update_luname(GTK_WIDGET(session->user_data),name); 729 + v3270_update_luname(GTK_WIDGET(lib3270_get_user_data(session)),name);
728 } 730 }
729 731
730 static void select_cursor(H3270 *session, LIB3270_CURSOR id) 732 static void select_cursor(H3270 *session, LIB3270_CURSOR id)
731 { 733 {
732 - GtkWidget *widget = GTK_WIDGET(session->user_data); 734 + GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session));
733 735
734 #if GTK_CHECK_VERSION(2,20,0) 736 #if GTK_CHECK_VERSION(2,20,0)
735 if(gtk_widget_get_realized(widget) && gtk_widget_get_has_window(widget)) 737 if(gtk_widget_get_realized(widget) && gtk_widget_get_has_window(widget))
@@ -744,7 +746,7 @@ static void select_cursor(H3270 *session, LIB3270_CURSOR id) @@ -744,7 +746,7 @@ static void select_cursor(H3270 *session, LIB3270_CURSOR id)
744 746
745 static void ctlr_done(H3270 *session) 747 static void ctlr_done(H3270 *session)
746 { 748 {
747 - GtkWidget *widget = GTK_WIDGET(session->user_data); 749 + GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session));
748 750
749 #if GTK_CHECK_VERSION(2,20,0) 751 #if GTK_CHECK_VERSION(2,20,0)
750 if(gtk_widget_get_realized(widget) && gtk_widget_get_has_window(widget)) 752 if(gtk_widget_get_realized(widget) && gtk_widget_get_has_window(widget))
@@ -759,14 +761,14 @@ static void ctlr_done(H3270 *session) @@ -759,14 +761,14 @@ static void ctlr_done(H3270 *session)
759 761
760 static void update_connect(H3270 *session, unsigned char connected) 762 static void update_connect(H3270 *session, unsigned char connected)
761 { 763 {
762 - v3270 *widget = GTK_V3270(session->user_data); 764 + v3270 *widget = GTK_V3270(lib3270_get_user_data(session));
763 765
764 trace("%s - %s",__FUNCTION__,connected ? "Connected" : "Disconnected"); 766 trace("%s - %s",__FUNCTION__,connected ? "Connected" : "Disconnected");
765 767
766 if(connected) 768 if(connected)
767 { 769 {
768 widget->cursor.show |= 2; 770 widget->cursor.show |= 2;
769 - g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[SIGNAL_CONNECTED], 0, session->host.full); 771 + g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[SIGNAL_CONNECTED], 0, lib3270_get_host(session));
770 } 772 }
771 else 773 else
772 { 774 {
@@ -788,23 +790,23 @@ static void update_connect(H3270 *session, unsigned char connected) @@ -788,23 +790,23 @@ static void update_connect(H3270 *session, unsigned char connected)
788 static void update_screen_size(H3270 *session,unsigned short rows, unsigned short cols) 790 static void update_screen_size(H3270 *session,unsigned short rows, unsigned short cols)
789 { 791 {
790 // trace("Widget %p changes to %dx%d",session->widget,cols,rows); 792 // trace("Widget %p changes to %dx%d",session->widget,cols,rows);
791 - v3270_reload(GTK_WIDGET(session->user_data));  
792 - gtk_widget_queue_draw(GTK_WIDGET(session->user_data)); 793 + v3270_reload(GTK_WIDGET(lib3270_get_user_data(session)));
  794 + gtk_widget_queue_draw(GTK_WIDGET(lib3270_get_user_data(session)));
793 } 795 }
794 796
795 static void update_model(H3270 *session, const char *name, int model, int rows, int cols) 797 static void update_model(H3270 *session, const char *name, int model, int rows, int cols)
796 { 798 {
797 #if GTK_CHECK_VERSION(2,26,0) 799 #if GTK_CHECK_VERSION(2,26,0)
798 - g_object_notify_by_pspec(G_OBJECT(session->user_data), v3270_properties[PROP_MODEL]); 800 + g_object_notify_by_pspec(G_OBJECT(lib3270_get_user_data(session)), v3270_properties[PROP_MODEL]);
799 #else 801 #else
800 - g_object_notify(G_OBJECT(session->user_data),"model"); 802 + g_object_notify(G_OBJECT(lib3270_get_user_data(session)),"model");
801 #endif // GTK_CHECK_VERSION 803 #endif // GTK_CHECK_VERSION
802 - g_signal_emit(GTK_WIDGET(session->user_data),v3270_widget_signal[SIGNAL_MODEL_CHANGED], 0, (guint) model, name); 804 + g_signal_emit(GTK_WIDGET(lib3270_get_user_data(session)),v3270_widget_signal[SIGNAL_MODEL_CHANGED], 0, (guint) model, name);
803 } 805 }
804 806
805 static void changed(H3270 *session, int offset, int len) 807 static void changed(H3270 *session, int offset, int len)
806 { 808 {
807 - GtkWidget * widget = session->user_data; 809 + GtkWidget * widget = lib3270_get_user_data(session);
808 GtkAccessible * obj = GTK_V3270(widget)->accessible; 810 GtkAccessible * obj = GTK_V3270(widget)->accessible;
809 811
810 #ifdef WIN32 812 #ifdef WIN32
@@ -863,7 +865,7 @@ static void changed(H3270 *session, int offset, int len) @@ -863,7 +865,7 @@ static void changed(H3270 *session, int offset, int len)
863 865
864 static void set_selection(H3270 *session, unsigned char status) 866 static void set_selection(H3270 *session, unsigned char status)
865 { 867 {
866 - GtkWidget * widget = GTK_WIDGET(session->user_data); 868 + GtkWidget * widget = GTK_WIDGET(lib3270_get_user_data(session));
867 869
868 #if GTK_CHECK_VERSION(2,26,0) 870 #if GTK_CHECK_VERSION(2,26,0)
869 g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties[PROP_SELECTION]); 871 g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties[PROP_SELECTION]);
@@ -877,7 +879,7 @@ static void set_selection(H3270 *session, unsigned char status) @@ -877,7 +879,7 @@ static void set_selection(H3270 *session, unsigned char status)
877 static void update_selection(H3270 *session, int start, int end) 879 static void update_selection(H3270 *session, int start, int end)
878 { 880 {
879 // Selected region changed 881 // Selected region changed
880 - GtkWidget * widget = GTK_WIDGET(session->user_data); 882 + GtkWidget * widget = GTK_WIDGET(lib3270_get_user_data(session));
881 GtkAccessible * atk_obj = GTK_V3270(widget)->accessible; 883 GtkAccessible * atk_obj = GTK_V3270(widget)->accessible;
882 884
883 if(atk_obj) 885 if(atk_obj)
@@ -887,7 +889,7 @@ static void update_selection(H3270 *session, int start, int end) @@ -887,7 +889,7 @@ static void update_selection(H3270 *session, int start, int end)
887 889
888 static void message(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *text) 890 static void message(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *text)
889 { 891 {
890 - g_signal_emit( GTK_WIDGET(session->user_data), v3270_widget_signal[SIGNAL_MESSAGE], 0, 892 + g_signal_emit( GTK_WIDGET(lib3270_get_user_data(session)), v3270_widget_signal[SIGNAL_MESSAGE], 0,
891 (int) id, 893 (int) id,
892 (gchar *) title, 894 (gchar *) title,
893 (gchar *) message, 895 (gchar *) message,
@@ -897,7 +899,7 @@ static void message(H3270 *session, LIB3270_NOTIFY id , const char *title, const @@ -897,7 +899,7 @@ static void message(H3270 *session, LIB3270_NOTIFY id , const char *title, const
897 899
898 static int emit_print_signal(H3270 *session) 900 static int emit_print_signal(H3270 *session)
899 { 901 {
900 - g_signal_emit(GTK_WIDGET(session->user_data), v3270_widget_signal[SIGNAL_PRINT], 0); 902 + g_signal_emit(GTK_WIDGET(lib3270_get_user_data(session)), v3270_widget_signal[SIGNAL_PRINT], 0);
901 return 0; 903 return 0;
902 } 904 }
903 905
@@ -920,10 +922,11 @@ static void v3270_init(v3270 *widget) @@ -920,10 +922,11 @@ static void v3270_init(v3270 *widget)
920 { 922 {
921 struct lib3270_session_callbacks *cbk; 923 struct lib3270_session_callbacks *cbk;
922 924
923 - widget->host = lib3270_session_new("");  
924 - widget->host->user_data = widget; 925 + widget->host = lib3270_session_new("");
925 926
  927 + lib3270_set_user_data(widget->host,widget);
926 928
  929 + /*
927 trace("%s host->sz=%d expected=%d revision=%s expected=%s",__FUNCTION__,widget->host->sz,(int) sizeof(H3270),lib3270_get_revision(),PACKAGE_REVISION); 930 trace("%s host->sz=%d expected=%d revision=%s expected=%s",__FUNCTION__,widget->host->sz,(int) sizeof(H3270),lib3270_get_revision(),PACKAGE_REVISION);
928 931
929 if(widget->host->sz != sizeof(H3270)) 932 if(widget->host->sz != sizeof(H3270))
@@ -931,6 +934,7 @@ static void v3270_init(v3270 *widget) @@ -931,6 +934,7 @@ static void v3270_init(v3270 *widget)
931 g_error( _( "Unexpected signature in H3270 object, possible version mismatch in lib3270") ); 934 g_error( _( "Unexpected signature in H3270 object, possible version mismatch in lib3270") );
932 return; 935 return;
933 } 936 }
  937 + */
934 938
935 cbk = lib3270_get_session_callbacks(widget->host,sizeof(struct lib3270_session_callbacks)); 939 cbk = lib3270_get_session_callbacks(widget->host,sizeof(struct lib3270_session_callbacks));
936 if(!cbk) 940 if(!cbk)
@@ -1689,13 +1693,15 @@ GtkWidget * v3270_get_default_widget(void) @@ -1689,13 +1693,15 @@ GtkWidget * v3270_get_default_widget(void)
1689 return NULL; 1693 return NULL;
1690 } 1694 }
1691 1695
1692 - if(!(hSession->user_data && GTK_IS_V3270(hSession->user_data))) 1696 + GtkWidget *widget = lib3270_get_user_data(hSession);
  1697 +
  1698 + if(!(widget && GTK_IS_V3270(widget)))
1693 { 1699 {
1694 g_warning("No widget on default session on %s",__FUNCTION__); 1700 g_warning("No widget on default session on %s",__FUNCTION__);
1695 return NULL; 1701 return NULL;
1696 } 1702 }
1697 1703
1698 - return GTK_WIDGET(hSession->user_data); 1704 + return GTK_WIDGET(widget);
1699 } 1705 }
1700 1706
1701 void v3270_disable_updates(GtkWidget *widget) 1707 void v3270_disable_updates(GtkWidget *widget)