Commit a3fdfc937e9c1f84d436075d65056c02cefd0934

Authored by perry.werneck@gmail.com
1 parent 97bf1562

Finalizando widget para trace

Showing 1 changed file with 41 additions and 7 deletions   Show diff stats
src/pw3270/trace.c
... ... @@ -55,6 +55,7 @@
55 55 GtkWidget * entry;
56 56 GtkWidget * button;
57 57 gchar **line;
  58 + gboolean * enabled;
58 59 };
59 60  
60 61 const GtkWindowClass * pw3270_trace_get_parent_class(void);
... ... @@ -73,7 +74,19 @@
73 74  
74 75 static void activate_default(GtkWindow *window)
75 76 {
  77 + pw3270_trace * hwnd = PW3270_TRACE(window);
  78 +
76 79 trace("%s",__FUNCTION__);
  80 +
  81 + if(*hwnd->line)
  82 + g_free(*hwnd->line);
  83 +
  84 + *hwnd->line = g_strdup(gtk_entry_get_text(GTK_ENTRY(hwnd->entry)));
  85 +
  86 + gtk_widget_set_sensitive(hwnd->entry,FALSE);
  87 + gtk_widget_set_sensitive(hwnd->button,FALSE);
  88 +
  89 + *hwnd->enabled = FALSE;
77 90 }
78 91  
79 92 #if GTK_CHECK_VERSION(3,0,0)
... ... @@ -84,7 +97,8 @@ static void destroy(GtkObject *widget)
84 97 {
85 98 pw3270_trace * hwnd = PW3270_TRACE(widget);
86 99  
87   - hwnd->line = NULL;
  100 + hwnd->line = NULL;
  101 + *hwnd->enabled = FALSE;
88 102  
89 103 #if GTK_CHECK_VERSION(3,0,0)
90 104 GTK_WIDGET_CLASS(pw3270_trace_parent_class)->destroy(widget);
... ... @@ -94,17 +108,28 @@ static void destroy(GtkObject *widget)
94 108  
95 109 }
96 110  
  111 + static gboolean delete_event(GtkWidget *widget, GdkEventAny *event)
  112 + {
  113 + pw3270_trace * hwnd = PW3270_TRACE(widget);
  114 + trace("%s",__FUNCTION__);
  115 + hwnd->line = NULL;
  116 + *hwnd->enabled = FALSE;
  117 + gtk_widget_hide(widget);
  118 + return TRUE;
  119 + }
  120 +
97 121 static void pw3270_trace_class_init(pw3270_traceClass *klass)
98 122 {
99 123 GtkWindowClass * window_class = GTK_WINDOW_CLASS(klass);
  124 + GtkWidgetClass * widget_class = GTK_WIDGET_CLASS(klass);
100 125  
101 126 trace("%s",__FUNCTION__);
102 127  
103 128 window_class->activate_default = activate_default;
  129 + widget_class->delete_event = delete_event;
104 130  
105 131 #if GTK_CHECK_VERSION(3,0,0)
106 132 {
107   - GtkWidgetClass * widget_class = GTK_WIDGET_CLASS(klass);
108 133 widget_class->destroy = destroy;
109 134 }
110 135 #else
... ... @@ -116,6 +141,12 @@ static void destroy(GtkObject *widget)
116 141  
117 142 }
118 143  
  144 + static void activate(GtkButton *button, GtkWindow *window)
  145 + {
  146 + trace("%s",__FUNCTION__);
  147 + activate_default(window);
  148 + }
  149 +
119 150 static void pw3270_trace_init(pw3270_trace *window)
120 151 {
121 152 GtkWidget *widget;
... ... @@ -142,13 +173,14 @@ static void destroy(GtkObject *widget)
142 173 window->entry = gtk_entry_new();
143 174 gtk_box_pack_start(GTK_BOX(widget),window->entry,TRUE,TRUE,4);
144 175 gtk_widget_set_sensitive(window->entry,FALSE);
  176 + g_signal_connect(G_OBJECT(window->entry),"activate",G_CALLBACK(activate),window);
145 177  
146 178 window->button = gtk_button_new_from_stock(GTK_STOCK_OK);
147 179 gtk_box_pack_end(GTK_BOX(widget),window->button,FALSE,FALSE,4);
148 180 gtk_widget_set_sensitive(window->button,FALSE);
149 181 gtk_button_set_focus_on_click(GTK_BUTTON(window->button),FALSE);
150 182  
151   - g_signal_connect(G_OBJECT(window->button),"clicked",G_CALLBACK(gtk_window_activate_default),window);
  183 + g_signal_connect(G_OBJECT(window->button),"clicked",G_CALLBACK(activate),window);
152 184  
153 185 gtk_box_pack_start(GTK_BOX(vbox),widget,FALSE,TRUE,0);
154 186  
... ... @@ -194,17 +226,19 @@ static void destroy(GtkObject *widget)
194 226  
195 227 LIB3270_EXPORT gchar * pw3270_trace_get_command(GtkWidget *widget)
196 228 {
197   - pw3270_trace * hwnd = PW3270_TRACE(widget);
198   - gchar * line = NULL;
  229 + pw3270_trace * hwnd = PW3270_TRACE(widget);
  230 + gchar * line = NULL;
  231 + gboolean enabled = TRUE;
199 232  
200   - hwnd->line = &line;
  233 + hwnd->line = &line;
  234 + hwnd->enabled = &enabled;
201 235  
202 236 gtk_window_present(GTK_WINDOW(widget));
203 237 gtk_widget_set_sensitive(hwnd->entry,TRUE);
204 238 gtk_widget_set_sensitive(hwnd->button,TRUE);
205 239 gtk_widget_grab_focus(hwnd->entry);
206 240  
207   - while(hwnd->line)
  241 + while(enabled)
208 242 {
209 243 gtk_main_iteration();
210 244 }
... ...