GTK :: Socket и Gtk :: Включение неожиданного поведения в Gnome и FVWM2

Следующий код работает нормально, если он запущен внутри FVWM2. Но если вы смените рабочий стол на Gnome, тогда встроенное окно будет уничтожено, а не встроено.

Почему это? Что мне не хватает? …

Код следует, но в основном все, что он делает, это fork. В дочернем мы создаем окно VPython и позволяем ему бездействовать навсегда. В родительском окне мы создаем окно GTK, узнаем, что такое идентификатор окна дочернего окна, и попытайтесь встроить его в GTK :: Socket.

Обратите внимание, что часть VPython, возможно, не имеет к этому отношения.

#!/usr/bin/env python # -*- coding: utf-8 -*- import subprocess import sys import os import re import time from visual import * def find_window_id (title): """Gets the OpenGL window ID.""" pattern = re.compile('0x[0-9abcdef]{7}') proc = subprocess.Popen(['xwininfo', '-name', title], stdout=subprocess.PIPE, stderr=subprocess.PIPE) errors = proc.stderr.readlines() if errors: return None for line in proc.stdout.readlines(): match = pattern.findall(line) if len(match): return long(match[0], 16) return None class Setting (): """VPython/OpenGL class.""" def __init__ (self, w=256, h=256, title='OpenGL via VPython'): """Initiator.""" self.width = w self.height = h self.title = title self.scene = display.get_selected() self.scene.title = self.title self.scene.width = self.width self.scene.height = self.height self.sphere = sphere() class GTKDisplay (): def __init__ (self, winID): """Initiator: Draws the GTK GUI.""" import gtk import pygtk self.OpenGLWindowID = winID window = gtk.Window() window.show() socket = gtk.Socket() socket.show() window.add(socket) window.connect("destroy", lambda w: gtk.main_quit()) socket.add_id(long(self.OpenGLWindowID)) gtk.main() def main (): """Main entry point.""" name = 'sphere OpenGL window' child_pid = os.fork() if 0 == child_pid: sut = Setting(title=name) else: winID = None while not winID: time.sleep(.1) winID = find_window_id(name) try: gui = GTKDisplay(winID) except KeyboardInterrupt, err: print '\nAdieu monde cruel!' if __name__ == "__main__": main() 

PS: Да, это продолжение этого вопроса и этого .

  • Сценарий переключения Wi-Fi не работает должным образом через i3
  • Помогите с диагностикой проблемы с замораживанием mdm / Cinnamon?
  • Kde: как постоянно привязывать приложение к рабочему столу / активности?
  • Как выполнить программу в Xfce и использовать другую тему xfwm4, отличную от стандартной?
  • Получение Mint MATE (Marco?), Чтобы поместить окно-закрыть X в фактический угол, а не только рядом с ним
  • Установить диспетчер окон по умолчанию (i3) в OpenSuse
  • Нужен совет при выборе плитки WM
  • Как я могу определить, есть ли я в текстовой области?
  • Не привязывайте окна к краю при перемещении между мониторами
  • Конфигурируемый размер окна терминала не создает окон терминала с правильным размером
  • Какой простой Window Manager используется для веб-разработки?
  • Interesting Posts

    Изменения разрешения ttyUSB0 после перезапуска

    Почему `cp` и` rm` обрабатывают каталоги отдельно?

    Как принудительно использовать SMTP-серверы в Alpine?

    Список файлов на основе даты и времени в имени файла

    Почему `lsof -i` не показывает открытое соединение, которое перечисляет` netstat -n`?

    Исправлена ​​точка монтирования внешнего usb hdd

    ifconfig -a, не показывающий eth0

    Как я могу использовать ISC KEA DHCP-сервер (DHCPv4) для проталкивания маршрутов клиентам?

    Переименуйте все папки, удалив определенную часть первых цифр или символов из имени

    Отложенный процесс задания «Остановлен» все еще отображается в рабочей таблице

    При попытке открыть / dev / mtd2 для доступа для чтения / записи: разрешение отклонено

    Карта справа от Alt до Alt вместо AltGr

    awk, sed, grep, perl … которые распечатываются в этом случае?

    отсутствует ошибка `] 'в скрипте unix shell

    Как запустить приложение с определенными групповыми разрешениями?

    Linux и Unix - лучшая ОС в мире.