Commit 513e15ae758355fa2aadee32b03ed9f77978aa1a
1 parent
835ec4d3
Exists in
master
and in
5 other branches
Rômulo Silva Neiva
29 de agosto de 2012 07:54 * não é tão necessário, mas a versão 4.1 tem, a rolagem de tela através da roda do mouse.
Showing
12 changed files
with
183 additions
and
43 deletions
Show diff stats
pw3270.cbp
| ... | ... | @@ -274,6 +274,9 @@ |
| 274 | 274 | <Unit filename="src/pw3270/uiparser/script.c"> |
| 275 | 275 | <Option compilerVar="CC" /> |
| 276 | 276 | </Unit> |
| 277 | + <Unit filename="src/pw3270/uiparser/scroll.c"> | |
| 278 | + <Option compilerVar="CC" /> | |
| 279 | + </Unit> | |
| 277 | 280 | <Unit filename="src/pw3270/uiparser/separator.c"> |
| 278 | 281 | <Option compilerVar="CC" /> |
| 279 | 282 | </Unit> | ... | ... |
src/include/v3270.h
| ... | ... | @@ -180,7 +180,6 @@ |
| 180 | 180 | LIB3270_EXPORT void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, guint height, GdkRectangle *rect, GdkColor *color); |
| 181 | 181 | LIB3270_EXPORT void v3270_set_color(GtkWidget *widget, enum V3270_COLOR id, GdkColor *color); |
| 182 | 182 | LIB3270_EXPORT GdkColor * v3270_get_color(GtkWidget *widget, enum V3270_COLOR id); |
| 183 | - LIB3270_EXPORT gboolean v3270_set_keyboard_action(GtkWidget *widget, const gchar *key_name, GtkAction *action); | |
| 184 | 183 | |
| 185 | 184 | // Misc |
| 186 | 185 | LIB3270_EXPORT GtkIMContext * v3270_get_im_context(GtkWidget *widget); |
| ... | ... | @@ -191,6 +190,9 @@ |
| 191 | 190 | |
| 192 | 191 | LIB3270_EXPORT void v3270_set_host(GtkWidget *widget, const gchar *uri); |
| 193 | 192 | |
| 193 | + // Keyboard & Mouse special actions | |
| 194 | + LIB3270_EXPORT gboolean v3270_set_keyboard_action(GtkWidget *widget, const gchar *key_name, GtkAction *action); | |
| 195 | + LIB3270_EXPORT void v3270_set_scroll_action(GtkWidget *widget, GdkScrollDirection direction, GtkAction *action); | |
| 194 | 196 | |
| 195 | 197 | G_END_DECLS |
| 196 | 198 | ... | ... |
src/pw3270/actions.c
| ... | ... | @@ -468,15 +468,15 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash |
| 468 | 468 | "setfullscreen", |
| 469 | 469 | "resetfullscreen" |
| 470 | 470 | }; |
| 471 | - GtkAction * action = NULL; | |
| 472 | - GtkAction **toggle_action = (GtkAction **) g_object_get_data(G_OBJECT(widget),"toggle_actions"); | |
| 473 | - const gchar * direction = ui_get_attribute("direction",names,values); | |
| 474 | - unsigned short flags = 0; | |
| 475 | - const GCallback * callback = NULL; | |
| 476 | - const gchar * attr = NULL; | |
| 477 | - int id = 0; | |
| 478 | - gchar * nm = NULL; | |
| 479 | - int f; | |
| 471 | + GtkAction * action = NULL; | |
| 472 | + GtkAction **toggle_action = (GtkAction **) g_object_get_data(G_OBJECT(widget),"toggle_actions"); | |
| 473 | + UI_ATTR_DIRECTION dir = ui_get_dir_attribute(names,values); | |
| 474 | + unsigned short flags = 0; | |
| 475 | + const GCallback * callback = NULL; | |
| 476 | + const gchar * attr = NULL; | |
| 477 | + int id = 0; | |
| 478 | + gchar * nm = NULL; | |
| 479 | + int f; | |
| 480 | 480 | |
| 481 | 481 | enum _action_type |
| 482 | 482 | { |
| ... | ... | @@ -492,20 +492,8 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash |
| 492 | 492 | |
| 493 | 493 | } action_type = ACTION_TYPE_DEFAULT; |
| 494 | 494 | |
| 495 | - if(direction) | |
| 496 | - { | |
| 497 | - static const gchar *dirname[] = { "up", "down", "left", "right" }; | |
| 498 | - int f; | |
| 499 | - | |
| 500 | - for(f=0;f<G_N_ELEMENTS(dirname);f++) | |
| 501 | - { | |
| 502 | - if(!g_ascii_strcasecmp(direction,dirname[f])) | |
| 503 | - { | |
| 504 | - flags |= f; | |
| 505 | - break; | |
| 506 | - } | |
| 507 | - } | |
| 508 | - } | |
| 495 | + if(dir != UI_ATTR_DIRECTION_NONE) | |
| 496 | + flags |= ((unsigned char) dir) & 0x03; | |
| 509 | 497 | |
| 510 | 498 | if(ui_get_bool_attribute("selecting",names,values,FALSE)) |
| 511 | 499 | flags |= 0x80; |
| ... | ... | @@ -538,13 +526,13 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash |
| 538 | 526 | action_type = ACTION_TYPE_MOVE; |
| 539 | 527 | attr = ui_get_attribute("target",names,values); |
| 540 | 528 | |
| 541 | - if(!(attr && direction)) | |
| 529 | + if(!attr || dir == UI_ATTR_DIRECTION_NONE) | |
| 542 | 530 | { |
| 543 | 531 | *error = g_error_new(ERROR_DOMAIN,EINVAL,"%s",_("Move action needs target & direction attributes" )); |
| 544 | 532 | return NULL; |
| 545 | 533 | } |
| 546 | 534 | |
| 547 | - nm = g_strconcat((flags & 0x80) ? "select" : "move",attr,direction, NULL); | |
| 535 | + nm = g_strconcat((flags & 0x80) ? "select" : "move",attr,ui_get_dir_name(dir), NULL); | |
| 548 | 536 | |
| 549 | 537 | } |
| 550 | 538 | else if(!g_ascii_strcasecmp(name,"paste")) |
| ... | ... | @@ -808,3 +796,14 @@ void ui_connect_text_script(GtkWidget *widget, GtkAction *action, const gchar *s |
| 808 | 796 | g_signal_connect(action,"activate",G_CALLBACK(action_text_script),widget); |
| 809 | 797 | } |
| 810 | 798 | |
| 799 | +void ui_set_scroll_actions(GtkWidget *widget, GtkAction *action[UI_ATTR_DIRECTION_COUNT]) | |
| 800 | +{ | |
| 801 | + int f; | |
| 802 | + | |
| 803 | + for(f=0;f<4;f++) | |
| 804 | + { | |
| 805 | + if(action[f]) | |
| 806 | + v3270_set_scroll_action(widget, (GdkScrollDirection) f, action[f]); | |
| 807 | + } | |
| 808 | + | |
| 809 | +} | ... | ... |
src/pw3270/uiparser/parsefile.c
| ... | ... | @@ -51,6 +51,7 @@ |
| 51 | 51 | { "accelerator", UI_ELEMENT_ACCELERATOR, ui_create_accelerator, ui_end_accelerator }, |
| 52 | 52 | { "popup", UI_ELEMENT_POPUP, ui_create_popup, ui_end_popup }, |
| 53 | 53 | { "script", UI_ELEMENT_SCRIPT, ui_create_script, ui_end_script }, |
| 54 | + { "scroll", UI_ELEMENT_SCROLL, ui_create_scroll, ui_end_scroll }, | |
| 54 | 55 | }; |
| 55 | 56 | |
| 56 | 57 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| ... | ... | @@ -168,15 +169,6 @@ |
| 168 | 169 | GtkWidget * widget = NULL; |
| 169 | 170 | int f; |
| 170 | 171 | |
| 171 | -/* | |
| 172 | - if(info->disabled) | |
| 173 | - { | |
| 174 | - info->disabled++; | |
| 175 | - trace("%s: <%s> disabled=%d",__FUNCTION__,element_name,info->disabled); | |
| 176 | - return; | |
| 177 | - } | |
| 178 | -*/ | |
| 179 | - | |
| 180 | 172 | for(f=0;f<G_N_ELEMENTS(element_builder);f++) |
| 181 | 173 | { |
| 182 | 174 | if(!g_ascii_strcasecmp(element_name,element_builder[f].name)) |
| ... | ... | @@ -240,7 +232,6 @@ |
| 240 | 232 | } |
| 241 | 233 | else |
| 242 | 234 | { |
| 243 | -// info->disabled++; | |
| 244 | 235 | info->action = NULL; |
| 245 | 236 | } |
| 246 | 237 | } | ... | ... |
src/pw3270/uiparser/parser.c
| ... | ... | @@ -36,6 +36,9 @@ |
| 36 | 36 | #include <gtkmacintegration/gtk-mac-menu.h> |
| 37 | 37 | #endif // HAVE_GTKMAC |
| 38 | 38 | |
| 39 | +/*--[ Globals ]--------------------------------------------------------------------------------------*/ | |
| 40 | + | |
| 41 | +static const gchar * dirname[] = { "up", "down", "left", "right" }; | |
| 39 | 42 | |
| 40 | 43 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| 41 | 44 | |
| ... | ... | @@ -208,13 +211,15 @@ void parser_build(struct parser *p, GtkWidget *widget) |
| 208 | 211 | // Pack top toolbars |
| 209 | 212 | g_hash_table_foreach(p->element_list[UI_ELEMENT_TOOLBAR],(GHFunc) pack_start, p); |
| 210 | 213 | |
| 211 | - // Pack center widget | |
| 214 | + // Pack & configure center widget | |
| 212 | 215 | if(widget) |
| 213 | 216 | { |
| 217 | + ui_set_scroll_actions(widget,p->scroll_action); | |
| 214 | 218 | gtk_box_pack_start(GTK_BOX(vbox),widget,TRUE,TRUE,0); |
| 215 | 219 | gtk_widget_show(widget); |
| 216 | 220 | } |
| 217 | 221 | |
| 222 | + | |
| 218 | 223 | // gtk_box_pack_start(GTK_BOX(vbox),hbox,TRUE,TRUE,0); |
| 219 | 224 | |
| 220 | 225 | gtk_container_add(GTK_CONTAINER(p->toplevel),vbox); |
| ... | ... | @@ -335,3 +340,28 @@ int ui_parse_xml_folder(GtkWindow *toplevel, const gchar *path, const gchar ** g |
| 335 | 340 | |
| 336 | 341 | return 0; |
| 337 | 342 | } |
| 343 | + | |
| 344 | +UI_ATTR_DIRECTION ui_get_dir_attribute(const gchar **names, const gchar **values) | |
| 345 | +{ | |
| 346 | + const gchar * dir = ui_get_attribute("direction",names,values); | |
| 347 | + int f; | |
| 348 | + | |
| 349 | + if(dir) | |
| 350 | + { | |
| 351 | + for(f=0;f<G_N_ELEMENTS(dirname);f++) | |
| 352 | + { | |
| 353 | + if(!g_ascii_strcasecmp(dir,dirname[f])) | |
| 354 | + return f; | |
| 355 | + } | |
| 356 | + } | |
| 357 | + | |
| 358 | + return UI_ATTR_DIRECTION_NONE; | |
| 359 | +} | |
| 360 | + | |
| 361 | +const gchar * ui_get_dir_name(UI_ATTR_DIRECTION dir) | |
| 362 | +{ | |
| 363 | + if(dir == UI_ATTR_DIRECTION_NONE) | |
| 364 | + return ""; | |
| 365 | + return dirname[dir]; | |
| 366 | +} | |
| 367 | + | ... | ... |
src/pw3270/uiparser/parser.h
| ... | ... | @@ -33,6 +33,19 @@ |
| 33 | 33 | |
| 34 | 34 | #define UI_PARSER_H_INCLUDED 1 |
| 35 | 35 | |
| 36 | + typedef enum ui_attr_direction | |
| 37 | + { | |
| 38 | + UI_ATTR_UP, | |
| 39 | + UI_ATTR_DOWN, | |
| 40 | + UI_ATTR_LEFT, | |
| 41 | + UI_ATTR_RIGHT, | |
| 42 | + | |
| 43 | + UI_ATTR_DIRECTION_COUNT | |
| 44 | + | |
| 45 | + } UI_ATTR_DIRECTION; | |
| 46 | + | |
| 47 | + #define UI_ATTR_DIRECTION_NONE ((UI_ATTR_DIRECTION) -1) | |
| 48 | + | |
| 36 | 49 | /** |
| 37 | 50 | * Callback list for specil widget. |
| 38 | 51 | * |
| ... | ... | @@ -51,11 +64,14 @@ |
| 51 | 64 | void (*setup)(GtkWidget *widget, GtkWidget *obj); |
| 52 | 65 | } UI_WIDGET_SETUP; |
| 53 | 66 | |
| 54 | - int ui_parse_xml_folder(GtkWindow *toplevel, const gchar *path, const gchar ** groupname, const gchar **popupname, GtkWidget *widget, const UI_WIDGET_SETUP *itn); | |
| 55 | - const gchar * ui_get_attribute(const gchar *key, const gchar **name, const gchar **value); | |
| 56 | - gboolean ui_get_bool_attribute(const gchar *key, const gchar **name, const gchar **value, gboolean def); | |
| 57 | - GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error); | |
| 67 | + int ui_parse_xml_folder(GtkWindow *toplevel, const gchar *path, const gchar ** groupname, const gchar **popupname, GtkWidget *widget, const UI_WIDGET_SETUP *itn); | |
| 68 | + const gchar * ui_get_attribute(const gchar *key, const gchar **name, const gchar **value); | |
| 69 | + gboolean ui_get_bool_attribute(const gchar *key, const gchar **name, const gchar **value, gboolean def); | |
| 70 | + UI_ATTR_DIRECTION ui_get_dir_attribute(const gchar **name, const gchar **value); | |
| 71 | + GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error); | |
| 72 | + const gchar * ui_get_dir_name(UI_ATTR_DIRECTION dir); | |
| 58 | 73 | |
| 59 | - void ui_connect_text_script(GtkWidget *widget, GtkAction *action, const gchar *script_text, GError **error); | |
| 74 | + void ui_connect_text_script(GtkWidget *widget, GtkAction *action, const gchar *script_text, GError **error); | |
| 75 | + void ui_set_scroll_actions(GtkWidget *widget, GtkAction *action[UI_ATTR_DIRECTION_COUNT]); | |
| 60 | 76 | |
| 61 | 77 | #endif // UI_PARSER_H_INCLUDED | ... | ... |
src/pw3270/uiparser/private.h
| ... | ... | @@ -51,12 +51,14 @@ |
| 51 | 51 | #define UI_ELEMENT_ACCELERATOR UI_ELEMENT_COUNT+2 |
| 52 | 52 | #define UI_ELEMENT_SCRIPT UI_ELEMENT_COUNT+3 |
| 53 | 53 | #define UI_ELEMENT_MENUITEM UI_ELEMENT_COUNT+4 |
| 54 | + #define UI_ELEMENT_SCROLL UI_ELEMENT_COUNT+5 | |
| 54 | 55 | |
| 55 | 56 | struct parser |
| 56 | 57 | { |
| 57 | 58 | GtkWidget * toplevel; |
| 58 | 59 | GObject * element; |
| 59 | 60 | GtkAction * action; |
| 61 | + GtkAction * scroll_action[UI_ATTR_DIRECTION_COUNT]; | |
| 60 | 62 | GtkWidget * topmenu; |
| 61 | 63 | GtkAction * script_action; |
| 62 | 64 | GtkWidget * center_widget; |
| ... | ... | @@ -84,6 +86,7 @@ |
| 84 | 86 | GObject * ui_create_accelerator(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); |
| 85 | 87 | GObject * ui_create_popup(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); |
| 86 | 88 | GObject * ui_create_script(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); |
| 89 | + GObject * ui_create_scroll(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); | |
| 87 | 90 | |
| 88 | 91 | void ui_end_menubar(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error); |
| 89 | 92 | void ui_end_menu(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error); |
| ... | ... | @@ -94,5 +97,6 @@ |
| 94 | 97 | void ui_end_accelerator(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error); |
| 95 | 98 | void ui_end_popup(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error); |
| 96 | 99 | void ui_end_script(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error); |
| 100 | + void ui_end_scroll(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error); | |
| 97 | 101 | |
| 98 | 102 | #include "parser.h" | ... | ... |
| ... | ... | @@ -0,0 +1,66 @@ |
| 1 | +/* | |
| 2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
| 3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
| 4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
| 5 | + * | |
| 6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | |
| 7 | + * | |
| 8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
| 9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
| 10 | + * Free Software Foundation. | |
| 11 | + * | |
| 12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
| 13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
| 14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
| 15 | + * obter mais detalhes. | |
| 16 | + * | |
| 17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
| 18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
| 19 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | |
| 20 | + * | |
| 21 | + * Este programa está nomeado como scroll.c e possui - linhas de código. | |
| 22 | + * | |
| 23 | + * Contatos: | |
| 24 | + * | |
| 25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
| 26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
| 27 | + * licinio@bb.com.br (Licínio Luis Branco) | |
| 28 | + * kraucer@bb.com.br (Kraucer Fernandes Mazuco) | |
| 29 | + * | |
| 30 | + */ | |
| 31 | + | |
| 32 | + #include <gtk/gtk.h> | |
| 33 | + #include "private.h" | |
| 34 | + | |
| 35 | +/*--[ Implement ]------------------------------------------------------------------------------------*/ | |
| 36 | + | |
| 37 | + GObject * ui_create_scroll(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) | |
| 38 | + { | |
| 39 | + UI_ATTR_DIRECTION dir = ui_get_dir_attribute(names,values); | |
| 40 | + | |
| 41 | + if(info->element) | |
| 42 | + { | |
| 43 | + *error = g_error_new(ERROR_DOMAIN,EINVAL, _( "<%s> should be on toplevel"), "scroll"); | |
| 44 | + return NULL; | |
| 45 | + } | |
| 46 | + | |
| 47 | + if(!action) | |
| 48 | + { | |
| 49 | + *error = g_error_new(ERROR_DOMAIN,ENOENT, _( "<%s> requires %s"),"scroll",_( "an action attribute" ) ); | |
| 50 | + return NULL; | |
| 51 | + } | |
| 52 | + | |
| 53 | + if(dir == UI_ATTR_DIRECTION_NONE) | |
| 54 | + { | |
| 55 | + *error = g_error_new(ERROR_DOMAIN,ENOENT, _( "<%s> requires %s"),"scroll",_( "a direction attribute" ) ); | |
| 56 | + return NULL; | |
| 57 | + } | |
| 58 | + | |
| 59 | + info->scroll_action[dir] = action; | |
| 60 | + | |
| 61 | + return NULL; | |
| 62 | + } | |
| 63 | + | |
| 64 | + void ui_end_scroll(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error) | |
| 65 | + { | |
| 66 | + } | ... | ... |
src/pw3270/uiparser/sources.mak
src/pw3270/v3270/mouse.c
| ... | ... | @@ -36,6 +36,10 @@ |
| 36 | 36 | #include <lib3270/actions.h> |
| 37 | 37 | #include <lib3270/log.h> |
| 38 | 38 | |
| 39 | +/*--[ Globals ]--------------------------------------------------------------------------------------*/ | |
| 40 | + | |
| 41 | + static GtkAction *action_scroll[] = { NULL, NULL, NULL, NULL }; | |
| 42 | + | |
| 39 | 43 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| 40 | 44 | |
| 41 | 45 | gint v3270_get_offset_at_point(v3270 *widget, gint x, gint y) |
| ... | ... | @@ -262,3 +266,24 @@ gboolean v3270_motion_notify_event(GtkWidget *widget, GdkEventMotion *event) |
| 262 | 266 | |
| 263 | 267 | return FALSE; |
| 264 | 268 | } |
| 269 | + | |
| 270 | +void v3270_set_scroll_action(GtkWidget *widget, GdkScrollDirection direction, GtkAction *action) | |
| 271 | +{ | |
| 272 | + g_return_if_fail(GTK_IS_V3270(widget)); | |
| 273 | + action_scroll[((int) direction) & 0x03] = action; | |
| 274 | +} | |
| 275 | + | |
| 276 | +gboolean v3270_scroll_event(GtkWidget *widget, GdkEventScroll *event, gpointer user_data) | |
| 277 | +{ | |
| 278 | + v3270 * terminal = GTK_V3270(widget); | |
| 279 | + | |
| 280 | + if(lib3270_get_program_message(terminal->host) != LIB3270_MESSAGE_NONE || event->direction < 0 || event->direction > G_N_ELEMENTS(action_scroll)) | |
| 281 | + return FALSE; | |
| 282 | + | |
| 283 | + trace("Scroll: %d Action: %p",event->direction,action_scroll[event->direction]); | |
| 284 | + | |
| 285 | + if(action_scroll[event->direction]) | |
| 286 | + gtk_action_activate(action_scroll[event->direction]); | |
| 287 | + | |
| 288 | + return TRUE; | |
| 289 | + } | ... | ... |
src/pw3270/v3270/private.h
| ... | ... | @@ -254,5 +254,6 @@ gboolean v3270_button_release_event(GtkWidget *widget, GdkEventButton*event); |
| 254 | 254 | gboolean v3270_motion_notify_event(GtkWidget *widget, GdkEventMotion *event); |
| 255 | 255 | void v3270_emit_popup(v3270 *widget, int baddr, GdkEventButton *event); |
| 256 | 256 | gint v3270_get_offset_at_point(v3270 *widget, gint x, gint y); |
| 257 | +gboolean v3270_scroll_event(GtkWidget *widget, GdkEventScroll *event, gpointer user_data); | |
| 257 | 258 | |
| 258 | 259 | G_END_DECLS | ... | ... |
src/pw3270/v3270/widget.c
| ... | ... | @@ -294,6 +294,7 @@ static void v3270_class_init(v3270Class *klass) |
| 294 | 294 | widget_class->button_release_event = v3270_button_release_event; |
| 295 | 295 | widget_class->motion_notify_event = v3270_motion_notify_event; |
| 296 | 296 | widget_class->popup_menu = v3270_popup_menu; |
| 297 | + widget_class->scroll_event = v3270_scroll_event; | |
| 297 | 298 | |
| 298 | 299 | /* Accessibility support */ |
| 299 | 300 | widget_class->get_accessible = v3270_get_accessible; | ... | ... |