LINUX.ORG.RU

IceWM focus models

 


0

1

Смотрю в мануал IceWM,видим несколько focus models. https://ice-wm.org/manual/icewm-4.html По умолчанию работает первая. Что написать в конфиге чтобы включилась вторая? Писать RaiseOnFocus=0 и FocusMode=0 пробовал. Всё равно при получении фокуса окно всплывает наверх. Хочу чтобы не всплывало. Надо будет - я его сам всплыву.

P.S. IceWM 2.1.2,тот что в комплекте Дебиан 11.



Последнее исправление: watchcat382 (всего исправлений: 2)

В Меню есть настройки фокуса, так что необязательно лезть в конфиги.

И еще, если не путаю, настройки могут быть завязаны на темы (они тоже меняются в Меню). Но это не точно, давно не юзал IceWM.

krasnh ★★★★★
()
Ответ на: комментарий от anonymous

сейчас в моде 3.7.x

Из-за одной настройки лень возиться с перекомпиляцией и переустановкой. Остальное всё отлично работает,глюков нет. А эту настройку я просто не знаю как правильно в конфиг прописать.

watchcat382
() автор топика
Ответ на: комментарий от dmitry237

FocusMode=0 - это кастомная настройка вот этими опциями:

A focus mode that is defined by the following ten options: ClickToFocus, FocusOnAppRaise, RequestFocusOnAppRaise, RaiseOnFocus, RaiseOnClickClient, FocusChangesWorkspace, FocusOnMap, FocusOnMapTransient, FocusOnMapTransientActive, MapInactiveOnTop.

All non-Custom focus modes override these ten options. Комментарии в конфиге:

#
# Focus mode (0=custom, 1=click, 2=sloppy, 3=explicit, 4=strict, 5=quiet)
#
FocusMode=0

Я выставил так:

#  Focus windows by clicking  - фокус управляется явно кликом,
#  если стоит 0 то окна хаотично переключаются просто при 
#  смещении указателя мыши
ClickToFocus=1 # 0/1

#  Focus windows when application requests to raise
FocusOnAppRaise=1 # 0/1

#  Request focus (flashing in taskbar) when application requests raise
# RequestFocusOnAppRaise=1 # 0/1

#  Raise windows when focused
#  А вот это то,от чего как раз я хочу избавиться - 
# автовсплывание при получении фокуса. 
# Или я чего-то не понимаю,но "0" тут 
#  работать не хочет.
#
RaiseOnFocus=0 # 0/1

#  Focus window when client area clicked
# FocusOnClickClient=1 # 0/1

#  Raise window when client area clicked
# RaiseOnClickClient=1 # 0/1

#  Raise window when title bar is clicked
# RaiseOnClickTitleBar=1 # 0/1

#  Raise window when frame button is clicked
# RaiseOnClickButton=1 # 0/1

#  Raise window when frame border is clicked
# RaiseOnClickFrame=1 # 0/1

#  Lower the active window when clicked again
# LowerOnClickWhenRaised=0 # 0/1

#  Pass focusing click on client area to client
# PassFirstClickToClient=1 # 0/1

#  Change to the workspace of newly focused windows
# FocusChangesWorkspace=0 # 0/1

#  Move newly focused windows to current workspace
# FocusCurrentWorkspace=0 # 0/1

#  Focus normal window when initially mapped
# FocusOnMap=1 # 0/1

#  Focus dialog window when initially mapped
# FocusOnMapTransient=0 # 0/1

#  Focus dialog window when initially mapped only if parent frame focused
# FocusOnMapTransientActive=1 # 0/1

Остальные опции осталены по умолчанию.

Вобщем-то почти то что нужно делает FocusMode=3 (explicit) но тогда «свежеоткрытые» окна фокуса не получают,что тоже не удобно. То есть при этой настройке по всей видимости используется FocusOnAppRaise=0

watchcat382
() автор топика
Последнее исправление: watchcat382 (всего исправлений: 3)

