Commit a3fdfc937e9c1f84d436075d65056c02cefd0934
1 parent
97bf1562
Exists in
master
and in
5 other branches
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,6 +55,7 @@ | ||
| 55 | GtkWidget * entry; | 55 | GtkWidget * entry; |
| 56 | GtkWidget * button; | 56 | GtkWidget * button; |
| 57 | gchar **line; | 57 | gchar **line; |
| 58 | + gboolean * enabled; | ||
| 58 | }; | 59 | }; |
| 59 | 60 | ||
| 60 | const GtkWindowClass * pw3270_trace_get_parent_class(void); | 61 | const GtkWindowClass * pw3270_trace_get_parent_class(void); |
| @@ -73,7 +74,19 @@ | @@ -73,7 +74,19 @@ | ||
| 73 | 74 | ||
| 74 | static void activate_default(GtkWindow *window) | 75 | static void activate_default(GtkWindow *window) |
| 75 | { | 76 | { |
| 77 | + pw3270_trace * hwnd = PW3270_TRACE(window); | ||
| 78 | + | ||
| 76 | trace("%s",__FUNCTION__); | 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 | #if GTK_CHECK_VERSION(3,0,0) | 92 | #if GTK_CHECK_VERSION(3,0,0) |
| @@ -84,7 +97,8 @@ static void destroy(GtkObject *widget) | @@ -84,7 +97,8 @@ static void destroy(GtkObject *widget) | ||
| 84 | { | 97 | { |
| 85 | pw3270_trace * hwnd = PW3270_TRACE(widget); | 98 | pw3270_trace * hwnd = PW3270_TRACE(widget); |
| 86 | 99 | ||
| 87 | - hwnd->line = NULL; | 100 | + hwnd->line = NULL; |
| 101 | + *hwnd->enabled = FALSE; | ||
| 88 | 102 | ||
| 89 | #if GTK_CHECK_VERSION(3,0,0) | 103 | #if GTK_CHECK_VERSION(3,0,0) |
| 90 | GTK_WIDGET_CLASS(pw3270_trace_parent_class)->destroy(widget); | 104 | GTK_WIDGET_CLASS(pw3270_trace_parent_class)->destroy(widget); |
| @@ -94,17 +108,28 @@ static void destroy(GtkObject *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 | static void pw3270_trace_class_init(pw3270_traceClass *klass) | 121 | static void pw3270_trace_class_init(pw3270_traceClass *klass) |
| 98 | { | 122 | { |
| 99 | GtkWindowClass * window_class = GTK_WINDOW_CLASS(klass); | 123 | GtkWindowClass * window_class = GTK_WINDOW_CLASS(klass); |
| 124 | + GtkWidgetClass * widget_class = GTK_WIDGET_CLASS(klass); | ||
| 100 | 125 | ||
| 101 | trace("%s",__FUNCTION__); | 126 | trace("%s",__FUNCTION__); |
| 102 | 127 | ||
| 103 | window_class->activate_default = activate_default; | 128 | window_class->activate_default = activate_default; |
| 129 | + widget_class->delete_event = delete_event; | ||
| 104 | 130 | ||
| 105 | #if GTK_CHECK_VERSION(3,0,0) | 131 | #if GTK_CHECK_VERSION(3,0,0) |
| 106 | { | 132 | { |
| 107 | - GtkWidgetClass * widget_class = GTK_WIDGET_CLASS(klass); | ||
| 108 | widget_class->destroy = destroy; | 133 | widget_class->destroy = destroy; |
| 109 | } | 134 | } |
| 110 | #else | 135 | #else |
| @@ -116,6 +141,12 @@ static void destroy(GtkObject *widget) | @@ -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 | static void pw3270_trace_init(pw3270_trace *window) | 150 | static void pw3270_trace_init(pw3270_trace *window) |
| 120 | { | 151 | { |
| 121 | GtkWidget *widget; | 152 | GtkWidget *widget; |
| @@ -142,13 +173,14 @@ static void destroy(GtkObject *widget) | @@ -142,13 +173,14 @@ static void destroy(GtkObject *widget) | ||
| 142 | window->entry = gtk_entry_new(); | 173 | window->entry = gtk_entry_new(); |
| 143 | gtk_box_pack_start(GTK_BOX(widget),window->entry,TRUE,TRUE,4); | 174 | gtk_box_pack_start(GTK_BOX(widget),window->entry,TRUE,TRUE,4); |
| 144 | gtk_widget_set_sensitive(window->entry,FALSE); | 175 | gtk_widget_set_sensitive(window->entry,FALSE); |
| 176 | + g_signal_connect(G_OBJECT(window->entry),"activate",G_CALLBACK(activate),window); | ||
| 145 | 177 | ||
| 146 | window->button = gtk_button_new_from_stock(GTK_STOCK_OK); | 178 | window->button = gtk_button_new_from_stock(GTK_STOCK_OK); |
| 147 | gtk_box_pack_end(GTK_BOX(widget),window->button,FALSE,FALSE,4); | 179 | gtk_box_pack_end(GTK_BOX(widget),window->button,FALSE,FALSE,4); |
| 148 | gtk_widget_set_sensitive(window->button,FALSE); | 180 | gtk_widget_set_sensitive(window->button,FALSE); |
| 149 | gtk_button_set_focus_on_click(GTK_BUTTON(window->button),FALSE); | 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 | gtk_box_pack_start(GTK_BOX(vbox),widget,FALSE,TRUE,0); | 185 | gtk_box_pack_start(GTK_BOX(vbox),widget,FALSE,TRUE,0); |
| 154 | 186 | ||
| @@ -194,17 +226,19 @@ static void destroy(GtkObject *widget) | @@ -194,17 +226,19 @@ static void destroy(GtkObject *widget) | ||
| 194 | 226 | ||
| 195 | LIB3270_EXPORT gchar * pw3270_trace_get_command(GtkWidget *widget) | 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 | gtk_window_present(GTK_WINDOW(widget)); | 236 | gtk_window_present(GTK_WINDOW(widget)); |
| 203 | gtk_widget_set_sensitive(hwnd->entry,TRUE); | 237 | gtk_widget_set_sensitive(hwnd->entry,TRUE); |
| 204 | gtk_widget_set_sensitive(hwnd->button,TRUE); | 238 | gtk_widget_set_sensitive(hwnd->button,TRUE); |
| 205 | gtk_widget_grab_focus(hwnd->entry); | 239 | gtk_widget_grab_focus(hwnd->entry); |
| 206 | 240 | ||
| 207 | - while(hwnd->line) | 241 | + while(enabled) |
| 208 | { | 242 | { |
| 209 | gtk_main_iteration(); | 243 | gtk_main_iteration(); |
| 210 | } | 244 | } |