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
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;
... ...
oia.c
... ... @@ -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)
... ...