А кто это два чеса назад в соседней теме о бесполезности тайлинговых говновм раздувал щеки, типа еслив ты юзер комуктера, ты обязан знать и уметь его настроить хоть ночью тебя разбуди? Не выходит каменный цветок, Данила мастер? Ну, записываю тебя в нубьё лошарное.

FishHook
()
Ответ на: комментарий от FishHook

о бесполезности тайлинговых говновм раздувал щеки

Тайлинговые действительно вещь очень на любителя.

еслив ты юзер комуктера, ты обязан знать и уметь его настроить

Собственно,именно та тема меня и подвигла попробовать получить от IceWM вот такую странную хотелку,там же и возникшую. До того четверть века использовал IceWM но идея возникла только сейчас в процессе обсуждения разных способов управления окнами. Там же в качестве преимущества тайлиновых WM выдвигалась возможность одновременно видеть два окна. Вот я и задумался - а обязательно ли для этого тайлинг или можно реализовать такую штуку и с перекрывающимися окнами? Причем видно же что такая возможность заявлена - непонятно только не работает вообще или только у меня.

А смысл в том,что имея маленькое окно находящееся поверх большого переключаем фокус на большое окно чтобы туда что-нибудь вводить, при этом находящееся сверху маленькое окно теряет фокус но не исчезает. При настройках по умолчанию - оно исчезает с экрана.

watchcat382
() автор топика
Последнее исправление: watchcat382 (всего исправлений: 1)
Ответ на: комментарий от watchcat382

Хочу чтобы не всплывало

Глянул старое iso у себя с icewm 1.9.1 - в Меню есть раздел «Фокус» с параметрами. «Липкий фокус с помощью мыши» - искомое тобой, т.к. меняет фокус не поднимая окна.

Меню - Фокус >
Фокус по щелчку
Явный фокус
Липкий фокус с помощью мыши
Строгий фокус с помощью мыши
Спокойный липкий фокус
Свое

krasnh ★★★★★
()
Ответ на: комментарий от krasnh

Липкий фокус с помощью мыши

меняет фокус не поднимая окна

Вот только при этом фокус начинает меняться не по щелчку,а хаотически при перемещениях указателя мыши. То есть устанавливается ClickToFocus=0. А хочется чтобы становилось активным то окно в которое ткнул,но при этом не всплывало. Потому я и пытался выставить кастомный режим настройки

FocusMode=0 

и явно указать:

ClickToFocus=1 
RaiseOnFocus=0 
FocusOnAppRaise=1

А оно так не хочет.

watchcat382
() автор топика
Ответ на: комментарий от watchcat382

Я думал ты уже решил выше проблему. )

фокус начинает меняться не по щелчку,а хаотически при перемещениях указателя мыши

Лично мне, удобней менять фокус перемещением мыши, при этом окно поднимается. Главное выставить приемлемую задержку. А вот кликом, не нравится.

krasnh ★★★★★
()
Ответ на: комментарий от watchcat382

А хочется чтобы становилось активным то окно в которое ткнул,но при этом не всплывало.

Это режим ExplicitFocus. Окно получает ввод по клику, но не всплывает наверх.

тогда «свежеоткрытые» окна фокуса не получают,что тоже не удобно.

Тогда режим Custom с этими опциями в настройке:

ClickToFocus=1
FocusOnMap=1

До того четверть века использовал IceWM

А ты точно компьютер-то в глаза видел до сегодняшнего дня?

А смысл в том,что имея маленькое окно находящееся поверх большого переключаем фокус на большое окно чтобы туда что-нибудь вводить, при этом находящееся сверху маленькое окно теряет фокус но не исчезает.

Это называется "Always on Top", и для человека, видевшего компьютер последнюю четверть века, очень странно не знать этого термина. Этим пользуются для отдельных окон без необходимости черезжопить фокус и вывод на передний план на постоянку. Для отдельного окна в IceWM это делается через ПКМ по заголовку окна -> Layer -> OnTop.

