Commit 73a17cbdbdd12295ea741ebbafcb547cc934a41b

Authored by perry.werneck@gmail.com
1 parent ae0903ea

Implementando popup menus, atualizando mecanismo de beep, ajustes diversos para a versao 5

src/gtk/common/config.c
... ... @@ -353,13 +353,13 @@ void set_boolean_to_config(const gchar *group, const gchar *key, gboolean val)
353 353  
354 354 HKEY hKey;
355 355 DWORD disp;
356   - gchar * path = g_strdup_printf("%s\\%s",registry_path,group);
  356 + gchar * path = g_strdup_printf("%s\\%s\\%s",registry_path,group,key);
357 357  
358   -// trace("Creating key %s",path);
  358 + trace("Creating key %s",path);
359 359 if(RegCreateKeyEx(HKEY_CURRENT_USER,path,0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,NULL,&hKey,&disp) == ERROR_SUCCESS)
360 360 {
361 361 DWORD value = val ? 1 : 0;
362   - LONG rc = RegSetValueEx(hKey, key, 0, REG_DWORD,(const BYTE *) &value,sizeof(value));
  362 + LONG rc = RegSetValueEx(hKey, NULL, 0, REG_DWORD,(const BYTE *) &value,sizeof(value));
363 363  
364 364 SetLastError(rc);
365 365  
... ...
src/gtk/mainwindow.c
... ... @@ -119,7 +119,7 @@
119 119 GtkWidget *menu = NULL;
120 120  
121 121 if(!online)
122   - menu = popup[POPUP_OFFLINE] ? popup[POPUP_OFFLINE] : popup[POPUP_DEFAULT];
  122 + menu = popup[POPUP_OFFLINE];
123 123 else if(selected && popup[POPUP_SELECTION])
124 124 menu = popup[POPUP_SELECTION];
125 125 else if(popup[POPUP_ONLINE])
... ... @@ -203,7 +203,7 @@
203 203  
204 204 GtkWidget * create_main_window(void)
205 205 {
206   - static const SETUP_ITEM widget_setup[] =
  206 + static const UI_WIDGET_SETUP widget_setup[] =
207 207 {
208 208 { "inputmethod", setup_input_method },
209 209 { "screensizes", setup_screen_sizes },
... ...
src/gtk/pw3270-GTK.cbp
... ... @@ -31,11 +31,11 @@
31 31 </Build>
32 32 <Compiler>
33 33 <Add option="-Wall" />
34   - <Add option="`pkg-config lib3270 gtk+-2.0 --cflags`" />
  34 + <Add option="`pkg-config lib3270 gtk+-2.0 lib3270 --cflags`" />
35 35 <Add directory="..\include" />
36 36 </Compiler>
37 37 <Linker>
38   - <Add option="`pkg-config lib3270 gtk+-2.0 --libs`" />
  38 + <Add option="`pkg-config lib3270 gtk+-2.0 lib3270 --libs`" />
39 39 </Linker>
40 40 <Unit filename="Makefile.in" />
41 41 <Unit filename="actions.c">
... ...
src/gtk/uiparser/accelerator.c
... ... @@ -29,6 +29,7 @@
29 29 *
30 30 */
31 31  
  32 + #include <gtk/gtk.h>
32 33 #include "private.h"
33 34  
34 35 /*--[ Implement ]------------------------------------------------------------------------------------*/
... ...
src/gtk/uiparser/menuitem.c
... ... @@ -89,6 +89,26 @@
89 89  
90 90 gtk_menu_shell_append((GtkMenuShell *) menu, widget);
91 91  
  92 + // Setup menuitem
  93 + if(info->setup)
  94 + {
  95 + const gchar *name = ui_get_attribute("name",names,values);
  96 +
  97 + if(name)
  98 + {
  99 + int f;
  100 + for(f=0;info->setup[f].name;f++)
  101 + {
  102 + if(!g_strcasecmp(name,info->setup[f].name))
  103 + {
  104 + info->setup[f].setup(widget,info->center_widget);
  105 + break;
  106 + }
  107 + }
  108 + }
  109 + }
  110 +
  111 +
92 112 return G_OBJECT(widget);
93 113 }
94 114  
... ...
src/gtk/uiparser/parser.c
... ... @@ -206,7 +206,7 @@ void parser_build(struct parser *p, GtkWidget *widget)
206 206  
207 207 }
208 208  
209   -GtkWidget * ui_parse_xml_folder(const gchar *path, const gchar ** groupname, const gchar **popupname, GtkWidget *widget, const SETUP_ITEM *setup)
  209 +GtkWidget * ui_parse_xml_folder(const gchar *path, const gchar ** groupname, const gchar **popupname, GtkWidget *widget, const UI_WIDGET_SETUP *setup)
210 210 {
211 211 struct parser p;
212 212 GDir * dir;
... ... @@ -258,6 +258,7 @@ GtkWidget * ui_parse_xml_folder(const gchar *path, const gchar ** groupname, con
258 258 p.popupname = popupname;
259 259 p.strings = g_string_chunk_new(0);
260 260 p.popup = g_new0(GtkWidget *,(g_strv_length((gchar **) p.popupname)+1));
  261 + p.setup = setup;
261 262  
262 263 g_object_set_data_full(G_OBJECT(p.toplevel),"popup_menus",(gpointer) p.popup, g_free);
263 264  
... ...
src/gtk/uiparser/parser.h
... ... @@ -29,14 +29,32 @@
29 29 *
30 30 */
31 31  
32   - typedef struct _setup_item
33   - {
34   - const gchar * name;
35   - void (*setup)(GtkWidget *widget, GtkWidget *obj);
36   - } SETUP_ITEM;
  32 +#ifndef UI_PARSER_H_INCLUDED
37 33  
38   - GtkWidget * ui_parse_xml_folder(const gchar *path, const gchar ** groupname, const gchar **popupname, GtkWidget *widget, const SETUP_ITEM *itn);
39   - void ui_connect_action(GtkAction *action, GtkWidget *widget, const gchar *name, const gchar *id);
40   - void ui_connect_toggle(GtkAction *action, GtkWidget *widget, const gchar *name, const gchar *id);
41   - void ui_connect_pfkey(GtkAction *action, GtkWidget *widget, const gchar *name, const gchar *id);
42   - void ui_connect_pakey(GtkAction *action, GtkWidget *widget, const gchar *name, const gchar *id);
  34 + #define UI_PARSER_H_INCLUDED 1
  35 +
  36 + /**
  37 + * Callback list for specil widget.
  38 + *
  39 + * Struct used to define a list of calls to setup some specialized widgets.
  40 + *
  41 + */
  42 + typedef struct _ui_widget_setup
  43 + {
  44 + const gchar * name; /**< Widget name */
  45 + /**
  46 + * Widget setup call.
  47 + *
  48 + * @param widget Widget to setup.
  49 + * @param obj UI´s center widget.
  50 + */
  51 + void (*setup)(GtkWidget *widget, GtkWidget *obj);
  52 + } UI_WIDGET_SETUP;
  53 +
  54 + GtkWidget * ui_parse_xml_folder(const gchar *path, const gchar ** groupname, const gchar **popupname, GtkWidget *widget, const UI_WIDGET_SETUP *itn);
  55 + void ui_connect_action(GtkAction *action, GtkWidget *widget, const gchar *name, const gchar *id);
  56 + void ui_connect_toggle(GtkAction *action, GtkWidget *widget, const gchar *name, const gchar *id);
  57 + void ui_connect_pfkey(GtkAction *action, GtkWidget *widget, const gchar *name, const gchar *id);
  58 + void ui_connect_pakey(GtkAction *action, GtkWidget *widget, const gchar *name, const gchar *id);
  59 +
  60 +#endif // UI_PARSER_H_INCLUDED
... ...
src/gtk/uiparser/private.h
... ... @@ -29,8 +29,10 @@
29 29 *
30 30 */
31 31  
  32 + #include <gtk/gtk.h>
32 33 #include <lib3270/config.h>
33 34 #include "../common/common.h"
  35 + #include "parser.h"
34 36  
35 37 #define ERROR_DOMAIN g_quark_from_static_string("uiparser")
36 38  
... ... @@ -52,16 +54,17 @@
52 54  
53 55 struct parser
54 56 {
55   - int disabled;
56   - GtkWidget * toplevel;
57   - GObject * element;
58   - GtkWidget * center_widget;
59   - GtkWidget ** popup; /**< Popup widgets */
60   - GStringChunk * strings;
61   - const gchar ** group; /**< Action group list */
62   - const gchar ** popupname; /**< Popup names */
63   - GHashTable * actions; /**< List of actions */
64   - GHashTable * element_list[UI_ELEMENT_COUNT];
  57 + int disabled;
  58 + GtkWidget * toplevel;
  59 + GObject * element;
  60 + GtkWidget * center_widget;
  61 + GtkWidget ** popup; /**< Popup widgets */
  62 + GStringChunk * strings;
  63 + const gchar ** group; /**< Action group list */
  64 + const gchar ** popupname; /**< Popup names */
  65 + GHashTable * actions; /**< List of actions */
  66 + GHashTable * element_list[UI_ELEMENT_COUNT];
  67 + const UI_WIDGET_SETUP * setup;
65 68 };
66 69  
67 70 const gchar * ui_get_attribute(const gchar *key, const gchar **name, const gchar **value);
... ...
src/gtk/v3270/genmarshal
... ... @@ -6,4 +6,4 @@ VOID:VOID,POINTER,POINTER
6 6 VOID:VOID,UINT,POINTER
7 7 BOOL:VOID,UINT,ENUM
8 8 VOID:VOID,BOOL
9   -VOID:VOID,BOOL,BOOL,POINTER
  9 +BOOL:VOID,BOOL,BOOL,POINTER
... ...
src/gtk/v3270/iocallback.c
... ... @@ -312,6 +312,11 @@ static int static_RunPendingEvents(int wait)
312 312 return rc;
313 313 }
314 314  
  315 +static void beep(H3270 *session)
  316 +{
  317 + gdk_beep();
  318 +}
  319 +
315 320 void v3270_register_io_handlers(v3270Class *cls)
316 321 {
317 322 static const struct lib3270_callbacks hdl =
... ... @@ -338,7 +343,7 @@ void v3270_register_io_handlers(v3270Class *cls)
338 343  
339 344 static_Sleep,
340 345 static_RunPendingEvents,
341   - gdk_beep
  346 + beep
342 347  
343 348 };
344 349  
... ...
src/gtk/v3270/widget.c
... ... @@ -31,6 +31,8 @@
31 31 #include <pw3270.h>
32 32 #include <lib3270.h>
33 33 #include <lib3270/session.h>
  34 + #include <lib3270/actions.h>
  35 + #include <lib3270/log.h>
34 36 #include "v3270.h"
35 37 #include "private.h"
36 38 #include "marshal.h"
... ... @@ -284,11 +286,11 @@ static void v3270_class_init(v3270Class *klass)
284 286 v3270_widget_signal[SIGNAL_POPUP] =
285 287 g_signal_new( "popup",
286 288 G_OBJECT_CLASS_TYPE (gobject_class),
287   - G_SIGNAL_RUN_FIRST,
  289 + G_SIGNAL_RUN_LAST,
288 290 0,
289 291 NULL, NULL,
290   - pw3270_VOID__VOID_BOOL_BOOL_POINTER,
291   - G_TYPE_NONE, 3, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_POINTER);
  292 + pw3270_BOOL__VOID_BOOL_BOOL_POINTER,
  293 + G_TYPE_BOOLEAN, 3, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_POINTER);
292 294 }
293 295  
294 296 void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int height)
... ... @@ -852,7 +854,7 @@ int v3270_connect(GtkWidget *widget, const gchar *host)
852 854  
853 855 trace("%s widget=%p host=%p",__FUNCTION__,widget,host);
854 856  
855   - g_return_if_fail(GTK_IS_V3270(widget));
  857 + g_return_val_if_fail(GTK_IS_V3270(widget),EINVAL);
