Commit 97bf1562329af65f71f4e03e617789306443f6df

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

Trabalhando no widget trace

Showing 2 changed files with 67 additions and 4 deletions   Show diff stats
src/include/pw3270/trace.h
... ... @@ -52,7 +52,7 @@
52 52 LIB3270_EXPORT GType pw3270_trace_get_type(void);
53 53 LIB3270_EXPORT void pw3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args);
54 54 LIB3270_EXPORT void pw3270_trace_printf(GtkWidget *widget, const char *fmt, ... );
55   -
  55 + LIB3270_EXPORT gchar * pw3270_trace_get_command(GtkWidget *widget);
56 56  
57 57 G_END_DECLS
58 58  
... ...
src/pw3270/trace.c
... ... @@ -52,8 +52,9 @@
52 52 GtkWindow parent;
53 53 GtkAdjustment * scroll;
54 54 GtkTextBuffer * text;
55   - GtkWidget * entry;
56   - GtkWidget * button;
  55 + GtkWidget * entry;
  56 + GtkWidget * button;
  57 + gchar **line;
57 58 };
58 59  
59 60 const GtkWindowClass * pw3270_trace_get_parent_class(void);
... ... @@ -70,9 +71,49 @@
70 71 return GTK_WINDOW_CLASS(pw3270_trace_parent_class);
71 72 }
72 73  
  74 + static void activate_default(GtkWindow *window)
  75 + {
  76 + trace("%s",__FUNCTION__);
  77 + }
  78 +
  79 +#if GTK_CHECK_VERSION(3,0,0)
  80 +static void destroy(GtkWidget *widget)
  81 +#else
  82 +static void destroy(GtkObject *widget)
  83 +#endif
  84 + {
  85 + pw3270_trace * hwnd = PW3270_TRACE(widget);
  86 +
  87 + hwnd->line = NULL;
  88 +
  89 +#if GTK_CHECK_VERSION(3,0,0)
  90 + GTK_WIDGET_CLASS(pw3270_trace_parent_class)->destroy(widget);
  91 +#else
  92 + GTK_OBJECT_CLASS(pw3270_trace_parent_class)->destroy(widget);
  93 +#endif // GTK3
  94 +
  95 + }
  96 +
73 97 static void pw3270_trace_class_init(pw3270_traceClass *klass)
74 98 {
75   - trace("%s",__FUNCTION__);
  99 + GtkWindowClass * window_class = GTK_WINDOW_CLASS(klass);
  100 +
  101 + trace("%s",__FUNCTION__);
  102 +
  103 + window_class->activate_default = activate_default;
  104 +
  105 +#if GTK_CHECK_VERSION(3,0,0)
  106 + {
  107 + GtkWidgetClass * widget_class = GTK_WIDGET_CLASS(klass);
  108 + widget_class->destroy = destroy;
  109 + }
  110 +#else
  111 + {
  112 + GtkObjectClass *object_class = (GtkObjectClass*) klass;
  113 + object_class->destroy = destroy;
  114 + }
  115 +#endif // GTK3
  116 +
76 117 }
77 118  
78 119 static void pw3270_trace_init(pw3270_trace *window)
... ... @@ -107,6 +148,8 @@
107 148 gtk_widget_set_sensitive(window->button,FALSE);
108 149 gtk_button_set_focus_on_click(GTK_BUTTON(window->button),FALSE);
109 150  
  151 + g_signal_connect(G_OBJECT(window->button),"clicked",G_CALLBACK(gtk_window_activate_default),window);
  152 +
110 153 gtk_box_pack_start(GTK_BOX(vbox),widget,FALSE,TRUE,0);
111 154  
112 155 gtk_widget_show_all(vbox);
... ... @@ -148,3 +191,23 @@
148 191 pw3270_trace_vprintf(widget,fmt,arg_ptr);
149 192 va_end(arg_ptr);
150 193 }
  194 +
  195 + LIB3270_EXPORT gchar * pw3270_trace_get_command(GtkWidget *widget)
  196 + {
  197 + pw3270_trace * hwnd = PW3270_TRACE(widget);
  198 + gchar * line = NULL;
  199 +
  200 + hwnd->line = &line;
  201 +
  202 + gtk_window_present(GTK_WINDOW(widget));
  203 + gtk_widget_set_sensitive(hwnd->entry,TRUE);
  204 + gtk_widget_set_sensitive(hwnd->button,TRUE);
  205 + gtk_widget_grab_focus(hwnd->entry);
  206 +
  207 + while(hwnd->line)
  208 + {
  209 + gtk_main_iteration();
  210 + }
  211 +
  212 + return line;
  213 + }
... ...