LamerOk ★★★★★
()
Последнее исправление: LamerOk (всего исправлений: 1)
Ответ на: комментарий от LamerOk

Это режим ExplicitFocus. Окно получает ввод по клику, но не всплывает наверх.

Да, я выше писал что в таком варианте работает. Но! При этом «свежеоткрытые» окна фокус не получают. Нажимаю у почтовика sylpheed ответить на письмо, окно ответа открывается но не только не получает фокус а даже и на экране не нарисовалось пока в панели в него не ткнуть.

Тогда режим Custom с этими опциями в настройке ClickToFocus=1 FocusOnMap=1

Эти обе стоят. И RaiseOnFocus=0. Но при получении фокуса щелчком - окно всплывает. А хочется чтобы как в explicit - не всплывало. Собственно в чем и вопрос - в custom режиме RaiseOnFocus не работает,в смысле поведение окон не завист 0 или 1 установлено - всплывают всегда.

Это называется «Always on Top» Для отдельного окна в IceWM это делается через ПКМ по заголовку окна -> Layer -> OnTop.

Это пришлось бы делать для каждого окна для которого потребовалось такое поведение. А если бы РАБОТАЛА заявленная настройка RaiseOnFocus - то переключать вручную Always on Top было бы не нужно.

Еще раз обращаю внимание - нужная настройка ЕСТЬ,но в custom режиме НИЧЕГО не менает. В отличие от например ClickToFocus которая меняет поведение как и задумано. То есть сам по себе custom режим включается и работает.

черезжопить фокус

Я же не употребляю таких выражений по поводу хаотичного перключения фокуса при движении указателя мыши при ClickToFocus=0 Вон выше коллега отписался что ему это нужно. А я вообще не представляю как так работать когда малейшее случайное перемещение мыши приводит к переключениям фокуса без подтверждения этого действия. А вот мне потребовалась настройка RaiseOnFocus - а она работать не хочет. Понять бы это только у меня или вообще. Проверил считывается ли конфиг, для этого надо из командной строки запустить icewm -p и будут напечатаны активные настройки. RaiseOnFocus=0,то есть из конфига прочиталась.

Скачал дебиановский пакет с иходниками,заглянул в них. В «предустановленных» режимах RaiseOnFocus устанавливается в соответствующие значения,нашел это место(wmapp.cc). И соответственно - работает. А вот почему в custom переустановка из конфига не работает - не знаю. Можно попробовать взять и в предустановленном режиме умолчание поменять и посмотреть что будет,но это исходники собирать. Не знаю насколько сложно icewm собирается и что для этого требует. Потом можно будет как-нибудь попробовать. Не всё и не всегда собирается легко и просто(я бы сказал - мало что).

watchcat382
() автор топика

Вот такие настройки в режиме по умолчанию, имитирующем винды:

 case FocusClick: /* click to focus */
        clickFocus = true;
        // focusOnAppRaise = false;
        requestFocusOnAppRaise = true;
        raiseOnFocus = true;
        raiseOnClickClient = true;
        focusOnMap = true;
        mapInactiveOnTop = true;
        focusChangesWorkspace = false;
        focusOnMapTransient = false;
        focusOnMapTransientActive = true;
        break;

Очевидно что при клике окно получает фокус и всплывает

А вот такие настройки в режиме explicit focus:

 case FocusExplicit: /* explicit focus */
        clickFocus = true;
        // focusOnAppRaise = false;
        requestFocusOnAppRaise = false;
        raiseOnFocus = false;
        raiseOnClickClient = false;
        focusOnMap = false;
        mapInactiveOnTop = true;
        focusChangesWorkspace = false;
        focusOnMapTransient = false;
        focusOnMapTransientActive = true;
        break;

Окна получаю фокус по клику но НЕ всплывают - именно как хотелось. Но! «свежеоткрытое» окно программы не нарисовалось на экране пока по нему в панели не ткнуть. Оно кстати запросом фокуса «мигало» в панели. Но не нарисовалось.

