Use a gadget for the button, and for the indicator.
A complication here is that GtkCheckButton (and
GtkRadioButton) have a totally different appearance
depending on the ::draw-indicator property. If an
indicator is not required, we just reuse the
GtkButton gadget.
This mostly works; some minor sizing issues left, e.g. cranking
up the indicator-size causes the checkbutton grid in testgtk
to overlap.
Instead of having old and new style, now have a GtkCssStyleChange opaque
object that will compute the changes you are interested in for you.
This simplifies change signal handlers quite a bit and avoids lots of
repeated computation in every signal handler.
Convert GtkToggleButton and its subclasses to CSS nodes.
Keep the button element name for when we want to render
these button-like (but with .toggle, .check and .radio
style classes for differentiation).
When we want to render them with an indicator, use distinct
element names checkbutton and radiobutton, and add a subnode
for the indicator with name check or radio.
This is a hack to get around the optimizations done by the CSS engine.
The CSS engine will notice that no CSS properties changed on the
widget itself when going from one state to another and not queue
a redraw.
And the reason for no properties changing will be that only the
checkmark itself changes, but that is hidden behind a
gtk_style_context_save()/_restore() pair, so it won't be caught.
on:
- GtkToggleButton
- GtkCheckButton
- GtkRadioButton
- GtkModelButton
- GtkCellRendererToggle
- GtkCheckMenuItem
also update themes:
- Adwaita
- Raleigh
but not the win32 theme.
The new :checked state replaces :active for the actual checkedness of
the widgets and :active is now used exclusively while the button is being
pressed.
https://bugzilla.gnome.org/show_bug.cgi?id=733967
This commit introduces a new setting, gtk-visible-focus, backed
by the Gtk/VisibleFocus X setting. Its three values control how
focus rectangles are displayed.
'always' is equivalent to the traditional GTK+ behaviour of always
rendering focus rectangles.
'never' does what it says, and is intended for keyboardless
situations, e.g. tablets.
'automatic' hides focus rectangles initially, until the user
interacts with the keyboard, at which point focus rectangles
become visible.
https://bugzilla.gnome.org/show_bug.cgi?id=649567
of limiting it to it's minimum size.
This fixes height-for-width labels inside a GtkCheckButton, for some
reason GtkCheckButton was limiting the child allocation to the child's
minimum request, probably for the sake of virtual left-alignment of
the child label to be beside the checkmark. This should be done by
other means if nescesarry.
It doesn't make sense to keep them separate as GtkSizeRequest requires a
GtkWidget and GtkWidget implements GtkSizeRequest, so you can never have
one without the other.
It also makes the code a lot easier because no casts are required when
calling functions.
Also, the names would translate to gtk_widget_get_width() and people
agreed that this would be a too generic name, so a "preferred" was added
to the names.
So this patch moves the functions:
gtk_size_request_get_request_mode() => gtk_widget_get_request_mode()
gtk_size_request_get_width() => gtk_widget_get_preferred_width()
gtk_size_request_get_height() => gtk_widget_get_preferred_height()
gtk_size_request_get_size() => gtk_widget_get_preferred_size()
gtk_size_request_get_width_for_height() =>
gtk_widget_get_preferred_width_for_height()
gtk_size_request_get_height_for_width() =>
gtk_widget_get_preferred_height_for_width()
... and moves the corresponding vfuncs to the GtkWidgetClass.
The patch also renames the implementations of the vfuncs in widgets to
include the word "preferrred".
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-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
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
2005-09-01 Matthias Clasen <mclasen@redhat.com>
* gdk/*.c: Intern some more strings.
* gtk/gtkintl.h:
* gtk/*.c: Define an I_() macro and use it instead of the
bulky g_intern_static_string().
2005-08-31 Matthias Clasen <mclasen@redhat.com>
* gdk/Makefile.am:
* gtk/Makefile.am: Intern type names in code generated by
glib-mkenums, too.
* gtk/*.c:
* gdk/x11/*.c:
* gdk/*.c: Intern type names before registering the type to avoid
unnecessary copies.
2005-03-21 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkprivate.h: Define macros GTK_PARAM_READABLE,
GTK_PARAM_WRITABLE, GTK_PARAM_READWRITE which are like
their G_ counterparts, but also mark the name, nick
and blurb as static.
* gtk/*.c: Mark param spec strings as static, using
the new macros.
2005-03-20 Matthias Clasen <mclasen@redhat.com>
Make PLT-reduction work with gcc4, and don't include
everything in gdkalias.h:
* gtk/grk.symbols: Group symbols by header and source file.
* gtk/makegtkalias.pl: Protect definitions by the same
preprocessor symbols used to guard the headers. Move
the alias declarations to a separate file which is
produced when calling makegtkalias.pl -def
* gdk/Makefile.am (gtkaliasdef.c): Add a rule to generate
this file.
* gtk/*.c: Include gtkalias.h after the other headers,
include gtkaliasdef.c at the bottom.
* gtk/*.h: Small cleanups.
Mon Aug 9 12:48:04 2004 Matthias Clasen <maclas@gmx.de>
Add hidden aliases for exported symbols which are
used internally in order to get rid of many PLT
entries. (#145519, Arjan van de Ven)
* gtk/Makefile.am: Add rules to generate gtk.def and
from gtk.symbols, and make make check check the abi
with abicheck.sh.
(gtk_private_h_sources): Add gtkinternals.h
(gtk_built_private_headers): Add gtkalias.h
(gtk_extra_sources): Add gtk.symbols
(EXTRA_DIST): Add makegtkalias.pl and abicheck.sh
* gtk/gtk.symbols: New file. Definition of the GTK+ ABI.
The file can be processed by cpp to filter out certain
subsets of symbols.
* gtk/abicheck.sh: New file. Script to check the actually
symbols exported from libgtk-x11.2.0.so against the symbols
found in gtk.symbols.
* gtk/makegtkalias.pl: New file. Perl script to generate the
header containing the alias definitions for internally used
exported symbols from a list of symbols.
* gtk/gtkinternals.h: New file. An uninstalled header listing
symbols which must be exported for some reason and do not appear
in any other header.
* gtk/*.c: Include gtkalias.h
2004-03-05 Federico Mena Quintero <federico@ximian.com>
Fixes#136082 and #135265, patch by Morten Welinder.
* configure.in: Use AC_SYS_LARGEFILE.
* */*.c: #include <config.h>
Fri Jan 16 23:59:01 2004 Matthias Clasen <maclas@gmx.de>
The first part of the fix for #114351 (see also
gdk-pixbuf/ChangeLog and po/ChangeLog):
* gtk/gtkintl.h:
* gdk-pixbuf/gdk-pixbuf-i18n.h:
* gdk/gdkintl.h: Define P_() for property blurbs and nicks.
* gdk/gdkdisplaymanager.c:
* gdk-pixbuf/gdk-pixbuf.c:
* modules/input/gtkimcontextxim.c:
* gtk/*.c: Mark property blurbs and nicks with P_().
* po/Makefile.in.in: Add --keyword=P_ to the xgettext
invocation, since property blurbs and nicks are
now marked with P_().
Wed Jun 4 18:27:44 2003 Owen Taylor <otaylor@redhat.com>
* gtk/gtkcheckbutton.c (gtk_real_check_button_draw_indicator):
gtk/gtkradiobutton.c (gtk_radio_button_draw_indicator):
Use GTK_WIDGET_IS_SENSITIVE(), not GTK_WIDGET_SENSITIVE
(#92548, Tim Evans)
* gtk/gtkcheckmenuitem.c (gtk_real_check_menu_item_draw_indicator)
gtk/gtkradiomenuitem.c (gtk_radio_menu_item_draw_indicator): If
Use state_type = STATE_INSENSITIVE for insensitive menu items.
Sun Nov 10 21:29:03 2002 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtkcheckbutton.c (gtk_real_check_button_draw_indicator):
* gtk/gtkradiobutton.c (gtk_radio_button_draw_indicator)
Make sure check and option marks are drawn insensitive when the
widgets are insensitive.
(#92548, patch from Tim Evans)
Sun Nov 10 21:25:04 2002 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtkwidget.h (struct _GtkWidgetClass): Remove _gtk_reserved8
to restore binary compatibility.
Thu Oct 17 17:17:05 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkcheckbutton.c (gtk_check_button_size_request):
Fix use of uninitialized variable.
Thu Oct 17 14:38:37 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkaccellabel.c (gtk_accel_label_expose_event):
Align the baseline of the accelerator label with the
first baseline of the main label of the menu item. (#76593)
Wed Oct 16 18:25:24 2002 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkevents-x11.c (translate_key_event):
Use gdk_keymap_translate_keyboard_state() rather than
XLookupString() to get the keysymbol, since XLookupString
can confuse the input method handling. (#93575)
* gdk/x11/gdkkeys-x11.c: Rewrite the handling of
key translation for the non-XKB case to properly
handle Shift_Lock, Caps_Lock, Num_Lock according
to the Xlib spec. (#67066)
Thu Oct 17 16:13:28 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkcheckbutton.c gtk/gtkradiobutton.c: Make
the widgets work reasonably when they don't have
children -- draw the focus around the indicator,
and position the indicator symmetrically.
(#74830, Dave Camp)
* tests/testgtk.c: Add no-child portions to check and radio
button tests.
Wed Jun 12 16:21:38 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkcheckbutton.c (gtk_check_button_size_allocate):
Clamp size of child to at least 1x1. (#82431,
Boris Shingarov.)
Fri Feb 22 14:08:38 2002 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtkradiobutton.c, gtk/gtkcheckbutton.c, gtkbutton.h,
gtktogglebutton.c: feedback when check and radio buttons are
depressed.
Tue Jan 8 14:19:43 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkcheckbutton.c (gtk_check_button_size_allocate):
Fix problem where child->requisition was accessed
directly instead of calling get_child_requisition()
(#68199, Damon Chaplin)
Mon Dec 3 16:39:17 2001 Owen Taylor <otaylor@redhat.com>
Patch from Bill Haneman (with many modifications) to make
the focus color work on dark themes and to make the
focus line width configurable. (#61079, #63074)
* gtk/gtkwidget.c: Add style properties,
::focus-widget, ::focus-line-width, and ::focus-padding.
* gtk/gtkstyle.[ch]: Make gtk_paint_focus() take a
state argument as well so we can use fg[STATE] to
draw instead of always drawing with black.
Cange paint_focus() to respect GtkWidget::focus-width
and GtkWidget::focus-line-pattern. Fix continuity
problem where the default 1-1 stipple had a blob
in one corner and a gap in the other. Change the
interpretation of x/y/width/height to be the bounding
box of the focus rect instead of the rectangle
passed to gdk_draw_rectangle.
* gtk/gtkcheckbutton.c gtk/gtklistitem.c gtk/gtknotebook.c
gtk/gtkoptionmenu.c gtk/gtkradiobutton.c gtk/gtkspinbutton.c
gtk/gtktextview.c gtk/gtktreeview.c: Handle ::focus-width
and ::focus-line-padding.
* gtk/gtkentry.c: Handle :;focus-width property; cleanup
and remove duplicated code; fix drawing of focus rectangle
when interior-focus = FALSE. (#63072, #63073)
* gtk/gtkrange.c gtk/gtktext.c gtk/gtktreeitem.c
gtk/gtktreeviewcolumn.c: Basic fixups to make compile;
Range and TreeViewColumn will need more extensive fixing.
* gtk/gtkcolorsel.c: Honor focus line attributes when
drawing the focus on the color swatches. (#63071)
* gtk/gtkhsv.c: Honor focus line attributes when
drawing the focus for the ring and triangle.
* docs/widget_geometry.txt: Start at documenting how
various widgets are drawn.
* gtk/gtkbutton.c (_gtk_button_paint): Export
_gtk_button_paint() librarywide, so we don't have
duplicate a bunch of code in gtktogglebutton.c.
* gtk/gtktogglebutton.c: Use _gtk_button_paint().
Thu Nov 15 14:19:34 2001 Owen Taylor <otaylor@redhat.com>
* gdk/gdkwindow.c (gdk_window_invalidate_maybe_recurse): Cal
gdk_window_invalidate_maybe_recurse() for recursion.
(Soeren Sandmann)
* gtk/gtkviewport.c: Make !redraw_on_allocate. (Soeren Sandmann)
* gtk/gtkcontainer.c (gtk_container_expose): Call
gtk_container_forall() not _foreach() to propagate,
since we need to propagate exposes to internal children
as well.
* gtk/gtkwidget.c (gtk_widget_set_events, gtk_widget_add_events):
Remove the restriction of only being able to call these
on window widgets, since we have lots of NO_WINDOW widgets
with windows now; for add events, recurse over the children
of widget->window to find one owned by the widget.
* gtk/gtkbutton.[ch]: Make a NO_WINDOW widget, using an input-only
window to catch events.
* gtk/gtktogglebutton.[ch]: Remove the code for switching
between NO_WINDOW and WINDOW widgets based on the mode.
* gtk/gtkcheckbutton.c gtk/gtkoptionmenu.c gtk/gtkclist.c
gtk/gtktreeview.c: Adopt to NO_WINDOW change for GtkButton.
* gtk/gtkrange.[ch]: Make into a NO_WINDOW widget.
* gtk/gtkhscale.c, gtk/gtkvscale.c: Adopt to NO_WINDOW
change for range.
* gtk/gtknotebook.[ch]: Make into a NO_WINDOW widget.
* docs/Changes-2.0.txt: Add a note about the NO_WINDOW changes.
Sun Sep 30 22:15:52 2001 Manish Singh <yosh@gimp.org>
* gtk/gtkcheckbutton.c (gtk_check_button_size_allocate): Applied
patch from Soeren Sandmann <sandmann@daimi.au.dk>. Vertically
centers the child in relation to the to indicator height.
2001-09-18 Alex Larsson <alexl@redhat.com>
* gtk/gtkcheckbutton.c:
* gtk/gtkradiobutton.c:
Don't draw with GTK_STATE_ACTIVE.
* gtk/gtkclist.c:
* gtk/gtkctree.c:
Draw lines between rows with base_gc[GTK_STATE_NORMAL].
* gtk/gtktextdisplay.c:
Focused selection is drawn with base_gc [GTK_STATE_SELECTED] and
unfocused with base_gc [GTK_STATE_ACTIVE].
* gtk/gtkentry.c:
Add select all menu-item.
Default cursor color is red.
Focused selection is drawn with base_gc [GTK_STATE_SELECTED] and
unfocused with base_gc [GTK_STATE_ACTIVE].
* gtk/gtklabel.[ch]:
Add keynav + menu to selectable lables.
Focused selection is drawn with base_gc [GTK_STATE_SELECTED] and
unfocused with base_gc [GTK_STATE_ACTIVE].
* gtk/gtkfilesel.c:
Add drag and drop support.
* gtk/gtkstyle.c:
(This was checked in earlier)
New default values for text/base SELECTED and ACTIVE
2001-08-26 Alexander Larsson <alla@lysator.liu.se>
* gtk/gtkbutton.[ch]:
Add properties for labels, mnemonics and stock items.
Added C accessor functions for the properties.
Removed deprecated button->child.
* gtk/gtkradiobutton.c:
* gtk/gtktogglebutton.c:
Update to use the functions in GtkButton.
* gtk/gtkcheckbutton.c:
Update to use the functions in GtkButton.
Changed size allocation of child. Now only gets as much
space as it requests.
* gtk/gtkclist.c:
Don't use GtkButton->child
* gtk/gtklabel.c:
Fixed typo in docs
Wed Jul 18 19:28:46 2001 Owen Taylor <otaylor@redhat.com>
* gtk/*.c: Patch from Matthias Clasen to remove remove
all instances of g_return_if_fail (foo != NULL); that are
immediately before a g_return_if_fail (GTK_IS_FOO (foo));
since the second check catches the NULL anyways.
2001-06-05 Havoc Pennington <hp@redhat.com>
* gtk/gtkcolorsel.c: Use new mnemonic convenience functions
Applying patch from Jeff Franks, with function docs added.
* gtk/gtkcheckbutton.c (gtk_check_button_new_with_mnemonic):
remove call to set_mnemonic_widget, change docs a bit.
* gtk/gtkimagemenuitem.c (gtk_image_menu_item_new_with_mnemonic):
new function
* gtk/gtkcheckmenuitem.c (gtk_check_menu_item_new_with_mnemonic):
new function
* gtk/gtkmenuitem.c (gtk_menu_item_new_with_mnemonic): new function
* gtk/gtkradiobutton.c (gtk_radio_button_new_with_mnemonic): new
function
(gtk_radio_button_new_with_mnemonic_from_widget): new function
* gtk/gtkradiomenuitem.c (gtk_radio_menu_item_new_with_mnemonic):
new function
* gtk/gtktogglebutton.c (gtk_toggle_button_new_with_mnemonic): new
function
* gtk/gtklabel.c (gtk_label_new_with_mnemonic): Improve docs on
auto-selection of mnemonic widget.
2001-05-04 Havoc Pennington <hp@redhat.com>
* configure.in: fix some shell typos
* gtk/gtkcolorsel.c (gtk_color_selection_destroy): warning fix
* gtk/gtkimage.c: handle animations
* gtk/gtkcheckbutton.c (gtk_check_button_size_request): request
border_width * 2, not just border_width
* gtk/gtkscale.c: add "format_value" signal to allow people
to override the way values are drawn.
(gtk_scale_get_value_size): fix width/height mistake,
and compute size from actual displayed text, not
from made-up text.
* gtk/gtktexttag.c (gtk_text_tag_class_init): fix return type in
signal registration
* tests/testtext.c: Add "Remove all tags" menu item for testing
* gtk/gtktextbuffer.c (gtk_text_buffer_remove_all_tags): implement
* demos/gtk-demo/main.c (main): add hack so we can find modules
without installing gtk
* demos/gtk-demo/textview.c (insert_text): demo font scaling
* gtk/gtkcellrenderertext.c: Add "scale" property (font scaling
factor)
(gtk_cell_renderer_text_set_property): remove some bogus
g_object_notify
* gtk/gtktexttag.c: add "scale" property which is a font scaling
factor
* gtk/gtktextlayout.c (add_text_attrs): add font scale attribute
to layout
* gtk/gtktextiter.c (gtk_text_iter_is_start): rename from
gtk_text_iter_is_first
2001-05-04 Havoc Pennington <hp@redhat.com>
* pixops/pixops.c (pixops_process): merge fix from stable: Patch
from hoshem@mel.comcen.com.au to fix nonzero X offsets. Fixes
bug #50371.
* gdk-pixbuf/pixops/pixops.c (pixops_composite_nearest): merge
from stable: Patch from OKADA Mitsuru <m-okada@fjb.co.jp> to fix
confusion of using "src" instead of "p".
(pixops_composite_color_nearest): Use a more accurate (and
correct, to begin with) compositing method. This cures checks
showing through on images with no alpha.
* gdk-pixbuf.c (gdk_pixbuf_fill): fix bug that left some trailing
bytes unfilled.
* gdk-pixbuf-io.h: fix UpdatedNotifyFunc to use signed ints
* gdk-pixbuf-loader.h (struct _GdkPixbufLoaderClass): Change
area_updated signal to use signed ints. Removed animation-related
signals.
* io-gif.c, io-gif-animation.h, io-gif-animation.c: Massive
rewrite action
* gdk-pixbuf-animation.c: Add GdkPixbufAnimationIter to abstract
all the pesky details. Remove old frame-based API. Make
GdkPixbufAnimation an abstract base class, derived by the loaders.
Mon Apr 30 20:29:27 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkbutton.c gtk/gtkcheckbutton.c gtk/gtkoptionmenu.c
gtk/gtkspinbutton.c gtk/gtkstyle.c gtk/gtkwidget.c:
New default theme! A slighly improved version of the 2.0 Raleigh
theme, with Windows-esque focus/drawing default.
(GtkWidget::interior_focus defaults to TRUE.)
* gtk/gtkstyle.[ch]: Add a text_aa color halfway between text and base.
2001-03-21 Alexander Larsson <alexl@redhat.com>
* gtk/gtkbutton.[ch]:
* gtk/gtkdialog.c:
Renamed gtk_button_new_stock() to gtk_button_new_from_stock() and
removed accel_group argument. Renamed gtk_button_new_accel() to
gtk_button_new_with_mnemonic() and removed accel_group argument.
* gtk/gtkcheckbutton.[ch]:
New function gtk_check_button_new_with_mnemonic().
* gtk/gtkentry.c:
Override activate_mnemonic and just grab focus.
* gtk/gtkitemfactory.c:
Don't add menu uline accel group, instead use mnemonics support.
* gtk/gtklabel.[ch]:
New support for mnemonics.
* gtk/gtkmarshal.list:
Needed BOOLEAN:BOOLEAN for activate_mnemonic.
* gtk/gtkmenu.[c]:
* gtkmenushell.c:
Use mnemonics instead of accel groups for uline
support in menu items.
Removed gtk_menu_get_uline_accel_group() and
gtk_menu_ensure_uline_accel_group().
* gtk/gtkmenuitem.c:
Override activate_mnemonic to handle switching between
menu items if there are collisions.
* gtk/gtknotebook.c:
Connect to activate_mnemonic on the tab_label, so that
activating it switches to that notebook page.
* gtk/gtkwidget.[ch]:
Add activate_mnemonic signal. New function
gtk_widget_activate_mnemonic() to emit it.
Default implementation does activate/grab_focus.
* gtk/gtkwindow.[ch]:
Add support for mnemonics in windows.
New functions:
gtk_window_add_mnemonic, gtk_window_remove_mnemonic,
gtk_window_activate_mnemonic, gtk_window_set_mnemonic_modifier
* gtk/testgtk.c:
Update to function name changes.