Дочернее окно gtk с украшениями на стороне клиента показывает только кнопку закрытия - PullRequest
0 голосов
/ 08 мая 2020

Описание проблемы: В дочернем окне ниже не отображаются кнопки сворачивания или разворачивания - только кнопка закрытия.

Это Gtk версии 3.22.30 на Ubuntu 18.04, Python 3.6.9. Оба windows используют украшения окна на стороне клиента. Дочернее окно устанавливается как Переходный для главного окна.

Main Window With Child Window

Шаги для воспроизведения:

Сначала , сохраните содержимое файла поляны ниже как missing_buttons.glade.

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
  <requires lib="gtk+" version="3.20"/>
  <object class="GtkWindow" id="main_window">
    <property name="can_focus">False</property>
    <property name="default_width">640</property>
    <property name="default_height">480</property>
    <child type="titlebar">
      <object class="GtkHeaderBar" id="main_headerbar">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="title" translatable="yes">Main Window</property>
        <property name="has_subtitle">False</property>
        <property name="show_close_button">True</property>
      </object>
    </child>
    <child>
      <placeholder/>
    </child>
  </object>
  <object class="GtkWindow" id="child_window">
    <property name="can_focus">False</property>
    <property name="default_width">320</property>
    <property name="default_height">200</property>
    <property name="type_hint">dialog</property>
    <property name="transient_for">main_window</property>
    <child type="titlebar">
      <object class="GtkHeaderBar" id="child_headerbar">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="title" translatable="yes">Child Window</property>
        <property name="has_subtitle">False</property>
        <property name="show_close_button">True</property>
        <property name="decoration_layout">:minimize,maximize,close</property>
      </object>
    </child>
    <child>
      <placeholder/>
    </child>
  </object>
</interface>

Обратите внимание, что в приведенном выше файле поляны дочернее окно явно запрашивает кнопки свертывания, развертывания и закрытия (слегка вырезано ниже, как не делал редактор) t как XML встроенный)

property name = "decoration_layout">: свернуть, развернуть , закрыть

Во-вторых, в той же папке сохраните этот код как missing_buttons .py:

import os.path
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

print("Gtk Version {0}.{1}.{2}".format(Gtk.MAJOR_VERSION, Gtk.MINOR_VERSION, Gtk.MICRO_VERSION))
glade_file_name = os.path.join(os.path.dirname(__file__), "missing_buttons.glade")
gtk_builder = Gtk.Builder()
gtk_builder.add_from_file(glade_file_name)
main_window = gtk_builder.get_object("main_window")
main_window.show_all()
child_window = gtk_builder.get_object("child_window")
child_window.show_all()
Gtk.main()

В-третьих, запустите код.

$ python3 missing_buttons.py

Ожидаемый результат: в дочернем окне есть кнопки свертывания, разворачивания и закрытия. Фактический результат: у дочернего окна есть только кнопка закрытия.

Это ожидаемое поведение? Жук? Есть ли обходной путь? Я хотел бы иметь возможность свернуть дочернее окно.

Заранее спасибо.

...