Commit 8e8ac837b2cb861c77c2b549b5e7b37663c4db12
1 parent
c38bd9b9
Exists in
master
and in
1 other branch
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
draw.c
@@ -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; |
widget.c
@@ -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) |