summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael R Sweet <michael.r.sweet@gmail.com>2007-01-04 14:53:54 +0000
committerMichael R Sweet <michael.r.sweet@gmail.com>2007-01-04 14:53:54 +0000
commit5456a2b8fc5b1d1121a8b80d6f190147c3f89f45 (patch)
tree4e7a149283061ee49b551e61b4d1e8acaafebb00
parente806450644365883a6561552bdb2dc65566a8e20 (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
-rw-r--r--CHANGES6
-rw-r--r--FL/filename.H8
-rw-r--r--documentation/functions.html56
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/Makefile1
-rw-r--r--src/fl_open_uri.cxx365
-rw-r--r--src/makedepend47
-rw-r--r--vcnet/fltk.lib.vcproj20
-rw-r--r--vcnet/fltkdll.vcproj18
-rw-r--r--visualc/fltk.lib.dsp4
-rw-r--r--visualc/fltkdll.dsp13
11 files changed, 508 insertions, 31 deletions
diff --git a/CHANGES b/CHANGES
index 6e12f75ef..8a9e133e4 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,8 +1,10 @@
CHANGES IN FLTK 1.1.8
- - added "Fl::has_check()" which previously was prototyped
+ - Added fl_open_uri() function as proposed on
+ fltk.development.
+ - Added Fl::has_check() which previously was prototyped
and documented, but not implemented (STR #1542)
- - enabled "add_check()" on OS X (STR #1534)
+ - Enabled Fl::add_check() on OS X (STR #1534)
- Documented tooltip inheritance (STR #1467)
- Better event mouse handling fixing detached menus and
sticky tooltips (STR #1463, STR #449)
diff --git a/FL/filename.H b/FL/filename.H
index 558154baf..cc86472fe 100644
--- a/FL/filename.H
+++ b/FL/filename.H
@@ -111,6 +111,14 @@ typedef int (Fl_File_Sort_F)(struct dirent **, struct dirent **);
FL_EXPORT int fl_filename_list(const char *d, struct dirent ***l,
Fl_File_Sort_F *s = fl_numericsort);
+
+/*
+ * Generic function to open a Uniform Resource Identifier (URI) using a
+ * system-defined program (added in FLTK 1.1.8)
+ */
+
+FL_EXPORT int fl_open_uri(const char *uri, char *msg = (char *)0,
+ int msglen = 0);
# endif /* __cplusplus */
/*
diff --git a/documentation/functions.html b/documentation/functions.html
index 54849dce2..35c285aa9 100644
--- a/documentation/functions.html
+++ b/documentation/functions.html
@@ -114,6 +114,7 @@ A</A>.
<LI><A HREF="#fl_numericsort"><TT>fl_numericsort</TT></A></LI>
<LI><A HREF="osissues.html#fl_open_callback"><TT>fl_open_callback</TT></A></LI>
<LI><A HREF="osissues.html#fl_open_display"><TT>fl_open_display</TT></A></LI>
+ <LI><A HREF="#fl_open_uri"><TT>fl_open_uri</TT></A></LI>
<LI><A HREF="drawing.html#overlay"><TT>fl_overlay_clear</TT></A></LI>
<LI><A HREF="drawing.html#overlay"><TT>fl_overlay_rect</TT></A></LI>
<LI><A HREF="osissues.html#fl_parse_color"><TT>fl_parse_color</TT></A></LI>
@@ -313,6 +314,7 @@ A</A>.
<LI><A HREF="#fl_filename_name"><TT>fl_filename_name</TT></A></LI>
<LI><A HREF="#fl_filename_relative"><TT>fl_filename_relative</TT></A></LI>
<LI><A HREF="#fl_filename_setext"><TT>fl_filename_setext</TT></A></LI>
+ <LI><A HREF="#fl_open_uri"><TT>fl_open_uri</TT></A></LI>
</UL>
</LI>
@@ -330,24 +332,24 @@ A</A>.
<LI>Box Types
<UL>
- <LI><A HREF="common.html#fl_down"><TT>fl_down</TT></A></LI>
- <LI><A HREF="drawing.html#fl_draw_box"><TT>fl_draw_box</TT></A></LI>
- <LI><A HREF="common.html#fl_frame"><TT>fl_frame</TT></A></LI>
+ <LI><A HREF="common.html#fl_down"><TT>fl_down</TT></A></LI>
+ <LI><A HREF="drawing.html#fl_draw_box"><TT>fl_draw_box</TT></A></LI>
+ <LI><A HREF="common.html#fl_frame"><TT>fl_frame</TT></A></LI>
</UL>
<LI>System Related Functions
<UL>
- <LI><A HREF="osissues.html#WIN32.gdi"><TT>fl_RGB</TT></A> (WIN32)</LI>
- <LI><A HREF="osissues.html#WIN32.gdi"><TT>fl_brush</TT></A> (WIN32)</LI>
- <LI><A HREF="osissues.html#fl_close_display"><TT>fl_close_display</TT></A></LI>
- <LI><A HREF="osissues.html#fl_find"><TT>fl_find</TT></A></LI>
- <LI><A HREF="osissues.html#fl_handle"><TT>fl_handle</TT></A> (X11)</LI>
- <LI><A HREF="osissues.html#fl_open_callback"><TT>fl_open_callback</TT></A></LI>
- <LI><A HREF="osissues.html#fl_open_display"><TT>fl_open_display</TT></A></LI>
- <LI><A HREF="osissues.html#fl_parse_color"><TT>fl_parse_color</TT></A></LI>
- <LI><A HREF="osissues.html#WIN32.gdi"><TT>fl_pen</TT></A> (WIN32)</LI>
- <LI><A HREF="osissues.html#fl_xid"><TT>fl_xid</TT></A></LI>
- <LI><A HREF="osissues.html#fl_xpixel"><TT>fl_xpixel</TT></A></LI>
+ <LI><A HREF="osissues.html#WIN32.gdi"><TT>fl_RGB</TT></A> (WIN32)</LI>
+ <LI><A HREF="osissues.html#WIN32.gdi"><TT>fl_brush</TT></A> (WIN32)</LI>
+ <LI><A HREF="osissues.html#fl_close_display"><TT>fl_close_display</TT></A></LI>
+ <LI><A HREF="osissues.html#fl_find"><TT>fl_find</TT></A></LI>
+ <LI><A HREF="osissues.html#fl_handle"><TT>fl_handle</TT></A> (X11)</LI>
+ <LI><A HREF="osissues.html#fl_open_callback"><TT>fl_open_callback</TT></A></LI>
+ <LI><A HREF="osissues.html#fl_open_display"><TT>fl_open_display</TT></A></LI>
+ <LI><A HREF="osissues.html#fl_parse_color"><TT>fl_parse_color</TT></A></LI>
+ <LI><A HREF="osissues.html#WIN32.gdi"><TT>fl_pen</TT></A> (WIN32)</LI>
+ <LI><A HREF="osissues.html#fl_xid"><TT>fl_xid</TT></A></LI>
+ <LI><A HREF="osissues.html#fl_xpixel"><TT>fl_xpixel</TT></A></LI>
</UL>
</td>
@@ -1320,6 +1322,32 @@ calling the functions.
<!-- NEED 4in -->
+<H2><A NAME="fl_open_uri">fl_open_uri</A></H2>
+
+<HR>
+
+<H3>Include Files</H3>
+
+<UL><PRE>
+#include &lt;FL/filename.H&gt;
+</PRE></UL>
+
+<H3>Prototype</H3>
+
+<UL><PRE>
+void fl_open_uri(const char *uri, char *msg = (char *)0, int msglen = 0);
+</PRE></UL>
+
+<H3>Description</H3>
+
+<P>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.</P>
+
+<P>On success, the (optional) <TT>msg</TT> buffer is filled with the command that was run to open the URI; on Windows, this will always be "open uri".</P>
+
+<P>On failure, the <TT>msg</TT> buffer is filled with an English error message.</P>
+
+
+<!-- NEED 4in -->
<H2><A NAME="fl_password">fl_password</A></H2>
<HR>
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
diff --git a/vcnet/fltk.lib.vcproj b/vcnet/fltk.lib.vcproj
index 256d0bb8b..6f6d56e9d 100644
--- a/vcnet/fltk.lib.vcproj
+++ b/vcnet/fltk.lib.vcproj
@@ -1516,6 +1516,26 @@
</FileConfiguration>
</File>
<File
+ RelativePath="..\src\fl_open_uri.cxx">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ FavorSizeOrSpeed="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""/>
+ </FileConfiguration>
+ </File>
+ <File
RelativePath="..\src\fl_oval_box.cxx">
<FileConfiguration
Name="Debug|Win32">
diff --git a/vcnet/fltkdll.vcproj b/vcnet/fltkdll.vcproj
index a6e3e99f9..7ac91c48a 100644
--- a/vcnet/fltkdll.vcproj
+++ b/vcnet/fltkdll.vcproj
@@ -1551,6 +1551,24 @@
</FileConfiguration>
</File>
<File
+ RelativePath="..\src\fl_open_uri.cxx">
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"/>
+ </FileConfiguration>
+ </File>
+ <File
RelativePath="..\src\fl_oval_box.cxx">
<FileConfiguration
Name="Release|Win32">
diff --git a/visualc/fltk.lib.dsp b/visualc/fltk.lib.dsp
index e7b56d74f..8b60e4cb5 100644
--- a/visualc/fltk.lib.dsp
+++ b/visualc/fltk.lib.dsp
@@ -375,6 +375,10 @@ SOURCE=..\src\Fl_Multi_Label.cxx
# End Source File
# Begin Source File
+SOURCE=..\src\fl_open_uri.cxx
+# End Source File
+# Begin Source File
+
SOURCE=..\src\fl_oval_box.cxx
# End Source File
# Begin Source File
diff --git a/visualc/fltkdll.dsp b/visualc/fltkdll.dsp
index ecd7973d4..f6dd934e0 100644
--- a/visualc/fltkdll.dsp
+++ b/visualc/fltkdll.dsp
@@ -1487,6 +1487,19 @@ DEP_CPP_FL_MU=\
# End Source File
# Begin Source File
+SOURCE=..\src\fl_open_uri.cxx
+DEP_CPP_FL_AR=\
+ "..\fl\enumerations.h"\
+ "..\fl\fl_draw.h"\
+ "..\fl\fl_export.h"\
+ "..\FL\math.h"\
+
+NODEP_CPP_FL_AR=\
+ "..\..\..\..\..\usr\include\math.h"\
+
+# End Source File
+# Begin Source File
+
SOURCE=..\src\fl_oval_box.cxx
DEP_CPP_FL_OV=\
"..\fl\enumerations.h"\