From 2b1246d968e93ad26e5d054142037c65f73d663d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 5 Jul 2005 19:20:19 +0000 Subject: [PATCH] Renamed AS_WINDOW_TITLE to AS_SET_WINDOW_TITLE. Fixed handling in ServerWindow as stippi's latest commit broke it. It's now properly done with a separate ServerWindow::SetTitle() method, that will also take care to rename the window's thread. Changed naming the window thread in the app_server to "w::". git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13461 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/app/ServerProtocol.h | 2 +- src/kits/interface/Window.cpp | 2 +- src/servers/app/ServerWindow.cpp | 44 ++++++++++++++++++++-------- src/servers/app/ServerWindow.h | 2 ++ 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/headers/private/app/ServerProtocol.h b/headers/private/app/ServerProtocol.h index c5be9d3c5f..fd190a360a 100644 --- a/headers/private/app/ServerProtocol.h +++ b/headers/private/app/ServerProtocol.h @@ -79,7 +79,7 @@ enum { AS_BEGIN_UPDATE, AS_END_UPDATE, AS_NEEDS_UPDATE, - AS_WINDOW_TITLE, + AS_SET_WINDOW_TITLE, AS_ADD_TO_SUBSET, AS_REM_FROM_SUBSET, AS_SET_ALIGNMENT, diff --git a/src/kits/interface/Window.cpp b/src/kits/interface/Window.cpp index 30ca6a75a3..17364bfcf3 100644 --- a/src/kits/interface/Window.cpp +++ b/src/kits/interface/Window.cpp @@ -1446,7 +1446,7 @@ BWindow::SetTitle(const char *title) // we notify the app_server so we can actually see the change if (Lock()) { - fLink->StartMessage(AS_WINDOW_TITLE); + fLink->StartMessage(AS_SET_WINDOW_TITLE); fLink->AttachString(fTitle); fLink->Flush(); Unlock(); diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index d8fa7b4589..617bf9acc5 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -128,9 +128,6 @@ ServerWindow::Init(BRect frame, uint32 look, uint32 feel, uint32 flags, uint32 w fLink.SetSenderPort(fClientReplyPort); fLink.SetReceiverPort(fMessagePort); -// char name[60]; -// snprintf(name, sizeof(name), "%ld: %s", fClientTeam, fTitle); - // We cannot call MakeWinBorder in the constructor, since it fWinBorder = MakeWinBorder(frame, fTitle, look, feel, flags, workspace); if (!fWinBorder) @@ -149,7 +146,7 @@ ServerWindow::Run() BAutolock locker(this); char name[B_OS_NAME_LENGTH]; - snprintf(name, sizeof(name), "w:%s", fTitle); + snprintf(name, sizeof(name), "w:%ld:%s", ClientTeam(), Title()); // Spawn our message-monitoring thread fThread = spawn_thread(_message_thread, name, B_NORMAL_PRIORITY, this); @@ -255,6 +252,34 @@ ServerWindow::Hide() } +void +ServerWindow::SetTitle(const char* newTitle) +{ + const char* oldTitle = fTitle; + + if (newTitle == NULL || !newTitle[0]) + fTitle = strdup("Unnamed Window"); + else + fTitle = strdup(newTitle); + + if (fTitle == NULL) { + fTitle = oldTitle; + return; + } + + free(const_cast<char*>(oldTitle)); + + if (Thread() >= B_OK) { + char name[B_OS_NAME_LENGTH]; + snprintf(name, sizeof(name), "w:%ld:%s", ClientTeam(), fTitle); + rename_thread(Thread(), name); + } + + if (fWinBorder != NULL) + fWinBorder->SetName(newTitle); +} + + //! Requests that the ServerWindow's BWindow quit void ServerWindow::NotifyQuitRequested() @@ -1196,20 +1221,13 @@ myRootLayer->Unlock(); break; } #endif - case AS_WINDOW_TITLE: + case AS_SET_WINDOW_TITLE: { - char* newTitle; if (link.ReadString(&newTitle) == B_OK) { - printf("ServerWindow %s: Message SetTitle(\"%s\") requested, unimplemented\n", - Title(), newTitle); - + SetTitle(newTitle); free(newTitle); } - char* title; - link.ReadString(&title); - fWinBorder->SetName(title); - free(title); break; } diff --git a/src/servers/app/ServerWindow.h b/src/servers/app/ServerWindow.h index e2e957a754..9ccb1b1a2d 100644 --- a/src/servers/app/ServerWindow.h +++ b/src/servers/app/ServerWindow.h @@ -96,6 +96,8 @@ public: // to who we belong. who do we own. our title. inline ServerApp* App() const { return fServerApp; } inline const WinBorder* GetWinBorder() const { return fWinBorder; } + + void SetTitle(const char* newTitle); inline const char* Title() const { return fTitle; } // related thread/team_id(s).