Allow unsetting the title by setting to NULL. Move docs inline. Update the

Thu Dec 27 15:13:44 2001  Owen Taylor  <otaylor@redhat.com>

	* gtk/gtkmenu.c (gtk_menu_set_title): Allow unsetting
	the title by setting to NULL. Move docs inline.
	Update the title if the tearoff window already
	exists. Code cleanup. (Fixes #65190, reported by
	Vitaly Tishkov.)
This commit is contained in:
Owen Taylor 2001-12-27 20:22:16 +00:00 committed by Owen Taylor
parent 95f4d72e62
commit aae695ab65
9 changed files with 109 additions and 27 deletions

View File

@ -1,3 +1,11 @@
Thu Dec 27 15:13:44 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkmenu.c (gtk_menu_set_title): Allow unsetting
the title by setting to NULL. Move docs inline.
Update the title if the tearoff window already
exists. Code cleanup. (Fixes #65190, reported by
Vitaly Tishkov.)
Thu Dec 27 14:04:22 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtksocket.c (gtk_socket_key_press_event):

View File

@ -1,3 +1,11 @@
Thu Dec 27 15:13:44 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkmenu.c (gtk_menu_set_title): Allow unsetting
the title by setting to NULL. Move docs inline.
Update the title if the tearoff window already
exists. Code cleanup. (Fixes #65190, reported by
Vitaly Tishkov.)
Thu Dec 27 14:04:22 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtksocket.c (gtk_socket_key_press_event):

View File

@ -1,3 +1,11 @@
Thu Dec 27 15:13:44 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkmenu.c (gtk_menu_set_title): Allow unsetting
the title by setting to NULL. Move docs inline.
Update the title if the tearoff window already
exists. Code cleanup. (Fixes #65190, reported by
Vitaly Tishkov.)
Thu Dec 27 14:04:22 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtksocket.c (gtk_socket_key_press_event):

View File

@ -1,3 +1,11 @@
Thu Dec 27 15:13:44 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkmenu.c (gtk_menu_set_title): Allow unsetting
the title by setting to NULL. Move docs inline.
Update the title if the tearoff window already
exists. Code cleanup. (Fixes #65190, reported by
Vitaly Tishkov.)
Thu Dec 27 14:04:22 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtksocket.c (gtk_socket_key_press_event):

View File

@ -1,3 +1,11 @@
Thu Dec 27 15:13:44 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkmenu.c (gtk_menu_set_title): Allow unsetting
the title by setting to NULL. Move docs inline.
Update the title if the tearoff window already
exists. Code cleanup. (Fixes #65190, reported by
Vitaly Tishkov.)
Thu Dec 27 14:04:22 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtksocket.c (gtk_socket_key_press_event):

View File

@ -1,3 +1,11 @@
Thu Dec 27 15:13:44 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkmenu.c (gtk_menu_set_title): Allow unsetting
the title by setting to NULL. Move docs inline.
Update the title if the tearoff window already
exists. Code cleanup. (Fixes #65190, reported by
Vitaly Tishkov.)
Thu Dec 27 14:04:22 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtksocket.c (gtk_socket_key_press_event):

View File

@ -1,3 +1,11 @@
Thu Dec 27 15:13:44 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkmenu.c (gtk_menu_set_title): Allow unsetting
the title by setting to NULL. Move docs inline.
Update the title if the tearoff window already
exists. Code cleanup. (Fixes #65190, reported by
Vitaly Tishkov.)
Thu Dec 27 14:04:22 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtksocket.c (gtk_socket_key_press_event):

View File

@ -192,12 +192,10 @@ See gtk_menu_set_accel_group().
<!-- ##### FUNCTION gtk_menu_set_title ##### -->
<para>
Sets the title string for the menu. The title is displayed when the menu
is shown as a tearoff menu.
</para>
@menu: a #GtkMenu.
@title: a string containing the title for the menu.
@menu:
@title:
<!-- ##### FUNCTION gtk_menu_get_tearoff_state ##### -->

View File

