window: make it a template class
In order to prepare ourselves for the future changes, having the window as a template class is hugely advantageous for we'll be able to modify the interface much more quickly and cleanly. This commit makes the window a template class, and only that. No behavioral changes, nor new features were introduced here. https://bugzilla.gnome.org/show_bug.cgi?id=766922
This commit is contained in:
parent
6f38ca83c8
commit
55cc4c3a91
4 changed files with 285 additions and 167 deletions
|
@ -149,6 +149,7 @@ EXTRA_DIST = \
|
|||
$(completion_in_files) \
|
||||
gnome-control-center.gresource.xml \
|
||||
help-overlay.ui \
|
||||
window.ui \
|
||||
$(resource_files) \
|
||||
list-panel.sh
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/*
|
||||
* Copyright (c) 2009, 2010 Intel, Inc.
|
||||
* Copyright (c) 2010 Red Hat, Inc.
|
||||
* Copyright (c) 2016 Endless, Inc.
|
||||
*
|
||||
* The Control Center is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by the
|
||||
|
@ -53,9 +54,7 @@ struct _CcWindow
|
|||
|
||||
GtkWidget *stack;
|
||||
GtkWidget *header;
|
||||
GtkWidget *main_hbox;
|
||||
GtkWidget *main_vbox;
|
||||
GtkWidget *scrolled_window;
|
||||
GtkWidget *search_scrolled;
|
||||
GtkWidget *previous_button;
|
||||
GtkWidget *top_right_box;
|
||||
|
@ -1017,6 +1016,39 @@ _shell_get_toplevel (CcShell *shell)
|
|||
return GTK_WIDGET (shell);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_window_set_cb (GObject *object,
|
||||
GParamSpec *pspec,
|
||||
CcWindow *self)
|
||||
{
|
||||
GdkWindow *window;
|
||||
gchar *str;
|
||||
|
||||
if (!GDK_IS_X11_DISPLAY (gdk_display_get_default ()))
|
||||
return;
|
||||
|
||||
window = gtk_widget_get_window (GTK_WIDGET (self));
|
||||
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
str = g_strdup_printf ("%u", (guint) GDK_WINDOW_XID (window));
|
||||
g_setenv ("GNOME_CONTROL_CENTER_XID", str, TRUE);
|
||||
g_free (str);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
window_map_event_cb (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
CcWindow *self)
|
||||
{
|
||||
/* If focus ends up in a category icon view one of the items is
|
||||
* immediately selected which looks odd when we are starting up, so
|
||||
* we explicitly unset the focus here. */
|
||||
gtk_window_set_focus (GTK_WINDOW (self), NULL);
|
||||
return GDK_EVENT_PROPAGATE;
|
||||
}
|
||||
|
||||
/* GObject Implementation */
|
||||
static void
|
||||
cc_window_get_property (GObject *object,
|
||||
|
@ -1104,13 +1136,6 @@ cc_window_dispose (GObject *object)
|
|||
g_clear_object (&self->store);
|
||||
g_clear_object (&self->search_filter);
|
||||
g_clear_object (&self->active_panel);
|
||||
g_clear_object (&self->header_sizegroup);
|
||||
|
||||
if (self->previous_panels)
|
||||
{
|
||||
g_queue_free_full (self->previous_panels, g_free);
|
||||
self->previous_panels = NULL;
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (cc_window_parent_class)->dispose (object);
|
||||
}
|
||||
|
@ -1120,6 +1145,12 @@ cc_window_finalize (GObject *object)
|
|||
{
|
||||
CcWindow *self = CC_WINDOW (object);
|
||||
|
||||
if (self->previous_panels)
|
||||
{
|
||||
g_queue_free_full (self->previous_panels, g_free);
|
||||
self->previous_panels = NULL;
|
||||
}
|
||||
|
||||
g_free (self->filter_string);
|
||||
g_strfreev (self->filter_terms);
|
||||
|
||||
|
@ -1137,6 +1168,7 @@ cc_shell_iface_init (CcShellInterface *iface)
|
|||
static void
|
||||
cc_window_class_init (CcWindowClass *klass)
|
||||
{
|
||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->get_property = cc_window_get_property;
|
||||
|
@ -1145,6 +1177,26 @@ cc_window_class_init (CcWindowClass *klass)
|
|||
object_class->finalize = cc_window_finalize;
|
||||
|
||||
g_object_class_override_property (object_class, PROP_ACTIVE_PANEL, "active-panel");
|
||||
|
||||
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/ControlCenter/gtk/window.ui");
|
||||
|
||||
gtk_widget_class_bind_template_child (widget_class, CcWindow, header);
|
||||
gtk_widget_class_bind_template_child (widget_class, CcWindow, header_sizegroup);
|
||||
gtk_widget_class_bind_template_child (widget_class, CcWindow, lock_button);
|
||||
gtk_widget_class_bind_template_child (widget_class, CcWindow, main_vbox);
|
||||
gtk_widget_class_bind_template_child (widget_class, CcWindow, previous_button);
|
||||
gtk_widget_class_bind_template_child (widget_class, CcWindow, search_bar);
|
||||
gtk_widget_class_bind_template_child (widget_class, CcWindow, search_button);
|
||||
gtk_widget_class_bind_template_child (widget_class, CcWindow, search_entry);
|
||||
gtk_widget_class_bind_template_child (widget_class, CcWindow, stack);
|
||||
gtk_widget_class_bind_template_child (widget_class, CcWindow, top_right_box);
|
||||
|
||||
gtk_widget_class_bind_template_callback (widget_class, previous_button_clicked_cb);
|
||||
gtk_widget_class_bind_template_callback (widget_class, gdk_window_set_cb);
|
||||
gtk_widget_class_bind_template_callback (widget_class, search_entry_changed_cb);
|
||||
gtk_widget_class_bind_template_callback (widget_class, search_entry_key_press_event_cb);
|
||||
gtk_widget_class_bind_template_callback (widget_class, stack_page_notify_cb);
|
||||
gtk_widget_class_bind_template_callback (widget_class, window_map_event_cb);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@ -1231,85 +1283,6 @@ window_key_press_event (GtkWidget *win,
|
|||
return retval;
|
||||
}
|
||||
|
||||
static void
|
||||
application_set_cb (GObject *object,
|
||||
GParamSpec *pspec,
|
||||
CcWindow *self)
|
||||
{
|
||||
/* update small screen settings now - to avoid visible resizing, we want
|
||||
* to do it before showing the window, and GtkApplicationWindow cannot be
|
||||
* realized unless its application property has been set */
|
||||
if (gtk_window_get_application (GTK_WINDOW (self)))
|
||||
{
|
||||
gtk_widget_realize (GTK_WIDGET (self));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_window_set_cb (GObject *object,
|
||||
GParamSpec *pspec,
|
||||
CcWindow *self)
|
||||
{
|
||||
GdkWindow *window;
|
||||
gchar *str;
|
||||
|
||||
if (!GDK_IS_X11_DISPLAY (gdk_display_get_default ()))
|
||||
return;
|
||||
|
||||
window = gtk_widget_get_window (GTK_WIDGET (self));
|
||||
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
str = g_strdup_printf ("%u", (guint) GDK_WINDOW_XID (window));
|
||||
g_setenv ("GNOME_CONTROL_CENTER_XID", str, TRUE);
|
||||
g_free (str);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
window_map_event_cb (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
CcWindow *self)
|
||||
{
|
||||
/* If focus ends up in a category icon view one of the items is
|
||||
* immediately selected which looks odd when we are starting up, so
|
||||
* we explicitly unset the focus here. */
|
||||
gtk_window_set_focus (GTK_WINDOW (self), NULL);
|
||||
return GDK_EVENT_PROPAGATE;
|
||||
}
|
||||
|
||||
static void
|
||||
create_main_page (CcWindow *self)
|
||||
{
|
||||
GtkStyleContext *context;
|
||||
|
||||
self->scrolled_window = gtk_scrolled_window_new (NULL, NULL);
|
||||
context = gtk_widget_get_style_context (self->scrolled_window);
|
||||
gtk_style_context_add_class (context, "view");
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (self->scrolled_window),
|
||||
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (self->main_hbox), self->scrolled_window, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (self->main_hbox), gtk_separator_new (GTK_ORIENTATION_VERTICAL), FALSE, FALSE, 0);
|
||||
|
||||
/* FIXME: this is just a placeholder widget to avoid breaking the code */
|
||||
gtk_stack_add_named (GTK_STACK (self->stack),
|
||||
gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0),
|
||||
OVERVIEW_PAGE);
|
||||
|
||||
self->main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||
gtk_widget_set_margin_top (self->main_vbox, 8);
|
||||
gtk_widget_set_margin_bottom (self->main_vbox, 8);
|
||||
gtk_widget_set_margin_start (self->main_vbox, 12);
|
||||
gtk_widget_set_margin_end (self->main_vbox, 12);
|
||||
gtk_container_set_focus_vadjustment (GTK_CONTAINER (self->main_vbox),
|
||||
gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (self->scrolled_window)));
|
||||
gtk_container_add (GTK_CONTAINER (self->scrolled_window), self->main_vbox);
|
||||
|
||||
/* load the available settings panels */
|
||||
setup_model (self);
|
||||
}
|
||||
|
||||
static void
|
||||
create_search_page (CcWindow *self)
|
||||
{
|
||||
|
@ -1322,107 +1295,35 @@ create_search_page (CcWindow *self)
|
|||
setup_search (self);
|
||||
}
|
||||
|
||||
static void
|
||||
create_header (CcWindow *self)
|
||||
{
|
||||
GtkWidget *image;
|
||||
AtkObject *accessible;
|
||||
|
||||
self->header = gtk_header_bar_new ();
|
||||
gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (self->header), TRUE);
|
||||
|
||||
self->header_sizegroup = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
|
||||
|
||||
/* previous button */
|
||||
self->previous_button = gtk_button_new_from_icon_name ("go-previous-symbolic", GTK_ICON_SIZE_MENU);
|
||||
gtk_widget_set_valign (self->previous_button, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_no_show_all (self->previous_button, TRUE);
|
||||
accessible = gtk_widget_get_accessible (self->previous_button);
|
||||
atk_object_set_name (accessible, _("All Settings"));
|
||||
gtk_header_bar_pack_start (GTK_HEADER_BAR (self->header), self->previous_button);
|
||||
g_signal_connect (self->previous_button, "clicked", G_CALLBACK (previous_button_clicked_cb), self);
|
||||
gtk_size_group_add_widget (self->header_sizegroup, self->previous_button);
|
||||
|
||||
/* toggle search button */
|
||||
self->search_button = gtk_toggle_button_new ();
|
||||
image = gtk_image_new_from_icon_name ("edit-find-symbolic", GTK_ICON_SIZE_MENU);
|
||||
gtk_button_set_image (GTK_BUTTON (self->search_button), image);
|
||||
gtk_widget_set_valign (self->search_button, GTK_ALIGN_CENTER);
|
||||
gtk_style_context_add_class (gtk_widget_get_style_context (self->search_button),
|
||||
"image-button");
|
||||
gtk_header_bar_pack_end (GTK_HEADER_BAR (self->header), self->search_button);
|
||||
|
||||
self->top_right_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||
gtk_header_bar_pack_end (GTK_HEADER_BAR (self->header), self->top_right_box);
|
||||
|
||||
self->lock_button = gtk_lock_button_new (NULL);
|
||||
gtk_style_context_add_class (gtk_widget_get_style_context (self->lock_button),
|
||||
"text-button");
|
||||
gtk_widget_set_valign (self->lock_button, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_no_show_all (self->lock_button, TRUE);
|
||||
gtk_container_add (GTK_CONTAINER (self->top_right_box), self->lock_button);
|
||||
gtk_size_group_add_widget (self->header_sizegroup, self->lock_button);
|
||||
}
|
||||
|
||||
static void
|
||||
create_window (CcWindow *self)
|
||||
{
|
||||
GtkWidget *box;
|
||||
AtkObject *accessible;
|
||||
|
||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||
gtk_container_add (GTK_CONTAINER (self), box);
|
||||
/* previous button */
|
||||
accessible = gtk_widget_get_accessible (self->previous_button);
|
||||
atk_object_set_name (accessible, _("All Settings"));
|
||||
|
||||
create_header (self);
|
||||
gtk_window_set_titlebar (GTK_WINDOW (self), self->header);
|
||||
gtk_header_bar_set_title (GTK_HEADER_BAR (self->header), _(DEFAULT_WINDOW_TITLE));
|
||||
gtk_widget_show_all (self->header);
|
||||
|
||||
/* search bar */
|
||||
self->search_bar = gtk_search_bar_new ();
|
||||
self->search_entry = gtk_search_entry_new ();
|
||||
gtk_entry_set_width_chars (GTK_ENTRY (self->search_entry), 30);
|
||||
g_signal_connect (self->search_entry, "search-changed", G_CALLBACK (search_entry_changed_cb), self);
|
||||
g_signal_connect (self->search_entry, "key-press-event", G_CALLBACK (search_entry_key_press_event_cb), self);
|
||||
gtk_container_add (GTK_CONTAINER (self->search_bar), self->search_entry);
|
||||
gtk_container_add (GTK_CONTAINER (box), self->search_bar);
|
||||
|
||||
g_object_bind_property (self->search_button, "active",
|
||||
self->search_bar, "search-mode-enabled",
|
||||
G_BINDING_BIDIRECTIONAL);
|
||||
|
||||
self->main_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||
gtk_container_add (GTK_CONTAINER (box), self->main_hbox);
|
||||
|
||||
self->stack = g_object_new (GTK_TYPE_STACK,
|
||||
"homogeneous", TRUE,
|
||||
"transition-type", GTK_STACK_TRANSITION_TYPE_CROSSFADE,
|
||||
"expand", TRUE,
|
||||
NULL);
|
||||
gtk_box_pack_end (GTK_BOX (self->main_hbox), self->stack, FALSE, FALSE, 0);
|
||||
|
||||
create_main_page (self);
|
||||
setup_model (self);
|
||||
create_search_page (self);
|
||||
|
||||
/* connect various signals */
|
||||
g_signal_connect (self, "notify::application", G_CALLBACK (application_set_cb), self);
|
||||
g_signal_connect_after (self, "key_press_event",
|
||||
G_CALLBACK (window_key_press_event), self);
|
||||
gtk_widget_add_events (GTK_WIDGET (self), GDK_BUTTON_RELEASE_MASK);
|
||||
g_signal_connect (self, "button-release-event",
|
||||
G_CALLBACK (window_button_release_event), self);
|
||||
g_signal_connect (self, "map-event", G_CALLBACK (window_map_event_cb), self);
|
||||
|
||||
g_signal_connect (self, "notify::window", G_CALLBACK (gdk_window_set_cb), self);
|
||||
|
||||
g_signal_connect (self->stack, "notify::visible-child",
|
||||
G_CALLBACK (stack_page_notify_cb), self);
|
||||
|
||||
gtk_widget_show_all (box);
|
||||
}
|
||||
|
||||
static void
|
||||
cc_window_init (CcWindow *self)
|
||||
{
|
||||
gtk_widget_init_template (GTK_WIDGET (self));
|
||||
|
||||
create_window (self);
|
||||
|
||||
self->previous_panels = g_queue_new ();
|
||||
|
|
|
@ -2,5 +2,6 @@
|
|||
<gresources>
|
||||
<gresource prefix="/org/gnome/ControlCenter/gtk">
|
||||
<file preprocess="xml-stripblanks">help-overlay.ui</file>
|
||||
<file preprocess="xml-stripblanks">window.ui</file>
|
||||
</gresource>
|
||||
</gresources>
|
||||
|
|
215
shell/window.ui
Normal file
215
shell/window.ui
Normal file
|
@ -0,0 +1,215 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.20"/>
|
||||
<template class="CcWindow" parent="GtkApplicationWindow">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="window_position">center</property>
|
||||
<signal name="notify::window" handler="gdk_window_set_cb" object="CcWindow" swapped="no" />
|
||||
<signal name="map-event" handler="window_map_event_cb" object="CcWindow" swapped="no" />
|
||||
<child>
|
||||
<object class="GtkBox" id="main_hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="hexpand">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkSearchBar" id="search_bar">
|
||||
<property name="visible">True</property>
|
||||
<property name="app_paintable">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkSearchEntry" id="search_entry">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="width_chars">25</property>
|
||||
<property name="max_width_chars">25</property>
|
||||
<property name="primary_icon_name">edit-find-symbolic</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">False</property>
|
||||
<signal name="search-changed" handler="search_entry_changed_cb" object="CcWindow" swapped="no" />
|
||||
<signal name="key-press-event" handler="search_entry_key_press_event_cb" object="CcWindow" swapped="no" />
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="vexpand">True</property>
|
||||
<property name="hscrollbar_policy">never</property>
|
||||
<child>
|
||||
<object class="GtkViewport">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="main_vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">12</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<style>
|
||||
<class name="view"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSeparator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkStack" id="stack">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="vexpand">True</property>
|
||||
<property name="transition_type">crossfade</property>
|
||||
<signal name="notify::visible-child" handler="stack_page_notify_cb" object="CcWindow" swapped="no" />
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="vexpand">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="name">_overview</property>
|
||||
</packing>
|
||||
</child>
|
||||
<style>
|
||||
<class name="background"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="titlebar">
|
||||
<object class="GtkHeaderBar" id="header">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="show_close_button">True</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="previous_button">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="no_show_all">True</property>
|
||||
<signal name="clicked" handler="previous_button_clicked_cb" object="CcWindow" swapped="no" />
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="icon_name">go-previous-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
<style>
|
||||
<class name="image-button"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToggleButton" id="search_button">
|
||||
<property name="visible">True</property>
|
||||
<property name="active" bind-source="search_bar" bind-property="search-mode-enabled" bind-flags="bidirectional" />
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="no_show_all">True</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="icon_name">edit-find-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
<style>
|
||||
<class name="image-button"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="top_right_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<child>
|
||||
<object class="GtkLockButton" id="lock_button">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="no_show_all">True</property>
|
||||
<style>
|
||||
<class name="text-button" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</template>
|
||||
<object class="GtkSizeGroup" id="header_sizegroup">
|
||||
<property name="mode">vertical</property>
|
||||
<widgets>
|
||||
<widget name="lock_button"/>
|
||||
<widget name="search_button"/>
|
||||
<widget name="previous_button"/>
|
||||
</widgets>
|
||||
</object>
|
||||
</interface>
|
Loading…
Add table
Add a link
Reference in a new issue