История изменений
Исправление Zubok, (текущая версия) :
X-сервер шлет сообщение awesome, что исчез выход, awesome реагирует пересчетом раскладки. Поэтому окна перекидываются на оставшийся монитор.
Не-а... Просто при --off одного монитора осом тупо перезапускается, и перекидывает все окна на один монитор, который собственно, остаётся один.
Так все равно он это делает по сообщению от расширения RandR. Не важно как. Вернее, важно. То, что он перезапускает awesome, выглядит грубоватым, конечно. Исходник awesome:
/** The randr screen change notify event handler.
* \param ev The event.
*/
static void
event_handle_randr_screen_change_notify(xcb_randr_screen_change_notify_event_t *ev)
{
/* Code of XRRUpdateConfiguration Xlib function ported to XCB
* (only the code relevant to RRScreenChangeNotify) as the latter
* doesn't provide this kind of function */
if(ev->rotation & (XCB_RANDR_ROTATION_ROTATE_90 | XCB_RANDR_ROTATION_ROTATE_270))
xcb_randr_set_screen_size(globalconf.connection, ev->root, ev->height, ev->width,
ev->mheight, ev->mwidth);
else
xcb_randr_set_screen_size(globalconf.connection, ev->root, ev->width, ev->height,
ev->mwidth, ev->mheight);
/* XRRUpdateConfiguration also executes the following instruction
* but it's not useful because SubpixelOrder is not used at all at
* the moment
*
* XRenderSetSubpixelOrder(dpy, snum, scevent->subpixel_order);
*/
awesome_restart();
}
Получается, что awesome при получении notification oт RandR принудительно перезапускается. Скриптом это не управляется.
Можешь проверить, действительно ли это так: через утилиту xrandr просто меняешь разрешение экрана на какое-то пониже. В этом случае awesome получит сообщение. awesome перерисовался или перезапустился?
Исправление Zubok, :
X-сервер шлет сообщение awesome, что исчез выход, awesome реагирует пересчетом раскладки. Поэтому окна перекидываются на оставшийся монитор.
Не-а... Просто при --off одного монитора осом тупо перезапускается, и перекидывает все окна на один монитор, который собственно, остаётся один.
Так все равно он это делает по сообщению от расширения RandR. Не важно как. Вернее, важно. То, что он перезапускает awesome, выглядит грубоватым, конечно. Исходник awesome:
/** The randr screen change notify event handler.
* \param ev The event.
*/
static void
event_handle_randr_screen_change_notify(xcb_randr_screen_change_notify_event_t *ev)
{
/* Code of XRRUpdateConfiguration Xlib function ported to XCB
* (only the code relevant to RRScreenChangeNotify) as the latter
* doesn't provide this kind of function */
if(ev->rotation & (XCB_RANDR_ROTATION_ROTATE_90 | XCB_RANDR_ROTATION_ROTATE_270))
xcb_randr_set_screen_size(globalconf.connection, ev->root, ev->height, ev->width,
ev->mheight, ev->mwidth);
else
xcb_randr_set_screen_size(globalconf.connection, ev->root, ev->width, ev->height,
ev->mwidth, ev->mheight);
/* XRRUpdateConfiguration also executes the following instruction
* but it's not useful because SubpixelOrder is not used at all at
* the moment
*
* XRenderSetSubpixelOrder(dpy, snum, scevent->subpixel_order);
*/
awesome_restart();
}
Получается, что awesome при получении notification on RandR принудительно перезапускается. Скриптом это не управляется.
Можешь проверить, действительно ли это так: через утилиту xrandr просто меняешь разрешение экрана на какое-то пониже. В этом случае awesome получит сообщение. awesome перерисовался или перезапустился?
Исходная версия Zubok, :
X-сервер шлет сообщение awesome, что исчез выход, awesome реагирует пересчетом раскладки. Поэтому окна перекидываются на оставшийся монитор.
Не-а... Просто при --off одного монитора осом тупо перезапускается, и перекидывает все окна на один монитор, который собственно, остаётся один.
Так все равно он это делает по сообщению от расширения RandR. Не важно как. Вернее, важно. То, что он перезапускает awesome, выглядит грубоватым, конечно. Исходник awesome:
/** The randr screen change notify event handler.
* \param ev The event.
*/
static void
event_handle_randr_screen_change_notify(xcb_randr_screen_change_notify_event_t *ev)
{
/* Code of XRRUpdateConfiguration Xlib function ported to XCB
* (only the code relevant to RRScreenChangeNotify) as the latter
* doesn't provide this kind of function */
if(ev->rotation & (XCB_RANDR_ROTATION_ROTATE_90 | XCB_RANDR_ROTATION_ROTATE_270))
xcb_randr_set_screen_size(globalconf.connection, ev->root, ev->height, ev->width,
ev->mheight, ev->mwidth);
else
xcb_randr_set_screen_size(globalconf.connection, ev->root, ev->width, ev->height,
ev->mwidth, ev->mheight);
/* XRRUpdateConfiguration also executes the following instruction
* but it's not useful because SubpixelOrder is not used at all at
* the moment
*
* XRenderSetSubpixelOrder(dpy, snum, scevent->subpixel_order);
*/
awesome_restart();
}
Получается, что awesome при получении notification on RandR принудительно перезапускается. Скриптом это не управляется.
Можешь проверить, действительно ли это так: через утилиту xrandr просто меняешь разрешение экрана на какое-то пониже. В этом случае awesome получит сообщение. awesome перерисовался или перезапустился?