shell: Add position to cc_shell_embed_widget_in_header()
So we can control where the widget should be added to. The main window only supports left and right positions. https://gitlab.gnome.org/GNOME/gnome-control-center/issues/528
This commit is contained in:
parent
20b3d0c653
commit
75f150d5a2
19 changed files with 66 additions and 28 deletions
|
@ -1627,7 +1627,7 @@ cc_applications_panel_constructed (GObject *object)
|
|||
G_OBJECT_CLASS (cc_applications_panel_parent_class)->constructed (object);
|
||||
|
||||
shell = cc_panel_get_shell (CC_PANEL (self));
|
||||
cc_shell_embed_widget_in_header (shell, self->header_button);
|
||||
cc_shell_embed_widget_in_header (shell, self->header_button, GTK_POS_RIGHT);
|
||||
}
|
||||
|
||||
static GtkWidget*
|
||||
|
|
|
@ -90,7 +90,7 @@ cc_bluetooth_panel_constructed (GObject *object)
|
|||
/* add kill switch widgets */
|
||||
self->kill_switch_header = g_object_ref (WID ("box_power"));
|
||||
cc_shell_embed_widget_in_header (cc_panel_get_shell (CC_PANEL (self)),
|
||||
self->kill_switch_header);
|
||||
self->kill_switch_header, GTK_POS_RIGHT);
|
||||
gtk_widget_show (self->kill_switch_header);
|
||||
}
|
||||
|
||||
|
|
|
@ -175,7 +175,9 @@ cc_date_time_panel_constructed (GObject *object)
|
|||
|
||||
G_OBJECT_CLASS (cc_date_time_panel_parent_class)->constructed (object);
|
||||
|
||||
cc_shell_embed_widget_in_header (cc_panel_get_shell (CC_PANEL (self)), GTK_WIDGET (self->lock_button));
|
||||
cc_shell_embed_widget_in_header (cc_panel_get_shell (CC_PANEL (self)),
|
||||
GTK_WIDGET (self->lock_button),
|
||||
GTK_POS_RIGHT);
|
||||
}
|
||||
|
||||
static const char *
|
||||
|
|
|
@ -652,7 +652,7 @@ cc_keyboard_panel_constructed (GObject *object)
|
|||
toplevel = GTK_WINDOW (cc_shell_get_toplevel (cc_panel_get_shell (CC_PANEL (self))));
|
||||
gtk_window_set_transient_for (GTK_WINDOW (self->shortcut_editor), toplevel);
|
||||
|
||||
cc_shell_embed_widget_in_header (cc_panel_get_shell (CC_PANEL (self)), self->search_button);
|
||||
cc_shell_embed_widget_in_header (cc_panel_get_shell (CC_PANEL (self)), self->search_button, GTK_POS_RIGHT);
|
||||
|
||||
self->search_bar_handler_id =
|
||||
g_signal_connect_swapped (toplevel,
|
||||
|
|
|
@ -83,7 +83,7 @@ cc_mouse_panel_constructed (GObject *object)
|
|||
gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_visible (button, TRUE);
|
||||
|
||||
cc_shell_embed_widget_in_header (shell, button);
|
||||
cc_shell_embed_widget_in_header (shell, button, GTK_POS_RIGHT);
|
||||
|
||||
g_signal_connect (GTK_BUTTON (button), "toggled",
|
||||
G_CALLBACK (shell_test_button_toggled),
|
||||
|
|
|
@ -572,7 +572,7 @@ cc_wifi_panel_constructed (GObject *object)
|
|||
|
||||
G_OBJECT_CLASS (cc_wifi_panel_parent_class)->constructed (object);
|
||||
|
||||
cc_shell_embed_widget_in_header (shell, GTK_WIDGET (self->header_stack));
|
||||
cc_shell_embed_widget_in_header (shell, GTK_WIDGET (self->header_stack), GTK_POS_RIGHT);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -241,7 +241,7 @@ cc_printers_panel_constructed (GObject *object)
|
|||
G_OBJECT_CLASS (cc_printers_panel_parent_class)->constructed (object);
|
||||
|
||||
shell = cc_panel_get_shell (CC_PANEL (self));
|
||||
cc_shell_embed_widget_in_header (shell, self->headerbar_buttons);
|
||||
cc_shell_embed_widget_in_header (shell, self->headerbar_buttons, GTK_POS_RIGHT);
|
||||
|
||||
widget = (GtkWidget*)
|
||||
gtk_builder_get_object (self->builder, "lock-button");
|
||||
|
@ -249,7 +249,7 @@ cc_printers_panel_constructed (GObject *object)
|
|||
|
||||
widget = (GtkWidget*)
|
||||
gtk_builder_get_object (self->builder, "search-button");
|
||||
cc_shell_embed_widget_in_header (shell, widget);
|
||||
cc_shell_embed_widget_in_header (shell, widget, GTK_POS_RIGHT);
|
||||
|
||||
widget = (GtkWidget*)
|
||||
gtk_builder_get_object (self->builder, "search-bar");
|
||||
|
|
|
@ -187,7 +187,8 @@ cc_region_panel_constructed (GObject *object)
|
|||
|
||||
if (self->permission)
|
||||
cc_shell_embed_widget_in_header (cc_panel_get_shell (CC_PANEL (object)),
|
||||
GTK_WIDGET (self->login_button));
|
||||
GTK_WIDGET (self->login_button),
|
||||
GTK_POS_RIGHT);
|
||||
}
|
||||
|
||||
static const char *
|
||||
|
|
|
@ -716,7 +716,7 @@ cc_search_panel_constructed (GObject *object)
|
|||
G_BINDING_DEFAULT |
|
||||
G_BINDING_SYNC_CREATE);
|
||||
|
||||
cc_shell_embed_widget_in_header (cc_panel_get_shell (CC_PANEL (self)), box);
|
||||
cc_shell_embed_widget_in_header (cc_panel_get_shell (CC_PANEL (self)), box, GTK_POS_RIGHT);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -142,7 +142,8 @@ cc_sharing_panel_constructed (GObject *object)
|
|||
|
||||
/* add the master switch */
|
||||
cc_shell_embed_widget_in_header (cc_panel_get_shell (CC_PANEL (object)),
|
||||
gtk_widget_get_parent (self->master_switch));
|
||||
gtk_widget_get_parent (self->master_switch),
|
||||
GTK_POS_RIGHT);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -920,7 +920,7 @@ cc_bolt_panel_constructed (GObject *object)
|
|||
G_OBJECT_CLASS (cc_bolt_panel_parent_class)->constructed (object);
|
||||
|
||||
shell = cc_panel_get_shell (CC_PANEL (panel));
|
||||
cc_shell_embed_widget_in_header (shell, GTK_WIDGET (panel->headerbar_box));
|
||||
cc_shell_embed_widget_in_header (shell, GTK_WIDGET (panel->headerbar_box), GTK_POS_RIGHT);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1384,7 +1384,7 @@ cc_user_panel_constructed (GObject *object)
|
|||
G_OBJECT_CLASS (cc_user_panel_parent_class)->constructed (object);
|
||||
|
||||
shell = cc_panel_get_shell (CC_PANEL (self));
|
||||
cc_shell_embed_widget_in_header (shell, GTK_WIDGET (self->headerbar_button_stack));
|
||||
cc_shell_embed_widget_in_header (shell, GTK_WIDGET (self->headerbar_button_stack), GTK_POS_RIGHT);
|
||||
|
||||
gtk_lock_button_set_permission (self->lock_button, self->permission);
|
||||
}
|
||||
|
|
|
@ -466,7 +466,7 @@ cc_wacom_panel_constructed (GObject *object)
|
|||
gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_visible (button, TRUE);
|
||||
|
||||
cc_shell_embed_widget_in_header (shell, button);
|
||||
cc_shell_embed_widget_in_header (shell, button, GTK_POS_RIGHT);
|
||||
|
||||
self->test_popover = gtk_popover_new (button);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (self->test_popover), 6);
|
||||
|
|
|
@ -152,7 +152,9 @@ cc_shell_get_toplevel (CcShell *shell)
|
|||
}
|
||||
|
||||
void
|
||||
cc_shell_embed_widget_in_header (CcShell *shell, GtkWidget *widget)
|
||||
cc_shell_embed_widget_in_header (CcShell *shell,
|
||||
GtkWidget *widget,
|
||||
GtkPositionType position)
|
||||
{
|
||||
CcShellInterface *iface;
|
||||
|
||||
|
@ -168,6 +170,6 @@ cc_shell_embed_widget_in_header (CcShell *shell, GtkWidget *widget)
|
|||
}
|
||||
else
|
||||
{
|
||||
iface->embed_widget_in_header (shell, widget);
|
||||
iface->embed_widget_in_header (shell, widget, position);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,8 +55,9 @@ struct _CcShellInterface
|
|||
GVariant *parameters,
|
||||
GError **error);
|
||||
GtkWidget * (*get_toplevel) (CcShell *shell);
|
||||
void (*embed_widget_in_header) (CcShell *shell,
|
||||
GtkWidget *widget);
|
||||
void (*embed_widget_in_header) (CcShell *shell,
|
||||
GtkWidget *widget,
|
||||
GtkPositionType position);
|
||||
};
|
||||
|
||||
GType cc_shell_get_type (void) G_GNUC_CONST;
|
||||
|
@ -70,8 +71,9 @@ gboolean cc_shell_set_active_panel_from_id (CcShell *shell,
|
|||
GError **error);
|
||||
GtkWidget * cc_shell_get_toplevel (CcShell *shell);
|
||||
|
||||
void cc_shell_embed_widget_in_header (CcShell *shell,
|
||||
GtkWidget *widget);
|
||||
void cc_shell_embed_widget_in_header (CcShell *shell,
|
||||
GtkWidget *widget,
|
||||
GtkPositionType position);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
|
|
@ -64,6 +64,7 @@ struct _CcWindow
|
|||
GtkWidget *panel_list;
|
||||
GtkWidget *previous_button;
|
||||
GtkWidget *back_revealer;
|
||||
GtkWidget *top_left_box;
|
||||
GtkWidget *top_right_box;
|
||||
GtkWidget *search_button;
|
||||
GtkWidget *search_bar;
|
||||
|
@ -108,6 +109,7 @@ in_flatpak_sandbox (void)
|
|||
static void
|
||||
remove_all_custom_widgets (CcWindow *self)
|
||||
{
|
||||
GtkWidget *parent;
|
||||
GtkWidget *widget;
|
||||
guint i;
|
||||
|
||||
|
@ -117,7 +119,10 @@ remove_all_custom_widgets (CcWindow *self)
|
|||
for (i = 0; i < self->custom_widgets->len; i++)
|
||||
{
|
||||
widget = g_ptr_array_index (self->custom_widgets, i);
|
||||
gtk_container_remove (GTK_CONTAINER (self->top_right_box), widget);
|
||||
parent = gtk_widget_get_parent (widget);
|
||||
|
||||
g_assert (parent == self->top_right_box || parent == self->top_left_box);
|
||||
gtk_container_remove (GTK_CONTAINER (parent), widget);
|
||||
}
|
||||
g_ptr_array_set_size (self->custom_widgets, 0);
|
||||
|
||||
|
@ -511,6 +516,7 @@ update_fold_state (CcWindow *shell)
|
|||
|
||||
hdy_header_group_set_focus (shell->header_group, fold == HDY_FOLD_FOLDED ? GTK_HEADER_BAR (header_child) : NULL);
|
||||
|
||||
gtk_widget_set_visible (shell->back_revealer, fold == HDY_FOLD_FOLDED);
|
||||
gtk_revealer_set_reveal_child (GTK_REVEALER (shell->back_revealer), fold == HDY_FOLD_FOLDED);
|
||||
}
|
||||
|
||||
|
@ -697,15 +703,32 @@ cc_window_set_active_panel_from_id (CcShell *shell,
|
|||
}
|
||||
|
||||
static void
|
||||
cc_window_embed_widget_in_header (CcShell *shell,
|
||||
GtkWidget *widget)
|
||||
cc_window_embed_widget_in_header (CcShell *shell,
|
||||
GtkWidget *widget,
|
||||
GtkPositionType position)
|
||||
{
|
||||
CcWindow *self = CC_WINDOW (shell);
|
||||
|
||||
CC_ENTRY;
|
||||
|
||||
/* add to header */
|
||||
gtk_box_pack_end (GTK_BOX (self->top_right_box), widget, FALSE, FALSE, 0);
|
||||
switch (position)
|
||||
{
|
||||
case GTK_POS_RIGHT:
|
||||
gtk_container_add (GTK_CONTAINER (self->top_right_box), widget);
|
||||
break;
|
||||
|
||||
case GTK_POS_LEFT:
|
||||
gtk_container_add (GTK_CONTAINER (self->top_left_box), widget);
|
||||
break;
|
||||
|
||||
case GTK_POS_TOP:
|
||||
case GTK_POS_BOTTOM:
|
||||
default:
|
||||
g_warning ("Invalid position passed");
|
||||
return;
|
||||
}
|
||||
|
||||
g_ptr_array_add (self->custom_widgets, g_object_ref (widget));
|
||||
|
||||
gtk_size_group_add_widget (self->header_sizegroup, widget);
|
||||
|
@ -887,6 +910,7 @@ cc_window_class_init (CcWindowClass *klass)
|
|||
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_left_box);
|
||||
gtk_widget_class_bind_template_child (widget_class, CcWindow, top_right_box);
|
||||
|
||||
gtk_widget_class_bind_template_callback (widget_class, back_button_clicked_cb);
|
||||
|
|
|
@ -222,7 +222,6 @@
|
|||
<property name="show_close_button">True</property>
|
||||
<child>
|
||||
<object class="GtkRevealer" id="back_revealer">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="transition-type">crossfade</property>
|
||||
<property name="transition-duration" bind-source="main_leaflet" bind-property="mode-transition-duration" bind-flags="bidirectional|sync-create"/>
|
||||
|
@ -254,6 +253,12 @@
|
|||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="top_left_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="top_right_box">
|
||||
<property name="visible">True</property>
|
||||
|
|
|
@ -38,7 +38,7 @@ gtp_header_widget_constructed (GObject *object)
|
|||
G_OBJECT_CLASS (gtp_header_widget_parent_class)->constructed (object);
|
||||
|
||||
shell = cc_panel_get_shell (CC_PANEL (self));
|
||||
cc_shell_embed_widget_in_header (shell, self->header_widget);
|
||||
cc_shell_embed_widget_in_header (shell, self->header_widget, GTK_POS_LEFT);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -94,8 +94,9 @@ cc_test_window_set_active_panel_from_id (CcShell *shell,
|
|||
}
|
||||
|
||||
static void
|
||||
cc_test_window_embed_widget_in_header (CcShell *shell,
|
||||
GtkWidget *widget)
|
||||
cc_test_window_embed_widget_in_header (CcShell *shell,
|
||||
GtkWidget *widget,
|
||||
GtkPositionType position)
|
||||
{
|
||||
CcTestWindow *self = CC_TEST_WINDOW (shell);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue