Now GtkMenu/GtkMenuItem request/allocate in height-for-width
manner... to reduce the height of the menu one must explicitly
set the requested minimum width of the menu to a greater value
(using gtk_widget_set_size_request()).
This completes the move to get rid of using a GdkRegion for the
navigation region and the only user of gdk_region_polygon(). We keep
track of the triangle and compute in/out points ourselves now.
Unfortunately the DRAW_STAYUP_TRIANGLES debugging code doesn't work
using cairo, so I removed it completely.
With this change, key events continue to go to an open menu even
when the pointer is moved over a non-selectable menuitem. The mnemonics
are shown and hidden accordingly.
This commit was created using a script that searched for all docstrings
containing a parameter and the string 'or %NULL'.
Gdk backends and demos excluded as they are not part of a public API
https://bugzilla.gnome.org/show_bug.cgi?id=610474
Deprecate widget flag macros GTK_WIDGET_STATE, GTK_WIDGET_SAVED_STATE,
GTK_WIDGET_FLAGS, GTK_WIDGET_TOPLEVEL, GTK_WIDGET_NO_WINDOW and
GTK_WIDGET_COMPOSITE_CHILD.
Also deprecate the type macros GTK_WIDGET_TYPE, GTK_OBJECT_TYPE_NAME and
GTK_OBJECT_TYPE which have become redundant.
Instances of GTK_WIDGET_TOPLEVEL are replaced with gtk_widget_is_toplevel,
GTK_WIDGET_TYPE is replaced with G_OBJECT_TYPE, GTK_WIDGET_COMPOSITE_CHILD
is replaced with use of the "composite-child" property and uses of
GTK_WIDGET_NO_WINDOW are adjusted to use gtk_widget_get_has_window.
Uses of GTK_WIDGET_SAVED_STATE and GTK_WIDGET_FLAGS inside GtkWidget are
changed to direct flag usage.
Documentation is updated to refer to gtk_widget_set_has_window and
gtk_widget_get_has_window.
Gail and tests are updated as well.
Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=69872
...and show them in menus when navigating the menu with the keyboard.
This is similar to what other platforms do, and reduces visual clutter.
There is a setting to control this. Most of the work on this patch was
done by Thomas Wood. See bug 588554.
The Gtk-custom.c file in gir-repository contained a number of
introspection annotations. Merge those into the GTK source files.
Some documentation was moved from the tmpl/ files to accomodate
the addition of annotations.
If we get a nonlinear enter/leave notify on the toplevel we need
to set nonlinear in all the events we send, even if the in-toplevel
tree is linear.
This fixes combobox menus popping down immediately when you click
(not hold). (bug #587559)
Reserving toggle space is nice for consistency in main menus
and context menus, but it gets in the way in special situations,
such as combo boxes, tabular menus, etc.
We do want to have consistent padding in menus in menubars and context
menus, but the menus used in comboboxes don't need the extra padding.
Add private GtkMenu API for turning this off. Bug 564063
* gtk/gtkmenu.c (gtk_menu_size_request): Use consistent padding
regardless of imagees or checks being in the menu. Also add
padding on the right edge.
Proposal by Luca Ferretti, patch by Jon McCann
svn path=/trunk/; revision=21745
* gtk/gtkenums.h: Add GtkArrowPlacement
* gtk/gtkmenu.c (gtk_menu_class_init), (get_arrows_border),
(get_arrows_visible_area), (get_double_arrows),
(get_arrows_sensitive_area): Implement GtkMenu::arrow-placement
to allow scrolling arrows to be placed at the start, end or both
Patch by Tommi Komulainen and myself
svn path=/trunk/; revision=21606
2008-08-12 Michael Natterer <mitch@imendio.com>
* gtk/*.c: consistently chain up using
GTK_FOO_CLASS(parent_class)->bar(instance) instead of
(*GTK_FOO_CLASS(parent_class))->bar(instance).
svn path=/trunk/; revision=21085
2008-08-08 Cody Russell <bratsche@gnome.org>
* gtk/gtkmenushell.c
* gtk/gtkmenu.c: In enter/leave notify events, check that the crossing
mode is not GTK_GRAB, GTK_UNGRAB, or STATE_CHANGED. Fixes regressions
in menus caused by bug #56070.
svn path=/trunk/; revision=21049
2008-06-30 Cody Russell <bratsche@gnome.org>
* Practically everything changed.
Change all references of GIMP Toolkit (and variations of it)
to GTK+ Toolkit, showing no mercy at all to our beloved
ancestry. (#540529)
svn path=/trunk/; revision=20709
2008-06-21 Hans Breuer <hans@breuer.org>
* gtk/gtkprintoperation-win32.c(1713) : fix 'function' : incompatible
types - from 'struct _cairo *' to 'struct _cairo_surface *' by
passing the surface to cairo_surface_show_page(), not the context
* gtk/gtkprintoperation-win32.c(866) : get rid of warning C4018:
'<' : signed/unsigned mismatch by using guint for the loop
* gtk/gtkmenu.c(gtk_menu_get_property) : property 'menu::active' is
an uint, gtk_menu_get_active() returns the widget pointer. Convert
the latter to the former by calculating the index in menu::children
Also fix some occurences of g_return_if_fail() where
g_return_val_if_fail() was meant
svn path=/trunk/; revision=20662
2008-06-19 Johan Dahlin <jdahlin@async.com.br>
* gtk/gtkmenu.c (gtk_menu_set_accel_path):
Remove an unused variable and cast to gchar to avoid a compiler
warning.
svn path=/trunk/; revision=20467
Don't store the accel path as a string in gtkmenu/gtkmenuitem.
The accel path will be interned anyway, so keeping a string copy around
is just a waste of memory.
Improve the documentation to mention this.
svn path=/trunk/; revision=20331
2008-05-30 Michael Natterer <mitch@imendio.com>
* gtk/gtkmenu.c (get_attach_info): cast attach_info_free() to
GDestroyNotify when using it in g_object_set_data_full().
svn path=/trunk/; revision=20257
detail
* gtk/gtkmenu.c (gtk_menu_paint): Use "menu_scroll_arrow_up/down"
as detail when drawing scroll arrow backgrounds. Proposed by
Tommi Komulainen.
svn path=/trunk/; revision=20202
2007-11-14 Michael Natterer <mitch@imendio.com>
* gtk/gtkmenu.c (gtk_menu_popup): remove recently added
gdk_flush() again, it's not needed after all.
svn path=/trunk/; revision=18991
2007-11-06 Michael Natterer <mitch@imendio.com>
* gtk/gtkmenu.c (gtk_menu_popup): call gdk_flush() after showing
the menu so we can definitely grab on it. Grab failure found by
Xan Lopez.
svn path=/trunk/; revision=18969
2007-09-11 Michael Natterer <mitch@imendio.com>
* gtk/gtkmenu.c (gtk_menu_button_release): Make sure
menu_shell->button gets reset to 0 when we bail out early here
instead of chaining up, so it is in a consistent state for the
next press/release in GtkMenuShell. Fixes bug #449371.
svn path=/trunk/; revision=18795
2007-06-27 Michael Natterer <mitch@imendio.com>
Merged from maemo-gtk:
* gtk/gtkmenu.c (gtk_menu_handle_scrolling): when updating the
scroll arrows' state, make sure we don't overwrite the insensitive
state that might have been set by the first scroll step hitting
the top/bottom border of the menu.
svn path=/trunk/; revision=18260
2007-04-27 Michael Natterer <mitch@imendio.com>
Merged heavily modified patch from maemo-gtk which enables opening
and closing submenus on click, and introduces some usability
changes when gtk-touchscreen-mode is enabled (bug #128968):
* gtk/gtkmenushell.c (struct GtkMenuShellPrivate): added boolean
"activated_submenu" to indicate that the current mouse operation
(click or drag) has opened a submenu.
(gtk_menu_shell_button_press): pop up submenus without delay
and record the fact in "activated_submenu".
(gtk_menu_shell_button_release): if a submenu was explicitely
opened, or not opened by this release's button_press, or enough
time has passed since timeout-opening it, close the submenu here.
(gtk_menu_shell_enter_notify): when entering a menu item with
any mouse button pressed, open its submenu.
(gtk_real_menu_shell_move_current): in touchsreen mode, close the
submenu when moving the focus away from it via keyboard-navigation.
* gtk/gtkmenuitem.[ch] (_gtk_menu_item_popup_submenu): added
parameter "gboolean with_delay" so GtkMenuShell can control this
for the different scenarios of submenu showing.
(_gtk_menu_item_popdown_submenu): new function. also needed by
GtkMenuShell for closing submenus on click.
Renamed internal function gtk_menu_item_select_timeout() to
gtk_menu_item_popup_timeout().
(gtk_menu_item_real_popup_submenu): new utility function which
does the actual popup and records the exact time of the popup when
the menu was timeout-opened (using g_get_current_time()).
(gtk_real_menu_item_select): don't add the popup timeout when in
touchscreen mode.
* gtk/gtkmenu.c (gtk_menu_popup): in touchscreen mode, select the
first item of every opened menu.
svn path=/trunk/; revision=17659
2007-04-25 Michael Natterer <mitch@imendio.com>
* gtk/gtkmenu.c (gtk_menu_handle_scrolling): fix ACTIVE state of
scroll buttons (we were setting the state to ACTIVE but
immediately overwriting it with NORMAL or PRELIGHT). Also got rid
of many separate calls to gdk_window_invalidate_rect() by
remembering the old button state and only invalidating the area if
the state has changed (addresses parts of bug #433242, Tommi
Komulainen).
(gtk_menu_scroll_to): change the arrow states only if changing
from or to INSENSITIVE state, so we don't overwrite the ACTIVE
state set by above function.
svn path=/trunk/; revision=17630
2007-03-29 Michael Natterer <mitch@imendio.com>
Don't close menus on clicks on their border area (bug #423761).
(modified patch from maemo-gtk).
* gtk/gtkmenu.c (gtk_menu_button_press)
(gtk_menu_button_release): bail out early if the click was on the
menu's border (not on any item and not outside the window).
(pointer_in_menu_window): new utility function which checks if
passed root coords are inside the menu_shell or one of its
parent shells.
svn path=/trunk/; revision=17571
2007-03-29 Michael Natterer <mitch@imendio.com>
* gtk/gtkmenu.c: get rid of local GtkSettings variables by moving
gtk_widget_get_settings() into the g_object_get() call. Some small
indentation fixes.
svn path=/trunk/; revision=17570
2007-02-14 Michael Natterer <mitch@imendio.com>
* gtk/gtkmenu.c (gtk_menu_motion_notify): don't forget to set the
state of the synthesized GDK_ENTER_NOTIFY event. Fix taken from
maemo-gtk.
svn path=/trunk/; revision=17291
2007-02-01 Michael Natterer <mitch@imendio.com>
* gtk/gtkmenu.c (gtk_menu_button_press)
(gtk_menu_button_release)
(gtk_menu_button_scroll): remove redundant and confusing
if (GTK_IS_MENU (widget)) checks because "widget" is always a
GtkMenu here.
svn path=/trunk/; revision=17247
2007-01-18 Michael Natterer <mitch@imendio.com>
* gtk/gtkcheckbutton.c
* gtk/gtkdnd.c
* gtk/gtkentry.c
* gtk/gtkmenu.c
* gtk/gtktreeview.c
* gtk/gtkviewport.c: pass more clip rectangles to gtk_paint_foo()
functions. Based on a patch from maemo-gtk (bug #398023).
svn path=/trunk/; revision=17183
2007-01-05 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkmenu.c (gtk_menu_paint): Take the scroll arrow into
account when drawing the background. (#393166, Benjamin Berg)
svn path=/trunk/; revision=17084
2006-12-15 Federico Mena Quintero <federico@novell.com>
Merged from gtk-2-10:
* gtk/gtkmenu.c (gtk_menu_set_title): Don't try to optimize for
the case where the new title is the same as the old title, to
preserve the behavior from GTK+ 2.8 (NULL and "" titles are not
equivalent). Handle the case where title == priv->title. This
was found by the LSB compatibility tests:
https://bugzilla.novell.com/show_bug.cgi?id=223882
2006-12-15 Dom Lachowicz <domlachowicz@gmail.com>
2006-11-16 Michael Natterer <mitch@imendio.com>
Add new infrastructure for notifications of failed keyboard
navigation and navigation with restricted set of keys.
The patch handles configurable beeping, navigating the GUI with
cursor keys only (as in phone environments), and configurable
wrap-around. Fixes bugs #322640, #70986, #318827, #334726, #334742
and #309291.
* gtk/gtksettings.c: added properties gtk-keynav-cursor-only,
gtk-keynav-wrap-around and gtk-error-bell.
* gtk/gtkwidget.[ch]: added new signal "keynav-failed" and public
API to emit it. Added New function gtk_widget_error_bell() which
looks at the gtk-error-bell setting and calls gdk_window_beep()
accordingly.
* gtk/gtk.symbols: add the new widget symbols.
* gtk/gtkcellrendereraccel.c
* gtk/gtkimcontextsimple.c
* gtk/gtkmenu.c
* gtk/gtknotebook.c: use gtk_widget_error_bell() or look at the
gtk-error-bell setting instead of calling gdk_display_beep()
unconditionally.
* gtk/gtkcombobox.c
* gtk/gtkentry.c
* gtk/gtkiconview.c
* gtk/gtklabel.c
* gtk/gtkmenushell.c
* gtk/gtkspinbutton.c
* gtk/gtktextview.c
* gtk/gtktreeview.c: call gtk_widget_error_bell() on failed keynav.
* gtk/gtkentry.c
* gtk/gtklabel.c
* gtk/gtkrange.c
* gtk/gtktextview.c: consult gtk_widget_keynav_failed() on failed
cursor navigation and leave the widget if it returns FALSE.
* gtk/gtkmenushell.c
* gtk/gtknotebook.c: only wrap around if gtk-keynav-wrap-around
is TRUE.
* gtk/gtkradiobutton.c: ask gtk_widget_keynav_failed() to decide
whether to to wrap-around, and don't select active items on cursor
navigation if gtk-keynav-cursor-only is TRUE. Should look at
gtk-keynav-wrap-around too, will look into that.
2006-05-12 Alexander Larsson <alexl@redhat.com>
* gtk/gtkwindow.c:
Better handling of the window group on unsetting transient-for, since
the transient parent might have changed group.
* gtk/gtkmenu.c:
Combine the handling of transient for the attach-widget and the
window group handling by setting transient-to on popup/popdown only.
See bug #340401
* gtk/gtkprintunixdialog.c:
Remove part of old fix no longer needed.
2006-05-12 Alexander Larsson <alexl@redhat.com>
* gtk/gtkrecentmanager.c:
Fix build errors.
* gtk/gtk.symbols:
* demos/gtk-demo/printing.c:
* gtk/gtkprintoperation-win32.c:
* gtk/gtkprintoperation.[ch]:
* gtk/gtkprintsettings.[ch]:
* modules/printbackends/cups/gtkprintbackendcups.c:
* modules/printbackends/lpr/gtkprintbackendlpr.c:
* modules/printbackends/pdf/gtkprintbackendpdf.c:
* tests/print-editor.c:
* tests/testnouiprint.c:
* tests/testprint.c:
* tests/testprintfileoperation.c:
Rename functions from nr_of_pages to n_pages, and num_copies to
n_copies to match other gtk+ names.
* gtk/gtkmenu.c: (gtk_menu_popdown):
Only re-set window group on popdown if we set it on popup (i.e.
if there is a parent menu shell).
Fixed part of bug #340401
* gtk/gtkwindow.c:
Add (contruct) property "transient-for" to GtkWindow. This
is needed for the fix to bug #340401.
* gtk/gtkprintunixdialog.c:
Use the transient-for property on construction and populate the dialog
with widgets after that. This fixes bug #340401.
More n_pages renames.
Wed May 10 15:57:53 2006 Tim Janik <timj@imendio.com>
* applied unified patch for configurable scroll arrow sizes from
bug #333632 and bug #325282.
* gtk/gtkwidget.c (gtk_widget_class_init): added ::scroll-arrow-hlength
and ::scroll-arrow-vlength style properties. fixed upper limit for
::separator-width and ::separator-height to be MAXINT.
* gtk/gtkmenu.c: use GtkWidget::scroll-arrow-vlength to determine the
scroll arrow size, instead of using a hard coded constant.
* gtk/gtknotebook.c: use GtkWidget::scroll-arrow-vlength and
GtkWidget::scroll-arrow-hlength to determine scroll arrow sizes.
added GtkNotebook::arrow-spacing style property to configure the
spacing between scroll arrows.
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)
2006-03-27 Michael Natterer <mitch@imendio.com>
* gtk/gtkmenu.c (gtk_menu_scroll_by): bail out if there is no need
for scrolling (more obvious than adding additional conditions to
the scroll offset calculation). Fixes bug #335912.
2006-02-22 Michael Natterer <mitch@imendio.com>
* gtk/gtksettings.c: added boolean property gtk-touchscreen-mode,
which essentially means "there are no motion notify events", so
widgets can't use the pointer hovering them for anything.
* gtk/gtkmenu.c: if gtk-touchscreen-mode is TRUE, scroll menus
when clicking the scroll arrows, since hovering goes undetected.
Fixes bug #323028.
Added boolean style property "double-arrows" which always makes
both scroll arrows visible when the menu is too long.
For pushed-in popup menus, both arrows are always shown
(regardless of double-arrows), in order to fix user confusion
about the blank area. Fixes bug #129463.
2005-12-02 Michael Natterer <mitch@imendio.com>
* gtk/gtkmenu.c: applied modified patch from maemo-gtk which
adds a "horizontal-padding" style property. Fixes bug #323036.