[haiku-commits] haiku: hrev50868 - in src: preferences/repositories servers/input preferences/screensaver add-ons/kernel/drivers/common

  • From: pulkomandy@xxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sun, 15 Jan 2017 12:50:51 +0100 (CET)

hrev50868 adds 4 changesets to branch 'master'
old head: fd7a786b06e5c147e6a94228f4194eee89eca683
new head: 7118f1582e04f3f43ecb501b93f18bbd078671dc
overview: 
http://cgit.haiku-os.org/haiku/log/?qt=range&q=7118f1582e04+%5Efd7a786b06e5

----------------------------------------------------------------------------

856ecc7b19a4: Repository preferences: style fixes and use BUrl
  
  Signed-off-by: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
  
  Fixes #13194

                                     [ Brian Hill <supernova@xxxxxxxxxxxx> ]

baf9ae1d472d: Input_server: fix archiving of input method replicants
  
  - Make sure the archive contains the replicant pop-up menu
  - Make sure said menu is properly re-targetted when instanciating
  
  Fixes #13138
  
  Signed-off-by: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>

                                      [ Sean Healy <jalopeura@xxxxxxxxxxx> ]

a1fdbe5bb219: usb_modeswitch.cpp: fix use after free.
  
  Signed-off-by: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
  
  Fixes #13185

                                      [ Murai Takashi <tmurai01@xxxxxxxxx> ]

7118f1582e04: ScreenSaver: redraw background of "active corner" screen in more 
cases.
  
  Fixes #10027

                             [ Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> ]

----------------------------------------------------------------------------

15 files changed, 187 insertions(+), 106 deletions(-)
.../kernel/drivers/common/usb_modeswitch.cpp     |   8 +-
src/preferences/repositories/AddRepoWindow.cpp   |  17 +--
src/preferences/repositories/AddRepoWindow.h     |   3 +-
.../repositories/RepositoriesSettings.h          |   5 +-
.../repositories/RepositoriesView.cpp            | 115 +++++++++++--------
src/preferences/repositories/RepositoriesView.h  |  26 ++---
.../repositories/RepositoriesWindow.cpp          |  26 +++--
.../repositories/RepositoriesWindow.h            |   5 +-
src/preferences/repositories/TaskLooper.cpp      |  21 +++-
src/preferences/repositories/TaskLooper.h        |   3 +-
src/preferences/repositories/TaskTimer.cpp       |  10 +-
src/preferences/repositories/TaskTimer.h         |   3 +-
.../screensaver/ScreenCornerSelector.cpp         |  22 ++--
src/servers/input/InputServerMethod.cpp          |   5 +
src/servers/input/MethodReplicant.cpp            |  24 +++-

############################################################################

Commit:      856ecc7b19a4a9942cfe3010cab9bc3524870732
URL:         http://cgit.haiku-os.org/haiku/commit/?id=856ecc7b19a4
Author:      Brian Hill <supernova@xxxxxxxxxxxx>
Date:        Mon Jan  9 00:40:01 2017 UTC
Committer:   Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
Commit-Date: Sun Jan 15 11:11:05 2017 UTC

Ticket:      https://dev.haiku-os.org/ticket/13194

Repository preferences: style fixes and use BUrl

Signed-off-by: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>

Fixes #13194

----------------------------------------------------------------------------

diff --git a/src/preferences/repositories/AddRepoWindow.cpp 
b/src/preferences/repositories/AddRepoWindow.cpp
index 1e0f325..b163ce5 100644
--- a/src/preferences/repositories/AddRepoWindow.cpp
+++ b/src/preferences/repositories/AddRepoWindow.cpp
@@ -14,6 +14,7 @@
 #include <Catalog.h>
 #include <Clipboard.h>
 #include <LayoutBuilder.h>
+#include <Url.h>
 
 #include "constants.h"
 
@@ -76,14 +77,15 @@ AddRepoWindow::MessageReceived(BMessage* message)
                                Quit();
                        break;
 