856 858  
857 859 terminal = GTK_V3270(widget);
858 860  
... ...
src/include/lib3270.h
... ... @@ -495,7 +495,7 @@
495 495  
496 496 int (*Wait)(int seconds);
497 497 int (*RunPendingEvents)(int wait);
498   - void (*ring_bell)(void);
  498 + void (*ring_bell)(H3270 *);
499 499  
500 500 };
501 501  
... ... @@ -596,6 +596,16 @@
596 596 */
597 597 LIB3270_EXPORT void * lib3270_get_widget(H3270 *h);
598 598  
  599 + /**
  600 + * "beep" to notify user.
  601 + *
  602 + * If available play a sound signal do alert user.
  603 + *
  604 + * @param h Session handle
  605 + *
  606 + */
  607 + LIB3270_EXPORT void lib3270_ring_bell(H3270 *session);
  608 +
599 609 LIB3270_EXPORT int lib3270_set_model(H3270 *session, int model);
600 610 LIB3270_EXPORT int lib3270_get_model(H3270 *session);
601 611  
... ...
src/lib3270/XtGlue.c
... ... @@ -94,7 +94,7 @@ static void DefaultRemoveInput(unsigned long id);
94 94  
95 95 static int DefaultProcessEvents(int block);
96 96  
97   -static void dunno(void)
  97 +static void dunno(H3270 *session)
