Gtk get root windows

Gtk get root windows

GTK+ Reference Manual

GtkWindow

GtkWindow Окно верхнего уровня, которое может содержать другие виджеты

Краткое описание


Иерархия объектов


Обеспечивающие интерфейсы

GtkWindow обеспечивают AtkImplementorIface.

Свойства


Сигналы


Описание


Детали


GtkWindow


gtk_window_new ()

Создаёт новый GtkWindow, который является окном верхнего уровня способным содержать другие виджеты. Практически всегда тип окна должен быть GTK_WINDOW_TOPLEVEL. Если вы создаёте что-то вроде всплывающего меню с нуля (что является плохой идеей, просто используйте GtkMenu), вы могли бы использовать GTK_WINDOW_POPUP. GTK_WINDOW_POPUP не для диалогов, хотя в некоторых других программных инструментах диалоги называются «popups». В GTK+, GTK_WINDOW_POPUP означает всплывающее меню или всплывающую подсказку. В X11, всплывающими окнами не может управлять window manager.

Если вам нужно простое окно (окно без границ), используйте gtk_window_set_decorated() , не используйте GTK_WINDOW_POPUP.

gtk_window_set_title ()

Устанавливает заголовок GtkWindow. Заголовок окна будет отображён в панели заголовка; в X Window System, панель заголовка представляется window manager, может изменяться согласно точной конфигурации пользователя. Заголовок должен помогать пользователю отличать одно окно от других открытых окон. Хороший заголовок может включать имя приложения и текущемго файла например.

gtk_window_set_wmclass ()

Не используйте эту функцию. Она устанавливает X Window System «class» и «name» подсказки для окна. Согласно ICCCM, вы должны всегда устанавливать их в тоже самое значение для всех окон в приложении и GTK+ устанавливает их в эти значения по умолчанию, поэтому вызывать эту функцию бессмысленно. Однако вы можете вызвать gtk_window_set_role() для каждого окна в вашем приложении, чтобы помочь управляющему сессиями (session manager). Установка функции позволяет менеджеру окон запоминать позицию окна при запуске сохранённых сессий.

Подсказка имени окна

Подсказка класса окна

gtk_window_set_policy ()


Внимание

gtk_window_set_policy устарела и не нужно её использовать во вновь создаваемом коде. Используйте вместо неё gtk_window_set_resizable() .

Изменения размеров окна верхнего уровня и попытки пользователя изменять размер. В действительности есть только два способа вызова этой функции:

gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, FALSE) означает, что окно позволяет изменять размер пользователю (user-resizable).

gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, TRUE) означает, что размер окна управляется программой (program-controlled) и должно просто соответствовать текущемму размеру запроса дочерних окон.

Первая политика по умолчанию, то есть по умолчанию окна предназначены для изменения размера пользователями.

Основная функции должна быть например: void gtk_window_set_resizable (GtkWindow* window, gboolean setting); . почему GTK+ 2.0 и представляет gtk_window_set_resizable() , которую вы должны использовать вместо gtk_window_set_policy() .

Если установлено TRUE , параметр allow_grow позволяет пользователю разворачивать окно сверх размера запрошенного его дочерними виджетами. Если allow_grow равно TRUE , убедитесь что ваши дочерние виджеты работают верно при изменении размера окна.

Окно верхнего уровня будет всегда изменять размер для соответствия запрошенному размеру дочерних виджетов. Это значит, что если вы добавите дочерние виджеты, окно верхнего уровня растянется для их размещения. Однако, обычно окно верхнего уровня не сжимается если его дочерние виджеты запрашивают меньший размер; параметр auto_shrink заставляет окно уплотизменяться, когда дочерние виджеты получают слишком много пространства. auto_shrink обычно используется со второй из двух выше упомянутых политик окон. Таким образом, установите auto_shrink в TRUE если вы хотите иметь фиксированное окно, всегда оптимизированного размера, установленного вашей программой.

Читайте также:  Manjaro linux обновление ядра

Заметьте, auto_shrink не делает ничего, если allow_shrink и allow_grow установлены в FALSE .

Не одна из двух предложенных политик поведения окна не устанавливает параметр allow_shrink в значение TRUE . Если allow_shrink равен TRUE , пользователь может уменьшать окно таким образом, что его дочерние виджеты не получат запрашиваемый размер полностью; по существу это плохая ситуация, потому что виджеты будут выглядеть неправильно если это случиться. Кроме того GTK+ имеет тенденцию повторно разворачивать окно если размер пересчитан по какой нибудь причине. Поэтому allow_shrink должен всегда быть установлен в FALSE .

Иногда, когда вы думаете, что нужно использовать allow_shrink , реальная проблема заключается в некотором определённом дочернем виджете который запрашивает слишком много пространства, поэтому пользователь не может достаточно уменьшить окно. Возможно вызвать gtk_widget_set_size_request() на дочернем виджете, сделав этот запрашиваемый размер слишком большим. Вместо установки размеров дочерних виджетов, рассмотрите использование gtk_window_set_default_size() таким образом, чтобы этот дочерний виджет получал больше распределения чем запрашивается.

