As it turns out, window_info::type is really the window's "feel".
Basic support for the desktop window feel: WinBorder will now resize a window with kDesktopWindowFeel to span over the whole screen. Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13462 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
2b1246d968
commit
34ce0e42d4
@ -22,7 +22,7 @@ struct window_info {
|
||||
uint32 workspaces;
|
||||
|
||||
int32 layer; // whatever this is...
|
||||
uint32 type; // see below
|
||||
uint32 feel;
|
||||
uint32 flags;
|
||||
int32 window_left;
|
||||
int32 window_top;
|
||||
@ -37,14 +37,6 @@ struct client_window_info : window_info {
|
||||
char name[1];
|
||||
} _PACKED;
|
||||
|
||||
enum {
|
||||
// taken from Deskbar
|
||||
kNormalWindow = 0,
|
||||
kDesktopWindow = 1024,
|
||||
kMenuWindow = 1025,
|
||||
kWindowScreen = 1026,
|
||||
};
|
||||
|
||||
enum window_action {
|
||||
B_MINIMIZE_WINDOW,
|
||||
B_BRING_TO_FRONT
|
||||
|
@ -1,14 +1,14 @@
|
||||
/*
|
||||
* Copyright 2005, Jérôme Duval, jerome.duval@free.fr.
|
||||
|
||||
* Copyright 2005, Jérôme Duval, jerome.duval@free.fr.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
|
||||
#ifndef _WINDOW_PRIVATE_H
|
||||
#define _WINDOW_PRIVATE_H
|
||||
|
||||
|
||||
#include <Window.h>
|
||||
|
||||
|
||||
/* Private window looks */
|
||||
|
||||
const window_look kDesktopWindowLook = window_look(4);
|
||||
@ -18,6 +18,7 @@ const window_look kLeftTitledWindowLook = window_look(25);
|
||||
|
||||
const window_feel kDesktopWindowFeel = window_feel(1024);
|
||||
const window_feel kMenuWindowFeel = window_feel(1025);
|
||||
const window_feel kWindowScreenFeel = window_feel(1026);
|
||||
|
||||
/* Private window types */
|
||||
|
||||
@ -28,5 +29,4 @@ const window_type kWindowScreenWindow = window_type(1026);
|
||||
const uint32 kWorkspacesWindowFlag = 0x8000;
|
||||
const uint32 kWindowScreenFlag = 0x10000;
|
||||
|
||||
#endif //_WINDOW_PRIVATE_H
|
||||
|
||||
#endif // _WINDOW_PRIVATE_H
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include <Autolock.h>
|
||||
#include <TokenSpace.h>
|
||||
#include <WindowInfo.h>
|
||||
#include <WindowPrivate.h>
|
||||
|
||||
#include "AppServer.h"
|
||||
#include "BGet++.h"
|
||||
@ -361,7 +362,7 @@ ServerWindow::GetInfo(window_info& info)
|
||||
info.workspaces = fWinBorder->Workspaces();
|
||||
|
||||
info.layer = 0; // ToDo: what is this???
|
||||
info.type = kNormalWindow; // ToDo: do this for real
|
||||
info.feel = fWinBorder->Feel();
|
||||
info.flags = fWinBorder->WindowFlags();
|
||||
info.window_left = (int)floor(fWinBorder->Frame().left);
|
||||
info.window_top = (int)floor(fWinBorder->Frame().top);
|
||||
@ -433,7 +434,7 @@ ServerWindow::CreateLayerTree(BPrivate::LinkReceiver &link, Layer **_parent)
|
||||
Layer *newLayer;
|
||||
|
||||
if (link.Code() == AS_LAYER_CREATE_ROOT
|
||||
&& (fWinBorder->WindowFlags() & 0x00008000) != 0) {
|
||||
&& (fWinBorder->WindowFlags() & kWorkspacesWindowFlag) != 0) {
|
||||
// this is a workspaces window!
|
||||
newLayer = new WorkspacesLayer(frame, name, token, resizeMask,
|
||||
flags, fWinBorder->GetDisplayDriver());
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include <View.h> // for mouse button defines
|
||||
|
||||
#include <Debug.h>
|
||||
#include <WindowPrivate.h>
|
||||
#include "DebugInfoManager.h"
|
||||
|
||||
#include "Decorator.h"
|
||||
@ -123,7 +124,17 @@ WinBorder::WinBorder(const BRect &frame,
|
||||
|
||||
// do we need to change our size to let the decorator fit?
|
||||
// _ResizeBy() will adapt the frame for validity before resizing
|
||||
_ResizeBy(0, 0);
|
||||
if (feel == kDesktopWindowFeel) {
|
||||
// the desktop window spans over the whole screen
|
||||
// ToDo: this functionality should be moved somewhere else (so that it
|
||||
// is always used when the workspace is changed)
|
||||
uint16 width, height;
|
||||
uint32 colorSpace;
|
||||
float frequency;
|
||||
gDesktop->ActiveScreen()->GetMode(width, height, colorSpace, frequency);
|
||||
_ResizeBy(width - frame.Width(), height - frame.Height());
|
||||
} else
|
||||
_ResizeBy(0, 0);
|
||||
|
||||
#ifndef NEW_CLIPPING
|
||||
RebuildFullRegion();
|
||||
@ -687,7 +698,7 @@ WinBorder::QuietlySetFeel(int32 feel)
|
||||
}
|
||||
|
||||
// floating and modal windows must appear in every workspace where
|
||||
// their main window is present. Thus their wksIndex will be set to
|
||||
// their main window is present. Thus their fWorkspaces will be set to
|
||||
// '0x0' and they will be made visible when needed.
|
||||
switch (fFeel) {
|
||||
case B_MODAL_APP_WINDOW_FEEL:
|
||||
|
Loading…
Reference in New Issue
Block a user