98 98 {
99 99  
100 100 }
... ... @@ -999,9 +999,10 @@ LIB3270_EXPORT int lib3270_wait(seconds)
999 999 return 0;
1000 1000 }
1001 1001  
1002   -LIB3270_EXPORT void lib3270_ring_bell(void)
  1002 +LIB3270_EXPORT void lib3270_ring_bell(H3270 *session)
1003 1003 {
1004   - callbacks->ring_bell();
  1004 + CHECK_SESSION_HANDLE(session);
  1005 + callbacks->ring_bell(session);
1005 1006 }
1006 1007  
1007 1008  
... ...
src/lib3270/ansi.c
... ... @@ -917,7 +917,7 @@ ansi_sgr(int ig1 unused, int ig2 unused)
917 917 static enum state
918 918 ansi_bell(int ig1 unused, int ig2 unused)
919 919 {
920   - lib3270_ring_bell();
  920 + lib3270_ring_bell(NULL);
921 921 return DATA;
922 922 }
923 923  
... ...
src/lib3270/api.h
... ... @@ -383,8 +383,6 @@
383 383 const char *description;
384 384 };
385 385  
386   - LIB3270_EXPORT void lib3270_ring_bell(void);
387   -
388 386 #define new_3270_session(m) lib3270_session_new(m)
389 387  
390 388 LOCAL_EXTERN const struct lib3270_option * get_3270_option_table(int sz);
... ...
src/lib3270/ctlr.c
... ... @@ -1871,7 +1871,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1871 1871 status_syswait();
1872 1872 }
1873 1873 if (wcc_sound_alarm)
1874   - lib3270_ring_bell();
  1874 + lib3270_ring_bell(NULL);
