OSStatus CPrinterSetupWizardSheet::InstallPrinter(Printer * printer) { Service * service; BOOL ok; OSStatus err; service = printer->services.front(); check( service ); // // if the driver isn't installed, then install it // if ( !printer->driverInstalled ) { DWORD dwResult; HANDLE hThread; unsigned threadID; m_driverThreadFinished = false; // // create the thread // hThread = (HANDLE) _beginthreadex_compat( NULL, 0, InstallDriverThread, printer, 0, &threadID ); err = translate_errno( hThread, (OSStatus) GetLastError(), kUnknownErr ); require_noerr( err, exit ); // // go modal // while (!m_driverThreadFinished) { MSG msg; GetMessage( &msg, m_hWnd, 0, 0 ); TranslateMessage(&msg); DispatchMessage(&msg); } // // Wait until child process exits. // dwResult = WaitForSingleObject( hThread, INFINITE ); err = translate_errno( dwResult == WAIT_OBJECT_0, errno_compat(), err = kUnknownErr ); require_noerr( err, exit ); // // check the return value of thread // require_noerr( m_driverThreadExitCode, exit ); // // now we know that the driver was successfully installed // printer->driverInstalled = true; } if ( service->type == kPDLServiceType ) { err = InstallPrinterPDLAndLPR( printer, service, PROTOCOL_RAWTCP_TYPE ); require_noerr( err, exit ); } else if ( service->type == kLPRServiceType ) { err = InstallPrinterPDLAndLPR( printer, service, PROTOCOL_LPR_TYPE ); require_noerr( err, exit ); } else if ( service->type == kIPPServiceType ) { err = InstallPrinterIPP( printer, service ); require_noerr( err, exit ); } else { err = kUnknownErr; require_noerr( err, exit ); } printer->installed = true; // // if the user specified a default printer, set it // if (printer->deflt) { ok = SetDefaultPrinter( printer->actualName ); err = translate_errno( ok, errno_compat(), err = kUnknownErr ); require_noerr( err, exit ); } exit: return err; }
void TTracker::MessageReceived(BMessage *message) { if (HandleScriptingMessage(message)) return; switch (message->what) { case kGetInfo: OpenInfoWindows(message); break; case kMoveToTrash: MoveRefsToTrash(message); break; case kCloseWindowAndChildren: { const node_ref *itemNode; int32 bytes; message->FindData("node_ref", B_RAW_TYPE, (const void **)&itemNode, &bytes); CloseWindowAndChildren(itemNode); break; } case kCloseAllWindows: CloseAllWindows(); break; case kCloseAllInWorkspace: CloseAllInWorkspace(); break; case kFindButton: (new FindWindow())->Show(); break; case kEditQuery: EditQueries(message); break; case kShowSplash: run_be_about(); break; case kAddPrinter: // show the addprinter window run_add_printer_panel(); break; case kMakeActivePrinter: // get the current selection SetDefaultPrinter(message); break; #ifdef MOUNT_MENU_IN_DESKBAR case 'gmtv': { // Someone (probably the deskbar) has requested a list of // mountable volumes. BMessage reply; AutoMounterLoop()->EachMountableItemAndFloppy(&AddMountableItemToMessage, &reply); message->SendReply(&reply); break; } #endif case kUnmountVolume: // When the user attempts to unmount a volume from the mount // context menu, this is where the message gets received. // Save pose locations and forward this to the automounter SaveAllPoseLocations(); // Fall through... case kMountVolume: case kMountAllNow: MountServer().SendMessage(message); break; case kRunAutomounterSettings: AutomountSettingsDialog::RunAutomountSettings(MountServer()); break; case kRestoreBackgroundImage: { BDeskWindow *desktop = GetDeskWindow(); AutoLock<BWindow> lock(desktop); desktop->UpdateDesktopBackgroundImages(); break; } case kShowSettingsWindow: ShowSettingsWindow(); break; case kFavoriteCountChangedExternally: SendNotices(kFavoriteCountChangedExternally, message); break; case kStartWatchClipboardRefs: { BMessenger messenger; message->FindMessenger("target", &messenger); if (messenger.IsValid()) fClipboardRefsWatcher->AddToNotifyList(messenger); break; } case kStopWatchClipboardRefs: { BMessenger messenger; message->FindMessenger("target", &messenger); if (messenger.IsValid()) fClipboardRefsWatcher->RemoveFromNotifyList(messenger); break; } case kFSClipboardChanges: fClipboardRefsWatcher->UpdatePoseViews(message); break; case kShowVolumeSpaceBar: case kSpaceBarColorChanged: gPeriodicUpdatePoses.DoPeriodicUpdate(true); break; case B_LOCALE_CHANGED: { BLocaleRoster::Default()->Refresh(); bool localize; if (message->FindBool("filesys", &localize) == B_OK) gLocalizedNamePreferred = localize; break; } default: _inherited::MessageReceived(message); break; } }
void TTracker::MessageReceived(BMessage *message) { if (HandleScriptingMessage(message)) return; switch (message->what) { case kGetInfo: OpenInfoWindows(message); break; case kMoveToTrash: MoveRefsToTrash(message); break; case kCloseWindowAndChildren: { const node_ref *itemNode; int32 bytes; message->FindData("node_ref", B_RAW_TYPE, (const void **)&itemNode, &bytes); CloseWindowAndChildren(itemNode); break; } case kCloseAllWindows: CloseAllWindows(); break; case kFindButton: (new FindWindow())->Show(); break; case kEditQuery: EditQueries(message); break; case kUnmountVolume: // When the user attempts to unmount a volume from the mount // context menu, this is where the message gets received. Save // pose locations and forward this to the automounter SaveAllPoseLocations(); fAutoMounter->PostMessage(message); break; case kRunAutomounterSettings: AutomountSettingsDialog::RunAutomountSettings(fAutoMounter); break; case kShowSplash: { // The AboutWindow was moved out of the Tracker in preparation // for when we open source it. The AboutBox contains important // credit and license issues that shouldn't be modified, and // therefore shouldn't be open sourced. However, there is a public // API for 3rd party apps to tell the Tracker to open the AboutBox. run_be_about(); break; } case kAddPrinter: // show the addprinter window run_add_printer_panel(); break; case kMakeActivePrinter: // get the current selection SetDefaultPrinter(message); break; #ifdef MOUNT_MENU_IN_DESKBAR case 'gmtv': { // Someone (probably the deskbar) has requested a list of // mountable volumes. BMessage reply; AutoMounterLoop()->EachMountableItemAndFloppy(&AddMountableItemToMessage, &reply); message->SendReply(&reply); break; } #endif case kMountVolume: case kMountAllNow: AutoMounterLoop()->PostMessage(message); break; case kRestoreBackgroundImage: { BDeskWindow *desktop = GetDeskWindow(); AutoLock<BWindow> lock(desktop); desktop->UpdateDesktopBackgroundImages(); } break; case kShowSettingsWindow: ShowSettingsWindow(); break; case kFavoriteCountChangedExternally: SendNotices(kFavoriteCountChangedExternally, message); break; case kStartWatchClipboardRefs: { BMessenger messenger; message->FindMessenger("target", &messenger); if (messenger.IsValid()) fClipboardRefsWatcher->AddToNotifyList(messenger); break; } case kStopWatchClipboardRefs: { BMessenger messenger; message->FindMessenger("target", &messenger); if (messenger.IsValid()) fClipboardRefsWatcher->RemoveFromNotifyList(messenger); break; } default: _inherited::MessageReceived(message); break; } }
void sys_PrintDirect2Driver( PA_PluginParameters params ) { PRINTDLG pd; // Structure to hold information about printer DOCINFO di; // Structure to hold "document" information char printerName[MAXBUF] = ""; // String to hold the printerName param ($1) char data[MAXLABELBUF] = ""; // String to hold the data param ($2) REB 6/5/08 #17022 Changed MAXBUF to MAXLABELBUF which is twice as big. char *origDefault; // String to hold the original default printer INT_PTR printerName_len; // Int to hold maximum length of printer name INT_PTR ret; // Int to hold return value of functions INT_PTR iErrCode = 0; // Int to hold the error code. ULONG_PTR ulBytesNeeded; // Holds size information // Set needed bytes to default value ulBytesNeeded = MAXLABELBUF; // REB 6/5/08 #17022 Changed MAXBUF to MAXLABELBUF // Set this to 255. printerName_len = 255; // Get the function parameters. PA_GetTextParameter(params, 1, printerName); PA_GetTextParameter(params, 2, data); // Allocate memory for Storing string for Original Default Printer & pBuf origDefault = (char *)malloc(ulBytesNeeded); memset(origDefault, 0, ulBytesNeeded); // Get name of current Default Printer GetDefaultPrinter(origDefault, &ulBytesNeeded); // Set the new Default Printer to our label printer, with the name obtained from the registry ret = SetDefaultPrinter((char *)printerName); // We set the default printer just fine, now let's do the printing. if (ret != 0) { // Allocate memory for PRINTDLG structure memset( &pd, 0, sizeof( pd ) ); // Define properties of the PRINTDLG structure pd.lStructSize = sizeof( pd ); // PD_RETURNDEFAULT causes the PrintDlg function to automatically use the properties from // the default printer. PD_RETURNDC causes the function to return the device context // for the printer. This device context allows us to print a label pd.Flags = PD_RETURNDEFAULT | PD_RETURNDC; // These two structures must be NULL to use the PD_RETURNDC flag. // Do this explicitly, just in case pd.hDevMode = NULL; pd.hDevNames = NULL; // Retrieve the Device Context. It will be accessible as a member of the PRINTDLG structure if(!PrintDlg( &pd )) { // Get the error from the common dialog box // Error code will not work properly with FormatMessage, so use this instead. iErrCode = CommDlgExtendedError(); } if(iErrCode == 0) { // Initialize the DOCINFO structure memset(&di, 0, sizeof(di)); di.cbSize = sizeof(DOCINFO); di.lpszDocName = "Label"; di.lpszOutput = (LPTSTR) NULL; di.lpszDatatype = "raw"; di.fwType = 0; // Start a document in the print spooler if(!StartDoc(pd.hDC, &di)) { iErrCode = GetLastError(); } // end if } if(iErrCode == 0) { // Start a new page in the print spooler if(!StartPage(pd.hDC)) { iErrCode = GetLastError(); } // end if ! } if(iErrCode == 0) { if(!TextOut(pd.hDC, 1, 1, data, strlen(data))) { iErrCode = GetLastError(); } } // De-allocate commandList // Let the print spooler know that the page is done EndPage(pd.hDC); // Let the print spooler know that the document is done EndDoc(pd.hDC); // Delete the Device Context DeleteDC(pd.hDC); // Now reset our default printer. // Set the Default Printer back to the original. ret = SetDefaultPrinter(origDefault); PA_ReturnLong(params, (LONG_PTR)iErrCode); } else { PA_ReturnLong(params, (LONG_PTR)GetLastError()); } // end if }//end function