Ticket #8035: modeswitch.patch

File modeswitch.patch, 2.0 KB (added by jscipione, 8 years ago)

Propegate B_SCREEN_CHANGED message to views, BColorControl reads message and rebuilds itself

  • src/kits/interface/ColorControl.cpp

    diff --git a/src/kits/interface/ColorControl.cpp b/src/kits/interface/ColorControl.cpp
    index 0379cd5..e7ee2a4 100644
    a b BColorControl::MessageReceived(BMessage* message)  
    362362            Invoke();
    363363            break;
    364364        }
     365
     366        case B_SCREEN_CHANGED:
     367        {
     368            // fake an archive message (so we don't rebuild views)
     369            BMessage* data = new BMessage();
     370            data->AddInt32("_val", Value());
     371
     372            // reinititialize
     373            _InitData((color_control_layout)fColumns, fCellSize,
     374                fOffscreenView != NULL, data);
     375
     376            // cleanup
     377            delete data;
     378            break;
     379        }
     380
    365381        default:
    366382            BControl::MessageReceived(message);
    367383    }
  • src/kits/interface/View.cpp

    diff --git a/src/kits/interface/View.cpp b/src/kits/interface/View.cpp
    index cf03b8f..8000004 100644
    a b BView::MessageReceived(BMessage* message)  
    49554955            case B_FONTS_UPDATED:
    49564956                break;
    49574957
     4958            case B_SCREEN_CHANGED:
     4959                // propegate message to child views
     4960                for (int32 i = 0; i < CountChildren(); i++) {
     4961                    BView* view = ChildAt(i);
     4962                    if (view != NULL)
     4963                        view->MessageReceived(message);
     4964                }
     4965                break;
     4966
    49584967            default:
    49594968                BHandler::MessageReceived(message);
    49604969                break;
  • src/kits/interface/Window.cpp

    diff --git a/src/kits/interface/Window.cpp b/src/kits/interface/Window.cpp
    index 7a6b203..37a09a7 100644
    a b FrameMoved(origin);  
    11111111                BRect frame;
    11121112                uint32 mode;
    11131113                if (message->FindRect("frame", &frame) == B_OK
    1114                     && message->FindInt32("mode", (int32*)&mode) == B_OK)
     1114                    && message->FindInt32("mode", (int32*)&mode) == B_OK) {
     1115                    // propegate message to child views
     1116                    for (int32 i = 0; i < CountChildren(); i++) {
     1117                        BView* view = ChildAt(i);
     1118                        if (view != NULL)
     1119                            view->MessageReceived(message);
     1120                    }
    11151121                    ScreenChanged(frame, (color_space)mode);
     1122                }
    11161123            } else
    11171124                target->MessageReceived(message);
    11181125            break;