Finished all the wiring necessary for favicon support. Send the
NAVIGATION_REQUESTED notification again from the FrameLoaderClient, this way we can try to fetch the icon even earlier. git-svn-id: http://svn.haiku-os.org/webpositive/webkit/trunk@259 94f232f2-1747-11df-bad5-a5bfde151594
This commit is contained in:
committed by
Alexandre Deckner
parent
10d5754b92
commit
6063974734
@@ -321,6 +321,7 @@ BrowserWindow::MessageReceived(BMessage* message)
|
|||||||
BString url;
|
BString url;
|
||||||
if (message->FindString("url", &url) != B_OK)
|
if (message->FindString("url", &url) != B_OK)
|
||||||
url = fURLTextControl->Text();
|
url = fURLTextControl->Text();
|
||||||
|
fTabManager->SetTabIcon(CurrentWebView(), NULL);
|
||||||
CurrentWebView()->LoadURL(url.String());
|
CurrentWebView()->LoadURL(url.String());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -703,7 +704,7 @@ BrowserWindow::TitleChanged(const BString& title, BWebView* view)
|
|||||||
void
|
void
|
||||||
BrowserWindow::IconReceived(const BBitmap* icon, BWebView* view)
|
BrowserWindow::IconReceived(const BBitmap* icon, BWebView* view)
|
||||||
{
|
{
|
||||||
printf("BrowserWindow::IconReceived(%p, %p)\n", icon, view);
|
fTabManager->SetTabIcon(view, icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
#include "WebView.h"
|
#include "WebView.h"
|
||||||
#include <Application.h>
|
#include <Application.h>
|
||||||
#include <AbstractLayoutItem.h>
|
#include <AbstractLayoutItem.h>
|
||||||
|
#include <Bitmap.h>
|
||||||
#include <Button.h>
|
#include <Button.h>
|
||||||
#include <CardLayout.h>
|
#include <CardLayout.h>
|
||||||
#include <ControlLook.h>
|
#include <ControlLook.h>
|
||||||
@@ -146,6 +147,7 @@ public:
|
|||||||
void AddTab(const char* label, int32 index = -1);
|
void AddTab(const char* label, int32 index = -1);
|
||||||
void AddTab(TabView* tab, int32 index = -1);
|
void AddTab(TabView* tab, int32 index = -1);
|
||||||
TabView* RemoveTab(int32 index);
|
TabView* RemoveTab(int32 index);
|
||||||
|
TabView* TabAt(int32 index) const;
|
||||||
|
|
||||||
int32 IndexOf(TabView* tab) const;
|
int32 IndexOf(TabView* tab) const;
|
||||||
|
|
||||||
@@ -382,6 +384,17 @@ TabContainerView::RemoveTab(int32 index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TabView*
|
||||||
|
TabContainerView::TabAt(int32 index) const
|
||||||
|
{
|
||||||
|
TabLayoutItem* item = dynamic_cast<TabLayoutItem*>(
|
||||||
|
GroupLayout()->ItemAt(index));
|
||||||
|
if (item)
|
||||||
|
return item->Parent();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int32
|
int32
|
||||||
TabContainerView::IndexOf(TabView* tab) const
|
TabContainerView::IndexOf(TabView* tab) const
|
||||||
{
|
{
|
||||||
@@ -738,6 +751,7 @@ private:
|
|||||||
class WebTabView : public TabView {
|
class WebTabView : public TabView {
|
||||||
public:
|
public:
|
||||||
WebTabView(TabManagerController* controller);
|
WebTabView(TabManagerController* controller);
|
||||||
|
~WebTabView();
|
||||||
|
|
||||||
virtual BSize MaxSize();
|
virtual BSize MaxSize();
|
||||||
|
|
||||||
@@ -749,12 +763,15 @@ public:
|
|||||||
virtual void MouseMoved(BPoint where, uint32 transit,
|
virtual void MouseMoved(BPoint where, uint32 transit,
|
||||||
const BMessage* dragMessage);
|
const BMessage* dragMessage);
|
||||||
|
|
||||||
|
void SetIcon(const BBitmap* icon);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void _DrawCloseButton(BView* owner, BRect& frame, const BRect& updateRect,
|
void _DrawCloseButton(BView* owner, BRect& frame, const BRect& updateRect,
|
||||||
bool isFirst, bool isLast, bool isFront);
|
bool isFirst, bool isLast, bool isFront);
|
||||||
BRect _CloseRectFrame(BRect frame) const;
|
BRect _CloseRectFrame(BRect frame) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
BBitmap* fIcon;
|
||||||
TabManagerController* fController;
|
TabManagerController* fController;
|
||||||
bool fOverCloseRect;
|
bool fOverCloseRect;
|
||||||
bool fClicked;
|
bool fClicked;
|
||||||
@@ -764,6 +781,7 @@ private:
|
|||||||
WebTabView::WebTabView(TabManagerController* controller)
|
WebTabView::WebTabView(TabManagerController* controller)
|
||||||
:
|
:
|
||||||
TabView(),
|
TabView(),
|
||||||
|
fIcon(NULL),
|
||||||
fController(controller),
|
fController(controller),
|
||||||
fOverCloseRect(false),
|
fOverCloseRect(false),
|
||||||
fClicked(false)
|
fClicked(false)
|
||||||
@@ -771,11 +789,21 @@ WebTabView::WebTabView(TabManagerController* controller)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WebTabView::~WebTabView()
|
||||||
|
{
|
||||||
|
delete fIcon;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
BSize
|
BSize
|
||||||
WebTabView::MaxSize()
|
WebTabView::MaxSize()
|
||||||
{
|
{
|
||||||
// Account for close button.
|
// Account for icon.
|
||||||
BSize size(TabView::MaxSize());
|
BSize size(TabView::MaxSize());
|
||||||
|
size.height = max_c(size.height, 16 + 8);
|
||||||
|
if (fIcon)
|
||||||
|
size.width += 16 + 8;
|
||||||
|
// Account for close button.
|
||||||
size.width += size.height;
|
size.width += size.height;
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
@@ -788,6 +816,19 @@ WebTabView::DrawContents(BView* owner, BRect frame, const BRect& updateRect,
|
|||||||
if (fController->CloseButtonsAvailable())
|
if (fController->CloseButtonsAvailable())
|
||||||
_DrawCloseButton(owner, frame, updateRect, isFirst, isLast, isFront);
|
_DrawCloseButton(owner, frame, updateRect, isFirst, isLast, isFront);
|
||||||
|
|
||||||
|
if (fIcon) {
|
||||||
|
BRect iconBounds(0, 0, 15, 15);
|
||||||
|
// clip to icon bounds, if they are smaller
|
||||||
|
if (iconBounds.Contains(fIcon->Bounds()))
|
||||||
|
iconBounds = fIcon->Bounds();
|
||||||
|
BPoint iconPos(frame.left + 4,
|
||||||
|
frame.top + (frame.Height() - iconBounds.Height()) / 2);
|
||||||
|
iconBounds.OffsetTo(iconPos);
|
||||||
|
owner->SetDrawingMode(B_OP_OVER);
|
||||||
|
owner->DrawBitmap(fIcon, fIcon->Bounds(), iconBounds);
|
||||||
|
frame.left = frame.left + 16 + 8;
|
||||||
|
}
|
||||||
|
|
||||||
TabView::DrawContents(owner, frame, updateRect, isFirst, isLast, isFront);
|
TabView::DrawContents(owner, frame, updateRect, isFirst, isLast, isFront);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -843,6 +884,18 @@ WebTabView::MouseMoved(BPoint where, uint32 transit,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
WebTabView::SetIcon(const BBitmap* icon)
|
||||||
|
{
|
||||||
|
delete fIcon;
|
||||||
|
if (icon)
|
||||||
|
fIcon = new BBitmap(icon);
|
||||||
|
else
|
||||||
|
fIcon = NULL;
|
||||||
|
LayoutItem()->InvalidateLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
BRect
|
BRect
|
||||||
WebTabView::_CloseRectFrame(BRect frame) const
|
WebTabView::_CloseRectFrame(BRect frame) const
|
||||||
{
|
{
|
||||||
@@ -1181,16 +1234,11 @@ TabManager::SelectTab(int32 tabIndex)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
TabManager::SelectTab(BView* containedView)
|
TabManager::SelectTab(const BView* containedView)
|
||||||
{
|
{
|
||||||
int32 count = fCardLayout->CountItems();
|
int32 tabIndex = _TabIndexForContainedView(containedView);
|
||||||
for (int32 i = 0; i < count; i++) {
|
if (tabIndex > 0)
|
||||||
BLayoutItem* item = fCardLayout->ItemAt(i);
|
SelectTab(tabIndex);
|
||||||
if (item->View() == containedView) {
|
|
||||||
SelectTab(i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1252,6 +1300,16 @@ TabManager::SetTabLabel(int32 tabIndex, const char* label)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TabManager::SetTabIcon(const BView* containedView, const BBitmap* icon)
|
||||||
|
{
|
||||||
|
WebTabView* tab = dynamic_cast<WebTabView*>(fTabContainerView->TabAt(
|
||||||
|
_TabIndexForContainedView(containedView)));
|
||||||
|
if (tab)
|
||||||
|
tab->SetIcon(icon);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
TabManager::SetCloseButtonsAvailable(bool available)
|
TabManager::SetCloseButtonsAvailable(bool available)
|
||||||
{
|
{
|
||||||
@@ -1261,3 +1319,16 @@ TabManager::SetCloseButtonsAvailable(bool available)
|
|||||||
fTabContainerView->Invalidate();
|
fTabContainerView->Invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int32
|
||||||
|
TabManager::_TabIndexForContainedView(const BView* containedView) const
|
||||||
|
{
|
||||||
|
int32 count = fCardLayout->CountItems();
|
||||||
|
for (int32 i = 0; i < count; i++) {
|
||||||
|
BLayoutItem* item = fCardLayout->ItemAt(i);
|
||||||
|
if (item->View() == containedView)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ enum {
|
|||||||
CLOSE_TAB = 'cltb'
|
CLOSE_TAB = 'cltb'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class BBitmap;
|
||||||
class BCardLayout;
|
class BCardLayout;
|
||||||
class BGroupView;
|
class BGroupView;
|
||||||
class BMenu;
|
class BMenu;
|
||||||
@@ -61,7 +62,7 @@ public:
|
|||||||
BView* ViewForTab(int32 tabIndex) const;
|
BView* ViewForTab(int32 tabIndex) const;
|
||||||
|
|
||||||
void SelectTab(int32 tabIndex);
|
void SelectTab(int32 tabIndex);
|
||||||
void SelectTab(BView* containedView);
|
void SelectTab(const BView* containedView);
|
||||||
int32 SelectedTabIndex() const;
|
int32 SelectedTabIndex() const;
|
||||||
void CloseTab(int32 tabIndex);
|
void CloseTab(int32 tabIndex);
|
||||||
|
|
||||||
@@ -71,8 +72,14 @@ public:
|
|||||||
int32 CountTabs() const;
|
int32 CountTabs() const;
|
||||||
|
|
||||||
void SetTabLabel(int32 tabIndex, const char* label);
|
void SetTabLabel(int32 tabIndex, const char* label);
|
||||||
|
void SetTabIcon(const BView* containedView,
|
||||||
|
const BBitmap* icon);
|
||||||
void SetCloseButtonsAvailable(bool available);
|
void SetCloseButtonsAvailable(bool available);
|
||||||
|
|
||||||
|
private:
|
||||||
|
int32 _TabIndexForContainedView(
|
||||||
|
const BView* containedView) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
#if INTEGRATE_MENU_INTO_TAB_BAR
|
#if INTEGRATE_MENU_INTO_TAB_BAR
|
||||||
BMenu* fMenu;
|
BMenu* fMenu;
|
||||||
|
|||||||
Reference in New Issue
Block a user