-               case ADD_BUTTON_PRESSED: {
+               case ADD_BUTTON_PRESSED:
+               {
                        BString url(fText->Text());
                        if (url != "") {
                                // URL must have a protocol
-                               if (url.FindFirst("://") == B_ERROR) {
+                               BUrl newRepoUrl(url);
+                               if (!newRepoUrl.IsValid()) {
                                        BAlert* alert = new BAlert("error",
-                                               B_TRANSLATE_COMMENT("The URL 
must start with a "
-                                                       "protocol, for example 
http:// or https://";,
+                                               B_TRANSLATE_COMMENT("This is 
not a valid URL.",
                                                        "Add URL error 
message"),
                                                kOKLabel, NULL, NULL, 
B_WIDTH_AS_USUAL, B_STOP_ALERT);
                                        alert->SetFeel(B_MODAL_APP_WINDOW_FEEL);
@@ -100,6 +102,7 @@ AddRepoWindow::MessageReceived(BMessage* message)
                        }
                        break;
                }
+               
                default:
                        BWindow::MessageReceived(message);
        }
@@ -124,10 +127,10 @@ AddRepoWindow::_GetClipboardData()
                        &stringLen);
                be_clipboard->Unlock();
 
-               // The string must contain a web protocol
+               // The string must be a valid url
                BString clipString(string, stringLen);
-               int32 ww = clipString.FindFirst("://");
-               if (ww == B_ERROR)
+               BUrl testUrl(clipString.String());
+               if (!testUrl.IsValid())
                        return B_ERROR;
                else
                        fText->SetText(clipString);
diff --git a/src/preferences/repositories/AddRepoWindow.h 
b/src/preferences/repositories/AddRepoWindow.h
index c6c1758..6c128f3 100644
--- a/src/preferences/repositories/AddRepoWindow.h
+++ b/src/preferences/repositories/AddRepoWindow.h
@@ -24,11 +24,12 @@ public:
        virtual void                    FrameResized(float newWidth, float 
newHeight);
 
 private:
+       status_t                                _GetClipboardData();
+       
        BTextControl*                   fText;
        BButton*                                fAddButton;
        BButton*                                fCancelButton;
        BMessenger                              fReplyMessenger;
-       status_t                                _GetClipboardData();
 };
 
 
diff --git a/src/preferences/repositories/RepositoriesSettings.h 
b/src/preferences/repositories/RepositoriesSettings.h
index 8ceae1f..cea7a46 100644
--- a/src/preferences/repositories/RepositoriesSettings.h
+++ b/src/preferences/repositories/RepositoriesSettings.h
@@ -29,11 +29,12 @@ public:
                                                                BStringList& 
urlList);
 
 private:
+       BMessage                                _ReadFromFile();
+       status_t                                _SaveToFile(BMessage settings);
+       
        BPath                                   fFilePath;
        BFile                                   fFile;
        status_t                                fInitStatus;
-       BMessage                                _ReadFromFile();
-       status_t                                _SaveToFile(BMessage settings);
 };
 
 
diff --git a/src/preferences/repositories/RepositoriesView.cpp 
b/src/preferences/repositories/RepositoriesView.cpp
index c1cd3cf..4e7788e 100644
--- a/src/preferences/repositories/RepositoriesView.cpp
+++ b/src/preferences/repositories/RepositoriesView.cpp
@@ -18,6 +18,7 @@
 #include <MessageRunner.h>
 #include <ScrollBar.h>
 #include <SeparatorView.h>
+#include <Url.h>
 #include <package/PackageRoster.h>
 #include <package/RepositoryConfig.h>
 
