Future public API for interfacing with WebKit on Haiku. (What will eventually

become BWebView.) Compared to the original port, the threading has been
completely redesigned such that all interaction with WebKit happens in the
application thread, as required by the PThread threading backend. This is
counteracted by using an offscreen BBitmap/view as the top-level GraphicsContext
for each Page, such that drawing is performed in various app_server threads
asynchronously. WebViewWindow provides as a target for messages from within
WebKit (mostly FrameLoaderClientHaiku events), which are forwarded via virtual
hook methods (implemented in LauncherWindow.cpp of the HaikuLauncher).


git-svn-id: http://svn.haiku-os.org/webpositive/webkit/trunk@6 94f232f2-1747-11df-bad5-a5bfde151594
This commit is contained in:
stippi
2010-02-11 21:57:24 +00:00
commit 75ffc858fc
8 changed files with 1243 additions and 0 deletions
+68
View File
@@ -0,0 +1,68 @@
/*
* Copyright (C) 2010 Stephan Aßmus <[email protected]>
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "DownloadWindow.h"
#include <GridLayoutBuilder.h>
#include <GroupLayout.h>
#include <GroupLayoutBuilder.h>
#include <MenuBar.h>
#include <MenuItem.h>
#include <SeparatorView.h>
#include <SpaceLayoutItem.h>
#include <stdio.h>
DownloadWindow::DownloadWindow(BRect frame)
: BWindow(frame, "Downloads",
B_TITLED_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL,
B_AUTO_UPDATE_SIZE_LIMITS | B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE)
{
Minimize(true);
Show();
}
DownloadWindow::~DownloadWindow()
{
}
void DownloadWindow::MessageReceived(BMessage* message)
{
switch (message->what) {
default:
BWindow::MessageReceived(message);
break;
}
}
bool DownloadWindow::QuitRequested()
{
if (!IsMinimized())
Minimize(true);
return false;
}
+45
View File
@@ -0,0 +1,45 @@
/*
* Copyright (C) 2010 Stephan Aßmus <[email protected]>
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef DownloadWindow_h
#define DownloadWindow_h
#include <Window.h>
class DownloadWindow : public BWindow {
public:
DownloadWindow(BRect frame);
virtual ~DownloadWindow();
virtual void MessageReceived(BMessage*);
virtual bool QuitRequested();
private:
};
#endif // DownloadWindow_h
+254
View File
@@ -0,0 +1,254 @@
resource app_signature "application/x-vnd.RJL-HaikuLauncher";
resource app_version {
major = 0,
middle = 0,
minor = 1,
variety = B_APPV_ALPHA,
internal = 0,
short_info = "HaikuLauncher",
long_info = "HaikuLauncher ©2007-2010 The WebKit Haiku Project"
};
resource app_flags B_SINGLE_LAUNCH;
resource file_types message {
"types" = "text/html",
"types" = "image/gif",
"types" = "image/jpeg",
"types" = "image/png",
"types" = "application/x-vnd.Be-bookmark",
"types" = "text",
"types" = "application/x-vnd.Be-doc_bookmark",
"types" = "application/x-vnd.Be.URL.file",
"types" = "application/x-vnd.Be.URL.ftp",
"types" = "application/x-vnd.Be.URL.http",
"types" = "application/x-vnd.Be.URL.https"
};
resource vector_icon {
$"6E636966450500020106033D0AFE000000000000BD0AFE48F10748A0783133FF"
$"FFC80066FFFF0034CC020106033D0AFE000000000000BD0AFE48F10748A07854"
$"09B4B6D8033784FF051D61020106043D950B0000000000003D950B494FBC479B"
$"EC00FFFFFF4C00FF008F00B200FF008000050002030605B812A5BE03E13DE784"
$"B8021049F79F49EDD800F1F1F136D9DDF48A9996B9B4B8BEDBFFF4F4F404EBD0"
$"020006023C92C0388F5FB854503C576348D8DF48895B004137A9FFB9B9B90401"
$"7E03FF360003FFFF0003FF9C0003FF000002010202BB36AEBA1760B80FFF392B"
$"574ACCFB48652300000001FFFF0000013205400500020004024AFFFC00FFFFBA"
$"360500020106033D0AFE000000000000BD0AFE48F10748A0783133FFFFC80066"
$"FFFF0034CC020106023D0AFE000000000000BD0AFE48F10748A0780033FFFFFF"
$"0033CC020106023D0AFE000000000000BD0AFE48F10748A0780033FFFFFF0066"
$"FF020004027AFFFC00DDFFBA360201040289FF0000A9C000000200040200FFE5"
$"CED0ECB989020004020DEFBC8CFFD4AA820200040200FFCB9CE9ECB989020004"
$"0200FFCB9CE9ECB98902000402B3FFCB9CBBD4AA820500020106033D0AFE0000"
$"00000000BD0AFE48F10748A0783133FFFFC80066FFFF0034CC020106033D0AFE"
$"000000000000BD0AFE48F10748A0785409B4B6D8033784FF051D61020106043D"
$"950B0000000000003D950B494FBC479BEC00FFFFFF4C00FF008F00B200FF0080"
$"00050002030605B812A5BE03E13DE784B8021049F79F49EDD800F1F1F136D9DD"
$"F48A9996B9B4B8BEDBFFF4F4F404EBD0020006023C92C0388F5FB854503C5763"
$"48D8DF48895B004137A9FFB9B9B904017E03FF360003FFFF000200040200FFBC"
$"34FFFF9C0003FF000002010202BB36AEBA1760B80FFF392B574ACCFB48652300"
$"000001FFFF00000132054003FFFFC9020014020026FF1C0500050002030605B8"
$"12A5BE03E13DE784B8021049F79F49EDD800F1F1F136D9DDF48A9996B9B4B8BE"
$"DBFFF4F4F404EBD0020006023C92C0388F5FB854503C576348D8DF48895B0041"
$"37A9FFB9B9B904017E03FF360003FFFF0003FF9C0003FF000002010202BB36AE"
$"BA1760B80FFF392B574ACCFB48652300000001FFFF0000013205400500030052"
$"7502001002F8006BFF003E04006C050003900000020310020000006E00650400"
$"6B05000359463503C3A414039D816035000000000204BFC2B55BBBC5B55BC3BF"
$"B55BC6FABC93C6FAB896C6FAC090BFC2C3CBC3BFC3CBBBC5C3CBB88ABC93B88A"
$"C090B88AB896026EC5DCB8B6C713BAA0C4CAB706C110B579C307B5D5C0A2B565"
$"BFC2B55BC032B55BBDBCB55BBA69B7BABBC5B63AB8F9B94FB89DBD9CB84FBB7E"
$"B8C7BE9AB924BF77B8E0BEE7B9DEC11FBCE0C332BB38C279BEC5C405C2D8C31A"
$"C0FBC3FCC2C6C2C1C22FC2B7C27AC2BEC22FC2B7C227C2B7C227C2B7C227C2B7"
$"C241C2BDC241C2BDC206C2B0C199C2DBC1D0C2CBC159C2EEC0D4C2DDC115C2E5"
$"C051C2CEBF43C313BFB0C2B4BF3DC313BF36C313BF36C313BF36C313BF20C313"
$"BF20C313BF20C313BDEDC313BE23C313BDB9C2EDBD57C2DFBD87C2E3BD54C2DC"
$"BD3EC2C3BD3EC2C3BD31C2B4BD13C2A5BD26C2ABBD13C2A5BCA4C27EBCA4C27E"
$"BCA4C27EBC31C254BC31C254BC27C251BC12C24FBC1DC250BC10C24BBC0FC242"
$"BC11C246BC0FC242BBF5C219BBF5C219BBD3C1DEBB68C195BBAEC1A4BB71C16E"
$"BB58C129BB63C14EBB4BC101BB4BC0ADBB48C0D7BB4BC0ADBB4EC087BB4EC087"
$"BB52C054BB4DBFEEBB55C021BB9EBF93BBA9BEBFBBB0BF36BBA9BEBFBBA7BE93"
$"BBA7BE93BBA7BE53BBBCBE2FBBA8BE4BBBBCBE2FBBC7BE21BBC7BE21BC00BDD5"
$"BBE3BCFCBC5BBD3DBBE3BCFCBAB7BC58BAB7BC58BAB7BC58BA8BBC44BA90BC46"
$"BA8BBC44BA8BBC42BA8BBC42BA89BBEABA23BB79BA6ABBADBA23BB79BA12BB6B"
$"BA12BB6BBA12BB6BB9F8BB49B9F8BB49B9F8BB49B9AEBAF0B9AEBAF0B97EBAC3"
$"B928BAB1B950BAB5B924BAA9B91BBA9AB920BAA1B984BA6EB9DEB997B9B5B9F9"
$"B9F6B95DBA36B8F0BA0BB91FBA5EB8C4BA78B85EBA83B89EBACCB83DBB61B7E7"
$"BB18B813BB61B7E7BB6BB7E1BB6BB7E1BB6BB7E1BBFEB787BBFEB787BC65B74A"
$"BCB6B684BC94B6F6BCF5B68ABD58B665BD2DB67BBDA8B695BE6DB651BE29B697"
$"BE6FB650BE88B64FBE7CB64FBE62B6A0BEE1B72FBE88B70EBEE4B733BEE9B73E"
$"BEE5B73ABED8B744BEC6B74ABEC6B74ABEC6B74ABE75B7A5BE75B7A5BE63B7DD"
$"BE90B849BE74B817BE91B84CBE92B852BE92B852BE94B85CBE9DB87ABE97B86B"
$"BE94B884BE8CB88DBE8CB88DBE3AB8F0BD92B98FBDB7B906BD92B98FBD8DB9A1"
$"BD8DB9A1BD64B9D8BD7EBA55BD59BA19BD7BBA5CBD77BA63BD77BA63BD56BAA0"
$"BD4DBB2CBD39BAE6BD60BB70BDCCBBCEBD98BBA2BDFFBBFABE73BC3FBE33BC27"
$"BEBEBC5CBF5EBC42BF12BC56BF5EBC42BFAC37BFAC37BFD0BC1EC01CBC0FBFF5"
$"BC0BC046BC14C083BC4EC066BC35C04DBCD9C0F4BDDAC0B6BD63C0F4BDDAC107"
$"BDF9C102BDF2C0BABE84C127BF91C0B2BF1DC127BF91C133BF9DC133BF9DC131"
$"C00FC1C5C0F9C135C0D6C259C11CC348C059C2EEC0C9C348C059C36BC02FC36B"
$"C02FC36BC02FC388C019C388C019C3A8C003C3DBBFC5C3C9BFE8C3EEBFA0C409"
$"BF52C3F0BF73C409BF52C409BF53C409BF53C40DBF9AC495BFC1C450BFCEC4EB"
$"BFB3C542BF10C51FBF56C542BF10C551BEF2C551BEF2C551BEF2C555BEEBC555"
$"BEEBC57FBEA3C568BDFCC59EBE47C53ABDBBC4A3BDDFC4E1BDAAC4A3BDCAC4A3"
$"BDB5C4A3BDB5C4A3BDB5C4A5BD31C4A5BD31C4A8BD1EC4E8BCDFC4D2BCF5C4E8"
$"BCDFC4FEBCC9C4FEBCC9C4FEBCC9C516BCB3C516BCB3C545BC8BC582BC20C571"
$"BC5EC58CBC05C588BBBCC586BBD9C588BBBCC587BBA8C587BBA8C587BBA8C588"
$"BB9DC588BB9DC58DBB614EBAFAC584BB24C58ABADAC5C2BA5DC5B0BAA2C5C4BA"
$"62C5CBBA70C5CBBA70C5D9BA8EC60FBAD4C5EDBAB3C60ABB1FC648BBAAC627BB"
$"67C669BBEBC66FBC7BC670BC33C66FBC7BC672BCC4C672BCC4C674BCEAC66EBD"
$"37C678BD11C664BD5AC649BD9CC652BD79C633BDECC62CBE92C62DBE3FC621BE"
$"D5C67FBF2CC648BF16C750BD0F0006BC12B6E4BC12B6E4BC32B6B0BC55B638BC"
$"47B674BB81B6ABBA2BB802BAC4B747BA88B7E3BB30B77EBADDB7B0BB59B765BB"
$"AAB733BB82B74DBBCBB71DBC12B6E4BBFCB707BC12B6E4001DBACDBFD1BACDBF"
$"D1BAEBBFAABB29BF5CBB13BF89BB43BF24BB34BE93BB34BED0BB34BE4DBB60BD"
$"EABB34BE25BB80BDBEBBABBD60BBA1BD98BB48BD2ABA81BCBEBAE5BCF3BA67BC"
$"B1BA20BC83BA2DBCA0BA0FBC5BBA0DBC02BA1FBC28B9FEBBE5B9BABBB6B9D0BB"
$"D0B99BBB91B95FBB44B983BB66B93DBB24B8F0BB2DB91CBB16B8C0BB48B8BEBA"
$"DFB8C3BAFFB8B1BB14B89FBB7EB8A7BB49B8C9BB7EB8C5BBB2B8C3BB8AB8C6BB"
$"DBB8C9BC2EB8C7BC05B8D0BC40B8BABC49B8CBBC49B8B4BC4BB8AABC4EB8AFBC"
$"4DB8A0BC57B893BC4BB898BC56B882BC4AB88FBD10B88EBD00B893BD49B8E1BD"
$"E7B88DBE03B90DBE04B923BE75B906BE4BB946BEA8B985BF00B973BEC1B997BF"
$"3EB9A3BFC1B998BF81B9B0C011BA17C05FB9DBC02EBA25C0B3BA75C127BA3DC0"
$"E7BA8FC144BAC0C17FBAA9C160BAD8C19FBAFCC17CBAE4C19DBADDC13ABAD7C0"
$"A6BAD3C0EFBADBC061BACDBFD1BAEAC013BACDBFD10009BD5EB5D7BD5EB5D7BD"
$"81B5EEBDB1B60EBD84B605BDD0B613BE19B601BE01B61ABE55B5C3BEF6B5C4BE"
$"B0B5EFBF2DB5A2BFA3B55EBF5BB55EBFCEB55DC00CB58CBFE9B578C03CB5A7C0"
$"90B566C064B575BF3AB541BCA7B60EBDDDB57ABCECB623BD5EB5D7BD29B601BD"
$"5EB5D70005BF35B6EABF35B6EABF55B6ECBF9AB6F5BF7BB702BFCEB6E0BF87B6"
$"7DBF9CB693BF78B66DBF3CB664BF2FB623BF45B690BF35B6EABF6BB6CCBF35B6"
$"EA0004BA07B87FBA07B87FBA0CB868B9EFB850B9FEB85FB982B8E4B8F0BA35B9"
$"2CB988B97E31BA07B87FB974B8F0BA07B87F0066C6F7BC24C6F7BC24C6DCBB0A"
$"C6002FC68BB9F2C5B9B87CC4FFB79CC563B805C4CEB768C463B709C49AB737C4"
$"52B6FBC428B6EFC440B6E2C412B6FAC407B6C1C401B6D1C316B60FC0D0B56FC1"
$"F9B59AC0FBB58BC15FB59CC131B589C170B5A2C179B5C9C19FB5BDC12DB5E2C0"
$"8AB5C9C0D7B5C4C05AB5CDC03FB60EC043B5DDC03DB629C040B676C036B65DC0"
$"4BB694C0B6B65FC0A8B66FC0CDB643C0F1B61AC0B1B608C108B64BC0D0B6B1C1"
$"3AB6D6C0B5B6A7C066B689C083B67CC064B68AC05DB6AFC05FB6ABC053B6C0C0"
$"31B6D0C044B6CBBFE6B6E5BF94B741BFB0B6EFBF87B769BF5DB791BF88B781BF"
$"3BB79DBEF7B7B2BF17B7A4BECCB7C7BEFAB81CBEEAB7FFBF06B830BF19B86CBF"
$"03B860BF59B891BFBEB7E0BFA3B802BFE1B7B3C038B7ADC008B7BDC04FB7A6C0"
$"84B777C06CB76EC0D3B795C0F8B83EC0EBB7F4C110B83FC135B810C100B802C1"
$"0DB7E5C0ECB77043B7ABC125B795C15FB7FDC14DB7BDC170B83DC1C2B820C18E"
$"B860C1CFB813C1FDB7D5C1E2B7BDC214B7EAC1F1B838C215B82FC206B84BC23A"
$"B83DC222B843C25AB834C28BB842C26CB836C2AFB850C2FAB857C2D5B854C320"
$"B859C347B898C335B87BC377B8E7C24AB8C5C259B8C6C228B8C3C1E2B8D0C202"
$"B8C2C1C9B8DAC199B8F0C1B62FC179B8E5C13FB8B6C15BB8C8C118B89CC0C5B8"
$"72C0EFB885C07FB853BFE3B84FC02FB83FBFBFB856BF7FB87CBF9CB866BF5CB8"
$"97BF11B8A4BF35B87FBEDCB8DCBE6EB942BEB6B91FBE51B950BE19B976BE2EB9"
$"5CBE04B990BDF6B9D1BE04B9B4BDE9B9EEBDE2BA1DBDCAB9FCBDF8BA3CBDEFBA"
$"76BDFEBA53BDD9BAA9BDC9BB27BD9FBAEFBDF235BE71BBBCBE3ABB94BEAFBBE9"
$"BF41BBD2BEFBBBE5BF83BBC1C009BB9CBFC5BBA1C05FBB96C0DDBC03C0A1BBCD"
$"C104BC26C0F5BC67C114BC34C0D3BC9FC103BD00C0E8BCC8C11FBD37C159BDA3"
$"C13CBD6DC166BDBAC182BDE8C177BDD0C18EBE04C16DBE2DC17BBE15C152BE5E"
$"C13FBECFC13FBE97C13FBF0EC185BF4CC15DBF24C1AABF71C1A4BFE3C1A8BFB3"
$"C1A0C025C1DBC087C1B3C053C216C08AC289C06CC253C086C2CBC04DC319BFDE"
$"C2E8C00FC347BFB0C386BF66C378BFABC396BF13C3FEBEBFC3C2BEF2C435BE90"
$"C430BE0CC42EBE4DC432BDC0C433BD22C429BD6DC43CBCDEC4ABBC78C47EBCA7"
$"C4CDBC56C512BC03C505BC34C519BBE7C513BBA8C51336C513BB93C51135C51A"
$"BB71C4F8BB29C47EBB2CC48ABB5DC476BB0EC48BBB01C477BB14C4A1BAEDC478"
$"BACDC48BBAD8C442BAADC3F1BA66C418BA9AC3CCBA36C391B9CBC3AEBA00C389"
$"B9BEC36CB93BC342B92EC39AB94AC3E2B9A3C3C4B981C419B9DFC46DBA6AC44A"
$"BA20C46EBA73C496BA8AC48FBA85C4AFBA9CC4EABAA8C4CABAABC533BAA2C55A"
$"BA20C555BA61C562B9C7C4E8B9AFC51DB9DAC4CAB997C49EB958C4B6B975C48F"
$"B946C474B90EC466B92AC493B8F9C4BDB91DC49FB90BC4E0B932C52CB951C505"
$"B944C555B95EC5B4B96CC592B952C5C9B97CC5E7B9B8C5D9B9A2C5FEB9DCC627"
$"BA26C614BA00C645BA61C694BA9FC64DBA89C667BAE8C6B6BB83C693BB3FC6DF"
$"BBD4C6E3BC7CC6E4BC23C6E2BCCEC6D0BD79C6F5BD2CC6A7BDCCC69FBE9AC69F"
$"BE3EC6A1BE95C6A5BE88C6A3BE8DC6A2BE8FC6A1BEC0C696BEBEC6B2BEC4C6D6"
$"BE02C6D2BE15C6F6BD65C6F7BC24C700BCC4C6F7BC240008C301B7D8C301B7D8"
$"C2E6B7DCC2D4B7A4C2E8B7AEC2B1B792C269B7B8C288B7A7C204B7EFC236B743"
$"C221B77BC239B73AC285B744C27AB746C2A7B740C2F3B74FC2D8B731C30CB76B"
$"C33CB7A1C31FB787C360B7C2C301B7D8C31CB7D4C301B7D80004BB53C203BB53"
$"C203BB45C20DBB26C221BB38C21DBB55C249BBBAC291BB87C26EBB92C265BB53"
$"C203BB84C227BB53C2030005C4F4BE2EC4F4BE2EC4D3BE57C48CBEA4C4A6BE76"
$"C46EBEDAC47DBF53C47DBF18C4B6BF38C4EDBEB9C4D0BEECC502BE93C4F4BE2E"
$"C531BE48C4F4BE2E0009C213C327C213C327C17FC390BFF7C345C09DC332BFD0"
$"C349BF8EC36ABFACC350BF67C38CBF20C386BF56C386BEAFC386BDCDC386BE3E"
$"C386BEC1C3CBC0C0C3BABFC4C3DDC137C3AAC221C367C1AFC38EC22AC364C262"
$"C32BC280C337C249C322C213C327C22AC331C213C32702024E284E2C542E4C32"
$"4C30482E020250304C3252344C364E344C340202C951B81858305C3254365432"
$"4E300202583456365836563C5A3854380204BCD6C1F1BACDC370BEA5C09BC4A7"
$"BFA6C361BE3CC67FC1B1C065C5ADC23AC445BE91C715B827C85DB962C9B9B682"
$"C68C0204C3CFC072C309BF46C522C2743DC65FC0DEC4E4BC10C7F7B880C76BB8"
$"DAC831B842C6E2BC70C2E3B880C5CDBE43C189061EAEE6BAEAAAAF9A0EB9E5C6"
$"DFB9CC50B985C673BA12C5CDBAE4C593BA9EC0BFBC89BE0E36B8E6B993B8DA2E"
$"B874B92DB971B7B0BCD6BA52BCEFB87ABE3BB7AEBD62B7AEBF13B7AEBF862EBF"
$"93BA78C0D2BB91C49BBB6AC51ABC10C51ABBB6C51ABC5AC49BBCB6C21DBCC3BF"
$"A0BDCEBFCCC18BC1FDC323BF00C13E46C33BC197C43B46C3DCC12BC484C02CC4"
$"94C012C3EFC092C36FBE21C2BDBF40BC50C14BBBF74EBB8451BBE8C66FBA9EC6"
$"B90611AAAAA8BA02BBF0B9ECBB4ABAB8BCC9BB9DBCE2BE4EBB71C019BC7CC0A5"
$"BE08BF73BE6144BFA0BF6DBDDBC06CBD0245BCAFC1CABC30BF40BAABBE0EBB04"
$"BF0DBB04BD83BB04BD15BAB8BCAFBA38060BBAAA2A31C653BA0CC6C5BB84C646"
$"BB2BC69FBBB6C614BBB0C5A0BBDDC309BC1DC164BCAFC0CBBB71BFE6BAD8C0CB"
$"BACBC395BAE4C5C6060AAAAB0ABE47C125BF99C131BF80454448C1FDC395C21D"
$"C362C1C4C3F1C11EC448C052C494C02CC3EFC105C389BE67470605EA02BB37BA"
$"C5BBD7BA12B9ACB887B8E0B8ADB90BB86AB887B939B920B96C0A05C16BBB91C4"
$"74BB91C4DABC36C4A7BCC3C16BBCE906078A2EBD4F2EBDB5B814BEA7BF402EBF"
$"4DBA45BE0EBB04BEA7BB2BBD8ABAE3BD29BA520607AA3A39B8EDBE012F3CB99F"
$"3EB993BEDAB920BF99B946BE34B77BBFF6B7C339B74804032EBCE932BDCEBB2B"
$"BD34BB13BECDBB51BF4DBA380208CA68BA5FCB41BD02CA3AB9D0CA0FB6BCCAF4"
$"B7AEC947B5E955B58A55B58A55B58AC844B841C8FFB76C53B953C718B814C6E6"
$"B8FBC74BB728C5A02FC601B84FC2703DC646BCB6C5ADBC1DC712BD82C89DBEE7"
$"C79E40C89DBEE7060ABFFB0FC6F2C098C626BFCCC6F2BFCC5A345C3758315A2E"
$"5A305A2C582A562E582C54305230C692B854C692B920C692B7DAC53ABAAB4FB9"
$"ACC501BB1EC46EBBF7C4AEBB9DC3FBBCB6C56DBE0EC38FBE4EC64DBDF00207C8"
$"70BE74C870BE74C7A4BDA8C78BBB44C80BBB28C71835C633BBB7C6D5BBF0C5DB"
$"BB98C501BB44C50ABB7AC4F2BAEEC3F5BC43C43FBBD2C4B4BC83C6FF38C63336"
$"C7CB3AC83DBE9AC5B3BF8DC909BD020202C6392F4DB9F9C66CBAC54DBBE34FBB"
$"17C46EBAEB0202C969B7CEC967B916CAFFB9E2543654324E3002025834563658"
$"36C877BD8FC969BB84C7ABBBF70604EAC2BD4448C111C32FC07FC362C17EC33C"
$"C0E5C37CC1E40205C5ADB861C65F31C52CB75E50204E224E20C3E2BA5FC37CB9"
$"50C455BB91C606BD02C494BCB6C723BE0DCB1BBDA8CB97BDE4C79EBBF702044E"
$"B44BC4D4284EB5174BB9B9C408B8BAC43EBAD855BD4F4BBBD057BD4FC745BB77"
$"C818BC3C51BAC502034E28C4A1B847C53AB61650BA52C593B8A0C691BBAFC4E1"
$"BAAB59BD8FC4E1B7A104032EB77BC613B63CC969B50AC7ABB778CB36BCA9C99C"
$"04032EB966B906B953B7D4B8D3B86DB9C7B749BAB82C0406BE0BB689BE67B5FD"
$"C04CB608BF7FB5F1C11CB689C1D7B65BC1A2B73BC2A3B85448B77BC33CB801C3"
$"1EB70849B609C32304032EBDA8B887BEB4B76EBE11B775BFEC2BC059B8AD0403"
$"2E28BE01B3FFC0D8B4253FB3D3C288B5BDC2FC0406FE0BC79EBB2BC8F6BBAAC8"
$"41BB48C9ECBC2FCB27BDDBCB06BD15CB41BE74CA4FC07FCA99BFCBCA0FC118C9"
$"CFC27DCA0FC1E4C998C30058C3890A04C6FFBB11C857BC50C8BDBCC3C88ABD4F"
$"040CAAFABABC70C74BC092C699C303C5CDC3DBC54DC441C4CEC44EC382C1EAC3"
$"03C237C34DC1D5C2EEC05FC402C14AC3E0BF76C423BD88C461BD48C4FABE47C5"
$"14BE2E4DBE98C58CBDBBC5870608BAAABFECC1FD4448C1FDC395C21DC362C1C4"
$"C3F1C11EC448C052C494C02CC3EFC105C389BED4C2BD0A04C369BC83C6D838C6"
$"66BD1CC35CBD350A03B46542B4BE41B4BE420605AF03B6AFC969B63DC9F2B72F"
$"C8D0BE4155B821CA8EC11CC6FAC42EC5C6C560C53ABE67C91DC1E8C7EAB86DCB"
$"270604EEBFCCBB51C1FDBBD0C13EBC43C29FBB6FC18BBAAB43BB1EC146BAF2C0"
$"9ABB4B0A0430303050505050302C0A0001021240BAB100000000000040B755C6"
$"CCDBBE997901178300040A0101020240BAB100000000000040B755C6CCDBBE99"
$"790A0201030240BAB100000000000040B755C6CCDBBE99790A030A0506070809"
$"0A0C0D040B0240BAB100000000000040B755C6CCDBBE99790A11011312408447"
$"3AE65BBB0539406A8F40BD7AC6ED3001178400040A00012712401CCA00000000"
$"00004031D6BEA7B4C5651401178100040A150112024046733A7FB6BABB054015"
$"08437714C3BB840A3B012E0A401CC92E6813AE6813401CC9C0B293C4BE831DFF"
$"0A11011412402E52374883B74883402E5243A84DC5C35901178200040A160115"
$"02402E52374883B74883402E5243A84DC5C3590A17011602402E52374883B748"
$"83402E5243A84DC5C3590A18011702402E52374883B74883402E5243A84DC5C3"
$"590A17011802402E52374883B74883402E5243A84DC5C3590A1801190240268F"
$"36C1F1B73CD33FA9DD442903C369B00A1B011A02402E52374883B74883402E52"
$"43A84DC5C3590A2C011B02402E52374883B74883402E5243A84DC5C3590A1101"
$"1C12402E52374883B74883402E5243A84DC5C35901178100040A20011D124018"
$"A13C2DD3BC6F843F776243040C3B35B701178400040A28011D024018A13C481B"
$"BC6F843FA13143AD0CC180CE0A27011E024018A13C3669BC6F843F850B43AD0C"
$"BDA6830A2603212022023F94B53C057BBC14913F373546DE4E423FFC0A2B0122"
$"02401CCA000000000000401CCAC64FB846E7CF0A2B01230241774E3E9634BD97"
$"FB40685AC6A141CA33220A0001291240075E0000000000004029CCC0DC88C59D"
$"5C01178100040A2E0124123E3A7739EBE1BA96D53D1E7BC874E948577D011784"
$"00040A360124023DE4F539818BBA43313CC9E6C7EFC848861D0A350125023DE4"
$"F539818BBA43313CC9E6C7EFC848861D0A340126023DE4F539D28CBA43313D0A"
$"55C7EFC8485E9A0A000128123FEA4E3675EFB6F2733F44E3440366C2D2660117"
$"8200040A00012A12402E52374883B74883402E5241C554C5CE0401178100040A"
$"00012B12401CCA000000000000401CCAC0623FC4B46E01178100040A00012C12"
$"403196000000000000401CCAC3AEA8C4B46E01178100040A3A012D02401CCA00"
$"0000000000401CCAC0E971C4B46E0A3C012F0A401CCA000000000000401CCAC0"
$"E971C4B46E1DFF0A3B01300A3FEC520000000000003C6A0B41051D473FEE1DFF"
$"0A3E01310240FA05000000000000417C4D3E5061C9E26E0A3F013212401CCA00"
$"0000000000401CCAC0E971C42D3C01178200040A4001330A401CCA0000000000"
$"00401CCAC0E971C4B46E1DFF0A42013402360000000000000000360000489000"
$"4AE8000A420134023600000000000000003600004870004AE8000A4301340236"
$"00000000000000003600004850004AF8000A4301340236000000000000000036"
$"00004870004AF8000A430134023600000000000000003600004890004AF8000A"
$"44013402360000000000000000360000485000466000"
};
+250
View File
@@ -0,0 +1,250 @@
/*
* Copyright (C) 2007 Ryan Leavengood <[email protected]>
* Copyright (C) 2010 Stephan Aßmus <[email protected]>
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "LauncherApp.h"
#include "FrameView.h"
#include "GraphicsContext.h"
#include "LauncherWindow.h"
#include "WebProcess.h"
#include "WebView.h"
#include "WebViewConstants.h"
#include <Alert.h>
#include <Entry.h>
#include <File.h>
#include <FindDirectory.h>
#include <Path.h>
#include <Screen.h>
#include <stdio.h>
extern const char* kApplicationSignature = "application/x-vnd.RJL-HaikuLauncher";
enum {
LOAD_AT_STARTING = 'lost'
};
LauncherApp::LauncherApp()
: BApplication(kApplicationSignature)
, m_lastWindowFrame(100, 100, 700, 750)
, m_launchRefsMessage(0)
, m_initialized(false)
{
}
LauncherApp::~LauncherApp()
{
delete m_launchRefsMessage;
}
void LauncherApp::AboutRequested()
{
BAlert* alert = new BAlert("About HaikuLauncher",
"For testing WebKit...\n\nby Ryan Leavengood", "Sweet!");
alert->Go();
}
void LauncherApp::ArgvReceived(int32 argc, char** argv)
{
for (int i = 1; i < argc; i++) {
BMessage message(LOAD_AT_STARTING);
message.AddString("url", argv[i]);
message.AddBool("new window", m_initialized || i > 1);
PostMessage(&message);
}
}
void LauncherApp::ReadyToRun()
{
WebProcess::initializeOnce();
BFile settingsFile;
BRect windowFrameFromSettings = m_lastWindowFrame;
if (openSettingsFile(settingsFile, B_READ_ONLY)) {
BMessage settingsArchive;
settingsArchive.Unflatten(&settingsFile);
settingsArchive.FindRect("window frame", &windowFrameFromSettings);
}
m_lastWindowFrame = windowFrameFromSettings;
m_initialized = true;
if (m_launchRefsMessage) {
RefsReceived(m_launchRefsMessage);
delete m_launchRefsMessage;
m_launchRefsMessage = 0;
} else {
LauncherWindow* window = new LauncherWindow(m_lastWindowFrame);
window->Show();
}
}
void LauncherApp::MessageReceived(BMessage* message)
{
switch (message->what) {
case LOAD_AT_STARTING: {
BString url;
if (message->FindString("url", &url) != B_OK)
break;
bool newWindow;
if (message->FindBool("new window", &newWindow) != B_OK)
newWindow = false;
WebViewWindow* webWindow = NULL;
for (int i = 0; BWindow* window = WindowAt(i); i++) {
webWindow = dynamic_cast<WebViewWindow*>(window);
if (!webWindow)
continue;
if (!newWindow) {
// stop at the first window
break;
}
}
if (webWindow) {
// There should always be at least one window open. If not, maybe we are about
// to quit anyway...
if (newWindow) {
// open a new window with an offset to the last window
webWindow->newWindowRequested(url);
} else {
// load the URL in the first window
webWindow->webView()->loadRequest(url.String());
}
}
break;
}
case B_SILENT_RELAUNCH:
newWindow("");
break;
case NEW_WINDOW: {
BString url;
if (message->FindString("url", &url) != B_OK)
break;
newWindow(url);
break;
}
case WINDOW_OPENED:
m_windowCount++;
break;
case WINDOW_CLOSED:
m_windowCount--;
message->FindRect("window frame", &m_lastWindowFrame);
if (m_windowCount <= 0)
PostMessage(B_QUIT_REQUESTED);
break;
default:
BApplication::MessageReceived(message);
break;
}
}
void LauncherApp::RefsReceived(BMessage* message)
{
if (!m_initialized) {
delete m_launchRefsMessage;
m_launchRefsMessage = new BMessage(*message);
return;
}
entry_ref ref;
for (int32 i = 0; message->FindRef("refs", i, &ref) == B_OK; i++) {
BEntry entry(&ref, true);
if (!entry.Exists())
continue;
BPath path;
if (entry.GetPath(&path) != B_OK)
continue;
BString url;
url << path.Path();
newWindow(url);
}
}
bool LauncherApp::QuitRequested()
{
for (int i = 0; BWindow* window = WindowAt(i); i++) {
WebViewWindow* webWindow = dynamic_cast<WebViewWindow*>(window);
if (!webWindow)
continue;
if (!webWindow->Lock())
continue;
if (webWindow->QuitRequested()) {
m_lastWindowFrame = webWindow->Frame();
webWindow->Quit();
i--;
} else {
webWindow->Unlock();
return false;
}
}
BFile settingsFile;
if (openSettingsFile(settingsFile, B_CREATE_FILE | B_ERASE_FILE | B_WRITE_ONLY)) {
BMessage settingsArchive;
settingsArchive.AddRect("window frame", m_lastWindowFrame);
settingsArchive.Flatten(&settingsFile);
}
return true;
}
bool LauncherApp::openSettingsFile(BFile& file, uint32 mode)
{
BPath path;
if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) != B_OK
|| path.Append("HaikuLauncher") != B_OK) {
return false;
}
return file.SetTo(path.Path(), mode) == B_OK;
}
void LauncherApp::newWindow(const BString& url)
{
m_lastWindowFrame.OffsetBy(20, 20);
if (!BScreen().Frame().Contains(m_lastWindowFrame))
m_lastWindowFrame.OffsetTo(50, 50);
LauncherWindow* window = new LauncherWindow(m_lastWindowFrame);
window->Show();
if (url.Length())
window->webView()->loadRequest(url.String());
}
// #pragma mark -
int main(int, char**)
{
new LauncherApp();
be_app->Run();
delete be_app;
return 0;
}
+62
View File
@@ -0,0 +1,62 @@
/*
* Copyright (C) 2007 Ryan Leavengood <[email protected]>
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LauncherApp_h
#define LauncherApp_h
#include <Application.h>
#include <Rect.h>
class BFile;
class LauncherWindow;
class LauncherApp : public BApplication {
public:
LauncherApp();
virtual ~LauncherApp();
virtual void AboutRequested();
virtual void ArgvReceived(int32, char**);
virtual void MessageReceived(BMessage*);
virtual void RefsReceived(BMessage*);
virtual void ReadyToRun();
virtual bool QuitRequested();
private:
bool openSettingsFile(BFile& file, uint32 mode);
void newWindow(const BString& url);
int m_windowCount;
BRect m_lastWindowFrame;
BMessage* m_launchRefsMessage;
bool m_initialized;
};
extern const char* kApplicationSignature;
#endif // LauncherApp_h
+354
View File
@@ -0,0 +1,354 @@
/*
* Copyright (C) 2007 Andrea Anzani <[email protected]>
* Copyright (C) 2007 Ryan Leavengood <[email protected]>
* Copyright (C) 2009 Maxime Simon <[email protected]>
* Copyright (C) 2010 Stephan Aßmus <[email protected]>
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "LauncherWindow.h"
#include "WebView.h"
#include "WebViewConstants.h"
#include <Application.h>
#include <Button.h>
#include <CheckBox.h>
#include <GridLayoutBuilder.h>
#include <GroupLayout.h>
#include <GroupLayoutBuilder.h>
#include <MenuBar.h>
#include <MenuItem.h>
#include <SeparatorView.h>
#include <SpaceLayoutItem.h>
#include <StatusBar.h>
#include <StringView.h>
#include <TextControl.h>
#include <stdio.h>
enum {
GO_BACK = 'goba',
GO_FORWARD = 'gofo',
GOTO_URL = 'goul',
RELOAD = 'reld',
TEXT_SIZE_INCREASE = 'tsin',
TEXT_SIZE_DECREASE = 'tsdc',
TEXT_SIZE_RESET = 'tsrs',
TEXT_SHOW_FIND_GROUP = 'sfnd',
TEXT_HIDE_FIND_GROUP = 'hfnd',
TEXT_FIND_NEXT = 'fndn',
TEXT_FIND_PREVIOUS = 'fndp'
};
using namespace WebCore;
static BLayoutItem* layoutItemFor(BView* view)
{
BLayout* layout = view->Parent()->GetLayout();
int32 index = layout->IndexOfView(view);
return layout->ItemAt(index);
}
LauncherWindow::LauncherWindow(BRect frame, ToolbarPolicy toolbarPolicy)
: WebViewWindow(frame, "HaikuLauncher",
B_TITLED_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL,
B_AUTO_UPDATE_SIZE_LIMITS | B_ASYNCHRONOUS_CONTROLS)
{
if (toolbarPolicy == HaveToolbar) {
// Menu
m_menuBar = new BMenuBar("Main menu");
BMenu* menu = new BMenu("Window");
BMessage* newWindowMessage = new BMessage(NEW_WINDOW);
newWindowMessage->AddString("url", "");
BMenuItem* newItem = new BMenuItem("New", newWindowMessage, 'N');
menu->AddItem(newItem);
newItem->SetTarget(be_app);
menu->AddItem(new BMenuItem("Close", new BMessage(B_QUIT_REQUESTED), 'W'));
menu->AddSeparatorItem();
BMenuItem* quitItem = new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED), 'Q');
menu->AddItem(quitItem);
quitItem->SetTarget(be_app);
m_menuBar->AddItem(menu);
menu = new BMenu("Text");
menu->AddItem(new BMenuItem("Find", new BMessage(TEXT_SHOW_FIND_GROUP), 'F'));
menu->AddSeparatorItem();
menu->AddItem(new BMenuItem("Increase size", new BMessage(TEXT_SIZE_INCREASE), '+'));
menu->AddItem(new BMenuItem("Decrease size", new BMessage(TEXT_SIZE_DECREASE), '-'));
menu->AddItem(new BMenuItem("Reset size", new BMessage(TEXT_SIZE_RESET), '0'));
m_menuBar->AddItem(menu);
// Back & Forward
m_BackButton = new BButton("", "Back", new BMessage(GO_BACK));
m_ForwardButton = new BButton("", "Forward", new BMessage(GO_FORWARD));
// URL
m_url = new BTextControl("url", "", "", new BMessage(GOTO_URL));
m_url->SetDivider(50.0);
// Go
BButton* button = new BButton("", "Go", new BMessage(RELOAD));
// Status Bar
m_statusText = new BStringView("status", "");
m_statusText->SetAlignment(B_ALIGN_LEFT);
m_statusText->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET));
m_statusText->SetExplicitMinSize(BSize(150, 16));
// Prevent the window from growing to fit a long status message...
BFont font(be_plain_font);
font.SetSize(ceilf(font.Size() * 0.8));
m_statusText->SetFont(&font, B_FONT_SIZE);
// Loading progress bar
m_loadingProgressBar = new BStatusBar("progress");
m_loadingProgressBar->SetMaxValue(100);
m_loadingProgressBar->Hide();
m_loadingProgressBar->SetBarHeight(10);
const float kInsetSpacing = 5;
const float kElementSpacing = 7;
m_findTextControl = new BTextControl("find", "Find:", "",
new BMessage(TEXT_FIND_NEXT));
m_findCaseSensitiveCheckBox = new BCheckBox("Match case");
BView* findGroup = BGroupLayoutBuilder(B_VERTICAL)
.Add(new BSeparatorView(B_HORIZONTAL, B_PLAIN_BORDER))
.Add(BGroupLayoutBuilder(B_HORIZONTAL, kElementSpacing)
.Add(m_findTextControl)
.Add(new BButton("Previous", new BMessage(TEXT_FIND_PREVIOUS)))
.Add(new BButton("Next", new BMessage(TEXT_FIND_NEXT)))
.Add(m_findCaseSensitiveCheckBox)
.Add(BSpaceLayoutItem::CreateGlue())
.Add(new BButton("Close", new BMessage(TEXT_HIDE_FIND_GROUP)))
.SetInsets(kInsetSpacing, kInsetSpacing,
kInsetSpacing, kInsetSpacing)
)
;
// Layout
AddChild(BGroupLayoutBuilder(B_VERTICAL)
.Add(m_menuBar)
.Add(BGridLayoutBuilder(kElementSpacing, kElementSpacing)
.Add(m_BackButton, 0, 0)
.Add(m_ForwardButton, 1, 0)
.Add(m_url, 2, 0)
.Add(button, 3, 0)
.SetInsets(kInsetSpacing, kInsetSpacing, kInsetSpacing, kInsetSpacing)
)
.Add(new BSeparatorView(B_HORIZONTAL, B_PLAIN_BORDER))
.Add(webView())
.Add(findGroup)
.Add(new BSeparatorView(B_HORIZONTAL, B_PLAIN_BORDER))
.Add(BGroupLayoutBuilder(B_HORIZONTAL, kElementSpacing)
.Add(m_statusText)
.Add(m_loadingProgressBar, 0.2)
.SetInsets(kInsetSpacing, 0, kInsetSpacing, 0)
)
);
m_url->MakeFocus(true);
m_findGroup = layoutItemFor(findGroup);
} else {
m_BackButton = 0;
m_ForwardButton = 0;
m_url = 0;
m_menuBar = 0;
m_statusText = 0;
m_loadingProgressBar = 0;
AddChild(BGroupLayoutBuilder(B_VERTICAL, 7)
.Add(webView())
);
}
m_findGroup->SetVisible(false);
AddShortcut('G', B_COMMAND_KEY, new BMessage(TEXT_FIND_NEXT));
AddShortcut('G', B_COMMAND_KEY | B_SHIFT_KEY, new BMessage(TEXT_FIND_PREVIOUS));
AddShortcut('F', B_COMMAND_KEY, new BMessage(TEXT_SHOW_FIND_GROUP));
AddShortcut('F', B_COMMAND_KEY | B_SHIFT_KEY, new BMessage(TEXT_HIDE_FIND_GROUP));
navigationCapabilitiesChanged(false, false, false);
be_app->PostMessage(WINDOW_OPENED);
}
LauncherWindow::~LauncherWindow()
{
}
void LauncherWindow::MessageReceived(BMessage* message)
{
switch (message->what) {
case RELOAD:
webView()->loadRequest(m_url->Text());
break;
case GOTO_URL:
if (m_loadedURL != m_url->Text())
webView()->loadRequest(m_url->Text());
break;
case GO_BACK:
webView()->goBack();
break;
case GO_FORWARD:
webView()->goForward();
break;
case TEXT_SIZE_INCREASE:
webView()->increaseTextSize();
break;
case TEXT_SIZE_DECREASE:
webView()->decreaseTextSize();
break;
case TEXT_SIZE_RESET:
webView()->resetTextSize();
break;
case TEXT_FIND_NEXT:
webView()->findString(m_findTextControl->Text(), true,
m_findCaseSensitiveCheckBox->Value());
break;
case TEXT_FIND_PREVIOUS:
webView()->findString(m_findTextControl->Text(), false,
m_findCaseSensitiveCheckBox->Value());
break;
case TEXT_SHOW_FIND_GROUP:
if (!m_findGroup->IsVisible())
m_findGroup->SetVisible(true);
m_findTextControl->MakeFocus(true);
break;
case TEXT_HIDE_FIND_GROUP:
if (m_findGroup->IsVisible())
m_findGroup->SetVisible(false);
break;
default:
WebViewWindow::MessageReceived(message);
break;
}
}
bool LauncherWindow::QuitRequested()
{
if (WebViewWindow::QuitRequested()) {
BMessage message(WINDOW_CLOSED);
message.AddRect("window frame", Frame());
be_app->PostMessage(&message);
return true;
}
return false;
}
// #pragma mark - Notification API
void LauncherWindow::navigationRequested(const BString& url)
{
m_loadedURL = url;
if (m_url)
m_url->SetText(url.String());
}
void LauncherWindow::newWindowRequested(const BString& url)
{
// Always open new windows in the application thread, since
// creating a WebView will try to grab the application lock.
// But our own WebProcess may already try to lock us from within
// the application thread -> dead-lock.
BMessage message(NEW_WINDOW);
message.AddString("url", url);
be_app->PostMessage(&message);
}
void LauncherWindow::loadNegociating(const BString& url)
{
BString status("Requesting: ");
status << url;
statusChanged(status);
}
void LauncherWindow::loadTransfering(const BString& url)
{
BString status("Loading: ");
status << url;
statusChanged(status);
}
void LauncherWindow::loadProgress(float progress)
{
if (m_loadingProgressBar) {
if (progress < 100 && m_loadingProgressBar->IsHidden())
m_loadingProgressBar->Show();
m_loadingProgressBar->SetTo(progress);
}
}
void LauncherWindow::loadFailed(const BString& url)
{
BString status(url);
status << " failed.";
statusChanged(status);
if (m_loadingProgressBar && !m_loadingProgressBar->IsHidden())
m_loadingProgressBar->Hide();
}
void LauncherWindow::loadFinished(const BString& url)
{
m_loadedURL = url;
BString status(url);
status << " finished.";
statusChanged(status);
if (m_url)
m_url->SetText(url.String());
if (m_loadingProgressBar && !m_loadingProgressBar->IsHidden())
m_loadingProgressBar->Hide();
}
void LauncherWindow::titleChanged(const BString& title)
{
BString windowTitle = title;
if (windowTitle.Length() > 0)
windowTitle << " - ";
windowTitle << "HaikuLauncher";
SetTitle(windowTitle.String());
}
void LauncherWindow::statusChanged(const BString& statusText)
{
if (m_statusText)
m_statusText->SetText(statusText.String());
}
void LauncherWindow::navigationCapabilitiesChanged(bool canGoBackward,
bool canGoForward, bool canStop)
{
if (m_BackButton)
m_BackButton->SetEnabled(canGoBackward);
if (m_ForwardButton)
m_ForwardButton->SetEnabled(canGoForward);
}
+91
View File
@@ -0,0 +1,91 @@
/*
* Copyright (C) 2007 Ryan Leavengood <[email protected]>
* Copyright (C) 2009 Maxime Simon <[email protected]>
* Copyright (C) 2010 Stephan Aßmus <[email protected]>
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LauncherWindow_h
#define LauncherWindow_h
#include "WebViewWindow.h"
#include <String.h>
class BButton;
class BCheckBox;
class BLayoutItem;
class BMenu;
class BStatusBar;
class BStringView;
class BTextControl;
class WebView;
enum ToolbarPolicy {
HaveToolbar,
DoNotHaveToolbar
};
enum {
NEW_WINDOW = 'nwnd',
WINDOW_OPENED = 'wndo',
WINDOW_CLOSED = 'wndc'
};
class LauncherWindow : public WebViewWindow {
public:
LauncherWindow(BRect frame, ToolbarPolicy = HaveToolbar);
virtual ~LauncherWindow();
virtual void MessageReceived(BMessage* message);
virtual bool QuitRequested();
// WebViewWindow notification API implementations
virtual void navigationRequested(const BString& url);
virtual void newWindowRequested(const BString& url);
virtual void loadNegociating(const BString& url);
virtual void loadTransfering(const BString& url);
virtual void loadProgress(float progress);
virtual void loadFailed(const BString& url);
virtual void loadFinished(const BString& url);
virtual void titleChanged(const BString& title);
virtual void statusChanged(const BString& status);
virtual void navigationCapabilitiesChanged(bool canGoBackward,
bool canGoForward, bool canStop);
private:
BMenuBar* m_menuBar;
BButton* m_BackButton;
BButton* m_ForwardButton;
BTextControl* m_url;
BString m_loadedURL;
BStringView* m_statusText;
BStatusBar* m_loadingProgressBar;
BLayoutItem* m_findGroup;
BTextControl* m_findTextControl;
BCheckBox* m_findCaseSensitiveCheckBox;
};
#endif // LauncherWindow_h
+119
View File
@@ -0,0 +1,119 @@
#ifndef LeakTracker_h
#define LeakTracker_h
// This code is from:
// http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml
// I have modified it some.
#ifndef NDEBUG
#if __GNUC__ > 2
#include <string.h>
using namespace std;
#endif
#include <stdio.h>
#include <vector>
typedef struct {
int address;
size_t size;
char file[64];
int line;
} ALLOC_INFO;
typedef vector<ALLOC_INFO*> AllocList;
AllocList *allocList;
void AddTrack(int addr, size_t asize, const char *fname, int lnum)
{
ALLOC_INFO *info;
if (!allocList)
allocList = new(AllocList);
info = new(ALLOC_INFO);
info->address = addr;
strncpy(info->file, fname, 63);
info->line = lnum;
info->size = asize;
allocList->insert(allocList->begin(), info);
};
void RemoveTrack(int addr)
{
AllocList::iterator i;
if (!allocList)
return;
for (i = allocList->begin(); i < allocList->end(); i++) {
if ((*i)->address == addr) {
allocList->erase(i);
break;
}
}
};
int unfreedCount()
{
return allocList->size();
}
bool nothingUnfreed()
{
return allocList->empty();
}
void OutputDebugString(char *str)
{
printf(str);
}
void DumpUnfreed()
{
AllocList::iterator i;
int totalSize = 0;
char buf[1024];
if (!allocList)
return;
for (i = allocList->begin(); i < allocList->end(); i++) {
sprintf(buf, "%-50s:\t\tLINE %d,\t\tADDRESS %d\t%d unfreed\n",
(*i)->file, (*i)->line, (*i)->address, (int)(*i)->size);
OutputDebugString(buf);
totalSize += (*i)->size;
}
sprintf(buf, "-----------------------------------------------------------\n");
OutputDebugString(buf);
sprintf(buf, "Total Unfreed: %d bytes\n", totalSize);
OutputDebugString(buf);
};
inline void *operator new(size_t size, const char *file, int line)
{
void *ptr = (void *)malloc(size);
AddTrack((int)ptr, size, file, line);
return(ptr);
};
inline void operator delete(void *p) throw()
{
RemoveTrack((int)p);
free(p);
};
#define DEBUG_NEW new(__FILE__, __LINE__)
#else
#define DEBUG_NEW new
#endif
#define new DEBUG_NEW
#endif // LeakTracker_h