@ -134,6 +134,8 @@ static void gtk_menu_reparent (GtkMenu *menu,
static void gtk_menu_remove (GtkContainer *menu,
GtkWidget *widget);
static void gtk_menu_update_title (GtkMenu *menu);
static void _gtk_menu_refresh_accel_paths (GtkMenu *menu,
gboolean group_changed);
@ -288,8 +290,7 @@ gtk_menu_get_property (GObject *object,
switch (prop_id)
{
case PROP_TEAROFF_TITLE:
g_value_set_string (value, gtk_object_get_data (GTK_OBJECT (menu),
"gtk-menu-title"));
g_value_set_string (value, gtk_menu_get_title (menu));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -464,6 +465,9 @@ gtk_menu_attach_to_widget (GtkMenu *menu,
/* we don't need to set the style here, since
* we are a toplevel widget.
*/
/* Fallback title for menu comes from attach widget */
gtk_menu_update_title (menu);
}
GtkWidget*
@ -503,6 +507,9 @@ gtk_menu_detach (GtkMenu *menu)
g_free (data);
/* Fallback title for menu comes from attach widget */
gtk_menu_update_title (menu);
gtk_widget_unref (GTK_WIDGET (menu));
}
@ -971,6 +978,30 @@ gtk_menu_set_tearoff_hints (GtkMenu *menu,
GDK_HINT_MAX_SIZE|GDK_HINT_MIN_SIZE);
}
static void
gtk_menu_update_title (GtkMenu *menu)
{
if (menu->tearoff_window)
{
const gchar *title;
GtkWidget *attach_widget;
title = gtk_menu_get_title (menu);
if (!title)
{
attach_widget = gtk_menu_get_attach_widget (menu);
if (GTK_IS_MENU_ITEM (attach_widget))
{
GtkWidget *child = GTK_BIN (attach_widget)->child;
if (GTK_IS_LABEL (child))
title = gtk_label_get_text (GTK_LABEL (child));
}
}
if (title)
gtk_window_set_title (GTK_WINDOW (menu->tearoff_window), title);
}
}
void
gtk_menu_set_tearoff_state (GtkMenu *menu,
@ -992,9 +1023,6 @@ gtk_menu_set_tearoff_state (GtkMenu *menu,
if (!menu->tearoff_window)
{
GtkWidget *attach_widget;
gchar *title;
menu->tearoff_window = g_object_connect (gtk_widget_new (GTK_TYPE_WINDOW,
"type", GTK_WINDOW_TOPLEVEL,
NULL),
@ -1008,30 +1036,17 @@ gtk_menu_set_tearoff_state (GtkMenu *menu,
"event",
GTK_SIGNAL_FUNC (gtk_menu_window_event),
GTK_OBJECT (menu));
gtk_menu_update_title (menu);
gtk_widget_realize (menu->tearoff_window);
title = gtk_object_get_data (GTK_OBJECT (menu), "gtk-menu-title");
if (!title)
{
attach_widget = gtk_menu_get_attach_widget (menu);
if (GTK_IS_MENU_ITEM (attach_widget))
{
GtkWidget *child = GTK_BIN (attach_widget)->child;
if (GTK_IS_LABEL (child))
gtk_label_get (GTK_LABEL (child), &title);
}
}
if (title)
gdk_window_set_title (menu->tearoff_window->window, title);
gdk_window_set_decorations (menu->tearoff_window->window,
GDK_DECOR_ALL |
GDK_DECOR_RESIZEH |
GDK_DECOR_MINIMIZE |
GDK_DECOR_MAXIMIZE);
gtk_window_set_policy (GTK_WINDOW (menu->tearoff_window),
FALSE, FALSE, TRUE);
gtk_window_set_resizable (GTK_WINDOW (menu->tearoff_window), FALSE);
menu->tearoff_hbox = gtk_hbox_new (FALSE, FALSE);
gtk_container_add (GTK_CONTAINER (menu->tearoff_window), menu->tearoff_hbox);
@ -1103,14 +1118,27 @@ gtk_menu_get_tearoff_state (GtkMenu *menu)
return menu->torn_off;
}
/**
* gtk_menu_set_title:
* @menu: a #GtkMenu
* @title: a string containing the title for the menu.
*
* Sets the title string for the menu. The title is displayed when the menu
* is shown as a tearoff menu.
**/
void
gtk_menu_set_title (GtkMenu *menu,
const gchar *title)
{
g_return_if_fail (GTK_IS_MENU (menu));
gtk_object_set_data_full (GTK_OBJECT (menu), "gtk-menu-title",
if (title)
g_object_set_data_full (G_OBJECT (menu), "gtk-menu-title",
g_strdup (title), (GtkDestroyNotify) g_free);
else
g_object_set_data (G_OBJECT (menu), "gtk-menu-title", NULL);
gtk_menu_update_title (menu);
g_object_notify (G_OBJECT (menu), "tearoff_title");
}