From b185fc84df4ea90363fa49540ba400cf5cba0052 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adri=C3=A1n=20Arroyo=20Calle?=
 <adrian.arroyocalle@gmail.com>
Date: Thu, 24 Dec 2015 14:12:42 +0100
Subject: [PATCH 1/3] WebSearch bar for Haiku

---
 beos/Makefile.target |  3 ++-
 beos/gui.cpp         |  4 +++-
 beos/gui.h           |  2 ++
 beos/scaffolding.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 65 insertions(+), 2 deletions(-)

diff --git a/beos/Makefile.target b/beos/Makefile.target
index 8759d08..d762c52 100644
--- a/beos/Makefile.target
+++ b/beos/Makefile.target
@@ -99,7 +99,7 @@ RDEF_IMP_BEOS := $(addprefix $(OBJROOT)/,$(subst /,_,$(RDEF_IMP_BEOS)))
 RDEP_BEOS := \
 	adblock.css beosdefault.css default.css internal.css quirks.css	\
 	netsurf.png favicon.png ca-bundle.txt \
-	credits.html licence.html welcome.html maps.html
+	credits.html licence.html welcome.html maps.html SearchEngines
 RDEP_BEOS := $(addprefix beos/res/,$(RDEP_BEOS))			\
 	$(wildcard beos/res/icons/*.png)						\
 	$(wildcard beos/res/??/*)								\
@@ -147,6 +147,7 @@ install-beos:
 	@cp -vRL beos/res/default.css $(DESTDIR)$(NETSURF_BEOS_RESOURCES)
 	@cp -vRL beos/res/beosdefault.css $(DESTDIR)$(NETSURF_BEOS_RESOURCES)
 	@cp -vRL gtk/res/license $(DESTDIR)$(NETSURF_BEOS_RESOURCES)
+	@cp -vRL beos/res/SearchEngines $(DESTDIR)$(NETSURF_BEOS_RESOURCES)
 #	@cp -vRL beos/res/throbber/*.png $(DESTDIR)$(NETSURF_BEOS_RESOURCES)throbber
 
 # ----------------------------------------------------------------------------
diff --git a/beos/gui.cpp b/beos/gui.cpp
index cfd026b..1e653a0 100644
--- a/beos/gui.cpp
+++ b/beos/gui.cpp
@@ -1,4 +1,5 @@
 /*
+ * Copyright 2015 Adrián Arroyo Calle <adrian.arroyocalle@gmail.com>
  * Copyright 2008 François Revol <mmu_man@users.sourceforge.net>
  * Copyright 2005 James Bursa <bursa@users.sourceforge.net>
  *
@@ -137,6 +138,7 @@ NSBrowserApplication::MessageReceived(BMessage *message)
 		case 'home':
 		case 'urlc':
 		case 'urle':
+		case 'sear':
 		case 'menu':
 		// NetPositive messages
 		case B_NETPOSITIVE_OPEN_URL:
@@ -254,7 +256,7 @@ image_id nsbeos_find_app_path(char *path)
  * \param  def      default to return if file not found
  * \return path to resource.
  */
-static char *find_resource(char *buf, const char *filename, const char *def)
+char *find_resource(char *buf, const char *filename, const char *def)
 {
 	const char *cdir = NULL;
 	status_t err;
diff --git a/beos/gui.h b/beos/gui.h
index 215cda8..b9f560e 100644
--- a/beos/gui.h
+++ b/beos/gui.h
@@ -1,4 +1,5 @@
 /*
+ * Copyright 2015 Adrián Arroyo Calle <adrian.arroyocalle@gmail.com>
  * Copyright 2008 François Revol <mmu_man@users.sourceforge.net>
  * Copyright 2005 James Bursa <bursa@users.sourceforge.net>
  *
@@ -65,6 +66,7 @@ void nsbeos_pipe_message_top(BMessage *message, BWindow *_this, struct beos_scaf
 
 void nsbeos_gui_view_source(struct hlcache_handle *content);
 image_id nsbeos_find_app_path(char *path);
+char *find_resource(char *buf, const char *filename, const char *def);
 
 void nsbeos_update_system_ui_colors(void);
 
diff --git a/beos/scaffolding.cpp b/beos/scaffolding.cpp
index 2c5d4e9..392bfde 100644
--- a/beos/scaffolding.cpp
+++ b/beos/scaffolding.cpp
@@ -1,4 +1,5 @@
 /*
+ * Copyright 2015 Adrián Arroyo Calle <adrian.arroyocalle@gmail.com>
  * Copyright 2008 François Revol <mmu_man@users.sourceforge.net>
  * Copyright 2006 Rob Kendrick <rjek@rjek.com>
  *
@@ -56,6 +57,8 @@ extern "C" {
 #include "desktop/browser.h"
 #include "desktop/netsurf.h"
 #include "desktop/version.h"
+#include "desktop/searchweb.h"
+#include "desktop/search.h"
 #include "desktop/plotters.h"
 #include "utils/nsoption.h"
 #include "desktop/textinput.h"
@@ -111,6 +114,7 @@ struct beos_scaffolding {
 	BControl		*home_button;
 
 	NSIconTextControl	*url_bar;
+	NSIconTextControl	*search_bar;
 	//BMenuField	*url_bar_completion;
 
 	NSThrobber		*throbber;
@@ -478,6 +482,7 @@ NSBaseView::MessageReceived(BMessage *message)
 		case 'home':
 		case 'urlc':
 		case 'urle':
+		case 'sear':
 		case 'menu':
 		case NO_ACTION:
 		case HELP_OPEN_CONTENTS:
@@ -653,6 +658,7 @@ NSBaseView::AllAttached()
 	g->home_button->SetTarget(this);
 
 	g->url_bar->SetTarget(this);
+	g->search_bar->SetTarget(this);
 
 	rgb_color c = ui_color(B_PANEL_BACKGROUND_COLOR);
 	SetViewColor(c);
@@ -669,6 +675,7 @@ NSBaseView::AllAttached()
 	g->home_button->SetViewColor(c);
 	g->home_button->SetLowColor(c);
 	g->url_bar->SetViewColor(c);
+	g->search_bar->SetViewColor(c);
 	g->throbber->SetViewColor(c);
 	g->scroll_view->SetViewColor(c);
 
@@ -806,6 +813,7 @@ static void nsbeos_scaffolding_update_colors(nsbeos_scaffolding *g)
 	g->reload_button->SetViewColor(c);
 	g->home_button->SetViewColor(c);
 	g->url_bar->SetViewColor(c);
+	g->search_bar->SetViewColor(c);
 	g->throbber->SetViewColor(c);
 	g->scroll_view->SetViewColor(c);
 
@@ -1073,6 +1081,41 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
 			//nsbeos_completion_update(text.String());
 			break;
 		}
+		case 'sear':
+		{
+			nserror ret;
+			nsurl* url;
+			BString text;
+			if (!scaffold->search_bar->LockLooper())
+				break;
+			text = scaffold->search_bar->Text();
+			scaffold->search_bar->UnlockLooper();
+			
+			char t[PATH_MAX];
+			find_resource(t,"SearchEngines","./beos/res/SearchEngines");
+			
+			search_web_init();
+			
+			ret = search_web_omni(text.String(),SEARCH_WEB_OMNI_SEARCHONLY
+				,&url);
+			if (ret == NSERROR_OK) {
+				ret = browser_window_create(
+					(browser_window_create_flags)(BW_CREATE_HISTORY | BW_CREATE_TAB),
+					url,
+					NULL,
+					bw,
+					NULL);
+				nsurl_unref(url);
+			}
+			
+			if (ret != NSERROR_OK) {
+				warn_user(messages_get_errorcode(ret), 0);
+			}
+			
+			search_web_finalise();
+			
+			break;
+		}
 /*
 		case 'menu':
 		{
@@ -2113,6 +2156,21 @@ nsbeos_scaffolding *nsbeos_new_scaffolding(struct gui_window *toplevel)
 	g->url_bar->TextView()->SetTextRect(rect);
 	g->tool_bar->AddChild(g->url_bar);
 
+	// search bar
+	
+	rect = g->tool_bar->Bounds();
+	rect.left += TOOLBAR_HEIGHT * nButtons + (g->url_bar->Bounds().right - g->url_bar->Bounds().left);
+	rect.right -= TOOLBAR_HEIGHT * 1;
+	rect.InsetBy(5,5);
+	message = new BMessage('sear');
+	message->AddPointer("scaffolding", g);
+	g->search_bar = new NSIconTextControl(rect,"search_bar","","Search...",message,
+		B_FOLLOW_RIGHT);
+	g->search_bar->SetDivider(0);
+	rect = g->search_bar->TextView()->TextRect();
+	rect.left += 0;
+	g->search_bar->TextView()->TextRect();
+	g->tool_bar->AddChild(g->search_bar);
 
 	// throbber
 	rect.Set(0, 0, 24, 24);
-- 
2.6.4

