From f28e2c9964a9323e8a847e546c37955de03afd60 Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Wed, 13 Jun 2012 12:24:28 +0000 Subject: [PATCH] Ajustes para compilar numa versão um pouco mais antiga do gtk posto que o gtk3 para windows está muito instável --- configure.ac | 9 +++++++-- src/pw3270/common/config.c | 6 +++++- src/pw3270/filetransfer.c | 4 ++++ src/pw3270/main.c | 5 +++++ src/pw3270/uiparser/parsefile.c | 1 - src/pw3270/uiparser/toolbar.c | 5 +++++ src/pw3270/uiparser/toolitem.c | 4 ++++ src/pw3270/v3270/accessible.c | 14 ++++++++++++-- src/pw3270/v3270/private.h | 4 ++++ src/pw3270/v3270/widget.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- src/pw3270/window.c | 2 +- 11 files changed, 118 insertions(+), 10 deletions(-) diff --git a/configure.ac b/configure.ac index 253d236..51092bb 100644 --- a/configure.ac +++ b/configure.ac @@ -110,6 +110,7 @@ case "$host" in DLLEXT=".dll" EXEEXT=".exe" SOCKET_LIBS="-lws2_32" + CFLAGS="$CFLAGS -mms-bitfields" AC_PATH_TOOL([STRIP], [strip]) ;; @@ -201,7 +202,11 @@ AC_ARG_ENABLE([pic], [ app_cv_pic="$enableval" ],[ - app_cv_pic="yes" + if test "$host_cpu" = "x86_64"; then + app_cv_pic="yes" + else + app_cv_pic="no" + fi ]) if test "$app_cv_pic" == "yes"; then @@ -227,7 +232,7 @@ AC_CHECK_FUNCS(getaddrinfo, AC_DEFINE(HAVE_GETADDRINFO) ) PKG_CHECK_EXISTS -PKG_CHECK_MODULES( [GTK], [gtk+-3.0], [ GTK_VERSION="3" ], [ PKG_CHECK_MODULES( [GTK], [gtk+-2.0 >= 2.8], [ GTK_VERSION="2" ] ) ], [ ] ) +PKG_CHECK_MODULES( [GTK], [gtk+-3.0], [ GTK_VERSION="3" ], [ PKG_CHECK_MODULES( [GTK], [gtk+-2.0 >= 2.8 gthread-2.0 gmodule-2.0], [ GTK_VERSION="2" ] ) ], [ ] ) AC_SUBST(GTK_LIBS) AC_SUBST(GTK_CFLAGS) diff --git a/src/pw3270/common/config.c b/src/pw3270/common/config.c index 49402ab..b569aec 100644 --- a/src/pw3270/common/config.c +++ b/src/pw3270/common/config.c @@ -336,7 +336,11 @@ gchar * get_last_error_msg(void) BYTE * data; if(!registry_open_key(group,KEY_READ,&key_handle)) - return g_strdup(def); + { + if(def) + return g_strdup(def); + return NULL; + } data = (BYTE *) g_malloc0(datalen+2); diff --git a/src/pw3270/filetransfer.c b/src/pw3270/filetransfer.c index a4dc93d..8b57500 100644 --- a/src/pw3270/filetransfer.c +++ b/src/pw3270/filetransfer.c @@ -422,7 +422,11 @@ static void run_ft_dialog(GObject *action, GtkWidget *widget, struct ftdialog *d &msg ); +#if GTK_CHECK_VERSION(2,18,0) gtk_widget_set_visible(dlg->dialog,FALSE); +#else + gtk_widget_hide(dlg->dialog); +#endif // GTK(2,18,0) if(msg) { diff --git a/src/pw3270/main.c b/src/pw3270/main.c index 806a22a..5db07fc 100644 --- a/src/pw3270/main.c +++ b/src/pw3270/main.c @@ -29,6 +29,7 @@ * */ +#include #include "globals.h" #include "v3270/v3270.h" #include "v3270/accessible.h" @@ -151,6 +152,10 @@ int main(int argc, char *argv[]) g_option_context_add_main_entries(options, app_options, NULL); +#if ! GLIB_CHECK_VERSION(2,32,0) + g_thread_init(NULL); +#endif // !GLIB(2,32) + gtk_init(&argc, &argv); if(!g_option_context_parse( options, &argc, &argv, &error )) diff --git a/src/pw3270/uiparser/parsefile.c b/src/pw3270/uiparser/parsefile.c index 696a9dd..7ec55ac 100644 --- a/src/pw3270/uiparser/parsefile.c +++ b/src/pw3270/uiparser/parsefile.c @@ -224,7 +224,6 @@ { g_object_set_data(G_OBJECT(widget),"parent",info->element); info->element = G_OBJECT(widget); - gtk_widget_set_visible(widget,ui_get_bool_attribute("visible",names,values,TRUE)); #if GTK_CHECK_VERSION(2,18,0) gtk_widget_set_visible(widget,ui_get_bool_attribute("visible",names,values,TRUE)); diff --git a/src/pw3270/uiparser/toolbar.c b/src/pw3270/uiparser/toolbar.c index 4df27a9..dda7888 100644 --- a/src/pw3270/uiparser/toolbar.c +++ b/src/pw3270/uiparser/toolbar.c @@ -65,7 +65,12 @@ } widget = gtk_toolbar_new(); + +#if GTK_CHECK_VERSION(2,18,0) gtk_widget_set_can_focus(widget,FALSE); +#else + GTK_WIDGET_UNSET_FLAGS(widget,GTK_CAN_FOCUS); +#endif // GTK(2,18) if(ui_get_attribute("label",names,values)) { diff --git a/src/pw3270/uiparser/toolitem.c b/src/pw3270/uiparser/toolitem.c index 6cbc604..0f6042a 100644 --- a/src/pw3270/uiparser/toolitem.c +++ b/src/pw3270/uiparser/toolitem.c @@ -63,7 +63,11 @@ } } +#if GTK_CHECK_VERSION(2,18,0) gtk_widget_set_can_focus(widget,FALSE); +#else + GTK_WIDGET_UNSET_FLAGS(widget,GTK_CAN_FOCUS); +#endif // GTK(2,18) gtk_toolbar_insert(GTK_TOOLBAR(info->element),GTK_TOOL_ITEM(widget),-1); diff --git a/src/pw3270/v3270/accessible.c b/src/pw3270/v3270/accessible.c index 8d004bc..4466734 100644 --- a/src/pw3270/v3270/accessible.c +++ b/src/pw3270/v3270/accessible.c @@ -147,8 +147,13 @@ static gboolean v3270_accessible_do_action(AtkAction *action, gint i) if(widget == NULL) return FALSE; - if(!gtk_widget_get_sensitive (widget) || !gtk_widget_get_visible (widget)) +#if GTK_CHECK_VERSION(2,18,0) + if(!gtk_widget_get_sensitive(widget) || !gtk_widget_get_visible(widget)) return FALSE; +#else + if(!GTK_WIDGET_SENSITIVE(widget) || !GTK_WIDGET_VISIBLE(widget)) + return FALSE; +#endif // GTK(2,18,0) if (i != 0) return FALSE; @@ -747,7 +752,12 @@ static gboolean v3270_accessible_grab_focus(AtkComponent *component) gtk_widget_grab_focus (widget); toplevel = gtk_widget_get_toplevel (widget); - if (gtk_widget_is_toplevel (toplevel)) + +#if GTK_CHECK_VERSION(2,20,0) + if(gtk_widget_is_toplevel(toplevel)) +#else + if(GTK_WIDGET_TOPLEVEL(toplevel)) +#endif // GTK(2,20,0) { #ifdef GDK_WINDOWING_X11 gtk_window_present_with_time (GTK_WINDOW (toplevel),gdk_x11_get_server_time(gtk_widget_get_window(widget))); diff --git a/src/pw3270/v3270/private.h b/src/pw3270/v3270/private.h index 60c77f2..6fc35e1 100644 --- a/src/pw3270/v3270/private.h +++ b/src/pw3270/v3270/private.h @@ -194,6 +194,10 @@ gboolean v3270_draw(GtkWidget * widget, cairo_t * cr); void v3270_draw_oia(cairo_t *cr, H3270 *host, int row, int cols, struct v3270_metrics *metrics, GdkColor *color, GdkRectangle *rect); void v3270_update_mouse_pointer(GtkWidget *widget); +#if ! GTK_CHECK_VERSION(2,18,0) + G_GNUC_INTERNAL void gtk_widget_get_allocation(GtkWidget *widget,GtkAllocation *allocation); +#endif // !GTK(2,18) + #if ! GTK_CHECK_VERSION(2,20,0) #define gtk_widget_get_realized(w) GTK_WIDGET_REALIZED(w) #define gtk_widget_set_realized(w,r) if(r) { GTK_WIDGET_SET_FLAGS(w,GTK_REALIZED); } else { GTK_WIDGET_UNSET_FLAGS(w,GTK_REALIZED); } diff --git a/src/pw3270/v3270/widget.c b/src/pw3270/v3270/widget.c index 5d5058f..67ccf40 100644 --- a/src/pw3270/v3270/widget.c +++ b/src/pw3270/v3270/widget.c @@ -635,7 +635,11 @@ static void select_cursor(H3270 *session, LIB3270_CURSOR id) { GtkWidget *widget = GTK_WIDGET(session->widget); +#if GTK_CHECK_VERSION(2,20,0) if(gtk_widget_get_realized(widget) && gtk_widget_get_has_window(widget)) +#else + if(GTK_WIDGET_REALIZED(widget) && widget->window) +#endif // GTK(2,20) { GTK_V3270(widget)->pointer_id = id; v3270_update_mouse_pointer(widget); @@ -646,7 +650,11 @@ static void ctlr_done(H3270 *session) { GtkWidget *widget = GTK_WIDGET(session->widget); +#if GTK_CHECK_VERSION(2,20,0) if(gtk_widget_get_realized(widget) && gtk_widget_get_has_window(widget)) +#else + if(GTK_WIDGET_REALIZED(widget) && widget->window) +#endif // GTK(2,20) { v3270_update_mouse_pointer(widget); } @@ -764,7 +772,7 @@ static void v3270_init(v3270 *widget) { widget->host = lib3270_session_new(""); - trace("%s",__FUNCTION__); + trace("%s host->sz=%d expected=%d revision=%s expected=%s",__FUNCTION__,widget->host->sz,sizeof(H3270),lib3270_get_revision(),PACKAGE_REVISION); if(widget->host->sz != sizeof(H3270)) { @@ -799,8 +807,12 @@ static void v3270_init(v3270 *widget) widget->input_method = gtk_im_multicontext_new(); g_signal_connect(G_OBJECT(widget->input_method),"commit",G_CALLBACK(v3270_key_commit),widget); +#if GTK_CHECK_VERSION(2,18,0) gtk_widget_set_can_default(GTK_WIDGET(widget),TRUE); gtk_widget_set_can_focus(GTK_WIDGET(widget),TRUE); +#else + GTK_WIDGET_SET_FLAGS(GTK_WIDGET(widget),(GTK_CAN_DEFAULT|GTK_CAN_FOCUS)); +#endif // GTK(2,18) // Setup events gtk_widget_add_events(GTK_WIDGET(widget),GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK|GDK_BUTTON_PRESS_MASK|GDK_BUTTON_MOTION_MASK|GDK_BUTTON_RELEASE_MASK|GDK_POINTER_MOTION_MASK|GDK_ENTER_NOTIFY_MASK); @@ -915,6 +927,7 @@ static void release_timer(v3270 *widget) static void v3270_realize(GtkWidget * widget) { +#if GTK_CHECK_VERSION(2,18,0) if(!gtk_widget_get_has_window(widget)) { GTK_WIDGET_CLASS(v3270_parent_class)->realize(widget); @@ -926,7 +939,6 @@ static void v3270_realize(GtkWidget * widget) GdkWindowAttr attributes; gint attributes_mask; - gtk_widget_set_realized (widget, TRUE); gtk_widget_get_allocation (widget, &allocation); @@ -949,6 +961,44 @@ static void v3270_realize(GtkWidget * widget) gtk_im_context_set_client_window(GTK_V3270(widget)->input_method,window); } +#else + { + if(GTK_WIDGET_NO_WINDOW (widget)) + { + GTK_WIDGET_CLASS(v3270_parent_class)->realize (widget); + } + else + { + GdkWindowAttr attributes; + gint attributes_mask; + + GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); + + memset(&attributes,0,sizeof(attributes)); + + attributes.window_type = GDK_WINDOW_CHILD; + attributes.x = widget->allocation.x; + attributes.y = widget->allocation.y; + attributes.width = widget->allocation.width; + attributes.height = widget->allocation.height; + attributes.wclass = GDK_INPUT_OUTPUT; + attributes.visual = gtk_widget_get_visual (widget); + attributes.colormap = gtk_widget_get_colormap (widget); + attributes.event_mask = gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK; + + attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; + + widget->window = gdk_window_new (gtk_widget_get_parent_window (widget),&attributes, attributes_mask); + gdk_window_set_user_data(widget->window, widget); + + widget->style = gtk_style_attach (widget->style, widget->window); + gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); + } + + gtk_im_context_set_client_window(GTK_V3270(widget)->input_method,widget->window); + } + +#endif // GTK(2,18,0) #if !GTK_CHECK_VERSION(3,0,0) widget->style = gtk_style_attach (widget->style, widget->window); @@ -979,8 +1029,11 @@ static void v3270_size_allocate(GtkWidget * widget, GtkAllocation * allocation) g_return_if_fail(allocation != NULL); // trace("Widget size changes to %dx%d",allocation->width,allocation->height); - +#if GTK_CHECK_VERSION(2,18,0) gtk_widget_set_allocation(widget, allocation); +#else + widget->allocation = *allocation; +#endif // GTK(2,18) #if !GTK_CHECK_VERSION(3,0,0) { @@ -993,14 +1046,27 @@ static void v3270_size_allocate(GtkWidget * widget, GtkAllocation * allocation) if(gtk_widget_get_realized(widget)) { +#if GTK_CHECK_VERSION(2,18,0) if(gtk_widget_get_has_window(widget)) gdk_window_move_resize(gtk_widget_get_window (widget),allocation->x, allocation->y,allocation->width, allocation->height); +#else + if(widget->window) + gdk_window_move_resize(widget->window,allocation->x, allocation->y,allocation->width, allocation->height); +#endif // GTK(2,18,0) v3270_reload(widget); v3270_send_configure(GTK_V3270(widget)); } } +#if ! GTK_CHECK_VERSION(2,18,0) +G_GNUC_INTERNAL void gtk_widget_get_allocation(GtkWidget *widget, GtkAllocation *allocation) +{ + *allocation = widget->allocation; +} +#endif // !GTK(2,18) + + static void v3270_send_configure(v3270 * terminal) { GtkAllocation allocation; @@ -1068,6 +1134,8 @@ void v3270_set_colors(GtkWidget *widget, const gchar *colors) } + trace("Widget %p colors:\n%s\n",widget,colors); + v3270_set_color_table(GTK_V3270(widget)->color,colors); g_signal_emit(widget,v3270_widget_signal[SIGNAL_UPDATE_CONFIG], 0, "colors", colors); v3270_reload(widget); diff --git a/src/pw3270/window.c b/src/pw3270/window.c index aa72aa1..0a997af 100644 --- a/src/pw3270/window.c +++ b/src/pw3270/window.c @@ -378,7 +378,7 @@ for(f=0;fterminal,str); if(str) g_free(str); -- libgit2 0.21.2