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 | 400 | |
401 | 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 | 404 | cairo_t * cr; |
405 | 405 | GdkRectangle rect; |
406 | 406 | int rows,cols; | ... | ... |
... | ... | @@ -765,7 +765,7 @@ static void draw_cursor_position(cairo_t *cr, GdkRectangle *rect, v3270FontInfo |
765 | 765 | |
766 | 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 | 769 | GdkRectangle saved; |
770 | 770 | |
771 | 771 | if(!terminal->surface) |
... | ... | @@ -1081,9 +1081,7 @@ void v3270_stop_timer(GtkWidget *widget) |
1081 | 1081 | |
1082 | 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 | 1085 | cairo_t * cr; |
1088 | 1086 | GdkRectangle * r; |
1089 | 1087 | |
... | ... | @@ -1102,7 +1100,7 @@ void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on) |
1102 | 1100 | cairo_t *cr; |
1103 | 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 | 1105 | if(!(terminal->surface && terminal->drawing)) |
1108 | 1106 | return; | ... | ... |
widget.c
... | ... | @@ -639,7 +639,7 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int heig |
639 | 639 | |
640 | 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 | 644 | if(on) |
645 | 645 | v3270_start_timer(widget); |
... | ... | @@ -650,6 +650,8 @@ static void set_timer(H3270 *session, unsigned char on) |
650 | 650 | |
651 | 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 | 655 | trace("Toggle %s is %s",name,value ? "ON" : "OFF"); |
654 | 656 | |
655 | 657 | switch(ix) |
... | ... | @@ -665,29 +667,29 @@ static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value |
665 | 667 | case LIB3270_TOGGLE_UNDERLINE: |
666 | 668 | case LIB3270_TOGGLE_VIEW_FIELD: |
667 | 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 | 672 | break; |
671 | 673 | |
672 | 674 | case LIB3270_TOGGLE_CURSOR_BLINK: |
673 | - GTK_V3270(session->user_data)->cursor.show |= 1; | |
675 | + GTK_V3270(widget)->cursor.show |= 1; | |
674 | 676 | break; |
675 | 677 | |
676 | 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 | 681 | break; |
680 | 682 | |
681 | 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 | 686 | break; |
685 | 687 | |
686 | 688 | case LIB3270_TOGGLE_FULL_SCREEN: |
687 | 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 | 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 | 694 | break; |
693 | 695 | |
... | ... | @@ -709,27 +711,27 @@ static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value |
709 | 711 | |
710 | 712 | } |
711 | 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 | 715 | #else |
714 | - g_object_notify(G_OBJECT(session->user_data),name); | |
716 | + g_object_notify(G_OBJECT(widget),name); | |
715 | 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 | 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 | 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 | 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 | 736 | #if GTK_CHECK_VERSION(2,20,0) |
735 | 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 | 746 | |
745 | 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 | 751 | #if GTK_CHECK_VERSION(2,20,0) |
750 | 752 | if(gtk_widget_get_realized(widget) && gtk_widget_get_has_window(widget)) |
... | ... | @@ -759,14 +761,14 @@ static void ctlr_done(H3270 *session) |
759 | 761 | |
760 | 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 | 766 | trace("%s - %s",__FUNCTION__,connected ? "Connected" : "Disconnected"); |
765 | 767 | |
766 | 768 | if(connected) |
767 | 769 | { |
768 | 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 | 773 | else |
772 | 774 | { |
... | ... | @@ -788,23 +790,23 @@ static void update_connect(H3270 *session, unsigned char connected) |
788 | 790 | static void update_screen_size(H3270 *session,unsigned short rows, unsigned short cols) |
789 | 791 | { |
790 | 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 | 797 | static void update_model(H3270 *session, const char *name, int model, int rows, int cols) |
796 | 798 | { |
797 | 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 | 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 | 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 | 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 | 810 | GtkAccessible * obj = GTK_V3270(widget)->accessible; |
809 | 811 | |
810 | 812 | #ifdef WIN32 |
... | ... | @@ -863,7 +865,7 @@ static void changed(H3270 *session, int offset, int len) |
863 | 865 | |
864 | 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 | 870 | #if GTK_CHECK_VERSION(2,26,0) |
869 | 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 | 879 | static void update_selection(H3270 *session, int start, int end) |
878 | 880 | { |
879 | 881 | // Selected region changed |
880 | - GtkWidget * widget = GTK_WIDGET(session->user_data); | |
882 | + GtkWidget * widget = GTK_WIDGET(lib3270_get_user_data(session)); | |
881 | 883 | GtkAccessible * atk_obj = GTK_V3270(widget)->accessible; |
882 | 884 | |
883 | 885 | if(atk_obj) |
... | ... | @@ -887,7 +889,7 @@ static void update_selection(H3270 *session, int start, int end) |
887 | 889 | |
888 | 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 | 893 | (int) id, |
892 | 894 | (gchar *) title, |
893 | 895 | (gchar *) message, |
... | ... | @@ -897,7 +899,7 @@ static void message(H3270 *session, LIB3270_NOTIFY id , const char *title, const |
897 | 899 | |
898 | 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 | 903 | return 0; |
902 | 904 | } |
903 | 905 | |
... | ... | @@ -920,10 +922,11 @@ static void v3270_init(v3270 *widget) |
920 | 922 | { |
921 | 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 | 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 | 932 | if(widget->host->sz != sizeof(H3270)) |
... | ... | @@ -931,6 +934,7 @@ static void v3270_init(v3270 *widget) |
931 | 934 | g_error( _( "Unexpected signature in H3270 object, possible version mismatch in lib3270") ); |
932 | 935 | return; |
933 | 936 | } |
937 | + */ | |
934 | 938 | |
935 | 939 | cbk = lib3270_get_session_callbacks(widget->host,sizeof(struct lib3270_session_callbacks)); |
936 | 940 | if(!cbk) |
... | ... | @@ -1689,13 +1693,15 @@ GtkWidget * v3270_get_default_widget(void) |
1689 | 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 | 1700 | g_warning("No widget on default session on %s",__FUNCTION__); |
1695 | 1701 | return NULL; |
1696 | 1702 | } |
1697 | 1703 | |
1698 | - return GTK_WIDGET(hSession->user_data); | |
1704 | + return GTK_WIDGET(widget); | |
1699 | 1705 | } |
1700 | 1706 | |
1701 | 1707 | void v3270_disable_updates(GtkWidget *widget) | ... | ... |