all repos — openbox @ 368d981208c7f7d7865faac129160f277eb8d4e7

openbox fork - make it a bit more like ryudo

add a -single argument which only runs on a single screen
Dana Jansens danakj@orodu.net
commit

368d981208c7f7d7865faac129160f277eb8d4e7

parent

dbf58ef2b61fe46f15a697ad151ee868c2461f6f

4 files changed, 42 insertions(+), 10 deletions(-)

jump to
M scripts/builtins.pyscripts/builtins.py

@@ -175,6 +175,25 @@ d = n - 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 ###
M src/client.ccsrc/client.cc

@@ -754,6 +754,7 @@ if (_above) continue;

_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 @@ setDesktop(e.data.l[0]); // use the original event

} 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 ==
M src/openbox.ccsrc/openbox.cc

@@ -144,12 +144,15 @@ python_exec(_scriptfilepath.c_str());

// 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 @@ else

_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 @@ // print program usage and command line options

printf(_("Usage: %s [OPTIONS...]\n\ Options:\n\ -display <string> use display connection.\n\ + -single run on a single screen (default is to run every one).\n\ -rc <string> use alternate resource file.\n\ -menu <string> use alternate menu file.\n\ -script <string> 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]);
M src/openbox.hhsrc/openbox.hh

@@ -93,6 +93,10 @@ //! The display requested by the user, or null to use the DISPLAY env var

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;

@@ -120,9 +124,6 @@ OBActions *_actions;

//! 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;