diff -Nur fluxbox-0.1.14/nls/C/fluxbox.m fluxbox-screens-0.1.14/nls/C/fluxbox.m --- fluxbox-0.1.14/nls/C/fluxbox.m 2001-12-11 21:47:35.000000000 +0100 +++ fluxbox-screens-0.1.14/nls/C/fluxbox.m 2003-01-03 23:48:03.000000000 +0100 @@ -4,3 +4,5 @@ # Blackbox::Blackbox: no managable screens found, aborting\n $ #MapRequest # Blackbox::process_event: MapRequest for 0x%lx\n +$ #ScreensOutOfRange +# Fluxbox::Fluxbox: you can only choose screen 0 - %d\n diff -Nur fluxbox-0.1.14/nls/C/main.m fluxbox-screens-0.1.14/nls/C/main.m --- fluxbox-0.1.14/nls/C/main.m 2002-02-02 22:54:31.000000000 +0100 +++ fluxbox-screens-0.1.14/nls/C/main.m 2003-01-03 23:46:32.000000000 +0100 @@ -9,6 +9,7 @@ $ #Usage # Fluxbox %s: (c) 2001-2002 Henrik Kinnunen\n\n\ -display \t\tuse display connection.\n\ + -screen \t\tuse specified local screen.\n\ -rc \t\t\tuse alternate resource file.\n\ -version\t\t\tdisplay version and exit.\n\ -help\t\t\t\tdisplay this help text and exit.\n\n @@ -19,3 +20,5 @@ Shape:\t\t\t%s\n\ Slit:\t\t\t\t%s\n\ 8bpp Ordered Dithering:\t%s\n\n +$ #SCREENRequiresArg +# warning: '-screen' requires an argument\n diff -Nur fluxbox-0.1.14/nls/blackbox-nls.hh fluxbox-screens-0.1.14/nls/blackbox-nls.hh --- fluxbox-0.1.14/nls/blackbox-nls.hh 2002-12-08 03:20:38.000000000 +0100 +++ fluxbox-screens-0.1.14/nls/blackbox-nls.hh 2003-01-03 23:41:30.000000000 +0100 @@ -136,6 +136,7 @@ blackboxSet = 0xd, blackboxNoManagableScreens = 0x1, blackboxMapRequest = 0x2, + blackboxScreensOutOfRange = 0x3, CommonSet = 0xe, CommonYes = 0x1, @@ -171,6 +172,7 @@ mainWarnDisplaySet = 0x3, mainUsage = 0x4, mainCompileOptions = 0x5, + mainSCREENRequiresArg = 0x6, bsetrootSet = 0x10, bsetrootMustSpecify = 0x1, diff -Nur fluxbox-0.1.14/src/fluxbox.cc fluxbox-screens-0.1.14/src/fluxbox.cc --- fluxbox-0.1.14/src/fluxbox.cc 2002-12-08 16:55:32.000000000 +0100 +++ fluxbox-screens-0.1.14/src/fluxbox.cc 2003-01-03 23:58:25.000000000 +0100 @@ -121,6 +121,7 @@ #include #include +extern signed int sessionScreen; using namespace std; using namespace FbTk; @@ -381,33 +382,59 @@ int i; load_rc(); + I18n *i18n = I18n::instance(); //allocate screens - for (i = 0; i < getNumberOfScreens(); i++) { + if (sessionScreen == -1) { + for (i = 0; i < getNumberOfScreens(); i++) { + char scrname[128], altscrname[128]; + sprintf(scrname, "session.screen%d", i); + sprintf(altscrname, "session.Screen%d", i); + BScreen *screen = new BScreen(m_screen_rm, scrname, altscrname, i); + if (! screen->isScreenManaged()) { + delete screen; + continue; + } + screenList.push_back(screen); + + // attach screen signals to this + screen->currentWorkspaceSig().attach(this); + screen->workspaceCountSig().attach(this); + screen->workspaceNamesSig().attach(this); + screen->clientListSig().attach(this); + + // initiate atomhandler for screen specific stuff + for (size_t atomh=0; atomhinitForScreen(*screen); + } + } + } else if ((sessionScreen < -1) || (sessionScreen >= getNumberOfScreens())) { + fprintf(stderr, + i18n->getMessage( + FBNLS::blackboxSet, FBNLS::blackboxScreensOutOfRange, + "Fluxbox::Fluxbox: you can only choose screen 0 - %d\n"), getNumberOfScreens()); + exit(1); + } else { char scrname[128], altscrname[128]; - sprintf(scrname, "session.screen%d", i); - sprintf(altscrname, "session.Screen%d", i); - BScreen *screen = new BScreen(m_screen_rm, scrname, altscrname, i); + sprintf(scrname, "session.screen%d", sessionScreen); + sprintf(altscrname, "session.Screen%d", sessionScreen); + BScreen *screen = new BScreen(m_screen_rm, scrname, altscrname, sessionScreen); if (! screen->isScreenManaged()) { - delete screen; - continue; + delete screen; } screenList.push_back(screen); - + // attach screen signals to this screen->currentWorkspaceSig().attach(this); screen->workspaceCountSig().attach(this); screen->workspaceNamesSig().attach(this); screen->clientListSig().attach(this); - + // initiate atomhandler for screen specific stuff for (size_t atomh=0; atomhinitForScreen(*screen); } - - } - I18n *i18n = I18n::instance(); if (screenList.size() == 0) { fprintf(stderr, i18n-> diff -Nur fluxbox-0.1.14/src/main.cc fluxbox-screens-0.1.14/src/main.cc --- fluxbox-0.1.14/src/main.cc 2002-12-08 16:46:41.000000000 +0100 +++ fluxbox-screens-0.1.14/src/main.cc 2003-01-03 23:38:01.000000000 +0100 @@ -67,6 +67,8 @@ #endif //!DEBUG_UDS +signed int sessionScreen = -1; + const char *getNLSYesNoMsg(bool val) { if (val) { return I18n::instance()->getMessage( @@ -128,6 +130,19 @@ "warning: couldn't set environment variable 'DISPLAY'\n")); perror("putenv()"); } + } else if (strcmp(argv[i], "-screen") == 0) { + // check for -screen option... to run on a specified local screen, not on all + // specified in your XF86Config + + if ((++i) >= argc) { + fprintf(stderr, + i18n->getMessage( + FBNLS::mainSet, FBNLS::mainSCREENRequiresArg, + "warning: '-screen' requires an argument\n")); + exit(1); + } + sessionScreen = atoi(argv[i]); + } else if (strcmp(argv[i], "-version") == 0) { // print current version string printf("Fluxbox %s : (c) 2001-2002 Henrik Kinnunen \n\n", @@ -140,6 +155,7 @@ FBNLS::mainSet, FBNLS::mainUsage, "Fluxbox %s : (c) 2001-2002 Henrik Kinnunen\n\n" " -display \t\tuse display connection.\n" + " -screen \t\tuse specified local screen.\n" " -rc \t\t\tuse alternate resource file.\n" " -version\t\t\tdisplay version and exit.\n" " -help\t\t\t\tdisplay this help text and exit.\n\n"),