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) { |