Может ли пользователь уменьшать окно сверх размера запроса

Может ли пользователь увеличивать окно сверх размера запроса

Возвращать ли автоматически размер окна к запрашиваемому если оно является большим

gtk_window_set_resizable ()

Устанавливает может ли пользователь изменять размер окна. По умолчанию окна позволяют пользователю менять размер.

TRUE если пользователь может изменять размер этого окна

gtk_window_get_resizable ()

TRUE если пользователь может изменять размер этого окна

gtk_window_add_accel_group ()

Присоединяет accel_group к window , так что вызов gtk_accel_groups_activate() на window активизирует акселераторы в accel_group .

Окно к которому прикрепляется акселератор

gtk_window_remove_accel_group ()


gtk_window_position


Внимание

gtk_window_position устарела и не нужно её использовать во вновь создаваемом коде.

gtk_window_activate_focus ()

Активирует текущий виджет окна находящийся в фокусе.

TRUE если данный виджет активирован.

gtk_window_activate_default ()

Активирует виджет по умолчанию в данном окне, если текущий виджет находящийся в фокусе не был сконфигурирован получать действие по умолчанию (смотрите GTK_RECEIVES_DEFAULT в GtkWidgetFlags), когда виджет в фокусе активирован.

TRUE если данный виджет активирован.

gtk_window_set_modal ()

Устанавливает окно модальным или нет. Модальные окна предотвращают взаимодействие с другими окнами в том же самом приложении. Чтобы сохранять модальные диалоги на переднем плане основного окна приложения, используйте gtk_window_set_transient_for() чтобы сделать диалог переходным для родителя; большинство window managers будут запрещать понижение диалога ниже родительского.

Является ли окно модальным

gtk_window_set_default_size ()

Устанавливает размер окна по умолчанию. Если окно «natural» размера (его запрашиваемый размер) будет больше чем значение по умолчанию, то значение по умолчанию игнорируется. Наиболее обычно, если размер по умолчанию не подчиняется подсказкам геометрии окна ( gtk_window_set_geometry_hints() может использоваться для их явной установки), размер по умолчанию будет прикреплён к ближайшему допустимому размеру.

В отличии от gtk_widget_set_size_request() , которая устанавливает запрашиваемый размер для виджета и таким образом препятствует пользователям уменьшать окно, эта функция только устанавливает начальный размер, так же, как если бы пользователь самостоятельно изменил размер. Пользователи могут уменьшать окно как обычно. Установка размера по умолчанию равного -1, это способ использовать по умолчанию размер «natural» (запрашиваемый размер окна).

Для большего контроля начального размера окна и как работает изменение размера, изучите gtk_window_set_geometry_hints() .

Для некоторых ситуаций, gtk_window_resize() является более соответствующей функцией. gtk_window_resize() изменяет текущий размер окна, а не размер используемый на начальном дисплее. gtk_window_resize() всегда оказывает воздействие непосредственно на окно, не на геометрию виджета.

Читайте также:  Добавление исключения брандмауэра windows

Размер по умолчанию используется только при отображении окна в первый раз; если окно скрыть и снова развернуть, то будет использован запомненный размер до скрытия, вместо использования размера по умолчанию.

Окна не могут фактически быть размером 0x0, они должны быть по крайней мере 1×1, но помещение 0 для width и height позволяется, результатом будет размер по умолчанию 1×1.

Ширина в пикселах, или -1 для сброса ширины по умолчанию

Высота в пикселах, или -1 для сброса высоты по умолчанию

gtk_window_set_geometry_hints ()

Эта функция устанавливает подсказки о том, как пользователь может изменять размер окна. Вы можете установить минимальный и максимальный размер окна; позволить изменение размера приращением (например для xterm, вы можете только изменять размер размером символов); аспект соотношения и многое другое. Смотрите структуру GdkGeometry.

Подсказки геометрии применяемые к виджету

Структура содержащая информацию о геометрии

Маска указывающая на какое поле структуры должно быть обращено внимание

gtk_window_set_gravity ()

Уравновешенность окна определяют координаты помещенные в gtk_window_move() . Смотрите gtk_window_move() и GdkGravity для более подробной информации.

По умолчанию уравновешивание окна имеет значение GDK_GRAVITY_NORTH_WEST которое будет естественно «делать то, что подразумевается.»

gtk_window_get_gravity ()

Получает значение установленное gtk_window_set_gravity() .

gtk_window_set_position ()

Устанавливает ограничения позиции окна. Если старое или новое ограничение равно GTK_WIN_POS_CENTER_ALWAYS , то это будет причиной перестановки окна для удовлетворения нового ограничения.

gtk_window_set_transient_for ()

