From: Dana Jansens Date: Wed, 8 Jan 2003 16:29:39 +0000 (+0000) Subject: add a -single argument which only runs on a single screen X-Git-Url: https://git.brokenzipper.com/gitweb?a=commitdiff_plain;h=368d981208c7f7d7865faac129160f277eb8d4e7;p=chaz%2Fopenbox add a -single argument which only runs on a single screen --- diff --git a/scripts/builtins.py b/scripts/builtins.py index d87bf3d8..9020859e 100644 --- a/scripts/builtins.py +++ b/scripts/builtins.py @@ -175,6 +175,25 @@ def send_to_prev_desktop(data, no_wrap=0, follow=1): send_to_desktop(data, d) if follow: change_desktop(data, d) + +def state_above(data, add=2): + """Toggles, adds or removes the 'above' state on a window.""" + client = Openbox_findClient(openbox, data.window()) + if not client: return + root = ScreenInfo_rootWindow(OBDisplay_screenInfo(data.screen())) + window = OBClient_window(client) + send_client_msg(root, OBProperty_net_wm_state, window, add, + OBProperty_net_wm_state_above) + +def state_below(data, add=2): + """Toggles, adds or removes the 'below' state on a window.""" + client = Openbox_findClient(openbox, data.window()) + if not client: return + root = ScreenInfo_rootWindow(OBDisplay_screenInfo(data.screen())) + window = OBClient_window(client) + print OBProperty_net_wm_state_below + send_client_msg(root, OBProperty_net_wm_state, window, add, + OBProperty_net_wm_state_below) ######################################### ### Convenience functions for scripts ### diff --git a/src/client.cc b/src/client.cc index 2c6ec5e5..3b2a1438 100644 --- a/src/client.cc +++ b/src/client.cc @@ -754,6 +754,7 @@ void OBClient::setState(StateAction action, long data1, long data2) _above = true; } else if (state == property->atom(otk::OBProperty::net_wm_state_below)) { + printf("Setting below\n"); if (_below) continue; _below = true; } @@ -897,7 +898,11 @@ void OBClient::clientMessageHandler(const XClientMessageEvent &e) } else if (e.message_type == property->atom(otk::OBProperty::net_wm_state)) { // can't compress these #ifdef DEBUG - printf("net_wm_state for 0x%lx\n", _window); + printf("below=%ld above=%ld\n", property->atom(otk::OBProperty::net_wm_state_below), property->atom(otk::OBProperty::net_wm_state_above)); + printf("net_wm_state %s %ld %ld for 0x%lx\n", + (e.data.l[0] == 0 ? "Remove" : e.data.l[0] == 1 ? "Add" : + e.data.l[0] == 2 ? "Toggle" : "INVALID"), + e.data.l[1], e.data.l[2], _window); #endif setState((StateAction)e.data.l[0], e.data.l[1], e.data.l[2]); } else if (e.message_type == diff --git a/src/openbox.cc b/src/openbox.cc index dda52848..a15f369b 100644 --- a/src/openbox.cc +++ b/src/openbox.cc @@ -144,12 +144,15 @@ Openbox::Openbox(int argc, char **argv) // initialize all the screens OBScreen *screen; - screen = new OBScreen(0); - if (screen->managed()) { - _screens.push_back(screen); - // XXX: "change to" the first workspace on the screen to initialize stuff - } else - delete screen; + int i = _single ? DefaultScreen(otk::OBDisplay::display) : 0; + int max = _single ? i + 1 : ScreenCount(otk::OBDisplay::display); + for (; i < max; ++i) { + screen = new OBScreen(i); + if (screen->managed()) + _screens.push_back(screen); + else + delete screen; + } if (_screens.empty()) { printf(_("No screens were found without a window manager. Exiting.\n")); @@ -240,6 +243,8 @@ void Openbox::parseCommandLine(int argc, char **argv) _scriptfilepath = argv[i]; } else if (arg == "-sync") { _sync = true; + } else if (arg == "-single") { + _single = true; } else if (arg == "-version") { showVersion(); ::exit(0); @@ -272,9 +277,11 @@ void Openbox::showHelp() printf(_("Usage: %s [OPTIONS...]\n\ Options:\n\ -display use display connection.\n\ + -single run on a single screen (default is to run every one).\n\ -rc use alternate resource file.\n\ -menu use alternate menu file.\n\ -script use alternate startup script file.\n\ + -sync run in synchronous mode (for debugging).\n\ -version display version and exit.\n\ -help display this help text and exit.\n\n"), _argv[0]); diff --git a/src/openbox.hh b/src/openbox.hh index 80b20a16..c5dc3527 100644 --- a/src/openbox.hh +++ b/src/openbox.hh @@ -93,6 +93,10 @@ private: char *_displayreq; //! The value of argv, i.e. how this application was executed char **_argv; + //! Run the application in synchronous mode? (for debugging) + bool _sync; + //! Should Openbox run on a single screen or on all available screens? + bool _single; //! A list of all managed clients ClientMap _clients; @@ -121,9 +125,6 @@ private: //! The interface through which keys/buttons are grabbed and handled OBBindings *_bindings; - //! Run the application in synchronous mode? (for debugging) - bool _sync; - //! The running state of the window manager RunState _state;