mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 14:45:29 +00:00
189 lines
4.9 KiB
C++
189 lines
4.9 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*/
|
|
|
|
// ULocationIndependence.cp - MacFE specific location independence code
|
|
|
|
#include "uapp.h"
|
|
#include "li_public.h"
|
|
#include "pprthred.h"
|
|
#include "plevent.h"
|
|
#include <LCommander.h>
|
|
|
|
// CLICommander
|
|
// Location independence commands
|
|
class CLICommander : public LCommander, public LEventDispatcher {
|
|
enum EQuitState {
|
|
eWaitingForUploadAll,
|
|
eUploadAllStarted,
|
|
eUploadAllComplete
|
|
};
|
|
|
|
public:
|
|
int fVerifyLoginCount;
|
|
int fNumOfCriticalFiles;
|
|
EQuitState fState;
|
|
|
|
// Constructors
|
|
CLICommander(LCommander * inSuper);
|
|
virtual ~CLICommander() {};
|
|
|
|
// Startup logic
|
|
static void GetCriticalClosure(void * closure, LIStatus result);
|
|
void GetCriticalFiles();
|
|
void VerifyLogin();
|
|
|
|
// Quit logic
|
|
virtual Boolean AttemptQuit(long inSaveOption);
|
|
private:
|
|
static void VerifyLoginCallback(void * closure, LIStatus result);
|
|
static void uploadAllClosure( void * closure, LIStatus result);
|
|
|
|
void UploadAllComplete(LIStatus status);
|
|
|
|
// Does a busy wait, while processing events
|
|
void WaitOnInt(int * boolean);
|
|
};
|
|
|
|
|
|
CLICommander::CLICommander(LCommander * inSuper)
|
|
: LCommander(inSuper)
|
|
{
|
|
fState = eWaitingForUploadAll;
|
|
|
|
/*
|
|
LIFile * file1 = new LIFile ("/Speedy/coreprofile/file1", "FirstFile", "Test file 1");
|
|
LIFile * file2 = new LIFile ("/Speedy/coreprofile/file2", "SecondFile", "Test file 2");
|
|
LIFile * file3 = new LIFile ("/Speedy/coreprofile/file3", "ThirdFile", "Test file 3");
|
|
fGroup = new LIClientGroup();
|
|
fGroup->addFile( file1, NULL, NULL, NULL, NULL);
|
|
fGroup->addFile( file2, NULL, NULL, NULL, NULL);
|
|
fGroup->addFile( file3, NULL, NULL, NULL, NULL);
|
|
*/
|
|
}
|
|
|
|
extern PREventQueue *mozilla_event_queue;
|
|
|
|
void CLICommander::GetCriticalFiles()
|
|
{
|
|
fNumOfCriticalFiles = 0;
|
|
LI_StartGettingCriticalFiles( &fNumOfCriticalFiles );
|
|
WaitOnInt(&fNumOfCriticalFiles);
|
|
}
|
|
|
|
void CLICommander::VerifyLoginCallback(void * closure, LIStatus result)
|
|
{
|
|
CLICommander * commander = (CLICommander*) closure;
|
|
commander->fVerifyLoginCount = 0;
|
|
}
|
|
|
|
void CLICommander::VerifyLogin()
|
|
{
|
|
fVerifyLoginCount = 1;
|
|
LIMediator::verifyLogin(VerifyLoginCallback, this);
|
|
WaitOnInt(&fVerifyLoginCount);
|
|
}
|
|
|
|
void CLICommander::WaitOnInt(int * waitInt)
|
|
{
|
|
EventRecord macEvent;
|
|
|
|
while (*waitInt > 0)
|
|
{
|
|
if (IsOnDuty()) {
|
|
::OSEventAvail(0, &macEvent);
|
|
AdjustCursor(macEvent);
|
|
}
|
|
|
|
SetUpdateCommandStatus(false);
|
|
|
|
Boolean gotEvent = ::WaitNextEvent(everyEvent, &macEvent,
|
|
1, mMouseRgnH);
|
|
|
|
// Let Attachments process the event. Continue with normal
|
|
// event dispatching unless suppressed by an Attachment.
|
|
|
|
if (LEventDispatcher::ExecuteAttachments(msg_Event, &macEvent)) {
|
|
if (gotEvent) {
|
|
DispatchEvent(macEvent);
|
|
} else {
|
|
UseIdleTime(macEvent);
|
|
}
|
|
}
|
|
|
|
// Repeaters get time after every event
|
|
LPeriodical::DevoteTimeToRepeaters(macEvent);
|
|
|
|
// Update status of menu items
|
|
if (IsOnDuty() && GetUpdateCommandStatus()) {
|
|
UpdateMenus();
|
|
}
|
|
// This pumps the mocha thread
|
|
PL_ProcessPendingEvents(mozilla_event_queue);
|
|
}
|
|
// We need to give time to idlers once again because:
|
|
// HTML conflict dialogs are being destroyed on a timer by libsec
|
|
// CreateStartupEnvironment() will not display any new windows if any HTML windows are visible
|
|
// => Must let timers run to destroy HTML dialogs before we proceed
|
|
macEvent.when = ::TickCount();
|
|
LPeriodical::DevoteTimeToIdlers(macEvent);
|
|
}
|
|
|
|
|
|
void CLICommander::uploadAllClosure( void * closure, LIStatus status)
|
|
{
|
|
CLICommander * c = (CLICommander*) closure;
|
|
c->UploadAllComplete(status);
|
|
}
|
|
|
|
void CLICommander::UploadAllComplete(LIStatus status)
|
|
{
|
|
fState = eUploadAllComplete;
|
|
LI_Shutdown();
|
|
(CFrontApp::GetApplication())->DoQuit();
|
|
}
|
|
|
|
Boolean CLICommander::AttemptQuit(long inSaveOption)
|
|
{
|
|
switch (fState)
|
|
{
|
|
case eWaitingForUploadAll:
|
|
LIMediator::uploadAll(uploadAllClosure, this);
|
|
break;
|
|
|
|
case eUploadAllStarted:
|
|
return false;
|
|
break;
|
|
|
|
case eUploadAllComplete:
|
|
return true; // We can quit now
|
|
}
|
|
return false;
|
|
}
|
|
|
|
#ifndef MOZ_LITE
|
|
// InitializeLocationIndependence
|
|
// Busy wait until all the Critical Files have been downloaded
|
|
void CFrontApp::InitializeLocationIndependence()
|
|
{
|
|
// LI_Startup();
|
|
// CLICommander * newCommander = new CLICommander(this);
|
|
// newCommander->VerifyLogin();
|
|
// newCommander->GetCriticalFiles();
|
|
}
|
|
#endif
|