Диалоговые окна должны быть установлены переходящими для основного окна приложения, которым они были порождены. Это позволяет window managers например сохранять диалог на переднем плане относительно основного окна, или распределить диалог поверх основного окна. gtk_dialog_new_with_buttons() и другие функции удобств в GTK+ будут иногда вызывать gtk_window_set_transient_for() от вашего имени.

В Windows, эта функция помещает дочернее окно поверх родительского, почти также сделал бы менеджер окон в X.

gtk_window_set_destroy_with_parent ()

Если setting равно TRUE , то когда закрытие переходного окна родителя для window , так же закроет window непосредственно. Это полезно для диалогов которые не должны существовать без основного окна с которым они ассоциированы.

Закрыть ли window с его переходным родителем

gtk_window_set_screen ()

Устанавливает GdkScreen на котором отображается window ; если окно уже отображено, это отменит отображение и отобразит на новом экране.

Начиная с версии 2.2

gtk_window_get_screen ()

Возвращает GdkScreen ассоциированный с window .

Начиная с версии 2.2

gtk_window_is_active ()

Определяет, является ли окно частью текущемго активного верхнего уровня. (Таким образом, окно верхнего уровня получает нажатие клавиши.) Значение TRUE возвращается, если активно непосредственно окно верхнего уровня, а так же если, скажем, GtkPlug встроен в активный верхний уровень. Вы можете использовать эту функцию, если хотите отрисовывать виджет по разному в активном и не активном окне. Смотрите gtk_window_has_toplevel_focus()

TRUE если окно — часть текущемго активного окна.

Начиная с версии 2.4

gtk_window_has_toplevel_focus ()

Определяет сфокусирован ли ввод в пределах данного GtkWindow. Для реальных окон верхнего уровня, это идентично gtk_window_is_active() , но для встроенных окон, как например GtkPlug, результаты будут отличаться.

TRUE если ввод сфокусирован в пределах данного GtkWindow

Начиная с версии 2.4

gtk_window_list_toplevels ()

Возвращает список всех существующих окон верхнего уровня. На виджеты в списке нет индивидуальных ссылок. Если вы хотите выполнить итерацию через список и выполнить действия, вовлекающие callbacks-функции, которые могли бы уничтожить виджеты, вы должны сначала вызвать g_list_foreach (result, (GFunc)g_object_ref, NULL) , а затем убрать ссылки на все виджеты.

Root window

last modified July 13, 2020

In this part of the Cairo graphics tutorial, we will work with the root window. The root window is the desktop window where we usually have icon shortcuts.

Читайте также:  Виртуал бокс для линукс убунту

It is possible to manipulate with the root window. From the programmer’s perspective, it is just a special kind of a window.

Transparent window

Our first example will create a transparent window. We will see, what it beneath of the window object.

To create a transparent window, we get the visual of the screen object and set it for our window. In the on_draw() method, we draw over the screen’s visual object. This creates an illusion of partial transparency.

We must set the application to be painted on.

The gdk_screen_get_default() method returns the screen object.

From the screen window, we get its visual. The visual contains the low level display information.

Not all displays support this operation. Therefore, we check if our screen supports composition and the returned visual is not None. We set the screen’s visual to be the visual of our window.

We use a partially transparent source to draw over the screen window. The CAIRO_OPERATOR_SOURCE creates a composition operation where we draw over the source. Which is the screen window. To get full transparency, we set the alpha value to 0 or use the CAIRO_OPERATOR_CLEAR operator.

Figure: Transparent window

Taking a screenshot

The root window is also essential in taking a screenshot.

The example captures a snapshot of the entire screen. In this example, we do not use the full GTK windowing system. We use Cairo and GDK libraries to do the job.

The gdk_init() initializes the GDK library and connects to the windowing system.

We get the root window with the gdk_get_default_root_window() function call.

We determine the width and the height of the root window.

An empty image surface is created. It has the size of the root window.

We get a pixbuf from the root window using the gdk_pixbuf_get_from_window() function call. A pixbuf is an object that describes an image in memory.

In the above code lines, we create a Cairo drawing context on the image surface that we have created earlier. We place the pixbuf on the drawing context and paint it on the surface.

The image surface is written to a PNG image using the write_to_png() method.

We clean up resources.

Showing a message

In the third example, we will show a message on the desktop window.

The code displays a message label on the root window.

We use the CAIRO_OPERATOR_CLEAR operator to clear the background of the window. Then we set the CAIRO_OPERATOR_OVER to let the label widget be drawn.

We will be manipulating the application window, so we make it paintable.

Implementing this window hint removes window borders and decoration.

We keep the application always at the bottom, just over the root window.

We set the visual of the screen to be the visual of our application.

We create a message label.

With the help of the Pango module, we select a specific font for the text.

The label is put onto the window.

We modify the text to be in white colour.

Figure: Message on the root window

In this chapter we have worked with the desktop window in Cairo.

Оцените статью