diff --git a/demos/constraint-editor/constraint-editor-window.ui b/demos/constraint-editor/constraint-editor-window.ui index 0d2e72fcea..037de4bd33 100644 --- a/demos/constraint-editor/constraint-editor-window.ui +++ b/demos/constraint-editor/constraint-editor-window.ui @@ -9,7 +9,6 @@ 768 - GTK Constraint Editor 1 diff --git a/demos/gtk-demo/constraints.c b/demos/gtk-demo/constraints.c index 6c6fc30dab..57c5554cc4 100644 --- a/demos/gtk-demo/constraints.c +++ b/demos/gtk-demo/constraints.c @@ -257,9 +257,9 @@ do_constraints (GtkWidget *do_widget) window = gtk_window_new (); gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget)); + gtk_window_set_title (GTK_WINDOW (window), "Constraints"); header = gtk_header_bar_new (); - gtk_header_bar_set_title (GTK_HEADER_BAR (header), "Constraints"); gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), FALSE); gtk_window_set_titlebar (GTK_WINDOW (window), header); g_signal_connect (window, "destroy", diff --git a/demos/gtk-demo/constraints2.c b/demos/gtk-demo/constraints2.c index beb9c19ba9..db8a75b88f 100644 --- a/demos/gtk-demo/constraints2.c +++ b/demos/gtk-demo/constraints2.c @@ -213,9 +213,9 @@ do_constraints2 (GtkWidget *do_widget) window = gtk_window_new (); gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget)); + gtk_window_set_title (GTK_WINDOW (window), "Constraints"); header = gtk_header_bar_new (); - gtk_header_bar_set_title (GTK_HEADER_BAR (header), "Constraints"); gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), FALSE); gtk_window_set_titlebar (GTK_WINDOW (window), header); g_signal_connect (window, "destroy", diff --git a/demos/gtk-demo/constraints3.c b/demos/gtk-demo/constraints3.c index ec384e88bd..2c7566b422 100644 --- a/demos/gtk-demo/constraints3.c +++ b/demos/gtk-demo/constraints3.c @@ -133,9 +133,9 @@ do_constraints3 (GtkWidget *do_widget) window = gtk_window_new (); gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget)); + gtk_window_set_title (GTK_WINDOW (window), "Constraints"); header = gtk_header_bar_new (); - gtk_header_bar_set_title (GTK_HEADER_BAR (header), "Constraints"); gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), FALSE); gtk_window_set_titlebar (GTK_WINDOW (window), header); g_signal_connect (window, "destroy", diff --git a/demos/gtk-demo/fishbowl.c b/demos/gtk-demo/fishbowl.c index e1da414751..3f49ad2f20 100644 --- a/demos/gtk-demo/fishbowl.c +++ b/demos/gtk-demo/fishbowl.c @@ -194,7 +194,7 @@ static void set_widget_type (GtkFishbowl *fishbowl, int widget_type_index) { - GtkWidget *window, *headerbar; + GtkWidget *window; if (widget_type_index == selected_widget_type) return; @@ -205,9 +205,8 @@ set_widget_type (GtkFishbowl *fishbowl, widget_types[selected_widget_type].create_func); window = GTK_WIDGET (gtk_widget_get_root (GTK_WIDGET (fishbowl))); - headerbar = gtk_window_get_titlebar (GTK_WINDOW (window)); - gtk_header_bar_set_title (GTK_HEADER_BAR (headerbar), - widget_types[selected_widget_type].name); + gtk_window_set_title (GTK_WINDOW (window), + widget_types[selected_widget_type].name); } void diff --git a/demos/gtk-demo/font-features.ui b/demos/gtk-demo/font-features.ui index d47c5eaf29..464baa0735 100644 --- a/demos/gtk-demo/font-features.ui +++ b/demos/gtk-demo/font-features.ui @@ -4,10 +4,10 @@ 600 500 + Font Explorer 1 - Font Explorer 1 diff --git a/demos/gtk-demo/headerbar.c b/demos/gtk-demo/headerbar.c index 3002504dba..070bb8fa70 100644 --- a/demos/gtk-demo/headerbar.c +++ b/demos/gtk-demo/headerbar.c @@ -24,13 +24,13 @@ do_headerbar (GtkWidget *do_widget) { window = gtk_window_new (); gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget)); + gtk_window_set_title (GTK_WINDOW (window), "Welcome to Facebook - Log in, sign up or learn more"); g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); gtk_window_set_default_size (GTK_WINDOW (window), 600, 400); header = gtk_header_bar_new (); gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), TRUE); - gtk_header_bar_set_title (GTK_HEADER_BAR (header), "Welcome to Facebook - Log in, sign up or learn more"); button = gtk_button_new (); icon = g_themed_icon_new ("mail-send-receive-symbolic"); diff --git a/demos/gtk-demo/main.c b/demos/gtk-demo/main.c index a31036d916..524221b915 100644 --- a/demos/gtk-demo/main.c +++ b/demos/gtk-demo/main.c @@ -17,7 +17,7 @@ static gchar *current_file = NULL; static GtkWidget *notebook; static GtkWidget *treeview; -static GtkWidget *headerbar; +static GtkWidget *toplevel; enum { NAME_COLUMN, @@ -915,7 +915,7 @@ selection_cb (GtkTreeSelection *selection, if (filename) load_file (name, filename); - gtk_header_bar_set_title (GTK_HEADER_BAR (headerbar), title); + gtk_window_set_title (GTK_WINDOW (toplevel), title); g_free (name); g_free (title); @@ -1030,9 +1030,9 @@ activate (GApplication *app) info_view = (GtkWidget *)gtk_builder_get_object (builder, "info-textview"); source_view = (GtkWidget *)gtk_builder_get_object (builder, "source-textview"); - headerbar = (GtkWidget *)gtk_builder_get_object (builder, "headerbar"); treeview = (GtkWidget *)gtk_builder_get_object (builder, "treeview"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (treeview)); + toplevel = GTK_WIDGET (window); load_file (gtk_demos[0].name, gtk_demos[0].filename); diff --git a/demos/gtk-demo/main.ui b/demos/gtk-demo/main.ui index 5256095fc6..c605609c78 100644 --- a/demos/gtk-demo/main.ui +++ b/demos/gtk-demo/main.ui @@ -31,7 +31,6 @@ 800 600 - GTK Demo 1 diff --git a/demos/gtk-demo/modelbutton.ui b/demos/gtk-demo/modelbutton.ui index 818de71309..5bfe1fab52 100644 --- a/demos/gtk-demo/modelbutton.ui +++ b/demos/gtk-demo/modelbutton.ui @@ -1,11 +1,11 @@ + Model Button 0 1 - Model Button diff --git a/demos/gtk-demo/paint.c b/demos/gtk-demo/paint.c index cf5adc4743..f392ea2769 100644 --- a/demos/gtk-demo/paint.c +++ b/demos/gtk-demo/paint.c @@ -392,7 +392,6 @@ do_paint (GtkWidget *toplevel) gtk_container_add (GTK_CONTAINER (window), draw_area); headerbar = gtk_header_bar_new (); - gtk_header_bar_set_title (GTK_HEADER_BAR (headerbar), "Paint"); gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (headerbar), TRUE); colorbutton = gtk_color_button_new (); @@ -405,6 +404,7 @@ do_paint (GtkWidget *toplevel) gtk_header_bar_pack_end (GTK_HEADER_BAR (headerbar), colorbutton); gtk_window_set_titlebar (GTK_WINDOW (window), headerbar); + gtk_window_set_title (GTK_WINDOW (window), "Paint"); g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); diff --git a/demos/gtk-demo/password_entry.c b/demos/gtk-demo/password_entry.c index 5d957ced43..56310d23a5 100644 --- a/demos/gtk-demo/password_entry.c +++ b/demos/gtk-demo/password_entry.c @@ -40,9 +40,9 @@ do_password_entry (GtkWidget *do_widget) gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget)); header = gtk_header_bar_new (); - gtk_header_bar_set_title (GTK_HEADER_BAR (header), "Choose a Password"); gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), FALSE); gtk_window_set_titlebar (GTK_WINDOW (window), header); + gtk_window_set_title (GTK_WINDOW (window), "Choose a Password"); gtk_window_set_resizable (GTK_WINDOW (window), FALSE); gtk_window_set_deletable (GTK_WINDOW (window), FALSE); g_signal_connect (window, "destroy", diff --git a/demos/gtk-demo/peg_solitaire.c b/demos/gtk-demo/peg_solitaire.c index 2330ebfc01..f4f3fc4e26 100644 --- a/demos/gtk-demo/peg_solitaire.c +++ b/demos/gtk-demo/peg_solitaire.c @@ -276,13 +276,12 @@ do_peg_solitaire (GtkWidget *do_widget) g_signal_connect (restart, "clicked", G_CALLBACK (restart), NULL); header = gtk_header_bar_new (); - gtk_header_bar_set_title (GTK_HEADER_BAR (header), "Peg Solitaire"); gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), TRUE); gtk_header_bar_pack_start (GTK_HEADER_BAR (header), restart); window = gtk_window_new (); gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget)); - gtk_window_set_title (GTK_WINDOW (window), "Sliding Puzzle"); + gtk_window_set_title (GTK_WINDOW (window), "Peg Solitaire"); gtk_window_set_titlebar (GTK_WINDOW (window), header); gtk_window_set_default_size (GTK_WINDOW (window), 400, 300); g_signal_connect (window, "destroy", diff --git a/demos/gtk-demo/tagged_entry.c b/demos/gtk-demo/tagged_entry.c index 9a588c6c2b..c7b0816c4a 100644 --- a/demos/gtk-demo/tagged_entry.c +++ b/demos/gtk-demo/tagged_entry.c @@ -67,9 +67,9 @@ do_tagged_entry (GtkWidget *do_widget) gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget)); header = gtk_header_bar_new (); - gtk_header_bar_set_title (GTK_HEADER_BAR (header), "A tagged entry"); gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), FALSE); gtk_window_set_titlebar (GTK_WINDOW (window), header); + gtk_window_set_title (GTK_WINDOW (window), "A tagged entry"); gtk_window_set_resizable (GTK_WINDOW (window), TRUE); gtk_window_set_deletable (GTK_WINDOW (window), FALSE); g_signal_connect (window, "destroy", diff --git a/demos/gtk-demo/themes.c b/demos/gtk-demo/themes.c index 0627ebe076..88191aa157 100644 --- a/demos/gtk-demo/themes.c +++ b/demos/gtk-demo/themes.c @@ -97,7 +97,6 @@ change_theme (GtkWidget *widget, gpointer data) { GtkBuilder *builder = data; - GtkWidget *header; GtkWidget *label; Theme next = themes[theme++ % G_N_ELEMENTS (themes)]; char *name; @@ -107,9 +106,8 @@ change_theme (GtkWidget *widget, "gtk-application-prefer-dark-theme", next.dark, NULL); - header = GTK_WIDGET (gtk_builder_get_object (builder, "header")); name = g_strconcat (next.name, next.dark ? " (dark)" : NULL, NULL); - gtk_header_bar_set_title (GTK_HEADER_BAR (header), name); + gtk_window_set_title (GTK_WINDOW (widget), name); g_free (name); label = GTK_WIDGET (gtk_builder_get_object (builder, "fps")); diff --git a/demos/gtk-demo/video_player.c b/demos/gtk-demo/video_player.c index e06ad2fbb3..848c28ab48 100644 --- a/demos/gtk-demo/video_player.c +++ b/demos/gtk-demo/video_player.c @@ -75,7 +75,6 @@ do_video_player (GtkWidget *do_widget) title = gtk_header_bar_new (); gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (title), TRUE); - gtk_header_bar_set_title (GTK_HEADER_BAR (title), "Video Player"); gtk_window_set_titlebar (GTK_WINDOW (window), title); open_button = gtk_button_new_with_mnemonic ("_Open"); diff --git a/demos/icon-browser/window.ui b/demos/icon-browser/window.ui index ffe6612f32..53767d6047 100644 --- a/demos/icon-browser/window.ui +++ b/demos/icon-browser/window.ui @@ -25,7 +25,6 @@ 768 - Icon Browser 1 diff --git a/demos/node-editor/node-editor-window.ui b/demos/node-editor/node-editor-window.ui index 3707c9e2b6..3a8373a080 100644 --- a/demos/node-editor/node-editor-window.ui +++ b/demos/node-editor/node-editor-window.ui @@ -86,7 +86,6 @@ text_view - GTK Node Editor 1 @@ -120,11 +119,6 @@ testcase_popover - - - GTK Node Editor - - diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt index 007c17cd09..9aadbe1999 100644 --- a/docs/reference/gtk/gtk4-sections.txt +++ b/docs/reference/gtk/gtk4-sections.txt @@ -5579,8 +5579,6 @@ gtk_action_bar_get_type GtkHeaderBar GtkHeaderBar gtk_header_bar_new -gtk_header_bar_set_title -gtk_header_bar_get_title gtk_header_bar_set_custom_title gtk_header_bar_get_custom_title gtk_header_bar_pack_start diff --git a/docs/tools/widgets.c b/docs/tools/widgets.c index e6bae49e47..54019a76e1 100644 --- a/docs/tools/widgets.c +++ b/docs/tools/widgets.c @@ -1122,12 +1122,12 @@ create_headerbar (void) GtkWidget *button; window = gtk_window_new (); + gtk_window_set_title (GTK_WINDOW (bar), "Header Bar"); view = gtk_text_view_new (); gtk_widget_show (view); gtk_widget_set_size_request (window, 220, 150); gtk_container_add (GTK_CONTAINER (window), view); bar = gtk_header_bar_new (); - gtk_header_bar_set_title (GTK_HEADER_BAR (bar), "Header Bar"); gtk_window_set_titlebar (GTK_WINDOW (window), bar); button = gtk_button_new (); gtk_container_add (GTK_CONTAINER (button), gtk_image_new_from_icon_name ("bookmark-new-symbolic")); diff --git a/examples/sunny.c b/examples/sunny.c index 3e3fc6a672..7aa4a9f89e 100644 --- a/examples/sunny.c +++ b/examples/sunny.c @@ -15,8 +15,6 @@ new_window (GApplication *app, gtk_window_set_icon_name (GTK_WINDOW (window), "sunny"); header = gtk_header_bar_new (); - gtk_widget_show (header); - gtk_header_bar_set_title (GTK_HEADER_BAR (header), "Sunny"); gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), TRUE); gtk_window_set_titlebar (GTK_WINDOW (window), header); diff --git a/gtk/gtkheaderbar.c b/gtk/gtkheaderbar.c index f27624c683..0936371851 100644 --- a/gtk/gtkheaderbar.c +++ b/gtk/gtkheaderbar.c @@ -45,10 +45,10 @@ * @See_also: #GtkBox, #GtkActionBar * * GtkHeaderBar is similar to a horizontal #GtkBox. It allows children to - * be placed at the start or the end. In addition, it allows a title to be - * displayed. The title will be centered with respect to the width of the - * box, even if the children at either side take up different amounts of - * space. + * be placed at the start or the end. In addition, it allows the window + * title to be displayed. The title will be centered with respect to the + * width of the box, even if the children at either side take up different + * amounts of space. * * GtkHeaderBar can add typical window frame controls, such as minimize, * maximize and close buttons, or the window icon. @@ -98,7 +98,6 @@ struct _GtkHeaderBarPrivate GtkWidget *start_box; GtkWidget *end_box; - gchar *title; GtkWidget *title_label; GtkWidget *custom_title; @@ -114,7 +113,6 @@ struct _GtkHeaderBarPrivate enum { PROP_0, - PROP_TITLE, PROP_CUSTOM_TITLE, PROP_SHOW_TITLE_BUTTONS, PROP_DECORATION_LAYOUT, @@ -213,6 +211,30 @@ _gtk_header_bar_track_default_decoration (GtkHeaderBar *bar) update_default_decoration (bar); } +static void +update_title (GtkHeaderBar *bar) +{ + GtkHeaderBarPrivate *priv = gtk_header_bar_get_instance_private (bar); + GtkRoot *root; + const gchar *title = NULL; + + if (!priv->title_label) + return; + + root = gtk_widget_get_root (GTK_WIDGET (bar)); + + if (GTK_IS_WINDOW (root)) + title = gtk_window_get_title (GTK_WINDOW (root)); + + if (!title) + title = g_get_application_name (); + + if (!title) + title = g_get_prgname (); + + gtk_label_set_text (GTK_LABEL (priv->title_label), title); +} + static void construct_title_label (GtkHeaderBar *bar) { @@ -222,7 +244,7 @@ construct_title_label (GtkHeaderBar *bar) g_assert (priv->title_label == NULL); - label = gtk_label_new (priv->title); + label = gtk_label_new (NULL); gtk_widget_add_css_class (label, GTK_STYLE_CLASS_TITLE); gtk_widget_set_valign (label, GTK_ALIGN_CENTER); gtk_label_set_wrap (GTK_LABEL (label), FALSE); @@ -234,57 +256,8 @@ construct_title_label (GtkHeaderBar *bar) gtk_center_layout_set_center_widget (GTK_CENTER_LAYOUT (layout), label); priv->title_label = label; -} -/** - * gtk_header_bar_set_title: - * @bar: a #GtkHeaderBar - * @title: (allow-none): a title, or %NULL - * - * Sets the title of the #GtkHeaderBar. The title should help a user - * identify the current view. A good title should not include the - * application name. - */ -void -gtk_header_bar_set_title (GtkHeaderBar *bar, - const gchar *title) -{ - GtkHeaderBarPrivate *priv = gtk_header_bar_get_instance_private (bar); - gchar *new_title; - - g_return_if_fail (GTK_IS_HEADER_BAR (bar)); - - new_title = g_strdup (title); - g_free (priv->title); - priv->title = new_title; - - if (priv->title_label != NULL) - { - gtk_label_set_label (GTK_LABEL (priv->title_label), priv->title); - gtk_widget_queue_resize (GTK_WIDGET (bar)); - } - - g_object_notify_by_pspec (G_OBJECT (bar), header_bar_props[PROP_TITLE]); -} - -/** - * gtk_header_bar_get_title: - * @bar: a #GtkHeaderBar - * - * Retrieves the title of the header. See gtk_header_bar_set_title(). - * - * Returns: (nullable): the title of the header, or %NULL if none has - * been set explicitly. The returned string is owned by the widget - * and must not be modified or freed. - */ -const gchar * -gtk_header_bar_get_title (GtkHeaderBar *bar) -{ - GtkHeaderBarPrivate *priv = gtk_header_bar_get_instance_private (bar); - - g_return_val_if_fail (GTK_IS_HEADER_BAR (bar), NULL); - - return priv->title; + update_title (bar); } /** @@ -295,11 +268,10 @@ gtk_header_bar_get_title (GtkHeaderBar *bar) * Sets a custom title for the #GtkHeaderBar. * * The title should help a user identify the current view. This - * supersedes any title set by gtk_header_bar_set_title(). To - * achieve the same style as the builtin title, use the “title” - * style class. + * supersedes the window title label. To achieve the same style as + * the builtin title, use the “title” style class. * - * You should set the custom title to %NULL, for the header title + * You should set the custom title to %NULL, for the window title * label to be visible again. */ void @@ -363,6 +335,31 @@ gtk_header_bar_get_custom_title (GtkHeaderBar *bar) return priv->custom_title; } +static void +gtk_header_bar_root (GtkWidget *widget) +{ + GtkWidget *root; + + GTK_WIDGET_CLASS (gtk_header_bar_parent_class)->root (widget); + + root = GTK_WIDGET (gtk_widget_get_root (widget)); + + if (GTK_IS_WINDOW (root)) + g_signal_connect_swapped (root, "notify::title", + G_CALLBACK (update_title), widget); + + update_title (GTK_HEADER_BAR (widget)); +} + +static void +gtk_header_bar_unroot (GtkWidget *widget) +{ + g_signal_handlers_disconnect_by_func (gtk_widget_get_root (widget), + update_title, widget); + + GTK_WIDGET_CLASS (gtk_header_bar_parent_class)->unroot (widget); +} + static void gtk_header_bar_dispose (GObject *object) { @@ -382,7 +379,6 @@ gtk_header_bar_finalize (GObject *object) { GtkHeaderBarPrivate *priv = gtk_header_bar_get_instance_private (GTK_HEADER_BAR (object)); - g_free (priv->title); g_free (priv->decoration_layout); G_OBJECT_CLASS (gtk_header_bar_parent_class)->finalize (object); @@ -399,10 +395,6 @@ gtk_header_bar_get_property (GObject *object, switch (prop_id) { - case PROP_TITLE: - g_value_set_string (value, priv->title); - break; - case PROP_CUSTOM_TITLE: g_value_set_object (value, priv->custom_title); break; @@ -431,10 +423,6 @@ gtk_header_bar_set_property (GObject *object, switch (prop_id) { - case PROP_TITLE: - gtk_header_bar_set_title (bar, g_value_get_string (value)); - break; - case PROP_CUSTOM_TITLE: gtk_header_bar_set_custom_title (bar, g_value_get_object (value)); break; @@ -575,18 +563,14 @@ gtk_header_bar_class_init (GtkHeaderBarClass *class) object_class->get_property = gtk_header_bar_get_property; object_class->set_property = gtk_header_bar_set_property; + widget_class->root = gtk_header_bar_root; + widget_class->unroot = gtk_header_bar_unroot; + container_class->add = gtk_header_bar_add; container_class->remove = gtk_header_bar_remove; container_class->forall = gtk_header_bar_forall; container_class->child_type = gtk_header_bar_child_type; - header_bar_props[PROP_TITLE] = - g_param_spec_string ("title", - P_("Title"), - P_("The title to display"), - NULL, - G_PARAM_READWRITE); - header_bar_props[PROP_CUSTOM_TITLE] = g_param_spec_object ("custom-title", P_("Custom Title"), @@ -641,7 +625,6 @@ gtk_header_bar_init (GtkHeaderBar *bar) GtkHeaderBarPrivate *priv = gtk_header_bar_get_instance_private (bar); GtkLayoutManager *layout; - priv->title = NULL; priv->custom_title = NULL; priv->decoration_layout = NULL; priv->state = GDK_SURFACE_STATE_WITHDRAWN; diff --git a/gtk/gtkheaderbar.h b/gtk/gtkheaderbar.h index e7ff801b6f..3da4a96abe 100644 --- a/gtk/gtkheaderbar.h +++ b/gtk/gtkheaderbar.h @@ -38,11 +38,6 @@ GDK_AVAILABLE_IN_ALL GType gtk_header_bar_get_type (void) G_GNUC_CONST; GDK_AVAILABLE_IN_ALL GtkWidget *gtk_header_bar_new (void); -GDK_AVAILABLE_IN_ALL -void gtk_header_bar_set_title (GtkHeaderBar *bar, - const gchar *title); -GDK_AVAILABLE_IN_ALL -const gchar *gtk_header_bar_get_title (GtkHeaderBar *bar); GDK_AVAILABLE_IN_ALL void gtk_header_bar_set_custom_title (GtkHeaderBar *bar, diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 91ca4fe393..518d9518f5 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -2214,29 +2214,6 @@ gtk_window_new (void) return g_object_new (GTK_TYPE_WINDOW, NULL); } -static void -gtk_window_set_title_internal (GtkWindow *window, - const gchar *title, - gboolean update_titlebar) -{ - GtkWindowPrivate *priv = gtk_window_get_instance_private (window); - char *new_title; - - g_return_if_fail (GTK_IS_WINDOW (window)); - - new_title = g_strdup (title); - g_free (priv->title); - priv->title = new_title; - - if (_gtk_widget_get_realized (GTK_WIDGET (window))) - gdk_toplevel_set_title (GDK_TOPLEVEL (priv->surface), new_title != NULL ? new_title : ""); - - if (update_titlebar && GTK_IS_HEADER_BAR (priv->title_box)) - gtk_header_bar_set_title (GTK_HEADER_BAR (priv->title_box), new_title != NULL ? new_title : ""); - - g_object_notify_by_pspec (G_OBJECT (window), window_props[PROP_TITLE]); -} - /** * gtk_window_set_title: * @window: a #GtkWindow @@ -2254,11 +2231,21 @@ gtk_window_set_title_internal (GtkWindow *window, **/ void gtk_window_set_title (GtkWindow *window, - const gchar *title) + const gchar *title) { + GtkWindowPrivate *priv = gtk_window_get_instance_private (window); + char *new_title; + g_return_if_fail (GTK_IS_WINDOW (window)); - gtk_window_set_title_internal (window, title, TRUE); + new_title = g_strdup (title); + g_free (priv->title); + priv->title = new_title; + + if (_gtk_widget_get_realized (GTK_WIDGET (window))) + gdk_toplevel_set_title (GDK_TOPLEVEL (priv->surface), new_title != NULL ? new_title : ""); + + g_object_notify_by_pspec (G_OBJECT (window), window_props[PROP_TITLE]); } /** @@ -4100,21 +4087,6 @@ gtk_window_finalize (GObject *object) G_OBJECT_CLASS (gtk_window_parent_class)->finalize (object); } -/* copied from gdksurface-x11.c */ -static const gchar * -get_default_title (void) -{ - const gchar *title; - - title = g_get_application_name (); - if (!title) - title = g_get_prgname (); - if (!title) - title = ""; - - return title; -} - static gboolean update_csd_visibility (GtkWindow *window) { @@ -4151,14 +4123,8 @@ update_window_actions (GtkWindow *window) static GtkWidget * create_titlebar (GtkWindow *window) { - GtkWindowPrivate *priv = gtk_window_get_instance_private (window); - GtkWidget *titlebar; - - titlebar = gtk_header_bar_new (); - g_object_set (titlebar, - "title", priv->title ? priv->title : get_default_title (), - "show-title-buttons", TRUE, - NULL); + GtkWidget *titlebar = gtk_header_bar_new (); + gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (titlebar), TRUE); gtk_widget_add_css_class (titlebar, GTK_STYLE_CLASS_TITLEBAR); gtk_widget_add_css_class (titlebar, "default-decoration"); diff --git a/tests/dialog.ui b/tests/dialog.ui index 040235670b..d2dab24f8c 100644 --- a/tests/dialog.ui +++ b/tests/dialog.ui @@ -16,9 +16,9 @@ dialog 500 1 + Join Chat Room - Join Chat Room 0 diff --git a/tests/gdkgears.c b/tests/gdkgears.c index 7eb650528a..6450d915cb 100644 --- a/tests/gdkgears.c +++ b/tests/gdkgears.c @@ -130,7 +130,8 @@ main (int argc, char *argv[]) gtk_init (); window = gtk_window_new (); - gtk_window_set_titlebar (GTK_WINDOW (window), g_object_new (GTK_TYPE_HEADER_BAR, "visible", TRUE, "title", "GdkGears", NULL)); + gtk_window_set_titlebar (GTK_WINDOW (window), gtk_header_bar_new ()); + gtk_window_set_title (GTK_WINDOW (window), "GdkGears"); gtk_window_set_default_size (GTK_WINDOW (window), 640, 640); g_signal_connect (window, "destroy", G_CALLBACK (quit_cb), &done); diff --git a/tests/testheaderbar.c b/tests/testheaderbar.c index 8c9c05c275..a065b01a23 100644 --- a/tests/testheaderbar.c +++ b/tests/testheaderbar.c @@ -95,7 +95,6 @@ change_header (GtkButton *button, gpointer data) { header = gtk_header_bar_new (); gtk_widget_add_css_class (header, "titlebar"); - gtk_header_bar_set_title (GTK_HEADER_BAR (header), "Example header"); widget = gtk_button_new_with_label ("_Close"); gtk_button_set_use_underline (GTK_BUTTON (widget), TRUE); diff --git a/testsuite/a11y/headerbar.ui b/testsuite/a11y/headerbar.ui index accbbdb0d3..86b49a94f4 100644 --- a/testsuite/a11y/headerbar.ui +++ b/testsuite/a11y/headerbar.ui @@ -2,7 +2,6 @@ - Title Yes