From d88cfc3aa03be7da05096f5a068af14153ca7708 Mon Sep 17 00:00:00 2001 From: "timeless%mac.com" Date: Fri, 27 Apr 2001 21:27:13 +0000 Subject: [PATCH] Bugzilla Bug 20196 Add Xlib support for --display r=bz, sr=blizzard git-svn-id: svn://10.0.0.236/trunk@93305 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/widget/src/xlib/nsAppShell.cpp | 45 +++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/mozilla/widget/src/xlib/nsAppShell.cpp b/mozilla/widget/src/xlib/nsAppShell.cpp index 5462c864dd4..35d86ad1ae9 100644 --- a/mozilla/widget/src/xlib/nsAppShell.cpp +++ b/mozilla/widget/src/xlib/nsAppShell.cpp @@ -41,6 +41,7 @@ #include "nsIWidget.h" #include "nsIEventQueueService.h" #include "nsIServiceManager.h" +#include "nsICmdLineService.h" #include "nsIDragService.h" #include "nsIDragSessionXlib.h" #include "nsITimer.h" @@ -55,6 +56,7 @@ static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID); static NS_DEFINE_IID(kIEventQueueServiceIID, NS_IEVENTQUEUESERVICE_IID); +static NS_DEFINE_CID(kCmdLineServiceCID, NS_COMMANDLINE_SERVICE_CID); static NS_DEFINE_IID(kCDragServiceCID, NS_DRAGSERVICE_CID); #ifndef MOZ_MONOLITHIC_TOOLKIT @@ -230,6 +232,10 @@ static void CallProcessTimeoutsProc(Display *aDisplay) #endif /* MOZ_MONOLITHIC_TOOLKIT */ } +#define COMPARE_FLAG1( a,b) ((b)[0]=='-' && !strcmp((a), &(b)[1])) +#define COMPARE_FLAG2( a,b) ((b)[0]=='-' && (b)[1]=='-' && !strcmp((a), &(b)[2])) +#define COMPARE_FLAG12(a,b) ((b)[0]=='-' && !strcmp((a), (b)[1]=='-'?&(b)[2]:&(b)[1])) + #define ALL_EVENTS ( KeyPressMask | KeyReleaseMask | ButtonPressMask | \ ButtonReleaseMask | EnterWindowMask | LeaveWindowMask | \ PointerMotionMask | PointerMotionHintMask | Button1MotionMask | \ @@ -253,17 +259,48 @@ nsAppShell::nsAppShell() NS_IMPL_ISUPPORTS1(nsAppShell, nsIAppShell) -NS_METHOD nsAppShell::Create(int* argc, char ** argv) +NS_METHOD nsAppShell::Create(int* bac, char ** bav) { char *mArgv[1]; int mArgc = 0; XtAppContext app_context; + int argc = bac ? *bac : 0; + char **argv = bav; + nsresult rv; + + nsCOMPtr cmdLineArgs = do_GetService(kCmdLineServiceCID); + if (cmdLineArgs) { + rv = cmdLineArgs->GetArgc(&argc); + if(NS_FAILED(rv)) + argc = bac ? *bac : 0; + + rv = cmdLineArgs->GetArgv(&argv); + if(NS_FAILED(rv)) + argv = bav; + } + + char *displayName=nsnull; + bool synchronize=false; + + for (int i = 0; ++i < argc-1; ) + /*allow both --display and -display*/ + if (COMPARE_FLAG12 ("display",argv[i])){ + displayName=argv[i+1]; + break; + } + for (int i = 0; ++i < argc; ) + if (COMPARE_FLAG2 ("sync",argv[i])){ + synchronize=true; + break; + } + // Open the display if (mDisplay == nsnull) { - mDisplay = XOpenDisplay(NULL); + mDisplay = XOpenDisplay(displayName); - //XSynchronize(mDisplay, True); + if (synchronize) + XSynchronize(mDisplay, True); // Requires XSynchronize(mDisplay, True); To stop X buffering. Use this // to make debugging easier. KenF @@ -271,7 +308,7 @@ NS_METHOD nsAppShell::Create(int* argc, char ** argv) { fprintf(stderr, "%s: Cannot connect to X server %s\n", argv[0], - XDisplayName(NULL)); + XDisplayName(displayName)); exit(1); }