1875 1875  
1876 1876 /* Set up the DBCS state. */
1877 1877 if (ctlr_dbcs_postprocess() < 0 && rv == PDS_OKAY_NO_OUTPUT)
... ...
src/lib3270/kybd.c
... ... @@ -182,7 +182,7 @@ static int enq_chk(void)
182 182 /* If operator error, complain and drop it. */
183 183 if (kybdlock & KL_OERR_MASK)
184 184 {
185   - lib3270_ring_bell();
  185 + lib3270_ring_bell(NULL);
186 186 trace_event(" dropped (operator error)\n");
187 187 return -1;
188 188 }
... ... @@ -190,7 +190,7 @@ static int enq_chk(void)
190 190 /* If scroll lock, complain and drop it. */
191 191 if (kybdlock & KL_SCROLLED)
192 192 {
193   - lib3270_ring_bell();
  193 + lib3270_ring_bell(NULL);
194 194 trace_event(" dropped (scrolled)\n");
195 195 return -1;
196 196 }
... ... @@ -471,7 +471,7 @@ operator_error(int error_type)
471 471 kybdlock_set((unsigned int)error_type, "operator_error");
472 472 (void) flush_ta();
473 473 } else {
474   - lib3270_ring_bell();
  474 + lib3270_ring_bell(NULL);
475 475 }
476 476 }
477 477  
... ...
src/lib3270/lib3270.cbp
... ... @@ -57,8 +57,14 @@
57 57 <Add directory="..\include\lib3270" />
58 58 </Compiler>
59 59 <Unit filename="..\include\lib3270.h" />
  60 + <Unit filename="..\include\lib3270\action_table.h" />
  61 + <Unit filename="..\include\lib3270\actions.h" />
60 62 <Unit filename="..\include\lib3270\config.h.in" />
  63 + <Unit filename="..\include\lib3270\log.h" />
  64 + <Unit filename="..\include\lib3270\macros.h" />
  65 + <Unit filename="..\include\lib3270\popup.h" />
61 66 <Unit filename="..\include\lib3270\selection.h" />
  67 + <Unit filename="..\include\lib3270\session.h" />
62 68 <Unit filename="3270ds.h" />
63 69 <Unit filename="Makefile.in" />
64 70 <Unit filename="X11keysym.h" />
... ...
src/lib3270/selection.c
... ... @@ -205,7 +205,7 @@ LIB3270_EXPORT void lib3270_select_word(H3270 *session, int baddr)
205 205  
206 206 if(!lib3270_connected(session) || isspace(ea_buf[baddr].chr))
207 207 {
208   - lib3270_ring_bell();
  208 + lib3270_ring_bell(session);
209 209 return;
210 210 }
211 211  
... ... @@ -227,15 +227,15 @@ LIB3270_EXPORT int lib3270_select_field(H3270 *session, int baddr)
227 227  
228 228 if(!lib3270_connected(session))
229 229 {
230   - lib3270_ring_bell();
231   - return;
  230 + lib3270_ring_bell(session);
  231 + return -1;
232 232 }
233 233  
234 234 start = lib3270_field_addr(session,baddr);
235 235  
236 236 if(start < 0)
237 237 {
238   - lib3270_ring_bell();
  238 + lib3270_ring_bell(session);
239 239 return -1;
240 240 }
241 241  
... ...