diff options
author | Søren Sandmann <sandmann@redhat.com> | 2006-04-25 14:27:32 +0000 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@src.gnome.org> | 2006-04-25 14:27:32 +0000 |
commit | b9d1a034408647f5e4ac7c00ce3d9b3dae29c954 (patch) | |
tree | eaaecbd294cc430b57fe07a90c06097e767cd8e3 /gtk/gtkmenuitem.c | |
parent | 33a8d113e1006250ebcb5744256f68dcbee80247 (diff) | |
download | gtk+-b9d1a034408647f5e4ac7c00ce3d9b3dae29c954.tar.gz |
Create 'composited' label.
Tue Apr 25 10:25:28 2006 Søren Sandmann <sandmann@redhat.com>
* tests/testgtk.c (create_alpha_window): Create 'composited' label.
* tests/testgtk.c (on_composited_changed): New function, change
the label to say whether the screen is composited or not.
* gtk/gtkwindow.c (gtk_window_on_composited_changed): When
composited status change, invalidate the window and propagate the signal;.
* gtk/gtkwindow.c (gtk_window_map): Set the appropriate type hint
if reset_type_hint is TRUE.
* gtk/gtkwindow.c (gtk_window_set_type_hint): If hint is one of
the old hints, store a shadow copy in the public window->type_hint
bitfield, otherwise set this field to normal. Set the private
field to the type hint.
* gtk/gtkwindow.c (gtk_window_init): Initialize priv->type_hint.
* gtk/gtkwindow.c (struct _GtkWindowPrivate): New field
"reset_type_hint" indicating whether the type hint needs to be
reset. New field type_hint containing a GdkWindowTypeHint.
* gtk/gtkwidget.c (propagate_composited_changed): New function to
propagate changes in composited status.
(gtk_widget_class_init): Add composited_changed signal.
* gtk/gtkwidget.h (struct _GtkWidgetClass): New signal composited-changed.
* gtk/gtkwidget.c (gtk_widget_is_composited): New function.
* gtk/gtktooltips.c (gtk_tooltips_draw_tips): Set transient for.
* gtk/gtktooltips.c (gtk_tooltips_force_window): Set the type hint
* gtk/gtkmenuitem.c (gtk_menu_item_position_menu): Compute whether
the item belongs to a menubar. Set the type_hint appropriately
depending on the outcome.
* gtk/gtkmenu.c (gtk_menu_position): Set the default type hint here.
* gtk/gtkmenu.c (gtk_menu_attach_to_widget): connect to hierarchy
changed on the attach widget.
* gtk/gtkmenu.c (attach_widget_hierarchy_changed): New function to
set the transient_for property for menus.
* gtk/gtkdnd.c (set_icon_stock_pixbuf): Set the appropriate type hint.
* gtk/gtkcombo.c (gtk_combo_popup_list): Make the popup window
transient for the toplevel.
* gtk/gtkcombobox.c (gtk_combo_box_set_popup_widget): Set
transient-for, for the popup window.
* gdk/x11/gdkwindow-x11.c (gdk_window_get_type_hint): Support for
new window types.
* gdk/x11/gdkwindow-x11.c (gdk_window_set_type_hint): Add support
for new window types.
* gdk/x11/gdkscreen-x11.c (_gdk_x11_screen_process_owner_change):
New function called whenever the compositing manager comes and goes.
* gdk/x11/gdkscreen-x11.c (gdk_screen_is_composited): New function.
* gdk/x11/gdkscreen-x11.c
(_gdk_x11_screen_request_cm_notification, make_cm_atom,
check_is_composited): New functions
* gdk/x11/gdkevents-x11.c (gdk_event_translate): Call
_gdk_x11_screen_process_owner_change when an
XFixesSelectionNotifyEvent is received.
* gdk/x11/gdkdisplay-x11.c (gdk_display_open): Call
_gdk_x11_screen_request_cm_notification() on all screens.
* gdk/quartz/gdkscreen-quartz.c (gdk_screen_is_composited): Dummy
implementation.
* gdk/gdkscreen.c (gdk_screen_class_init): New signal,
'composited-changed'.
* gdk/gdkwindow.h: Add new EWMH window types.
* gdk/win32/gdkscreen-win32.c (gdk_screen_is_composited)
Diffstat (limited to 'gtk/gtkmenuitem.c')
-rw-r--r-- | gtk/gtkmenuitem.c | 42 |
1 files changed, 35 insertions, 7 deletions
diff --git a/gtk/gtkmenuitem.c b/gtk/gtkmenuitem.c index b58e13612e..3b3d346c59 100644 --- a/gtk/gtkmenuitem.c +++ b/gtk/gtkmenuitem.c @@ -1122,7 +1122,7 @@ gtk_menu_item_position_menu (GtkMenu *menu, { GtkMenuItem *menu_item; GtkWidget *widget; - GtkWidget *parent_menu_item; + GtkMenuItem *parent_menu_item; GdkScreen *screen; gint twidth, theight; gint tx, ty; @@ -1164,6 +1164,22 @@ gtk_menu_item_position_menu (GtkMenu *menu, ty += widget->allocation.y; get_offsets (menu, &horizontal_offset, &vertical_offset); + + if (GTK_IS_MENU_BAR (widget->parent)) + { + menu_item->from_menubar = TRUE; + } + else if (GTK_IS_MENU (widget->parent)) + { + if (GTK_MENU (widget->parent)->parent_menu_item) + menu_item->from_menubar = GTK_MENU_ITEM (GTK_MENU (widget->parent)->parent_menu_item)->from_menubar; + else + menu_item->from_menubar = FALSE; + } + else + { + menu_item->from_menubar = FALSE; + } switch (menu_item->submenu_placement) { @@ -1175,7 +1191,6 @@ gtk_menu_item_position_menu (GtkMenu *menu, menu_item->submenu_direction = GTK_DIRECTION_LEFT; tx += widget->allocation.width - twidth; } - if ((ty + widget->allocation.height + theight) <= monitor.y + monitor.height) ty += widget->allocation.height; else if ((ty - theight) >= monitor.y) @@ -1188,16 +1203,23 @@ gtk_menu_item_position_menu (GtkMenu *menu, case GTK_LEFT_RIGHT: if (GTK_IS_MENU (widget->parent)) - parent_menu_item = GTK_MENU (widget->parent)->parent_menu_item; + parent_menu_item = GTK_MENU_ITEM (GTK_MENU (widget->parent)->parent_menu_item); else parent_menu_item = NULL; + parent_xthickness = widget->parent->style->xthickness; + if (parent_menu_item && !GTK_MENU (widget->parent)->torn_off) - menu_item->submenu_direction = GTK_MENU_ITEM (parent_menu_item)->submenu_direction; - else if (direction == GTK_TEXT_DIR_LTR) - menu_item->submenu_direction = GTK_DIRECTION_RIGHT; + { + menu_item->submenu_direction = parent_menu_item->submenu_direction; + } else - menu_item->submenu_direction = GTK_DIRECTION_LEFT; + { + if (direction == GTK_TEXT_DIR_LTR) + menu_item->submenu_direction = GTK_DIRECTION_RIGHT; + else + menu_item->submenu_direction = GTK_DIRECTION_LEFT; + } switch (menu_item->submenu_direction) { @@ -1236,6 +1258,12 @@ gtk_menu_item_position_menu (GtkMenu *menu, *y = ty; gtk_menu_set_monitor (menu, monitor_num); + + if (!GTK_WIDGET_VISIBLE (menu->toplevel)) + { + gtk_window_set_type_hint (GTK_WINDOW (menu->toplevel), menu_item->from_menubar? + GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU : GDK_WINDOW_TYPE_HINT_POPUP_MENU); + } } /** |