summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkos <kos@dev3>2011-09-28 01:20:08 (GMT)
committerkos <kos@dev3>2011-09-28 01:20:08 (GMT)
commita27350d868ef592dfb8d306a3b9acce530f31fea (patch)
tree6c740feecf84c6114af3b805603ad9cba75a245a
parent047d57730d1272849cab1864495b4fde25043370 (diff)
[webbrowser] modifying qtwebkit.
-rw-r--r--conf/distro/vuplus.conf8
-rw-r--r--recipes/mysql/mysql5_5.1.40.bb2
-rw-r--r--recipes/qt4/qt-4.7.4.inc1
-rw-r--r--recipes/qt4/qt-4.7.4/qt4_vuplus.patch528
-rw-r--r--recipes/qt4/qt4-embedded.inc3
-rw-r--r--recipes/qt4/qt4-embedded_4.7.4.bb2
-rw-r--r--recipes/qt4/qt4.inc4
-rwxr-xr-xrecipes/webkit/files/arorabin0 -> 1505602 bytes
-rw-r--r--recipes/webkit/files/qtwebkit_vuplus.patch270
-rw-r--r--recipes/webkit/qtwebkit-e_2.2.bb1
-rwxr-xr-xrecipes/webkit/vuplus-webbrowser-utils.bb18
11 files changed, 831 insertions, 6 deletions
diff --git a/conf/distro/vuplus.conf b/conf/distro/vuplus.conf
index 7b48dc3..62d7bc5 100644
--- a/conf/distro/vuplus.conf
+++ b/conf/distro/vuplus.conf
@@ -19,6 +19,14 @@ TARGET_VENDOR = "-vuplus"
#OLDEST_KERNEL = "2.6.16"
+PREFERRED_VERSION_qt4-native ?= "4.7.4"
+PREFERRED_VERSION_qt4-tools-sdk ?= "4.7.4"
+PREFERRED_VERSION_qt4-embedded ?= "4.7.4"
+PREFERRED_VERSION_qt4-embedded-gles ?= "4.7.4"
+PREFERRED_VERSION_qt4-x11-free = "4.7.4"
+PREFERRED_VERSION_qt4-x11-free-gles ?= "4.7.4"
+PREFERRED_PROVIDER_qt4-tools-native = "qt4-native"
+
#
## Basic configuration
#
diff --git a/recipes/mysql/mysql5_5.1.40.bb b/recipes/mysql/mysql5_5.1.40.bb
index ded2f0f..4745801 100644
--- a/recipes/mysql/mysql5_5.1.40.bb
+++ b/recipes/mysql/mysql5_5.1.40.bb
@@ -1,3 +1,3 @@
require ${PN}_${PV}.inc
-DEPENDS += mysql5-native
+#DEPENDS += mysql5-native
diff --git a/recipes/qt4/qt-4.7.4.inc b/recipes/qt4/qt-4.7.4.inc
index 3d549d3..2704a77 100644
--- a/recipes/qt4/qt-4.7.4.inc
+++ b/recipes/qt4/qt-4.7.4.inc
@@ -12,6 +12,7 @@ SRC_URI = "\
file://0010-phonon-gstreamer-rgb-endianess.patch;patch=1 \
file://fix-translations.patch;patch=1 \
file://0001-wsegl2-support.patch;patch=1 \
+ file://qt4_vuplus.patch;patch=1 \
file://g++.conf \
file://linux.conf \
file://blacklist-diginotar-certs.diff;patch=1 \
diff --git a/recipes/qt4/qt-4.7.4/qt4_vuplus.patch b/recipes/qt4/qt-4.7.4/qt4_vuplus.patch
new file mode 100644
index 0000000..12d9715
--- /dev/null
+++ b/recipes/qt4/qt-4.7.4/qt4_vuplus.patch
@@ -0,0 +1,528 @@
+diff --git a/src/3rdparty/webkit/WebCore/page/ContextMenuController.cpp b/src/3rdparty/webkit/WebCore/page/ContextMenuController.cpp
+index d384b02..40cac5c 100644
+--- a/src/3rdparty/webkit/WebCore/page/ContextMenuController.cpp
++++ b/src/3rdparty/webkit/WebCore/page/ContextMenuController.cpp
+@@ -177,6 +177,8 @@ void ContextMenuController::contextMenuItemSelected(ContextMenuItem* item)
+ case ContextMenuItemTagOpenImageInNewWindow:
+ openNewWindow(result.absoluteImageURL(), frame);
+ break;
++ case ContextMenuItemTagGotoYoutubeLink:
++ break;
+ case ContextMenuItemTagDownloadImageToDisk:
+ // FIXME: Some day we should be able to do this from within WebCore.
+ m_client->downloadURL(result.absoluteImageURL());
+diff --git a/src/3rdparty/webkit/WebCore/platform/ContextMenu.cpp b/src/3rdparty/webkit/WebCore/platform/ContextMenu.cpp
+index 0022a47..5971306 100644
+--- a/src/3rdparty/webkit/WebCore/platform/ContextMenu.cpp
++++ b/src/3rdparty/webkit/WebCore/platform/ContextMenu.cpp
+@@ -263,6 +263,8 @@ void ContextMenu::populate()
+ contextMenuItemTagDownloadLinkToDisk());
+ ContextMenuItem CopyLinkItem(ActionType, ContextMenuItemTagCopyLinkToClipboard,
+ contextMenuItemTagCopyLinkToClipboard());
++ ContextMenuItem GotoYoutube(ActionType, ContextMenuItemTagGotoYoutubeLink,
++ contextMenuItemTagGotoYoutubeLink());
+ ContextMenuItem OpenImageInNewWindowItem(ActionType, ContextMenuItemTagOpenImageInNewWindow,
+ contextMenuItemTagOpenImageInNewWindow());
+ ContextMenuItem DownloadImageItem(ActionType, ContextMenuItemTagDownloadImageToDisk,
+@@ -766,6 +768,7 @@ void ContextMenu::checkOrEnableIfNeeded(ContextMenuItem& item) const
+ case ContextMenuItemTagOpenLinkInNewWindow:
+ case ContextMenuItemTagDownloadLinkToDisk:
+ case ContextMenuItemTagCopyLinkToClipboard:
++ case ContextMenuItemTagGotoYoutubeLink:
+ case ContextMenuItemTagOpenImageInNewWindow:
+ case ContextMenuItemTagDownloadImageToDisk:
+ case ContextMenuItemTagCopyImageToClipboard:
+diff --git a/src/3rdparty/webkit/WebCore/platform/ContextMenuItem.h b/src/3rdparty/webkit/WebCore/platform/ContextMenuItem.h
+index 88ff0ad..f110fc5 100644
+--- a/src/3rdparty/webkit/WebCore/platform/ContextMenuItem.h
++++ b/src/3rdparty/webkit/WebCore/platform/ContextMenuItem.h
+@@ -144,7 +144,8 @@ namespace WebCore {
+ ContextMenuItemTagChangeBack,
+ #endif
+ ContextMenuItemBaseCustomTag = 5000,
+- ContextMenuItemBaseApplicationTag = 10000
++ ContextMenuItemBaseApplicationTag = 10000,
++ ContextMenuItemTagGotoYoutubeLink
+ };
+
+ enum ContextMenuItemType {
+diff --git a/src/3rdparty/webkit/WebCore/platform/LocalizedStrings.h b/src/3rdparty/webkit/WebCore/platform/LocalizedStrings.h
+index 924ca22..ee62d0d 100644
+--- a/src/3rdparty/webkit/WebCore/platform/LocalizedStrings.h
++++ b/src/3rdparty/webkit/WebCore/platform/LocalizedStrings.h
+@@ -42,6 +42,7 @@ namespace WebCore {
+ String contextMenuItemTagOpenLinkInNewWindow();
+ String contextMenuItemTagDownloadLinkToDisk();
+ String contextMenuItemTagCopyLinkToClipboard();
++ String contextMenuItemTagGotoYoutubeLink();
+ String contextMenuItemTagOpenImageInNewWindow();
+ String contextMenuItemTagDownloadImageToDisk();
+ String contextMenuItemTagCopyImageToClipboard();
+diff --git a/src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp b/src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp
+index db6c9d4..25648a9 100644
+--- a/src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp
++++ b/src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp
+@@ -90,6 +90,11 @@ String contextMenuItemTagCopyLinkToClipboard()
+ return QCoreApplication::translate("QWebPage", "Copy Link", "Copy Link context menu item");
+ }
+
++String contextMenuItemTagGotoYoutubeLink()
++{
++ return QCoreApplication::translate("QWebPage", "Open Youtube", "Open Youtube context menu item");
++}
++
+ String contextMenuItemTagOpenImageInNewWindow()
+ {
+ return QCoreApplication::translate("QWebPage", "Open Image", "Open Image in New Window context menu item");
+diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp
+index 5bb3c57..9c9981e 100644
+--- a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp
++++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp
+@@ -396,7 +396,8 @@ static const char* editorCommandWebActions[] =
+ "AlignLeft", // AlignLeft,
+ "AlignRight", // AlignRight,
+
+- 0 // WebActionCount
++ 0, // WebActionCount
++ "GotoYoutubeLink"
+ };
+
+ // Lookup the appropriate editor command to use for WebAction \a action
+@@ -535,6 +536,7 @@ static QWebPage::WebAction webActionForContextMenuAction(WebCore::ContextMenuAct
+ case WebCore::ContextMenuItemTagOpenLinkInNewWindow: return QWebPage::OpenLinkInNewWindow;
+ case WebCore::ContextMenuItemTagDownloadLinkToDisk: return QWebPage::DownloadLinkToDisk;
+ case WebCore::ContextMenuItemTagCopyLinkToClipboard: return QWebPage::CopyLinkToClipboard;
++ case WebCore::ContextMenuItemTagGotoYoutubeLink: return QWebPage::GotoYoutubeLink;
+ case WebCore::ContextMenuItemTagOpenImageInNewWindow: return QWebPage::OpenImageInNewWindow;
+ case WebCore::ContextMenuItemTagDownloadImageToDisk: return QWebPage::DownloadImageToDisk;
+ case WebCore::ContextMenuItemTagCopyImageToClipboard: return QWebPage::CopyImageToClipboard;
+@@ -2225,6 +2227,53 @@ static void collectChildFrames(QWebFrame* frame, QList<QWebFrame*>& list)
+
+ \sa action()
+ */
++#include <string.h>
++#include <unistd.h>
++#include <sys/un.h>
++#include <sys/types.h>
++#include <arpa/inet.h>
++#include "qscreen_qws.h"
++
++#define BUFF_SIZE 1024
++#define FILE_SERVER "/tmp/vuplus.tmp"
++int uds_send_message(char* buffer)
++{
++ int message_len;
++ int client_socket;
++ struct sockaddr_un server_addr;
++
++ if(buffer == 0)
++ {
++ qDebug("[buffer is NULL]");
++ return 0;
++ }
++
++ if((client_socket = socket( PF_FILE, SOCK_STREAM, 0)) < 0)
++ {
++ qDebug("[fail to open socket]");
++ return 0;
++ }
++ memset(&server_addr, 0, sizeof(server_addr));
++ strcpy(server_addr.sun_path, FILE_SERVER);
++ server_addr.sun_family = AF_UNIX;
++ if(connect(client_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0)
++ {
++ qDebug("[fail to connect][%s]", FILE_SERVER);
++ return 0;
++ }
++
++ Singleton<CVu>::instance().lock();
++
++ write(client_socket, buffer, strlen(buffer));
++ int rc = read (client_socket, buffer, BUFF_SIZE);
++ buffer[rc] = 0;
++
++ Singleton<CVu>::instance().unlock();
++
++ close(client_socket);
++ return 1;
++}
++
+ void QWebPage::triggerAction(WebAction action, bool)
+ {
+ WebCore::Frame *frame = d->page->focusController()->focusedOrMainFrame();
+@@ -2263,6 +2312,19 @@ void QWebPage::triggerAction(WebAction action, bool)
+ editor->copyURL(d->hitTestResult.linkUrl(), d->hitTestResult.linkText());
+ break;
+ }
++ case GotoYoutubeLink: {
++ char tmp[BUFF_SIZE] = {0};
++ String url_string = KURL(d->hitTestResult.linkUrl()).string();
++ UChar* url_wide_string = url_string.characters();
++ for(int i=0 ; i<url_string.length() ; i++)
++ tmp[i] = (url_wide_string[i]&0x00FF);
++ int rc = uds_send_message(tmp);
++ if(rc)
++ if(strncmp(tmp, "ok$", 3) != 0)
++ if(strlen(tmp) > 4)
++ qDebug("[%s]", &tmp[4]);
++ break;
++ }
+ case OpenImageInNewWindow:
+ openNewWindow(d->hitTestResult.imageUrl(), frame);
+ break;
+@@ -2493,7 +2555,9 @@ QAction *QWebPage::action(WebAction action) const
+ case CopyLinkToClipboard:
+ text = contextMenuItemTagCopyLinkToClipboard();
+ break;
+-
++ case GotoYoutubeLink:
++ text = contextMenuItemTagGotoYoutubeLink();
++ break;
+ case OpenImageInNewWindow:
+ text = contextMenuItemTagOpenImageInNewWindow();
+ break;
+diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.h b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.h
+index 34f675b..dfd8a06 100644
+--- a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.h
++++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.h
+@@ -171,7 +171,8 @@ public:
+
+ StopScheduledPageRefresh,
+
+- WebActionCount
++ WebActionCount,
++ GotoYoutubeLink
+ };
+
+ enum FindFlag {
+diff --git a/src/gui/embedded/qmousepc_qws.cpp b/src/gui/embedded/qmousepc_qws.cpp
+index 5d3b182..0af16e7 100644
+--- a/src/gui/embedded/qmousepc_qws.cpp
++++ b/src/gui/embedded/qmousepc_qws.cpp
+@@ -484,6 +484,7 @@ public:
+
+ void suspend();
+ void resume();
++ static void readMouseDataE(void*, int);
+
+ private:
+ enum { max_dev=32 };
+@@ -494,6 +495,7 @@ private:
+
+ private slots:
+ void readMouseData(int);
++ void readMouseDataNone(int);
+
+ private:
+ void openDevices();
+@@ -733,18 +735,34 @@ void QWSPcMouseHandlerPrivate::resume()
+ notifiers.at(i)->setEnabled(true);
+ }
+
+-
++#include "qscreen_qws.h"
++void QWSPcMouseHandlerPrivate::readMouseDataE(void* d, int fd)
++{
++ QWSPcMouseHandlerPrivate* dd = (QWSPcMouseHandlerPrivate*)d;
++ dd->readMouseData(fd);
++}
++void QWSPcMouseHandlerPrivate::readMouseDataNone(int fd)
++{
++}
+
+ void QWSPcMouseHandlerPrivate::notify(int fd)
+ {
++ Singleton<CVu>::instance().setMouseHandler(fd, (void*)this, QWSPcMouseHandlerPrivate::readMouseDataE);
+ QSocketNotifier *mouseNotifier
+ = new QSocketNotifier(fd, QSocketNotifier::Read, this);
+- connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData(int)));
++ connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseDataNone(int)));
+ notifiers.append(mouseNotifier);
+ }
+
+ void QWSPcMouseHandlerPrivate::readMouseData(int fd)
+ {
++ if(Singleton<CVu>::instance().isLocked())
++ {
++ uchar buf[8];
++ while(read(fd, buf, 8) > 0);
++ return;
++ }
++
+ for (;;) {
+ uchar buf[8];
+ int n = read(fd, buf, 8);
+diff --git a/src/gui/embedded/qscreen_qws.cpp b/src/gui/embedded/qscreen_qws.cpp
+index d55fbed..5e7af34 100644
+--- a/src/gui/embedded/qscreen_qws.cpp
++++ b/src/gui/embedded/qscreen_qws.cpp
+@@ -2029,6 +2029,22 @@ QImage::Format QScreenPrivate::preferredImageFormat() const
+ server to connect to. The \a classId specifies the class
+ identifier.
+ */
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <fcntl.h>
++#include <unistd.h>
++#include <sys/ioctl.h>
++#include <linux/fb.h>
++
++typedef unsigned char __u8;
++#ifndef FBIO_BLIT
++#define FBIO_SET_MANUAL_BLIT _IOW('F', 0x21, __u8)
++#define FBIO_BLIT 0x22
++#endif
++
++static int fd = -1;
++
+ QScreen::QScreen(int display_id, ClassId classId)
+ : screencols(0), data(0), entries(0), entryp(0), lowest(0),
+ w(0), lstep(0), h(0), d(1), pixeltype(NormalPixel), grayscale(false),
+@@ -2036,6 +2052,14 @@ QScreen::QScreen(int display_id, ClassId classId)
+ physWidth(0), physHeight(0), d_ptr(new QScreenPrivate(this, classId))
+ {
+ clearCacheFunc = 0;
++ if(fd < 0)
++ {
++ unsigned char tmp = 1;
++ fd = open("/dev/fb0", O_RDWR);
++ if(fd<0) fprintf(stderr, "ERR : fail to opne <fb0>\n");
++ if(ioctl(fd, FBIO_SET_MANUAL_BLIT, &tmp) < 0)
++ fprintf(stderr, "ERR : fail to enable manual blit\n");
++ }
+ }
+
+ QScreen::QScreen(int display_id)
+@@ -2045,6 +2069,14 @@ QScreen::QScreen(int display_id)
+ physWidth(0), physHeight(0), d_ptr(new QScreenPrivate(this))
+ {
+ clearCacheFunc = 0;
++ if(fd < 0)
++ {
++ unsigned char tmp = 1;
++ fd = open("/dev/fb0", O_RDWR);
++ if(fd<0) fprintf(stderr, "ERR : fail to opne <fb0>\n");
++ if(ioctl(fd, FBIO_SET_MANUAL_BLIT, &tmp) < 0)
++ fprintf(stderr, "ERR : fail to enable manual blit\n");
++ }
+ }
+
+ /*!
+@@ -2053,6 +2085,13 @@ QScreen::QScreen(int display_id)
+
+ QScreen::~QScreen()
+ {
++ if(fd >= 0)
++ {
++ unsigned char tmp = 0;
++ if(ioctl(fd, FBIO_SET_MANUAL_BLIT, &tmp) < 0)
++ fprintf(stderr, "ERR : fail to disable manual blit\n");
++ close(fd);
++ }
+ delete d_ptr;
+ }
+
+@@ -2498,6 +2537,11 @@ void QScreen::blit(const QImage &img, const QPoint &topLeft, const QRegion &reg)
+ d_ptr->blit(this, img, topLeft - offset(),
+ (reg & bound).translated(-topLeft));
+ QWSDisplay::ungrab();
++ if(fd >= 0)
++ {
++ if (ioctl(fd, FBIO_BLIT) < 0)
++ fprintf(stderr, "ERR : FBIO_BLIT\n");
++ }
+ }
+
+ #ifdef QT_QWS_CLIENTBLIT
+@@ -2581,6 +2625,7 @@ struct fill_data {
+ void QScreen::solidFill(const QColor &color, const QRegion &region)
+ {
+ QWSDisplay::grab();
++ color.setAlpha(0);
+ d_ptr->solidFill(this, color,
+ region.translated(-offset()) & QRect(0, 0, dw, dh));
+ QWSDisplay::ungrab();
+diff --git a/src/gui/embedded/qscreen_qws.h b/src/gui/embedded/qscreen_qws.h
+index c2f8010..5488536 100644
+--- a/src/gui/embedded/qscreen_qws.h
++++ b/src/gui/embedded/qscreen_qws.h
+@@ -82,6 +82,132 @@ static const int qt_red_rounding_shift = qt_red_shift + qt_rbits;
+ static const int qt_green_rounding_shift = qt_green_shift + qt_gbits;
+ static const int qt_blue_rounding_shift = qt_bbits - qt_neg_blue_shift;
+
++#include <stdio.h>
++#define KLOG(f,x...)
++//#define KLOG(f,x...) fprintf(stderr, "CVu :: [%s][%d]\t>> "f"\n", __FUNCTION__, __LINE__, x);
++template <class T>
++class Singleton : private T
++{
++private:
++ Singleton(){};
++ ~Singleton(){};
++ Singleton(const Singleton&);
++ Singleton& operator=(const Singleton&);
++
++public:
++ static T& instance()
++ {
++ // locking here!!
++ static Singleton<T> singleton;
++ return singleton;
++ }
++};
++
++#include <unistd.h>
++#include <stdlib.h>
++#include <string.h>
++#include <pthread.h>
++struct mouse_set_ {
++ int fd;
++ void* h;
++ void (*cb)(void*, int);
++};
++
++struct keyboard_set_ {
++ int fd;
++ void* h;
++ void (*cb)(void*);
++};
++
++#include <sys/poll.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++
++class CVu
++{
++private:
++ int key;
++
++ struct mouse_set_ mouse;
++ struct keyboard_set_ keyboard;
++
++ int thread_status;
++ pthread_t h_thread;
++
++ struct pollfd device_fds[2];
++protected:
++ CVu()
++ {
++ key = 0;
++ thread_status = 0;
++ memset((void*)&mouse, 0, sizeof(struct mouse_set_));
++ memset((void*)&keyboard, 0, sizeof(struct keyboard_set_));
++
++ device_fds[0].fd = device_fds[1].fd = -1;
++ device_fds[0].events = device_fds[1].events = POLLIN;
++ };
++
++ static void* thread_main(void* args)
++ {
++ CVu* thiz = (CVu*) args;
++ struct pollfd* fds = thiz->getDevices();
++
++ qDebug("input control thread start");
++ KLOG("[%ld]", thiz->getTid());
++ while(thiz->isRunable())
++ {
++ if((fds[0].fd==-1) && (fds[1].fd==-1))
++ {
++ qDebug("pease, setting handler before start thread.", 0);
++ break;
++ }
++ thiz->runHandler(fds);
++ }
++ qDebug("input control thread stop");
++ KLOG("[%ld]", thiz->getTid());
++ return 0;
++ }
++
++ void runHandler(struct pollfd* fds)
++ {
++ poll(fds, 2, 2000);
++ if((fds[0].revents & POLLIN) && mouse.cb)
++ mouse.cb(mouse.h, mouse.fd);
++ if((fds[1].revents & POLLIN) && keyboard.cb)
++ keyboard.cb(keyboard.h);
++ }
++
++public:
++ void lock() { KLOG("%d", key); key = 1; }
++ void unlock() { KLOG("%d", key); key = 0; }
++ int isLocked() { KLOG("%d", key); return key; }
++
++ void setMouseHandler(int fd, void* h, void (*func)(void*, int))
++ {
++ mouse.h = h;
++ mouse.cb = func;
++ mouse.fd = device_fds[0].fd = fd;
++ }
++ void setKeyboardHandler(int fd, void* h, void (*func)(void*))
++ {
++ keyboard.h = h;
++ keyboard.cb = func;
++ keyboard.fd = device_fds[1].fd = fd;
++ }
++
++ void stop() { thread_status = 0; }
++ void start()
++ {
++ thread_status = 1;
++ if(pthread_create(&h_thread, NULL, CVu::thread_main, (void*)this) != 0)
++ qDebug("fail to start input control thread!!", 0);
++ }
++ int isRunable() { return thread_status; }
++ pthread_t getTid() { return h_thread; }
++
++ struct pollfd* getDevices() { return device_fds; }
++};
++
+
+ inline ushort qt_convRgbTo16(const int r, const int g, const int b)
+ {
+diff --git a/src/gui/embedded/qwindowsystem_qws.cpp b/src/gui/embedded/qwindowsystem_qws.cpp
+index 0e4e27c..dffb4f5 100644
+--- a/src/gui/embedded/qwindowsystem_qws.cpp
++++ b/src/gui/embedded/qwindowsystem_qws.cpp
+@@ -1360,6 +1360,7 @@ bool QWSServerPrivate::screensaverblockevent( int index, int *screensaverinterva
+ return ignoreEvents[index];
+ }
+
++#include "qscreen_qws.h"
+ void QWSServerPrivate::initServer(int flags)
+ {
+ Q_Q(QWSServer);
+@@ -1444,6 +1445,7 @@ void QWSServerPrivate::initServer(int flags)
+ q->openKeyboard();
+ }
+ #endif
++ Singleton<CVu>::instance().start();
+
+ #if !defined(QT_NO_SOUND) && !defined(QT_EXTERNAL_SOUND_SERVER) && !defined(Q_OS_DARWIN)
+ soundserver = new QWSSoundServer(q);
+@@ -4073,6 +4075,7 @@ void QWSServer::startup(int flags)
+
+ void QWSServer::closedown()
+ {
++ qDebug("--done--");
+ QScopedPointer<QWSServer> server(qwsServer);
+ qwsServer = 0;
+ QT_TRY {
+diff --git a/src/gui/kernel/qdesktopwidget_qws.cpp b/src/gui/kernel/qdesktopwidget_qws.cpp
+index 50ccb9f..da0dafa 100644
+--- a/src/gui/kernel/qdesktopwidget_qws.cpp
++++ b/src/gui/kernel/qdesktopwidget_qws.cpp
+@@ -102,7 +102,12 @@ const QRect QDesktopWidget::availableGeometry(int screenNo) const
+ if (!r.isEmpty())
+ return r;
+
+- return screen->region().boundingRect();
++ QRect r2 = screen->region().boundingRect();
++ r2.setLeft(r2.left()+50);
++ r2.setTop(r2.top()+30);
++ r2.setRight(r2.right()-50);
++ r2.setBottom(r2.bottom()-30);
++ return r2;
+ }
+
+ const QRect QDesktopWidget::screenGeometry(int screenNo) const
diff --git a/recipes/qt4/qt4-embedded.inc b/recipes/qt4/qt4-embedded.inc
index 3388035..d6e12bc 100644
--- a/recipes/qt4/qt4-embedded.inc
+++ b/recipes/qt4/qt4-embedded.inc
@@ -32,8 +32,7 @@ S = "${WORKDIR}/qt-embedded-linux-opensource-src-${PV}"
QT_CONFIG_FLAGS += " \
-qtlibinfix ${QT_LIBINFIX} \
- -plugin-gfx-transformed -plugin-gfx-qvfb -plugin-gfx-vnc -plugin-gfx-directfb \
- -plugin-mouse-tslib -qt-mouse-pc -qt-mouse-qvfb -qt-mouse-linuxinput \
+ -qt-mouse-pc -qt-mouse-linuxinput \
-qt-kbd-tty -qt-kbd-linuxinput \
-DQT_KEYPAD_NAVIGATION \
"
diff --git a/recipes/qt4/qt4-embedded_4.7.4.bb b/recipes/qt4/qt4-embedded_4.7.4.bb
index 047ac97..8a3c337 100644
--- a/recipes/qt4/qt4-embedded_4.7.4.bb
+++ b/recipes/qt4/qt4-embedded_4.7.4.bb
@@ -16,6 +16,6 @@ QT_CONFIG_FLAGS += " \
-exceptions \
"
-PR .= "-dream2"
+PR .= "-vuplus"
QT_CONFIG_FLAGS := "${@oe_filter_out('^(-webkit)$', '${QT_CONFIG_FLAGS}', d)} -no-webkit"
diff --git a/recipes/qt4/qt4.inc b/recipes/qt4/qt4.inc
index b37e7ff..e0ac974 100644
--- a/recipes/qt4/qt4.inc
+++ b/recipes/qt4/qt4.inc
@@ -9,8 +9,8 @@ QT_ENDIAN = "${@qt_endian(d)}"
QT_CONFIG_FLAGS += "-release -no-cups -no-accessibility -reduce-relocations \
-shared -no-nas-sound -no-sm -no-nis \
-qt-gif -system-libjpeg -system-libpng -system-zlib \
- -no-sql-ibase -plugin-sql-mysql -no-sql-odbc -plugin-sql-psql -plugin-sql-sqlite -plugin-sql-sqlite2 \
- -no-pch -qdbus -stl -glib -phonon -webkit"
+ -no-sql-ibase -no-sql-mysql -no-sql-odbc -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 \
+ -no-pch -qdbus -stl -glib -no-phonon -webkit"
EXTRA_OEMAKE = "-e"
diff --git a/recipes/webkit/files/arora b/recipes/webkit/files/arora
new file mode 100755
index 0000000..e5d9b39
--- /dev/null
+++ b/recipes/webkit/files/arora
Binary files differ
diff --git a/recipes/webkit/files/qtwebkit_vuplus.patch b/recipes/webkit/files/qtwebkit_vuplus.patch
new file mode 100644
index 0000000..bd1d451
--- /dev/null
+++ b/recipes/webkit/files/qtwebkit_vuplus.patch
@@ -0,0 +1,270 @@
+diff --git a/Source/WebCore/page/ContextMenuController.cpp b/Source/WebCore/page/ContextMenuController.cpp
+index 923d2ce..556c8cd 100644
+--- a/Source/WebCore/page/ContextMenuController.cpp
++++ b/Source/WebCore/page/ContextMenuController.cpp
+@@ -195,6 +195,8 @@ void ContextMenuController::contextMenuItemSelected(ContextMenuItem* item)
+ case ContextMenuItemTagCopyLinkToClipboard:
+ frame->editor()->copyURL(m_hitTestResult.absoluteLinkURL(), m_hitTestResult.textContent());
+ break;
++ case ContextMenuItemTagGotoYoutubeLink:
++ break;
+ case ContextMenuItemTagOpenImageInNewWindow:
+ openNewWindow(m_hitTestResult.absoluteImageURL(), frame);
+ break;
+@@ -625,6 +627,8 @@ void ContextMenuController::populate()
+ contextMenuItemTagDownloadLinkToDisk());
+ ContextMenuItem CopyLinkItem(ActionType, ContextMenuItemTagCopyLinkToClipboard,
+ contextMenuItemTagCopyLinkToClipboard());
++ ContextMenuItem GotoYoutube(ActionType, ContextMenuItemTagGotoYoutubeLink,
++ contextMenuItemTagGotoYoutubeLink());
+ ContextMenuItem OpenImageInNewWindowItem(ActionType, ContextMenuItemTagOpenImageInNewWindow,
+ contextMenuItemTagOpenImageInNewWindow());
+ ContextMenuItem DownloadImageItem(ActionType, ContextMenuItemTagDownloadImageToDisk,
+@@ -1172,6 +1176,7 @@ void ContextMenuController::checkOrEnableIfNeeded(ContextMenuItem& item) const
+ case ContextMenuItemTagOpenLinkInNewWindow:
+ case ContextMenuItemTagDownloadLinkToDisk:
+ case ContextMenuItemTagCopyLinkToClipboard:
++ case ContextMenuItemTagGotoYoutubeLink:
+ case ContextMenuItemTagOpenImageInNewWindow:
+ case ContextMenuItemTagDownloadImageToDisk:
+ case ContextMenuItemTagCopyImageToClipboard:
+diff --git a/Source/WebCore/platform/ContextMenuItem.h b/Source/WebCore/platform/ContextMenuItem.h
+index 46a6987..bcab2c4 100644
+--- a/Source/WebCore/platform/ContextMenuItem.h
++++ b/Source/WebCore/platform/ContextMenuItem.h
+@@ -158,6 +158,7 @@ namespace WebCore {
+ ContextMenuItemTagEnterVideoFullscreen,
+ ContextMenuItemTagMediaPlayPause,
+ ContextMenuItemTagMediaMute,
++ ContextMenuItemTagGotoYoutubeLink,
+ ContextMenuItemBaseCustomTag = 5000,
+ ContextMenuItemCustomTagNoAction = 5998,
+ ContextMenuItemLastCustomTag = 5999,
+diff --git a/Source/WebCore/platform/DefaultLocalizationStrategy.cpp b/Source/WebCore/platform/DefaultLocalizationStrategy.cpp
+index 4c11f29..1dab43d 100644
+--- a/Source/WebCore/platform/DefaultLocalizationStrategy.cpp
++++ b/Source/WebCore/platform/DefaultLocalizationStrategy.cpp
+@@ -150,6 +150,11 @@ String DefaultLocalizationStrategy::contextMenuItemTagCopyLinkToClipboard()
+ return WEB_UI_STRING("Copy Link", "Copy Link context menu item");
+ }
+
++String DefaultLocalizationStrategy::contextMenuItemTagGotoYoutubeLink()
++{
++ return WEB_UI_STRING("Open Youtube", "Open Youtube context menu item");
++}
++
+ String DefaultLocalizationStrategy::contextMenuItemTagOpenImageInNewWindow()
+ {
+ return WEB_UI_STRING("Open Image in New Window", "Open Image in New Window context menu item");
+diff --git a/Source/WebCore/platform/DefaultLocalizationStrategy.h b/Source/WebCore/platform/DefaultLocalizationStrategy.h
+index 56120e0..3d65344 100644
+--- a/Source/WebCore/platform/DefaultLocalizationStrategy.h
++++ b/Source/WebCore/platform/DefaultLocalizationStrategy.h
+@@ -52,6 +52,7 @@ private:
+ virtual String contextMenuItemTagOpenLinkInNewWindow();
+ virtual String contextMenuItemTagDownloadLinkToDisk();
+ virtual String contextMenuItemTagCopyLinkToClipboard();
++ virtual String contextMenuItemTagGotoYoutubeLink();
+ virtual String contextMenuItemTagOpenImageInNewWindow();
+ virtual String contextMenuItemTagDownloadImageToDisk();
+ virtual String contextMenuItemTagCopyImageToClipboard();
+diff --git a/Source/WebCore/platform/LocalizationStrategy.h b/Source/WebCore/platform/LocalizationStrategy.h
+index f883893..14b322e 100644
+--- a/Source/WebCore/platform/LocalizationStrategy.h
++++ b/Source/WebCore/platform/LocalizationStrategy.h
+@@ -53,6 +53,7 @@ public:
+ virtual String contextMenuItemTagOpenLinkInNewWindow() = 0;
+ virtual String contextMenuItemTagDownloadLinkToDisk() = 0;
+ virtual String contextMenuItemTagCopyLinkToClipboard() = 0;
++ virtual String contextMenuItemTagGotoYoutubeLink() = 0;
+ virtual String contextMenuItemTagOpenImageInNewWindow() = 0;
+ virtual String contextMenuItemTagDownloadImageToDisk() = 0;
+ virtual String contextMenuItemTagCopyImageToClipboard() = 0;
+diff --git a/Source/WebCore/platform/LocalizedStrings.cpp b/Source/WebCore/platform/LocalizedStrings.cpp
+index f5ad0b7..861be70 100644
+--- a/Source/WebCore/platform/LocalizedStrings.cpp
++++ b/Source/WebCore/platform/LocalizedStrings.cpp
+@@ -94,6 +94,11 @@ String contextMenuItemTagCopyLinkToClipboard()
+ return platformStrategies()->localizationStrategy()->contextMenuItemTagCopyLinkToClipboard();
+ }
+
++String contextMenuItemTagGotoYoutubeLink()
++{
++ return platformStrategies()->localizationStrategy()->contextMenuItemTagGotoYoutubeLink();
++}
++
+ String contextMenuItemTagOpenImageInNewWindow()
+ {
+ return platformStrategies()->localizationStrategy()->contextMenuItemTagOpenImageInNewWindow();
+diff --git a/Source/WebCore/platform/LocalizedStrings.h b/Source/WebCore/platform/LocalizedStrings.h
+index 777fcec..3080831 100644
+--- a/Source/WebCore/platform/LocalizedStrings.h
++++ b/Source/WebCore/platform/LocalizedStrings.h
+@@ -49,6 +49,7 @@ namespace WebCore {
+ String contextMenuItemTagOpenLinkInNewWindow();
+ String contextMenuItemTagDownloadLinkToDisk();
+ String contextMenuItemTagCopyLinkToClipboard();
++ String contextMenuItemTagGotoYoutubeLink();
+ String contextMenuItemTagOpenImageInNewWindow();
+ String contextMenuItemTagDownloadImageToDisk();
+ String contextMenuItemTagCopyImageToClipboard();
+diff --git a/Source/WebKit/chromium/src/LocalizedStrings.cpp b/Source/WebKit/chromium/src/LocalizedStrings.cpp
+index 35e03c4..6dbbfa4 100644
+--- a/Source/WebKit/chromium/src/LocalizedStrings.cpp
++++ b/Source/WebKit/chromium/src/LocalizedStrings.cpp
+@@ -242,6 +242,7 @@ String imageTitle(const String& filename, const IntSize& size)
+ String contextMenuItemTagOpenLinkInNewWindow() { return String(); }
+ String contextMenuItemTagDownloadLinkToDisk() { return String(); }
+ String contextMenuItemTagCopyLinkToClipboard() { return String(); }
++String contextMenuItemTagGotoYoutubeLink() { return String(); }
+ String contextMenuItemTagOpenImageInNewWindow() { return String(); }
+ String contextMenuItemTagDownloadImageToDisk() { return String(); }
+ String contextMenuItemTagCopyImageToClipboard() { return String(); }
+diff --git a/Source/WebKit/qt/Api/qwebpage.cpp b/Source/WebKit/qt/Api/qwebpage.cpp
+index b3efe0f..8860ba8 100644
+--- a/Source/WebKit/qt/Api/qwebpage.cpp
++++ b/Source/WebKit/qt/Api/qwebpage.cpp
+@@ -247,7 +247,8 @@ static const char* editorCommandWebActions[] =
+
+ 0, // CopyImageUrlToClipboard,
+
+- 0 // WebActionCount
++ 0, // WebActionCount
++ 0 // GotoYoutubeLink
+ };
+
+ // Lookup the appropriate editor command to use for WebAction \a action
+@@ -436,6 +437,7 @@ static QWebPage::WebAction webActionForContextMenuAction(WebCore::ContextMenuAct
+ case WebCore::ContextMenuItemTagOpenLinkInNewWindow: return QWebPage::OpenLinkInNewWindow;
+ case WebCore::ContextMenuItemTagDownloadLinkToDisk: return QWebPage::DownloadLinkToDisk;
+ case WebCore::ContextMenuItemTagCopyLinkToClipboard: return QWebPage::CopyLinkToClipboard;
++ case WebCore::ContextMenuItemTagGotoYoutubeLink: return QWebPage::GotoYoutubeLink;
+ case WebCore::ContextMenuItemTagOpenImageInNewWindow: return QWebPage::OpenImageInNewWindow;
+ case WebCore::ContextMenuItemTagDownloadImageToDisk: return QWebPage::DownloadImageToDisk;
+ case WebCore::ContextMenuItemTagCopyImageToClipboard: return QWebPage::CopyImageToClipboard;
+@@ -2335,6 +2337,53 @@ static void collectChildFrames(QWebFrame* frame, QList<QWebFrame*>& list)
+
+ \sa action()
+ */
++#include <string.h>
++#include <unistd.h>
++#include <sys/un.h>
++#include <sys/types.h>
++#include <arpa/inet.h>
++#include "qscreen_qws.h"
++
++#define BUFF_SIZE 1024
++#define FILE_SERVER "/tmp/vuplus.tmp"
++int uds_send_message(char* buffer)
++{
++ int message_len;
++ int client_socket;
++ struct sockaddr_un server_addr;
++
++ if(buffer == 0)
++ {
++ qDebug("[buffer is NULL]");
++ return 0;
++ }
++
++ if((client_socket = socket( PF_FILE, SOCK_STREAM, 0)) < 0)
++ {
++ qDebug("[fail to open socket]");
++ return 0;
++ }
++ memset(&server_addr, 0, sizeof(server_addr));
++ strcpy(server_addr.sun_path, FILE_SERVER);
++ server_addr.sun_family = AF_UNIX;
++ if(connect(client_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0)
++ {
++ qDebug("[fail to connect][%s]", FILE_SERVER);
++ return 0;
++ }
++
++ Singleton<CVu>::instance().lock();
++
++ write(client_socket, buffer, strlen(buffer));
++ int rc = read (client_socket, buffer, BUFF_SIZE);
++ buffer[rc] = 0;
++
++ Singleton<CVu>::instance().unlock();
++
++ close(client_socket);
++ return 1;
++}
++
+ void QWebPage::triggerAction(WebAction action, bool)
+ {
+ WebCore::Frame *frame = d->page->focusController()->focusedOrMainFrame();
+@@ -2373,6 +2422,19 @@ void QWebPage::triggerAction(WebAction action, bool)
+ editor->copyURL(d->hitTestResult.linkUrl(), d->hitTestResult.linkText());
+ break;
+ }
++ case GotoYoutubeLink: {
++ char tmp[BUFF_SIZE] = {0};
++ String url_string = KURL(d->hitTestResult.linkUrl()).string();
++ UChar* url_wide_string = url_string.characters();
++ for(int i=0 ; i<url_string.length() ; i++)
++ tmp[i] = (url_wide_string[i]&0x00FF);
++ int rc = uds_send_message(tmp);
++ if(rc)
++ if(strncmp(tmp, "ok$", 3) != 0)
++ if(strlen(tmp) > 4)
++ qDebug("[%s]", &tmp[4]);
++ break;
++ }
+ case OpenImageInNewWindow:
+ openNewWindow(d->hitTestResult.imageUrl(), frame);
+ break;
+@@ -2767,6 +2829,9 @@ QAction *QWebPage::action(WebAction action) const
+ case CopyLinkToClipboard:
+ text = contextMenuItemTagCopyLinkToClipboard();
+ break;
++ case GotoYoutubeLink:
++ text = contextMenuItemTagGotoYoutubeLink();
++ break;
+
+ case OpenImageInNewWindow:
+ text = contextMenuItemTagOpenImageInNewWindow();
+diff --git a/Source/WebKit/qt/Api/qwebpage.h b/Source/WebKit/qt/Api/qwebpage.h
+index f1f481b..502edc1 100644
+--- a/Source/WebKit/qt/Api/qwebpage.h
++++ b/Source/WebKit/qt/Api/qwebpage.h
+@@ -180,7 +180,8 @@ public:
+
+ CopyImageUrlToClipboard,
+
+- WebActionCount
++ WebActionCount,
++ GotoYoutubeLink
+ };
+
+ enum FindFlag {
+diff --git a/Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.cpp b/Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.cpp
+index 182fe38..c1d8a4e 100644
+--- a/Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.cpp
++++ b/Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.cpp
+@@ -197,6 +197,11 @@ String WebPlatformStrategies::contextMenuItemTagCopyLinkToClipboard()
+ return QCoreApplication::translate("QWebPage", "Copy Link", "Copy Link context menu item");
+ }
+
++String WebPlatformStrategies::contextMenuItemTagGotoYoutubeLink()
++{
++ return QCoreApplication::translate("QWebPage", "Open Youtube", "Open Youtube context menu item");
++}
++
+ String WebPlatformStrategies::contextMenuItemTagOpenImageInNewWindow()
+ {
+ return QCoreApplication::translate("QWebPage", "Open Image", "Open Image in New Window context menu item");
+diff --git a/Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.h b/Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.h
+index b74af39..125406a 100644
+--- a/Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.h
++++ b/Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.h
+@@ -69,6 +69,7 @@ private:
+ virtual WTF::String contextMenuItemTagOpenLinkInNewWindow();
+ virtual WTF::String contextMenuItemTagDownloadLinkToDisk();
+ virtual WTF::String contextMenuItemTagCopyLinkToClipboard();
++ virtual WTF::String contextMenuItemTagGotoYoutubeLink();
+ virtual WTF::String contextMenuItemTagOpenImageInNewWindow();
+ virtual WTF::String contextMenuItemTagDownloadImageToDisk();
+ virtual WTF::String contextMenuItemTagCopyImageToClipboard();
diff --git a/recipes/webkit/qtwebkit-e_2.2.bb b/recipes/webkit/qtwebkit-e_2.2.bb
index 02aa860..9557a18 100644
--- a/recipes/webkit/qtwebkit-e_2.2.bb
+++ b/recipes/webkit/qtwebkit-e_2.2.bb
@@ -6,6 +6,7 @@ PR = "${INC_PR}.0"
SRC_URI = " \
http://pkgs.fedoraproject.org/repo/pkgs/qtwebkit/qtwebkit-2.2.0-rc1.tar.xz/5c1581052ad5bb7aed07a1798a340061/qtwebkit-2.2.0-rc1.tar.xz \
file://0001-Qt-Fix-build-with-QT_LIBINFIX.patch;patch=1 \
+ file://qtwebkit_vuplus.patch;patch=1 \
"
S = "${WORKDIR}/webkit-qtwebkit"
diff --git a/recipes/webkit/vuplus-webbrowser-utils.bb b/recipes/webkit/vuplus-webbrowser-utils.bb
new file mode 100755
index 0000000..38ca61e
--- /dev/null
+++ b/recipes/webkit/vuplus-webbrowser-utils.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "arora webbrowser binary"
+PV = "0.10.1"
+PR = "r0"
+
+DEPENDS = "qtwebkit-e"
+
+SRC_URI = "file://arora"
+
+S = "${WORKDIR}/vuplus-webbrowser-utils"
+
+do_configure() {
+ mv ${WORKDIR}/arora ${S}
+}
+
+do_install() {
+ install -d ${D}/${bindir};
+ install -m 0755 arora ${D}/${bindir};
+}