- login window should be visible on all workspaces
- add a DesktopWindow that can show replicants. To edit the shelf run Login --edit. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25083 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
3d9c0d7c37
commit
0efb25854a
92
src/apps/login/DesktopWindow.cpp
Normal file
92
src/apps/login/DesktopWindow.cpp
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <Directory.h>
|
||||||
|
#include <Entry.h>
|
||||||
|
#include <FindDirectory.h>
|
||||||
|
#include <Path.h>
|
||||||
|
#include <Screen.h>
|
||||||
|
#include <View.h>
|
||||||
|
|
||||||
|
#include "LoginApp.h"
|
||||||
|
#include "DesktopWindow.h"
|
||||||
|
|
||||||
|
const window_feel kPrivateDesktopWindowFeel = window_feel(1024);
|
||||||
|
const window_look kPrivateDesktopWindowLook = window_look(4);
|
||||||
|
// this is a mirror of an app server private values
|
||||||
|
|
||||||
|
|
||||||
|
DesktopWindow::DesktopWindow(BRect frame, bool editMode)
|
||||||
|
: BWindow(frame, "Desktop",
|
||||||
|
kPrivateDesktopWindowLook,
|
||||||
|
kPrivateDesktopWindowFeel,
|
||||||
|
B_NOT_MOVABLE | B_NOT_CLOSABLE | B_NOT_ZOOMABLE
|
||||||
|
| B_NOT_MINIMIZABLE | B_NOT_RESIZABLE
|
||||||
|
| B_ASYNCHRONOUS_CONTROLS,
|
||||||
|
editMode?B_CURRENT_WORKSPACE:B_ALL_WORKSPACES),
|
||||||
|
fEditShelfMode(editMode)
|
||||||
|
{
|
||||||
|
BScreen screen;
|
||||||
|
BView *desktop = new BView(Bounds(), "desktop", B_FOLLOW_NONE, 0);
|
||||||
|
desktop->SetViewColor(screen.DesktopColor());
|
||||||
|
AddChild(desktop);
|
||||||
|
|
||||||
|
// load the shelf
|
||||||
|
BPath path;
|
||||||
|
status_t err;
|
||||||
|
entry_ref ref;
|
||||||
|
err = find_directory(B_COMMON_SETTINGS_DIRECTORY, &path, true);
|
||||||
|
if (err >= B_OK) {
|
||||||
|
BDirectory dir(path.Path());
|
||||||
|
if (!dir.Contains("x-vnd.Haiku-Login", B_DIRECTORY_NODE))
|
||||||
|
dir.CreateDirectory("x-vnd.Haiku-Login", NULL);
|
||||||
|
path.Append("x-vnd.Haiku-Login");
|
||||||
|
dir.SetTo(path.Path());
|
||||||
|
if (!dir.Contains("Shelf", B_FILE_NODE))
|
||||||
|
dir.CreateFile("Shelf", NULL);
|
||||||
|
path.Append("Shelf");
|
||||||
|
get_ref_for_path(path.Path(), &ref);
|
||||||
|
}
|
||||||
|
|
||||||
|
fDesktopShelf = new BShelf(&ref, desktop, fEditShelfMode, "DesktopShelf");
|
||||||
|
if (fDesktopShelf)
|
||||||
|
fDesktopShelf->SetDisplaysZombies(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DesktopWindow::~DesktopWindow()
|
||||||
|
{
|
||||||
|
delete fDesktopShelf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
DesktopWindow::QuitRequested()
|
||||||
|
{
|
||||||
|
status_t err;
|
||||||
|
err = fDesktopShelf->Save();
|
||||||
|
printf("error %s\n", strerror(err));
|
||||||
|
return BWindow::QuitRequested();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
DesktopWindow::DispatchMessage(BMessage *message, BHandler *handler)
|
||||||
|
{
|
||||||
|
switch (message->what) {
|
||||||
|
case B_MOUSE_DOWN:
|
||||||
|
case B_MOUSE_UP:
|
||||||
|
case B_MOUSE_MOVED:
|
||||||
|
case B_KEY_DOWN:
|
||||||
|
case B_KEY_UP:
|
||||||
|
case B_UNMAPPED_KEY_DOWN:
|
||||||
|
case B_UNMAPPED_KEY_UP:
|
||||||
|
/* don't allow interacting with the replicants */
|
||||||
|
if (!fEditShelfMode)
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
BWindow::DispatchMessage(message, handler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
22
src/apps/login/DesktopWindow.h
Normal file
22
src/apps/login/DesktopWindow.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#ifndef _DESKTOPWINDOW_H_
|
||||||
|
#define _DESKTOPWINDOW_H_
|
||||||
|
|
||||||
|
#include <Shelf.h>
|
||||||
|
#include <Window.h>
|
||||||
|
|
||||||
|
class DesktopWindow : public BWindow {
|
||||||
|
public:
|
||||||
|
DesktopWindow(BRect frame, bool editMode);
|
||||||
|
virtual ~DesktopWindow();
|
||||||
|
|
||||||
|
bool QuitRequested();
|
||||||
|
void DispatchMessage(BMessage *message, BHandler *handler);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool fEditShelfMode;
|
||||||
|
|
||||||
|
//TODO:
|
||||||
|
BShelf* fDesktopShelf;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _DESKTOPWINDOW_H_
|
@ -14,6 +14,7 @@ if $(TARGET_PLATFORM_HAIKU_COMPATIBLE) {
|
|||||||
UseHeaders [ FDirName $(HAIKU_TOP) src bin multiuser ] ;
|
UseHeaders [ FDirName $(HAIKU_TOP) src bin multiuser ] ;
|
||||||
|
|
||||||
Application Login :
|
Application Login :
|
||||||
|
DesktopWindow.cpp
|
||||||
LoginApp.cpp
|
LoginApp.cpp
|
||||||
LoginWindow.cpp
|
LoginWindow.cpp
|
||||||
LoginView.cpp
|
LoginView.cpp
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include "LoginApp.h"
|
#include "LoginApp.h"
|
||||||
#include "LoginWindow.h"
|
#include "LoginWindow.h"
|
||||||
|
#include "DesktopWindow.h"
|
||||||
|
|
||||||
#ifdef __HAIKU__
|
#ifdef __HAIKU__
|
||||||
#include <RosterPrivate.h>
|
#include <RosterPrivate.h>
|
||||||
@ -20,13 +21,10 @@
|
|||||||
|
|
||||||
const char *kLoginAppSig = "application/x-vnd.Haiku-Login";
|
const char *kLoginAppSig = "application/x-vnd.Haiku-Login";
|
||||||
|
|
||||||
const window_feel kPrivateDesktopWindowFeel = window_feel(1024);
|
|
||||||
const window_look kPrivateDesktopWindowLook = window_look(4);
|
|
||||||
// this is a mirror of an app server private values
|
|
||||||
|
|
||||||
|
|
||||||
LoginApp::LoginApp()
|
LoginApp::LoginApp()
|
||||||
: BApplication(kLoginAppSig)
|
: BApplication(kLoginAppSig),
|
||||||
|
fEditShelfMode(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,25 +37,23 @@ LoginApp::~LoginApp()
|
|||||||
void
|
void
|
||||||
LoginApp::ReadyToRun()
|
LoginApp::ReadyToRun()
|
||||||
{
|
{
|
||||||
BScreen s;
|
|
||||||
BRect frame(0, 0, 400, 150);
|
|
||||||
frame.OffsetBySelf(s.Frame().Width()/2 - frame.Width()/2,
|
|
||||||
s.Frame().Height()/2 - frame.Height()/2);
|
|
||||||
fLoginWindow = new LoginWindow(frame);
|
|
||||||
fLoginWindow->Show();
|
|
||||||
|
|
||||||
BScreen screen;
|
BScreen screen;
|
||||||
fDesktopWindow = new BWindow(screen.Frame(), "Desktop",
|
|
||||||
kPrivateDesktopWindowLook,
|
if (fEditShelfMode) {
|
||||||
kPrivateDesktopWindowFeel,
|
(new BAlert("Info", "You can customize the desktop shown "
|
||||||
B_NOT_MOVABLE | B_NOT_CLOSABLE | B_NOT_ZOOMABLE
|
"behind the Login app by dropping replicants onto it.\n"
|
||||||
| B_NOT_MINIMIZABLE | B_NOT_RESIZABLE
|
"\n"
|
||||||
| B_ASYNCHRONOUS_CONTROLS,
|
"When you are finished just quit the application (Alt-Q).",
|
||||||
B_ALL_WORKSPACES);
|
"Ok"))->Go(NULL);
|
||||||
BView *desktop = new BView(fDesktopWindow->Bounds(), "desktop",
|
} else {
|
||||||
B_FOLLOW_NONE, 0);
|
BRect frame(0, 0, 400, 150);
|
||||||
desktop->SetViewColor(screen.DesktopColor());
|
frame.OffsetBySelf(screen.Frame().Width()/2 - frame.Width()/2,
|
||||||
fDesktopWindow->AddChild(desktop);
|
screen.Frame().Height()/2 - frame.Height()/2);
|
||||||
|
fLoginWindow = new LoginWindow(frame);
|
||||||
|
fLoginWindow->Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
fDesktopWindow = new DesktopWindow(screen.Frame(), fEditShelfMode);
|
||||||
fDesktopWindow->Show();
|
fDesktopWindow->Show();
|
||||||
// TODO: add a shelf with Activity Monitor replicant :)
|
// TODO: add a shelf with Activity Monitor replicant :)
|
||||||
}
|
}
|
||||||
@ -100,6 +96,18 @@ LoginApp::MessageReceived(BMessage *message)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
LoginApp::ArgvReceived(int32 argc, char **argv)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 1; i < argc; i++) {
|
||||||
|
printf("[%d]: %s\n", i, argv[i]);
|
||||||
|
if (argv[i] == BString("--edit"))
|
||||||
|
fEditShelfMode = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
LoginApp::TryLogin(BMessage *message)
|
LoginApp::TryLogin(BMessage *message)
|
||||||
{
|
{
|
||||||
@ -137,7 +145,7 @@ LoginApp::TryLogin(BMessage *message)
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
LoginApp::ValidateLogin(const char *login, const char *password/*, bool force = false*/)
|
LoginApp::ValidateLogin(const char *login, const char *password)
|
||||||
{
|
{
|
||||||
struct passwd *pwd;
|
struct passwd *pwd;
|
||||||
|
|
||||||
|
@ -12,25 +12,25 @@ const uint32 kLoginBad = 'lgba';
|
|||||||
const uint32 kLoginOk = 'lgok';
|
const uint32 kLoginOk = 'lgok';
|
||||||
|
|
||||||
class LoginWindow;
|
class LoginWindow;
|
||||||
|
class DesktopWindow;
|
||||||
|
|
||||||
class LoginApp : public BApplication {
|
class LoginApp : public BApplication {
|
||||||
public:
|
public:
|
||||||
LoginApp();
|
LoginApp();
|
||||||
virtual ~LoginApp();
|
virtual ~LoginApp();
|
||||||
void ReadyToRun();
|
void ReadyToRun();
|
||||||
void MessageReceived(BMessage *message);
|
void MessageReceived(BMessage *message);
|
||||||
|
void ArgvReceived(int32 argc, char **argv);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void TryLogin(BMessage *message);
|
void TryLogin(BMessage *message);
|
||||||
status_t ValidateLogin(const char *login, const char *password/*, bool force = false*/);
|
status_t ValidateLogin(const char *login, const char *password);
|
||||||
status_t StartUserSession(const char *login);
|
status_t StartUserSession(const char *login);
|
||||||
int getpty(char *pty, char *tty);
|
int getpty(char *pty, char *tty);
|
||||||
|
|
||||||
BWindow* fDesktopWindow;
|
DesktopWindow* fDesktopWindow;
|
||||||
LoginWindow* fLoginWindow;
|
LoginWindow* fLoginWindow;
|
||||||
|
bool fEditShelfMode;
|
||||||
//TODO:
|
|
||||||
//BShelf* fDesktopShelf;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _LOGINAPP_H_
|
#endif // _LOGINAPP_H_
|
||||||
|
@ -9,7 +9,8 @@ LoginWindow::LoginWindow(BRect frame)
|
|||||||
WINDOW_FEEL,
|
WINDOW_FEEL,
|
||||||
B_NOT_MOVABLE | B_NOT_CLOSABLE | B_NOT_ZOOMABLE |
|
B_NOT_MOVABLE | B_NOT_CLOSABLE | B_NOT_ZOOMABLE |
|
||||||
B_NOT_MINIMIZABLE | B_NOT_RESIZABLE |
|
B_NOT_MINIMIZABLE | B_NOT_RESIZABLE |
|
||||||
B_ASYNCHRONOUS_CONTROLS)
|
B_ASYNCHRONOUS_CONTROLS,
|
||||||
|
B_ALL_WORKSPACES)
|
||||||
{
|
{
|
||||||
LoginView *v = new LoginView(Bounds());
|
LoginView *v = new LoginView(Bounds());
|
||||||
AddChild(v);
|
AddChild(v);
|
||||||
|
Loading…
Reference in New Issue
Block a user