diff options
Diffstat (limited to 'fluid')
| -rw-r--r-- | fluid/alignment_panel.cxx | 10 | ||||
| -rw-r--r-- | fluid/alignment_panel.fl | 10 | ||||
| -rw-r--r-- | fluid/fluid.cxx | 4 | ||||
| -rw-r--r-- | fluid/shell_command.cxx | 65 |
4 files changed, 60 insertions, 29 deletions
diff --git a/fluid/alignment_panel.cxx b/fluid/alignment_panel.cxx index 323c04cf3..f9f093e94 100644 --- a/fluid/alignment_panel.cxx +++ b/fluid/alignment_panel.cxx @@ -1697,6 +1697,10 @@ Fl_Double_Window *shell_run_window=(Fl_Double_Window *)0; Fl_Simple_Terminal *shell_run_terminal=(Fl_Simple_Terminal *)0; +static void cb_Clear(Fl_Button*, void*) { + shell_run_terminal->clear(); +} + Fl_Return_Button *shell_run_button=(Fl_Return_Button *)0; static void cb_shell_run_button(Fl_Return_Button*, void*) { @@ -1713,9 +1717,13 @@ Fl_Double_Window* make_shell_window() { shell_run_window->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE)); { shell_run_terminal = new Fl_Simple_Terminal(10, 10, 535, 375); Fl_Group::current()->resizable(shell_run_terminal); + shell_run_terminal->ansi(1); } // Fl_Simple_Terminal* shell_run_terminal { Fl_Group* o = new Fl_Group(10, 395, 535, 25); - { Fl_Box* o = new Fl_Box(10, 395, 435, 25); + { Fl_Button* o = new Fl_Button(10, 395, 94, 25, "Clear"); + o->callback((Fl_Callback*)cb_Clear); + } // Fl_Button* o + { Fl_Box* o = new Fl_Box(104, 395, 341, 25); o->hide(); Fl_Group::current()->resizable(o); } // Fl_Box* o diff --git a/fluid/alignment_panel.fl b/fluid/alignment_panel.fl index 2bc7925dd..c7eea9bd7 100644 --- a/fluid/alignment_panel.fl +++ b/fluid/alignment_panel.fl @@ -116,7 +116,7 @@ Function {make_settings_window()} {open xywh {10 10 320 530} selection_color 12 labelsize 11 labelcolor 255 } { Fl_Group {} { - label General open selected + label General open image {icons/general_64.png} compress_image 1 xywh {10 60 320 480} labelsize 11 code0 {o->image()->scale(36, 24);} } { @@ -981,12 +981,18 @@ Function {make_shell_window()} {open } { Fl_Simple_Terminal shell_run_terminal { xywh {10 10 535 375} resizable + code0 {shell_run_terminal->ansi(1);} } Fl_Group {} {open xywh {10 395 535 25} } { + Fl_Button {} { + label Clear + callback {shell_run_terminal->clear();} selected + xywh {10 395 94 25} + } Fl_Box {} { - xywh {10 395 435 25} hide resizable + xywh {104 395 341 25} hide resizable } Fl_Return_Button shell_run_button { label Close diff --git a/fluid/fluid.cxx b/fluid/fluid.cxx index 8ae89785d..2d5b05bde 100644 --- a/fluid/fluid.cxx +++ b/fluid/fluid.cxx @@ -721,6 +721,10 @@ void exit_cb(Fl_Widget *,void *) { delete sourceview_panel; sourceview_panel = 0; } + if (shell_run_window) { + save_position(shell_run_window,"shell_run_Window_pos"); + } + if (about_panel) delete about_panel; if (help_dialog) diff --git a/fluid/shell_command.cxx b/fluid/shell_command.cxx index 46d8b8f46..58af4c6cf 100644 --- a/fluid/shell_command.cxx +++ b/fluid/shell_command.cxx @@ -262,6 +262,21 @@ static bool prepare_shell_command() { return true; } +void shell_proc_done() { + shell_run_terminal->append("... END SHELL COMMAND ...\n"); + shell_run_button->activate(); + shell_run_window->label("FLUID Shell"); + fl_beep(); +} + +void shell_timer_cb(void*) { + if (!s_proc.desc()) { + shell_proc_done(); + } else { + Fl::add_timeout(0.25, shell_timer_cb); + } +} + // Support the full piped shell command... void shell_pipe_cb(FL_SOCKET, void*) { char line[1024]=""; // Line from command output... @@ -271,48 +286,46 @@ void shell_pipe_cb(FL_SOCKET, void*) { shell_run_terminal->append(line); } else { // End of file; tell the parent... + Fl::remove_timeout(shell_timer_cb); Fl::remove_fd(s_proc.get_fileno()); s_proc.close(); - shell_run_terminal->append("... END SHELL COMMAND ...\n"); + shell_proc_done(); } } void do_shell_command(Fl_Return_Button*, void*) { if (!prepare_shell_command()) return; + if (!shell_run_window->visible()) { + Fl_Preferences pos(fluid_prefs, "shell_run_Window_pos"); + int x, y, w, h; + pos.get("x", x, -1); + pos.get("y", y, 0); + pos.get("w", w, 640); + pos.get("h", h, 480); + if (x!=-1) { + shell_run_window->resize(x, y, w, h); + } + shell_run_window->show(); + } + // Show the output window and clear things... - shell_run_terminal->text(""); - shell_run_terminal->append(g_shell_command.c_str()); - shell_run_terminal->append("\n"); - shell_run_window->label("Shell Command Running..."); + shell_run_terminal->printf("\e[0;32m%s\e[0m\n", g_shell_command.c_str()); + shell_run_window->label(g_shell_command.c_str()); if (s_proc.popen((char *)g_shell_command.c_str()) == NULL) { - fl_alert("Unable to run shell command: %s", strerror(errno)); + shell_run_terminal->printf("\e[1;31mUnable to run shell command: %s\e[0m\n", + strerror(errno)); + shell_run_window->label("FLUID Shell"); return; } - shell_run_button->deactivate(); - Fl_Preferences pos(fluid_prefs, "shell_run_Window_pos"); - int x, y, w, h; - pos.get("x", x, -1); - pos.get("y", y, 0); - pos.get("w", w, 640); - pos.get("h", h, 480); - if (x!=-1) { - shell_run_window->resize(x, y, w, h); - } - shell_run_window->show(); - + // if the function below does not for some reason, we will check periodically + // to see if the command is done + Fl::add_timeout(0.25, shell_timer_cb); + // this will tell us when the shell command is done Fl::add_fd(s_proc.get_fileno(), shell_pipe_cb); - - while (s_proc.desc()) Fl::wait(); - - shell_run_button->activate(); - shell_run_window->label("Shell Command Complete"); - fl_beep(); - - while (shell_run_window->shown()) Fl::wait(); } /** |
