diff options
| author | Michael R Sweet <michael.r.sweet@gmail.com> | 2007-01-04 14:53:54 +0000 |
|---|---|---|
| committer | Michael R Sweet <michael.r.sweet@gmail.com> | 2007-01-04 14:53:54 +0000 |
| commit | 5456a2b8fc5b1d1121a8b80d6f190147c3f89f45 (patch) | |
| tree | 4e7a149283061ee49b551e61b4d1e8acaafebb00 /src | |
| parent | e806450644365883a6561552bdb2dc65566a8e20 (diff) | |
Add fl_open_uri() function as discussed on fltk.development.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@5579 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
| -rw-r--r-- | src/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/Makefile | 1 | ||||
| -rw-r--r-- | src/fl_open_uri.cxx | 365 | ||||
| -rw-r--r-- | src/makedepend | 47 |
4 files changed, 399 insertions, 15 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e922e3b5b..2816249d4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -107,6 +107,7 @@ SET(CPPFILES fl_gtk.cxx fl_labeltype.cxx fl_line_style.cxx + fl_open_uri.cxx fl_oval_box.cxx fl_overlay.cxx fl_overlay_visual.cxx diff --git a/src/Makefile b/src/Makefile index 4397eb5f5..5c56c00b7 100644 --- a/src/Makefile +++ b/src/Makefile @@ -136,6 +136,7 @@ CPPFILES = \ fl_gtk.cxx \ fl_labeltype.cxx \ fl_line_style.cxx \ + fl_open_uri.cxx \ fl_oval_box.cxx \ fl_overlay.cxx \ fl_overlay_visual.cxx \ diff --git a/src/fl_open_uri.cxx b/src/fl_open_uri.cxx new file mode 100644 index 000000000..7063c29d8 --- /dev/null +++ b/src/fl_open_uri.cxx @@ -0,0 +1,365 @@ +// +// "$Id$" +// +// fl_open_uri() code for FLTK. +// +// Test with: +// +// gcc -I/fltk/dir -I/fltk/dir/src -DTEST -o fl_open_uri fl_open_uri.cxx -lfltk +// +// Copyright 2003-2007 by Michael R Sweet +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA. +// + +// +// Include necessary headers... +// + +#include <FL/filename.H> +#include <stdio.h> +#include <stdlib.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/wait.h> +#include "flstring.h" +#ifdef WIN32 +# include <windows.h> +#else +# include <signal.h> +# include <fcntl.h> +# include <unistd.h> +#endif // WIN32 + + +// +// Local functions... +// + +#ifndef WIN32 +static char *path_find(const char *program, char *filename, int filesize); +static int run_program(const char *program, char **argv, char *msg, int msglen); +#endif // !WIN32 + + +/** + * Open the specified URI. + * + * fl_open_uri() opens the specified Uniform Resource Identifier (URI) + * using an operating-system dependent program or interface. For URIs + * using the "ftp", "http", or "https" schemes, the system default web + * browser is used to open the URI, while "mailto" and "news" URIs are + * typically opened using the system default mail reader and "file" URIs + * are opened using the file system navigator. + * + * On success, the (optional) msg buffer is filled with the command that + * was run to open the URI; on Windows, this will always be "open uri". + * + * On failure, the msg buffer is filled with an English error message. + * + * @param uri The URI to open + * @param msg Optional buffer which contains the command or error message + * @param msglen Length of optional buffer + * @return 1 on success, 0 on failure + */ + +int +fl_open_uri(const char *uri, char *msg, int msglen) { + // Supported URI schemes... + static const char * const schemes[] = { + "file://", + "ftp://", + "http://", + "https://", + "mailto:", + "news://", + NULL + }; + + // Validate the URI scheme... + int i; + for (i = 0; schemes[i]; i ++) + if (!strncmp(uri, schemes[i], strlen(schemes[i]))) + break; + + if (!schemes[i]) { + if (msg) { + char scheme[255]; + if (sscanf(uri, "%254[^:]", scheme) == 1) { + snprintf(msg, msglen, "URI scheme \"%s\" not supported.", scheme); + } else { + snprintf(msg, msglen, "Bad URI \"%s\"", uri); + } + } + + return 0; + } + +#ifdef WIN32 + if (msg) snprintf(msg, msglen, "open %s", uri); + + ShellExecute(HWND_DESKTOP, "open", uri, NULL, NULL, SW_SHOW); + +#elif defined(__APPLE__) + char *argv[3]; // Command-line arguments + + argv[0] = "open"; + argv[1] = (char *)uri; + argv[2] = 0; + + if (msg) snprintf(msg, msglen, "open %s", uri); + + return run_program("/usr/bin/open", argv, msg, msglen) != 0; + +#else // !WIN32 && !__APPLE__ + // Run any of several well-known commands to open the URI. + // + // We give preference to the Portland group's xdg-utils + // programs which run the user's preferred web browser, etc. + // based on the current desktop environment in use. We fall + // back on older standards and then finally test popular programs + // until we find one we can use. + // + // Note that we specifically do not support the MAILER and + // BROWSER environment variables because we have no idea whether + // we need to run the listed commands in a terminal program. + + char command[1024], // Command to run... + *argv[4], // Command-line arguments + remote[1024]; // Remote-mode command... + const char * const *commands; // Array of commands to check... + static const char * const browsers[] = { + "xdg-open", // Portland + "htmlview", // Freedesktop.org + "firefox", + "mozilla", + "netscape", + "konqueror", // KDE + "opera", + "hotjava", // Solaris + "mosaic", + NULL + }; + static const char * const readers[] = { + "xdg-email", // Portland + "thunderbird", + "mozilla", + "netscape", + "evolution", // GNOME + "kmailservice", // KDE + NULL + }; + static const char * const managers[] = { + "xdg-open", // Portland + "fm", // IRIX + "dtaction", // CDE + "nautilus", // GNOME + "konqueror", // KDE + NULL + }; + + // Figure out which commands to check for... + if (!strncmp(uri, "file://", 7)) commands = managers; + else if (!strncmp(uri, "mailto:", 7) || + !strncmp(uri, "news:", 5)) commands = readers; + else commands = browsers; + + // Find the command to run... + for (i = 0; commands[i]; i ++) + if (path_find(commands[i], command, sizeof(command))) break; + + if (!commands[i]) { + if (msg) { + snprintf(msg, msglen, "No helper application found for \"%s\"", uri); + } + + return 0; + } + + // Handle command-specific arguments... + argv[0] = (char *)commands[i]; + + if (!strcmp(commands[i], "firefox") || + !strcmp(commands[i], "mozilla") || + !strcmp(commands[i], "netscape") || + !strcmp(commands[i], "thunderbird")) { + // program -remote openURL(uri) + snprintf(remote, sizeof(remote), "openURL(%s)", uri); + + argv[1] = (char *)"-remote"; + argv[2] = remote; + argv[3] = 0; + } else if (!strcmp(commands[i], "dtaction")) { + // dtaction open uri + argv[1] = (char *)"open"; + argv[2] = (char *)uri; + argv[3] = 0; + } else { + // program uri + argv[1] = (char *)uri; + argv[2] = 0; + } + + if (msg) { + strlcpy(msg, argv[0], msglen); + + for (i = 1; argv[i]; i ++) { + strlcat(msg, " ", msglen); + strlcat(msg, argv[i], msglen); + } + } + + return run_program(command, argv, msg, msglen) != 0; +#endif // WIN32 +} + + +#ifndef WIN32 +// Find a program in the path... +static char *path_find(const char *program, char *filename, int filesize) { + const char *path; // Search path + char *ptr, // Pointer into filename + *end; // End of filename buffer + + + if ((path = getenv("PATH")) == NULL) path = "/bin:/usr/bin"; + + for (ptr = filename, end = filename + filesize - 1; *path; path ++) { + if (*path == ':') { + if (ptr > filename && ptr[-1] != '/' && ptr < end) *ptr++ = '/'; + + strlcpy(ptr, program, end - ptr + 1); + + if (!access(filename, X_OK)) return filename; + + ptr = filename; + } else if (ptr < end) *ptr++ = *path; + } + + if (ptr > filename) { + if (ptr[-1] != '/' && ptr < end) *ptr++ = '/'; + + strlcpy(ptr, program, end - ptr + 1); + + if (!access(filename, X_OK)) return filename; + } + + return 0; +} + + +// Run the specified program, returning 1 on success and 0 on failure +static int +run_program(const char *program, char **argv, char *msg, int msglen) { + pid_t pid; // Process ID of first child + int status; // Exit status from first child + sigset_t set, oldset; // Signal masks + + + // Block SIGCHLD while we run the program... + // + // Note that I only use the POSIX signal APIs, however older operating + // systems may either not support POSIX signals or have side effects. + // IRIX, for example, provides three separate and incompatible signal + // APIs, so it is possible that an application setting a signal handler + // via signal() or sigset() will not have its SIGCHLD signals blocked... + + sigemptyset(&set); + sigaddset(&set, SIGCHLD); + sigprocmask(SIG_BLOCK, &set, &oldset); + + // Create child processes that actually run the program for us... + if ((pid = fork()) == 0) { + // First child comes here, fork a second child and exit... + if (!fork()) { + // Second child comes here, redirect stdin/out/err to /dev/null... + close(0); + open("/dev/null", O_RDONLY); + + close(1); + open("/dev/null", O_WRONLY); + + close(2); + open("/dev/null", O_WRONLY); + + // Detach from the current process group... + setsid(); + + // Run the program... + execv(program, argv); + _exit(0); + } else { + // First child gets here, exit immediately... + _exit(0); + } + } else if (pid < 0) { + // Restore signal handling... + sigprocmask(SIG_SETMASK, &oldset, NULL); + + // Return indicating failure... + return 0; + } + + // Wait for the first child to exit... + while (waitpid(pid, &status, 0) < 0) { + if (errno != EINTR) { + // Someone else grabbed the child status... + if (msg) snprintf(msg, msglen, "waitpid(%ld) failed: %s", (long)pid, + strerror(errno)); + + // Restore signal handling... + sigprocmask(SIG_SETMASK, &oldset, NULL); + + // Return indicating failure... + return 0; + } + } + + // Restore signal handling... + sigprocmask(SIG_SETMASK, &oldset, NULL); + + // Return indicating success... + return 1; +} +#endif // !WIN32 + + +#ifdef TEST +// +// Test code... +// + +// Open the URI on the command-line... +int main(int argc, char **argv) { + char msg[1024]; + + + if (argc != 2) { + puts("Usage: fl_open_uri URI"); + return 1; + } + + if (!fl_open_uri(argv[1], msg, sizeof(msg))) { + puts(msg); + return 1; + } else return 0; +} +#endif // TEST + + +// +// End of "$Id$". +// diff --git a/src/makedepend b/src/makedepend index 86b614821..1f3942f34 100644 --- a/src/makedepend +++ b/src/makedepend @@ -43,7 +43,8 @@ Fl_Check_Button.o: ../FL/Fl_Check_Button.H ../FL/Fl_Light_Button.H Fl_Check_Button.o: ../FL/Fl_Button.H ../FL/Fl_Widget.H Fl_Choice.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H Fl_Choice.o: ../FL/Fl_Choice.H ../FL/Fl_Menu_.H ../FL/Fl_Widget.H -Fl_Choice.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Image.H ../FL/fl_draw.H +Fl_Choice.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Image.H ../FL/fl_draw.H flstring.h +Fl_Choice.o: ../FL/Fl_Export.H ../config.h Fl_Clock.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H Fl_Clock.o: ../FL/Fl_Clock.H ../FL/Fl_Widget.H ../FL/fl_draw.H Fl_Color_Chooser.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H @@ -113,12 +114,14 @@ Fl_Help_View.o: ../FL/Fl_Help_View.H ../FL/Fl.H ../FL/Enumerations.H Fl_Help_View.o: ../FL/Fl_Export.H ../FL/Fl_Group.H ../FL/Fl_Widget.H Fl_Help_View.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H Fl_Help_View.o: ../FL/fl_draw.H ../FL/Fl_Shared_Image.H ../FL/Fl_Image.H -Fl_Help_View.o: ../FL/Fl_Pixmap.H flstring.h ../FL/Fl_Export.H ../config.h +Fl_Help_View.o: ../FL/Fl_Window.H ../FL/Fl_Pixmap.H flstring.h +Fl_Help_View.o: ../FL/Fl_Export.H ../config.h Fl_Image.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H ../FL/fl_draw.H Fl_Image.o: ../FL/x.H ../FL/Fl_Window.H ../FL/Fl_Widget.H Fl_Image.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Widget.H ../FL/Fl_Image.H Fl_Image.o: ../FL/Fl_Image.H flstring.h ../FL/Fl_Export.H ../config.h Fl_Input.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H +Fl_Input.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H Fl_Input.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/fl_draw.H ../FL/fl_ask.H Fl_Input.o: flstring.h ../FL/Fl_Export.H ../config.h Fl_Input_.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H @@ -127,11 +130,13 @@ Fl_Input_.o: ../FL/Fl_Group.H ../FL/fl_draw.H ../FL/fl_ask.H flstring.h Fl_Input_.o: ../FL/Fl_Export.H ../config.h Fl_Light_Button.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H Fl_Light_Button.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H -Fl_Light_Button.o: ../FL/Fl_Widget.H ../FL/fl_draw.H +Fl_Light_Button.o: ../FL/Fl_Widget.H ../FL/fl_draw.H flstring.h +Fl_Light_Button.o: ../FL/Fl_Export.H ../config.h Fl_Menu.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H Fl_Menu.o: ../FL/Fl_Menu_Window.H ../FL/Fl_Single_Window.H ../FL/Fl_Window.H Fl_Menu.o: ../FL/Fl_Menu_.H ../FL/Fl_Widget.H ../FL/Fl_Menu_Item.H -Fl_Menu.o: ../FL/Fl_Image.H ../FL/fl_draw.H +Fl_Menu.o: ../FL/Fl_Image.H ../FL/fl_draw.H flstring.h ../FL/Fl_Export.H +Fl_Menu.o: ../config.h Fl_Menu_.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H Fl_Menu_.o: ../FL/Fl_Menu_.H ../FL/Fl_Widget.H ../FL/Fl_Menu_Item.H Fl_Menu_.o: ../FL/Fl_Image.H flstring.h ../FL/Fl_Export.H ../config.h @@ -189,7 +194,8 @@ Fl_Scroll.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Scrollbar.H Fl_Scroll.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/fl_draw.H Fl_Scrollbar.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H Fl_Scrollbar.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H -Fl_Scrollbar.o: ../FL/Fl_Widget.H ../FL/fl_draw.H +Fl_Scrollbar.o: ../FL/Fl_Widget.H ../FL/fl_draw.H flstring.h +Fl_Scrollbar.o: ../FL/Fl_Export.H ../config.h Fl_Shared_Image.o: flstring.h ../FL/Fl_Export.H ../config.h ../FL/Fl.H Fl_Shared_Image.o: ../FL/Enumerations.H ../FL/Fl_Export.H Fl_Shared_Image.o: ../FL/Fl_Shared_Image.H ../FL/Fl_Image.H @@ -198,9 +204,10 @@ Fl_Shared_Image.o: ../FL/Fl_XPM_Image.H ../FL/Fl_Pixmap.H Fl_Single_Window.o: ../FL/Fl_Single_Window.H ../FL/Fl_Window.H Fl_Slider.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H Fl_Slider.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_Widget.H -Fl_Slider.o: ../FL/fl_draw.H +Fl_Slider.o: ../FL/fl_draw.H flstring.h ../FL/Fl_Export.H ../config.h Fl_Tabs.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H ../FL/Fl_Tabs.H Fl_Tabs.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/fl_draw.H +Fl_Tabs.o: ../FL/Fl_Tooltip.H ../FL/Fl_Widget.H Fl_Text_Buffer.o: flstring.h ../FL/Fl_Export.H ../config.h ../FL/Fl.H Fl_Text_Buffer.o: ../FL/Enumerations.H ../FL/Fl_Export.H Fl_Text_Buffer.o: ../FL/Fl_Text_Buffer.H @@ -211,9 +218,9 @@ Fl_Text_Display.o: ../FL/fl_draw.H ../FL/Fl_Group.H ../FL/Fl_Widget.H Fl_Text_Display.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H Fl_Text_Display.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Window.H Fl_Text_Editor.o: flstring.h ../FL/Fl_Export.H ../config.h ../FL/Fl.H -Fl_Text_Editor.o: ../FL/Enumerations.H ../FL/Fl_Export.H -Fl_Text_Editor.o: ../FL/Fl_Text_Editor.H ../FL/Fl_Text_Display.H -Fl_Text_Editor.o: ../FL/fl_draw.H ../FL/Fl_Group.H ../FL/Fl_Widget.H +Fl_Text_Editor.o: ../FL/Enumerations.H ../FL/Fl_Export.H ../FL/Fl_Window.H +Fl_Text_Editor.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Text_Editor.H +Fl_Text_Editor.o: ../FL/Fl_Text_Display.H ../FL/fl_draw.H Fl_Text_Editor.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H Fl_Text_Editor.o: ../FL/Fl_Text_Buffer.H ../FL/fl_ask.H Fl_Tile.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H ../FL/Fl_Tile.H @@ -286,7 +293,8 @@ Fl_visual.o: ../config.h ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H Fl_visual.o: ../FL/x.H ../FL/Fl_Window.H Fl_x.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H ../FL/x.H Fl_x.o: ../FL/Fl_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H -Fl_x.o: ../FL/Fl_Widget.H flstring.h ../FL/Fl_Export.H ../config.h +Fl_x.o: ../FL/Fl_Widget.H ../FL/Fl_Tooltip.H ../FL/Fl_Widget.H flstring.h +Fl_x.o: ../FL/Fl_Export.H ../config.h filename_absolute.o: ../FL/filename.H flstring.h ../FL/Fl_Export.H filename_absolute.o: ../config.h filename_expand.o: ../FL/filename.H flstring.h ../FL/Fl_Export.H ../config.h @@ -318,7 +326,7 @@ fl_diamond_box.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H fl_diamond_box.o: ../FL/fl_draw.H fl_dnd.o: fl_dnd_x.cxx ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H fl_dnd.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/x.H -fl_dnd.o: ../FL/Fl_Window.H +fl_dnd.o: ../FL/Fl_Window.H flstring.h ../FL/Fl_Export.H ../config.h fl_draw.o: ../FL/fl_draw.H ../FL/Enumerations.H ../FL/Fl_Export.H fl_draw.o: ../FL/Fl_Image.H flstring.h ../FL/Fl_Export.H ../config.h fl_draw_image.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H @@ -328,6 +336,12 @@ fl_draw_image.o: ../FL/Fl_Export.H fl_draw_pixmap.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H fl_draw_pixmap.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H flstring.h fl_draw_pixmap.o: ../FL/Fl_Export.H ../config.h +fl_encoding_latin1.o: ../FL/fl_draw.H ../FL/Enumerations.H ../FL/Fl_Export.H +fl_encoding_latin1.o: ../FL/Enumerations.H flstring.h ../FL/Fl_Export.H +fl_encoding_latin1.o: ../config.h +fl_encoding_mac_roman.o: ../FL/fl_draw.H ../FL/Enumerations.H +fl_encoding_mac_roman.o: ../FL/Fl_Export.H ../FL/Enumerations.H flstring.h +fl_encoding_mac_roman.o: ../FL/Fl_Export.H ../config.h fl_engraved_label.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H fl_engraved_label.o: ../FL/Fl_Widget.H ../FL/fl_draw.H fl_file_dir.o: flstring.h ../FL/Fl_Export.H ../config.h ../FL/filename.H @@ -345,13 +359,15 @@ fl_file_dir.o: ../FL/Fl_Button.H ../FL/Fl_File_Input.H ../FL/Fl_Input.H fl_file_dir.o: ../FL/Fl_Input_.H ../FL/Fl_Return_Button.H ../FL/fl_ask.H fl_font.o: flstring.h ../FL/Fl_Export.H ../config.h ../FL/Fl.H fl_font.o: ../FL/Enumerations.H ../FL/Fl_Export.H ../FL/fl_draw.H ../FL/x.H -fl_font.o: ../FL/Fl_Window.H Fl_Font.H fl_font_x.cxx +fl_font.o: ../FL/Fl_Window.H Fl_Font.H fl_font_xft.cxx +fl_gtk.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H ../FL/fl_draw.H fl_labeltype.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H fl_labeltype.o: ../FL/Fl_Widget.H ../FL/Fl_Group.H ../FL/fl_draw.H fl_labeltype.o: ../FL/Fl_Image.H ../FL/Fl_Input_.H ../FL/Fl_Widget.H fl_line_style.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H fl_line_style.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H flstring.h fl_line_style.o: ../FL/Fl_Export.H ../config.h +fl_open_uri.o: ../FL/filename.H flstring.h ../FL/Fl_Export.H ../config.h fl_oval_box.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H fl_oval_box.o: ../FL/fl_draw.H fl_overlay.o: ../FL/x.H ../FL/Enumerations.H ../FL/Fl_Export.H @@ -369,13 +385,14 @@ fl_round_box.o: ../FL/fl_draw.H fl_rounded_box.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H fl_rounded_box.o: ../FL/fl_draw.H fl_set_font.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H ../FL/x.H -fl_set_font.o: ../FL/Fl_Window.H flstring.h ../FL/Fl_Export.H ../config.h -fl_set_font.o: Fl_Font.H +fl_set_font.o: ../FL/Fl_Window.H ../FL/fl_draw.H flstring.h ../FL/Fl_Export.H +fl_set_font.o: ../config.h Fl_Font.H fl_set_fonts.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H ../FL/x.H fl_set_fonts.o: ../FL/Fl_Window.H Fl_Font.H ../config.h flstring.h -fl_set_fonts.o: ../FL/Fl_Export.H fl_set_fonts_x.cxx +fl_set_fonts.o: ../FL/Fl_Export.H fl_set_fonts_xft.cxx fl_scroll_area.o: ../config.h ../FL/Fl.H ../FL/Enumerations.H fl_scroll_area.o: ../FL/Fl_Export.H ../FL/x.H ../FL/Fl_Window.H +fl_scroll_area.o: ../FL/fl_draw.H fl_shadow_box.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H fl_shadow_box.o: ../FL/fl_draw.H fl_shortcut.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H |
