Ticket #13286: 0001-Bug-fix-When-both-Backgrounds-and-Screen-are-open-if.patch

File 0001-Bug-fix-When-both-Backgrounds-and-Screen-are-open-if.patch, 6.9 KB (added by perelandra, 7 years ago)

I have built these changes to Backgrounds and Screen under x86gcc2, x86 and x86_64

  • new file headers/private/preferences/ScreenDefs.h

    From 3d06de689b12c90a0930fc93be95adca8dd2998b Mon Sep 17 00:00:00 2001
    From: Brian Hill <supernova@warpmail.net>
    Date: Wed, 8 Feb 2017 16:46:36 -0500
    Subject: [PATCH] Bug fix: When both Backgrounds and Screen are open if the
     workspace color is changed in Backgrounds the monitor preview in Screen will
     now refresh to the new color.  Also added a BAlert in BackgroundsView.cpp.
    
    ---
     headers/private/preferences/ScreenDefs.h        | 15 +++++++++++++
     src/preferences/backgrounds/BackgroundsView.cpp | 29 ++++++++++++++++++++-----
     src/preferences/backgrounds/BackgroundsView.h   |  1 +
     src/preferences/backgrounds/Jamfile             |  2 +-
     src/preferences/screen/Constants.h              |  4 +++-
     src/preferences/screen/Jamfile                  |  2 +-
     src/preferences/screen/ScreenApplication.cpp    |  1 +
     src/preferences/screen/ScreenWindow.cpp         |  4 ++++
     8 files changed, 50 insertions(+), 8 deletions(-)
     create mode 100644 headers/private/preferences/ScreenDefs.h
    
    diff --git a/headers/private/preferences/ScreenDefs.h b/headers/private/preferences/ScreenDefs.h
    new file mode 100644
    index 0000000..f03a3a7
    - +  
     1/*
     2 * Copyright 2017, Haiku.
     3 * Distributed under the terms of the MIT License.
     4 *
     5 * Authors:
     6 *      Brian Hill <supernova@warpmail.net>
     7 */
     8#ifndef _SCREEN_DEFS_H
     9#define _SCREEN_DEFS_H
     10
     11
     12// Message sent to Screen from Backgrounds when updating the background color
     13static const uint32 UPDATE_DESKTOP_COLOR_MSG = 'udsc';
     14
     15#endif  // _SCREEN_DEFS_H
  • src/preferences/backgrounds/BackgroundsView.cpp

    diff --git a/src/preferences/backgrounds/BackgroundsView.cpp b/src/preferences/backgrounds/BackgroundsView.cpp
    index 71853c8..4f49b40 100644
    a b  
    11/*
    2  * Copyright 2002-2015 Haiku, Inc. All rights reserved.
     2 * Copyright 2002-2017 Haiku, Inc. All rights reserved.
    33 * Distributed under the terms of the MIT License.
    44 *
    55 * Authors:
     
    77 *      Jerome Duval, jerome.duval@free.fr
    88 *      Jonas Sundström, jonas@kirilla.se
    99 *      John Scipione, jscipione@gmail.com
     10 *      Brian Hill <supernova@warpmail.net>
    1011 */
    1112
    1213
     
    1718#include <stdio.h>
    1819#include <stdlib.h>
    1920
     21#include <Alert.h>
    2022#include <Bitmap.h>
    2123#include <Catalog.h>
    2224#include <ControlLook.h>
     
    3335#include <PopUpMenu.h>
    3436
    3537#include <be_apps/Tracker/Background.h>
     38#include <ScreenDefs.h>
    3639
    3740#include "ImageFilePanel.h"
    3841
    BackgroundsView::MessageReceived(BMessage* message)  
    415418        {
    416419            _Save();
    417420
    418             //_NotifyServer();
     421            // Notify the server and Screen preflet
    419422            thread_id notify_thread;
    420423            notify_thread = spawn_thread(BackgroundsView::_NotifyThread,
    421                 "notifyServer", B_NORMAL_PRIORITY, this);
     424                "notifyThread", B_NORMAL_PRIORITY, this);
    422425            resume_thread(notify_thread);
    423426            _UpdateButtons();
    424427            break;
    BackgroundsView::_Save()  
    659662
    660663    status_t status = fCurrent->SetBackgroundImage(&node);
    661664    if (status != B_OK) {
    662         // TODO: this should be a BAlert!
    663         printf("setting background image failed: %s\n", strerror(status));
     665        BString error(strerror(status));
     666        BString text(B_TRANSLATE("Setting the background image failed:"));
     667        text.Append("\n").Append(error);
     668        BAlert* alert = new BAlert(B_TRANSLATE("Set background image error"),
     669            text, B_TRANSLATE("OK"));
     670        alert->SetShortcut(0, B_ESCAPE);
     671        alert->Go(NULL);
     672        printf("setting background image failed: %s\n", error.String());
    664673    }
    665674}
    666675
    BackgroundsView::_NotifyServer()  
    743752}
    744753
    745754
     755void
     756BackgroundsView::_NotifyScreenPreflet()
     757{
     758    BMessenger messenger("application/x-vnd.Haiku-Screen");
     759    if (messenger.IsValid())
     760        messenger.SendMessage(UPDATE_DESKTOP_COLOR_MSG);
     761}
     762
     763
    746764int32
    747765BackgroundsView::_NotifyThread(void* data)
    748766{
    749767    BackgroundsView* view = (BackgroundsView*)data;
    750768
    751769    view->_NotifyServer();
     770    view->_NotifyScreenPreflet();
    752771    return B_OK;
    753772}
    754773
  • src/preferences/backgrounds/BackgroundsView.h

    diff --git a/src/preferences/backgrounds/BackgroundsView.h b/src/preferences/backgrounds/BackgroundsView.h
    index eece562..4df303f 100644
    a b public:  
    120120protected:
    121121            void                _Save();
    122122            void                _NotifyServer();
     123            void                _NotifyScreenPreflet();
    123124            void                _LoadSettings();
    124125            void                _LoadDesktopFolder();
    125126            void                _LoadDefaultFolder();
  • src/preferences/backgrounds/Jamfile

    diff --git a/src/preferences/backgrounds/Jamfile b/src/preferences/backgrounds/Jamfile
    index 3d134f5..75b6cd6 100644
    a b  
    11SubDir HAIKU_TOP src preferences backgrounds ;
    22
    3 UsePrivateHeaders shared ;
     3UsePrivateHeaders preferences shared ;
    44
    55Preference Backgrounds :
    66    BackgroundImage.cpp
  • src/preferences/screen/Constants.h

    diff --git a/src/preferences/screen/Constants.h b/src/preferences/screen/Constants.h
    index 3191d9d..f581d56 100644
    a b  
    1010#define CONSTANTS_H
    1111
    1212
     13#include <ScreenDefs.h>
    1314#include <SupportDefs.h>
    1415
    1516
    static const uint32 POP_COMBINE_DISPLAYS_MSG = 'pcdi';  
    3031static const uint32 POP_SWAP_DISPLAYS_MSG = 'psdi';
    3132static const uint32 POP_USE_LAPTOP_PANEL_MSG = 'pulp';
    3233static const uint32 POP_TV_STANDARD_MSG = 'ptvs';
    33 static const uint32 UPDATE_DESKTOP_COLOR_MSG = 'udsc';
     34//static const uint32 UPDATE_DESKTOP_COLOR_MSG = 'udsc';
     35    // This is now defined in headers/private/preferences/ScreenDefs.h
    3436static const uint32 UPDATE_DESKTOP_MSG = 'udsk';
    3537static const uint32 SLIDER_MODIFICATION_MSG = 'sldm';
    3638static const uint32 SLIDER_INVOKE_MSG = 'sldi';
  • src/preferences/screen/Jamfile

    diff --git a/src/preferences/screen/Jamfile b/src/preferences/screen/Jamfile
    index 116d9f2..ce605a8 100644
    a b AddSubDirSupportedPlatforms libbe_test ;  
    44
    55UsePrivateHeaders [ FDirName graphics common ] ;
    66UsePrivateHeaders [ FDirName graphics radeon ] ;
    7 UsePrivateHeaders interface ;
     7UsePrivateHeaders interface preferences ;
    88
    99Preference Screen :
    1010    AlertWindow.cpp
  • src/preferences/screen/ScreenApplication.cpp

    diff --git a/src/preferences/screen/ScreenApplication.cpp b/src/preferences/screen/ScreenApplication.cpp
    index f022380..e5be94f 100644
    a b ScreenApplication::MessageReceived(BMessage* message)  
    5151    switch (message->what) {
    5252        case SET_CUSTOM_REFRESH_MSG:
    5353        case MAKE_INITIAL_MSG:
     54        case UPDATE_DESKTOP_COLOR_MSG:
    5455            fScreenWindow->PostMessage(message);
    5556            break;
    5657
  • src/preferences/screen/ScreenWindow.cpp

    diff --git a/src/preferences/screen/ScreenWindow.cpp b/src/preferences/screen/ScreenWindow.cpp
    index 0054c31..22c8d80 100644
    a b ScreenWindow::MessageReceived(BMessage* message)  
    11311131            _UpdateActiveMode();
    11321132            break;
    11331133
     1134        case UPDATE_DESKTOP_COLOR_MSG:
     1135            PostMessage(message, fMonitorView);
     1136            break;
     1137
    11341138        default:
    11351139            BWindow::MessageReceived(message);
    11361140    }