Commit 818e87e6f91e43209446d407476304b898c82c23

Authored by Perry Werneck
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 28  
29 29 static GtkWidget * factory(V3270SimpleAction *action, GtkWidget *terminal);
30 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 33 GAction * pw3270_script_action_new() {
33 34  
... ... @@ -75,6 +76,14 @@ GtkWidget * factory(V3270SimpleAction * action, GtkWidget *terminal) {
75 76 gtk_widget_set_vexpand(input,FALSE);
76 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 87 gtk_grid_attach(grid,input,1,0,10,1);
79 88  
80 89 // Setup window
... ... @@ -89,6 +98,8 @@ GtkWidget * factory(V3270SimpleAction * action, GtkWidget *terminal) {
89 98 NULL
90 99 );
91 100  
  101 + /*
  102 + // Cant use gtk_entry_bind_to_filechooser due to plugin interaction
92 103 gtk_entry_bind_to_filechooser(
93 104 input,
94 105 GTK_FILE_CHOOSER_ACTION_OPEN,
... ... @@ -97,6 +108,7 @@ GtkWidget * factory(V3270SimpleAction * action, GtkWidget *terminal) {
97 108 "*.*",
98 109 _("All files")
99 110 );
  111 + */
100 112  
101 113 g_signal_connect(dialog,"response",G_CALLBACK(response),input);
102 114  
... ... @@ -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 167 void response(GtkWidget *dialog, gint response_id, GtkWidget *input) {
109 168  
110 169 if(response_id == GTK_RESPONSE_APPLY) {
... ...