diff --git a/docs/user/storage/Path.dox b/docs/user/storage/Path.dox
index f087985546..47b679ae40 100644
--- a/docs/user/storage/Path.dox
+++ b/docs/user/storage/Path.dox
@@ -135,7 +135,7 @@
\returns A status code.
\retval B_OK Initialization was successful.
- \retval B_BAD_VALUE \c NULL \a ref.
+ \retval B_BAD_VALUE \a ref was \c NULL.
\retval B_NAME_TOO_LONG The pathname was longer than \c B_PATH_NAME_LENGTH.
*/
@@ -148,7 +148,7 @@
\returns A status code.
\retval B_OK Initialization was successful.
- \retval B_BAD_VALUE \c NULL \a ref.
+ \retval B_BAD_VALUE \a ref was \c NULL.
\retval B_NAME_TOO_LONG The pathname was longer than \c B_PATH_NAME_LENGTH.
*/
@@ -173,7 +173,7 @@
\returns A status code.
\retval B_OK Initialization was successful.
- \retval B_BAD_VALUE \c NULL \a ref.
+ \retval B_BAD_VALUE \a ref was \c NULL.
\retval B_NAME_TOO_LONG The pathname was longer than \c B_PATH_NAME_LENGTH.
*/
@@ -196,7 +196,7 @@
\returns A status code.
\retval B_OK Initialization was successful.
- \retval B_BAD_VALUE \c NULL \a ref.
+ \retval B_BAD_VALUE \a ref was \c NULL.
\retval B_NAME_TOO_LONG The pathname was longer than \c B_PATH_NAME_LENGTH.
*/
@@ -204,7 +204,7 @@
/*!
\fn void BPath::Unset()
\brief Returns the object to an uninitialized state.
-
+
Frees any resources it allocated and marks the object as uninitialized.
*/
@@ -238,7 +238,7 @@
\returns A status code.
\retval B_OK Initialization was successful.
- \retval B_BAD_VALUE \c NULL \a ref.
+ \retval B_BAD_VALUE \a ref was \c NULL.
\retval B_NAME_TOO_LONG The pathname was longer than \c B_PATH_NAME_LENGTH.
*/
@@ -285,7 +285,7 @@
\returns A status code.
\retval B_OK Everything went fine.
- \retval B_BAD_VALUE \c NULL \a path.
+ \retval B_BAD_VALUE \a path was \c NULL.
\retval B_ENTRY_NOT_FOUND The BPath object represents the root path and
thus has no parent.
*/
@@ -389,7 +389,7 @@
/*!
- \name BFlattenable override methods
+ \name BFlattenable method implementations
*/
@@ -398,7 +398,7 @@
/*!
\fn bool BPath::IsFixedSize() const
- \brief Overrides BFlattenable::IsFixedSize(). Always returns \c false.
+ \brief Implements BFlattenable::IsFixedSize(). Always returns \c false.
\return \c false
*/
@@ -406,7 +406,7 @@
/*!
\fn type_code BPath::TypeCode() const
- \brief Overrides BFlattenable::TypeCode() Always returns \c B_REF_TYPE.
+ \brief Implements BFlattenable::TypeCode(). Always returns \c B_REF_TYPE.
\return \c B_REF_TYPE
*/
@@ -414,7 +414,7 @@
/*!
\fn ssize_t BPath::FlattenedSize() const
- \brief Overrides BFlattenable::FlattenedSize() Gets the size of the
+ \brief Implements BFlattenable::FlattenedSize(). Gets the size of the
flattened entry_ref struct that represents the path in bytes.
\return The size of the flattened entry_ref struct that represents the
@@ -424,7 +424,7 @@
/*!
\fn status_t BPath::Flatten(void* buffer, ssize_t size) const
- \brief Overrides BFlattenable::Flatten(). Converts the path of the object
+ \brief Implements BFlattenable::Flatten(). Converts the path of the object
to an entry_ref and writes it into buffer.
\param buffer The buffer that the data is to be stored in.
@@ -432,13 +432,13 @@
\returns A status code.
\retval B_OK Everything went fine.
- \retval B_BAD_VALUE \c NULL buffer or the buffer is of insufficient size.
+ \retval B_BAD_VALUE \a buffer was \c NULL or of insufficient size.
*/
/*!
\fn bool BPath::AllowsTypeCode(type_code code) const
- \brief Overrides BFlattenable::AllowsTypeCode(). Checks if type code is
+ \brief Implements BFlattenable::AllowsTypeCode(). Checks if type code is
equal to \c B_REF_TYPE.
\param code The type code to test.
@@ -450,7 +450,7 @@
/*!
\fn status_t BPath::Unflatten(type_code code, const void* buffer,
ssize_t size)
- \brief Overrides BFlattenable::Unflatten(). Initializes the object with
+ \brief Implements BFlattenable::Unflatten(). Initializes the object with
the flattened entry_ref data from the passed in buffer.
The type code must be set to \c B_REF_TYPE.
@@ -461,7 +461,7 @@
\returns A status code.
\retval B_OK Everything went fine.
- \retval B_BAD_VALUE \a buffer is \c NULL or doesn't contain an entry_ref.
+ \retval B_BAD_VALUE \a buffer was \c NULL or didn't contain an entry_ref.
*/
@@ -475,8 +475,8 @@
status_t BPath::_SetPath(const char* path)
\brief Sets the supplied path.
- The path is copied. If \a path is \c NULL path of the object is set to
- \c NULL as well. The object's old path is deleted.
+ The path is copied, if \a path is \c NULL the path of the object is set to
+ \c NULL as well. The old path is deleted.
\param path the path to be set
diff --git a/headers/os/net/UrlProtocol.h b/headers/os/net/UrlProtocol.h
index 2d95d8fd71..f177dbb7e1 100644
--- a/headers/os/net/UrlProtocol.h
+++ b/headers/os/net/UrlProtocol.h
@@ -15,14 +15,14 @@
class BUrlProtocol {
public:
- BUrlProtocol(const BUrl& url,
+ BUrlProtocol(const BUrl& url,
BUrlProtocolListener* listener,
BUrlContext* context,
BUrlResult* result,
const char* threadName,
const char* protocolName);
virtual ~BUrlProtocol();
-
+
// URL protocol required members
// TODO: (stippi) I know it's sometimes appealing to have these
// "simplistic" methods that can do anything, but they remove
@@ -39,7 +39,7 @@ public:
// is it here at all? Why not have non-virtual setters for specific
// things, where the setter is properly named?
virtual status_t SetOption(uint32 name, void* value) = 0;
-
+
// URL protocol thread management
virtual thread_id Run();
virtual status_t Pause();
@@ -51,27 +51,25 @@ public:
status_t SetResult(BUrlResult* result);
status_t SetContext(BUrlContext* context);
status_t SetListener(BUrlProtocolListener* listener);
-
+
// URL protocol parameters access
const BUrl& Url() const;
BUrlResult* Result() const;
BUrlContext* Context() const;
BUrlProtocolListener* Listener() const;
const BString& Protocol() const;
- // TODO: Does not belong here.
- BHttpHeaders& Headers() { return fRequestHeaders; }
-
+
// URL protocol informations
bool IsRunning() const;
status_t Status() const;
- virtual const char* StatusString(status_t threadStatus)
+ virtual const char* StatusString(status_t threadStatus)
const;
-
-
+
+
protected:
static int32 _ThreadEntry(void* arg);
virtual status_t _ProtocolLoop();
- virtual void _EmitDebug(BUrlProtocolDebugMessage type,
+ virtual void _EmitDebug(BUrlProtocolDebugMessage type,
const char* format, ...);
// URL result parameters access
@@ -79,15 +77,13 @@ protected:
BHttpHeaders& _ResultHeaders();
void _SetResultStatusCode(int32 statusCode);
BString& _ResultStatusText();
-
+
protected:
BUrl fUrl;
- BHttpHeaders fRequestHeaders;
- // TODO: Does not belong here.
BUrlResult* fResult;
BUrlContext* fContext;
BUrlProtocolListener* fListener;
-
+
bool fQuit;
bool fRunning;
status_t fThreadStatus;
@@ -110,7 +106,7 @@ enum {
B_PROT_WRITE_FAILED,
B_PROT_READ_FAILED,
B_PROT_NO_MEMORY,
- B_PROT_PROTOCOL_ERROR,
+ B_PROT_PROTOCOL_ERROR,
// Thread status over this one are guaranteed to be
// errors
B_PROT_THREAD_STATUS__END
@@ -118,18 +114,18 @@ enum {
namespace BPrivate {
-
+
class BUrlProtocolOption {
public:
BUrlProtocolOption(void* value) : fValuePtr(value) { }
-
+
bool Bool() const { return *reinterpret_cast(fValuePtr); }
int8 Int8() const { return *reinterpret_cast(fValuePtr); }
int16 Int16() const { return *reinterpret_cast(fValuePtr); }
int32 Int32() const { return *reinterpret_cast(fValuePtr); }
char* String() const { return reinterpret_cast(fValuePtr); }
void* Pointer() const { return fValuePtr; }
-
+
private:
void* fValuePtr;
};
diff --git a/headers/os/net/UrlProtocolHttp.h b/headers/os/net/UrlProtocolHttp.h
index 1902827f80..e924aed0a5 100644
--- a/headers/os/net/UrlProtocolHttp.h
+++ b/headers/os/net/UrlProtocolHttp.h
@@ -30,7 +30,7 @@ public:
virtual ~BUrlProtocolHttp();
virtual status_t SetOption(uint32 option, void* value);
-
+
static bool IsInformationalStatusCode(int16 code);
static bool IsSuccessStatusCode(int16 code);
static bool IsRedirectionStatusCode(int16 code);
@@ -39,49 +39,49 @@ public:
static int16 StatusCodeClass(int16 code);
virtual const char* StatusString(status_t threadStatus) const;
-
+
private:
void _ResetOptions();
status_t _ProtocolLoop();
bool _ResolveHostName();
status_t _MakeRequest();
-
+
void _CreateRequest();
void _AddHeaders();
-
+
status_t _GetLine(BString& destString);
-
+
void _ParseStatus();
void _ParseHeaders();
-
- void _CopyChunkInBuffer(char** buffer,
+
+ void _CopyChunkInBuffer(char** buffer,
ssize_t* bytesReceived);
-
+
void _AddOutputBufferLine(const char* line);
-
-
+
+
private:
BAbstractSocket* fSocket;
BNetworkAddress fRemoteAddr;
bool fSSL;
-
+
int8 fRequestMethod;
int8 fHttpVersion;
-
+
BString fOutputBuffer;
BNetBuffer fInputBuffer;
-
+
BHttpHeaders fHeaders;
BHttpAuthentication fAuthentication;
-
+
// Request status
BHttpHeaders fOutputHeaders;
bool fStatusReceived;
bool fHeadersReceived;
bool fContentReceived;
bool fTrailingHeadersReceived;
-
-
+
+
// Protocol options
uint8 fOptMaxRedirs;
BString fOptReferer;
@@ -128,21 +128,21 @@ enum {
enum {
B_HTTPOPT_METHOD = 0,
// (int) Request method (see B_HTTP_GET, ...)
- B_HTTPOPT_FOLLOWLOCATION,
+ B_HTTPOPT_FOLLOWLOCATION,
// (bool) Follow Location: headers
- B_HTTPOPT_MAXREDIRS,
+ B_HTTPOPT_MAXREDIRS,
// (int) Max relocation
- B_HTTPOPT_HEADERS,
+ B_HTTPOPT_HEADERS,
// (BHttpHeaders*) Headers to be sent
- B_HTTPOPT_REFERER,
+ B_HTTPOPT_REFERER,
// (string) Referer
- B_HTTPOPT_USERAGENT,
+ B_HTTPOPT_USERAGENT,
// (string) User-Agent
- B_HTTPOPT_SETCOOKIES,
+ B_HTTPOPT_SETCOOKIES,
// (bool) Send cookies from context
- B_HTTPOPT_DISCARD_DATA,
+ B_HTTPOPT_DISCARD_DATA,
// (bool) Discard incoming data (still notified)
- B_HTTPOPT_DISABLE_LISTENER,
+ B_HTTPOPT_DISABLE_LISTENER,
// (bool) Don't send notification to the listener
B_HTTPOPT_AUTOREFERER,
// (bool) Automatically set the Referer header
@@ -156,7 +156,7 @@ enum {
// (string) Authentication password
B_HTTPOPT_AUTHMETHOD,
// (int) Allowed authentication methods (see BHttpAuthenticationMethod)
-
+
B_HTTPOPT__OPT_NUM
};
@@ -179,7 +179,7 @@ enum http_status_code {
B_HTTP_STATUS_CONTINUE = B_HTTP_STATUS__INFORMATIONAL_BASE,
B_HTTP_STATUS_SWITCHING_PROTOCOLS,
B_HTTP_STATUS__INFORMATIONAL_END,
-
+
// Success status codes
B_HTTP_STATUS__SUCCESS_BASE = 200,
B_HTTP_STATUS_OK = B_HTTP_STATUS__SUCCESS_BASE,
@@ -190,7 +190,7 @@ enum http_status_code {
B_HTTP_STATUS_RESET_CONTENT,
B_HTTP_STATUS_PARTIAL_CONTENT,
B_HTTP_STATUS__SUCCESS_END,
-
+
// Redirection status codes
B_HTTP_STATUS__REDIRECTION_BASE = 300,
B_HTTP_STATUS_MULTIPLE_CHOICE = B_HTTP_STATUS__REDIRECTION_BASE,
@@ -201,7 +201,7 @@ enum http_status_code {
B_HTTP_STATUS_USE_PROXY,
B_HTTP_STATUS_TEMPORARY_REDIRECT,
B_HTTP_STATUS__REDIRECTION_END,
-
+
// Client error status codes
B_HTTP_STATUS__CLIENT_ERROR_BASE = 400,
B_HTTP_STATUS_BAD_REQUEST = B_HTTP_STATUS__CLIENT_ERROR_BASE,
@@ -223,7 +223,7 @@ enum http_status_code {
B_HTTP_STATUS_REQUESTED_RANGE_NOT_SATISFIABLE,
B_HTTP_STATUS_EXPECTATION_FAILED,
B_HTTP_STATUS__CLIENT_ERROR_END,
-
+
// Server error status codes
B_HTTP_STATUS__SERVER_ERROR_BASE = 500,
B_HTTP_STATUS_INTERNAL_SERVER_ERROR = B_HTTP_STATUS__SERVER_ERROR_BASE,
diff --git a/headers/os/net/UrlRequest.h b/headers/os/net/UrlRequest.h
index 984dfa42e4..d036783d86 100644
--- a/headers/os/net/UrlRequest.h
+++ b/headers/os/net/UrlRequest.h
@@ -22,36 +22,34 @@ enum {
class BUrlRequest {
public:
BUrlRequest(const BUrl& url,
- BUrlProtocolListener* listener);
- BUrlRequest(const BUrl& url);
+ BUrlProtocolListener* listener = NULL,
+ BUrlContext* context = NULL);
BUrlRequest(const BUrlRequest& other);
- virtual ~BUrlRequest() { };
+ virtual ~BUrlRequest();
// Request parameters modification
status_t SetUrl(const BUrl& url);
void SetContext(BUrlContext* context);
void SetProtocolListener(
BUrlProtocolListener* listener);
- bool SetProtocolOption(int32 option,
+ bool SetProtocolOption(int32 option,
void* value);
// Request parameters access
const BUrlProtocol* Protocol();
const BUrlResult& Result();
const BUrl& Url();
-
+
// Request control
- status_t Identify();
- virtual status_t Perform();
- // TODO: Rename to Run() perhaps? "Perform" is used for FBC stuff.
+ virtual status_t Start();
virtual status_t Pause();
virtual status_t Resume();
virtual status_t Abort();
-
+
// Request informations
- virtual bool InitCheck() const;
+ virtual status_t InitCheck() const;
bool IsRunning() const;
status_t Status() const;
-
+
// Overloaded members
BUrlRequest& operator=(const BUrlRequest& other);
@@ -62,7 +60,10 @@ protected:
BUrlResult fResult;
BUrlContext* fContext;
BUrl fUrl;
- bool fReady;
+ status_t fInitStatus;
+
+private:
+ status_t _SetupProtocol();
};
#endif // _B_URL_REQUEST_H_
diff --git a/headers/private/shared/AboutWindow.h b/headers/private/shared/AboutWindow.h
index 6dcaa77845..16a9f429c2 100644
--- a/headers/private/shared/AboutWindow.h
+++ b/headers/private/shared/AboutWindow.h
@@ -16,6 +16,7 @@
class AboutView;
+class BBitmap;
class BPoint;
class BHandler;
@@ -26,6 +27,7 @@ class BAboutWindow : public BWindow {
virtual ~BAboutWindow();
virtual bool QuitRequested();
+ virtual void Show();
BPoint AboutPosition(float width, float height);
void AddDescription(const char* description);
@@ -37,6 +39,15 @@ class BAboutWindow : public BWindow {
void AddVersionHistory(const char** history);
void AddExtraInfo(const char* extraInfo);
+ BBitmap* Icon();
+ void SetIcon(BBitmap* icon);
+
+ const char* Name();
+ void SetName(const char* name);
+
+ const char* Version();
+ void SetVersion(const char* version);
+
private:
AboutView* fAboutView;
BHandler* fCaller;
diff --git a/src/apps/deskbar/BarMenuTitle.cpp b/src/apps/deskbar/BarMenuTitle.cpp
index 7506ddcb1a..cf877a1fb6 100644
--- a/src/apps/deskbar/BarMenuTitle.cpp
+++ b/src/apps/deskbar/BarMenuTitle.cpp
@@ -133,7 +133,6 @@ TBarMenuTitle::DrawContent()
rgb_color menuColor = menu->LowColor();
rgb_color dark = tint_color(menuColor, B_DARKEN_1_TINT);
rgb_color light = tint_color(menuColor, B_LIGHTEN_2_TINT);
- rgb_color black = {0, 0, 0, 255};
bool inExpandoMode = dynamic_cast(menu) != NULL;
@@ -161,7 +160,10 @@ TBarMenuTitle::DrawContent()
frame.InsetBy(1, 1);
menu->SetHighColor(menuColor);
menu->FillRect(frame);
- menu->SetHighColor(black);
+ if (IsSelected())
+ menu->SetHighColor(ui_color(B_MENU_SELECTED_ITEM_TEXT_COLOR));
+ else
+ menu->SetHighColor(ui_color(B_MENU_ITEM_TEXT_COLOR));
frame.InsetBy(-1, -1);
if (inExpandoMode)
frame.top -= 1;
@@ -177,7 +179,10 @@ TBarMenuTitle::DrawContent()
menu->StrokeLine(frame.LeftTop(), frame.LeftBottom());
}
- menu->SetHighColor(black);
+ if (IsSelected())
+ menu->SetHighColor(ui_color(B_MENU_SELECTED_ITEM_TEXT_COLOR));
+ else
+ menu->SetHighColor(ui_color(B_MENU_ITEM_TEXT_COLOR));
}
menu->SetDrawingMode(B_OP_ALPHA);
diff --git a/src/apps/deskbar/PreferencesWindow.cpp b/src/apps/deskbar/PreferencesWindow.cpp
index 5312603937..a43f918074 100644
--- a/src/apps/deskbar/PreferencesWindow.cpp
+++ b/src/apps/deskbar/PreferencesWindow.cpp
@@ -283,6 +283,18 @@ PreferencesWindow::QuitRequested()
}
+void
+PreferencesWindow::Show()
+{
+ if (IsHidden()) {
+ // move to current workspace
+ SetWorkspaces(B_CURRENT_WORKSPACE);
+ }
+
+ BWindow::Show();
+}
+
+
void
PreferencesWindow::WindowActivated(bool active)
{
diff --git a/src/apps/deskbar/PreferencesWindow.h b/src/apps/deskbar/PreferencesWindow.h
index 3f0540d010..ac1cbbcc29 100644
--- a/src/apps/deskbar/PreferencesWindow.h
+++ b/src/apps/deskbar/PreferencesWindow.h
@@ -35,6 +35,7 @@ public:
virtual void MessageReceived(BMessage* message);
virtual bool QuitRequested();
+ virtual void Show();
virtual void WindowActivated(bool active);
void UpdateRecentCounts();
diff --git a/src/apps/deskbar/TeamMenuItem.cpp b/src/apps/deskbar/TeamMenuItem.cpp
index 8a7474bebf..692f3ce17e 100644
--- a/src/apps/deskbar/TeamMenuItem.cpp
+++ b/src/apps/deskbar/TeamMenuItem.cpp
@@ -395,9 +395,6 @@ TTeamMenuItem::DrawContent()
menu->MovePenTo(drawLoc);
}
- // set the pen to black so that either method will draw in the same color
- // low color is set in inherited::DrawContent, override makes sure its
- // what we want
if (fDrawLabel) {
menu->SetDrawingMode(B_OP_OVER);
menu->SetHighColor(ui_color(B_MENU_ITEM_TEXT_COLOR));
@@ -513,6 +510,11 @@ TTeamMenuItem::DrawContentLabel()
else
menu->SetLowColor(menu->LowColor());
+ if (IsSelected())
+ menu->SetHighColor(ui_color(B_MENU_SELECTED_ITEM_TEXT_COLOR));
+ else
+ menu->SetHighColor(ui_color(B_MENU_ITEM_TEXT_COLOR));
+
menu->DrawString(label);
free(truncLabel);
diff --git a/src/apps/deskbar/WindowMenuItem.cpp b/src/apps/deskbar/WindowMenuItem.cpp
index 98d93e33a3..21559c581c 100644
--- a/src/apps/deskbar/WindowMenuItem.cpp
+++ b/src/apps/deskbar/WindowMenuItem.cpp
@@ -272,8 +272,11 @@ TWindowMenuItem::DrawContent()
+ ((frame.Height() - fTitleAscent - fTitleDescent) / 2) + 1.0f;
menu->MovePenTo(contLoc);
- // Set the pen color so that the label is always visible.
- menu->SetHighColor(ui_color(B_MENU_ITEM_TEXT_COLOR));
+
+ if (IsSelected())
+ menu->SetHighColor(ui_color(B_MENU_SELECTED_ITEM_TEXT_COLOR));
+ else
+ menu->SetHighColor(ui_color(B_MENU_ITEM_TEXT_COLOR));
BMenuItem::DrawContent();
diff --git a/src/apps/powerstatus/PowerStatusView.cpp b/src/apps/powerstatus/PowerStatusView.cpp
index 1fced11ca3..d8c23bae59 100644
--- a/src/apps/powerstatus/PowerStatusView.cpp
+++ b/src/apps/powerstatus/PowerStatusView.cpp
@@ -77,7 +77,7 @@ PowerStatusView::PowerStatusView(BMessage* archive)
PowerStatusView::~PowerStatusView()
{
- if (fAboutWindow != NULL)
+ if (fAboutWindow != NULL && fAboutWindow->Lock())
fAboutWindow->Quit();
}
diff --git a/src/apps/webpositive/BrowserWindow.cpp b/src/apps/webpositive/BrowserWindow.cpp
index 9f5e3e7e5e..ee9e6b834a 100644
--- a/src/apps/webpositive/BrowserWindow.cpp
+++ b/src/apps/webpositive/BrowserWindow.cpp
@@ -39,6 +39,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -56,6 +57,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -424,6 +426,12 @@ BrowserWindow::BrowserWindow(BRect frame, SettingsMessage* appSettings,
const float kElementSpacing = 5;
// Find group
+ fFindCloseButton = new BButton("\xc3\x97", // multiplication sign
+ new BMessage(EDIT_HIDE_FIND_GROUP));
+ fFindCloseButton->SetExplicitMinSize(
+ BSize(be_control_look->DefaultItemSpacing() * 3, B_SIZE_UNSET));
+ fFindCloseButton->SetExplicitMaxSize(
+ BSize(be_control_look->DefaultItemSpacing() * 3, B_SIZE_UNSET));
fFindTextControl = new BTextControl("find", B_TRANSLATE("Find:"), "",
new BMessage(EDIT_FIND_NEXT));
fFindTextControl->SetModificationMessage(new BMessage(FIND_TEXT_CHANGED));
@@ -431,18 +439,15 @@ BrowserWindow::BrowserWindow(BRect frame, SettingsMessage* appSettings,
new BMessage(EDIT_FIND_PREVIOUS));
fFindNextButton = new BButton(B_TRANSLATE("Next"),
new BMessage(EDIT_FIND_NEXT));
- fFindCloseButton = new BButton(B_TRANSLATE("Close"),
- new BMessage(EDIT_HIDE_FIND_GROUP));
fFindCaseSensitiveCheckBox = new BCheckBox(B_TRANSLATE("Match case"));
BGroupLayout* findGroup = BLayoutBuilder::Group<>(B_VERTICAL, 0.0)
.Add(new BSeparatorView(B_HORIZONTAL, B_PLAIN_BORDER))
- .Add(BGroupLayoutBuilder(B_HORIZONTAL, kElementSpacing)
+ .Add(BGroupLayoutBuilder(B_HORIZONTAL, B_USE_DEFAULT_SPACING)
+ .Add(fFindCloseButton)
.Add(fFindTextControl)
.Add(fFindPreviousButton)
.Add(fFindNextButton)
.Add(fFindCaseSensitiveCheckBox)
- .Add(BSpaceLayoutItem::CreateGlue())
- .Add(fFindCloseButton)
.SetInsets(kInsetSpacing, kInsetSpacing,
kInsetSpacing, kInsetSpacing)
)
@@ -2332,5 +2337,3 @@ BrowserWindow::_HandlePageSourceResult(const BMessage* message)
alert->Go(NULL);
}
}
-
-
diff --git a/src/bin/setmime.cpp b/src/bin/setmime.cpp
index c5ad68e6dd..c69f6fa747 100644
--- a/src/bin/setmime.cpp
+++ b/src/bin/setmime.cpp
@@ -222,9 +222,12 @@ struct MimeAttribute
MimeAttribute(BMessage& msg, int32 index);
MimeAttribute(TUserArgs& args);
+ MimeAttribute(const MimeAttribute& src);
status_t InitCheck() { return fStatus; }
+ MimeAttribute& operator=(const MimeAttribute& src);
+
void Dump();
void SyncWith(TUserArgs& args) throw(Error);
void StoreInto(BMessage* target);
@@ -288,12 +291,43 @@ MimeAttribute::MimeAttribute(BMessage& msg, int32 index)
MimeAttribute::MimeAttribute(TUserArgs& args)
+ :
+ fStatus(B_NO_INIT),
+ fType('CSTR'),
+ fViewable(true),
+ fEditable(false),
+ fExtra(false),
+ fWidth(0),
+ fAlignment(0)
{
SyncWith(args);
fStatus = B_OK;
}
+MimeAttribute::MimeAttribute(const MimeAttribute& src)
+{
+ *this = src;
+}
+
+
+MimeAttribute&
+MimeAttribute::operator=(const MimeAttribute& src)
+{
+ fStatus = src.fStatus;
+ fName = src.fName;
+ fPublicName = src.fPublicName;
+ fType = src.fType;
+ fViewable = src.fViewable;
+ fEditable = src.fEditable;
+ fExtra = src.fExtra;
+ fWidth = src.fWidth;
+ fAlignment = src.fAlignment;
+
+ return *this;
+}
+
+
void
MimeAttribute::SyncWith(TUserArgs& args) throw(Error)
{
@@ -609,7 +643,7 @@ MimeType::_Init(char** argv) throw (Error)
throw Error("'%s' allowed only after the '%s' ",
name, kAttribute);
- if (!*++arg)
+ if (!*++arg || **arg == '-')
throw Error("'%s', argument should be specified", name);
TUserArgsI A = fUserAttributes.back().find(key);
diff --git a/src/kits/network/libnetapi/UrlProtocol.cpp b/src/kits/network/libnetapi/UrlProtocol.cpp
index 358f641b5b..d25c19a581 100644
--- a/src/kits/network/libnetapi/UrlProtocol.cpp
+++ b/src/kits/network/libnetapi/UrlProtocol.cpp
@@ -28,9 +28,9 @@ static const char* kProtocolThreadStrStatus[B_PROT_THREAD_STATUS__END+1]
BUrlProtocol::BUrlProtocol(const BUrl& url, BUrlProtocolListener* listener,
- BUrlContext* context, BUrlResult* result, const char* threadName,
+ BUrlContext* context, BUrlResult* result, const char* threadName,
const char* protocolName)
- :
+ :
fUrl(url),
fResult(result),
fContext(context),
@@ -61,20 +61,20 @@ BUrlProtocol::Run()
"[urlProtocol=%p]!\n", this));
return fThreadId;
}
-
- fThreadId = spawn_thread(BUrlProtocol::_ThreadEntry, fThreadName,
+
+ fThreadId = spawn_thread(BUrlProtocol::_ThreadEntry, fThreadName,
B_NORMAL_PRIORITY, this);
-
+
if (fThreadId < B_OK)
return fThreadId;
-
+
status_t launchErr = resume_thread(fThreadId);
if (launchErr < B_OK) {
- PRINT(("BUrlProtocol::Run() : Failed to resume thread %ld\n",
+ PRINT(("BUrlProtocol::Run() : Failed to resume thread %ld\n",
fThreadId));
return launchErr;
}
-
+
fRunning = true;
return fThreadId;
}
@@ -101,11 +101,11 @@ BUrlProtocol::Stop()
{
if (!fRunning)
return B_ERROR;
-
+
status_t threadStatus = B_OK;
fQuit = true;
-
- wait_for_thread(fThreadId, &threadStatus);
+
+ wait_for_thread(fThreadId, &threadStatus);
return threadStatus;
}
@@ -119,7 +119,7 @@ BUrlProtocol::SetUrl(const BUrl& url)
// We should avoid to change URL while the thread is running ...
if (IsRunning())
return B_ERROR;
-
+
fUrl = url;
return B_OK;
}
@@ -130,7 +130,7 @@ BUrlProtocol::SetResult(BUrlResult* result)
{
if (IsRunning())
return B_ERROR;
-
+
fResult = result;
return B_OK;
}
@@ -138,10 +138,10 @@ BUrlProtocol::SetResult(BUrlResult* result)
status_t
BUrlProtocol::SetContext(BUrlContext* context)
-{
+{
if (IsRunning())
return B_ERROR;
-
+
fContext = context;
return B_OK;
}
@@ -152,7 +152,7 @@ BUrlProtocol::SetListener(BUrlProtocolListener* listener)
{
if (IsRunning())
return B_ERROR;
-
+
fListener = listener;
return B_OK;
}
@@ -226,23 +226,23 @@ BUrlProtocol::StatusString(status_t threadStatus) const
// #pragma mark Thread management
-
+
/*static*/ int32
BUrlProtocol::_ThreadEntry(void* arg)
{
- BUrlProtocol* urlProtocol = reinterpret_cast(arg);
+ BUrlProtocol* urlProtocol = reinterpret_cast(arg);
urlProtocol->fThreadStatus = B_PROT_RUNNING;
-
+
status_t protocolLoopExitStatus = urlProtocol->_ProtocolLoop();
-
+
urlProtocol->fRunning = false;
urlProtocol->fThreadStatus = protocolLoopExitStatus;
-
+
if (urlProtocol->fListener != NULL)
- urlProtocol->fListener->RequestCompleted(urlProtocol,
+ urlProtocol->fListener->RequestCompleted(urlProtocol,
protocolLoopExitStatus == B_PROT_SUCCESS);
-
+
return B_OK;
}
@@ -253,13 +253,13 @@ BUrlProtocol::_ProtocolLoop()
// Dummy _ProtocolLoop
while (!fQuit)
snooze(1000);
-
+
return B_PROT_SUCCESS;
}
void
-BUrlProtocol::_EmitDebug(BUrlProtocolDebugMessage type,
+BUrlProtocol::_EmitDebug(BUrlProtocolDebugMessage type,
const char* format, ...)
{
if (fListener == NULL)
@@ -267,7 +267,7 @@ BUrlProtocol::_EmitDebug(BUrlProtocolDebugMessage type,
va_list arguments;
va_start(arguments, format);
-
+
char debugMsg[256];
vsnprintf(debugMsg, 256, format, arguments);
fListener->DebugMessage(this, type, debugMsg);
@@ -275,7 +275,7 @@ BUrlProtocol::_EmitDebug(BUrlProtocolDebugMessage type,
}
-BMallocIO&
+BMallocIO&
BUrlProtocol::_ResultRawData()
{
return fResult->fRawData;
diff --git a/src/kits/network/libnetapi/UrlProtocolHttp.cpp b/src/kits/network/libnetapi/UrlProtocolHttp.cpp
index 40936492be..4b7d864df5 100644
--- a/src/kits/network/libnetapi/UrlProtocolHttp.cpp
+++ b/src/kits/network/libnetapi/UrlProtocolHttp.cpp
@@ -31,10 +31,10 @@ static const char* kHttpProtocolThreadStrStatus[
};
-BUrlProtocolHttp::BUrlProtocolHttp(BUrl& url, bool ssl,
- const char *protocolName, BUrlProtocolListener* listener,
- BUrlContext* context, BUrlResult* result)
- :
+BUrlProtocolHttp::BUrlProtocolHttp(BUrl& url, bool ssl,
+ const char* protocolName, BUrlProtocolListener* listener,
+ BUrlContext* context, BUrlResult* result)
+ :
BUrlProtocol(url, listener, context, result, "BUrlProtocol.HTTP", protocolName),
fSSL(ssl),
fRequestMethod(B_HTTP_GET),
@@ -45,7 +45,6 @@ BUrlProtocolHttp::BUrlProtocolHttp(BUrl& url, bool ssl,
fSocket = new BSecureSocket();
else
fSocket = new BSocket();
-
}
@@ -59,67 +58,67 @@ status_t
BUrlProtocolHttp::SetOption(uint32 name, void* value)
{
BUrlProtocolOption option(value);
-
+
switch (name) {
case B_HTTPOPT_METHOD:
fRequestMethod = option.Int8();
break;
-
+
case B_HTTPOPT_FOLLOWLOCATION:
fOptFollowLocation = option.Bool();
break;
-
+
case B_HTTPOPT_MAXREDIRS:
fOptMaxRedirs = option.Int8();
break;
-
+
case B_HTTPOPT_REFERER:
fOptReferer = option.String();
break;
-
+
case B_HTTPOPT_USERAGENT:
fOptUserAgent = option.String();
break;
-
+
case B_HTTPOPT_HEADERS:
fOptHeaders = reinterpret_cast(option.Pointer());
break;
-
+
case B_HTTPOPT_DISCARD_DATA:
fOptDiscardData = option.Bool();
break;
-
+
case B_HTTPOPT_DISABLE_LISTENER:
fOptDisableListener = option.Bool();
break;
-
+
case B_HTTPOPT_AUTOREFERER:
fOptAutoReferer = option.Bool();
break;
-
+
case B_HTTPOPT_POSTFIELDS:
fOptPostFields = reinterpret_cast(option.Pointer());
-
+
if (fOptPostFields != NULL)
fRequestMethod = B_HTTP_POST;
break;
-
+
case B_HTTPOPT_INPUTDATA:
fOptInputData = reinterpret_cast(option.Pointer());
break;
-
+
case B_HTTPOPT_AUTHUSERNAME:
fOptUsername = option.String();
break;
-
+
case B_HTTPOPT_AUTHPASSWORD:
fOptPassword = option.String();
break;
-
+
default:
return B_ERROR;
}
-
+
return B_OK;
}
@@ -177,7 +176,7 @@ BUrlProtocolHttp::StatusCodeClass(int16 code)
return B_HTTP_STATUS_CLASS_CLIENT_ERROR;
else if (BUrlProtocolHttp::IsServerErrorStatusCode(code))
return B_HTTP_STATUS_CLASS_SERVER_ERROR;
-
+
return B_HTTP_STATUS_CLASS_INVALID;
}
@@ -190,11 +189,11 @@ BUrlProtocolHttp::StatusString(status_t threadStatus) const
else if (threadStatus >= B_PROT_HTTP_THREAD_STATUS__END)
return BUrlProtocol::StatusString(-1);
else
- return kHttpProtocolThreadStrStatus[threadStatus
+ return kHttpProtocolThreadStrStatus[threadStatus
- B_PROT_THREAD_STATUS__END];
}
-
+
void
BUrlProtocolHttp::_ResetOptions()
{
@@ -204,7 +203,7 @@ BUrlProtocolHttp::_ResetOptions()
fOptUserAgent = "Services Kit (Haiku)";
fOptUsername = "";
fOptPassword = "";
- fOptAuthMethods = B_HTTP_AUTHENTICATION_BASIC | B_HTTP_AUTHENTICATION_DIGEST
+ fOptAuthMethods = B_HTTP_AUTHENTICATION_BASIC | B_HTTP_AUTHENTICATION_DIGEST
| B_HTTP_AUTHENTICATION_IE_DIGEST;
fOptHeaders = NULL;
fOptPostFields = NULL;
@@ -217,16 +216,16 @@ BUrlProtocolHttp::_ResetOptions()
#include
status_t
BUrlProtocolHttp::_ProtocolLoop()
-{
+{
printf("UHP[%p]::{Loop} %s\n", this, fUrl.UrlString().String());
// Initialize the request redirection loop
int8 maxRedirs = fOptMaxRedirs;
bool newRequest;
-
+
do {
newRequest = false;
-
+
// Result reset
fOutputBuffer.Truncate(0, true);
fOutputHeaders.Clear();
@@ -234,61 +233,61 @@ BUrlProtocolHttp::_ProtocolLoop()
_ResultHeaders().Clear();
_ResultRawData().Seek(SEEK_SET, 0);
_ResultRawData().SetSize(0);
-
+
if (!_ResolveHostName()) {
_EmitDebug(B_URL_PROTOCOL_DEBUG_ERROR,
"Unable to resolve hostname, aborting.");
return B_PROT_CANT_RESOLVE_HOSTNAME;
}
-
+
_CreateRequest();
_AddHeaders();
_AddOutputBufferLine("");
-
+
status_t requestStatus = _MakeRequest();
if (requestStatus != B_PROT_SUCCESS)
return requestStatus;
-
+
// Prepare the referer for the next request if needed
if (fOptAutoReferer)
fOptReferer = fUrl.UrlString();
-
+
switch (StatusCodeClass(fResult->StatusCode())) {
case B_HTTP_STATUS_CLASS_INFORMATIONAL:
// Header 100:continue should have been
// handled in the _MakeRequest read loop
break;
-
+
case B_HTTP_STATUS_CLASS_SUCCESS:
break;
-
+
case B_HTTP_STATUS_CLASS_REDIRECTION:
// Redirection has been explicitly disabled
if (!fOptFollowLocation)
break;
-
+
// TODO: Some browsers seems to translate POST requests to
// GET when following a 302 redirection
if (fResult->StatusCode() == B_HTTP_STATUS_MOVED_PERMANENTLY) {
BString locationUrl = fHeaders["Location"];
-
+
// Absolute path
if (locationUrl[0] == '/')
fUrl.SetPath(locationUrl);
// URI
else
fUrl.SetUrlString(locationUrl);
-
+
if (--maxRedirs > 0) {
newRequest = true;
-
+
_EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT,
- "Following: %s\n",
+ "Following: %s\n",
fUrl.UrlString().String());
}
}
break;
-
+
case B_HTTP_STATUS_CLASS_CLIENT_ERROR:
switch (fResult->StatusCode()) {
case B_HTTP_STATUS_UNAUTHORIZED:
@@ -296,7 +295,7 @@ BUrlProtocolHttp::_ProtocolLoop()
newRequest = false;
break;
}
-
+
newRequest = false;
if (fOptUsername.Length() > 0
&& fAuthentication.Initialize(fHeaders["WWW-Authenticate"])
@@ -308,21 +307,20 @@ BUrlProtocolHttp::_ProtocolLoop()
break;
}
break;
-
+
case B_HTTP_STATUS_CLASS_SERVER_ERROR:
break;
-
+
default:
case B_HTTP_STATUS_CLASS_INVALID:
break;
}
} while (newRequest);
-
+
_EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT,
- "%ld headers and %ld bytes of data remaining",
- fHeaders.CountHeaders(),
- fInputBuffer.Size());
-
+ "%ld headers and %ld bytes of data remaining",
+ fHeaders.CountHeaders(), fInputBuffer.Size());
+
if (fResult->StatusCode() == 404)
return B_PROT_HTTP_NOT_FOUND;
@@ -335,27 +333,23 @@ BUrlProtocolHttp::_ResolveHostName()
{
_EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Resolving %s",
fUrl.UrlString().String());
-
+
if (fUrl.HasPort())
fRemoteAddr = BNetworkAddress(fUrl.Host(), fUrl.Port());
else {
- if (fSSL)
- fRemoteAddr = BNetworkAddress(fUrl.Host(), 443);
- else
- fRemoteAddr = BNetworkAddress(fUrl.Host(), 80);
+ fRemoteAddr = BNetworkAddress(fUrl.Host(), fSSL ? 443 : 80);
}
-
+
if (fRemoteAddr.InitCheck() != B_OK)
return false;
-
+
//! ProtocolHook:HostnameResolved
if (fListener != NULL)
- fListener->HostnameResolved(this,
- const_cast(fRemoteAddr.ToString().String()));
-
- _EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Hostname resolved to: %s",
- fRemoteAddr.ToString().String());
-
+ fListener->HostnameResolved(this, fRemoteAddr.ToString().String());
+
+ _EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Hostname resolved to: %s",
+ fRemoteAddr.ToString().String());
+
return true;
}
@@ -363,58 +357,58 @@ BUrlProtocolHttp::_ResolveHostName()
status_t
BUrlProtocolHttp::_MakeRequest()
{
- _EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Connection to %s.",
+ _EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Connection to %s.",
fUrl.Authority().String());
status_t connectError = fSocket->Connect(fRemoteAddr);
-
+
if (connectError != B_OK) {
_EmitDebug(B_URL_PROTOCOL_DEBUG_ERROR, "Socket connection error.");
return B_PROT_CONNECTION_FAILED;
}
-
+
//! ProtocolHook:ConnectionOpened
if (fListener != NULL)
fListener->ConnectionOpened(this);
-
+
_EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Connection opened.");
-
+
_EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Sending request (size=%d)",
fOutputBuffer.Length());
fSocket->Write(fOutputBuffer.String(), fOutputBuffer.Length());
fOutputBuffer.Truncate(0);
_EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Request sent.");
-
+
if (fRequestMethod == B_HTTP_POST && fOptPostFields != NULL) {
if (fOptPostFields->GetFormType() != B_HTTP_FORM_MULTIPART) {
fOutputBuffer = fOptPostFields->RawData();
- _EmitDebug(B_URL_PROTOCOL_DEBUG_TRANSFER_OUT,
+ _EmitDebug(B_URL_PROTOCOL_DEBUG_TRANSFER_OUT,
fOutputBuffer.String());
fSocket->Write(fOutputBuffer.String(), fOutputBuffer.Length());
} else {
for (BHttpForm::Iterator it = fOptPostFields->GetIterator();
const BHttpFormData* currentField = it.Next();
) {
- _EmitDebug(B_URL_PROTOCOL_DEBUG_TRANSFER_OUT,
+ _EmitDebug(B_URL_PROTOCOL_DEBUG_TRANSFER_OUT,
it.MultipartHeader().String());
- fSocket->Write(it.MultipartHeader().String(),
+ fSocket->Write(it.MultipartHeader().String(),
it.MultipartHeader().Length());
-
+
switch (currentField->Type()) {
case B_HTTPFORM_UNKNOWN:
ASSERT(0);
break;
-
+
case B_HTTPFORM_STRING:
- fSocket->Write(currentField->String().String(),
+ fSocket->Write(currentField->String().String(),
currentField->String().Length());
break;
-
+
case B_HTTPFORM_FILE:
{
- BFile upFile(currentField->File().Path(),
+ BFile upFile(currentField->File().Path(),
B_READ_ONLY);
char readBuffer[1024];
- ssize_t readSize;
+ ssize_t readSize;
readSize = upFile.Read(readBuffer, 1024);
while (readSize > 0) {
@@ -423,45 +417,45 @@ BUrlProtocolHttp::_MakeRequest()
}
}
break;
-
+
case B_HTTPFORM_BUFFER:
- fSocket->Write(currentField->Buffer(),
+ fSocket->Write(currentField->Buffer(),
currentField->BufferSize());
break;
}
-
+
fSocket->Write("\r\n", 2);
}
-
- fSocket->Write(fOptPostFields->GetMultipartFooter().String(),
+
+ fSocket->Write(fOptPostFields->GetMultipartFooter().String(),
fOptPostFields->GetMultipartFooter().Length());
}
- } else if ((fRequestMethod == B_HTTP_POST || fRequestMethod == B_HTTP_PUT)
+ } else if ((fRequestMethod == B_HTTP_POST || fRequestMethod == B_HTTP_PUT)
&& fOptInputData != NULL) {
char outputTempBuffer[1024];
ssize_t read = 0;
-
+
while (read != -1) {
read = fOptInputData->Read(outputTempBuffer, 1024);
-
+
if (read > 0) {
char hexSize[16];
size_t hexLength = sprintf(hexSize, "%ld", read);
-
+
fSocket->Write(hexSize, hexLength);
fSocket->Write("\r\n", 2);
fSocket->Write(outputTempBuffer, read);
fSocket->Write("\r\n", 2);
}
}
-
+
fSocket->Write("0\r\n\r\n", 5);
}
fOutputBuffer.Truncate(0, true);
-
+
fStatusReceived = false;
fHeadersReceived = false;
-
+
// Receive loop
bool receiveEnd = false;
bool parseEnd = false;
@@ -473,38 +467,38 @@ BUrlProtocolHttp::_MakeRequest()
ssize_t bytesTotal = 0;
char* inputTempBuffer = NULL;
fQuit = false;
-
+
while (!fQuit && !(receiveEnd && parseEnd)) {
if (!receiveEnd) {
fSocket->WaitForReadable();
BNetBuffer chunk(receiveBufferSize);
bytesRead = fSocket->Read(chunk.Data(), receiveBufferSize);
-
+
if (bytesRead < 0) {
readError = true;
fQuit = true;
- continue;
+ continue;
} else if (bytesRead == 0)
receiveEnd = true;
-
+
fInputBuffer.AppendData(chunk.Data(), bytesRead);
}
else
bytesRead = 0;
-
+
if (!fStatusReceived) {
_ParseStatus();
-
+
//! ProtocolHook:ResponseStarted
if (fStatusReceived && fListener != NULL)
fListener->ResponseStarted(this);
} else if (!fHeadersReceived) {
_ParseHeaders();
-
+
if (fHeadersReceived) {
receiveBufferSize = kHttpProtocolReceiveBufferSize;
_ResultHeaders() = fHeaders;
-
+
//! ProtocolHook:HeadersReceived
if (fListener != NULL)
fListener->HeadersReceived(this);
@@ -516,10 +510,10 @@ BUrlProtocolHttp::_MakeRequest()
}
}
}
-
+
if (BString(fHeaders["Transfer-Encoding"]) == "chunked")
readByChunks = true;
-
+
int32 index = fHeaders.HasHeader("Content-Length");
if (index != B_ERROR)
bytesTotal = atoi(fHeaders.HeaderAt(index).Value());
@@ -531,7 +525,7 @@ BUrlProtocolHttp::_MakeRequest()
// chunk in buffer before handling it
if (readByChunks) {
_CopyChunkInBuffer(&inputTempBuffer, &bytesRead);
-
+
// A chunk of 0 bytes indicates the end of the chunked transfer
if (bytesRead == 0) {
receiveEnd = true;
@@ -539,50 +533,50 @@ BUrlProtocolHttp::_MakeRequest()
}
else {
bytesRead = fInputBuffer.Size();
-
+
if (bytesRead > 0) {
inputTempBuffer = new char[bytesRead];
fInputBuffer.RemoveData(inputTempBuffer, bytesRead);
}
}
-
+
if (bytesRead > 0) {
bytesReceived += bytesRead;
- _EmitDebug(B_URL_PROTOCOL_DEBUG_TRANSFER_IN, "%d bytes",
+ _EmitDebug(B_URL_PROTOCOL_DEBUG_TRANSFER_IN, "%d bytes",
bytesRead);
-
+
if (fListener != NULL) {
fListener->DataReceived(this, inputTempBuffer, bytesRead);
- fListener->DownloadProgress(this, bytesReceived,
+ fListener->DownloadProgress(this, bytesReceived,
bytesTotal);
}
-
- ssize_t dataWrite = _ResultRawData().Write(inputTempBuffer,
+
+ ssize_t dataWrite = _ResultRawData().Write(inputTempBuffer,
bytesRead);
-
+
if (dataWrite != bytesRead) {
- _EmitDebug(B_URL_PROTOCOL_DEBUG_ERROR,
- "Unable to write %dbytes of data (%d).", bytesRead,
+ _EmitDebug(B_URL_PROTOCOL_DEBUG_ERROR,
+ "Unable to write %dbytes of data (%d).", bytesRead,
dataWrite);
return B_PROT_NO_MEMORY;
}
-
+
if (bytesTotal > 0 && bytesReceived >= bytesTotal)
receiveEnd = true;
-
+
delete[] inputTempBuffer;
- }
+ }
}
-
+
parseEnd = (fInputBuffer.Size() == 0);
}
-
+
fSocket->Disconnect();
-
+
if (readError)
return B_PROT_READ_FAILED;
-
- return fQuit?B_PROT_ABORTED:B_PROT_SUCCESS;
+
+ return fQuit ? B_PROT_ABORTED : B_PROT_SUCCESS;
}
@@ -591,23 +585,23 @@ BUrlProtocolHttp::_GetLine(BString& destString)
{
// Find a complete line in inputBuffer
uint32 characterIndex = 0;
-
- while ((characterIndex < fInputBuffer.Size())
+
+ while ((characterIndex < fInputBuffer.Size())
&& ((fInputBuffer.Data())[characterIndex] != '\n'))
characterIndex++;
-
+
if (characterIndex == fInputBuffer.Size())
return B_ERROR;
-
+
char* temporaryBuffer = new(std::nothrow) char[characterIndex + 1];
fInputBuffer.RemoveData(temporaryBuffer, characterIndex + 1);
-
+
// Strip end-of-line character(s)
if (temporaryBuffer[characterIndex-1] == '\r')
destString.SetTo(temporaryBuffer, characterIndex - 1);
else
- destString.SetTo(temporaryBuffer, characterIndex);
-
+ destString.SetTo(temporaryBuffer, characterIndex);
+
delete[] temporaryBuffer;
return B_OK;
}
@@ -624,19 +618,19 @@ BUrlProtocolHttp::_ParseStatus()
BString statusLine;
if (_GetLine(statusLine) == B_ERROR)
return;
-
+
if (statusLine.CountChars() < 12)
return;
-
+
fStatusReceived = true;
-
+
BString statusCodeStr;
BString statusText;
statusLine.CopyInto(statusCodeStr, 9, 3);
_SetResultStatusCode(atoi(statusCodeStr.String()));
-
+
statusLine.CopyInto(_ResultStatusText(), 13, statusLine.Length() - 13);
-
+
_EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Status line received: Code %d (%s)",
atoi(statusCodeStr.String()), _ResultStatusText().String());
}
@@ -648,14 +642,14 @@ BUrlProtocolHttp::_ParseHeaders()
BString currentHeader;
if (_GetLine(currentHeader) == B_ERROR)
return;
-
+
// Empty line
if (currentHeader.Length() == 0) {
fHeadersReceived = true;
return;
}
-
- _EmitDebug(B_URL_PROTOCOL_DEBUG_HEADER_IN, "%s", currentHeader.String());
+
+ _EmitDebug(B_URL_PROTOCOL_DEBUG_HEADER_IN, "%s", currentHeader.String());
fHeaders.AddHeader(currentHeader.String());
}
@@ -665,7 +659,7 @@ BUrlProtocolHttp::_CopyChunkInBuffer(char** buffer, ssize_t* bytesReceived)
{
static ssize_t chunkSize = -1;
BString chunkHeader;
-
+
if (chunkSize >= 0) {
if ((ssize_t)fInputBuffer.Size() >= chunkSize + 2) {
// 2 more bytes to handle the closing CR+LF
@@ -684,22 +678,22 @@ BUrlProtocolHttp::_CopyChunkInBuffer(char** buffer, ssize_t* bytesReceived)
*bytesReceived = -1;
return;
}
-
+
// Format of a chunk header:
// [; optional data]
int32 semiColonIndex = chunkHeader.FindFirst(";", 0);
-
+
// Cut-off optional data if present
if (semiColonIndex != -1)
- chunkHeader.Remove(semiColonIndex,
+ chunkHeader.Remove(semiColonIndex,
chunkHeader.Length() - semiColonIndex);
-
- chunkSize = strtol(chunkHeader.String(), NULL, 16);
+
+ chunkSize = strtol(chunkHeader.String(), NULL, 16);
PRINT(("BHP[%p] Chunk %s=%ld\n", this, chunkHeader.String(), chunkSize));
if (chunkSize == 0) {
fContentReceived = true;
}
-
+
*bytesReceived = -1;
*buffer = NULL;
}
@@ -710,46 +704,46 @@ void
BUrlProtocolHttp::_CreateRequest()
{
BString request;
-
- switch (fRequestMethod) {
+
+ switch (fRequestMethod) {
case B_HTTP_POST:
request << "POST";
break;
-
+
case B_HTTP_PUT:
request << "PUT";
break;
-
+
default:
case B_HTTP_GET:
request << "GET";
break;
}
-
+
if (Url().HasPath())
request << ' ' << Url().Path();
else
request << " /";
-
+
if (Url().HasRequest())
request << '?' << Url().Request();
-
+
if (Url().HasFragment())
request << '#' << Url().Fragment();
-
+
request << ' ';
-
+
switch (fHttpVersion) {
case B_HTTP_11:
request << "HTTP/1.1";
break;
-
+
default:
case B_HTTP_10:
request << "HTTP/1.0";
break;
}
-
+
_AddOutputBufferLine(request.String());
}
@@ -760,93 +754,77 @@ BUrlProtocolHttp::_AddHeaders()
// HTTP 1.1 additional headers
if (fHttpVersion == B_HTTP_11) {
fOutputHeaders.AddHeader("Host", Url().Host());
-
+
fOutputHeaders.AddHeader("Accept", "*/*");
fOutputHeaders.AddHeader("Accept-Encoding", "chunked");
- // Allow the remote server to send dynamic content by chunks
+ // Allow the remote server to send dynamic content by chunks
// rather than waiting for the full content to be generated and
// sending us data.
-
+
fOutputHeaders.AddHeader("Connection", "close");
- // Let the remote server close the connection after response since
+ // Let the remote server close the connection after response since
// we don't handle multiple request on a single connection
}
// Classic HTTP headers
if (fOptUserAgent.CountChars() > 0)
fOutputHeaders.AddHeader("User-Agent", fOptUserAgent.String());
-
+
if (fOptReferer.CountChars() > 0)
fOutputHeaders.AddHeader("Referer", fOptReferer.String());
-
+
// Authentication
if (fAuthentication.Method() != B_HTTP_AUTHENTICATION_NONE) {
BString request;
- switch (fRequestMethod) {
+ switch (fRequestMethod) {
case B_HTTP_POST:
request = "POST";
break;
-
+
case B_HTTP_PUT:
request = "PUT";
break;
-
+
default:
case B_HTTP_GET:
request = "GET";
break;
}
-
- fOutputHeaders.AddHeader("Authorization",
+
+ fOutputHeaders.AddHeader("Authorization",
fAuthentication.Authorization(fUrl, request));
}
-
+
// Required headers for POST data
if (fOptPostFields != NULL && fRequestMethod == B_HTTP_POST) {
BString contentType;
-
+
switch (fOptPostFields->GetFormType()) {
case B_HTTP_FORM_MULTIPART:
contentType << "multipart/form-data; boundary="
<< fOptPostFields->GetMultipartBoundary() << "";
break;
-
+
case B_HTTP_FORM_URL_ENCODED:
contentType << "application/x-www-form-urlencoded";
break;
}
-
+
fOutputHeaders.AddHeader("Content-Type", contentType);
- fOutputHeaders.AddHeader("Content-Length",
+ fOutputHeaders.AddHeader("Content-Length",
fOptPostFields->ContentLength());
- } else if (fOptInputData != NULL
+ } else if (fOptInputData != NULL
&& (fRequestMethod == B_HTTP_POST || fRequestMethod == B_HTTP_PUT))
fOutputHeaders.AddHeader("Transfer-Encoding", "chunked");
-
- // Request headers
- for (int32 headerIndex = 0;
- headerIndex < fRequestHeaders.CountHeaders();
- headerIndex++) {
- BHttpHeader& optHeader = fRequestHeaders[headerIndex];
- int32 replaceIndex = fOutputHeaders.HasHeader(optHeader.Name());
-
- // Add or replace the current option header to the
- // output header list
- if (replaceIndex == -1)
- fOutputHeaders.AddHeader(optHeader.Name(), optHeader.Value());
- else
- fOutputHeaders[replaceIndex].SetValue(optHeader.Value());
- }
-
+
// Optional headers specified by the user
- if (fOptHeaders != NULL) {
- for (int32 headerIndex = 0;
- headerIndex < fOptHeaders->CountHeaders();
- headerIndex++) {
+ if (fOptHeaders != NULL) {
+ for (int32 headerIndex = 0; headerIndex < fOptHeaders->CountHeaders();
+ headerIndex++) {
BHttpHeader& optHeader = (*fOptHeaders)[headerIndex];
int32 replaceIndex = fOutputHeaders.HasHeader(optHeader.Name());
-
- // Add or replace the current option header to the
+
+ // Add or replace the current option header to the
// output header list
if (replaceIndex == -1)
fOutputHeaders.AddHeader(optHeader.Name(), optHeader.Value());
@@ -854,22 +832,20 @@ BUrlProtocolHttp::_AddHeaders()
fOutputHeaders[replaceIndex].SetValue(optHeader.Value());
}
}
-
+
// Context cookies
if (fOptSetCookies && (fContext != NULL)) {
BNetworkCookie* cookie;
-
- for (BNetworkCookieJar::UrlIterator
- it(fContext->GetCookieJar().GetUrlIterator(fUrl));
- (cookie = it.Next()) != NULL;
- )
- fOutputHeaders.AddHeader("Cookie", cookie->RawCookie(false));
+
+ for (BNetworkCookieJar::UrlIterator it
+ = fContext->GetCookieJar().GetUrlIterator(fUrl);
+ (cookie = it.Next()) != NULL;)
+ fOutputHeaders.AddHeader("Cookie", cookie->RawCookie(false));
}
-
+
// Write output headers to output stream
- for (int32 headerIndex = 0;
- headerIndex < fOutputHeaders.CountHeaders();
- headerIndex++)
+ for (int32 headerIndex = 0; headerIndex < fOutputHeaders.CountHeaders();
+ headerIndex++)
_AddOutputBufferLine(fOutputHeaders.HeaderAt(headerIndex).Header());
}
diff --git a/src/kits/network/libnetapi/UrlRequest.cpp b/src/kits/network/libnetapi/UrlRequest.cpp
index 975cb4804f..4b30359994 100644
--- a/src/kits/network/libnetapi/UrlRequest.cpp
+++ b/src/kits/network/libnetapi/UrlRequest.cpp
@@ -13,27 +13,15 @@
#include
-BUrlRequest::BUrlRequest(const BUrl& url, BUrlProtocolListener* listener)
- :
+BUrlRequest::BUrlRequest(const BUrl& url, BUrlProtocolListener* listener,
+ BUrlContext* context)
+ :
fListener(listener),
fUrlProtocol(NULL),
fResult(url),
- fContext(),
+ fContext(context),
fUrl(),
- fReady(false)
-{
- SetUrl(url);
-}
-
-
-BUrlRequest::BUrlRequest(const BUrl& url)
- :
- fListener(NULL),
- fUrlProtocol(NULL),
- fResult(url),
- fContext(),
- fUrl(),
- fReady(false)
+ fInitStatus(B_ERROR)
{
SetUrl(url);
}
@@ -46,12 +34,18 @@ BUrlRequest::BUrlRequest(const BUrlRequest& other)
fResult(other.fUrl),
fContext(),
fUrl(),
- fReady(false)
+ fInitStatus(B_ERROR)
{
*this = other;
}
+BUrlRequest::~BUrlRequest()
+{
+ if (fUrlProtocol != NULL)
+ delete fUrlProtocol;
+}
+
// #pragma mark Request parameters modification
@@ -60,16 +54,14 @@ BUrlRequest::SetUrl(const BUrl& url)
{
fUrl = url;
fResult.SetUrl(url);
-
- if (fUrlProtocol != NULL && url.Protocol() == fUrl.Protocol())
+
+ if (fUrlProtocol != NULL && url.Protocol() == fUrl.Protocol()) {
fUrlProtocol->SetUrl(url);
- else {
- status_t err = Identify();
- if (err != B_OK)
- return err;
+ return B_OK;
}
-
- return B_OK;
+
+ fInitStatus = _SetupProtocol();
+ return fInitStatus;
}
@@ -84,7 +76,7 @@ void
BUrlRequest::SetProtocolListener(BUrlProtocolListener* listener)
{
fListener = listener;
-
+
if (fUrlProtocol != NULL)
fUrlProtocol->SetListener(listener);
}
@@ -95,7 +87,7 @@ BUrlRequest::SetProtocolOption(int32 option, void* value)
{
if (fUrlProtocol == NULL)
return false;
-
+
fUrlProtocol->SetOption(option, value);
return true;
}
@@ -129,44 +121,18 @@ BUrlRequest::Url()
status_t
-BUrlRequest::Identify()
-{
- // TODO: instanciate the correct BUrlProtocol w/ the services roster
- delete fUrlProtocol;
- fUrlProtocol = NULL;
-
- if (fUrl.Protocol() == "http") {
- fUrlProtocol = new(std::nothrow) BUrlProtocolHttp(fUrl, false, "HTTP",
- fListener, fContext,
- &fResult);
- fReady = true;
- return B_OK;
- } else if (fUrl.Protocol() == "https") {
- fUrlProtocol = new(std::nothrow) BUrlProtocolHttp(fUrl, true, "HTTPS",
- fListener, fContext,
- &fResult);
- fReady = true;
- return B_OK;
- }
-
- fReady = false;
- return B_NO_HANDLER_FOR_PROTOCOL;
-}
-
-
-status_t
-BUrlRequest::Perform()
+BUrlRequest::Start()
{
if (fUrlProtocol == NULL) {
PRINT(("BUrlRequest::Perform() : Oops, no BUrlProtocol defined!\n"));
return B_ERROR;
}
-
+
thread_id protocolThread = fUrlProtocol->Run();
-
+
if (protocolThread < B_OK)
return protocolThread;
-
+
return B_OK;
}
@@ -176,7 +142,7 @@ BUrlRequest::Pause()
{
if (fUrlProtocol == NULL)
return B_ERROR;
-
+
return fUrlProtocol->Pause();
}
@@ -186,7 +152,7 @@ BUrlRequest::Resume()
{
if (fUrlProtocol == NULL)
return B_ERROR;
-
+
return fUrlProtocol->Resume();
}
@@ -196,11 +162,11 @@ BUrlRequest::Abort()
{
if (fUrlProtocol == NULL)
return B_ERROR;
-
+
status_t returnCode = fUrlProtocol->Stop();
delete fUrlProtocol;
fUrlProtocol = NULL;
-
+
return returnCode;
}
@@ -208,10 +174,10 @@ BUrlRequest::Abort()
// #pragma mark Request informations
-bool
+status_t
BUrlRequest::InitCheck() const
{
- return fReady;
+ return fInitStatus;
}
@@ -220,7 +186,7 @@ BUrlRequest::IsRunning() const
{
if (fUrlProtocol == NULL)
return false;
-
+
return fUrlProtocol->IsRunning();
}
@@ -230,7 +196,7 @@ BUrlRequest::Status() const
{
if (fUrlProtocol == NULL)
return B_ERROR;
-
+
return fUrlProtocol->Status();
}
@@ -248,6 +214,29 @@ BUrlRequest::operator=(const BUrlRequest& other)
fContext = other.fContext;
fResult = BUrlResult(other.fUrl);
SetUrl(other.fUrl);
-
+
return *this;
}
+
+
+status_t
+BUrlRequest::_SetupProtocol()
+{
+ // TODO: instanciate the correct BUrlProtocol w/ the services roster
+ delete fUrlProtocol;
+ fUrlProtocol = NULL;
+
+ if (fUrl.Protocol() == "http")
+ fUrlProtocol = new(std::nothrow) BUrlProtocolHttp(fUrl, false, "HTTP",
+ fListener, fContext, &fResult);
+ else if (fUrl.Protocol() == "https")
+ fUrlProtocol = new(std::nothrow) BUrlProtocolHttp(fUrl, true, "HTTPS",
+ fListener, fContext, &fResult);
+ else
+ return B_NO_HANDLER_FOR_PROTOCOL;
+
+ if (fUrlProtocol == NULL)
+ return B_NO_MEMORY;
+
+ return B_OK;
+}
diff --git a/src/kits/network/libnetapi/UrlSynchronousRequest.cpp b/src/kits/network/libnetapi/UrlSynchronousRequest.cpp
index ae95424f95..2e819f4add 100644
--- a/src/kits/network/libnetapi/UrlSynchronousRequest.cpp
+++ b/src/kits/network/libnetapi/UrlSynchronousRequest.cpp
@@ -14,7 +14,7 @@
BUrlSynchronousRequest::BUrlSynchronousRequest(BUrl& url)
- :
+ :
BUrlRequest(url, this),
fRequestComplete(false)
{
@@ -26,8 +26,8 @@ BUrlSynchronousRequest::Perform()
{
SetProtocolListener(this);
fRequestComplete = false;
-
- return BUrlRequest::Perform();
+
+ return Start();
}
@@ -36,7 +36,7 @@ BUrlSynchronousRequest::WaitUntilCompletion()
{
while (!fRequestComplete)
snooze(10000);
-
+
return B_OK;
}
@@ -70,7 +70,7 @@ BUrlSynchronousRequest::HeadersReceived(BUrlProtocol*)
void
-BUrlSynchronousRequest::DataReceived(BUrlProtocol*, const char*,
+BUrlSynchronousRequest::DataReceived(BUrlProtocol*, const char*,
ssize_t size)
{
PRINT(("SynchronousRequest::DataReceived(%zd)\n", size));
@@ -78,7 +78,7 @@ BUrlSynchronousRequest::DataReceived(BUrlProtocol*, const char*,
void
-BUrlSynchronousRequest::DownloadProgress(BUrlProtocol*,
+BUrlSynchronousRequest::DownloadProgress(BUrlProtocol*,
ssize_t bytesReceived, ssize_t bytesTotal)
{
PRINT(("SynchronousRequest::DownloadProgress(%zd, %zd)\n", bytesReceived,
@@ -98,7 +98,7 @@ BUrlSynchronousRequest::UploadProgress(BUrlProtocol*, ssize_t bytesSent,
void
BUrlSynchronousRequest::RequestCompleted(BUrlProtocol* caller, bool success)
{
- PRINT(("SynchronousRequest::RequestCompleted(%s) : %s\n", (success?"true":"false"),
+ PRINT(("SynchronousRequest::RequestCompleted(%s) : %s\n", (success?"true":"false"),
caller->StatusString(caller->Status())));
fRequestComplete = true;
}
diff --git a/src/kits/shared/AboutWindow.cpp b/src/kits/shared/AboutWindow.cpp
index 8e4d103d89..350968d190 100644
--- a/src/kits/shared/AboutWindow.cpp
+++ b/src/kits/shared/AboutWindow.cpp
@@ -20,7 +20,10 @@
#include
#include
#include
+#include
#include
+#include
+#include
#include
#include
#include
@@ -42,6 +45,46 @@ using BPrivate::gSystemCatalog;
#define B_TRANSLATION_CONTEXT "AboutWindow"
+class EscapeFilter : public BMessageFilter {
+ public:
+ EscapeFilter(BWindow* target)
+ :
+ BMessageFilter(B_ANY_DELIVERY, B_ANY_SOURCE),
+ fTarget(target)
+ {
+ }
+ virtual ~EscapeFilter()
+ {
+ }
+ virtual filter_result
+ Filter(BMessage* message, BHandler** target)
+ {
+ filter_result result = B_DISPATCH_MESSAGE;
+ switch (message->what) {
+ case B_KEY_DOWN:
+ case B_UNMAPPED_KEY_DOWN: {
+ uint32 key;
+ if (message->FindInt32("raw_char",
+ (int32*)&key) >= B_OK) {
+ if (key == B_ESCAPE) {
+ result = B_SKIP_MESSAGE;
+ fTarget->PostMessage(
+ B_QUIT_REQUESTED);
+ }
+ }
+ break;
+ }
+ default:
+ break;
+ }
+
+ return result;
+ }
+ private:
+ BWindow* fTarget;
+};
+
+
class StripeView : public BView {
public:
StripeView(BBitmap* icon);
@@ -49,6 +92,9 @@ class StripeView : public BView {
virtual void Draw(BRect updateRect);
+ BBitmap* Icon() const { return fIcon; };
+ void SetIcon(BBitmap* icon);
+
private:
BBitmap* fIcon;
};
@@ -62,14 +108,24 @@ class AboutView : public BGroupView {
BTextView* InfoView() const { return fInfoView; };
+ BBitmap* Icon();
+ status_t SetIcon(BBitmap* icon);
+
+ const char* Name();
+ status_t SetName(const char* name);
+
+ const char* Version();
+ status_t SetVersion(const char* version);
+
protected:
- const char* AppVersion(const char* signature);
- BBitmap* AppIcon(const char* signature);
+ const char* _GetVersionFromSignature(const char* signature);
+ BBitmap* _GetIconFromSignature(const char* signature);
private:
BStringView* fNameView;
BStringView* fVersionView;
BTextView* fInfoView;
+ StripeView* fStripeView;
};
@@ -81,13 +137,14 @@ StripeView::StripeView(BBitmap* icon)
BView("StripeView", B_WILL_DRAW),
fIcon(icon)
{
+ SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+
float width = 0.0f;
if (icon != NULL)
width += icon->Bounds().Width() + 32.0f;
SetExplicitMinSize(BSize(width, B_SIZE_UNSET));
SetExplicitPreferredSize(BSize(width, B_SIZE_UNLIMITED));
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
}
@@ -116,7 +173,24 @@ StripeView::Draw(BRect updateRect)
}
-// #pragma mark -
+void
+StripeView::SetIcon(BBitmap* icon)
+{
+ if (fIcon != NULL)
+ delete fIcon;
+
+ fIcon = icon;
+
+ float width = 0.0f;
+ if (icon != NULL)
+ width += icon->Bounds().Width() + 32.0f;
+
+ SetExplicitMinSize(BSize(width, B_SIZE_UNSET));
+ SetExplicitPreferredSize(BSize(width, B_SIZE_UNLIMITED));
+};
+
+
+// #pragma mark - AboutView
AboutView::AboutView(const char* appName, const char* signature)
@@ -131,7 +205,8 @@ AboutView::AboutView(const char* appName, const char* signature)
fNameView->SetFont(&font, B_FONT_FAMILY_AND_STYLE | B_FONT_SIZE
| B_FONT_FLAGS);
- fVersionView = new BStringView("version", AppVersion(signature));
+ fVersionView = new BStringView("version",
+ _GetVersionFromSignature(signature));
fInfoView = new BTextView("info", B_WILL_DRAW);
fInfoView->SetExplicitMinSize(BSize(210.0, 160.0));
@@ -145,10 +220,12 @@ AboutView::AboutView(const char* appName, const char* signature)
"infoViewScroller", fInfoView, B_WILL_DRAW | B_FRAME_EVENTS,
false, true, B_PLAIN_BORDER);
+ fStripeView = new StripeView(_GetIconFromSignature(signature));
+
GroupLayout()->SetSpacing(0);
BLayoutBuilder::Group<>(this)
.AddGroup(B_HORIZONTAL, 0)
- .Add(new StripeView(AppIcon(signature)))
+ .Add(fStripeView)
.AddGroup(B_VERTICAL, B_USE_SMALL_SPACING)
.SetInsets(0, B_USE_DEFAULT_SPACING,
B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING)
@@ -166,8 +243,11 @@ AboutView::~AboutView()
}
+// #pragma mark - AboutView protected methods
+
+
const char*
-AboutView::AppVersion(const char* signature)
+AboutView::_GetVersionFromSignature(const char* signature)
{
if (signature == NULL)
return NULL;
@@ -228,7 +308,7 @@ AboutView::AppVersion(const char* signature)
BBitmap*
-AboutView::AppIcon(const char* signature)
+AboutView::_GetIconFromSignature(const char* signature)
{
if (signature == NULL)
return NULL;
@@ -251,7 +331,64 @@ AboutView::AppIcon(const char* signature)
}
-// #pragma mark -
+// #pragma mark - AboutView public methods
+
+
+const char*
+AboutView::Name()
+{
+ return fNameView->Text();
+}
+
+
+status_t
+AboutView::SetName(const char* name)
+{
+ fNameView->SetText(name);
+
+ return B_OK;
+}
+
+
+const char*
+AboutView::Version()
+{
+ return fVersionView->Text();
+}
+
+
+status_t
+AboutView::SetVersion(const char* version)
+{
+ fVersionView->SetText(version);
+
+ return B_OK;
+}
+
+
+BBitmap*
+AboutView::Icon()
+{
+ if (fStripeView == NULL)
+ return NULL;
+
+ return fStripeView->Icon();
+}
+
+
+status_t
+AboutView::SetIcon(BBitmap* icon)
+{
+ if (fStripeView == NULL)
+ return B_NO_INIT;
+
+ fStripeView->SetIcon(icon);
+
+ return B_OK;
+}
+
+
+// #pragma mark - BAboutWindow
BAboutWindow::BAboutWindow(const char* appName, const char* signature)
@@ -272,6 +409,8 @@ BAboutWindow::BAboutWindow(const char* appName, const char* signature)
AddChild(fAboutView);
MoveTo(AboutPosition(Frame().Width(), Frame().Height()));
+
+ AddCommonFilter(new EscapeFilter(this));
}
@@ -283,6 +422,9 @@ BAboutWindow::~BAboutWindow()
}
+// #pragma mark - BAboutWindow virtual methods
+
+
bool
BAboutWindow::QuitRequested()
{
@@ -292,7 +434,19 @@ BAboutWindow::QuitRequested()
}
-// #pragma mark -
+void
+BAboutWindow::Show()
+{
+ if (IsHidden()) {
+ // move to current workspace
+ SetWorkspaces(B_CURRENT_WORKSPACE);
+ }
+
+ BWindow::Show();
+}
+
+
+// #pragma mark - BAboutWindow public methods
BPoint
@@ -463,3 +617,45 @@ BAboutWindow::AddExtraInfo(const char* extraInfo)
fAboutView->InfoView()->Insert(extra.String());
}
+
+
+const char*
+BAboutWindow::Name()
+{
+ return fAboutView->Name();
+}
+
+
+void
+BAboutWindow::SetName(const char* name)
+{
+ fAboutView->SetName(name);
+}
+
+
+const char*
+BAboutWindow::Version()
+{
+ return fAboutView->Version();
+}
+
+
+void
+BAboutWindow::SetVersion(const char* version)
+{
+ fAboutView->SetVersion(version);
+}
+
+
+BBitmap*
+BAboutWindow::Icon()
+{
+ return fAboutView->Icon();
+}
+
+
+void
+BAboutWindow::SetIcon(BBitmap* icon)
+{
+ fAboutView->SetIcon(icon);
+}
diff --git a/src/kits/tracker/TrackerSettingsWindow.cpp b/src/kits/tracker/TrackerSettingsWindow.cpp
index 754ae65bc3..aa9e135456 100644
--- a/src/kits/tracker/TrackerSettingsWindow.cpp
+++ b/src/kits/tracker/TrackerSettingsWindow.cpp
@@ -70,11 +70,11 @@ const uint32 kRevertButtonPressed = 'Rebp';
#undef B_TRANSLATION_CONTEXT
#define B_TRANSLATION_CONTEXT "TrackerSettingsWindow"
+
TrackerSettingsWindow::TrackerSettingsWindow()
:
BWindow(BRect(80, 80, 450, 350), B_TRANSLATE("Tracker preferences"),
B_TITLED_WINDOW, B_NOT_MINIMIZABLE | B_NOT_RESIZABLE
- | B_NO_WORKSPACE_ACTIVATION | B_NOT_ANCHORED_ON_ACTIVATE
| B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE
| B_AUTO_UPDATE_SIZE_LIMITS)
{
@@ -184,6 +184,12 @@ TrackerSettingsWindow::Show()
Unlock();
}
+
+ if (IsHidden()) {
+ // move to current workspace
+ SetWorkspaces(B_CURRENT_WORKSPACE);
+ }
+
_inherited::Show();
}