Author: baby-guest
Date: 2007-07-06 20:40:18 +0000 (Fri, 06 Jul 2007)
New Revision: 3259

Modified:
   software/ui/src/common.h
   software/ui/src/pkgbrowser.cpp
Log:
web links spawn external browser now



Modified: software/ui/src/common.h
===================================================================
--- software/ui/src/common.h    2007-07-06 19:36:41 UTC (rev 3258)
+++ software/ui/src/common.h    2007-07-06 20:40:18 UTC (rev 3259)
@@ -60,4 +60,6 @@
 #include <stdlib.h>
 #include <stdio.h>
 
+#define ERROR_PRINTF(...) { fprintf(stderr, "%s:%s:%u Error: ", __FILE__, 
__PRETTY_FUNCTION__, __LINE__); fprintf(stderr,__VA_ARGS__); fflush(stderr); }
+
 #endif

Modified: software/ui/src/pkgbrowser.cpp
===================================================================
--- software/ui/src/pkgbrowser.cpp      2007-07-06 19:36:41 UTC (rev 3258)
+++ software/ui/src/pkgbrowser.cpp      2007-07-06 20:40:18 UTC (rev 3259)
@@ -44,6 +44,12 @@
 #include <limits.h>
 #include <sys/stat.h>
 
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
 #include <FL/Fl_PNG_Image.H>
 #include <FL/Fl_JPEG_Image.H>
 #include <FL/Fl_BMP_Image.H>
@@ -488,8 +494,37 @@
        link(PackageView::link_cb);
 }
 
+static bool ExternalBrowser(const char *uri)
+{
+       pid_t pid = -1;
+       if ((pid=fork()) == -1)
+       {
+               ERROR_PRINTF("fork: %s\n", strerror(errno));
+               return false;
+       }
+
+       if (strchr(uri, '"')) return false; /* No "s allowed in the uri for the 
moment */
+
+       if (pid) /* A positive (non-negative) PID indicates the parent process 
*/
+               return true;
+
+       /* A zero PID indicates that this is the child process */
+       string command = string("/usr/bin/x-www-browser \"") + uri +"\"";
+       if (execl("/bin/sh", "sh", "-c", command.c_str(), (char *) 0) == -1)
+               ERROR_PRINTF("exec: %s\n", strerror(errno));
+
+       exit(1); /* This point should never be reached */
+}
+
 const char *PackageView::link_cb(Fl_Widget *w, const char *uri)
 {
        printf("PackageView::link_cb(): Widget=0x%lX, URI=\"%s\"\n", (unsigned 
long)w, uri);
+
+       if (!strncasecmp("http:", uri, 5) || !strncasecmp("mailto:";, uri, 7) ||
+               !strncasecmp("ftp:", uri, 4) || !strncasecmp("https:", uri, 6))
+       {
+               ExternalBrowser(uri);
+       }
+
        return NULL;
 }


_______________________________________________
Pkg-games-commits mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/pkg-games-commits

Reply via email to