Так какое сочетание настроек выставить в custom режиме чтобы с фокусом было как в explicit,но свежеоткрытое окно всё же нарисовалось? Судя по миганию - фокус оно получить таки пытается.

watchcat382
() автор топика

Продолжение экспериментов.

Выставил в custom режиме настройки точно так как они выставляются в explicit. Всплывания окон при получении фокуса нет. Более того, вышеупомянутое «свежеоткрытое» окно ответа на письмо в почтовике нарисовалось на экране поверх основного его окна. Но вводить ничего не дает - фокуса нет, а в панели мигает запрос на получение фокуса. То есть поведение немного отличается от включения режима explicit,причем в желаемую сторону. Вот что бы теперь еще подкрутить чтобы свежеоткрытое окно еще и фокус само получило?

watchcat382
() автор топика
Ответ на: комментарий от watchcat382

Но при получении фокуса щелчком - окно всплывает.

Не всплывает.

Ещё раз настройки:

.icewm/focus_mode:

# Focus mode (0=custom, 1=click, 2=sloppy, 3=explicit, 4=strict, 5=quiet)
#
FocusMode=0

.icewm/preferences:

ClickToFocus=1
FocusOnMap=1

И RaiseOnFocus=0.

Удали всё лишнее.

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

Но при получении фокуса щелчком - окно всплывает.

Не всплывает.

Ах, да. Это, конечно, само собой разумеется, но судя по твоему шизоидному щитпостингу, возможно не для тебя.

Речь идёт о щелчке по клиентской части («содержимому») окна. Оно всплывает, если щелчёк по заголовку окна.

LamerOk ★★★★★
()
Последнее исправление: LamerOk (всего исправлений: 1)
Ответ на: комментарий от watchcat382

И я таки это победил!

Как оказалось - надо выставить настройки в custom режиме так:

ClickToFocus=1
FocusOnAppRaise=1
RequestFocusOnAppRaise=1 
RaiseOnFocus=0 
RaiseOnClickClient=0 
FocusOnMap=1 

Вот теперь работает так как мне хотелось. Похоже что на нежелательное всплывание окон влияла настройка RaiseOnClickClient. И это не глюк программы,а неоднозначность документации. Потому что (ну как я понял) Click может делать два действия - это «поднимать» окно и переключать фокус. И они не обязательно делаются вместе. Я-то сначала думал что передача фокуса приводит к всплытию, а нет, это «параллельные» действия - и выключить надо было именно второе,всплытие по клику,а не только всплытие по фокусу.

По всей видимости вопрос можно считать решенным. Хотя конечно надо будет еще понаблюдать за поведением разных программ.

watchcat382
() автор топика
Последнее исправление: watchcat382 (всего исправлений: 2)
Ответ на: комментарий от LamerOk

Оно всплывает, если щелчёк по заголовку окна.

Я экспериментировал с маленьким окном xterm открытым поверх большого окна браузера. И клик по браузеру,НЕ по его заголовку, приводил к его всплытию,и соответственно исчезновению с экрана xterm. А вот теперь - не приводит. Только фокус переключается. Именно как и хотелось. Переключение фокуса теперь отвязано от всплытия/утопления окон.

собой разумеется,возможно не для тебя.

Для разных людей «само собой разумеются» весьма разные вещи,это совершенно нормально. Зато получилось настроить так как мне надо без необходимости специально включать отдельным окнам Always on Top

watchcat382
() автор топика
Ответ на: комментарий от FishHook

если ты юзер комуктера, ты обязан знать и уметь его настроить

Таки настроил в точности как хотелось :)

Тайлинг всё-таки не нужен - одновременно видеть на экране можно несколько окон даже если они частично одно поверх другого. Ну например одно окно перекрывает временно ненужную часть другого. Что позволяет обойтись без принудельного ресайза,почти неизбежного при использовании тайловых WM.

Сейчас еще немного клавиатурное управление подпилю под такой вариант настройки чтобы за мышь меньше хвататься.

watchcat382
() автор топика