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) | ... | ... |