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:
Axel Dörfler 2005-07-05 20:28:40 +00:00
parent 2b1246d968
commit 34ce0e42d4
4 changed files with 22 additions and 18 deletions

View File

@ -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

View File

@ -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

View File

@ -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());

View File

@ -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: