Author: laplace Date: 2009-10-12 22:01:09 +0200 (Mon, 12 Oct 2009) New Revision: 33561 Changeset: http://dev.haiku-os.org/changeset/33561/haiku Modified: haiku/trunk/src/add-ons/print/transports/lpr/Jamfile haiku/trunk/src/add-ons/print/transports/lpr/LprSetupDlg.cpp haiku/trunk/src/add-ons/print/transports/lpr/LprSetupDlg.h haiku/trunk/src/add-ons/print/transports/lpr/LprTransport.cpp haiku/trunk/src/add-ons/print/transports/lpr/LprTransport.h Log: * Fixed crash at cancelation. * Simplified class LprSetupDlg using DialogWindow. Modified: haiku/trunk/src/add-ons/print/transports/lpr/Jamfile =================================================================== --- haiku/trunk/src/add-ons/print/transports/lpr/Jamfile 2009-10-12 19:42:50 UTC (rev 33560) +++ haiku/trunk/src/add-ons/print/transports/lpr/Jamfile 2009-10-12 20:01:09 UTC (rev 33561) @@ -2,6 +2,7 @@ SetSubDirSupportedPlatformsBeOSCompatible ; +SubDirHdrs [ FDirName $(HAIKU_TOP) headers libs print libprint ] ; SubDirHdrs [ FDirName $(HAIKU_TOP) src add-ons print transports shared ] ; Addon LPR : @@ -13,7 +14,11 @@ Socket.o SocketStream.o DbgMsg.o - : be $(TARGET_NETWORK_LIBS) $(TARGET_LIBSTDC++) + : + be + libprint.a + $(TARGET_NETWORK_LIBS) + $(TARGET_LIBSTDC++) ; ObjectReferences Modified: haiku/trunk/src/add-ons/print/transports/lpr/LprSetupDlg.cpp =================================================================== --- haiku/trunk/src/add-ons/print/transports/lpr/LprSetupDlg.cpp 2009-10-12 19:42:50 UTC (rev 33560) +++ haiku/trunk/src/add-ons/print/transports/lpr/LprSetupDlg.cpp 2009-10-12 20:01:09 UTC (rev 33561) @@ -146,12 +146,15 @@ return false; } - fDir->WriteAttr(LPR_SERVER_NAME, B_STRING_TYPE, 0, fServer->Text(), strlen(fServer->Text()) + 1); - fDir->WriteAttr(LPR_QUEUE_NAME, B_STRING_TYPE, 0, fQueue->Text(), strlen(fQueue->Text()) + 1); + fDir->WriteAttr(LPR_SERVER_NAME, B_STRING_TYPE, 0, fServer->Text(), + strlen(fServer->Text()) + 1); + fDir->WriteAttr(LPR_QUEUE_NAME, B_STRING_TYPE, 0, fQueue->Text(), + strlen(fQueue->Text()) + 1); return true; } - BAlert *alert = new BAlert("", "please input parameters.", "OK"); + BAlert *alert = new BAlert("", "Please enter server address and printer" + "queue name.", "OK"); alert->Go(); return false; } @@ -159,66 +162,32 @@ LprSetupDlg::LprSetupDlg(BDirectory *dir) : - BWindow(BRect(100, 100, 100 + DLG_WIDTH, 100 + DLG_HEIGHT), + DialogWindow(BRect(100, 100, 100 + DLG_WIDTH, 100 + DLG_HEIGHT), "LPR Setup", B_TITLED_WINDOW_LOOK, B_MODAL_APP_WINDOW_FEEL, B_NOT_RESIZABLE | B_NOT_MINIMIZABLE | B_NOT_ZOOMABLE) { - fResult = 0; - - Lock(); - LprSetupView *view = new LprSetupView(Bounds(), dir); - AddChild(view); - Unlock(); - - fExitSemaphore = create_sem(0, "lprSetupSem"); + fSetupView = new LprSetupView(Bounds(), dir); + AddChild(fSetupView); } -bool -LprSetupDlg::QuitRequested() -{ - fResult = B_ERROR; - release_sem(fExitSemaphore); - return true; -} - - void LprSetupDlg::MessageReceived(BMessage *msg) { - bool success; - switch (msg->what) { case M_OK: - Lock(); - success = ((LprSetupView *)ChildAt(0))->UpdateViewData(); - Unlock(); - if (success) { - fResult = B_NO_ERROR; - release_sem(fExitSemaphore); + if (fSetupView->UpdateViewData()) { + SetResult(B_OK); + PostMessage(B_QUIT_REQUESTED); } break; case M_CANCEL: - fResult = B_ERROR; - release_sem(fExitSemaphore); + SetResult(B_ERROR); + PostMessage(B_QUIT_REQUESTED); break; default: - BWindow::MessageReceived(msg); - break; + DialogWindow::MessageReceived(msg); } } - - -int -LprSetupDlg::Go() -{ - Show(); - acquire_sem(fExitSemaphore); - delete_sem(fExitSemaphore); - int value = fResult; - Lock(); - Quit(); - return value; -} Modified: haiku/trunk/src/add-ons/print/transports/lpr/LprSetupDlg.h =================================================================== --- haiku/trunk/src/add-ons/print/transports/lpr/LprSetupDlg.h 2009-10-12 19:42:50 UTC (rev 33560) +++ haiku/trunk/src/add-ons/print/transports/lpr/LprSetupDlg.h 2009-10-12 20:01:09 UTC (rev 33561) @@ -6,19 +6,20 @@ #include <Window.h> +#include "DialogWindow.h" + class BDirectory; +class LprSetupView; -class LprSetupDlg : public BWindow { + +class LprSetupDlg : public DialogWindow { public: LprSetupDlg(BDirectory *); ~LprSetupDlg() {} - virtual bool QuitRequested(); virtual void MessageReceived(BMessage *message); - int Go(); private: - int fResult; - sem_id fExitSemaphore; + LprSetupView* fSetupView; }; #endif // __LprSetupDlg_H Modified: haiku/trunk/src/add-ons/print/transports/lpr/LprTransport.cpp =================================================================== --- haiku/trunk/src/add-ons/print/transports/lpr/LprTransport.cpp 2009-10-12 19:42:50 UTC (rev 33560) +++ haiku/trunk/src/add-ons/print/transports/lpr/LprTransport.cpp 2009-10-12 20:01:09 UTC (rev 33561) @@ -77,8 +77,20 @@ LprTransport::~LprTransport() { + if (!fError) + _SendFile(); + + if (fFile[0] != '\0') + unlink(fFile); +} + + +void +LprTransport::_SendFile() +{ char hostname[128]; - gethostname(hostname, sizeof(hostname)); + if (gethostname(hostname, sizeof(hostname)) != B_OK) + strcpy(hostname, "localhost"); ostringstream cfname; cfname << "cfA" << setw(3) << setfill('0') << fJobId << hostname; @@ -116,8 +128,6 @@ BAlert *alert = new BAlert("", err.what(), "OK"); alert->Go(); } - - unlink(fFile); } Modified: haiku/trunk/src/add-ons/print/transports/lpr/LprTransport.h =================================================================== --- haiku/trunk/src/add-ons/print/transports/lpr/LprTransport.h 2009-10-12 19:42:50 UTC (rev 33560) +++ haiku/trunk/src/add-ons/print/transports/lpr/LprTransport.h 2009-10-12 20:01:09 UTC (rev 33561) @@ -21,6 +21,8 @@ bool fail() const; private: + void _SendFile(); + char fServer[256]; char fQueue[256]; char fFile[256];