Commit 818e87e6f91e43209446d407476304b898c82c23
1 parent
2bb408b2
Exists in
script-support
Working on script dialog.
Showing
1 changed file
with
59 additions
and
0 deletions
Show diff stats
src/objects/application/actions/script.c
@@ -28,6 +28,7 @@ | @@ -28,6 +28,7 @@ | ||
28 | 28 | ||
29 | static GtkWidget * factory(V3270SimpleAction *action, GtkWidget *terminal); | 29 | static GtkWidget * factory(V3270SimpleAction *action, GtkWidget *terminal); |
30 | static void response(GtkWidget *dialog, gint response_id, GtkWidget *input); | 30 | static void response(GtkWidget *dialog, gint response_id, GtkWidget *input); |
31 | +static void icon_press(GtkWidget *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, const void *dunno); | ||
31 | 32 | ||
32 | GAction * pw3270_script_action_new() { | 33 | GAction * pw3270_script_action_new() { |
33 | 34 | ||
@@ -75,6 +76,14 @@ GtkWidget * factory(V3270SimpleAction * action, GtkWidget *terminal) { | @@ -75,6 +76,14 @@ GtkWidget * factory(V3270SimpleAction * action, GtkWidget *terminal) { | ||
75 | gtk_widget_set_vexpand(input,FALSE); | 76 | gtk_widget_set_vexpand(input,FALSE); |
76 | gtk_entry_set_width_chars(GTK_ENTRY(input),60); | 77 | gtk_entry_set_width_chars(GTK_ENTRY(input),60); |
77 | 78 | ||
79 | + gtk_entry_set_icon_from_icon_name( | ||
80 | + GTK_ENTRY(input), | ||
81 | + GTK_ENTRY_ICON_SECONDARY, | ||
82 | + "document-open" | ||
83 | + ); | ||
84 | + | ||
85 | + g_signal_connect(input,"icon_press",G_CALLBACK(icon_press),NULL); | ||
86 | + | ||
78 | gtk_grid_attach(grid,input,1,0,10,1); | 87 | gtk_grid_attach(grid,input,1,0,10,1); |
79 | 88 | ||
80 | // Setup window | 89 | // Setup window |
@@ -89,6 +98,8 @@ GtkWidget * factory(V3270SimpleAction * action, GtkWidget *terminal) { | @@ -89,6 +98,8 @@ GtkWidget * factory(V3270SimpleAction * action, GtkWidget *terminal) { | ||
89 | NULL | 98 | NULL |
90 | ); | 99 | ); |
91 | 100 | ||
101 | + /* | ||
102 | + // Cant use gtk_entry_bind_to_filechooser due to plugin interaction | ||
92 | gtk_entry_bind_to_filechooser( | 103 | gtk_entry_bind_to_filechooser( |
93 | input, | 104 | input, |
94 | GTK_FILE_CHOOSER_ACTION_OPEN, | 105 | GTK_FILE_CHOOSER_ACTION_OPEN, |
@@ -97,6 +108,7 @@ GtkWidget * factory(V3270SimpleAction * action, GtkWidget *terminal) { | @@ -97,6 +108,7 @@ GtkWidget * factory(V3270SimpleAction * action, GtkWidget *terminal) { | ||
97 | "*.*", | 108 | "*.*", |
98 | _("All files") | 109 | _("All files") |
99 | ); | 110 | ); |
111 | + */ | ||
100 | 112 | ||
101 | g_signal_connect(dialog,"response",G_CALLBACK(response),input); | 113 | g_signal_connect(dialog,"response",G_CALLBACK(response),input); |
102 | 114 | ||
@@ -105,6 +117,53 @@ GtkWidget * factory(V3270SimpleAction * action, GtkWidget *terminal) { | @@ -105,6 +117,53 @@ GtkWidget * factory(V3270SimpleAction * action, GtkWidget *terminal) { | ||
105 | 117 | ||
106 | } | 118 | } |
107 | 119 | ||
120 | +void icon_press(GtkWidget *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, const void *dunno) { | ||
121 | + | ||
122 | + GtkWidget * dialog = | ||
123 | + gtk_file_chooser_dialog_new( | ||
124 | + _("Select script to run"), | ||
125 | + GTK_WINDOW(gtk_widget_get_toplevel(entry)), | ||
126 | + GTK_FILE_CHOOSER_ACTION_OPEN, | ||
127 | + _("Cancel"), GTK_RESPONSE_CANCEL, | ||
128 | + _("Run"), GTK_RESPONSE_ACCEPT, | ||
129 | + NULL | ||
130 | + ); | ||
131 | + | ||
132 | + gtk_window_set_modal(GTK_WINDOW(dialog),TRUE); | ||
133 | + gtk_window_set_deletable(GTK_WINDOW(dialog),FALSE); | ||
134 | + | ||
135 | + const gchar *filename = gtk_entry_get_text(GTK_ENTRY(entry)); | ||
136 | + | ||
137 | + pw3270_application_plugin_call( | ||
138 | + g_application_get_default(), | ||
139 | + "pw3270_plugin_set_script_chooser", | ||
140 | + dialog | ||
141 | + ); | ||
142 | + | ||
143 | + /* | ||
144 | + g_autoptr(GSList) filters = gtk_file_chooser_list_filters(GTK_FILE_CHOOSER(dialog)); | ||
145 | + | ||
146 | + if(g_slist_length(filters) == 0) { | ||
147 | + gtk_widget_destroy(dialog); | ||
148 | + } | ||
149 | + */ | ||
150 | + | ||
151 | + if(filename && *filename) | ||
152 | + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),filename); | ||
153 | + | ||
154 | + gtk_widget_show_all(dialog); | ||
155 | + | ||
156 | + if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { | ||
157 | + | ||
158 | + g_autofree gchar * filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); | ||
159 | + gtk_entry_set_text(GTK_ENTRY(entry),filename); | ||
160 | + | ||
161 | + } | ||
162 | + | ||
163 | + gtk_widget_destroy(dialog); | ||
164 | + | ||
165 | +} | ||
166 | + | ||
108 | void response(GtkWidget *dialog, gint response_id, GtkWidget *input) { | 167 | void response(GtkWidget *dialog, gint response_id, GtkWidget *input) { |
109 | 168 | ||
110 | if(response_id == GTK_RESPONSE_APPLY) { | 169 | if(response_id == GTK_RESPONSE_APPLY) { |