Как заставить окно переместиться в верхнюю часть других окон в Gnome, когда это окно уже имеет фокус? - PullRequest
1 голос
/ 04 июня 2009

У меня есть приложение, которое отправляет фокус на другие окна, но эти окна автоматически не отображаются на переднем плане, то есть поверх всех других окон. Где я могу настроить параметры моего оконного менеджера так, чтобы это было поведение по умолчанию?

В частности, я использую сочетания клавиш Ctrl-0 и Ctrl-Shft-0 в MATLAB IDE для перемещения между окном команд и окном редактора, и, хотя кажется, что фокус перенесен, новое окно не перерисовывается автоматически Сам на переднем плане.

Спасибо

Ответы [ 3 ]

2 голосов
/ 10 июня 2009

Не уверен в том, что ключ связывает руку, которая это делает, но если вы нажмете alt-click на окне (которое позволяет перетаскивать окно), оно должно выйти вперед.

Как предполагает codeDr, MATLAB также плохо переносит перерисовку своих окон. Если вы рисуете фигуру во время выполнения кода, фигура не будет обновляться, если вы не выполните drawnow или у вас не будет подобной паузы в выполнении, чтобы позволить перерисовать графический интерфейс. Поскольку мы говорим о MATLAB, команда figure также приведет к тому, что указанная фигура выйдет вперед (на самом деле, сложнее получить ее до , а не вперед). Таким образом, вы можете сделать figure(gcf), чтобы вывести текущую фигуру на передний план, или сохранить номер фигуры с помощью h = figure;, а затем потом сделать figure(h). Кстати, если вы хотите переключать текущие цифры без переключения фокуса, set(0, 'CurrentFigure', h) должен установить h на текущую цифру.

1 голос
/ 16 июля 2009

В вашем оконном менеджере (возможно, в Metacity?) Реализована защита от кражи фокуса, чтобы мошеннические приложения не открывали окна, которые могли бы помешать вашему вводу текста. Matlab должен поднять свое окно и задать фокус ввода с правильной отметкой времени. Если это делается из обработчика события KeyPress, отметка времени для установки фокуса ввода будет являться отметкой времени из события KeyPress (то есть отметкой времени сгенерированного пользователем события, которое вызвало повышение / фокусирование окна).

Чтобы вежливо передать фокус ввода окну, Google для _NET_ACTIVE_WINDOW.

0 голосов
/ 09 июня 2009

Обычно, когда окно не перерисовывается, это означает, что основной цикл приложения не запускается для обновления окна. Может быть, Matlab выполняет какие-то вычисления или выполняет действия с диском, когда вы переключаетесь между окнами?

...