@@ -224,7 +225,8 @@ RepositoriesView::MessageReceived(BMessage* message)
 {
        switch (message->what)
        {
-               case REMOVE_REPOS: {
+               case REMOVE_REPOS:
+               {
                        RepoRow* rowItem = 
dynamic_cast<RepoRow*>(fListView->CurrentSelection());
                        if (!rowItem || !fRemoveButton->IsEnabled())
                                break;
@@ -272,11 +274,13 @@ RepositoriesView::MessageReceived(BMessage* message)
                        _SaveList();
                        break;
                }
+               
                case LIST_SELECTION_CHANGED:
                        _UpdateButtons();
                        break;
 
-               case ITEM_INVOKED: {
+               case ITEM_INVOKED:
+               {
                        // Simulates pressing whichever is the enabled button
                        if (fEnableButton->IsEnabled()) {
                                BMessage invokeMessage(ENABLE_BUTTON_PRESSED);
@@ -287,7 +291,9 @@ RepositoriesView::MessageReceived(BMessage* message)
                        }
                        break;
                }
-               case ENABLE_BUTTON_PRESSED: {
+               
+               case ENABLE_BUTTON_PRESSED:
+               {
                        BStringList names;
                        bool paramsOK = true;
                        // Check if there are multiple selections of the same 
repository,
@@ -314,12 +320,14 @@ RepositoriesView::MessageReceived(BMessage* message)
                        }
                        break;
                }
+               
                case DISABLE_BUTTON_PRESSED:
                        _AddSelectedRowsToQueue();
                        _UpdateButtons();
                        break;
 
-               case TASK_STARTED: {
+               case TASK_STARTED:
+               {
                        int16 count;
                        status_t result1 = message->FindInt16(key_count, 
&count);
                        RepoRow* rowItem;
@@ -328,7 +336,9 @@ RepositoriesView::MessageReceived(BMessage* message)
                                _TaskStarted(rowItem, count);
                        break;
                }
-               case TASK_COMPLETED_WITH_ERRORS: {
+               
+               case TASK_COMPLETED_WITH_ERRORS:
+               {
                        BString errorDetails;
                        status_t result = message->FindString(key_details, 
&errorDetails);
                        if (result == B_OK) {
@@ -350,7 +360,9 @@ RepositoriesView::MessageReceived(BMessage* message)
                        _UpdateButtons();
                        break;
                }
-               case TASK_COMPLETED: {
+               
+               case TASK_COMPLETED:
+               {
                        BString repoName = message->GetString(key_name,
                                kNewRepoDefaultName.String());
                        int16 count;
@@ -367,7 +379,9 @@ RepositoriesView::MessageReceived(BMessage* message)
                        _UpdateButtons();
                        break;
                }
-               case TASK_CANCELED: {
+               
+               case TASK_CANCELED:
+               {
                        int16 count;
                        status_t result1 = message->FindInt16(key_count, 
&count);
                        RepoRow* rowItem;
@@ -380,18 +394,21 @@ RepositoriesView::MessageReceived(BMessage* message)
                        _UpdateButtons();
                        break;
                }
+               
                case UPDATE_LIST:
                        _RefreshList();
                        _UpdateButtons();
                        break;
 
-               case STATUS_VIEW_COMPLETED_TIMEOUT: {
+               case STATUS_VIEW_COMPLETED_TIMEOUT:
+               {
                        int32 timerID;
                        status_t result = message->FindInt32(key_ID, &timerID);
                        if (result == B_OK && timerID == fLastCompletedTimerId)
                                _UpdateStatusView();
                        break;
                }
+               
                default:
                        BView::MessageReceived(message);
        }
@@ -434,8 +451,9 @@ RepositoriesView::_TaskCompleted(RepoRow* rowItem, int16 
count, BString& newName
        // Update row state and values
        rowItem->SetTaskState(STATE_NOT_IN_QUEUE);
        if (kNewRepoDefaultName.Compare(rowItem->Name()) == 0
-               && newName.Compare("") != 0)
+               && newName.Compare("") != 0) {
                rowItem->SetName(newName.String());
+       }
        _UpdateFromRepoConfig(rowItem);
 }
 
@@ -486,27 +504,33 @@ RepositoriesView::_UpdateFromRepoConfig(RepoRow* rowItem)
 void
 RepositoriesView::AddManualRepository(BString url)
 {
+       BUrl newRepoUrl(url);
+       if (!newRepoUrl.IsValid())
+               return;
+       
        BString name(kNewRepoDefaultName);
-       BString rootUrl = _GetRootUrl(url);
-       bool foundRoot = false;
+       BString newPathIdentifier = _GetPathIdentifier(newRepoUrl.Path());
+       bool foundMatchingRoot = false;
        int32 index;
        int32 listCount = fListView->CountRows();
        for (index = 0; index < listCount; index++) {
                RepoRow* repoItem = 
dynamic_cast<RepoRow*>(fListView->RowAt(index));
-               const char* urlPtr = repoItem->Url();
+               BUrl rowRepoUrl(repoItem->Url());
                // Find an already existing URL
-               if (url.ICompare(urlPtr) == 0) {
+               if (newRepoUrl == rowRepoUrl) {
                        (new BAlert("duplicate",
                                B_TRANSLATE_COMMENT("This repository URL 
already exists.",
                                        "Error message"),
                                kOKLabel))->Go(NULL);
                        return;
                }
-               // Use the same name from another repo with the same root url
-               if (foundRoot == false && rootUrl.ICompare(urlPtr,
-                               rootUrl.Length()) == 0) {
-                       foundRoot = true;
-                       name = repoItem->Name();
+               // Predict the repo name from another url with matching path 
root
+               if (!foundMatchingRoot) {
+                       BString rowPathIdentifier = 
_GetPathIdentifier(rowRepoUrl.Path());
+                        if (newPathIdentifier.ICompare(rowPathIdentifier) == 
0) {
+                               foundMatchingRoot = true;
+                               name = repoItem->Name();
+                        }
                }
        }
        RepoRow* newRepo = _AddRepo(name, url, false);
@@ -519,33 +543,28 @@ RepositoriesView::AddManualRepository(BString url)
 
 
 BString
-RepositoriesView::_GetRootUrl(BString url)
+RepositoriesView::_GetPathIdentifier(BString urlPath)
 {
-       // Find the protocol if it exists
-       int32 ww = url.FindFirst("://");
-       if (ww == B_ERROR)
-               ww = 0;
-       else
-               ww += 3;
        // Find second /
-       int32 rootEnd = url.FindFirst("/", ww + 1);
-       if (rootEnd == B_ERROR)
-               return url;
-       rootEnd = url.FindFirst("/", rootEnd + 1);
-       if (rootEnd == B_ERROR)
-               return url;
+       int32 index = urlPath.FindFirst("/");
+       if (index == B_ERROR)
+               return urlPath;
+       index = urlPath.FindFirst("/", index + 1);
+       if (index == B_ERROR)
+               return urlPath;
        else
-               return url.Truncate(rootEnd);
+               return urlPath.Truncate(index);
 }
 
 
 status_t
 RepositoriesView::_EmptyList()
 {
-       BRow* row;
-       while ((row = fListView->RowAt((int32)0, NULL)) != NULL) {
+       BRow* row = fListView->RowAt((int32)0, NULL);
+       while (row != NULL) {
                fListView->RemoveRow(row);
                delete row;
+               row = fListView->RowAt((int32)0, NULL);
        }
        return B_OK;
 }
@@ -639,27 +658,26 @@ RepositoriesView::_SaveList()
 RepoRow*
 RepositoriesView::_AddRepo(BString name, BString url, bool enabled)
 {
-       // URL must have a protocol
-       if (url.FindFirst("://") == B_ERROR)
+       // URL must be valid
+       BUrl repoUrl(url);
+       if (!repoUrl.IsValid())
                return NULL;
-       RepoRow* addedRow = NULL;
        int32 index;
        int32 listCount = fListView->CountRows();
        // Find if the repo already exists in list
        for (index = 0; index < listCount; index++) {
                RepoRow* repoItem = 
dynamic_cast<RepoRow*>(fListView->RowAt(index));
-               if (url.ICompare(repoItem->Url()) == 0) {
+               BUrl itemUrl(repoItem->Url());
+               if (repoUrl == itemUrl) {
                        // update name and enabled values
-                       if (name.Compare(repoItem->Name()) != 0)
+                       if (name != repoItem->Name())
                                repoItem->SetName(name.String());
                        repoItem->SetEnabled(enabled);
-                       addedRow = repoItem;
+                       return repoItem;
                }
        }
-       if (addedRow == NULL) {
-               addedRow = new RepoRow(name, url, enabled);
-               fListView->AddRow(addedRow);
-       }
+       RepoRow* addedRow = new RepoRow(name, url, enabled);
+       fListView->AddRow(addedRow);
        return addedRow;
 }
 
@@ -698,17 +716,18 @@ RepositoriesView::_UpdateButtons()
        RepoRow* rowItem = 
dynamic_cast<RepoRow*>(fListView->CurrentSelection());
        // At least one row is selected
        if (rowItem) {
-               bool someAreEnabled = false,
-                       someAreDisabled = false,
-                       someAreInQueue = false;
+               bool someAreEnabled = false;
+               bool someAreDisabled = false;
+               bool someAreInQueue = false;
                int32 selectedCount = 0;
                RepoRow* rowItem = 
dynamic_cast<RepoRow*>(fListView->CurrentSelection());
                while (rowItem) {
                        selectedCount++;
                        uint32 taskState = rowItem->TaskState();
                        if ( taskState == STATE_IN_QUEUE_WAITING
-                               || taskState == STATE_IN_QUEUE_RUNNING)
+                               || taskState == STATE_IN_QUEUE_RUNNING) {
                                someAreInQueue = true;
+                       }
                        if (rowItem->IsEnabled())
                                someAreEnabled = true;
                        else
diff --git a/src/preferences/repositories/RepositoriesView.h 
b/src/preferences/repositories/RepositoriesView.h
index 875b723..2bf5465 100644
--- a/src/preferences/repositories/RepositoriesView.h
+++ b/src/preferences/repositories/RepositoriesView.h
@@ -38,18 +38,6 @@ public:
        bool                                    IsTaskRunning() { return 
fRunningTaskCount > 0; }
 
 private:
-       RepositoriesSettings    fSettings;
-       RepositoriesListView*   fListView;
-       BView*                                  fStatusContainerView;
-       BStringView*                    fListStatusView;
-       TaskLooper*                             fTaskLooper;
-       bool                                    fShowCompletedStatus;
-       int                                             fRunningTaskCount, 
fLastCompletedTimerId;
-       BButton*                                fAddButton;
-       BButton*                                fRemoveButton;
-       BButton*                                fEnableButton;
-       BButton*                                fDisableButton;
-
        // Message helpers
        void                                    _AddSelectedRowsToQueue();
        void                                    _TaskStarted(RepoRow* rowItem, 
int16 count);
@@ -60,7 +48,7 @@ private:
        void                                    _UpdateFromRepoConfig(RepoRow* 
rowItem);
 
        // GUI functions
-       BString                                 _GetRootUrl(BString url);
+       BString                                 _GetPathIdentifier(BString 
urlPath);
        status_t                                _EmptyList();
        void                                    _InitList();
        void                                    _RefreshList();
@@ -70,6 +58,18 @@ private:
        void                                    _FindSiblings();
        void                                    _UpdateButtons();
        void                                    _UpdateStatusView();
+       
+       RepositoriesSettings    fSettings;
+       RepositoriesListView*   fListView;
+       BView*                                  fStatusContainerView;
+       BStringView*                    fListStatusView;
+       TaskLooper*                             fTaskLooper;
+       bool                                    fShowCompletedStatus;
+       int                                             fRunningTaskCount, 
fLastCompletedTimerId;
+       BButton*                                fAddButton;
+       BButton*                                fRemoveButton;
+       BButton*                                fEnableButton;
+       BButton*                                fDisableButton;
 };
 
 
diff --git a/src/preferences/repositories/RepositoriesWindow.cpp 
b/src/preferences/repositories/RepositoriesWindow.cpp
index 8087419..d2aad6c 100644
--- a/src/preferences/repositories/RepositoriesWindow.cpp
+++ b/src/preferences/repositories/RepositoriesWindow.cpp
@@ -43,8 +43,9 @@ RepositoriesWindow::RepositoriesWindow()
        BScreen screen;
        BRect screenFrame = screen.Frame();
        if (screenFrame.right < frame.right || screenFrame.left > frame.left
-               || screenFrame.top > frame.top || screenFrame.bottom < 
frame.bottom)
+               || screenFrame.top > frame.top || screenFrame.bottom < 
frame.bottom) {
                CenterOnScreen();
+       }
        else
                MoveTo(frame.left, frame.top);
        Show();
@@ -126,29 +127,38 @@ RepositoriesWindow::MessageReceived(BMessage* message)
 {
        switch (message->what)
        {
-               case ADD_REPO_WINDOW: {
+               case ADD_REPO_WINDOW:
+               {
                        BRect frame = Frame();
                        fAddWindow = new AddRepoWindow(frame, fMessenger);
                        break;
                }
-               case ADD_REPO_URL: {
+               
+               case ADD_REPO_URL:
+               {
                        BString url;
                        status_t result = message->FindString(key_url, &url);
                        if (result == B_OK)
                                fView->AddManualRepository(url);
                        break;
                }
-               case ADD_WINDOW_CLOSED: {
+               
+               case ADD_WINDOW_CLOSED:
+               {
                        fAddWindow = NULL;
                        break;
                }
-               case DELETE_KEY_PRESSED: {
+               
+               case DELETE_KEY_PRESSED:
+               {
                        BMessage message(REMOVE_REPOS);
                        fView->MessageReceived(&message);
                        break;
                }
+               
                // captures pkgman changes while the Repositories application 
is running
-               case B_NODE_MONITOR: {
+               case B_NODE_MONITOR:
+               {
                        // This preflet is making the changes, so ignore this 
message
                        if (fView->IsTaskRunning())
                                break;
@@ -159,7 +169,8 @@ RepositoriesWindow::MessageReceived(BMessage* message)
                                {
                                        case B_ATTR_CHANGED:
                                        case B_ENTRY_CREATED:
-                                       case B_ENTRY_REMOVED: {
+                                       case B_ENTRY_REMOVED:
+                                       {
                                                PostMessage(UPDATE_LIST, fView);
                                                break;
                                        }
@@ -167,6 +178,7 @@ RepositoriesWindow::MessageReceived(BMessage* message)
                        }
                        break;
                }
+               
                default:
                        BWindow::MessageReceived(message);
        }
diff --git a/src/preferences/repositories/RepositoriesWindow.h 
b/src/preferences/repositories/RepositoriesWindow.h
index 3272bbf..6570c42 100644
--- a/src/preferences/repositories/RepositoriesWindow.h
+++ b/src/preferences/repositories/RepositoriesWindow.h
@@ -25,6 +25,9 @@ public:
        virtual void                    MessageReceived(BMessage*);
 
 private:
+       void                                    _StartWatching();
+       void                                    _StopWatching();
+       
        RepositoriesSettings    fSettings;
        RepositoriesView*               fView;
        AddRepoWindow*                  fAddWindow;
@@ -34,8 +37,6 @@ private:
        status_t                                fPackageNodeStatus;
        bool                                    fWatchingPackageNode;
                // true when package-repositories directory is being watched
-       void                                    _StartWatching();
-       void                                    _StopWatching();
 };
 
 
diff --git a/src/preferences/repositories/TaskLooper.cpp 
b/src/preferences/repositories/TaskLooper.cpp
index 91f9bf1..ef9fb3d 100644
--- a/src/preferences/repositories/TaskLooper.cpp
+++ b/src/preferences/repositories/TaskLooper.cpp
@@ -115,7 +115,8 @@ TaskLooper::MessageReceived(BMessage* message)
 {
        switch (message->what)
        {
-               case DO_TASK: {
+               case DO_TASK:
+               {
                        RepoRow* rowItem;
                        status_t result = message->FindPointer(key_rowptr, 
(void**)&rowItem);
                        if (result == B_OK) {
@@ -170,9 +171,11 @@ TaskLooper::MessageReceived(BMessage* message)
                        }
                        break;
                }
+               
                case TASK_COMPLETED:
                case TASK_COMPLETED_WITH_ERRORS:
-               case TASK_CANCELED: {
+               case TASK_CANCELED:
+               {
                        Task* task;
                        status_t result = message->FindPointer(key_taskptr, 
(void**)&task);
                        if (result == B_OK && fTaskQueue.HasItem(task)) {
@@ -183,14 +186,17 @@ TaskLooper::MessageReceived(BMessage* message)
                                if (message->what == TASK_COMPLETED_WITH_ERRORS)
                                        reply.AddString(key_details, 
task->resultErrorDetails);
                                if (task->taskType == ENABLE_REPO
-                                       && task->name.Compare(task->resultName) 
!= 0)
+                                       && task->name.Compare(task->resultName) 
!= 0) {
                                        reply.AddString(key_name, 
task->resultName);
+                               }
                                fReplyTarget.SendMessage(&reply);
                                _RemoveAndDelete(task);
                        }
                        break;
                }
-               case TASK_KILL_REQUEST: {
+               
+               case TASK_KILL_REQUEST:
+               {
                        Task* task;
                        status_t result = message->FindPointer(key_taskptr, 
(void**)&task);
                        if (result == B_OK && fTaskQueue.HasItem(task)) {
@@ -230,7 +236,8 @@ TaskLooper::_DoTask(void* data)
        JobStateListener listener;
        switch (task->taskType)
        {
-               case DISABLE_REPO: {
+               case DISABLE_REPO:
+               {
                        BString nameParam(task->taskParam);
                        BPackageKit::BContext context(decisionProvider, 
listener);
                        BPackageKit::DropRepositoryRequest dropRequest(context, 
nameParam);
@@ -249,7 +256,9 @@ TaskLooper::_DoTask(void* data)
                        }
                        break;
                }
-               case ENABLE_REPO: {
+               
+               case ENABLE_REPO:
+               {
                        BString urlParam(task->taskParam);
                        BPackageKit::BContext context(decisionProvider, 
listener);
                        // Add repository
diff --git a/src/preferences/repositories/TaskLooper.h 
b/src/preferences/repositories/TaskLooper.h
index 1a671e6..a79ab83 100644
--- a/src/preferences/repositories/TaskLooper.h
+++ b/src/preferences/repositories/TaskLooper.h
@@ -54,11 +54,12 @@ public:
        virtual void                    MessageReceived(BMessage*);
 
 private:
-       BObjectList<Task>               fTaskQueue;
        void                                    _RemoveAndDelete(Task* task);
        static status_t                 _DoTask(void* data);
        static void                             _AppendErrorDetails(BString& 
details,
                                                                
JobStateListener* listener);
+       
+       BObjectList<Task>               fTaskQueue;
        BMessenger                              fReplyTarget;
        BMessenger                              fMessenger;
 };
diff --git a/src/preferences/repositories/TaskTimer.cpp 
b/src/preferences/repositories/TaskTimer.cpp
index 44b3a99..f13a748 100644
--- a/src/preferences/repositories/TaskTimer.cpp
+++ b/src/preferences/repositories/TaskTimer.cpp
@@ -65,7 +65,8 @@ TaskTimer::MessageReceived(BMessage* message)
 {
        switch (message->what)
        {
-               case TASK_TIMEOUT: {
+               case TASK_TIMEOUT:
+               {
                        fMessageRunner = NULL;
                        if (fTimerIsRunning) {
                                BString text(B_TRANSLATE_COMMENT("The task for 
repository"
@@ -94,7 +95,9 @@ TaskTimer::MessageReceived(BMessage* message)
                        }
                        break;
                }
-               case TIMEOUT_ALERT_BUTTON_SELECTION: {
+               
+               case TIMEOUT_ALERT_BUTTON_SELECTION:
+               {
                        fTimeoutAlert = NULL;
                        // Timeout alert was invoked by user and timer still 
has not
                        // been stopped
@@ -126,9 +129,10 @@ TaskTimer::Start(const char* name)
 
        // Create a message runner that will send a TASK_TIMEOUT message if the
        // timer is not stopped
-       if (fMessageRunner == NULL)
+       if (fMessageRunner == NULL) {
                fMessageRunner = new BMessageRunner(fMessenger, 
&fTimeoutMessage,
                        fTimeoutMicroSeconds, 1);
+       }
        else
                fMessageRunner->SetInterval(fTimeoutMicroSeconds);
 }
diff --git a/src/preferences/repositories/TaskTimer.h 
b/src/preferences/repositories/TaskTimer.h
index 00c0fec..6da0873 100644
--- a/src/preferences/repositories/TaskTimer.h
+++ b/src/preferences/repositories/TaskTimer.h
@@ -44,6 +44,8 @@ public:
        void                                    Stop(const char* name);
 
 private:
+       int32                                   _NextAlertStackCount();
+       
        int32                                   fTimeoutMicroSeconds;
        bool                                    fTimerIsRunning;
        BString                                 fRepositoryName;
@@ -54,7 +56,6 @@ private:
        BAlert*                                 fTimeoutAlert;
        BInvoker                                fTimeoutAlertInvoker;
        Task*                                   fOwner;
-       int32                                   _NextAlertStackCount();
 };
 
 

############################################################################

Commit:      baf9ae1d472d1a9edfd2ff7bdf4f6f51e4a09b08
URL:         http://cgit.haiku-os.org/haiku/commit/?id=baf9ae1d472d
Author:      Sean Healy <jalopeura@xxxxxxxxxxx>
Date:        Sun Jan 15 11:28:15 2017 UTC
Committer:   Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
Commit-Date: Sun Jan 15 11:31:13 2017 UTC

Ticket:      https://dev.haiku-os.org/ticket/13138

Input_server: fix archiving of input method replicants

- Make sure the archive contains the replicant pop-up menu
- Make sure said menu is properly re-targetted when instanciating

Fixes #13138

Signed-off-by: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>

----------------------------------------------------------------------------

diff --git a/src/servers/input/InputServerMethod.cpp 
b/src/servers/input/InputServerMethod.cpp
index 6333dc5..1ff1735 100644
--- a/src/servers/input/InputServerMethod.cpp
+++ b/src/servers/input/InputServerMethod.cpp
@@ -262,6 +262,11 @@ _BMethodAddOn_::AddMethod()
        msg.AddInt32("cookie", fCookie);
        msg.AddString("name", fName);
        msg.AddData("icon", B_RAW_TYPE, fIcon, 16*16*1);
+       BMessage menuMsg;
+       if (fMenu != NULL)
+               fMenu->Archive(&menuMsg);
+       msg.AddMessage("menu", &menuMsg);
+       msg.AddMessenger("target", fMessenger);
        if (((InputServer*)be_app)->MethodReplicant())
                return 
((InputServer*)be_app)->MethodReplicant()->SendMessage(&msg);
        else
diff --git a/src/servers/input/MethodReplicant.cpp 
b/src/servers/input/MethodReplicant.cpp
index 95650e3..fbeccd0 100644
--- a/src/servers/input/MethodReplicant.cpp
+++ b/src/servers/input/MethodReplicant.cpp
@@ -367,13 +367,35 @@ MethodReplicant::AddMethod(BMessage* message)
                return;
        }
 
+       BMessage menuMsg;
+       if (message->FindMessage("menu", &menuMsg) != B_OK) {
+               fprintf(stderr, "can't find menu in message\n");
+               return;
+       }
+       PRINT_OBJECT(menuMsg);
+
+       BMessenger messenger;
+       if (message->FindMessenger("target", &messenger) != B_OK) {
+               fprintf(stderr, "can't find target in message\n");
+               return;
+       }
+
+       BMenu* menu = static_cast<BMenu*>(BMenu::Instantiate(&menuMsg));
+       if (menu == NULL) {
+               PRINT(("can't instantiate menu\n"));
+       } else
+               menu->SetTargetForItems(messenger);
+
        MethodMenuItem* item = FindItemByCookie(cookie);
        if (item != NULL) {
                fprintf(stderr, "item with cookie %" B_PRIx32 " already 
exists\n", cookie);
                return;
        }
 
-       item = new MethodMenuItem(cookie, name, icon);
+       if (menu != NULL) {
+               item = new MethodMenuItem(cookie, name, icon, menu, messenger);
+       } else
+               item = new MethodMenuItem(cookie, name, icon);
        fMenu.AddItem(item);
        item->SetTarget(this);
 

############################################################################

Commit:      a1fdbe5bb21923e1e8f73d2ffbd474aa82096c2a
URL:         http://cgit.haiku-os.org/haiku/commit/?id=a1fdbe5bb219
Author:      Murai Takashi <tmurai01@xxxxxxxxx>
Date:        Sun Jan  8 20:37:34 2017 UTC
Committer:   Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
Commit-Date: Sun Jan 15 11:33:10 2017 UTC

Ticket:      https://dev.haiku-os.org/ticket/13185

usb_modeswitch.cpp: fix use after free.

Signed-off-by: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>

Fixes #13185

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/drivers/common/usb_modeswitch.cpp 
b/src/add-ons/kernel/drivers/common/usb_modeswitch.cpp
index 5c03ab4..8638076 100644
--- a/src/add-ons/kernel/drivers/common/usb_modeswitch.cpp
+++ b/src/add-ons/kernel/drivers/common/usb_modeswitch.cpp
@@ -531,11 +531,13 @@ my_device_added(usb_device newDevice, void **cookie)
 
        mutex_init(&device->lock, DRIVER_NAME " device lock");
 
-       device->notify = create_sem(0, DRIVER_NAME " callback notify");
-       if (device->notify < B_OK) {
+       sem_id id = create_sem(0, DRIVER_NAME " callback notify");
+       if (id < B_OK) {
                mutex_destroy(&device->lock);
                free(device);
-               return device->notify;
+               return id;
+       } else {
+               device->notify = id;
        }
 
        mutex_lock(&gDeviceListLock);

############################################################################

Revision:    hrev50868
Commit:      7118f1582e04f3f43ecb501b93f18bbd078671dc
URL:         http://cgit.haiku-os.org/haiku/commit/?id=7118f1582e04
Author:      Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
Date:        Sun Jan 15 11:48:09 2017 UTC

Ticket:      https://dev.haiku-os.org/ticket/10027

ScreenSaver: redraw background of "active corner" screen in more cases.

Fixes #10027

----------------------------------------------------------------------------

diff --git a/src/preferences/screensaver/ScreenCornerSelector.cpp 
b/src/preferences/screensaver/ScreenCornerSelector.cpp
index f403ab9..20b53db 100644
--- a/src/preferences/screensaver/ScreenCornerSelector.cpp
+++ b/src/preferences/screensaver/ScreenCornerSelector.cpp
@@ -103,17 +103,6 @@ ScreenCornerSelector::Draw(BRect updateRect)
                StrokeRoundRect(outerRect, kMonitorBorderSize * 3 / 2,
                        kMonitorBorderSize * 3 / 2);
 
-               if (!IsFocusChanging()) {
-                       SetHighColor(210, 210, 255);
-                       FillRoundRect(innerRect, kMonitorBorderSize, 
kMonitorBorderSize);
-               }
-
-               if (IsFocus() && Window()->IsActive())
-                       SetHighColor(ui_color(B_KEYBOARD_NAVIGATION_COLOR));
-               else
-                       SetHighColor(blackColor);
-               StrokeRoundRect(innerRect, kMonitorBorderSize, 
kMonitorBorderSize);
-
                if (IsFocusChanging())
                        return;
 
@@ -125,6 +114,17 @@ ScreenCornerSelector::Draw(BRect updateRect)
                StrokeLine(powerPos, BPoint(powerPos.x + 2, powerPos.y));
        }
 
+       if (!IsFocusChanging()) {
+               SetHighColor(210, 210, 255);
+               FillRoundRect(innerRect, kMonitorBorderSize, 
kMonitorBorderSize);
+       }
+
+       if (IsFocus() && Window()->IsActive())
+               SetHighColor(ui_color(B_KEYBOARD_NAVIGATION_COLOR));
+       else
+               SetHighColor(blackColor);
+       StrokeRoundRect(innerRect, kMonitorBorderSize, kMonitorBorderSize);
+
        innerRect = _InnerFrame(outerRect);
 
        if (fCurrentCorner != NO_CORNER)


Other related posts:

  • » [haiku-commits] haiku: hrev50868 - in src: preferences/repositories servers/input preferences/screensaver add-ons/kernel/drivers/common - pulkomandy